diff --git a/.env b/.env index 6ac42ba97b4..3b91f44d813 100644 --- a/.env +++ b/.env @@ -1,3 +1,6 @@ VITE_BYPASS_LOGIN=0 VITE_BYPASS_TUTORIAL=0 -VITE_SERVER_URL=http://localhost:8001 \ No newline at end of file +VITE_SERVER_URL=http://localhost:8001 +VITE_DISCORD_CLIENT_ID=1248062921129459756 +VITE_GOOGLE_CLIENT_ID=955345393540-2k6lfftf0fdnb0krqmpthjnqavfvvf73.apps.googleusercontent.com +VITE_I18N_DEBUG=0 diff --git a/.env.beta b/.env.beta index 8d1e93b3277..88147215258 100644 --- a/.env.beta +++ b/.env.beta @@ -1,3 +1,6 @@ VITE_BYPASS_LOGIN=0 VITE_BYPASS_TUTORIAL=0 -VITE_SERVER_URL=https://api.beta.pokerogue.net \ No newline at end of file +VITE_SERVER_URL=https://api.beta.pokerogue.net +VITE_DISCORD_CLIENT_ID=1248062921129459756 +VITE_GOOGLE_CLIENT_ID=955345393540-2k6lfftf0fdnb0krqmpthjnqavfvvf73.apps.googleusercontent.com +VITE_I18N_DEBUG=1 diff --git a/.env.development b/.env.development index e9180f0875d..6c92036270f 100644 --- a/.env.development +++ b/.env.development @@ -1,3 +1,7 @@ VITE_BYPASS_LOGIN=1 VITE_BYPASS_TUTORIAL=0 -VITE_SERVER_URL=http://localhost:8001 \ No newline at end of file +VITE_SERVER_URL=http://localhost:8001 +VITE_DISCORD_CLIENT_ID=1234567890 +VITE_GOOGLE_CLIENT_ID=1234567890 +VITE_I18N_DEBUG=1 +VITE_PORT=8000 diff --git a/.env.production b/.env.production index 74818d41a12..65dc7875902 100644 --- a/.env.production +++ b/.env.production @@ -1,3 +1,6 @@ VITE_BYPASS_LOGIN=0 VITE_BYPASS_TUTORIAL=0 -VITE_SERVER_URL=https://api.pokerogue.net \ No newline at end of file +VITE_SERVER_URL=https://api.pokerogue.net +VITE_DISCORD_CLIENT_ID=1248062921129459756 +VITE_GOOGLE_CLIENT_ID=955345393540-2k6lfftf0fdnb0krqmpthjnqavfvvf73.apps.googleusercontent.com +VITE_I18N_DEBUG=0 \ No newline at end of file diff --git a/.env.test b/.env.test new file mode 100644 index 00000000000..54d5bd6f257 --- /dev/null +++ b/.env.test @@ -0,0 +1 @@ +VITE_I18N_DEBUG=0 \ No newline at end of file diff --git a/.github/workflows/deploy-beta.yml b/.github/workflows/deploy-beta.yml index d954d9bb865..3af48b400af 100644 --- a/.github/workflows/deploy-beta.yml +++ b/.github/workflows/deploy-beta.yml @@ -1,8 +1,9 @@ name: Deploy Beta on: - push: {} - pull_request: {} + push: + branches: + - beta jobs: deploy: @@ -20,7 +21,6 @@ jobs: env: NODE_ENV: production - name: Set up SSH - if: github.event_name == 'push' && github.ref_name == github.event.repository.default_branch run: | mkdir ~/.ssh echo "${{ secrets.BETA_SSH_PUBLIC_KEY }}" > ~/.ssh/id_ed25519.pub @@ -28,6 +28,5 @@ jobs: chmod 600 ~/.ssh/* ssh-keyscan -H ${{ secrets.BETA_SSH_HOST }} >> ~/.ssh/known_hosts - name: Deploy build on server - if: github.event_name == 'push' && github.ref_name == github.event.repository.default_branch run: | rsync --del --no-times --checksum -vrm dist/* ${{ secrets.BETA_SSH_USER }}@${{ secrets.BETA_SSH_HOST }}:${{ secrets.BETA_DESTINATION_DIR }} \ No newline at end of file diff --git a/.github/workflows/eslint.yml b/.github/workflows/eslint.yml index 32c0ca7707a..9068f1ae9a2 100644 --- a/.github/workflows/eslint.yml +++ b/.github/workflows/eslint.yml @@ -6,9 +6,11 @@ on: push: branches: - main # Trigger on push events to the main branch + - beta # Trigger on push events to the beta branch pull_request: branches: - main # Trigger on pull request events targeting the main branch + - beta # Trigger on pull request events targeting the beta branch jobs: run-linters: # Define a job named "run-linters" diff --git a/.github/workflows/github-pages.yml b/.github/workflows/github-pages.yml index ce52e8d9772..3b7617c45f4 100644 --- a/.github/workflows/github-pages.yml +++ b/.github/workflows/github-pages.yml @@ -7,6 +7,7 @@ on: pull_request: branches: - main + - beta jobs: pages: @@ -52,7 +53,7 @@ jobs: working-directory: ${{env.api-dir}} run: | cd pokerogue_docs - npx typedoc --out /tmp/docs --githubPages false --entryPoints ./src/ + npm run docs -- --out /tmp/docs --githubPages false --entryPoints ./src/ - name: Commit & Push docs if: github.event_name == 'push' diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index c1c32a95cd6..9ce1d1c5038 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -6,9 +6,11 @@ on: push: branches: - main # Trigger on push events to the main branch + - beta # Trigger on push events to the beta branch pull_request: branches: - main # Trigger on pull request events targeting the main branch + - beta # Trigger on pull request events targeting the beta branch jobs: run-tests: # Define a job named "run-tests" diff --git a/README.md b/README.md index b3b36bd3af9..ade4adc2c59 100644 --- a/README.md +++ b/README.md @@ -1,10 +1,10 @@ PokéRogue -PokéRogue is a browser based Pokémon fangame heavily inspired by the roguelite genre. Battle endlessly while gathering stacking items, exploring many different biomes, fighting trainers, bosses, and more! +PokéRogue is a browser based Pokémon fangame heavily inspired by the roguelite genre. Battle endlessly while gathering stacking items, exploring many different biomes, fighting trainers, bosses, and more! # Contributing ## 🛠️ Development -If you have the motivation and experience with Typescript/Javascript (or are willing to learn) please feel free to fork the repository and make pull requests with contributions. If you don't know what to work on but want to help, reference the below **To-Do** section or the **#feature-vote** channel in the discord. +If you have the motivation and experience with Typescript/Javascript (or are willing to learn) please feel free to fork the repository and make pull requests with contributions. If you don't know what to work on but want to help, reference the below **To-Do** section or the **#feature-vote** channel in the discord. ### 💻 Environment Setup #### Prerequisites @@ -17,9 +17,9 @@ If you have the motivation and experience with Typescript/Javascript (or are wil 2. Run `npm run start:dev` to locally run the project in `localhost:8000` #### Linting -We're using ESLint as our common linter and formatter. It will run automatically during the pre-commit hook but if you would like to manually run it, use the `npm run eslint` script. +We're using ESLint as our common linter and formatter. It will run automatically during the pre-commit hook but if you would like to manually run it, use the `npm run eslint` script. -### ❔ FAQ +### ❔ FAQ **How do I test a new _______?** - In the `src/overrides.ts` file there are overrides for most values you'll need to change for testing @@ -56,6 +56,7 @@ Check out [Github Issues](https://github.com/pagefaultgames/pokerogue/issues) to - Pokémon Scarlet/Violet - Firel (Custom Laboratory, Metropolis, Seabed, and Space biome music) - Lmz (Custom Jungle biome music) + - Andr06 (Custom Slum and Sea biome music) ### 🎵 Sound Effects - Pokémon Emerald diff --git a/package-lock.json b/package-lock.json index 638a173d7e2..71de51abb35 100644 --- a/package-lock.json +++ b/package-lock.json @@ -35,8 +35,8 @@ "lefthook": "^1.6.12", "phaser3spectorjs": "^0.0.8", "pokenode-ts": "^1.20.0", - "typedoc": "^0.25.13", - "typescript": "^5.4.5", + "typedoc": "^0.26.4", + "typescript": "^5.5.3", "typescript-eslint": "^7.10.0", "vite": "^4.5.0", "vite-plugin-fs": "^0.4.4", @@ -1179,6 +1179,16 @@ "win32" ] }, + "node_modules/@shikijs/core": { + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-1.10.3.tgz", + "integrity": "sha512-D45PMaBaeDHxww+EkcDQtDAtzv00Gcsp72ukBtaLSmqRvh0WgGMq3Al0rl1QQBZfuneO75NXMIzEZGFitThWbg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.4" + } + }, "node_modules/@sinclair/typebox": { "version": "0.27.8", "resolved": "https://registry.npmjs.org/@sinclair/typebox/-/typebox-0.27.8.tgz", @@ -1191,6 +1201,16 @@ "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", "dev": true }, + "node_modules/@types/hast": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/hast/-/hast-3.0.4.tgz", + "integrity": "sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/unist": "*" + } + }, "node_modules/@types/jsdom": { "version": "21.1.7", "resolved": "https://registry.npmjs.org/@types/jsdom/-/jsdom-21.1.7.tgz", @@ -1220,6 +1240,13 @@ "resolved": "https://registry.npmjs.org/@types/tough-cookie/-/tough-cookie-4.0.5.tgz", "integrity": "sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==" }, + "node_modules/@types/unist": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.2.tgz", + "integrity": "sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==", + "dev": true, + "license": "MIT" + }, "node_modules/@typescript-eslint/eslint-plugin": { "version": "7.10.0", "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-7.10.0.tgz", @@ -1706,12 +1733,6 @@ "node": ">=8" } }, - "node_modules/ansi-sequence-parser": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/ansi-sequence-parser/-/ansi-sequence-parser-1.1.1.tgz", - "integrity": "sha512-vJXt3yiaUL4UU546s3rPXlsry/RnM730G1+HkpKE012AN0sx1eOrxSu95oKDIonskeLTijMgqWZ3uDEe3NFvyg==", - "dev": true - }, "node_modules/ansi-styles": { "version": "3.2.1", "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", @@ -4614,12 +4635,6 @@ "node": ">=6" } }, - "node_modules/jsonc-parser": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.1.tgz", - "integrity": "sha512-AilxAyFOAcK5wA1+LeaySVBrHsGQvUFCDWXKpZjzaL0PqW+xfBOttn8GNtWKFWqneyMZj41MWF9Kl6iPWLwgOA==", - "dev": true - }, "node_modules/jsonify": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.1.tgz", @@ -4884,6 +4899,16 @@ "node": ">= 0.8.0" } }, + "node_modules/linkify-it": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/linkify-it/-/linkify-it-5.0.0.tgz", + "integrity": "sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "uc.micro": "^2.0.0" + } + }, "node_modules/local-pkg": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-0.5.0.tgz", @@ -4985,18 +5010,31 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/marked": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/marked/-/marked-4.3.0.tgz", - "integrity": "sha512-PRsaiG84bK+AMvxziE/lCFss8juXjNaWzVbN5tXAm4XjeaS9NAHhop+PjQxz2A9h8Q4M/xGmzP8vqNwy6JeK0A==", + "node_modules/markdown-it": { + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/markdown-it/-/markdown-it-14.1.0.tgz", + "integrity": "sha512-a54IwgWPaeBCAAsv13YgmALOF1elABB08FxO9i+r4VFk5Vl4pKokRPeX8u5TCgSsPi6ec1otfLjdOpVcgbpshg==", "dev": true, - "bin": { - "marked": "bin/marked.js" + "license": "MIT", + "dependencies": { + "argparse": "^2.0.1", + "entities": "^4.4.0", + "linkify-it": "^5.0.0", + "mdurl": "^2.0.0", + "punycode.js": "^2.3.1", + "uc.micro": "^2.1.0" }, - "engines": { - "node": ">= 12" + "bin": { + "markdown-it": "bin/markdown-it.mjs" } }, + "node_modules/mdurl": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-2.0.0.tgz", + "integrity": "sha512-Lf+9+2r+Tdp5wXDXC4PcIBjTDtq4UKjCPMQhKIuzpJNW0b96kVqSwW0bT7FhRSfmAiFYgP+SCRvdrDozfh0U5w==", + "dev": true, + "license": "MIT" + }, "node_modules/media-typer": { "version": "0.3.0", "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", @@ -5725,6 +5763,16 @@ "node": ">=6" } }, + "node_modules/punycode.js": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/punycode.js/-/punycode.js-2.3.1.tgz", + "integrity": "sha512-uxFIHU0YlHYhDQtV4R9J6a52SLx28BCjT+4ieh7IGbgwVJWO+km431c4yRlREUAsAmt/uMjQUyQHNEPf0M39CA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/qs": { "version": "6.12.1", "resolved": "https://registry.npmjs.org/qs/-/qs-6.12.1.tgz", @@ -6145,15 +6193,14 @@ } }, "node_modules/shiki": { - "version": "0.14.7", - "resolved": "https://registry.npmjs.org/shiki/-/shiki-0.14.7.tgz", - "integrity": "sha512-dNPAPrxSc87ua2sKJ3H5dQ/6ZaY8RNnaAqK+t0eG7p0Soi2ydiqbGOTaZCqaYvA/uZYfS1LJnemt3Q+mSfcPCg==", + "version": "1.10.3", + "resolved": "https://registry.npmjs.org/shiki/-/shiki-1.10.3.tgz", + "integrity": "sha512-eneCLncGuvPdTutJuLyUGS8QNPAVFO5Trvld2wgEq1e002mwctAhJKeMGWtWVXOIEzmlcLRqcgPSorR6AVzOmQ==", "dev": true, + "license": "MIT", "dependencies": { - "ansi-sequence-parser": "^1.1.0", - "jsonc-parser": "^3.2.0", - "vscode-oniguruma": "^1.7.0", - "vscode-textmate": "^8.0.0" + "@shikijs/core": "1.10.3", + "@types/hast": "^3.0.4" } }, "node_modules/side-channel": { @@ -6770,24 +6817,26 @@ } }, "node_modules/typedoc": { - "version": "0.25.13", - "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.25.13.tgz", - "integrity": "sha512-pQqiwiJ+Z4pigfOnnysObszLiU3mVLWAExSPf+Mu06G/qsc3wzbuM56SZQvONhHLncLUhYzOVkjFFpFfL5AzhQ==", + "version": "0.26.4", + "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.26.4.tgz", + "integrity": "sha512-FlW6HpvULDKgc3rK04V+nbFyXogPV88hurarDPOjuuB5HAwuAlrCMQ5NeH7Zt68a/ikOKu6Z/0hFXAeC9xPccQ==", "dev": true, + "license": "Apache-2.0", "dependencies": { "lunr": "^2.3.9", - "marked": "^4.3.0", - "minimatch": "^9.0.3", - "shiki": "^0.14.7" + "markdown-it": "^14.1.0", + "minimatch": "^9.0.5", + "shiki": "^1.9.1", + "yaml": "^2.4.5" }, "bin": { "typedoc": "bin/typedoc" }, "engines": { - "node": ">= 16" + "node": ">= 18" }, "peerDependencies": { - "typescript": "4.6.x || 4.7.x || 4.8.x || 4.9.x || 5.0.x || 5.1.x || 5.2.x || 5.3.x || 5.4.x" + "typescript": "4.6.x || 4.7.x || 4.8.x || 4.9.x || 5.0.x || 5.1.x || 5.2.x || 5.3.x || 5.4.x || 5.5.x" } }, "node_modules/typedoc/node_modules/brace-expansion": { @@ -6795,15 +6844,17 @@ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" } }, "node_modules/typedoc/node_modules/minimatch": { - "version": "9.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", - "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -6815,10 +6866,11 @@ } }, "node_modules/typescript": { - "version": "5.4.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz", - "integrity": "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==", + "version": "5.5.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.3.tgz", + "integrity": "sha512-/hreyEujaB0w76zKo6717l3L0o/qEUtRgdvUBvlkhoWeOVMjMuHNHk0BRBzikzuGDqNmPQbg5ifMEqsHLiIUcQ==", "dev": true, + "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -6853,6 +6905,13 @@ } } }, + "node_modules/uc.micro": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/uc.micro/-/uc.micro-2.1.0.tgz", + "integrity": "sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==", + "dev": true, + "license": "MIT" + }, "node_modules/ufo": { "version": "1.5.3", "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.5.3.tgz", @@ -8162,18 +8221,6 @@ } } }, - "node_modules/vscode-oniguruma": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/vscode-oniguruma/-/vscode-oniguruma-1.7.0.tgz", - "integrity": "sha512-L9WMGRfrjOhgHSdOYgCt/yRMsXzLDJSL7BPrOZt73gU0iWO4mpqzqQzOz5srxqTvMBaR0XZTSrVWo4j55Rc6cA==", - "dev": true - }, - "node_modules/vscode-textmate": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/vscode-textmate/-/vscode-textmate-8.0.0.tgz", - "integrity": "sha512-AFbieoL7a5LMqcnOF04ji+rpXadgOXnZsxQr//r83kLPr7biP7am3g9zbaZIaBGwBRWeSvoMD4mgPdX3e4NWBg==", - "dev": true - }, "node_modules/w3c-xmlserializer": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-5.0.0.tgz", @@ -8414,6 +8461,19 @@ "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", "dev": true }, + "node_modules/yaml": { + "version": "2.4.5", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.4.5.tgz", + "integrity": "sha512-aBx2bnqDzVOyNKfsysjA2ms5ZlnjSAW2eG3/L5G/CSujfjLJTJsEw1bGw8kCf04KodQWk1pxlGnZ56CRxiawmg==", + "dev": true, + "license": "ISC", + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14" + } + }, "node_modules/yargs": { "version": "17.7.2", "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", diff --git a/package.json b/package.json index 160ca965bc8..612321906eb 100644 --- a/package.json +++ b/package.json @@ -9,10 +9,10 @@ "build": "vite build", "build:beta": "vite build --mode beta", "preview": "vite preview", - "test": "vitest run", - "test:cov": "vitest run --coverage", - "test:watch": "vitest watch --coverage", - "test:silent": "vitest run --silent", + "test": "vitest run --project pre && vitest run --project main", + "test:cov": "vitest run --project pre && vitest run --project main --coverage", + "test:watch": "vitest run --project pre && vitest watch --project main --coverage", + "test:silent": "vitest run --project pre && vitest run --project main --silent", "eslint": "eslint --fix .", "eslint-ci": "eslint .", "docs": "typedoc", @@ -34,8 +34,8 @@ "lefthook": "^1.6.12", "phaser3spectorjs": "^0.0.8", "pokenode-ts": "^1.20.0", - "typedoc": "^0.25.13", - "typescript": "^5.4.5", + "typedoc": "^0.26.4", + "typescript": "^5.5.3", "typescript-eslint": "^7.10.0", "vite": "^4.5.0", "vite-plugin-fs": "^0.4.4", diff --git a/public/audio/bgm/battle_rival.mp3 b/public/audio/bgm/battle_rival.mp3 index 82ff586576a..a17bc759b59 100644 Binary files a/public/audio/bgm/battle_rival.mp3 and b/public/audio/bgm/battle_rival.mp3 differ diff --git a/public/audio/bgm/sea.mp3 b/public/audio/bgm/sea.mp3 index 8bdaaa696f1..147dad0960d 100644 Binary files a/public/audio/bgm/sea.mp3 and b/public/audio/bgm/sea.mp3 differ diff --git a/public/audio/bgm/slum.mp3 b/public/audio/bgm/slum.mp3 index 1315c7838fc..5431671d0ae 100644 Binary files a/public/audio/bgm/slum.mp3 and b/public/audio/bgm/slum.mp3 differ diff --git a/public/battle-anims/muddy-water.json b/public/battle-anims/muddy-water.json index 450e767a75a..e415f1056bf 100644 --- a/public/battle-anims/muddy-water.json +++ b/public/battle-anims/muddy-water.json @@ -673,6 +673,33 @@ "focus": 1 } ], + [ + { + "x": 0, + "y": 0, + "zoomX": 100, + "zoomY": 100, + "visible": true, + "target": 0, + "graphicFrame": 0, + "opacity": 255, + "priority": 1, + "focus": 2 + }, + { + "x": 129, + "y": -64.6, + "zoomX": 100, + "zoomY": 100, + "visible": true, + "target": 1, + "graphicFrame": 0, + "opacity": 255, + "locked": true, + "priority": 1, + "focus": 1 + } + ], [ { "x": 0, @@ -688,8 +715,399 @@ "focus": 2 }, { - "x": 128, - "y": -64, + "x": 129, + "y": -64.6, + "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, + "priority": 1, + "focus": 2 + }, + { + "x": 130, + "y": -66, + "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, + "locked": true, + "priority": 1, + "focus": 2 + }, + { + "x": 130, + "y": -66, + "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, + "locked": true, + "priority": 1, + "focus": 2 + }, + { + "x": 131.6, + "y": -66.6, + "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, + "locked": true, + "priority": 1, + "focus": 2 + }, + { + "x": 131.6, + "y": -66.6, + "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, + "locked": true, + "priority": 1, + "focus": 2 + }, + { + "x": 131.6, + "y": -66.6, + "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, + "locked": true, + "priority": 1, + "focus": 2 + }, + { + "x": 132, + "y": -67, + "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, + "locked": true, + "priority": 1, + "focus": 2 + }, + { + "x": 132, + "y": -67, + "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, + "locked": true, + "priority": 1, + "focus": 2 + }, + { + "x": 132, + "y": -67, + "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, + "locked": true, + "priority": 1, + "focus": 2 + }, + { + "x": 131.6, + "y": -67, + "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, + "locked": true, + "priority": 1, + "focus": 2 + }, + { + "x": 131.6, + "y": -66.5, + "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, + "locked": true, + "priority": 1, + "focus": 2 + }, + { + "x": 131, + "y": -66.5, + "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, + "locked": true, + "priority": 1, + "focus": 2 + }, + { + "x": 131, + "y": -66, + "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, + "locked": true, + "priority": 1, + "focus": 2 + }, + { + "x": 129, + "y": -66, + "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, + "locked": true, + "priority": 1, + "focus": 2 + }, + { + "x": 129, + "y": -64.9, "zoomX": 100, "zoomY": 100, "visible": true, @@ -717,595 +1135,7 @@ }, { "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, - "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, - "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, - "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, - "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, - "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, - "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, - "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, - "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, - "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, - "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, - "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, - "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, - "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, - "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, - "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, - "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, - "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, - "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, - "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, - "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, - "locked": true, - "priority": 1, - "focus": 2 - }, - { - "x": 128, - "y": -64, + "y": -64.3, "zoomX": 100, "zoomY": 100, "visible": true, @@ -1382,6 +1212,41 @@ "volume": 100, "pitch": 100, "eventType": "AnimTimedSoundEvent" + }, + { + "frameIndex": 0, + "resourceName": "PRAS- Muddy Water FG", + "bgX": -10, + "bgY": 365, + "opacity": 0, + "duration": 2, + "eventType": "AnimTimedAddBgEvent" + }, + { + "frameIndex": 0, + "resourceName": "", + "bgX": 400, + "bgY": 340, + "duration": 45, + "eventType": "AnimTimedUpdateBgEvent" + } + ], + "1": [ + { + "frameIndex": 1, + "resourceName": "", + "opacity": 200, + "duration": 6, + "eventType": "AnimTimedUpdateBgEvent" + } + ], + "30": [ + { + "frameIndex": 30, + "resourceName": "", + "opacity": 0, + "duration": 15, + "eventType": "AnimTimedUpdateBgEvent" } ] }, @@ -2510,230 +2375,6 @@ "focus": 1 } ], - [ - { - "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": 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": 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": 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": 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": 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": 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": 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, @@ -2771,10 +2412,45 @@ "volume": 100, "pitch": 100, "eventType": "AnimTimedSoundEvent" + }, + { + "frameIndex": 0, + "resourceName": "PRAS- Muddy Water FG Opp", + "bgX": -50, + "bgY": 0, + "opacity": 0, + "duration": 2, + "eventType": "AnimTimedAddBgEvent" + }, + { + "frameIndex": 0, + "resourceName": "", + "bgX": -600, + "bgY": 200, + "duration": 45, + "eventType": "AnimTimedUpdateBgEvent" + } + ], + "1": [ + { + "frameIndex": 1, + "resourceName": "", + "opacity": 200, + "duration": 6, + "eventType": "AnimTimedUpdateBgEvent" + } + ], + "30": [ + { + "frameIndex": 30, + "resourceName": "", + "opacity": 0, + "duration": 15, + "eventType": "AnimTimedUpdateBgEvent" } ] }, "position": 4, "hue": 0 } -] \ No newline at end of file +] diff --git a/public/battle-anims/sludge-wave.json b/public/battle-anims/sludge-wave.json index 4fe008da80d..a51cfd51ac5 100644 --- a/public/battle-anims/sludge-wave.json +++ b/public/battle-anims/sludge-wave.json @@ -1149,202 +1149,6 @@ "focus": 1 } ], - [ - { - "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": 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": 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": 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": 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": 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": 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, @@ -1382,6 +1186,41 @@ "volume": 100, "pitch": 100, "eventType": "AnimTimedSoundEvent" + }, + { + "frameIndex": 0, + "resourceName": "PRAS- Sludge Wave FG", + "bgX": -10, + "bgY": 365, + "opacity": 0, + "duration": 2, + "eventType": "AnimTimedAddBgEvent" + }, + { + "frameIndex": 0, + "resourceName": "", + "bgX": 400, + "bgY": 340, + "duration": 45, + "eventType": "AnimTimedUpdateBgEvent" + } + ], + "1": [ + { + "frameIndex": 1, + "resourceName": "", + "opacity": 200, + "duration": 6, + "eventType": "AnimTimedUpdateBgEvent" + } + ], + "30": [ + { + "frameIndex": 30, + "resourceName": "", + "opacity": 0, + "duration": 15, + "eventType": "AnimTimedUpdateBgEvent" } ] }, @@ -2538,202 +2377,6 @@ "focus": 1 } ], - [ - { - "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": 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": 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": 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": 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": 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": 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, @@ -2771,10 +2414,45 @@ "volume": 100, "pitch": 100, "eventType": "AnimTimedSoundEvent" + }, + { + "frameIndex": 0, + "resourceName": "PRAS- Sludge Wave FG Opp", + "bgX": -50, + "bgY": 0, + "opacity": 0, + "duration": 2, + "eventType": "AnimTimedAddBgEvent" + }, + { + "frameIndex": 0, + "resourceName": "", + "bgX": -600, + "bgY": 200, + "duration": 45, + "eventType": "AnimTimedUpdateBgEvent" + } + ], + "1": [ + { + "frameIndex": 1, + "resourceName": "", + "opacity": 200, + "duration": 6, + "eventType": "AnimTimedUpdateBgEvent" + } + ], + "30": [ + { + "frameIndex": 30, + "resourceName": "", + "opacity": 0, + "duration": 15, + "eventType": "AnimTimedUpdateBgEvent" } ] }, "position": 4, "hue": 0 } -] \ No newline at end of file +] diff --git a/public/battle-anims/surf.json b/public/battle-anims/surf.json index e5a7fe45f46..99718798bb5 100644 --- a/public/battle-anims/surf.json +++ b/public/battle-anims/surf.json @@ -1186,6 +1186,41 @@ "volume": 100, "pitch": 100, "eventType": "AnimTimedSoundEvent" + }, + { + "frameIndex": 0, + "resourceName": "PRAS- Surf FG", + "bgX": -10, + "bgY": 365, + "opacity": 0, + "duration": 2, + "eventType": "AnimTimedAddBgEvent" + }, + { + "frameIndex": 0, + "resourceName": "", + "bgX": 400, + "bgY": 340, + "duration": 45, + "eventType": "AnimTimedUpdateBgEvent" + } + ], + "1": [ + { + "frameIndex": 1, + "resourceName": "", + "opacity": 200, + "duration": 6, + "eventType": "AnimTimedUpdateBgEvent" + } + ], + "30": [ + { + "frameIndex": 30, + "resourceName": "", + "opacity": 0, + "duration": 15, + "eventType": "AnimTimedUpdateBgEvent" } ] }, @@ -2379,10 +2414,45 @@ "volume": 100, "pitch": 100, "eventType": "AnimTimedSoundEvent" + }, + { + "frameIndex": 0, + "resourceName": "PRAS- Surf FG Opp - Copie", + "bgX": -50, + "bgY": 0, + "opacity": 0, + "duration": 2, + "eventType": "AnimTimedAddBgEvent" + }, + { + "frameIndex": 0, + "resourceName": "", + "bgX": -600, + "bgY": 200, + "duration": 45, + "eventType": "AnimTimedUpdateBgEvent" + } + ], + "1": [ + { + "frameIndex": 1, + "resourceName": "", + "opacity": 200, + "duration": 6, + "eventType": "AnimTimedUpdateBgEvent" + } + ], + "30": [ + { + "frameIndex": 30, + "resourceName": "", + "opacity": 0, + "duration": 15, + "eventType": "AnimTimedUpdateBgEvent" } ] }, "position": 4, "hue": 0 } -] \ No newline at end of file +] diff --git a/public/images/items.json b/public/images/items.json index e4fe35b4540..7f8eaf31e0b 100644 --- a/public/images/items.json +++ b/public/images/items.json @@ -4,8 +4,8 @@ "image": "items.png", "format": "RGBA8888", "size": { - "w": 423, - "h": 423 + "w": 415, + "h": 415 }, "scale": 1, "frames": [ @@ -72,48 +72,6 @@ "h": 28 } }, - { - "filename": "ribbon_gen4", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 30, - "h": 28 - }, - "frame": { - "x": 29, - "y": 27, - "w": 30, - "h": 28 - } - }, - { - "filename": "ribbon_gen2", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 2, - "y": 2, - "w": 28, - "h": 28 - }, - "frame": { - "x": 0, - "y": 58, - "w": 28, - "h": 28 - } - }, { "filename": "bronze_ribbon", "rotated": false, @@ -129,8 +87,8 @@ "h": 31 }, "frame": { - "x": 0, - "y": 86, + "x": 29, + "y": 27, "w": 22, "h": 31 } @@ -151,7 +109,7 @@ }, "frame": { "x": 0, - "y": 117, + "y": 58, "w": 22, "h": 31 } @@ -193,7 +151,7 @@ }, "frame": { "x": 0, - "y": 148, + "y": 89, "w": 22, "h": 31 } @@ -213,8 +171,8 @@ "h": 31 }, "frame": { - "x": 0, - "y": 179, + "x": 22, + "y": 58, "w": 22, "h": 31 } @@ -235,74 +193,11 @@ }, "frame": { "x": 0, - "y": 210, + "y": 120, "w": 22, "h": 31 } }, - { - "filename": "ribbon_gen3", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 1, - "w": 22, - "h": 29 - }, - "frame": { - "x": 0, - "y": 241, - "w": 22, - "h": 29 - } - }, - { - "filename": "ribbon_gen7", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 1, - "w": 22, - "h": 29 - }, - "frame": { - "x": 0, - "y": 270, - "w": 22, - "h": 29 - } - }, - { - "filename": "ribbon_gen9", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 1, - "w": 22, - "h": 29 - }, - "frame": { - "x": 0, - "y": 299, - "w": 22, - "h": 29 - } - }, { "filename": "cornerstone_mask", "rotated": false, @@ -324,69 +219,6 @@ "h": 26 } }, - { - "filename": "ribbon_gen1", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 2, - "w": 22, - "h": 28 - }, - "frame": { - "x": 0, - "y": 328, - "w": 22, - "h": 28 - } - }, - { - "filename": "ribbon_gen5", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 2, - "w": 22, - "h": 28 - }, - "frame": { - "x": 0, - "y": 356, - "w": 22, - "h": 28 - } - }, - { - "filename": "ribbon_gen6", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 2, - "w": 22, - "h": 28 - }, - "frame": { - "x": 0, - "y": 384, - "w": 22, - "h": 28 - } - }, { "filename": "ability_charm", "rotated": false, @@ -555,6 +387,132 @@ "h": 21 } }, + { + "filename": "exp_charm", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 1, + "w": 17, + "h": 31 + }, + "frame": { + "x": 22, + "y": 89, + "w": 17, + "h": 31 + } + }, + { + "filename": "golden_exp_charm", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 1, + "w": 17, + "h": 31 + }, + "frame": { + "x": 0, + "y": 151, + "w": 17, + "h": 31 + } + }, + { + "filename": "super_exp_charm", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 1, + "w": 17, + "h": 31 + }, + "frame": { + "x": 22, + "y": 120, + "w": 17, + "h": 31 + } + }, + { + "filename": "black_augurite", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 3, + "w": 22, + "h": 25 + }, + "frame": { + "x": 17, + "y": 151, + "w": 22, + "h": 25 + } + }, + { + "filename": "prison_bottle", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 1, + "w": 17, + "h": 30 + }, + "frame": { + "x": 0, + "y": 182, + "w": 17, + "h": 30 + } + }, + { + "filename": "big_root", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 4, + "w": 23, + "h": 24 + }, + "frame": { + "x": 17, + "y": 176, + "w": 23, + "h": 24 + } + }, { "filename": "chipped_pot", "rotated": false, @@ -618,195 +576,6 @@ "h": 20 } }, - { - "filename": "calcium", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 4, - "w": 16, - "h": 24 - }, - "frame": { - "x": 407, - "y": 0, - "w": 16, - "h": 24 - } - }, - { - "filename": "relic_gold", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 9, - "y": 11, - "w": 15, - "h": 11 - }, - "frame": { - "x": 0, - "y": 412, - "w": 15, - "h": 11 - } - }, - { - "filename": "exp_charm", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 1, - "w": 17, - "h": 31 - }, - "frame": { - "x": 22, - "y": 86, - "w": 17, - "h": 31 - } - }, - { - "filename": "golden_exp_charm", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 1, - "w": 17, - "h": 31 - }, - "frame": { - "x": 22, - "y": 117, - "w": 17, - "h": 31 - } - }, - { - "filename": "super_exp_charm", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 1, - "w": 17, - "h": 31 - }, - "frame": { - "x": 22, - "y": 148, - "w": 17, - "h": 31 - } - }, - { - "filename": "prison_bottle", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 1, - "w": 17, - "h": 30 - }, - "frame": { - "x": 22, - "y": 179, - "w": 17, - "h": 30 - } - }, - { - "filename": "ribbon_gen8", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 2, - "w": 22, - "h": 28 - }, - "frame": { - "x": 22, - "y": 209, - "w": 22, - "h": 28 - } - }, - { - "filename": "black_augurite", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 3, - "w": 22, - "h": 25 - }, - "frame": { - "x": 22, - "y": 237, - "w": 22, - "h": 25 - } - }, - { - "filename": "big_root", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 23, - "h": 24 - }, - "frame": { - "x": 22, - "y": 262, - "w": 23, - "h": 24 - } - }, { "filename": "blank_plate", "rotated": false, @@ -822,8 +591,8 @@ "h": 24 }, "frame": { - "x": 22, - "y": 286, + "x": 0, + "y": 212, "w": 24, "h": 24 } @@ -843,8 +612,8 @@ "h": 24 }, "frame": { - "x": 22, - "y": 310, + "x": 0, + "y": 236, "w": 24, "h": 24 } @@ -864,8 +633,8 @@ "h": 24 }, "frame": { - "x": 22, - "y": 334, + "x": 0, + "y": 260, "w": 24, "h": 24 } @@ -885,8 +654,8 @@ "h": 24 }, "frame": { - "x": 22, - "y": 358, + "x": 0, + "y": 284, "w": 24, "h": 24 } @@ -906,117 +675,12 @@ "h": 24 }, "frame": { - "x": 22, - "y": 382, + "x": 0, + "y": 308, "w": 24, "h": 24 } }, - { - "filename": "black_glasses", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 8, - "w": 23, - "h": 17 - }, - "frame": { - "x": 22, - "y": 406, - "w": 23, - "h": 17 - } - }, - { - "filename": "burn_drive", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 8, - "w": 23, - "h": 17 - }, - "frame": { - "x": 45, - "y": 406, - "w": 23, - "h": 17 - } - }, - { - "filename": "ability_capsule", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 9, - "w": 24, - "h": 14 - }, - "frame": { - "x": 135, - "y": 22, - "w": 24, - "h": 14 - } - }, - { - "filename": "choice_specs", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 8, - "w": 24, - "h": 18 - }, - "frame": { - "x": 29, - "y": 55, - "w": 24, - "h": 18 - } - }, - { - "filename": "carbos", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 4, - "w": 16, - "h": 24 - }, - "frame": { - "x": 59, - "y": 27, - "w": 16, - "h": 24 - } - }, { "filename": "fist_plate", "rotated": false, @@ -1032,8 +696,8 @@ "h": 24 }, "frame": { - "x": 75, - "y": 26, + "x": 0, + "y": 332, "w": 24, "h": 24 } @@ -1053,75 +717,12 @@ "h": 24 }, "frame": { - "x": 99, - "y": 26, + "x": 0, + "y": 356, "w": 24, "h": 24 } }, - { - "filename": "revive", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 10, - "y": 8, - "w": 12, - "h": 17 - }, - "frame": { - "x": 123, - "y": 26, - "w": 12, - "h": 17 - } - }, - { - "filename": "clefairy_doll", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 5, - "w": 24, - "h": 23 - }, - "frame": { - "x": 135, - "y": 36, - "w": 24, - "h": 23 - } - }, - { - "filename": "catching_charm", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 4, - "w": 21, - "h": 24 - }, - "frame": { - "x": 159, - "y": 22, - "w": 21, - "h": 24 - } - }, { "filename": "focus_band", "rotated": false, @@ -1137,12 +738,54 @@ "h": 24 }, "frame": { - "x": 180, - "y": 21, + "x": 0, + "y": 380, "w": 24, "h": 24 } }, + { + "filename": "relic_gold", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 9, + "y": 11, + "w": 15, + "h": 11 + }, + "frame": { + "x": 0, + "y": 404, + "w": 15, + "h": 11 + } + }, + { + "filename": "calcium", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 4, + "w": 16, + "h": 24 + }, + "frame": { + "x": 51, + "y": 27, + "w": 16, + "h": 24 + } + }, { "filename": "golden_punch", "rotated": false, @@ -1158,8 +801,8 @@ "h": 24 }, "frame": { - "x": 204, - "y": 21, + "x": 67, + "y": 26, "w": 24, "h": 24 } @@ -1179,12 +822,33 @@ "h": 24 }, "frame": { - "x": 228, - "y": 21, + "x": 91, + "y": 26, "w": 24, "h": 24 } }, + { + "filename": "catching_charm", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 4, + "w": 21, + "h": 24 + }, + "frame": { + "x": 115, + "y": 26, + "w": 21, + "h": 24 + } + }, { "filename": "grip_claw", "rotated": false, @@ -1200,12 +864,117 @@ "h": 24 }, "frame": { - "x": 252, - "y": 21, + "x": 136, + "y": 22, "w": 24, "h": 24 } }, + { + "filename": "carbos", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 4, + "w": 16, + "h": 24 + }, + "frame": { + "x": 44, + "y": 58, + "w": 16, + "h": 24 + } + }, + { + "filename": "elixir", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 4, + "w": 18, + "h": 24 + }, + "frame": { + "x": 39, + "y": 89, + "w": 18, + "h": 24 + } + }, + { + "filename": "ether", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 4, + "w": 18, + "h": 24 + }, + "frame": { + "x": 39, + "y": 113, + "w": 18, + "h": 24 + } + }, + { + "filename": "full_restore", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 4, + "w": 18, + "h": 24 + }, + "frame": { + "x": 39, + "y": 137, + "w": 18, + "h": 24 + } + }, + { + "filename": "silver_powder", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 11, + "w": 24, + "h": 15 + }, + "frame": { + "x": 39, + "y": 161, + "w": 24, + "h": 15 + } + }, { "filename": "icicle_plate", "rotated": false, @@ -1221,8 +990,8 @@ "h": 24 }, "frame": { - "x": 276, - "y": 21, + "x": 40, + "y": 176, "w": 24, "h": 24 } @@ -1242,12 +1011,621 @@ "h": 24 }, "frame": { - "x": 300, + "x": 24, + "y": 200, + "w": 24, + "h": 24 + } + }, + { + "filename": "iron_plate", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 4, + "w": 24, + "h": 24 + }, + "frame": { + "x": 24, + "y": 224, + "w": 24, + "h": 24 + } + }, + { + "filename": "lucky_punch", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 4, + "w": 24, + "h": 24 + }, + "frame": { + "x": 24, + "y": 248, + "w": 24, + "h": 24 + } + }, + { + "filename": "lucky_punch_great", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 4, + "w": 24, + "h": 24 + }, + "frame": { + "x": 24, + "y": 272, + "w": 24, + "h": 24 + } + }, + { + "filename": "lucky_punch_master", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 4, + "w": 24, + "h": 24 + }, + "frame": { + "x": 24, + "y": 296, + "w": 24, + "h": 24 + } + }, + { + "filename": "lucky_punch_ultra", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 4, + "w": 24, + "h": 24 + }, + "frame": { + "x": 24, + "y": 320, + "w": 24, + "h": 24 + } + }, + { + "filename": "lustrous_globe", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 4, + "w": 24, + "h": 24 + }, + "frame": { + "x": 24, + "y": 344, + "w": 24, + "h": 24 + } + }, + { + "filename": "meadow_plate", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 4, + "w": 24, + "h": 24 + }, + "frame": { + "x": 24, + "y": 368, + "w": 24, + "h": 24 + } + }, + { + "filename": "clefairy_doll", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 5, + "w": 24, + "h": 23 + }, + "frame": { + "x": 24, + "y": 392, + "w": 24, + "h": 23 + } + }, + { + "filename": "hp_up", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 4, + "w": 16, + "h": 24 + }, + "frame": { + "x": 48, + "y": 200, + "w": 16, + "h": 24 + } + }, + { + "filename": "iron", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 4, + "w": 16, + "h": 24 + }, + "frame": { + "x": 48, + "y": 224, + "w": 16, + "h": 24 + } + }, + { + "filename": "kings_rock", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 4, + "w": 23, + "h": 24 + }, + "frame": { + "x": 48, + "y": 248, + "w": 23, + "h": 24 + } + }, + { + "filename": "mind_plate", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 4, + "w": 24, + "h": 24 + }, + "frame": { + "x": 48, + "y": 272, + "w": 24, + "h": 24 + } + }, + { + "filename": "muscle_band", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 4, + "w": 24, + "h": 24 + }, + "frame": { + "x": 48, + "y": 296, + "w": 24, + "h": 24 + } + }, + { + "filename": "pixie_plate", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 4, + "w": 24, + "h": 24 + }, + "frame": { + "x": 48, + "y": 320, + "w": 24, + "h": 24 + } + }, + { + "filename": "salac_berry", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 4, + "w": 24, + "h": 24 + }, + "frame": { + "x": 48, + "y": 344, + "w": 24, + "h": 24 + } + }, + { + "filename": "scanner", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 4, + "w": 24, + "h": 24 + }, + "frame": { + "x": 48, + "y": 368, + "w": 24, + "h": 24 + } + }, + { + "filename": "coin_case", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 5, + "w": 24, + "h": 23 + }, + "frame": { + "x": 48, + "y": 392, + "w": 24, + "h": 23 + } + }, + { + "filename": "ability_capsule", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 9, + "w": 24, + "h": 14 + }, + "frame": { + "x": 136, + "y": 46, + "w": 24, + "h": 14 + } + }, + { + "filename": "lure", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 4, + "w": 17, + "h": 24 + }, + "frame": { + "x": 160, + "y": 22, + "w": 17, + "h": 24 + } + }, + { + "filename": "silk_scarf", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 4, + "w": 24, + "h": 24 + }, + "frame": { + "x": 177, "y": 21, "w": 24, "h": 24 } }, + { + "filename": "sky_plate", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 4, + "w": 24, + "h": 24 + }, + "frame": { + "x": 201, + "y": 21, + "w": 24, + "h": 24 + } + }, + { + "filename": "splash_plate", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 4, + "w": 24, + "h": 24 + }, + "frame": { + "x": 225, + "y": 21, + "w": 24, + "h": 24 + } + }, + { + "filename": "spooky_plate", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 4, + "w": 24, + "h": 24 + }, + "frame": { + "x": 249, + "y": 21, + "w": 24, + "h": 24 + } + }, + { + "filename": "stone_plate", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 4, + "w": 24, + "h": 24 + }, + "frame": { + "x": 273, + "y": 21, + "w": 24, + "h": 24 + } + }, + { + "filename": "sun_stone", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 4, + "w": 24, + "h": 24 + }, + "frame": { + "x": 297, + "y": 21, + "w": 24, + "h": 24 + } + }, + { + "filename": "max_elixir", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 4, + "w": 18, + "h": 24 + }, + "frame": { + "x": 321, + "y": 21, + "w": 18, + "h": 24 + } + }, + { + "filename": "toxic_plate", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 4, + "w": 24, + "h": 24 + }, + "frame": { + "x": 339, + "y": 20, + "w": 24, + "h": 24 + } + }, + { + "filename": "zap_plate", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 4, + "w": 24, + "h": 24 + }, + "frame": { + "x": 363, + "y": 20, + "w": 24, + "h": 24 + } + }, + { + "filename": "max_revive", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 4, + "w": 22, + "h": 24 + }, + "frame": { + "x": 387, + "y": 20, + "w": 22, + "h": 24 + } + }, { "filename": "adamant_crystal", "rotated": false, @@ -1263,14 +1641,14 @@ "h": 21 }, "frame": { - "x": 159, + "x": 160, "y": 46, "w": 23, "h": 21 } }, { - "filename": "coin_case", + "filename": "exp_balance", "rotated": false, "trimmed": true, "sourceSize": { @@ -1281,13 +1659,34 @@ "x": 4, "y": 5, "w": 24, - "h": 23 + "h": 22 }, "frame": { - "x": 182, + "x": 183, "y": 45, "w": 24, - "h": 23 + "h": 22 + } + }, + { + "filename": "exp_share", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 5, + "w": 24, + "h": 22 + }, + "frame": { + "x": 207, + "y": 45, + "w": 24, + "h": 22 } }, { @@ -1305,7 +1704,7 @@ "h": 23 }, "frame": { - "x": 206, + "x": 231, "y": 45, "w": 24, "h": 23 @@ -1326,411 +1725,12 @@ "h": 23 }, "frame": { - "x": 230, + "x": 255, "y": 45, "w": 24, "h": 23 } }, - { - "filename": "iron_plate", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 24, - "h": 24 - }, - "frame": { - "x": 254, - "y": 45, - "w": 24, - "h": 24 - } - }, - { - "filename": "lucky_punch", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 24, - "h": 24 - }, - "frame": { - "x": 278, - "y": 45, - "w": 24, - "h": 24 - } - }, - { - "filename": "kings_rock", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 4, - "w": 23, - "h": 24 - }, - "frame": { - "x": 302, - "y": 45, - "w": 23, - "h": 24 - } - }, - { - "filename": "elixir", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 4, - "w": 18, - "h": 24 - }, - "frame": { - "x": 324, - "y": 21, - "w": 18, - "h": 24 - } - }, - { - "filename": "lucky_punch_great", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 24, - "h": 24 - }, - "frame": { - "x": 342, - "y": 20, - "w": 24, - "h": 24 - } - }, - { - "filename": "lucky_punch_master", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 24, - "h": 24 - }, - "frame": { - "x": 366, - "y": 20, - "w": 24, - "h": 24 - } - }, - { - "filename": "lure", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 4, - "w": 17, - "h": 24 - }, - "frame": { - "x": 390, - "y": 20, - "w": 17, - "h": 24 - } - }, - { - "filename": "hp_up", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 4, - "w": 16, - "h": 24 - }, - "frame": { - "x": 407, - "y": 24, - "w": 16, - "h": 24 - } - }, - { - "filename": "ether", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 4, - "w": 18, - "h": 24 - }, - "frame": { - "x": 325, - "y": 45, - "w": 18, - "h": 24 - } - }, - { - "filename": "lucky_punch_ultra", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 24, - "h": 24 - }, - "frame": { - "x": 343, - "y": 44, - "w": 24, - "h": 24 - } - }, - { - "filename": "lustrous_globe", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 24, - "h": 24 - }, - "frame": { - "x": 367, - "y": 44, - "w": 24, - "h": 24 - } - }, - { - "filename": "iron", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 4, - "w": 16, - "h": 24 - }, - "frame": { - "x": 391, - "y": 44, - "w": 16, - "h": 24 - } - }, - { - "filename": "max_repel", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 4, - "w": 16, - "h": 24 - }, - "frame": { - "x": 407, - "y": 48, - "w": 16, - "h": 24 - } - }, - { - "filename": "dragon_scale", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 8, - "w": 24, - "h": 18 - }, - "frame": { - "x": 75, - "y": 50, - "w": 24, - "h": 18 - } - }, - { - "filename": "exp_balance", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 5, - "w": 24, - "h": 22 - }, - "frame": { - "x": 99, - "y": 50, - "w": 24, - "h": 22 - } - }, - { - "filename": "black_belt", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 4, - "w": 22, - "h": 23 - }, - "frame": { - "x": 53, - "y": 55, - "w": 22, - "h": 23 - } - }, - { - "filename": "exp_share", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 5, - "w": 24, - "h": 22 - }, - "frame": { - "x": 75, - "y": 68, - "w": 24, - "h": 22 - } - }, - { - "filename": "icy_reins_of_unity", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 7, - "w": 24, - "h": 20 - }, - "frame": { - "x": 99, - "y": 72, - "w": 24, - "h": 20 - } - }, - { - "filename": "meadow_plate", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 24, - "h": 24 - }, - "frame": { - "x": 123, - "y": 59, - "w": 24, - "h": 24 - } - }, { "filename": "leppa_berry", "rotated": false, @@ -1746,264 +1746,12 @@ "h": 23 }, "frame": { - "x": 123, - "y": 83, + "x": 279, + "y": 45, "w": 24, "h": 23 } }, - { - "filename": "mind_plate", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 24, - "h": 24 - }, - "frame": { - "x": 147, - "y": 67, - "w": 24, - "h": 24 - } - }, - { - "filename": "metal_powder", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 6, - "w": 24, - "h": 20 - }, - "frame": { - "x": 147, - "y": 91, - "w": 24, - "h": 20 - } - }, - { - "filename": "muscle_band", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 24, - "h": 24 - }, - "frame": { - "x": 171, - "y": 68, - "w": 24, - "h": 24 - } - }, - { - "filename": "pixie_plate", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 24, - "h": 24 - }, - "frame": { - "x": 195, - "y": 68, - "w": 24, - "h": 24 - } - }, - { - "filename": "salac_berry", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 24, - "h": 24 - }, - "frame": { - "x": 219, - "y": 68, - "w": 24, - "h": 24 - } - }, - { - "filename": "peat_block", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 5, - "w": 24, - "h": 22 - }, - "frame": { - "x": 171, - "y": 92, - "w": 24, - "h": 22 - } - }, - { - "filename": "scanner", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 24, - "h": 24 - }, - "frame": { - "x": 195, - "y": 92, - "w": 24, - "h": 24 - } - }, - { - "filename": "silk_scarf", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 24, - "h": 24 - }, - "frame": { - "x": 219, - "y": 92, - "w": 24, - "h": 24 - } - }, - { - "filename": "sky_plate", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 24, - "h": 24 - }, - "frame": { - "x": 243, - "y": 69, - "w": 24, - "h": 24 - } - }, - { - "filename": "splash_plate", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 24, - "h": 24 - }, - "frame": { - "x": 267, - "y": 69, - "w": 24, - "h": 24 - } - }, - { - "filename": "spooky_plate", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 24, - "h": 24 - }, - "frame": { - "x": 291, - "y": 69, - "w": 24, - "h": 24 - } - }, - { - "filename": "stone_plate", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 24, - "h": 24 - }, - "frame": { - "x": 315, - "y": 69, - "w": 24, - "h": 24 - } - }, { "filename": "scope_lens", "rotated": false, @@ -2019,14 +1767,14 @@ "h": 23 }, "frame": { - "x": 243, - "y": 93, + "x": 303, + "y": 45, "w": 24, "h": 23 } }, { - "filename": "sun_stone", + "filename": "berry_pouch", "rotated": false, "trimmed": true, "sourceSize": { @@ -2035,78 +1783,15 @@ }, "spriteSourceSize": { "x": 4, - "y": 4, - "w": 24, - "h": 24 + "y": 5, + "w": 23, + "h": 23 }, "frame": { - "x": 267, - "y": 93, - "w": 24, - "h": 24 - } - }, - { - "filename": "toxic_plate", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 24, - "h": 24 - }, - "frame": { - "x": 291, - "y": 93, - "w": 24, - "h": 24 - } - }, - { - "filename": "zap_plate", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 24, - "h": 24 - }, - "frame": { - "x": 315, - "y": 93, - "w": 24, - "h": 24 - } - }, - { - "filename": "full_restore", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 4, - "w": 18, - "h": 24 - }, - "frame": { - "x": 339, - "y": 69, - "w": 18, - "h": 24 + "x": 327, + "y": 45, + "w": 23, + "h": 23 } }, { @@ -2124,8 +1809,8 @@ "h": 24 }, "frame": { - "x": 357, - "y": 68, + "x": 350, + "y": 44, "w": 23, "h": 24 } @@ -2145,35 +1830,14 @@ "h": 23 }, "frame": { - "x": 380, - "y": 68, + "x": 373, + "y": 44, "w": 24, "h": 23 } }, { - "filename": "lock_capsule", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 5, - "w": 19, - "h": 22 - }, - "frame": { - "x": 404, - "y": 72, - "w": 19, - "h": 22 - } - }, - { - "filename": "max_elixir", + "filename": "max_ether", "rotated": false, "trimmed": true, "sourceSize": { @@ -2187,14 +1851,14 @@ "h": 24 }, "frame": { - "x": 339, - "y": 93, + "x": 397, + "y": 44, "w": 18, "h": 24 } }, { - "filename": "berry_pouch", + "filename": "choice_specs", "rotated": false, "trimmed": true, "sourceSize": { @@ -2203,19 +1867,40 @@ }, "spriteSourceSize": { "x": 4, - "y": 5, - "w": 23, - "h": 23 + "y": 8, + "w": 24, + "h": 18 }, "frame": { - "x": 357, - "y": 92, - "w": 23, - "h": 23 + "x": 373, + "y": 67, + "w": 24, + "h": 18 } }, { - "filename": "quick_powder", + "filename": "max_potion", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 4, + "w": 18, + "h": 24 + }, + "frame": { + "x": 397, + "y": 68, + "w": 18, + "h": 24 + } + }, + { + "filename": "dragon_scale", "rotated": false, "trimmed": true, "sourceSize": { @@ -2224,103 +1909,19 @@ }, "spriteSourceSize": { "x": 4, - "y": 6, + "y": 8, "w": 24, - "h": 20 + "h": 18 }, "frame": { - "x": 380, - "y": 91, + "x": 67, + "y": 50, "w": 24, - "h": 20 + "h": 18 } }, { - "filename": "metal_coat", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 5, - "w": 19, - "h": 22 - }, - "frame": { - "x": 404, - "y": 94, - "w": 19, - "h": 22 - } - }, - { - "filename": "rusted_shield", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 6, - "w": 24, - "h": 20 - }, - "frame": { - "x": 380, - "y": 111, - "w": 24, - "h": 20 - } - }, - { - "filename": "quick_claw", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 6, - "w": 19, - "h": 21 - }, - "frame": { - "x": 404, - "y": 116, - "w": 19, - "h": 21 - } - }, - { - "filename": "amulet_coin", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 5, - "w": 23, - "h": 21 - }, - "frame": { - "x": 357, - "y": 115, - "w": 23, - "h": 21 - } - }, - { - "filename": "sacred_ash", + "filename": "icy_reins_of_unity", "rotated": false, "trimmed": true, "sourceSize": { @@ -2334,14 +1935,14 @@ "h": 20 }, "frame": { - "x": 380, - "y": 131, + "x": 91, + "y": 50, "w": 24, "h": 20 } }, { - "filename": "spell_tag", + "filename": "dragon_fang", "rotated": false, "trimmed": true, "sourceSize": { @@ -2349,16 +1950,58 @@ "h": 32 }, "spriteSourceSize": { - "x": 7, - "y": 6, - "w": 19, - "h": 21 + "x": 5, + "y": 5, + "w": 21, + "h": 23 }, "frame": { - "x": 404, - "y": 137, - "w": 19, - "h": 21 + "x": 115, + "y": 50, + "w": 21, + "h": 23 + } + }, + { + "filename": "metal_powder", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 6, + "w": 24, + "h": 20 + }, + "frame": { + "x": 136, + "y": 60, + "w": 24, + "h": 20 + } + }, + { + "filename": "peat_block", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 5, + "w": 24, + "h": 22 + }, + "frame": { + "x": 160, + "y": 67, + "w": 24, + "h": 22 } }, { @@ -2376,8 +2019,8 @@ "h": 23 }, "frame": { - "x": 39, - "y": 78, + "x": 184, + "y": 67, "w": 23, "h": 23 } @@ -2397,14 +2040,98 @@ "h": 23 }, "frame": { - "x": 39, - "y": 101, + "x": 207, + "y": 67, "w": 23, "h": 23 } }, { - "filename": "max_revive", + "filename": "healing_charm", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 23, + "h": 22 + }, + "frame": { + "x": 230, + "y": 68, + "w": 23, + "h": 22 + } + }, + { + "filename": "leek", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 5, + "w": 23, + "h": 23 + }, + "frame": { + "x": 253, + "y": 68, + "w": 23, + "h": 23 + } + }, + { + "filename": "rare_candy", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 5, + "w": 23, + "h": 23 + }, + "frame": { + "x": 276, + "y": 68, + "w": 23, + "h": 23 + } + }, + { + "filename": "rarer_candy", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 5, + "w": 23, + "h": 23 + }, + "frame": { + "x": 299, + "y": 68, + "w": 23, + "h": 23 + } + }, + { + "filename": "black_belt", "rotated": false, "trimmed": true, "sourceSize": { @@ -2415,13 +2142,13 @@ "x": 5, "y": 4, "w": 22, - "h": 24 + "h": 23 }, "frame": { - "x": 39, - "y": 124, + "x": 322, + "y": 68, "w": 22, - "h": 24 + "h": 23 } }, { @@ -2439,12 +2166,33 @@ "h": 23 }, "frame": { - "x": 39, - "y": 148, + "x": 344, + "y": 68, "w": 22, "h": 23 } }, + { + "filename": "quick_powder", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 6, + "w": 24, + "h": 20 + }, + "frame": { + "x": 60, + "y": 68, + "w": 24, + "h": 20 + } + }, { "filename": "dark_tera_shard", "rotated": false, @@ -2460,117 +2208,12 @@ "h": 23 }, "frame": { - "x": 39, - "y": 171, + "x": 57, + "y": 88, "w": 22, "h": 23 } }, - { - "filename": "silver_powder", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 11, - "w": 24, - "h": 15 - }, - "frame": { - "x": 39, - "y": 194, - "w": 24, - "h": 15 - } - }, - { - "filename": "oval_charm", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 21, - "h": 24 - }, - "frame": { - "x": 44, - "y": 209, - "w": 21, - "h": 24 - } - }, - { - "filename": "shiny_charm", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 21, - "h": 24 - }, - "frame": { - "x": 44, - "y": 233, - "w": 21, - "h": 24 - } - }, - { - "filename": "red_orb", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 20, - "h": 24 - }, - "frame": { - "x": 45, - "y": 257, - "w": 20, - "h": 24 - } - }, - { - "filename": "dragon_fang", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 21, - "h": 23 - }, - "frame": { - "x": 46, - "y": 281, - "w": 21, - "h": 23 - } - }, { "filename": "dragon_tera_shard", "rotated": false, @@ -2586,8 +2229,8 @@ "h": 23 }, "frame": { - "x": 46, - "y": 304, + "x": 57, + "y": 111, "w": 22, "h": 23 } @@ -2607,12 +2250,33 @@ "h": 23 }, "frame": { - "x": 46, - "y": 327, + "x": 57, + "y": 134, "w": 22, "h": 23 } }, + { + "filename": "rusted_shield", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 6, + "w": 24, + "h": 20 + }, + "frame": { + "x": 84, + "y": 70, + "w": 24, + "h": 20 + } + }, { "filename": "fairy_tera_shard", "rotated": false, @@ -2628,8 +2292,8 @@ "h": 23 }, "frame": { - "x": 46, - "y": 350, + "x": 79, + "y": 90, "w": 22, "h": 23 } @@ -2649,14 +2313,14 @@ "h": 23 }, "frame": { - "x": 46, - "y": 373, + "x": 79, + "y": 113, "w": 22, "h": 23 } }, { - "filename": "rare_candy", + "filename": "amulet_coin", "rotated": false, "trimmed": true, "sourceSize": { @@ -2664,41 +2328,20 @@ "h": 32 }, "spriteSourceSize": { - "x": 4, - "y": 5, - "w": 23, - "h": 23 - }, - "frame": { - "x": 62, - "y": 90, - "w": 23, - "h": 23 - } - }, - { - "filename": "auspicious_armor", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, + "x": 6, "y": 5, "w": 23, "h": 21 }, "frame": { - "x": 62, - "y": 113, + "x": 79, + "y": 136, "w": 23, "h": 21 } }, { - "filename": "rarer_candy", + "filename": "coupon", "rotated": false, "trimmed": true, "sourceSize": { @@ -2707,36 +2350,15 @@ }, "spriteSourceSize": { "x": 4, - "y": 5, + "y": 7, "w": 23, - "h": 23 + "h": 19 }, "frame": { - "x": 61, - "y": 134, - "w": 23, - "h": 23 - } - }, - { - "filename": "stick", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 5, - "w": 23, - "h": 23 - }, - "frame": { - "x": 61, + "x": 63, "y": 157, "w": 23, - "h": 23 + "h": 19 } }, { @@ -2754,54 +2376,12 @@ "h": 23 }, "frame": { - "x": 85, - "y": 92, + "x": 64, + "y": 176, "w": 22, "h": 23 } }, - { - "filename": "pp_max", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 4, - "w": 16, - "h": 24 - }, - "frame": { - "x": 107, - "y": 92, - "w": 16, - "h": 24 - } - }, - { - "filename": "blank_memory", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 85, - "y": 115, - "w": 22, - "h": 22 - } - }, { "filename": "fire_tera_shard", "rotated": false, @@ -2817,12 +2397,138 @@ "h": 23 }, "frame": { - "x": 84, - "y": 137, + "x": 64, + "y": 199, "w": 22, "h": 23 } }, + { + "filename": "flying_tera_shard", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 4, + "w": 22, + "h": 23 + }, + "frame": { + "x": 64, + "y": 222, + "w": 22, + "h": 23 + } + }, + { + "filename": "max_lure", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 4, + "w": 17, + "h": 24 + }, + "frame": { + "x": 86, + "y": 157, + "w": 17, + "h": 24 + } + }, + { + "filename": "oval_charm", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 4, + "w": 21, + "h": 24 + }, + "frame": { + "x": 86, + "y": 181, + "w": 21, + "h": 24 + } + }, + { + "filename": "shiny_charm", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 4, + "w": 21, + "h": 24 + }, + "frame": { + "x": 86, + "y": 205, + "w": 21, + "h": 24 + } + }, + { + "filename": "auspicious_armor", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 5, + "w": 23, + "h": 21 + }, + "frame": { + "x": 86, + "y": 229, + "w": 23, + "h": 21 + } + }, + { + "filename": "full_heal", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 9, + "y": 4, + "w": 15, + "h": 23 + }, + "frame": { + "x": 71, + "y": 245, + "w": 15, + "h": 23 + } + }, { "filename": "binding_band", "rotated": false, @@ -2838,14 +2544,14 @@ "h": 20 }, "frame": { - "x": 84, - "y": 160, + "x": 86, + "y": 250, "w": 23, "h": 20 } }, { - "filename": "shadow_reins_of_unity", + "filename": "sacred_ash", "rotated": false, "trimmed": true, "sourceSize": { @@ -2859,285 +2565,12 @@ "h": 20 }, "frame": { - "x": 123, - "y": 106, + "x": 108, + "y": 73, "w": 24, "h": 20 } }, - { - "filename": "pp_up", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 4, - "w": 16, - "h": 24 - }, - "frame": { - "x": 107, - "y": 116, - "w": 16, - "h": 24 - } - }, - { - "filename": "soft_sand", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 7, - "w": 24, - "h": 20 - }, - "frame": { - "x": 147, - "y": 111, - "w": 24, - "h": 20 - } - }, - { - "filename": "chill_drive", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 8, - "w": 23, - "h": 17 - }, - "frame": { - "x": 171, - "y": 114, - "w": 23, - "h": 17 - } - }, - { - "filename": "apicot_berry", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 6, - "w": 19, - "h": 20 - }, - "frame": { - "x": 106, - "y": 140, - "w": 19, - "h": 20 - } - }, - { - "filename": "berry_pot", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 5, - "w": 18, - "h": 22 - }, - "frame": { - "x": 107, - "y": 160, - "w": 18, - "h": 22 - } - }, - { - "filename": "coupon", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 7, - "w": 23, - "h": 19 - }, - "frame": { - "x": 194, - "y": 116, - "w": 23, - "h": 19 - } - }, - { - "filename": "golden_mystic_ticket", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 7, - "w": 23, - "h": 19 - }, - "frame": { - "x": 217, - "y": 116, - "w": 23, - "h": 19 - } - }, - { - "filename": "healing_charm", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 23, - "h": 22 - }, - "frame": { - "x": 240, - "y": 116, - "w": 23, - "h": 22 - } - }, - { - "filename": "moon_stone", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 6, - "w": 23, - "h": 21 - }, - "frame": { - "x": 263, - "y": 117, - "w": 23, - "h": 21 - } - }, - { - "filename": "n_lunarizer", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 6, - "w": 23, - "h": 21 - }, - "frame": { - "x": 286, - "y": 117, - "w": 23, - "h": 21 - } - }, - { - "filename": "n_solarizer", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 6, - "w": 23, - "h": 21 - }, - "frame": { - "x": 309, - "y": 117, - "w": 23, - "h": 21 - } - }, - { - "filename": "rusted_sword", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 5, - "w": 23, - "h": 22 - }, - "frame": { - "x": 332, - "y": 117, - "w": 23, - "h": 22 - } - }, - { - "filename": "flying_tera_shard", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 22, - "h": 23 - }, - "frame": { - "x": 125, - "y": 126, - "w": 22, - "h": 23 - } - }, { "filename": "focus_sash", "rotated": false, @@ -3153,390 +2586,12 @@ "h": 23 }, "frame": { - "x": 125, - "y": 149, + "x": 101, + "y": 93, "w": 22, "h": 23 } }, - { - "filename": "ghost_tera_shard", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 22, - "h": 23 - }, - "frame": { - "x": 147, - "y": 131, - "w": 22, - "h": 23 - } - }, - { - "filename": "grass_tera_shard", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 22, - "h": 23 - }, - "frame": { - "x": 169, - "y": 131, - "w": 22, - "h": 23 - } - }, - { - "filename": "mystic_ticket", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 7, - "w": 23, - "h": 19 - }, - "frame": { - "x": 147, - "y": 154, - "w": 23, - "h": 19 - } - }, - { - "filename": "blunder_policy", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 6, - "w": 22, - "h": 19 - }, - "frame": { - "x": 170, - "y": 154, - "w": 22, - "h": 19 - } - }, - { - "filename": "pair_of_tickets", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 7, - "w": 23, - "h": 19 - }, - "frame": { - "x": 191, - "y": 135, - "w": 23, - "h": 19 - } - }, - { - "filename": "reviver_seed", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 8, - "w": 23, - "h": 20 - }, - "frame": { - "x": 214, - "y": 135, - "w": 23, - "h": 20 - } - }, - { - "filename": "bug_memory", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 192, - "y": 154, - "w": 22, - "h": 22 - } - }, - { - "filename": "wellspring_mask", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 5, - "w": 23, - "h": 21 - }, - "frame": { - "x": 214, - "y": 155, - "w": 23, - "h": 21 - } - }, - { - "filename": "ground_tera_shard", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 22, - "h": 23 - }, - "frame": { - "x": 237, - "y": 138, - "w": 22, - "h": 23 - } - }, - { - "filename": "ice_tera_shard", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 22, - "h": 23 - }, - "frame": { - "x": 259, - "y": 138, - "w": 22, - "h": 23 - } - }, - { - "filename": "never_melt_ice", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 23 - }, - "frame": { - "x": 281, - "y": 138, - "w": 22, - "h": 23 - } - }, - { - "filename": "normal_tera_shard", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 22, - "h": 23 - }, - "frame": { - "x": 303, - "y": 138, - "w": 22, - "h": 23 - } - }, - { - "filename": "douse_drive", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 8, - "w": 23, - "h": 17 - }, - "frame": { - "x": 237, - "y": 161, - "w": 23, - "h": 17 - } - }, - { - "filename": "relic_crown", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 7, - "w": 23, - "h": 18 - }, - "frame": { - "x": 260, - "y": 161, - "w": 23, - "h": 18 - } - }, - { - "filename": "shell_bell", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 7, - "w": 23, - "h": 20 - }, - "frame": { - "x": 283, - "y": 161, - "w": 23, - "h": 20 - } - }, - { - "filename": "big_nugget", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 6, - "w": 20, - "h": 20 - }, - "frame": { - "x": 306, - "y": 161, - "w": 20, - "h": 20 - } - }, - { - "filename": "charcoal", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 325, - "y": 139, - "w": 22, - "h": 22 - } - }, - { - "filename": "dark_memory", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 326, - "y": 161, - "w": 22, - "h": 22 - } - }, { "filename": "deep_sea_scale", "rotated": false, @@ -3552,8 +2607,8 @@ "h": 20 }, "frame": { - "x": 125, - "y": 172, + "x": 101, + "y": 116, "w": 22, "h": 20 } @@ -3573,12 +2628,915 @@ "h": 21 }, "frame": { - "x": 147, - "y": 173, + "x": 102, + "y": 136, "w": 22, "h": 21 } }, + { + "filename": "red_orb", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 4, + "w": 20, + "h": 24 + }, + "frame": { + "x": 103, + "y": 157, + "w": 20, + "h": 24 + } + }, + { + "filename": "max_repel", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 4, + "w": 16, + "h": 24 + }, + "frame": { + "x": 107, + "y": 181, + "w": 16, + "h": 24 + } + }, + { + "filename": "pp_max", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 4, + "w": 16, + "h": 24 + }, + "frame": { + "x": 107, + "y": 205, + "w": 16, + "h": 24 + } + }, + { + "filename": "pp_up", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 4, + "w": 16, + "h": 24 + }, + "frame": { + "x": 109, + "y": 229, + "w": 16, + "h": 24 + } + }, + { + "filename": "apicot_berry", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 6, + "w": 19, + "h": 20 + }, + "frame": { + "x": 109, + "y": 253, + "w": 19, + "h": 20 + } + }, + { + "filename": "protein", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 4, + "w": 16, + "h": 24 + }, + "frame": { + "x": 123, + "y": 93, + "w": 16, + "h": 24 + } + }, + { + "filename": "lansat_berry", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 4, + "w": 21, + "h": 23 + }, + "frame": { + "x": 139, + "y": 80, + "w": 21, + "h": 23 + } + }, + { + "filename": "shadow_reins_of_unity", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 7, + "w": 24, + "h": 20 + }, + "frame": { + "x": 160, + "y": 89, + "w": 24, + "h": 20 + } + }, + { + "filename": "soft_sand", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 7, + "w": 24, + "h": 20 + }, + "frame": { + "x": 184, + "y": 90, + "w": 24, + "h": 20 + } + }, + { + "filename": "moon_stone", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 6, + "w": 23, + "h": 21 + }, + "frame": { + "x": 208, + "y": 90, + "w": 23, + "h": 21 + } + }, + { + "filename": "blank_memory", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 231, + "y": 90, + "w": 22, + "h": 22 + } + }, + { + "filename": "n_lunarizer", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 6, + "w": 23, + "h": 21 + }, + "frame": { + "x": 253, + "y": 91, + "w": 23, + "h": 21 + } + }, + { + "filename": "n_solarizer", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 6, + "w": 23, + "h": 21 + }, + "frame": { + "x": 276, + "y": 91, + "w": 23, + "h": 21 + } + }, + { + "filename": "rusted_sword", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 5, + "w": 23, + "h": 22 + }, + "frame": { + "x": 299, + "y": 91, + "w": 23, + "h": 22 + } + }, + { + "filename": "bug_memory", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 322, + "y": 91, + "w": 22, + "h": 22 + } + }, + { + "filename": "charcoal", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 344, + "y": 91, + "w": 22, + "h": 22 + } + }, + { + "filename": "dusk_stone", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 6, + "w": 21, + "h": 21 + }, + "frame": { + "x": 139, + "y": 103, + "w": 21, + "h": 21 + } + }, + { + "filename": "mystery_egg", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 8, + "w": 16, + "h": 18 + }, + "frame": { + "x": 123, + "y": 117, + "w": 16, + "h": 18 + } + }, + { + "filename": "black_glasses", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 8, + "w": 23, + "h": 17 + }, + "frame": { + "x": 160, + "y": 109, + "w": 23, + "h": 17 + } + }, + { + "filename": "burn_drive", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 8, + "w": 23, + "h": 17 + }, + "frame": { + "x": 183, + "y": 110, + "w": 23, + "h": 17 + } + }, + { + "filename": "ghost_tera_shard", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 4, + "w": 22, + "h": 23 + }, + "frame": { + "x": 366, + "y": 85, + "w": 22, + "h": 23 + } + }, + { + "filename": "chill_drive", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 8, + "w": 23, + "h": 17 + }, + "frame": { + "x": 206, + "y": 111, + "w": 23, + "h": 17 + } + }, + { + "filename": "douse_drive", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 8, + "w": 23, + "h": 17 + }, + "frame": { + "x": 229, + "y": 112, + "w": 23, + "h": 17 + } + }, + { + "filename": "golden_mystic_ticket", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 7, + "w": 23, + "h": 19 + }, + "frame": { + "x": 252, + "y": 112, + "w": 23, + "h": 19 + } + }, + { + "filename": "mystic_ticket", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 7, + "w": 23, + "h": 19 + }, + "frame": { + "x": 275, + "y": 112, + "w": 23, + "h": 19 + } + }, + { + "filename": "pair_of_tickets", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 7, + "w": 23, + "h": 19 + }, + "frame": { + "x": 298, + "y": 113, + "w": 23, + "h": 19 + } + }, + { + "filename": "reviver_seed", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 8, + "w": 23, + "h": 20 + }, + "frame": { + "x": 321, + "y": 113, + "w": 23, + "h": 20 + } + }, + { + "filename": "dark_memory", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 344, + "y": 113, + "w": 22, + "h": 22 + } + }, + { + "filename": "grass_tera_shard", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 4, + "w": 22, + "h": 23 + }, + "frame": { + "x": 366, + "y": 108, + "w": 22, + "h": 23 + } + }, + { + "filename": "berry_pot", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 5, + "w": 18, + "h": 22 + }, + "frame": { + "x": 124, + "y": 135, + "w": 18, + "h": 22 + } + }, + { + "filename": "ground_tera_shard", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 4, + "w": 22, + "h": 23 + }, + "frame": { + "x": 123, + "y": 157, + "w": 22, + "h": 23 + } + }, + { + "filename": "ice_tera_shard", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 4, + "w": 22, + "h": 23 + }, + "frame": { + "x": 123, + "y": 180, + "w": 22, + "h": 23 + } + }, + { + "filename": "never_melt_ice", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 23 + }, + "frame": { + "x": 123, + "y": 203, + "w": 22, + "h": 23 + } + }, + { + "filename": "leaf_stone", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 21, + "h": 23 + }, + "frame": { + "x": 125, + "y": 226, + "w": 21, + "h": 23 + } + }, + { + "filename": "mystic_water", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 5, + "w": 20, + "h": 23 + }, + "frame": { + "x": 128, + "y": 249, + "w": 20, + "h": 23 + } + }, + { + "filename": "normal_tera_shard", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 4, + "w": 22, + "h": 23 + }, + "frame": { + "x": 388, + "y": 92, + "w": 22, + "h": 23 + } + }, + { + "filename": "blunder_policy", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 6, + "w": 22, + "h": 19 + }, + "frame": { + "x": 388, + "y": 115, + "w": 22, + "h": 19 + } + }, + { + "filename": "sachet", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 4, + "w": 18, + "h": 23 + }, + "frame": { + "x": 142, + "y": 124, + "w": 18, + "h": 23 + } + }, + { + "filename": "wellspring_mask", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 5, + "w": 23, + "h": 21 + }, + "frame": { + "x": 160, + "y": 126, + "w": 23, + "h": 21 + } + }, + { + "filename": "shell_bell", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 7, + "w": 23, + "h": 20 + }, + "frame": { + "x": 183, + "y": 127, + "w": 23, + "h": 20 + } + }, + { + "filename": "relic_crown", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 7, + "w": 23, + "h": 18 + }, + "frame": { + "x": 206, + "y": 128, + "w": 23, + "h": 18 + } + }, + { + "filename": "shock_drive", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 8, + "w": 23, + "h": 17 + }, + "frame": { + "x": 229, + "y": 129, + "w": 23, + "h": 17 + } + }, + { + "filename": "wise_glasses", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 8, + "w": 23, + "h": 17 + }, + "frame": { + "x": 252, + "y": 131, + "w": 23, + "h": 17 + } + }, { "filename": "dire_hit", "rotated": false, @@ -3594,8 +3552,8 @@ "h": 22 }, "frame": { - "x": 169, - "y": 173, + "x": 275, + "y": 131, "w": 22, "h": 22 } @@ -3615,8 +3573,8 @@ "h": 22 }, "frame": { - "x": 191, - "y": 176, + "x": 297, + "y": 132, "w": 22, "h": 22 } @@ -3636,8 +3594,8 @@ "h": 22 }, "frame": { - "x": 213, - "y": 176, + "x": 319, + "y": 133, "w": 22, "h": 22 } @@ -3657,155 +3615,8 @@ "h": 22 }, "frame": { - "x": 235, - "y": 178, - "w": 22, - "h": 22 - } - }, - { - "filename": "electric_memory", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 257, - "y": 179, - "w": 22, - "h": 22 - } - }, - { - "filename": "enigma_berry", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 279, - "y": 181, - "w": 22, - "h": 22 - } - }, - { - "filename": "fairy_memory", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 301, - "y": 181, - "w": 22, - "h": 22 - } - }, - { - "filename": "fairy_feather", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 7, - "w": 22, - "h": 20 - }, - "frame": { - "x": 323, - "y": 183, - "w": 22, - "h": 20 - } - }, - { - "filename": "fighting_memory", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 347, - "y": 139, - "w": 22, - "h": 22 - } - }, - { - "filename": "fire_memory", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 348, - "y": 161, - "w": 22, - "h": 22 - } - }, - { - "filename": "flying_memory", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 345, - "y": 183, + "x": 341, + "y": 135, "w": 22, "h": 22 } @@ -3825,8 +3636,8 @@ "h": 23 }, "frame": { - "x": 63, - "y": 180, + "x": 145, + "y": 147, "w": 22, "h": 23 } @@ -3846,33 +3657,12 @@ "h": 23 }, "frame": { - "x": 85, - "y": 180, + "x": 167, + "y": 147, "w": 22, "h": 23 } }, - { - "filename": "max_ether", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 4, - "w": 18, - "h": 24 - }, - "frame": { - "x": 107, - "y": 182, - "w": 18, - "h": 24 - } - }, { "filename": "psychic_tera_shard", "rotated": false, @@ -3888,33 +3678,12 @@ "h": 23 }, "frame": { - "x": 65, - "y": 203, + "x": 145, + "y": 170, "w": 22, "h": 23 } }, - { - "filename": "mystic_water", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 5, - "w": 20, - "h": 23 - }, - "frame": { - "x": 87, - "y": 203, - "w": 20, - "h": 23 - } - }, { "filename": "reaper_cloth", "rotated": false, @@ -3930,8 +3699,8 @@ "h": 23 }, "frame": { - "x": 65, - "y": 226, + "x": 145, + "y": 193, "w": 22, "h": 23 } @@ -3951,117 +3720,12 @@ "h": 23 }, "frame": { - "x": 65, - "y": 249, + "x": 167, + "y": 170, "w": 22, "h": 23 } }, - { - "filename": "lansat_berry", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 4, - "w": 21, - "h": 23 - }, - "frame": { - "x": 87, - "y": 226, - "w": 21, - "h": 23 - } - }, - { - "filename": "leaf_stone", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 21, - "h": 23 - }, - "frame": { - "x": 87, - "y": 249, - "w": 21, - "h": 23 - } - }, - { - "filename": "blue_orb", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 6, - "w": 20, - "h": 20 - }, - "frame": { - "x": 107, - "y": 206, - "w": 20, - "h": 20 - } - }, - { - "filename": "max_potion", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 4, - "w": 18, - "h": 24 - }, - "frame": { - "x": 108, - "y": 226, - "w": 18, - "h": 24 - } - }, - { - "filename": "ganlon_berry", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 108, - "y": 250, - "w": 22, - "h": 22 - } - }, { "filename": "steel_tera_shard", "rotated": false, @@ -4077,12 +3741,33 @@ "h": 23 }, "frame": { - "x": 67, - "y": 272, + "x": 167, + "y": 193, "w": 22, "h": 23 } }, + { + "filename": "super_lure", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 4, + "w": 17, + "h": 24 + }, + "frame": { + "x": 189, + "y": 147, + "w": 17, + "h": 24 + } + }, { "filename": "stellar_tera_shard", "rotated": false, @@ -4098,33 +3783,12 @@ "h": 23 }, "frame": { - "x": 89, - "y": 272, + "x": 206, + "y": 146, "w": 22, "h": 23 } }, - { - "filename": "sharp_beak", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 21, - "h": 23 - }, - "frame": { - "x": 111, - "y": 272, - "w": 21, - "h": 23 - } - }, { "filename": "water_tera_shard", "rotated": false, @@ -4140,12 +3804,54 @@ "h": 23 }, "frame": { - "x": 68, - "y": 295, + "x": 228, + "y": 146, "w": 22, "h": 23 } }, + { + "filename": "electric_memory", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 250, + "y": 148, + "w": 22, + "h": 22 + } + }, + { + "filename": "hyper_potion", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 5, + "w": 17, + "h": 23 + }, + "frame": { + "x": 189, + "y": 171, + "w": 17, + "h": 23 + } + }, { "filename": "wide_lens", "rotated": false, @@ -4161,12 +3867,180 @@ "h": 23 }, "frame": { - "x": 68, - "y": 318, + "x": 206, + "y": 169, "w": 22, "h": 23 } }, + { + "filename": "enigma_berry", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 228, + "y": 169, + "w": 22, + "h": 22 + } + }, + { + "filename": "fairy_memory", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 250, + "y": 170, + "w": 22, + "h": 22 + } + }, + { + "filename": "fighting_memory", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 272, + "y": 153, + "w": 22, + "h": 22 + } + }, + { + "filename": "fire_memory", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 294, + "y": 154, + "w": 22, + "h": 22 + } + }, + { + "filename": "dubious_disc", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 7, + "w": 22, + "h": 19 + }, + "frame": { + "x": 272, + "y": 175, + "w": 22, + "h": 19 + } + }, + { + "filename": "fairy_feather", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 7, + "w": 22, + "h": 20 + }, + "frame": { + "x": 294, + "y": 176, + "w": 22, + "h": 20 + } + }, + { + "filename": "flying_memory", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 316, + "y": 155, + "w": 22, + "h": 22 + } + }, + { + "filename": "ganlon_berry", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 316, + "y": 177, + "w": 22, + "h": 22 + } + }, { "filename": "ghost_memory", "rotated": false, @@ -4182,8 +4056,8 @@ "h": 22 }, "frame": { - "x": 90, - "y": 295, + "x": 338, + "y": 157, "w": 22, "h": 22 } @@ -4203,8 +4077,8 @@ "h": 22 }, "frame": { - "x": 68, - "y": 341, + "x": 338, + "y": 179, "w": 22, "h": 22 } @@ -4224,12 +4098,33 @@ "h": 22 }, "frame": { - "x": 90, - "y": 317, + "x": 189, + "y": 194, "w": 22, "h": 22 } }, + { + "filename": "potion", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 5, + "w": 17, + "h": 23 + }, + "frame": { + "x": 211, + "y": 192, + "w": 17, + "h": 23 + } + }, { "filename": "guard_spec", "rotated": false, @@ -4245,8 +4140,8 @@ "h": 22 }, "frame": { - "x": 68, - "y": 363, + "x": 228, + "y": 191, "w": 22, "h": 22 } @@ -4266,8 +4161,8 @@ "h": 22 }, "frame": { - "x": 90, - "y": 339, + "x": 250, + "y": 192, "w": 22, "h": 22 } @@ -4287,71 +4182,8 @@ "h": 22 }, "frame": { - "x": 90, - "y": 361, - "w": 22, - "h": 22 - } - }, - { - "filename": "whipped_dream", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 4, - "w": 21, - "h": 23 - }, - "frame": { - "x": 112, - "y": 295, - "w": 21, - "h": 23 - } - }, - { - "filename": "magmarizer", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 112, - "y": 318, - "w": 22, - "h": 22 - } - }, - { - "filename": "mini_black_hole", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 112, - "y": 340, + "x": 272, + "y": 194, "w": 22, "h": 22 } @@ -4371,14 +4203,14 @@ "h": 21 }, "frame": { - "x": 112, - "y": 362, + "x": 294, + "y": 196, "w": 22, "h": 21 } }, { - "filename": "poison_memory", + "filename": "magmarizer", "rotated": false, "trimmed": true, "sourceSize": { @@ -4392,159 +4224,12 @@ "h": 22 }, "frame": { - "x": 68, - "y": 385, + "x": 316, + "y": 199, "w": 22, "h": 22 } }, - { - "filename": "mega_bracelet", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 8, - "w": 20, - "h": 16 - }, - "frame": { - "x": 68, - "y": 407, - "w": 20, - "h": 16 - } - }, - { - "filename": "protector", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 90, - "y": 383, - "w": 22, - "h": 22 - } - }, - { - "filename": "masterpiece_teacup", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 7, - "w": 21, - "h": 18 - }, - "frame": { - "x": 90, - "y": 405, - "w": 21, - "h": 18 - } - }, - { - "filename": "psychic_memory", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 112, - "y": 383, - "w": 22, - "h": 22 - } - }, - { - "filename": "sharp_meteorite", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 8, - "w": 21, - "h": 18 - }, - "frame": { - "x": 111, - "y": 405, - "w": 21, - "h": 18 - } - }, - { - "filename": "unremarkable_teacup", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 7, - "w": 21, - "h": 18 - }, - "frame": { - "x": 132, - "y": 405, - "w": 21, - "h": 18 - } - }, - { - "filename": "hard_meteorite", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 5, - "w": 20, - "h": 22 - }, - "frame": { - "x": 127, - "y": 192, - "w": 20, - "h": 22 - } - }, { "filename": "malicious_armor", "rotated": false, @@ -4560,14 +4245,14 @@ "h": 20 }, "frame": { - "x": 147, - "y": 194, + "x": 338, + "y": 201, "w": 22, "h": 20 } }, { - "filename": "dubious_disc", + "filename": "mini_black_hole", "rotated": false, "trimmed": true, "sourceSize": { @@ -4576,19 +4261,19 @@ }, "spriteSourceSize": { "x": 5, - "y": 7, + "y": 5, "w": 22, - "h": 19 + "h": 22 }, "frame": { - "x": 169, - "y": 195, + "x": 146, + "y": 216, "w": 22, - "h": 19 + "h": 22 } }, { - "filename": "shock_drive", + "filename": "poison_memory", "rotated": false, "trimmed": true, "sourceSize": { @@ -4596,20 +4281,20 @@ "h": 32 }, "spriteSourceSize": { - "x": 4, - "y": 8, - "w": 23, - "h": 17 + "x": 5, + "y": 5, + "w": 22, + "h": 22 }, "frame": { - "x": 191, - "y": 198, - "w": 23, - "h": 17 + "x": 168, + "y": 216, + "w": 22, + "h": 22 } }, { - "filename": "dusk_stone", + "filename": "protector", "rotated": false, "trimmed": true, "sourceSize": { @@ -4617,16 +4302,58 @@ "h": 32 }, "spriteSourceSize": { - "x": 6, - "y": 6, - "w": 21, - "h": 21 + "x": 5, + "y": 5, + "w": 22, + "h": 22 }, "frame": { - "x": 214, - "y": 198, - "w": 21, - "h": 21 + "x": 190, + "y": 216, + "w": 22, + "h": 22 + } + }, + { + "filename": "repel", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 4, + "w": 16, + "h": 24 + }, + "frame": { + "x": 212, + "y": 215, + "w": 16, + "h": 24 + } + }, + { + "filename": "psychic_memory", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 228, + "y": 213, + "w": 22, + "h": 22 } }, { @@ -4644,8 +4371,8 @@ "h": 22 }, "frame": { - "x": 235, - "y": 200, + "x": 250, + "y": 214, "w": 22, "h": 22 } @@ -4665,8 +4392,8 @@ "h": 22 }, "frame": { - "x": 257, - "y": 201, + "x": 272, + "y": 216, "w": 22, "h": 22 } @@ -4686,8 +4413,8 @@ "h": 22 }, "frame": { - "x": 279, - "y": 203, + "x": 294, + "y": 217, "w": 22, "h": 22 } @@ -4707,8 +4434,8 @@ "h": 22 }, "frame": { - "x": 301, - "y": 203, + "x": 316, + "y": 221, "w": 22, "h": 22 } @@ -4728,12 +4455,33 @@ "h": 22 }, "frame": { - "x": 323, - "y": 203, + "x": 338, + "y": 221, "w": 22, "h": 22 } }, + { + "filename": "sharp_beak", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 21, + "h": 23 + }, + "frame": { + "x": 148, + "y": 238, + "w": 21, + "h": 23 + } + }, { "filename": "steel_memory", "rotated": false, @@ -4749,35 +4497,14 @@ "h": 22 }, "frame": { - "x": 345, - "y": 205, + "x": 169, + "y": 238, "w": 22, "h": 22 } }, { - "filename": "wise_glasses", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 8, - "w": 23, - "h": 17 - }, - "frame": { - "x": 127, - "y": 214, - "w": 23, - "h": 17 - } - }, - { - "filename": "upgrade", + "filename": "whipped_dream", "rotated": false, "trimmed": true, "sourceSize": { @@ -4786,145 +4513,19 @@ }, "spriteSourceSize": { "x": 5, - "y": 7, - "w": 22, - "h": 19 - }, - "frame": { - "x": 126, - "y": 231, - "w": 22, - "h": 19 - } - }, - { - "filename": "sitrus_berry", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 5, - "w": 20, - "h": 22 - }, - "frame": { - "x": 130, - "y": 250, - "w": 20, - "h": 22 - } - }, - { - "filename": "sachet", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, "y": 4, - "w": 18, + "w": 21, "h": 23 }, "frame": { - "x": 132, - "y": 272, - "w": 18, + "x": 191, + "y": 238, + "w": 21, "h": 23 } }, { - "filename": "hyper_potion", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 5, - "w": 17, - "h": 23 - }, - "frame": { - "x": 133, - "y": 295, - "w": 17, - "h": 23 - } - }, - { - "filename": "max_lure", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 4, - "w": 17, - "h": 24 - }, - "frame": { - "x": 134, - "y": 318, - "w": 17, - "h": 24 - } - }, - { - "filename": "super_lure", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 4, - "w": 17, - "h": 24 - }, - "frame": { - "x": 134, - "y": 342, - "w": 17, - "h": 24 - } - }, - { - "filename": "potion", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 5, - "w": 17, - "h": 23 - }, - "frame": { - "x": 134, - "y": 366, - "w": 17, - "h": 23 - } - }, - { - "filename": "relic_band", + "filename": "hard_meteorite", "rotated": false, "trimmed": true, "sourceSize": { @@ -4933,15 +4534,57 @@ }, "spriteSourceSize": { "x": 7, - "y": 9, - "w": 17, - "h": 16 + "y": 5, + "w": 20, + "h": 22 }, "frame": { - "x": 134, - "y": 389, + "x": 212, + "y": 239, + "w": 20, + "h": 22 + } + }, + { + "filename": "super_potion", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 5, "w": 17, - "h": 16 + "h": 23 + }, + "frame": { + "x": 232, + "y": 235, + "w": 17, + "h": 23 + } + }, + { + "filename": "thick_club", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 249, + "y": 236, + "w": 22, + "h": 22 } }, { @@ -4959,33 +4602,12 @@ "h": 21 }, "frame": { - "x": 150, - "y": 214, + "x": 271, + "y": 238, "w": 22, "h": 21 } }, - { - "filename": "candy_jar", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 6, - "w": 19, - "h": 20 - }, - "frame": { - "x": 172, - "y": 214, - "w": 19, - "h": 20 - } - }, { "filename": "syrupy_apple", "rotated": false, @@ -5001,8 +4623,8 @@ "h": 21 }, "frame": { - "x": 191, - "y": 215, + "x": 293, + "y": 239, "w": 22, "h": 21 } @@ -5022,54 +4644,12 @@ "h": 21 }, "frame": { - "x": 213, - "y": 219, + "x": 315, + "y": 243, "w": 22, "h": 21 } }, - { - "filename": "tera_orb", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 6, - "w": 22, - "h": 20 - }, - "frame": { - "x": 235, - "y": 222, - "w": 22, - "h": 20 - } - }, - { - "filename": "thick_club", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 257, - "y": 223, - "w": 22, - "h": 22 - } - }, { "filename": "thunder_stone", "rotated": false, @@ -5085,12 +4665,54 @@ "h": 22 }, "frame": { - "x": 279, - "y": 225, + "x": 337, + "y": 243, "w": 22, "h": 22 } }, + { + "filename": "masterpiece_teacup", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 7, + "w": 21, + "h": 18 + }, + "frame": { + "x": 148, + "y": 261, + "w": 21, + "h": 18 + } + }, + { + "filename": "tera_orb", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 6, + "w": 22, + "h": 20 + }, + "frame": { + "x": 169, + "y": 260, + "w": 22, + "h": 20 + } + }, { "filename": "tm_bug", "rotated": false, @@ -5106,12 +4728,33 @@ "h": 22 }, "frame": { - "x": 301, - "y": 225, + "x": 191, + "y": 261, "w": 22, "h": 22 } }, + { + "filename": "lock_capsule", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 5, + "w": 19, + "h": 22 + }, + "frame": { + "x": 213, + "y": 261, + "w": 19, + "h": 22 + } + }, { "filename": "tm_dark", "rotated": false, @@ -5127,12 +4770,33 @@ "h": 22 }, "frame": { - "x": 323, - "y": 225, + "x": 232, + "y": 258, "w": 22, "h": 22 } }, + { + "filename": "metronome", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 5, + "w": 17, + "h": 22 + }, + "frame": { + "x": 254, + "y": 258, + "w": 17, + "h": 22 + } + }, { "filename": "tm_dragon", "rotated": false, @@ -5148,96 +4812,12 @@ "h": 22 }, "frame": { - "x": 345, - "y": 227, + "x": 271, + "y": 259, "w": 22, "h": 22 } }, - { - "filename": "candy_overlay", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 12, - "w": 16, - "h": 15 - }, - "frame": { - "x": 148, - "y": 235, - "w": 16, - "h": 15 - } - }, - { - "filename": "protein", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 4, - "w": 16, - "h": 24 - }, - "frame": { - "x": 150, - "y": 250, - "w": 16, - "h": 24 - } - }, - { - "filename": "repel", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 4, - "w": 16, - "h": 24 - }, - "frame": { - "x": 150, - "y": 274, - "w": 16, - "h": 24 - } - }, - { - "filename": "gb", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 6, - "w": 20, - "h": 20 - }, - "frame": { - "x": 150, - "y": 298, - "w": 20, - "h": 20 - } - }, { "filename": "tm_electric", "rotated": false, @@ -5253,8 +4833,8 @@ "h": 22 }, "frame": { - "x": 151, - "y": 318, + "x": 293, + "y": 260, "w": 22, "h": 22 } @@ -5274,8 +4854,8 @@ "h": 22 }, "frame": { - "x": 151, - "y": 340, + "x": 315, + "y": 264, "w": 22, "h": 22 } @@ -5295,537 +4875,12 @@ "h": 22 }, "frame": { - "x": 151, - "y": 362, + "x": 337, + "y": 265, "w": 22, "h": 22 } }, - { - "filename": "poison_barb", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 6, - "w": 21, - "h": 21 - }, - "frame": { - "x": 151, - "y": 384, - "w": 21, - "h": 21 - } - }, - { - "filename": "wl_ability_urge", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 8, - "w": 20, - "h": 18 - }, - "frame": { - "x": 153, - "y": 405, - "w": 20, - "h": 18 - } - }, - { - "filename": "super_repel", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 4, - "w": 16, - "h": 24 - }, - "frame": { - "x": 367, - "y": 183, - "w": 16, - "h": 24 - } - }, - { - "filename": "unknown", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 4, - "w": 16, - "h": 24 - }, - "frame": { - "x": 367, - "y": 207, - "w": 16, - "h": 24 - } - }, - { - "filename": "big_mushroom", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 6, - "w": 19, - "h": 19 - }, - "frame": { - "x": 367, - "y": 231, - "w": 19, - "h": 19 - } - }, - { - "filename": "metal_alloy", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 7, - "w": 21, - "h": 19 - }, - "frame": { - "x": 383, - "y": 151, - "w": 21, - "h": 19 - } - }, - { - "filename": "hard_stone", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 6, - "w": 19, - "h": 20 - }, - "frame": { - "x": 404, - "y": 158, - "w": 19, - "h": 20 - } - }, - { - "filename": "shiny_stone", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 6, - "w": 21, - "h": 21 - }, - "frame": { - "x": 383, - "y": 170, - "w": 21, - "h": 21 - } - }, - { - "filename": "miracle_seed", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 7, - "w": 19, - "h": 19 - }, - "frame": { - "x": 404, - "y": 178, - "w": 19, - "h": 19 - } - }, - { - "filename": "zoom_lens", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 6, - "w": 21, - "h": 21 - }, - "frame": { - "x": 383, - "y": 191, - "w": 21, - "h": 21 - } - }, - { - "filename": "lum_berry", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 7, - "w": 20, - "h": 19 - }, - "frame": { - "x": 383, - "y": 212, - "w": 20, - "h": 19 - } - }, - { - "filename": "dawn_stone", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 6, - "w": 20, - "h": 21 - }, - "frame": { - "x": 403, - "y": 212, - "w": 20, - "h": 21 - } - }, - { - "filename": "eviolite", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 8, - "w": 15, - "h": 15 - }, - "frame": { - "x": 404, - "y": 197, - "w": 15, - "h": 15 - } - }, - { - "filename": "golden_egg", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 6, - "w": 17, - "h": 20 - }, - "frame": { - "x": 386, - "y": 231, - "w": 17, - "h": 20 - } - }, - { - "filename": "magnet", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 6, - "w": 20, - "h": 20 - }, - "frame": { - "x": 403, - "y": 233, - "w": 20, - "h": 20 - } - }, - { - "filename": "prism_scale", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 9, - "y": 8, - "w": 15, - "h": 15 - }, - "frame": { - "x": 164, - "y": 235, - "w": 15, - "h": 15 - } - }, - { - "filename": "zinc", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 4, - "w": 16, - "h": 24 - }, - "frame": { - "x": 166, - "y": 250, - "w": 16, - "h": 24 - } - }, - { - "filename": "super_potion", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 5, - "w": 17, - "h": 23 - }, - "frame": { - "x": 166, - "y": 274, - "w": 17, - "h": 23 - } - }, - { - "filename": "lucky_egg", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 6, - "w": 17, - "h": 20 - }, - "frame": { - "x": 170, - "y": 297, - "w": 17, - "h": 20 - } - }, - { - "filename": "full_heal", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 9, - "y": 4, - "w": 15, - "h": 23 - }, - "frame": { - "x": 173, - "y": 317, - "w": 15, - "h": 23 - } - }, - { - "filename": "leftovers", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 5, - "w": 15, - "h": 22 - }, - "frame": { - "x": 173, - "y": 340, - "w": 15, - "h": 22 - } - }, - { - "filename": "metronome", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 5, - "w": 17, - "h": 22 - }, - "frame": { - "x": 173, - "y": 362, - "w": 17, - "h": 22 - } - }, - { - "filename": "mb", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 6, - "w": 20, - "h": 20 - }, - "frame": { - "x": 172, - "y": 384, - "w": 20, - "h": 20 - } - }, - { - "filename": "razor_claw", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 7, - "w": 20, - "h": 19 - }, - "frame": { - "x": 173, - "y": 404, - "w": 20, - "h": 19 - } - }, - { - "filename": "everstone", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 8, - "w": 20, - "h": 17 - }, - "frame": { - "x": 193, - "y": 236, - "w": 20, - "h": 17 - } - }, { "filename": "tm_fire", "rotated": false, @@ -5841,8 +4896,8 @@ "h": 22 }, "frame": { - "x": 213, - "y": 240, + "x": 366, + "y": 131, "w": 22, "h": 22 } @@ -5862,12 +4917,54 @@ "h": 22 }, "frame": { - "x": 235, - "y": 242, + "x": 388, + "y": 134, "w": 22, "h": 22 } }, + { + "filename": "big_nugget", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 6, + "w": 20, + "h": 20 + }, + "frame": { + "x": 128, + "y": 272, + "w": 20, + "h": 20 + } + }, + { + "filename": "metal_alloy", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 7, + "w": 21, + "h": 19 + }, + "frame": { + "x": 148, + "y": 279, + "w": 21, + "h": 19 + } + }, { "filename": "tm_ghost", "rotated": false, @@ -5883,8 +4980,8 @@ "h": 22 }, "frame": { - "x": 257, - "y": 245, + "x": 169, + "y": 280, "w": 22, "h": 22 } @@ -5904,12 +5001,33 @@ "h": 22 }, "frame": { - "x": 279, - "y": 247, + "x": 191, + "y": 283, "w": 22, "h": 22 } }, + { + "filename": "metal_coat", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 5, + "w": 19, + "h": 22 + }, + "frame": { + "x": 213, + "y": 283, + "w": 19, + "h": 22 + } + }, { "filename": "tm_ground", "rotated": false, @@ -5925,12 +5043,33 @@ "h": 22 }, "frame": { - "x": 301, - "y": 247, + "x": 232, + "y": 280, "w": 22, "h": 22 } }, + { + "filename": "soothe_bell", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 5, + "w": 17, + "h": 22 + }, + "frame": { + "x": 254, + "y": 280, + "w": 17, + "h": 22 + } + }, { "filename": "tm_ice", "rotated": false, @@ -5946,8 +5085,8 @@ "h": 22 }, "frame": { - "x": 323, - "y": 247, + "x": 271, + "y": 281, "w": 22, "h": 22 } @@ -5967,96 +5106,12 @@ "h": 22 }, "frame": { - "x": 345, - "y": 249, + "x": 293, + "y": 282, "w": 22, "h": 22 } }, - { - "filename": "razor_fang", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 6, - "w": 18, - "h": 20 - }, - "frame": { - "x": 367, - "y": 250, - "w": 18, - "h": 20 - } - }, - { - "filename": "oval_stone", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 7, - "w": 18, - "h": 19 - }, - "frame": { - "x": 385, - "y": 251, - "w": 18, - "h": 19 - } - }, - { - "filename": "pb", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 6, - "w": 20, - "h": 20 - }, - "frame": { - "x": 403, - "y": 253, - "w": 20, - "h": 20 - } - }, - { - "filename": "pb_gold", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 6, - "w": 20, - "h": 20 - }, - "frame": { - "x": 182, - "y": 253, - "w": 20, - "h": 20 - } - }, { "filename": "tm_poison", "rotated": false, @@ -6072,8 +5127,8 @@ "h": 22 }, "frame": { - "x": 183, - "y": 273, + "x": 315, + "y": 286, "w": 22, "h": 22 } @@ -6093,8 +5148,8 @@ "h": 22 }, "frame": { - "x": 187, - "y": 295, + "x": 337, + "y": 287, "w": 22, "h": 22 } @@ -6114,8 +5169,8 @@ "h": 22 }, "frame": { - "x": 188, - "y": 317, + "x": 72, + "y": 270, "w": 22, "h": 22 } @@ -6135,8 +5190,8 @@ "h": 22 }, "frame": { - "x": 188, - "y": 339, + "x": 72, + "y": 292, "w": 22, "h": 22 } @@ -6156,75 +5211,12 @@ "h": 22 }, "frame": { - "x": 190, - "y": 361, + "x": 72, + "y": 314, "w": 22, "h": 22 } }, - { - "filename": "rb", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 6, - "w": 20, - "h": 20 - }, - "frame": { - "x": 192, - "y": 383, - "w": 20, - "h": 20 - } - }, - { - "filename": "smooth_meteorite", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 6, - "w": 20, - "h": 20 - }, - "frame": { - "x": 193, - "y": 403, - "w": 20, - "h": 20 - } - }, - { - "filename": "soothe_bell", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 5, - "w": 17, - "h": 22 - }, - "frame": { - "x": 205, - "y": 273, - "w": 17, - "h": 22 - } - }, { "filename": "water_memory", "rotated": false, @@ -6240,8 +5232,8 @@ "h": 22 }, "frame": { - "x": 209, - "y": 295, + "x": 72, + "y": 336, "w": 22, "h": 22 } @@ -6261,8 +5253,8 @@ "h": 22 }, "frame": { - "x": 210, - "y": 317, + "x": 72, + "y": 358, "w": 22, "h": 22 } @@ -6282,12 +5274,54 @@ "h": 22 }, "frame": { - "x": 210, - "y": 339, + "x": 72, + "y": 380, "w": 22, "h": 22 } }, + { + "filename": "leftovers", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 5, + "w": 15, + "h": 22 + }, + "frame": { + "x": 94, + "y": 270, + "w": 15, + "h": 22 + } + }, + { + "filename": "big_mushroom", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 6, + "w": 19, + "h": 19 + }, + "frame": { + "x": 109, + "y": 273, + "w": 19, + "h": 19 + } + }, { "filename": "x_attack", "rotated": false, @@ -6303,54 +5337,12 @@ "h": 22 }, "frame": { - "x": 212, - "y": 361, + "x": 94, + "y": 292, "w": 22, "h": 22 } }, - { - "filename": "strange_ball", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 6, - "w": 20, - "h": 20 - }, - "frame": { - "x": 212, - "y": 383, - "w": 20, - "h": 20 - } - }, - { - "filename": "ub", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 6, - "w": 20, - "h": 20 - }, - "frame": { - "x": 213, - "y": 403, - "w": 20, - "h": 20 - } - }, { "filename": "x_defense", "rotated": false, @@ -6366,8 +5358,8 @@ "h": 22 }, "frame": { - "x": 222, - "y": 273, + "x": 116, + "y": 292, "w": 22, "h": 22 } @@ -6387,8 +5379,8 @@ "h": 22 }, "frame": { - "x": 231, - "y": 295, + "x": 94, + "y": 314, "w": 22, "h": 22 } @@ -6408,8 +5400,8 @@ "h": 22 }, "frame": { - "x": 232, - "y": 317, + "x": 94, + "y": 336, "w": 22, "h": 22 } @@ -6429,14 +5421,14 @@ "h": 22 }, "frame": { - "x": 232, - "y": 339, + "x": 116, + "y": 314, "w": 22, "h": 22 } }, { - "filename": "wl_antidote", + "filename": "poison_barb", "rotated": false, "trimmed": true, "sourceSize": { @@ -6444,20 +5436,41 @@ "h": 32 }, "spriteSourceSize": { - "x": 6, - "y": 8, - "w": 20, - "h": 18 + "x": 5, + "y": 6, + "w": 21, + "h": 21 }, "frame": { - "x": 234, - "y": 361, - "w": 20, - "h": 18 + "x": 94, + "y": 358, + "w": 21, + "h": 21 } }, { - "filename": "wl_awakening", + "filename": "shiny_stone", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 6, + "w": 21, + "h": 21 + }, + "frame": { + "x": 116, + "y": 336, + "w": 21, + "h": 21 + } + }, + { + "filename": "sitrus_berry", "rotated": false, "trimmed": true, "sourceSize": { @@ -6466,19 +5479,124 @@ }, "spriteSourceSize": { "x": 6, - "y": 8, + "y": 5, "w": 20, - "h": 18 + "h": 22 }, "frame": { - "x": 234, + "x": 94, "y": 379, "w": 20, + "h": 22 + } + }, + { + "filename": "zoom_lens", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 6, + "w": 21, + "h": 21 + }, + "frame": { + "x": 138, + "y": 298, + "w": 21, + "h": 21 + } + }, + { + "filename": "sharp_meteorite", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 8, + "w": 21, + "h": 18 + }, + "frame": { + "x": 138, + "y": 319, + "w": 21, "h": 18 } }, { - "filename": "wl_burn_heal", + "filename": "upgrade", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 7, + "w": 22, + "h": 19 + }, + "frame": { + "x": 137, + "y": 337, + "w": 22, + "h": 19 + } + }, + { + "filename": "dawn_stone", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 6, + "w": 20, + "h": 21 + }, + "frame": { + "x": 159, + "y": 302, + "w": 20, + "h": 21 + } + }, + { + "filename": "blue_orb", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 6, + "w": 20, + "h": 20 + }, + "frame": { + "x": 159, + "y": 323, + "w": 20, + "h": 20 + } + }, + { + "filename": "everstone", "rotated": false, "trimmed": true, "sourceSize": { @@ -6489,17 +5607,17 @@ "x": 6, "y": 8, "w": 20, - "h": 18 + "h": 17 }, "frame": { - "x": 233, - "y": 397, + "x": 159, + "y": 343, "w": 20, - "h": 18 + "h": 17 } }, { - "filename": "wl_custom_spliced", + "filename": "revive", "rotated": false, "trimmed": true, "sourceSize": { @@ -6507,20 +5625,20 @@ "h": 32 }, "spriteSourceSize": { - "x": 6, + "x": 10, "y": 8, - "w": 20, - "h": 18 + "w": 12, + "h": 17 }, "frame": { - "x": 367, - "y": 270, - "w": 20, - "h": 18 + "x": 179, + "y": 302, + "w": 12, + "h": 17 } }, { - "filename": "mystery_egg", + "filename": "super_repel", "rotated": false, "trimmed": true, "sourceSize": { @@ -6529,19 +5647,82 @@ }, "spriteSourceSize": { "x": 8, - "y": 8, + "y": 4, "w": 16, - "h": 18 + "h": 24 }, "frame": { - "x": 387, - "y": 270, + "x": 179, + "y": 319, "w": 16, + "h": 24 + } + }, + { + "filename": "baton", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 18, + "h": 18 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 18, + "h": 18 + }, + "frame": { + "x": 179, + "y": 343, + "w": 18, "h": 18 } }, { - "filename": "wl_custom_thief", + "filename": "unknown", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 4, + "w": 16, + "h": 24 + }, + "frame": { + "x": 360, + "y": 157, + "w": 16, + "h": 24 + } + }, + { + "filename": "zinc", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 4, + "w": 16, + "h": 24 + }, + "frame": { + "x": 360, + "y": 181, + "w": 16, + "h": 24 + } + }, + { + "filename": "quick_claw", "rotated": false, "trimmed": true, "sourceSize": { @@ -6550,19 +5731,124 @@ }, "spriteSourceSize": { "x": 6, - "y": 8, - "w": 20, - "h": 18 + "y": 6, + "w": 19, + "h": 21 }, "frame": { - "x": 403, - "y": 273, - "w": 20, - "h": 18 + "x": 360, + "y": 205, + "w": 19, + "h": 21 } }, { - "filename": "candy", + "filename": "candy_jar", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 6, + "w": 19, + "h": 20 + }, + "frame": { + "x": 360, + "y": 226, + "w": 19, + "h": 20 + } + }, + { + "filename": "gb", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 6, + "w": 20, + "h": 20 + }, + "frame": { + "x": 359, + "y": 246, + "w": 20, + "h": 20 + } + }, + { + "filename": "magnet", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 6, + "w": 20, + "h": 20 + }, + "frame": { + "x": 359, + "y": 266, + "w": 20, + "h": 20 + } + }, + { + "filename": "mb", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 6, + "w": 20, + "h": 20 + }, + "frame": { + "x": 359, + "y": 286, + "w": 20, + "h": 20 + } + }, + { + "filename": "pb", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 6, + "w": 20, + "h": 20 + }, + "frame": { + "x": 376, + "y": 156, + "w": 20, + "h": 20 + } + }, + { + "filename": "spell_tag", "rotated": false, "trimmed": true, "sourceSize": { @@ -6571,19 +5857,19 @@ }, "spriteSourceSize": { "x": 7, - "y": 11, - "w": 18, - "h": 18 + "y": 6, + "w": 19, + "h": 21 }, "frame": { - "x": 253, - "y": 397, - "w": 18, - "h": 18 + "x": 396, + "y": 156, + "w": 19, + "h": 21 } }, { - "filename": "wl_elixir", + "filename": "pb_gold", "rotated": false, "trimmed": true, "sourceSize": { @@ -6592,19 +5878,19 @@ }, "spriteSourceSize": { "x": 6, - "y": 8, + "y": 6, "w": 20, - "h": 18 + "h": 20 }, "frame": { - "x": 244, - "y": 267, + "x": 376, + "y": 176, "w": 20, - "h": 18 + "h": 20 } }, { - "filename": "wl_ether", + "filename": "hard_stone", "rotated": false, "trimmed": true, "sourceSize": { @@ -6613,166 +5899,19 @@ }, "spriteSourceSize": { "x": 6, - "y": 8, - "w": 20, - "h": 18 + "y": 6, + "w": 19, + "h": 20 }, "frame": { - "x": 264, - "y": 269, - "w": 20, - "h": 18 + "x": 396, + "y": 177, + "w": 19, + "h": 20 } }, { - "filename": "wl_full_heal", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 8, - "w": 20, - "h": 18 - }, - "frame": { - "x": 284, - "y": 269, - "w": 20, - "h": 18 - } - }, - { - "filename": "wl_full_restore", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 8, - "w": 20, - "h": 18 - }, - "frame": { - "x": 304, - "y": 269, - "w": 20, - "h": 18 - } - }, - { - "filename": "wl_guard_spec", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 8, - "w": 20, - "h": 18 - }, - "frame": { - "x": 324, - "y": 269, - "w": 20, - "h": 18 - } - }, - { - "filename": "wl_hyper_potion", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 8, - "w": 20, - "h": 18 - }, - "frame": { - "x": 344, - "y": 271, - "w": 20, - "h": 18 - } - }, - { - "filename": "wl_ice_heal", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 8, - "w": 20, - "h": 18 - }, - "frame": { - "x": 271, - "y": 287, - "w": 20, - "h": 18 - } - }, - { - "filename": "wl_item_drop", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 8, - "w": 20, - "h": 18 - }, - "frame": { - "x": 291, - "y": 287, - "w": 20, - "h": 18 - } - }, - { - "filename": "wl_item_urge", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 8, - "w": 20, - "h": 18 - }, - "frame": { - "x": 311, - "y": 287, - "w": 20, - "h": 18 - } - }, - { - "filename": "dark_stone", + "filename": "golden_egg", "rotated": false, "trimmed": true, "sourceSize": { @@ -6781,19 +5920,40 @@ }, "spriteSourceSize": { "x": 7, + "y": 6, + "w": 17, + "h": 20 + }, + "frame": { + "x": 379, + "y": 196, + "w": 17, + "h": 20 + } + }, + { + "filename": "miracle_seed", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, "y": 7, - "w": 18, - "h": 18 + "w": 19, + "h": 19 }, "frame": { - "x": 253, - "y": 287, - "w": 18, - "h": 18 + "x": 396, + "y": 197, + "w": 19, + "h": 19 } }, { - "filename": "wl_max_elixir", + "filename": "rb", "rotated": false, "trimmed": true, "sourceSize": { @@ -6802,267 +5962,15 @@ }, "spriteSourceSize": { "x": 6, - "y": 8, + "y": 6, "w": 20, - "h": 18 + "h": 20 }, "frame": { - "x": 254, - "y": 305, + "x": 379, + "y": 216, "w": 20, - "h": 18 - } - }, - { - "filename": "wl_max_ether", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 8, - "w": 20, - "h": 18 - }, - "frame": { - "x": 254, - "y": 323, - "w": 20, - "h": 18 - } - }, - { - "filename": "wl_max_potion", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 8, - "w": 20, - "h": 18 - }, - "frame": { - "x": 274, - "y": 305, - "w": 20, - "h": 18 - } - }, - { - "filename": "wl_max_revive", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 8, - "w": 20, - "h": 18 - }, - "frame": { - "x": 254, - "y": 341, - "w": 20, - "h": 18 - } - }, - { - "filename": "wl_paralyze_heal", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 8, - "w": 20, - "h": 18 - }, - "frame": { - "x": 274, - "y": 323, - "w": 20, - "h": 18 - } - }, - { - "filename": "wl_potion", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 8, - "w": 20, - "h": 18 - }, - "frame": { - "x": 294, - "y": 305, - "w": 20, - "h": 18 - } - }, - { - "filename": "wl_reset_urge", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 8, - "w": 20, - "h": 18 - }, - "frame": { - "x": 254, - "y": 359, - "w": 20, - "h": 18 - } - }, - { - "filename": "wl_revive", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 8, - "w": 20, - "h": 18 - }, - "frame": { - "x": 274, - "y": 341, - "w": 20, - "h": 18 - } - }, - { - "filename": "wl_super_potion", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 8, - "w": 20, - "h": 18 - }, - "frame": { - "x": 294, - "y": 323, - "w": 20, - "h": 18 - } - }, - { - "filename": "flame_orb", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 7, - "w": 18, - "h": 18 - }, - "frame": { - "x": 254, - "y": 377, - "w": 18, - "h": 18 - } - }, - { - "filename": "light_ball", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 7, - "w": 18, - "h": 18 - }, - "frame": { - "x": 274, - "y": 359, - "w": 18, - "h": 18 - } - }, - { - "filename": "light_stone", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 7, - "w": 18, - "h": 18 - }, - "frame": { - "x": 294, - "y": 341, - "w": 18, - "h": 18 - } - }, - { - "filename": "toxic_orb", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 7, - "w": 18, - "h": 18 - }, - "frame": { - "x": 272, - "y": 377, - "w": 18, - "h": 18 + "h": 20 } }, { @@ -7080,12 +5988,33 @@ "h": 16 }, "frame": { - "x": 314, - "y": 305, + "x": 399, + "y": 216, "w": 16, "h": 16 } }, + { + "filename": "smooth_meteorite", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 6, + "w": 20, + "h": 20 + }, + "frame": { + "x": 379, + "y": 236, + "w": 20, + "h": 20 + } + }, { "filename": "absolite", "rotated": false, @@ -7101,8 +6030,8 @@ "h": 16 }, "frame": { - "x": 292, - "y": 359, + "x": 399, + "y": 232, "w": 16, "h": 16 } @@ -7122,12 +6051,33 @@ "h": 16 }, "frame": { - "x": 314, - "y": 321, + "x": 399, + "y": 248, "w": 16, "h": 16 } }, + { + "filename": "strange_ball", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 6, + "w": 20, + "h": 20 + }, + "frame": { + "x": 379, + "y": 256, + "w": 20, + "h": 20 + } + }, { "filename": "aggronite", "rotated": false, @@ -7143,12 +6093,33 @@ "h": 16 }, "frame": { - "x": 271, - "y": 395, + "x": 399, + "y": 264, "w": 16, "h": 16 } }, + { + "filename": "ub", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 6, + "w": 20, + "h": 20 + }, + "frame": { + "x": 379, + "y": 276, + "w": 20, + "h": 20 + } + }, { "filename": "alakazite", "rotated": false, @@ -7164,12 +6135,117 @@ "h": 16 }, "frame": { - "x": 308, - "y": 359, + "x": 399, + "y": 280, "w": 16, "h": 16 } }, + { + "filename": "unremarkable_teacup", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 7, + "w": 21, + "h": 18 + }, + "frame": { + "x": 379, + "y": 296, + "w": 21, + "h": 18 + } + }, + { + "filename": "eviolite", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 8, + "w": 15, + "h": 15 + }, + "frame": { + "x": 400, + "y": 296, + "w": 15, + "h": 15 + } + }, + { + "filename": "prism_scale", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 9, + "y": 8, + "w": 15, + "h": 15 + }, + "frame": { + "x": 400, + "y": 311, + "w": 15, + "h": 15 + } + }, + { + "filename": "lum_berry", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 7, + "w": 20, + "h": 19 + }, + "frame": { + "x": 359, + "y": 306, + "w": 20, + "h": 19 + } + }, + { + "filename": "mega_bracelet", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 8, + "w": 20, + "h": 16 + }, + "frame": { + "x": 379, + "y": 314, + "w": 20, + "h": 16 + } + }, { "filename": "altarianite", "rotated": false, @@ -7185,12 +6261,327 @@ "h": 16 }, "frame": { - "x": 314, - "y": 337, + "x": 399, + "y": 326, "w": 16, "h": 16 } }, + { + "filename": "razor_claw", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 7, + "w": 20, + "h": 19 + }, + "frame": { + "x": 195, + "y": 305, + "w": 20, + "h": 19 + } + }, + { + "filename": "oval_stone", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 7, + "w": 18, + "h": 19 + }, + "frame": { + "x": 195, + "y": 324, + "w": 18, + "h": 19 + } + }, + { + "filename": "lucky_egg", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 6, + "w": 17, + "h": 20 + }, + "frame": { + "x": 215, + "y": 305, + "w": 17, + "h": 20 + } + }, + { + "filename": "razor_fang", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 6, + "w": 18, + "h": 20 + }, + "frame": { + "x": 232, + "y": 302, + "w": 18, + "h": 20 + } + }, + { + "filename": "wl_ability_urge", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 8, + "w": 20, + "h": 18 + }, + "frame": { + "x": 250, + "y": 302, + "w": 20, + "h": 18 + } + }, + { + "filename": "wl_antidote", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 8, + "w": 20, + "h": 18 + }, + "frame": { + "x": 270, + "y": 303, + "w": 20, + "h": 18 + } + }, + { + "filename": "wl_awakening", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 8, + "w": 20, + "h": 18 + }, + "frame": { + "x": 213, + "y": 325, + "w": 20, + "h": 18 + } + }, + { + "filename": "wl_burn_heal", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 8, + "w": 20, + "h": 18 + }, + "frame": { + "x": 197, + "y": 343, + "w": 20, + "h": 18 + } + }, + { + "filename": "candy", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 11, + "w": 18, + "h": 18 + }, + "frame": { + "x": 217, + "y": 343, + "w": 18, + "h": 18 + } + }, + { + "filename": "wl_custom_spliced", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 8, + "w": 20, + "h": 18 + }, + "frame": { + "x": 290, + "y": 304, + "w": 20, + "h": 18 + } + }, + { + "filename": "dark_stone", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 7, + "w": 18, + "h": 18 + }, + "frame": { + "x": 233, + "y": 322, + "w": 18, + "h": 18 + } + }, + { + "filename": "flame_orb", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 7, + "w": 18, + "h": 18 + }, + "frame": { + "x": 251, + "y": 320, + "w": 18, + "h": 18 + } + }, + { + "filename": "wl_custom_thief", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 8, + "w": 20, + "h": 18 + }, + "frame": { + "x": 269, + "y": 321, + "w": 20, + "h": 18 + } + }, + { + "filename": "wl_elixir", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 8, + "w": 20, + "h": 18 + }, + "frame": { + "x": 289, + "y": 322, + "w": 20, + "h": 18 + } + }, + { + "filename": "light_ball", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 7, + "w": 18, + "h": 18 + }, + "frame": { + "x": 235, + "y": 340, + "w": 18, + "h": 18 + } + }, { "filename": "ampharosite", "rotated": false, @@ -7206,12 +6597,180 @@ "h": 16 }, "frame": { - "x": 331, - "y": 289, + "x": 253, + "y": 338, "w": 16, "h": 16 } }, + { + "filename": "wl_ether", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 8, + "w": 20, + "h": 18 + }, + "frame": { + "x": 269, + "y": 339, + "w": 20, + "h": 18 + } + }, + { + "filename": "wl_full_heal", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 8, + "w": 20, + "h": 18 + }, + "frame": { + "x": 289, + "y": 340, + "w": 20, + "h": 18 + } + }, + { + "filename": "wl_full_restore", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 8, + "w": 20, + "h": 18 + }, + "frame": { + "x": 310, + "y": 308, + "w": 20, + "h": 18 + } + }, + { + "filename": "wl_guard_spec", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 8, + "w": 20, + "h": 18 + }, + "frame": { + "x": 309, + "y": 326, + "w": 20, + "h": 18 + } + }, + { + "filename": "wl_hyper_potion", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 8, + "w": 20, + "h": 18 + }, + "frame": { + "x": 309, + "y": 344, + "w": 20, + "h": 18 + } + }, + { + "filename": "wl_ice_heal", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 8, + "w": 20, + "h": 18 + }, + "frame": { + "x": 330, + "y": 309, + "w": 20, + "h": 18 + } + }, + { + "filename": "wl_item_drop", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 8, + "w": 20, + "h": 18 + }, + "frame": { + "x": 329, + "y": 327, + "w": 20, + "h": 18 + } + }, + { + "filename": "wl_item_urge", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 8, + "w": 20, + "h": 18 + }, + "frame": { + "x": 329, + "y": 345, + "w": 20, + "h": 18 + } + }, { "filename": "audinite", "rotated": false, @@ -7227,12 +6786,117 @@ "h": 16 }, "frame": { - "x": 330, - "y": 305, + "x": 253, + "y": 354, "w": 16, "h": 16 } }, + { + "filename": "wl_max_elixir", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 8, + "w": 20, + "h": 18 + }, + "frame": { + "x": 269, + "y": 357, + "w": 20, + "h": 18 + } + }, + { + "filename": "wl_max_ether", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 8, + "w": 20, + "h": 18 + }, + "frame": { + "x": 289, + "y": 358, + "w": 20, + "h": 18 + } + }, + { + "filename": "wl_max_potion", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 8, + "w": 20, + "h": 18 + }, + "frame": { + "x": 309, + "y": 362, + "w": 20, + "h": 18 + } + }, + { + "filename": "wl_max_revive", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 8, + "w": 20, + "h": 18 + }, + "frame": { + "x": 329, + "y": 363, + "w": 20, + "h": 18 + } + }, + { + "filename": "light_stone", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 7, + "w": 18, + "h": 18 + }, + "frame": { + "x": 235, + "y": 358, + "w": 18, + "h": 18 + } + }, { "filename": "banettite", "rotated": false, @@ -7248,12 +6912,159 @@ "h": 16 }, "frame": { - "x": 347, - "y": 289, + "x": 253, + "y": 370, "w": 16, "h": 16 } }, + { + "filename": "wl_paralyze_heal", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 8, + "w": 20, + "h": 18 + }, + "frame": { + "x": 269, + "y": 375, + "w": 20, + "h": 18 + } + }, + { + "filename": "wl_potion", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 8, + "w": 20, + "h": 18 + }, + "frame": { + "x": 289, + "y": 376, + "w": 20, + "h": 18 + } + }, + { + "filename": "wl_reset_urge", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 8, + "w": 20, + "h": 18 + }, + "frame": { + "x": 309, + "y": 380, + "w": 20, + "h": 18 + } + }, + { + "filename": "wl_revive", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 8, + "w": 20, + "h": 18 + }, + "frame": { + "x": 329, + "y": 381, + "w": 20, + "h": 18 + } + }, + { + "filename": "wl_super_potion", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 8, + "w": 20, + "h": 18 + }, + "frame": { + "x": 116, + "y": 357, + "w": 20, + "h": 18 + } + }, + { + "filename": "toxic_orb", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 7, + "w": 18, + "h": 18 + }, + "frame": { + "x": 115, + "y": 375, + "w": 18, + "h": 18 + } + }, + { + "filename": "relic_band", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 9, + "w": 17, + "h": 16 + }, + "frame": { + "x": 114, + "y": 393, + "w": 17, + "h": 16 + } + }, { "filename": "beedrillite", "rotated": false, @@ -7269,8 +7080,8 @@ "h": 16 }, "frame": { - "x": 330, - "y": 321, + "x": 131, + "y": 399, "w": 16, "h": 16 } @@ -7290,8 +7101,8 @@ "h": 16 }, "frame": { - "x": 346, - "y": 305, + "x": 147, + "y": 399, "w": 16, "h": 16 } @@ -7311,8 +7122,8 @@ "h": 16 }, "frame": { - "x": 330, - "y": 337, + "x": 163, + "y": 399, "w": 16, "h": 16 } @@ -7332,8 +7143,8 @@ "h": 16 }, "frame": { - "x": 346, - "y": 321, + "x": 179, + "y": 399, "w": 16, "h": 16 } @@ -7353,8 +7164,8 @@ "h": 16 }, "frame": { - "x": 346, - "y": 337, + "x": 195, + "y": 399, "w": 16, "h": 16 } @@ -7374,8 +7185,8 @@ "h": 16 }, "frame": { - "x": 324, - "y": 353, + "x": 211, + "y": 399, "w": 16, "h": 16 } @@ -7395,8 +7206,8 @@ "h": 16 }, "frame": { - "x": 340, - "y": 353, + "x": 227, + "y": 399, "w": 16, "h": 16 } @@ -7416,8 +7227,8 @@ "h": 16 }, "frame": { - "x": 324, - "y": 369, + "x": 243, + "y": 399, "w": 16, "h": 16 } @@ -7437,8 +7248,8 @@ "h": 16 }, "frame": { - "x": 340, - "y": 369, + "x": 259, + "y": 399, "w": 16, "h": 16 } @@ -7458,8 +7269,8 @@ "h": 16 }, "frame": { - "x": 356, - "y": 353, + "x": 275, + "y": 399, "w": 16, "h": 16 } @@ -7479,8 +7290,8 @@ "h": 16 }, "frame": { - "x": 356, - "y": 369, + "x": 291, + "y": 399, "w": 16, "h": 16 } @@ -7500,8 +7311,8 @@ "h": 16 }, "frame": { - "x": 287, - "y": 395, + "x": 307, + "y": 399, "w": 16, "h": 16 } @@ -7521,8 +7332,8 @@ "h": 16 }, "frame": { - "x": 290, - "y": 377, + "x": 323, + "y": 399, "w": 16, "h": 16 } @@ -7542,8 +7353,8 @@ "h": 16 }, "frame": { - "x": 306, - "y": 375, + "x": 339, + "y": 399, "w": 16, "h": 16 } @@ -7563,12 +7374,33 @@ "h": 16 }, "frame": { - "x": 322, - "y": 385, + "x": 133, + "y": 375, "w": 16, "h": 16 } }, + { + "filename": "candy_overlay", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 12, + "w": 16, + "h": 15 + }, + "frame": { + "x": 136, + "y": 360, + "w": 16, + "h": 15 + } + }, { "filename": "kangaskhanite", "rotated": false, @@ -7584,8 +7416,8 @@ "h": 16 }, "frame": { - "x": 338, - "y": 385, + "x": 152, + "y": 360, "w": 16, "h": 16 } @@ -7605,8 +7437,8 @@ "h": 16 }, "frame": { - "x": 354, - "y": 385, + "x": 149, + "y": 376, "w": 16, "h": 16 } @@ -7626,8 +7458,8 @@ "h": 16 }, "frame": { - "x": 306, - "y": 391, + "x": 168, + "y": 361, "w": 16, "h": 16 } @@ -7647,8 +7479,8 @@ "h": 16 }, "frame": { - "x": 303, - "y": 407, + "x": 184, + "y": 361, "w": 16, "h": 16 } @@ -7668,8 +7500,8 @@ "h": 16 }, "frame": { - "x": 319, - "y": 407, + "x": 200, + "y": 361, "w": 16, "h": 16 } @@ -7689,8 +7521,8 @@ "h": 16 }, "frame": { - "x": 335, - "y": 401, + "x": 216, + "y": 361, "w": 16, "h": 16 } @@ -7710,8 +7542,8 @@ "h": 16 }, "frame": { - "x": 351, - "y": 401, + "x": 165, + "y": 377, "w": 16, "h": 16 } @@ -7731,8 +7563,8 @@ "h": 16 }, "frame": { - "x": 367, - "y": 401, + "x": 181, + "y": 377, "w": 16, "h": 16 } @@ -7752,8 +7584,8 @@ "h": 16 }, "frame": { - "x": 370, - "y": 385, + "x": 197, + "y": 377, "w": 16, "h": 16 } @@ -7773,8 +7605,8 @@ "h": 16 }, "frame": { - "x": 383, - "y": 401, + "x": 213, + "y": 377, "w": 16, "h": 16 } @@ -7794,8 +7626,8 @@ "h": 16 }, "frame": { - "x": 363, - "y": 289, + "x": 229, + "y": 377, "w": 16, "h": 16 } @@ -7815,8 +7647,8 @@ "h": 16 }, "frame": { - "x": 362, - "y": 305, + "x": 349, + "y": 327, "w": 16, "h": 16 } @@ -7836,8 +7668,8 @@ "h": 16 }, "frame": { - "x": 362, - "y": 321, + "x": 349, + "y": 343, "w": 16, "h": 16 } @@ -7857,8 +7689,8 @@ "h": 16 }, "frame": { - "x": 362, - "y": 337, + "x": 349, + "y": 359, "w": 16, "h": 16 } @@ -7878,8 +7710,8 @@ "h": 16 }, "frame": { - "x": 379, - "y": 288, + "x": 349, + "y": 375, "w": 16, "h": 16 } @@ -7899,8 +7731,8 @@ "h": 16 }, "frame": { - "x": 372, - "y": 353, + "x": 365, + "y": 330, "w": 16, "h": 16 } @@ -7920,8 +7752,8 @@ "h": 16 }, "frame": { - "x": 372, - "y": 369, + "x": 381, + "y": 330, "w": 16, "h": 16 } @@ -7941,8 +7773,8 @@ "h": 16 }, "frame": { - "x": 386, - "y": 385, + "x": 365, + "y": 346, "w": 16, "h": 16 } @@ -7962,8 +7794,8 @@ "h": 16 }, "frame": { - "x": 395, - "y": 291, + "x": 365, + "y": 362, "w": 16, "h": 16 } @@ -7983,8 +7815,8 @@ "h": 16 }, "frame": { - "x": 379, - "y": 304, + "x": 381, + "y": 346, "w": 16, "h": 16 } @@ -8004,8 +7836,8 @@ "h": 16 }, "frame": { - "x": 378, - "y": 320, + "x": 381, + "y": 362, "w": 16, "h": 16 } @@ -8025,8 +7857,8 @@ "h": 16 }, "frame": { - "x": 378, - "y": 336, + "x": 397, + "y": 342, "w": 16, "h": 16 } @@ -8046,8 +7878,8 @@ "h": 16 }, "frame": { - "x": 395, - "y": 307, + "x": 397, + "y": 358, "w": 16, "h": 16 } @@ -8067,8 +7899,8 @@ "h": 16 }, "frame": { - "x": 394, - "y": 323, + "x": 365, + "y": 378, "w": 16, "h": 16 } @@ -8088,8 +7920,8 @@ "h": 16 }, "frame": { - "x": 394, - "y": 339, + "x": 381, + "y": 378, "w": 16, "h": 16 } @@ -8109,8 +7941,8 @@ "h": 16 }, "frame": { - "x": 388, - "y": 355, + "x": 397, + "y": 374, "w": 16, "h": 16 } @@ -8130,8 +7962,8 @@ "h": 16 }, "frame": { - "x": 404, - "y": 355, + "x": 397, + "y": 390, "w": 16, "h": 16 } @@ -8142,6 +7974,6 @@ "meta": { "app": "https://www.codeandweb.com/texturepacker", "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:b19583358b5a9684af121049c2bffede:505e1a5a706bc8778cdca6f943f98457:110e074689c9edd2c54833ce2e4d9270$" + "smartupdate": "$TexturePacker:SmartUpdate:d3848d1a2f1d71413dd485f5f629a4eb:a418dc4833fcd357930c1512c8417df7:110e074689c9edd2c54833ce2e4d9270$" } } diff --git a/public/images/items.png b/public/images/items.png index 58e9bceedd9..d9efd889f1f 100644 Binary files a/public/images/items.png and b/public/images/items.png differ diff --git a/public/images/items/baton.png b/public/images/items/baton.png new file mode 100644 index 00000000000..43ec2b8a456 Binary files /dev/null and b/public/images/items/baton.png differ diff --git a/public/images/items/stick.png b/public/images/items/leek.png similarity index 100% rename from public/images/items/stick.png rename to public/images/items/leek.png diff --git a/public/images/pokemon/563.json b/public/images/pokemon/563.json index 81979d38c9e..666ec547d18 100644 --- a/public/images/pokemon/563.json +++ b/public/images/pokemon/563.json @@ -1,3485 +1,699 @@ -{ - "textures": [ - { - "image": "563.png", - "format": "RGBA8888", - "size": { - "w": 500, - "h": 500 - }, - "scale": 1, - "frames": [ - { - "filename": "0026.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 116, - "h": 81 - }, - "frame": { - "x": 0, - "y": 0, - "w": 116, - "h": 81 - } - }, - { - "filename": "0027.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 116, - "h": 81 - }, - "frame": { - "x": 0, - "y": 0, - "w": 116, - "h": 81 - } - }, - { - "filename": "0061.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 116, - "h": 81 - }, - "frame": { - "x": 0, - "y": 0, - "w": 116, - "h": 81 - } - }, - { - "filename": "0062.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 116, - "h": 81 - }, - "frame": { - "x": 0, - "y": 0, - "w": 116, - "h": 81 - } - }, - { - "filename": "0156.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 116, - "h": 81 - }, - "frame": { - "x": 0, - "y": 0, - "w": 116, - "h": 81 - } - }, - { - "filename": "0157.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 116, - "h": 81 - }, - "frame": { - "x": 0, - "y": 0, - "w": 116, - "h": 81 - } - }, - { - "filename": "0025.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 19, - "y": 0, - "w": 103, - "h": 88 - }, - "frame": { - "x": 0, - "y": 81, - "w": 103, - "h": 88 - } - }, - { - "filename": "0060.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 19, - "y": 0, - "w": 103, - "h": 88 - }, - "frame": { - "x": 0, - "y": 81, - "w": 103, - "h": 88 - } - }, - { - "filename": "0155.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 19, - "y": 0, - "w": 103, - "h": 88 - }, - "frame": { - "x": 0, - "y": 81, - "w": 103, - "h": 88 - } - }, - { - "filename": "0028.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 1, - "y": 13, - "w": 116, - "h": 69 - }, - "frame": { - "x": 116, - "y": 0, - "w": 116, - "h": 69 - } - }, - { - "filename": "0029.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 1, - "y": 13, - "w": 116, - "h": 69 - }, - "frame": { - "x": 116, - "y": 0, - "w": 116, - "h": 69 - } - }, - { - "filename": "0063.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 1, - "y": 13, - "w": 116, - "h": 69 - }, - "frame": { - "x": 116, - "y": 0, - "w": 116, - "h": 69 - } - }, - { - "filename": "0064.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 1, - "y": 13, - "w": 116, - "h": 69 - }, - "frame": { - "x": 116, - "y": 0, - "w": 116, - "h": 69 - } - }, - { - "filename": "0158.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 1, - "y": 13, - "w": 116, - "h": 69 - }, - "frame": { - "x": 116, - "y": 0, - "w": 116, - "h": 69 - } - }, - { - "filename": "0159.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 1, - "y": 13, - "w": 116, - "h": 69 - }, - "frame": { - "x": 116, - "y": 0, - "w": 116, - "h": 69 - } - }, - { - "filename": "0031.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 101, - "h": 81 - }, - "frame": { - "x": 0, - "y": 169, - "w": 101, - "h": 81 - } - }, - { - "filename": "0032.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 101, - "h": 81 - }, - "frame": { - "x": 0, - "y": 169, - "w": 101, - "h": 81 - } - }, - { - "filename": "0066.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 101, - "h": 81 - }, - "frame": { - "x": 0, - "y": 169, - "w": 101, - "h": 81 - } - }, - { - "filename": "0067.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 101, - "h": 81 - }, - "frame": { - "x": 0, - "y": 169, - "w": 101, - "h": 81 - } - }, - { - "filename": "0161.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 101, - "h": 81 - }, - "frame": { - "x": 0, - "y": 169, - "w": 101, - "h": 81 - } - }, - { - "filename": "0162.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 101, - "h": 81 - }, - "frame": { - "x": 0, - "y": 169, - "w": 101, - "h": 81 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 99, - "h": 81 - }, - "frame": { - "x": 0, - "y": 250, - "w": 99, - "h": 81 - } - }, - { - "filename": "0040.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 99, - "h": 81 - }, - "frame": { - "x": 0, - "y": 250, - "w": 99, - "h": 81 - } - }, - { - "filename": "0135.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 99, - "h": 81 - }, - "frame": { - "x": 0, - "y": 250, - "w": 99, - "h": 81 - } - }, - { - "filename": "0033.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 3, - "y": 2, - "w": 98, - "h": 81 - }, - "frame": { - "x": 0, - "y": 331, - "w": 98, - "h": 81 - } - }, - { - "filename": "0034.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 3, - "y": 2, - "w": 98, - "h": 81 - }, - "frame": { - "x": 0, - "y": 331, - "w": 98, - "h": 81 - } - }, - { - "filename": "0068.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 3, - "y": 2, - "w": 98, - "h": 81 - }, - "frame": { - "x": 0, - "y": 331, - "w": 98, - "h": 81 - } - }, - { - "filename": "0069.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 3, - "y": 2, - "w": 98, - "h": 81 - }, - "frame": { - "x": 0, - "y": 331, - "w": 98, - "h": 81 - } - }, - { - "filename": "0163.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 3, - "y": 2, - "w": 98, - "h": 81 - }, - "frame": { - "x": 0, - "y": 331, - "w": 98, - "h": 81 - } - }, - { - "filename": "0164.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 3, - "y": 2, - "w": 98, - "h": 81 - }, - "frame": { - "x": 0, - "y": 331, - "w": 98, - "h": 81 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 4, - "y": 1, - "w": 96, - "h": 81 - }, - "frame": { - "x": 0, - "y": 412, - "w": 96, - "h": 81 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 4, - "y": 1, - "w": 96, - "h": 81 - }, - "frame": { - "x": 0, - "y": 412, - "w": 96, - "h": 81 - } - }, - { - "filename": "0038.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 4, - "y": 1, - "w": 96, - "h": 81 - }, - "frame": { - "x": 0, - "y": 412, - "w": 96, - "h": 81 - } - }, - { - "filename": "0039.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 4, - "y": 1, - "w": 96, - "h": 81 - }, - "frame": { - "x": 0, - "y": 412, - "w": 96, - "h": 81 - } - }, - { - "filename": "0133.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 4, - "y": 1, - "w": 96, - "h": 81 - }, - "frame": { - "x": 0, - "y": 412, - "w": 96, - "h": 81 - } - }, - { - "filename": "0134.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 4, - "y": 1, - "w": 96, - "h": 81 - }, - "frame": { - "x": 0, - "y": 412, - "w": 96, - "h": 81 - } - }, - { - "filename": "0030.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 10, - "w": 108, - "h": 72 - }, - "frame": { - "x": 232, - "y": 0, - "w": 108, - "h": 72 - } - }, - { - "filename": "0065.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 10, - "w": 108, - "h": 72 - }, - "frame": { - "x": 232, - "y": 0, - "w": 108, - "h": 72 - } - }, - { - "filename": "0160.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 10, - "w": 108, - "h": 72 - }, - "frame": { - "x": 232, - "y": 0, - "w": 108, - "h": 72 - } - }, - { - "filename": "0023.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 13, - "y": 13, - "w": 106, - "h": 72 - }, - "frame": { - "x": 340, - "y": 0, - "w": 106, - "h": 72 - } - }, - { - "filename": "0024.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 13, - "y": 13, - "w": 106, - "h": 72 - }, - "frame": { - "x": 340, - "y": 0, - "w": 106, - "h": 72 - } - }, - { - "filename": "0058.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 13, - "y": 13, - "w": 106, - "h": 72 - }, - "frame": { - "x": 340, - "y": 0, - "w": 106, - "h": 72 - } - }, - { - "filename": "0059.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 13, - "y": 13, - "w": 106, - "h": 72 - }, - "frame": { - "x": 340, - "y": 0, - "w": 106, - "h": 72 - } - }, - { - "filename": "0153.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 13, - "y": 13, - "w": 106, - "h": 72 - }, - "frame": { - "x": 340, - "y": 0, - "w": 106, - "h": 72 - } - }, - { - "filename": "0154.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 13, - "y": 13, - "w": 106, - "h": 72 - }, - "frame": { - "x": 340, - "y": 0, - "w": 106, - "h": 72 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 8, - "y": 11, - "w": 107, - "h": 68 - }, - "frame": { - "x": 116, - "y": 69, - "w": 107, - "h": 68 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 8, - "y": 11, - "w": 107, - "h": 68 - }, - "frame": { - "x": 116, - "y": 69, - "w": 107, - "h": 68 - } - }, - { - "filename": "0048.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 8, - "y": 11, - "w": 107, - "h": 68 - }, - "frame": { - "x": 116, - "y": 69, - "w": 107, - "h": 68 - } - }, - { - "filename": "0049.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 8, - "y": 11, - "w": 107, - "h": 68 - }, - "frame": { - "x": 116, - "y": 69, - "w": 107, - "h": 68 - } - }, - { - "filename": "0143.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 8, - "y": 11, - "w": 107, - "h": 68 - }, - "frame": { - "x": 116, - "y": 69, - "w": 107, - "h": 68 - } - }, - { - "filename": "0144.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 8, - "y": 11, - "w": 107, - "h": 68 - }, - "frame": { - "x": 116, - "y": 69, - "w": 107, - "h": 68 - } - }, - { - "filename": "0021.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 9, - "y": 15, - "w": 105, - "h": 68 - }, - "frame": { - "x": 223, - "y": 72, - "w": 105, - "h": 68 - } - }, - { - "filename": "0022.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 9, - "y": 15, - "w": 105, - "h": 68 - }, - "frame": { - "x": 223, - "y": 72, - "w": 105, - "h": 68 - } - }, - { - "filename": "0056.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 9, - "y": 15, - "w": 105, - "h": 68 - }, - "frame": { - "x": 223, - "y": 72, - "w": 105, - "h": 68 - } - }, - { - "filename": "0057.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 9, - "y": 15, - "w": 105, - "h": 68 - }, - "frame": { - "x": 223, - "y": 72, - "w": 105, - "h": 68 - } - }, - { - "filename": "0151.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 9, - "y": 15, - "w": 105, - "h": 68 - }, - "frame": { - "x": 223, - "y": 72, - "w": 105, - "h": 68 - } - }, - { - "filename": "0152.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 9, - "y": 15, - "w": 105, - "h": 68 - }, - "frame": { - "x": 223, - "y": 72, - "w": 105, - "h": 68 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 8, - "y": 10, - "w": 104, - "h": 67 - }, - "frame": { - "x": 328, - "y": 72, - "w": 104, - "h": 67 - } - }, - { - "filename": "0050.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 8, - "y": 10, - "w": 104, - "h": 67 - }, - "frame": { - "x": 328, - "y": 72, - "w": 104, - "h": 67 - } - }, - { - "filename": "0145.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 8, - "y": 10, - "w": 104, - "h": 67 - }, - "frame": { - "x": 328, - "y": 72, - "w": 104, - "h": 67 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 8, - "y": 14, - "w": 102, - "h": 68 - }, - "frame": { - "x": 103, - "y": 137, - "w": 102, - "h": 68 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 8, - "y": 14, - "w": 102, - "h": 68 - }, - "frame": { - "x": 103, - "y": 137, - "w": 102, - "h": 68 - } - }, - { - "filename": "0046.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 8, - "y": 14, - "w": 102, - "h": 68 - }, - "frame": { - "x": 103, - "y": 137, - "w": 102, - "h": 68 - } - }, - { - "filename": "0047.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 8, - "y": 14, - "w": 102, - "h": 68 - }, - "frame": { - "x": 103, - "y": 137, - "w": 102, - "h": 68 - } - }, - { - "filename": "0141.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 8, - "y": 14, - "w": 102, - "h": 68 - }, - "frame": { - "x": 103, - "y": 137, - "w": 102, - "h": 68 - } - }, - { - "filename": "0142.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 8, - "y": 14, - "w": 102, - "h": 68 - }, - "frame": { - "x": 103, - "y": 137, - "w": 102, - "h": 68 - } - }, - { - "filename": "0020.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 7, - "y": 9, - "w": 98, - "h": 73 - }, - "frame": { - "x": 205, - "y": 140, - "w": 98, - "h": 73 - } - }, - { - "filename": "0055.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 7, - "y": 9, - "w": 98, - "h": 73 - }, - "frame": { - "x": 205, - "y": 140, - "w": 98, - "h": 73 - } - }, - { - "filename": "0150.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 7, - "y": 9, - "w": 98, - "h": 73 - }, - "frame": { - "x": 205, - "y": 140, - "w": 98, - "h": 73 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 96, - "h": 75 - }, - "frame": { - "x": 101, - "y": 205, - "w": 96, - "h": 75 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 96, - "h": 75 - }, - "frame": { - "x": 101, - "y": 205, - "w": 96, - "h": 75 - } - }, - { - "filename": "0041.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 96, - "h": 75 - }, - "frame": { - "x": 101, - "y": 205, - "w": 96, - "h": 75 - } - }, - { - "filename": "0042.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 96, - "h": 75 - }, - "frame": { - "x": 101, - "y": 205, - "w": 96, - "h": 75 - } - }, - { - "filename": "0136.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 96, - "h": 75 - }, - "frame": { - "x": 101, - "y": 205, - "w": 96, - "h": 75 - } - }, - { - "filename": "0137.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 96, - "h": 75 - }, - "frame": { - "x": 101, - "y": 205, - "w": 96, - "h": 75 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 9, - "y": 7, - "w": 94, - "h": 75 - }, - "frame": { - "x": 197, - "y": 213, - "w": 94, - "h": 75 - } - }, - { - "filename": "0045.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 9, - "y": 7, - "w": 94, - "h": 75 - }, - "frame": { - "x": 197, - "y": 213, - "w": 94, - "h": 75 - } - }, - { - "filename": "0140.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 9, - "y": 7, - "w": 94, - "h": 75 - }, - "frame": { - "x": 197, - "y": 213, - "w": 94, - "h": 75 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 9, - "y": 4, - "w": 94, - "h": 78 - }, - "frame": { - "x": 99, - "y": 280, - "w": 94, - "h": 78 - } - }, - { - "filename": "0017.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 9, - "y": 4, - "w": 94, - "h": 78 - }, - "frame": { - "x": 99, - "y": 280, - "w": 94, - "h": 78 - } - }, - { - "filename": "0051.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 9, - "y": 4, - "w": 94, - "h": 78 - }, - "frame": { - "x": 99, - "y": 280, - "w": 94, - "h": 78 - } - }, - { - "filename": "0052.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 9, - "y": 4, - "w": 94, - "h": 78 - }, - "frame": { - "x": 99, - "y": 280, - "w": 94, - "h": 78 - } - }, - { - "filename": "0146.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 9, - "y": 4, - "w": 94, - "h": 78 - }, - "frame": { - "x": 99, - "y": 280, - "w": 94, - "h": 78 - } - }, - { - "filename": "0147.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 9, - "y": 4, - "w": 94, - "h": 78 - }, - "frame": { - "x": 99, - "y": 280, - "w": 94, - "h": 78 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 93, - "h": 78 - }, - "frame": { - "x": 193, - "y": 288, - "w": 93, - "h": 78 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 93, - "h": 78 - }, - "frame": { - "x": 193, - "y": 288, - "w": 93, - "h": 78 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 93, - "h": 78 - }, - "frame": { - "x": 193, - "y": 288, - "w": 93, - "h": 78 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 93, - "h": 78 - }, - "frame": { - "x": 193, - "y": 288, - "w": 93, - "h": 78 - } - }, - { - "filename": "0018.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 93, - "h": 78 - }, - "frame": { - "x": 193, - "y": 288, - "w": 93, - "h": 78 - } - }, - { - "filename": "0019.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 93, - "h": 78 - }, - "frame": { - "x": 193, - "y": 288, - "w": 93, - "h": 78 - } - }, - { - "filename": "0035.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 93, - "h": 78 - }, - "frame": { - "x": 193, - "y": 288, - "w": 93, - "h": 78 - } - }, - { - "filename": "0036.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 93, - "h": 78 - }, - "frame": { - "x": 193, - "y": 288, - "w": 93, - "h": 78 - } - }, - { - "filename": "0037.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 93, - "h": 78 - }, - "frame": { - "x": 193, - "y": 288, - "w": 93, - "h": 78 - } - }, - { - "filename": "0043.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 93, - "h": 78 - }, - "frame": { - "x": 193, - "y": 288, - "w": 93, - "h": 78 - } - }, - { - "filename": "0044.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 93, - "h": 78 - }, - "frame": { - "x": 193, - "y": 288, - "w": 93, - "h": 78 - } - }, - { - "filename": "0053.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 93, - "h": 78 - }, - "frame": { - "x": 193, - "y": 288, - "w": 93, - "h": 78 - } - }, - { - "filename": "0054.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 93, - "h": 78 - }, - "frame": { - "x": 193, - "y": 288, - "w": 93, - "h": 78 - } - }, - { - "filename": "0070.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 93, - "h": 78 - }, - "frame": { - "x": 193, - "y": 288, - "w": 93, - "h": 78 - } - }, - { - "filename": "0131.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 93, - "h": 78 - }, - "frame": { - "x": 193, - "y": 288, - "w": 93, - "h": 78 - } - }, - { - "filename": "0132.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 93, - "h": 78 - }, - "frame": { - "x": 193, - "y": 288, - "w": 93, - "h": 78 - } - }, - { - "filename": "0138.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 93, - "h": 78 - }, - "frame": { - "x": 193, - "y": 288, - "w": 93, - "h": 78 - } - }, - { - "filename": "0139.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 93, - "h": 78 - }, - "frame": { - "x": 193, - "y": 288, - "w": 93, - "h": 78 - } - }, - { - "filename": "0148.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 93, - "h": 78 - }, - "frame": { - "x": 193, - "y": 288, - "w": 93, - "h": 78 - } - }, - { - "filename": "0149.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 93, - "h": 78 - }, - "frame": { - "x": 193, - "y": 288, - "w": 93, - "h": 78 - } - }, - { - "filename": "0165.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 93, - "h": 78 - }, - "frame": { - "x": 193, - "y": 288, - "w": 93, - "h": 78 - } - }, - { - "filename": "0071.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 93, - "h": 78 - }, - "frame": { - "x": 98, - "y": 358, - "w": 93, - "h": 78 - } - }, - { - "filename": "0072.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 93, - "h": 78 - }, - "frame": { - "x": 98, - "y": 358, - "w": 93, - "h": 78 - } - }, - { - "filename": "0073.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 7, - "y": 4, - "w": 93, - "h": 78 - }, - "frame": { - "x": 191, - "y": 366, - "w": 93, - "h": 78 - } - }, - { - "filename": "0081.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 19, - "y": 18, - "w": 73, - "h": 64 - }, - "frame": { - "x": 96, - "y": 436, - "w": 73, - "h": 64 - } - }, - { - "filename": "0125.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 28, - "y": 17, - "w": 52, - "h": 65 - }, - "frame": { - "x": 446, - "y": 0, - "w": 52, - "h": 65 - } - }, - { - "filename": "0074.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 6, - "y": 3, - "w": 93, - "h": 79 - }, - "frame": { - "x": 303, - "y": 140, - "w": 93, - "h": 79 - } - }, - { - "filename": "0075.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 5, - "y": 4, - "w": 93, - "h": 78 - }, - "frame": { - "x": 291, - "y": 219, - "w": 93, - "h": 78 - } - }, - { - "filename": "0076.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 5, - "y": 4, - "w": 93, - "h": 78 - }, - "frame": { - "x": 291, - "y": 219, - "w": 93, - "h": 78 - } - }, - { - "filename": "0077.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 6, - "y": 5, - "w": 93, - "h": 77 - }, - "frame": { - "x": 286, - "y": 297, - "w": 93, - "h": 77 - } - }, - { - "filename": "0078.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 12, - "y": 9, - "w": 85, - "h": 73 - }, - "frame": { - "x": 284, - "y": 374, - "w": 85, - "h": 73 - } - }, - { - "filename": "0129.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 16, - "y": 5, - "w": 75, - "h": 79 - }, - "frame": { - "x": 396, - "y": 139, - "w": 75, - "h": 79 - } - }, - { - "filename": "0130.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 11, - "y": 4, - "w": 85, - "h": 79 - }, - "frame": { - "x": 384, - "y": 219, - "w": 85, - "h": 79 - } - }, - { - "filename": "0079.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 16, - "y": 15, - "w": 78, - "h": 67 - }, - "frame": { - "x": 379, - "y": 298, - "w": 78, - "h": 67 - } - }, - { - "filename": "0080.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 16, - "y": 15, - "w": 78, - "h": 67 - }, - "frame": { - "x": 379, - "y": 298, - "w": 78, - "h": 67 - } - }, - { - "filename": "0127.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 21, - "y": 8, - "w": 66, - "h": 76 - }, - "frame": { - "x": 369, - "y": 374, - "w": 66, - "h": 76 - } - }, - { - "filename": "0128.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 21, - "y": 8, - "w": 66, - "h": 76 - }, - "frame": { - "x": 369, - "y": 374, - "w": 66, - "h": 76 - } - }, - { - "filename": "0126.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 25, - "y": 12, - "w": 59, - "h": 70 - }, - "frame": { - "x": 435, - "y": 365, - "w": 59, - "h": 70 - } - }, - { - "filename": "0082.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 25, - "y": 19, - "w": 66, - "h": 63 - }, - "frame": { - "x": 432, - "y": 72, - "w": 66, - "h": 63 - } - }, - { - "filename": "0083.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 29, - "y": 20, - "w": 60, - "h": 62 - }, - "frame": { - "x": 435, - "y": 435, - "w": 60, - "h": 62 - } - }, - { - "filename": "0084.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 29, - "y": 20, - "w": 60, - "h": 62 - }, - "frame": { - "x": 435, - "y": 435, - "w": 60, - "h": 62 - } - }, - { - "filename": "0085.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 37, - "y": 20, - "w": 37, - "h": 61 - }, - "frame": { - "x": 457, - "y": 298, - "w": 37, - "h": 61 - } - }, - { - "filename": "0086.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 37, - "y": 20, - "w": 37, - "h": 61 - }, - "frame": { - "x": 457, - "y": 298, - "w": 37, - "h": 61 - } - }, - { - "filename": "0087.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 37, - "y": 20, - "w": 37, - "h": 61 - }, - "frame": { - "x": 457, - "y": 298, - "w": 37, - "h": 61 - } - }, - { - "filename": "0088.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 37, - "y": 20, - "w": 37, - "h": 61 - }, - "frame": { - "x": 457, - "y": 298, - "w": 37, - "h": 61 - } - }, - { - "filename": "0089.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 37, - "y": 16, - "w": 37, - "h": 61 - }, - "frame": { - "x": 457, - "y": 298, - "w": 37, - "h": 61 - } - }, - { - "filename": "0090.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 37, - "y": 16, - "w": 37, - "h": 61 - }, - "frame": { - "x": 457, - "y": 298, - "w": 37, - "h": 61 - } - }, - { - "filename": "0091.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 37, - "y": 17, - "w": 37, - "h": 61 - }, - "frame": { - "x": 457, - "y": 298, - "w": 37, - "h": 61 - } - }, - { - "filename": "0092.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 37, - "y": 17, - "w": 37, - "h": 61 - }, - "frame": { - "x": 457, - "y": 298, - "w": 37, - "h": 61 - } - }, - { - "filename": "0093.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 37, - "y": 20, - "w": 37, - "h": 61 - }, - "frame": { - "x": 457, - "y": 298, - "w": 37, - "h": 61 - } - }, - { - "filename": "0094.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 37, - "y": 20, - "w": 37, - "h": 61 - }, - "frame": { - "x": 457, - "y": 298, - "w": 37, - "h": 61 - } - }, - { - "filename": "0095.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 37, - "y": 14, - "w": 37, - "h": 61 - }, - "frame": { - "x": 457, - "y": 298, - "w": 37, - "h": 61 - } - }, - { - "filename": "0096.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 37, - "y": 14, - "w": 37, - "h": 61 - }, - "frame": { - "x": 457, - "y": 298, - "w": 37, - "h": 61 - } - }, - { - "filename": "0097.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 37, - "y": 15, - "w": 37, - "h": 61 - }, - "frame": { - "x": 457, - "y": 298, - "w": 37, - "h": 61 - } - }, - { - "filename": "0098.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 37, - "y": 15, - "w": 37, - "h": 61 - }, - "frame": { - "x": 457, - "y": 298, - "w": 37, - "h": 61 - } - }, - { - "filename": "0099.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 37, - "y": 20, - "w": 37, - "h": 61 - }, - "frame": { - "x": 457, - "y": 298, - "w": 37, - "h": 61 - } - }, - { - "filename": "0100.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 37, - "y": 20, - "w": 37, - "h": 61 - }, - "frame": { - "x": 457, - "y": 298, - "w": 37, - "h": 61 - } - }, - { - "filename": "0101.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 37, - "y": 20, - "w": 37, - "h": 61 - }, - "frame": { - "x": 457, - "y": 298, - "w": 37, - "h": 61 - } - }, - { - "filename": "0102.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 37, - "y": 20, - "w": 37, - "h": 61 - }, - "frame": { - "x": 457, - "y": 298, - "w": 37, - "h": 61 - } - }, - { - "filename": "0103.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 37, - "y": 20, - "w": 37, - "h": 61 - }, - "frame": { - "x": 457, - "y": 298, - "w": 37, - "h": 61 - } - }, - { - "filename": "0104.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 37, - "y": 20, - "w": 37, - "h": 61 - }, - "frame": { - "x": 457, - "y": 298, - "w": 37, - "h": 61 - } - }, - { - "filename": "0105.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 37, - "y": 20, - "w": 37, - "h": 61 - }, - "frame": { - "x": 457, - "y": 298, - "w": 37, - "h": 61 - } - }, - { - "filename": "0106.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 37, - "y": 20, - "w": 37, - "h": 61 - }, - "frame": { - "x": 457, - "y": 298, - "w": 37, - "h": 61 - } - }, - { - "filename": "0107.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 37, - "y": 16, - "w": 37, - "h": 61 - }, - "frame": { - "x": 457, - "y": 298, - "w": 37, - "h": 61 - } - }, - { - "filename": "0108.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 37, - "y": 16, - "w": 37, - "h": 61 - }, - "frame": { - "x": 457, - "y": 298, - "w": 37, - "h": 61 - } - }, - { - "filename": "0109.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 37, - "y": 17, - "w": 37, - "h": 61 - }, - "frame": { - "x": 457, - "y": 298, - "w": 37, - "h": 61 - } - }, - { - "filename": "0110.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 37, - "y": 17, - "w": 37, - "h": 61 - }, - "frame": { - "x": 457, - "y": 298, - "w": 37, - "h": 61 - } - }, - { - "filename": "0111.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 37, - "y": 20, - "w": 37, - "h": 61 - }, - "frame": { - "x": 457, - "y": 298, - "w": 37, - "h": 61 - } - }, - { - "filename": "0112.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 37, - "y": 20, - "w": 37, - "h": 61 - }, - "frame": { - "x": 457, - "y": 298, - "w": 37, - "h": 61 - } - }, - { - "filename": "0113.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 37, - "y": 20, - "w": 37, - "h": 61 - }, - "frame": { - "x": 457, - "y": 298, - "w": 37, - "h": 61 - } - }, - { - "filename": "0114.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 37, - "y": 20, - "w": 37, - "h": 61 - }, - "frame": { - "x": 457, - "y": 298, - "w": 37, - "h": 61 - } - }, - { - "filename": "0115.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 37, - "y": 20, - "w": 37, - "h": 61 - }, - "frame": { - "x": 457, - "y": 298, - "w": 37, - "h": 61 - } - }, - { - "filename": "0116.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 37, - "y": 20, - "w": 37, - "h": 61 - }, - "frame": { - "x": 457, - "y": 298, - "w": 37, - "h": 61 - } - }, - { - "filename": "0117.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 37, - "y": 20, - "w": 37, - "h": 61 - }, - "frame": { - "x": 457, - "y": 298, - "w": 37, - "h": 61 - } - }, - { - "filename": "0118.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 37, - "y": 20, - "w": 37, - "h": 61 - }, - "frame": { - "x": 457, - "y": 298, - "w": 37, - "h": 61 - } - }, - { - "filename": "0119.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 37, - "y": 20, - "w": 37, - "h": 61 - }, - "frame": { - "x": 457, - "y": 298, - "w": 37, - "h": 61 - } - }, - { - "filename": "0120.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 37, - "y": 20, - "w": 37, - "h": 61 - }, - "frame": { - "x": 457, - "y": 298, - "w": 37, - "h": 61 - } - }, - { - "filename": "0121.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 37, - "y": 20, - "w": 37, - "h": 61 - }, - "frame": { - "x": 457, - "y": 298, - "w": 37, - "h": 61 - } - }, - { - "filename": "0122.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 37, - "y": 20, - "w": 37, - "h": 61 - }, - "frame": { - "x": 457, - "y": 298, - "w": 37, - "h": 61 - } - }, - { - "filename": "0123.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 37, - "y": 20, - "w": 37, - "h": 61 - }, - "frame": { - "x": 457, - "y": 298, - "w": 37, - "h": 61 - } - }, - { - "filename": "0124.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 37, - "y": 20, - "w": 37, - "h": 61 - }, - "frame": { - "x": 457, - "y": 298, - "w": 37, - "h": 61 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:a1c52466e8cdc83633a9fbd5b8675ca7:19652e451f806ac9b4bbb01e17b071df:12f3eae8283ab6c8e555ff3e46b7d8dc$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 388, "y": 225, "w": 91, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 6, "w": 91, "h": 76 }, + "sourceSize": { "w": 114, "h": 89 } + }, + { + "filename": "0002.png", + "frame": { "x": 388, "y": 152, "w": 97, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 10, "w": 97, "h": 72 }, + "sourceSize": { "w": 114, "h": 89 } + }, + { + "filename": "0003.png", + "frame": { "x": 105, "y": 161, "w": 102, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 15, "w": 102, "h": 68 }, + "sourceSize": { "w": 114, "h": 89 } + }, + { + "filename": "0004.png", + "frame": { "x": 95, "y": 90, "w": 101, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 14, "w": 101, "h": 70 }, + "sourceSize": { "w": 114, "h": 89 } + }, + { + "filename": "0005.png", + "frame": { "x": 108, "y": 0, "w": 94, "h": 89 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 20, "y": 0, "w": 94, "h": 89 }, + "sourceSize": { "w": 114, "h": 89 } + }, + { + "filename": "0006.png", + "frame": { "x": 0, "y": 0, "w": 107, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 5, "w": 107, "h": 80 }, + "sourceSize": { "w": 114, "h": 89 } + }, + { + "filename": "0007.png", + "frame": { "x": 303, "y": 0, "w": 112, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 13, "w": 112, "h": 69 }, + "sourceSize": { "w": 114, "h": 89 } + }, + { + "filename": "0008.png", + "frame": { "x": 399, "y": 81, "w": 106, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 12, "w": 106, "h": 70 }, + "sourceSize": { "w": 114, "h": 89 } + }, + { + "filename": "0009.png", + "frame": { "x": 203, "y": 0, "w": 99, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 3, "w": 99, "h": 80 }, + "sourceSize": { "w": 114, "h": 89 } + }, + { + "filename": "0010.png", + "frame": { "x": 303, "y": 70, "w": 95, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 95, "h": 80 }, + "sourceSize": { "w": 114, "h": 89 } + }, + { + "filename": "0011.png", + "frame": { "x": 388, "y": 225, "w": 91, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 6, "w": 91, "h": 76 }, + "sourceSize": { "w": 114, "h": 89 } + }, + { + "filename": "0012.png", + "frame": { "x": 0, "y": 81, "w": 94, "h": 79 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 94, "h": 79 }, + "sourceSize": { "w": 114, "h": 89 } + }, + { + "filename": "0013.png", + "frame": { "x": 416, "y": 0, "w": 96, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 96, "h": 80 }, + "sourceSize": { "w": 114, "h": 89 } + }, + { + "filename": "0014.png", + "frame": { "x": 92, "y": 230, "w": 94, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 6, "w": 94, "h": 73 }, + "sourceSize": { "w": 114, "h": 89 } + }, + { + "filename": "0015.png", + "frame": { "x": 388, "y": 225, "w": 91, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 6, "w": 91, "h": 76 }, + "sourceSize": { "w": 114, "h": 89 } + }, + { + "filename": "0016.png", + "frame": { "x": 92, "y": 304, "w": 92, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 9, "w": 92, "h": 73 }, + "sourceSize": { "w": 114, "h": 89 } + }, + { + "filename": "0017.png", + "frame": { "x": 185, "y": 305, "w": 99, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 15, "w": 99, "h": 67 }, + "sourceSize": { "w": 114, "h": 89 } + }, + { + "filename": "0018.png", + "frame": { "x": 0, "y": 161, "w": 104, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 11, "w": 104, "h": 67 }, + "sourceSize": { "w": 114, "h": 89 } + }, + { + "filename": "0019.png", + "frame": { "x": 392, "y": 302, "w": 101, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 10, "w": 101, "h": 67 }, + "sourceSize": { "w": 114, "h": 89 } + }, + { + "filename": "0020.png", + "frame": { "x": 295, "y": 151, "w": 92, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 6, "w": 92, "h": 76 }, + "sourceSize": { "w": 114, "h": 89 } + }, + { + "filename": "0021.png", + "frame": { "x": 388, "y": 225, "w": 91, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 6, "w": 91, "h": 76 }, + "sourceSize": { "w": 114, "h": 89 } + }, + { + "filename": "0022.png", + "frame": { "x": 388, "y": 152, "w": 97, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 10, "w": 97, "h": 72 }, + "sourceSize": { "w": 114, "h": 89 } + }, + { + "filename": "0023.png", + "frame": { "x": 105, "y": 161, "w": 102, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 15, "w": 102, "h": 68 }, + "sourceSize": { "w": 114, "h": 89 } + }, + { + "filename": "0024.png", + "frame": { "x": 95, "y": 90, "w": 101, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 14, "w": 101, "h": 70 }, + "sourceSize": { "w": 114, "h": 89 } + }, + { + "filename": "0025.png", + "frame": { "x": 108, "y": 0, "w": 94, "h": 89 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 20, "y": 0, "w": 94, "h": 89 }, + "sourceSize": { "w": 114, "h": 89 } + }, + { + "filename": "0026.png", + "frame": { "x": 0, "y": 0, "w": 107, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 5, "w": 107, "h": 80 }, + "sourceSize": { "w": 114, "h": 89 } + }, + { + "filename": "0027.png", + "frame": { "x": 303, "y": 0, "w": 112, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 13, "w": 112, "h": 69 }, + "sourceSize": { "w": 114, "h": 89 } + }, + { + "filename": "0028.png", + "frame": { "x": 399, "y": 81, "w": 106, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 12, "w": 106, "h": 70 }, + "sourceSize": { "w": 114, "h": 89 } + }, + { + "filename": "0029.png", + "frame": { "x": 203, "y": 0, "w": 99, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 3, "w": 99, "h": 80 }, + "sourceSize": { "w": 114, "h": 89 } + }, + { + "filename": "0030.png", + "frame": { "x": 303, "y": 70, "w": 95, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 95, "h": 80 }, + "sourceSize": { "w": 114, "h": 89 } + }, + { + "filename": "0031.png", + "frame": { "x": 388, "y": 225, "w": 91, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 6, "w": 91, "h": 76 }, + "sourceSize": { "w": 114, "h": 89 } + }, + { + "filename": "0032.png", + "frame": { "x": 0, "y": 81, "w": 94, "h": 79 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 94, "h": 79 }, + "sourceSize": { "w": 114, "h": 89 } + }, + { + "filename": "0033.png", + "frame": { "x": 416, "y": 0, "w": 96, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 96, "h": 80 }, + "sourceSize": { "w": 114, "h": 89 } + }, + { + "filename": "0034.png", + "frame": { "x": 92, "y": 230, "w": 94, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 6, "w": 94, "h": 73 }, + "sourceSize": { "w": 114, "h": 89 } + }, + { + "filename": "0035.png", + "frame": { "x": 388, "y": 225, "w": 91, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 6, "w": 91, "h": 76 }, + "sourceSize": { "w": 114, "h": 89 } + }, + { + "filename": "0036.png", + "frame": { "x": 92, "y": 304, "w": 92, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 9, "w": 92, "h": 73 }, + "sourceSize": { "w": 114, "h": 89 } + }, + { + "filename": "0037.png", + "frame": { "x": 185, "y": 305, "w": 99, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 15, "w": 99, "h": 67 }, + "sourceSize": { "w": 114, "h": 89 } + }, + { + "filename": "0038.png", + "frame": { "x": 0, "y": 161, "w": 104, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 11, "w": 104, "h": 67 }, + "sourceSize": { "w": 114, "h": 89 } + }, + { + "filename": "0039.png", + "frame": { "x": 392, "y": 302, "w": 101, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 10, "w": 101, "h": 67 }, + "sourceSize": { "w": 114, "h": 89 } + }, + { + "filename": "0040.png", + "frame": { "x": 295, "y": 151, "w": 92, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 6, "w": 92, "h": 76 }, + "sourceSize": { "w": 114, "h": 89 } + }, + { + "filename": "0041.png", + "frame": { "x": 388, "y": 225, "w": 91, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 6, "w": 91, "h": 76 }, + "sourceSize": { "w": 114, "h": 89 } + }, + { + "filename": "0042.png", + "frame": { "x": 388, "y": 152, "w": 97, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 10, "w": 97, "h": 72 }, + "sourceSize": { "w": 114, "h": 89 } + }, + { + "filename": "0043.png", + "frame": { "x": 105, "y": 161, "w": 102, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 15, "w": 102, "h": 68 }, + "sourceSize": { "w": 114, "h": 89 } + }, + { + "filename": "0044.png", + "frame": { "x": 95, "y": 90, "w": 101, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 14, "w": 101, "h": 70 }, + "sourceSize": { "w": 114, "h": 89 } + }, + { + "filename": "0045.png", + "frame": { "x": 108, "y": 0, "w": 94, "h": 89 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 20, "y": 0, "w": 94, "h": 89 }, + "sourceSize": { "w": 114, "h": 89 } + }, + { + "filename": "0046.png", + "frame": { "x": 0, "y": 0, "w": 107, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 5, "w": 107, "h": 80 }, + "sourceSize": { "w": 114, "h": 89 } + }, + { + "filename": "0047.png", + "frame": { "x": 303, "y": 0, "w": 112, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 13, "w": 112, "h": 69 }, + "sourceSize": { "w": 114, "h": 89 } + }, + { + "filename": "0048.png", + "frame": { "x": 399, "y": 81, "w": 106, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 12, "w": 106, "h": 70 }, + "sourceSize": { "w": 114, "h": 89 } + }, + { + "filename": "0049.png", + "frame": { "x": 203, "y": 0, "w": 99, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 3, "w": 99, "h": 80 }, + "sourceSize": { "w": 114, "h": 89 } + }, + { + "filename": "0050.png", + "frame": { "x": 303, "y": 70, "w": 95, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 95, "h": 80 }, + "sourceSize": { "w": 114, "h": 89 } + }, + { + "filename": "0051.png", + "frame": { "x": 388, "y": 225, "w": 91, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 6, "w": 91, "h": 76 }, + "sourceSize": { "w": 114, "h": 89 } + }, + { + "filename": "0052.png", + "frame": { "x": 208, "y": 228, "w": 91, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 6, "w": 91, "h": 76 }, + "sourceSize": { "w": 114, "h": 89 } + }, + { + "filename": "0053.png", + "frame": { "x": 203, "y": 81, "w": 91, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 5, "w": 91, "h": 77 }, + "sourceSize": { "w": 114, "h": 89 } + }, + { + "filename": "0054.png", + "frame": { "x": 0, "y": 229, "w": 91, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 6, "w": 91, "h": 76 }, + "sourceSize": { "w": 114, "h": 89 } + }, + { + "filename": "0055.png", + "frame": { "x": 300, "y": 302, "w": 91, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 7, "w": 91, "h": 75 }, + "sourceSize": { "w": 114, "h": 89 } + }, + { + "filename": "0056.png", + "frame": { "x": 300, "y": 228, "w": 83, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 11, "w": 83, "h": 71 }, + "sourceSize": { "w": 114, "h": 89 } + }, + { + "filename": "0057.png", + "frame": { "x": 208, "y": 159, "w": 76, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 16, "y": 17, "w": 76, "h": 65 }, + "sourceSize": { "w": 114, "h": 89 } + }, + { + "filename": "0058.png", + "frame": { "x": 392, "y": 370, "w": 70, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 20, "y": 16, "w": 70, "h": 66 }, + "sourceSize": { "w": 114, "h": 89 } + }, + { + "filename": "0059.png", + "frame": { "x": 494, "y": 305, "w": 64, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 15, "w": 64, "h": 67 }, + "sourceSize": { "w": 114, "h": 89 } + }, + { + "filename": "0060.png", + "frame": { "x": 463, "y": 373, "w": 58, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 29, "y": 20, "w": 58, "h": 62 }, + "sourceSize": { "w": 114, "h": 89 } + }, + { + "filename": "0061.png", + "frame": { "x": 513, "y": 0, "w": 36, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 37, "y": 22, "w": 36, "h": 59 }, + "sourceSize": { "w": 114, "h": 89 } + }, + { + "filename": "0062.png", + "frame": { "x": 513, "y": 0, "w": 36, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 37, "y": 18, "w": 36, "h": 59 }, + "sourceSize": { "w": 114, "h": 89 } + }, + { + "filename": "0063.png", + "frame": { "x": 513, "y": 0, "w": 36, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 37, "y": 19, "w": 36, "h": 59 }, + "sourceSize": { "w": 114, "h": 89 } + }, + { + "filename": "0064.png", + "frame": { "x": 513, "y": 0, "w": 36, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 37, "y": 22, "w": 36, "h": 59 }, + "sourceSize": { "w": 114, "h": 89 } + }, + { + "filename": "0065.png", + "frame": { "x": 242, "y": 373, "w": 36, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 37, "y": 16, "w": 36, "h": 59 }, + "sourceSize": { "w": 114, "h": 89 } + }, + { + "filename": "0066.png", + "frame": { "x": 242, "y": 373, "w": 36, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 37, "y": 17, "w": 36, "h": 59 }, + "sourceSize": { "w": 114, "h": 89 } + }, + { + "filename": "0067.png", + "frame": { "x": 513, "y": 0, "w": 36, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 37, "y": 22, "w": 36, "h": 59 }, + "sourceSize": { "w": 114, "h": 89 } + }, + { + "filename": "0068.png", + "frame": { "x": 513, "y": 0, "w": 36, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 37, "y": 18, "w": 36, "h": 59 }, + "sourceSize": { "w": 114, "h": 89 } + }, + { + "filename": "0069.png", + "frame": { "x": 513, "y": 0, "w": 36, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 37, "y": 19, "w": 36, "h": 59 }, + "sourceSize": { "w": 114, "h": 89 } + }, + { + "filename": "0070.png", + "frame": { "x": 513, "y": 0, "w": 36, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 37, "y": 22, "w": 36, "h": 59 }, + "sourceSize": { "w": 114, "h": 89 } + }, + { + "filename": "0071.png", + "frame": { "x": 506, "y": 81, "w": 50, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 18, "w": 50, "h": 64 }, + "sourceSize": { "w": 114, "h": 89 } + }, + { + "filename": "0072.png", + "frame": { "x": 185, "y": 373, "w": 56, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 14, "w": 56, "h": 68 }, + "sourceSize": { "w": 114, "h": 89 } + }, + { + "filename": "0073.png", + "frame": { "x": 494, "y": 230, "w": 64, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 21, "y": 10, "w": 64, "h": 74 }, + "sourceSize": { "w": 114, "h": 89 } + }, + { + "filename": "0074.png", + "frame": { "x": 486, "y": 152, "w": 73, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 16, "y": 7, "w": 73, "h": 77 }, + "sourceSize": { "w": 114, "h": 89 } + }, + { + "filename": "0075.png", + "frame": { "x": 0, "y": 306, "w": 83, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 6, "w": 83, "h": 77 }, + "sourceSize": { "w": 114, "h": 89 } + }, + { + "filename": "0076.png", + "frame": { "x": 388, "y": 225, "w": 91, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 6, "w": 91, "h": 76 }, + "sourceSize": { "w": 114, "h": 89 } + }, + { + "filename": "0077.png", + "frame": { "x": 0, "y": 81, "w": 94, "h": 79 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 94, "h": 79 }, + "sourceSize": { "w": 114, "h": 89 } + }, + { + "filename": "0078.png", + "frame": { "x": 416, "y": 0, "w": 96, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 96, "h": 80 }, + "sourceSize": { "w": 114, "h": 89 } + }, + { + "filename": "0079.png", + "frame": { "x": 92, "y": 230, "w": 94, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 6, "w": 94, "h": 73 }, + "sourceSize": { "w": 114, "h": 89 } + }, + { + "filename": "0080.png", + "frame": { "x": 388, "y": 225, "w": 91, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 6, "w": 91, "h": 76 }, + "sourceSize": { "w": 114, "h": 89 } + }, + { + "filename": "0081.png", + "frame": { "x": 92, "y": 304, "w": 92, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 9, "w": 92, "h": 73 }, + "sourceSize": { "w": 114, "h": 89 } + }, + { + "filename": "0082.png", + "frame": { "x": 185, "y": 305, "w": 99, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 15, "w": 99, "h": 67 }, + "sourceSize": { "w": 114, "h": 89 } + }, + { + "filename": "0083.png", + "frame": { "x": 0, "y": 161, "w": 104, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 11, "w": 104, "h": 67 }, + "sourceSize": { "w": 114, "h": 89 } + }, + { + "filename": "0084.png", + "frame": { "x": 392, "y": 302, "w": 101, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 10, "w": 101, "h": 67 }, + "sourceSize": { "w": 114, "h": 89 } + }, + { + "filename": "0085.png", + "frame": { "x": 295, "y": 151, "w": 92, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 6, "w": 92, "h": 76 }, + "sourceSize": { "w": 114, "h": 89 } + }, + { + "filename": "0086.png", + "frame": { "x": 388, "y": 225, "w": 91, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 6, "w": 91, "h": 76 }, + "sourceSize": { "w": 114, "h": 89 } + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.7-x64", + "image": "563.png", + "format": "I8", + "size": { "w": 559, "h": 441 }, + "scale": "1" + } } diff --git a/public/images/pokemon/563.png b/public/images/pokemon/563.png index 7135a54ca51..2834d54535e 100644 Binary files a/public/images/pokemon/563.png and b/public/images/pokemon/563.png differ diff --git a/public/images/pokemon/636.json b/public/images/pokemon/636.json index 86c639663e9..9626c6d8263 100644 --- a/public/images/pokemon/636.json +++ b/public/images/pokemon/636.json @@ -4,744 +4,51 @@ "image": "636.png", "format": "RGBA8888", "size": { - "w": 341, - "h": 341 + "w": 301, + "h": 301 }, "scale": 1, "frames": [ - { - "filename": "0095.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 45, - "h": 50 - }, - "frame": { - "x": 0, - "y": 0, - "w": 45, - "h": 50 - } - }, - { - "filename": "0096.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 44, - "h": 50 - }, - "frame": { - "x": 0, - "y": 50, - "w": 44, - "h": 50 - } - }, - { - "filename": "0097.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 44, - "h": 50 - }, - "frame": { - "x": 0, - "y": 100, - "w": 44, - "h": 50 - } - }, - { - "filename": "0098.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 44, - "h": 50 - }, - "frame": { - "x": 0, - "y": 150, - "w": 44, - "h": 50 - } - }, - { - "filename": "0099.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 44, - "h": 50 - }, - "frame": { - "x": 0, - "y": 200, - "w": 44, - "h": 50 - } - }, - { - "filename": "0100.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 44, - "h": 50 - }, - "frame": { - "x": 0, - "y": 250, - "w": 44, - "h": 50 - } - }, - { - "filename": "0101.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 44, - "h": 50 - }, - "frame": { - "x": 44, - "y": 50, - "w": 44, - "h": 50 - } - }, - { - "filename": "0102.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 44, - "h": 50 - }, - "frame": { - "x": 44, - "y": 50, - "w": 44, - "h": 50 - } - }, - { - "filename": "0103.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 44, - "h": 50 - }, - "frame": { - "x": 45, - "y": 0, - "w": 44, - "h": 50 - } - }, - { - "filename": "0104.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 44, - "h": 50 - }, - "frame": { - "x": 44, - "y": 100, - "w": 44, - "h": 50 - } - }, - { - "filename": "0105.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 44, - "h": 50 - }, - "frame": { - "x": 44, - "y": 150, - "w": 44, - "h": 50 - } - }, - { - "filename": "0106.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 44, - "h": 50 - }, - "frame": { - "x": 44, - "y": 200, - "w": 44, - "h": 50 - } - }, - { - "filename": "0107.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 44, - "h": 50 - }, - "frame": { - "x": 44, - "y": 250, - "w": 44, - "h": 50 - } - }, { "filename": "0005.png", "rotated": false, "trimmed": true, "sourceSize": { - "w": 45, - "h": 50 + "w": 46, + "h": 49 }, "spriteSourceSize": { "x": 0, "y": 1, - "w": 45, - "h": 49 + "w": 46, + "h": 48 }, "frame": { - "x": 89, - "y": 0, - "w": 45, - "h": 49 + "x": 1, + "y": 1, + "w": 46, + "h": 48 } }, { - "filename": "0020.png", + "filename": "0016.png", "rotated": false, "trimmed": true, "sourceSize": { - "w": 45, - "h": 50 + "w": 46, + "h": 49 }, "spriteSourceSize": { "x": 0, "y": 1, - "w": 45, - "h": 49 + "w": 46, + "h": 48 }, "frame": { - "x": 89, - "y": 0, - "w": 45, - "h": 49 - } - }, - { - "filename": "0049.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, + "x": 1, "y": 1, - "w": 45, - "h": 49 - }, - "frame": { - "x": 89, - "y": 0, - "w": 45, - "h": 49 - } - }, - { - "filename": "0064.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 45, - "h": 49 - }, - "frame": { - "x": 89, - "y": 0, - "w": 45, - "h": 49 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 45, - "h": 49 - }, - "frame": { - "x": 134, - "y": 0, - "w": 45, - "h": 49 - } - }, - { - "filename": "0035.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 45, - "h": 49 - }, - "frame": { - "x": 134, - "y": 0, - "w": 45, - "h": 49 - } - }, - { - "filename": "0050.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 45, - "h": 49 - }, - "frame": { - "x": 134, - "y": 0, - "w": 45, - "h": 49 - } - }, - { - "filename": "0079.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 45, - "h": 49 - }, - "frame": { - "x": 134, - "y": 0, - "w": 45, - "h": 49 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 45, - "h": 49 - }, - "frame": { - "x": 179, - "y": 0, - "w": 45, - "h": 49 - } - }, - { - "filename": "0022.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 45, - "h": 49 - }, - "frame": { - "x": 179, - "y": 0, - "w": 45, - "h": 49 - } - }, - { - "filename": "0051.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 45, - "h": 49 - }, - "frame": { - "x": 179, - "y": 0, - "w": 45, - "h": 49 - } - }, - { - "filename": "0066.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 45, - "h": 49 - }, - "frame": { - "x": 179, - "y": 0, - "w": 45, - "h": 49 - } - }, - { - "filename": "0021.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 45, - "h": 49 - }, - "frame": { - "x": 224, - "y": 0, - "w": 45, - "h": 49 - } - }, - { - "filename": "0036.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 45, - "h": 49 - }, - "frame": { - "x": 224, - "y": 0, - "w": 45, - "h": 49 - } - }, - { - "filename": "0065.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 45, - "h": 49 - }, - "frame": { - "x": 224, - "y": 0, - "w": 45, - "h": 49 - } - }, - { - "filename": "0080.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 45, - "h": 49 - }, - "frame": { - "x": 224, - "y": 0, - "w": 45, - "h": 49 - } - }, - { - "filename": "0093.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 45, - "h": 49 - }, - "frame": { - "x": 269, - "y": 0, - "w": 45, - "h": 49 - } - }, - { - "filename": "0094.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 45, - "h": 49 - }, - "frame": { - "x": 89, - "y": 49, - "w": 45, - "h": 49 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 45, - "h": 47 - }, - "frame": { - "x": 134, - "y": 49, - "w": 45, - "h": 47 - } - }, - { - "filename": "0041.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 45, - "h": 47 - }, - "frame": { - "x": 134, - "y": 49, - "w": 45, - "h": 47 - } - }, - { - "filename": "0056.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 45, - "h": 47 - }, - "frame": { - "x": 134, - "y": 49, - "w": 45, - "h": 47 - } - }, - { - "filename": "0085.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 45, - "h": 47 - }, - "frame": { - "x": 134, - "y": 49, - "w": 45, - "h": 47 + "w": 46, + "h": 48 } }, { @@ -749,545 +56,20 @@ "rotated": false, "trimmed": true, "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 45, - "h": 47 - }, - "frame": { - "x": 179, - "y": 49, - "w": 45, - "h": 47 - } - }, - { - "filename": "0042.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 45, - "h": 47 - }, - "frame": { - "x": 179, - "y": 49, - "w": 45, - "h": 47 - } - }, - { - "filename": "0071.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 45, - "h": 47 - }, - "frame": { - "x": 179, - "y": 49, - "w": 45, - "h": 47 - } - }, - { - "filename": "0086.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 45, - "h": 47 - }, - "frame": { - "x": 179, - "y": 49, - "w": 45, - "h": 47 - } - }, - { - "filename": "0119.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 45, - "h": 47 - }, - "frame": { - "x": 224, - "y": 49, - "w": 45, - "h": 47 - } - }, - { - "filename": "0108.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 44, - "h": 50 - }, - "frame": { - "x": 269, - "y": 49, - "w": 44, - "h": 50 - } - }, - { - "filename": "0109.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 44, - "h": 50 - }, - "frame": { - "x": 134, - "y": 96, - "w": 44, - "h": 50 - } - }, - { - "filename": "0110.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 44, - "h": 50 - }, - "frame": { - "x": 88, - "y": 98, - "w": 44, - "h": 50 - } - }, - { - "filename": "0111.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 44, - "h": 50 - }, - "frame": { - "x": 178, - "y": 96, - "w": 44, - "h": 50 - } - }, - { - "filename": "0112.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 44, - "h": 50 - }, - "frame": { - "x": 222, - "y": 96, - "w": 44, - "h": 50 - } - }, - { - "filename": "0113.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 44, - "h": 50 - }, - "frame": { - "x": 266, - "y": 99, - "w": 44, - "h": 50 - } - }, - { - "filename": "0114.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 44, - "h": 50 - }, - "frame": { - "x": 132, - "y": 146, - "w": 44, - "h": 50 - } - }, - { - "filename": "0115.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 44, - "h": 50 - }, - "frame": { - "x": 88, - "y": 148, - "w": 44, - "h": 50 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 + "w": 46, + "h": 49 }, "spriteSourceSize": { "x": 0, "y": 1, - "w": 44, - "h": 49 + "w": 46, + "h": 48 }, "frame": { - "x": 176, - "y": 146, - "w": 44, - "h": 49 - } - }, - { - "filename": "0037.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, + "x": 1, "y": 1, - "w": 44, - "h": 49 - }, - "frame": { - "x": 176, - "y": 146, - "w": 44, - "h": 49 - } - }, - { - "filename": "0052.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 44, - "h": 49 - }, - "frame": { - "x": 176, - "y": 146, - "w": 44, - "h": 49 - } - }, - { - "filename": "0081.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 44, - "h": 49 - }, - "frame": { - "x": 176, - "y": 146, - "w": 44, - "h": 49 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 44, - "h": 49 - }, - "frame": { - "x": 220, - "y": 146, - "w": 44, - "h": 49 - } - }, - { - "filename": "0024.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 44, - "h": 49 - }, - "frame": { - "x": 220, - "y": 146, - "w": 44, - "h": 49 - } - }, - { - "filename": "0053.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 44, - "h": 49 - }, - "frame": { - "x": 220, - "y": 146, - "w": 44, - "h": 49 - } - }, - { - "filename": "0068.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 44, - "h": 49 - }, - "frame": { - "x": 220, - "y": 146, - "w": 44, - "h": 49 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 44, - "h": 49 - }, - "frame": { - "x": 264, - "y": 149, - "w": 44, - "h": 49 - } - }, - { - "filename": "0039.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 44, - "h": 49 - }, - "frame": { - "x": 264, - "y": 149, - "w": 44, - "h": 49 - } - }, - { - "filename": "0054.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 44, - "h": 49 - }, - "frame": { - "x": 264, - "y": 149, - "w": 44, - "h": 49 - } - }, - { - "filename": "0083.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 44, - "h": 49 - }, - "frame": { - "x": 264, - "y": 149, - "w": 44, - "h": 49 - } - }, - { - "filename": "0023.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 44, - "h": 49 - }, - "frame": { - "x": 176, - "y": 195, - "w": 44, - "h": 49 + "w": 46, + "h": 48 } }, { @@ -1295,82 +77,103 @@ "rotated": false, "trimmed": true, "sourceSize": { - "w": 45, - "h": 50 + "w": 46, + "h": 49 }, "spriteSourceSize": { "x": 0, "y": 1, - "w": 44, - "h": 49 + "w": 46, + "h": 48 }, "frame": { - "x": 176, - "y": 195, - "w": 44, - "h": 49 + "x": 1, + "y": 1, + "w": 46, + "h": 48 } }, { - "filename": "0067.png", + "filename": "0049.png", "rotated": false, "trimmed": true, "sourceSize": { - "w": 45, - "h": 50 + "w": 46, + "h": 49 }, "spriteSourceSize": { "x": 0, "y": 1, - "w": 44, - "h": 49 + "w": 46, + "h": 48 }, "frame": { - "x": 176, - "y": 195, - "w": 44, - "h": 49 + "x": 1, + "y": 1, + "w": 46, + "h": 48 } }, { - "filename": "0082.png", + "filename": "0060.png", "rotated": false, "trimmed": true, "sourceSize": { - "w": 45, - "h": 50 + "w": 46, + "h": 49 }, "spriteSourceSize": { "x": 0, "y": 1, - "w": 44, - "h": 49 + "w": 46, + "h": 48 }, "frame": { - "x": 176, - "y": 195, - "w": 44, - "h": 49 + "x": 1, + "y": 1, + "w": 46, + "h": 48 } }, { - "filename": "0116.png", + "filename": "0071.png", "rotated": false, "trimmed": true, "sourceSize": { - "w": 45, - "h": 50 + "w": 46, + "h": 49 }, "spriteSourceSize": { "x": 0, "y": 1, - "w": 44, + "w": 46, + "h": 48 + }, + "frame": { + "x": 1, + "y": 51, + "w": 46, + "h": 48 + } + }, + { + "filename": "0072.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 46, + "h": 49 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 45, "h": 49 }, "frame": { - "x": 132, - "y": 196, - "w": 44, + "x": 49, + "y": 1, + "w": 45, "h": 49 } }, @@ -1379,103 +182,40 @@ "rotated": false, "trimmed": true, "sourceSize": { - "w": 45, - "h": 50 + "w": 46, + "h": 49 }, "spriteSourceSize": { "x": 1, - "y": 2, - "w": 44, + "y": 1, + "w": 45, "h": 48 }, "frame": { - "x": 88, - "y": 198, - "w": 44, + "x": 1, + "y": 101, + "w": 45, "h": 48 } }, { - "filename": "0033.png", + "filename": "0015.png", "rotated": false, "trimmed": true, "sourceSize": { - "w": 45, - "h": 50 + "w": 46, + "h": 49 }, "spriteSourceSize": { "x": 1, - "y": 2, - "w": 44, + "y": 1, + "w": 45, "h": 48 }, "frame": { - "x": 88, - "y": 198, - "w": 44, - "h": 48 - } - }, - { - "filename": "0048.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { "x": 1, - "y": 2, - "w": 44, - "h": 48 - }, - "frame": { - "x": 88, - "y": 198, - "w": 44, - "h": 48 - } - }, - { - "filename": "0077.png", - "rotated": false, - "trimmed": true, - "sourceSize": { + "y": 101, "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 44, - "h": 48 - }, - "frame": { - "x": 88, - "y": 198, - "w": 44, - "h": 48 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 44, - "h": 48 - }, - "frame": { - "x": 220, - "y": 195, - "w": 44, "h": 48 } }, @@ -1484,40 +224,208 @@ "rotated": false, "trimmed": true, "sourceSize": { - "w": 45, - "h": 50 + "w": 46, + "h": 49 }, "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 44, + "x": 1, + "y": 1, + "w": 45, "h": 48 }, "frame": { - "x": 220, - "y": 195, - "w": 44, + "x": 1, + "y": 101, + "w": 45, "h": 48 } }, { - "filename": "0055.png", + "filename": "0037.png", "rotated": false, "trimmed": true, "sourceSize": { - "w": 45, - "h": 50 + "w": 46, + "h": 49 }, "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 44, + "x": 1, + "y": 1, + "w": 45, "h": 48 }, "frame": { - "x": 220, - "y": 195, - "w": 44, + "x": 1, + "y": 101, + "w": 45, + "h": 48 + } + }, + { + "filename": "0048.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 46, + "h": 49 + }, + "spriteSourceSize": { + "x": 1, + "y": 1, + "w": 45, + "h": 48 + }, + "frame": { + "x": 1, + "y": 101, + "w": 45, + "h": 48 + } + }, + { + "filename": "0059.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 46, + "h": 49 + }, + "spriteSourceSize": { + "x": 1, + "y": 1, + "w": 45, + "h": 48 + }, + "frame": { + "x": 1, + "y": 101, + "w": 45, + "h": 48 + } + }, + { + "filename": "0006.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 46, + "h": 49 + }, + "spriteSourceSize": { + "x": 0, + "y": 1, + "w": 45, + "h": 48 + }, + "frame": { + "x": 96, + "y": 1, + "w": 45, + "h": 48 + } + }, + { + "filename": "0017.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 46, + "h": 49 + }, + "spriteSourceSize": { + "x": 0, + "y": 1, + "w": 45, + "h": 48 + }, + "frame": { + "x": 96, + "y": 1, + "w": 45, + "h": 48 + } + }, + { + "filename": "0028.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 46, + "h": 49 + }, + "spriteSourceSize": { + "x": 0, + "y": 1, + "w": 45, + "h": 48 + }, + "frame": { + "x": 96, + "y": 1, + "w": 45, + "h": 48 + } + }, + { + "filename": "0039.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 46, + "h": 49 + }, + "spriteSourceSize": { + "x": 0, + "y": 1, + "w": 45, + "h": 48 + }, + "frame": { + "x": 96, + "y": 1, + "w": 45, + "h": 48 + } + }, + { + "filename": "0050.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 46, + "h": 49 + }, + "spriteSourceSize": { + "x": 0, + "y": 1, + "w": 45, + "h": 48 + }, + "frame": { + "x": 96, + "y": 1, + "w": 45, + "h": 48 + } + }, + { + "filename": "0061.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 46, + "h": 49 + }, + "spriteSourceSize": { + "x": 0, + "y": 1, + "w": 45, + "h": 48 + }, + "frame": { + "x": 96, + "y": 1, + "w": 45, "h": 48 } }, @@ -1526,123 +434,102 @@ "rotated": false, "trimmed": true, "sourceSize": { + "w": 46, + "h": 49 + }, + "spriteSourceSize": { + "x": 1, + "y": 1, "w": 45, - "h": 50 + "h": 48 + }, + "frame": { + "x": 1, + "y": 151, + "w": 45, + "h": 48 + } + }, + { + "filename": "0073.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 46, + "h": 49 }, "spriteSourceSize": { "x": 0, - "y": 2, + "y": 0, "w": 44, - "h": 48 + "h": 49 }, "frame": { - "x": 220, - "y": 195, - "w": 44, - "h": 48 - } - }, - { - "filename": "0019.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { "x": 1, - "y": 2, + "y": 201, "w": 44, - "h": 48 - }, - "frame": { - "x": 264, - "y": 198, - "w": 44, - "h": 48 + "h": 49 } }, { - "filename": "0034.png", + "filename": "0007.png", "rotated": false, "trimmed": true, "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 44, - "h": 48 - }, - "frame": { - "x": 264, - "y": 198, - "w": 44, - "h": 48 - } - }, - { - "filename": "0063.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 44, - "h": 48 - }, - "frame": { - "x": 264, - "y": 198, - "w": 44, - "h": 48 - } - }, - { - "filename": "0078.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 44, - "h": 48 - }, - "frame": { - "x": 264, - "y": 198, - "w": 44, - "h": 48 - } - }, - { - "filename": "0025.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 + "w": 46, + "h": 49 }, "spriteSourceSize": { "x": 0, - "y": 2, + "y": 1, "w": 44, "h": 48 }, "frame": { - "x": 220, - "y": 243, + "x": 1, + "y": 252, + "w": 44, + "h": 48 + } + }, + { + "filename": "0018.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 46, + "h": 49 + }, + "spriteSourceSize": { + "x": 0, + "y": 1, + "w": 44, + "h": 48 + }, + "frame": { + "x": 1, + "y": 252, + "w": 44, + "h": 48 + } + }, + { + "filename": "0029.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 46, + "h": 49 + }, + "spriteSourceSize": { + "x": 0, + "y": 1, + "w": 44, + "h": 48 + }, + "frame": { + "x": 1, + "y": 252, "w": 44, "h": 48 } @@ -1652,733 +539,82 @@ "rotated": false, "trimmed": true, "sourceSize": { - "w": 45, - "h": 50 + "w": 46, + "h": 49 }, "spriteSourceSize": { "x": 0, - "y": 2, + "y": 1, "w": 44, "h": 48 }, "frame": { - "x": 220, - "y": 243, + "x": 1, + "y": 252, "w": 44, "h": 48 } }, { - "filename": "0069.png", + "filename": "0051.png", "rotated": false, "trimmed": true, "sourceSize": { - "w": 45, - "h": 50 + "w": 46, + "h": 49 }, "spriteSourceSize": { "x": 0, - "y": 2, + "y": 1, "w": 44, "h": 48 }, "frame": { - "x": 220, - "y": 243, + "x": 1, + "y": 252, "w": 44, "h": 48 } }, - { - "filename": "0084.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 44, - "h": 48 - }, - "frame": { - "x": 220, - "y": 243, - "w": 44, - "h": 48 - } - }, - { - "filename": "0092.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 44, - "h": 48 - }, - "frame": { - "x": 176, - "y": 244, - "w": 44, - "h": 48 - } - }, - { - "filename": "0117.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 44, - "h": 48 - }, - "frame": { - "x": 132, - "y": 245, - "w": 44, - "h": 48 - } - }, - { - "filename": "0118.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 44, - "h": 48 - }, - "frame": { - "x": 88, - "y": 246, - "w": 44, - "h": 48 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 44, - "h": 47 - }, - "frame": { - "x": 88, - "y": 294, - "w": 44, - "h": 47 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 44, - "h": 47 - }, - "frame": { - "x": 88, - "y": 294, - "w": 44, - "h": 47 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 44, - "h": 47 - }, - "frame": { - "x": 88, - "y": 294, - "w": 44, - "h": 47 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 44, - "h": 47 - }, - "frame": { - "x": 88, - "y": 294, - "w": 44, - "h": 47 - } - }, - { - "filename": "0029.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 44, - "h": 47 - }, - "frame": { - "x": 88, - "y": 294, - "w": 44, - "h": 47 - } - }, - { - "filename": "0030.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 44, - "h": 47 - }, - "frame": { - "x": 88, - "y": 294, - "w": 44, - "h": 47 - } - }, - { - "filename": "0031.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 44, - "h": 47 - }, - "frame": { - "x": 88, - "y": 294, - "w": 44, - "h": 47 - } - }, - { - "filename": "0044.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 44, - "h": 47 - }, - "frame": { - "x": 88, - "y": 294, - "w": 44, - "h": 47 - } - }, - { - "filename": "0045.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 44, - "h": 47 - }, - "frame": { - "x": 88, - "y": 294, - "w": 44, - "h": 47 - } - }, - { - "filename": "0046.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 44, - "h": 47 - }, - "frame": { - "x": 88, - "y": 294, - "w": 44, - "h": 47 - } - }, - { - "filename": "0059.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 44, - "h": 47 - }, - "frame": { - "x": 88, - "y": 294, - "w": 44, - "h": 47 - } - }, - { - "filename": "0060.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 44, - "h": 47 - }, - "frame": { - "x": 88, - "y": 294, - "w": 44, - "h": 47 - } - }, - { - "filename": "0073.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 44, - "h": 47 - }, - "frame": { - "x": 88, - "y": 294, - "w": 44, - "h": 47 - } - }, - { - "filename": "0074.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 44, - "h": 47 - }, - "frame": { - "x": 88, - "y": 294, - "w": 44, - "h": 47 - } - }, - { - "filename": "0075.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 44, - "h": 47 - }, - "frame": { - "x": 88, - "y": 294, - "w": 44, - "h": 47 - } - }, - { - "filename": "0088.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 44, - "h": 47 - }, - "frame": { - "x": 88, - "y": 294, - "w": 44, - "h": 47 - } - }, - { - "filename": "0089.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 44, - "h": 47 - }, - "frame": { - "x": 88, - "y": 294, - "w": 44, - "h": 47 - } - }, - { - "filename": "0090.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 44, - "h": 47 - }, - "frame": { - "x": 88, - "y": 294, - "w": 44, - "h": 47 - } - }, - { - "filename": "0121.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 44, - "h": 47 - }, - "frame": { - "x": 88, - "y": 294, - "w": 44, - "h": 47 - } - }, - { - "filename": "0122.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 44, - "h": 47 - }, - "frame": { - "x": 88, - "y": 294, - "w": 44, - "h": 47 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 44, - "h": 47 - }, - "frame": { - "x": 132, - "y": 293, - "w": 44, - "h": 47 - } - }, - { - "filename": "0018.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 44, - "h": 47 - }, - "frame": { - "x": 132, - "y": 293, - "w": 44, - "h": 47 - } - }, - { - "filename": "0047.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 44, - "h": 47 - }, - "frame": { - "x": 132, - "y": 293, - "w": 44, - "h": 47 - } - }, { "filename": "0062.png", "rotated": false, "trimmed": true, "sourceSize": { - "w": 45, - "h": 50 + "w": 46, + "h": 49 }, "spriteSourceSize": { - "x": 1, - "y": 3, + "x": 0, + "y": 1, "w": 44, - "h": 47 + "h": 48 }, "frame": { - "x": 132, - "y": 293, + "x": 1, + "y": 252, "w": 44, - "h": 47 + "h": 48 } }, { - "filename": "0013.png", + "filename": "0003.png", "rotated": false, "trimmed": true, "sourceSize": { - "w": 45, - "h": 50 + "w": 46, + "h": 49 }, "spriteSourceSize": { "x": 1, - "y": 3, - "w": 44, - "h": 47 - }, - "frame": { - "x": 176, - "y": 292, - "w": 44, - "h": 47 - } - }, - { - "filename": "0028.png", - "rotated": false, - "trimmed": true, - "sourceSize": { + "y": 2, "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 44, "h": 47 }, "frame": { - "x": 176, - "y": 292, - "w": 44, - "h": 47 - } - }, - { - "filename": "0057.png", - "rotated": false, - "trimmed": true, - "sourceSize": { + "x": 49, + "y": 52, "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 44, - "h": 47 - }, - "frame": { - "x": 176, - "y": 292, - "w": 44, - "h": 47 - } - }, - { - "filename": "0072.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 44, - "h": 47 - }, - "frame": { - "x": 176, - "y": 292, - "w": 44, - "h": 47 - } - }, - { - "filename": "0120.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 44, - "h": 47 - }, - "frame": { - "x": 176, - "y": 292, - "w": 44, "h": 47 } }, @@ -2387,40 +623,82 @@ "rotated": false, "trimmed": true, "sourceSize": { - "w": 45, - "h": 50 + "w": 46, + "h": 49 }, "spriteSourceSize": { "x": 1, - "y": 3, - "w": 44, + "y": 2, + "w": 45, "h": 47 }, "frame": { - "x": 220, - "y": 291, - "w": 44, + "x": 49, + "y": 52, + "w": 45, "h": 47 } }, { - "filename": "0043.png", + "filename": "0025.png", "rotated": false, "trimmed": true, "sourceSize": { - "w": 45, - "h": 50 + "w": 46, + "h": 49 }, "spriteSourceSize": { "x": 1, - "y": 3, - "w": 44, + "y": 2, + "w": 45, "h": 47 }, "frame": { - "x": 220, - "y": 291, - "w": 44, + "x": 49, + "y": 52, + "w": 45, + "h": 47 + } + }, + { + "filename": "0036.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 46, + "h": 49 + }, + "spriteSourceSize": { + "x": 1, + "y": 2, + "w": 45, + "h": 47 + }, + "frame": { + "x": 49, + "y": 52, + "w": 45, + "h": 47 + } + }, + { + "filename": "0047.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 46, + "h": 49 + }, + "spriteSourceSize": { + "x": 1, + "y": 2, + "w": 45, + "h": 47 + }, + "frame": { + "x": 49, + "y": 52, + "w": 45, "h": 47 } }, @@ -2429,61 +707,82 @@ "rotated": false, "trimmed": true, "sourceSize": { - "w": 45, - "h": 50 + "w": 46, + "h": 49 }, "spriteSourceSize": { "x": 1, - "y": 3, - "w": 44, + "y": 2, + "w": 45, "h": 47 }, "frame": { - "x": 220, - "y": 291, - "w": 44, + "x": 49, + "y": 52, + "w": 45, "h": 47 } }, { - "filename": "0087.png", + "filename": "0084.png", "rotated": false, "trimmed": true, "sourceSize": { - "w": 45, - "h": 50 + "w": 46, + "h": 49 }, "spriteSourceSize": { - "x": 1, - "y": 3, + "x": 0, + "y": 0, "w": 44, + "h": 49 + }, + "frame": { + "x": 48, + "y": 101, + "w": 44, + "h": 49 + } + }, + { + "filename": "0010.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 46, + "h": 49 + }, + "spriteSourceSize": { + "x": 0, + "y": 2, + "w": 45, "h": 47 }, "frame": { - "x": 220, - "y": 291, - "w": 44, + "x": 96, + "y": 51, + "w": 45, "h": 47 } }, { - "filename": "0017.png", + "filename": "0021.png", "rotated": false, "trimmed": true, "sourceSize": { - "w": 45, - "h": 50 + "w": 46, + "h": 49 }, "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 44, + "x": 0, + "y": 2, + "w": 45, "h": 47 }, "frame": { - "x": 264, - "y": 246, - "w": 44, + "x": 96, + "y": 51, + "w": 45, "h": 47 } }, @@ -2492,83 +791,1112 @@ "rotated": false, "trimmed": true, "sourceSize": { - "w": 45, - "h": 50 + "w": 46, + "h": 49 }, "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 44, + "x": 0, + "y": 2, + "w": 45, "h": 47 }, "frame": { - "x": 264, - "y": 246, - "w": 44, + "x": 96, + "y": 51, + "w": 45, "h": 47 } }, { - "filename": "0061.png", + "filename": "0043.png", "rotated": false, "trimmed": true, "sourceSize": { - "w": 45, - "h": 50 + "w": 46, + "h": 49 }, "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 44, + "x": 0, + "y": 2, + "w": 45, "h": 47 }, "frame": { - "x": 264, - "y": 246, - "w": 44, + "x": 96, + "y": 51, + "w": 45, "h": 47 } }, + { + "filename": "0054.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 46, + "h": 49 + }, + "spriteSourceSize": { + "x": 0, + "y": 2, + "w": 45, + "h": 47 + }, + "frame": { + "x": 96, + "y": 51, + "w": 45, + "h": 47 + } + }, + { + "filename": "0065.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 46, + "h": 49 + }, + "spriteSourceSize": { + "x": 0, + "y": 2, + "w": 45, + "h": 47 + }, + "frame": { + "x": 96, + "y": 51, + "w": 45, + "h": 47 + } + }, + { + "filename": "0085.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 46, + "h": 49 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 44, + "h": 49 + }, + "frame": { + "x": 143, + "y": 1, + "w": 44, + "h": 49 + } + }, + { + "filename": "0069.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 46, + "h": 49 + }, + "spriteSourceSize": { + "x": 1, + "y": 2, + "w": 45, + "h": 47 + }, + "frame": { + "x": 189, + "y": 1, + "w": 45, + "h": 47 + } + }, + { + "filename": "0090.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 46, + "h": 49 + }, + "spriteSourceSize": { + "x": 0, + "y": 2, + "w": 45, + "h": 47 + }, + "frame": { + "x": 236, + "y": 1, + "w": 45, + "h": 47 + } + }, + { + "filename": "0001.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 46, + "h": 49 + }, + "spriteSourceSize": { + "x": 2, + "y": 3, + "w": 44, + "h": 46 + }, + "frame": { + "x": 48, + "y": 152, + "w": 44, + "h": 46 + } + }, + { + "filename": "0002.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 46, + "h": 49 + }, + "spriteSourceSize": { + "x": 2, + "y": 3, + "w": 44, + "h": 46 + }, + "frame": { + "x": 48, + "y": 152, + "w": 44, + "h": 46 + } + }, + { + "filename": "0012.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 46, + "h": 49 + }, + "spriteSourceSize": { + "x": 2, + "y": 3, + "w": 44, + "h": 46 + }, + "frame": { + "x": 48, + "y": 152, + "w": 44, + "h": 46 + } + }, + { + "filename": "0013.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 46, + "h": 49 + }, + "spriteSourceSize": { + "x": 2, + "y": 3, + "w": 44, + "h": 46 + }, + "frame": { + "x": 48, + "y": 152, + "w": 44, + "h": 46 + } + }, + { + "filename": "0023.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 46, + "h": 49 + }, + "spriteSourceSize": { + "x": 2, + "y": 3, + "w": 44, + "h": 46 + }, + "frame": { + "x": 48, + "y": 152, + "w": 44, + "h": 46 + } + }, + { + "filename": "0024.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 46, + "h": 49 + }, + "spriteSourceSize": { + "x": 2, + "y": 3, + "w": 44, + "h": 46 + }, + "frame": { + "x": 48, + "y": 152, + "w": 44, + "h": 46 + } + }, + { + "filename": "0034.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 46, + "h": 49 + }, + "spriteSourceSize": { + "x": 2, + "y": 3, + "w": 44, + "h": 46 + }, + "frame": { + "x": 48, + "y": 152, + "w": 44, + "h": 46 + } + }, + { + "filename": "0035.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 46, + "h": 49 + }, + "spriteSourceSize": { + "x": 2, + "y": 3, + "w": 44, + "h": 46 + }, + "frame": { + "x": 48, + "y": 152, + "w": 44, + "h": 46 + } + }, + { + "filename": "0045.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 46, + "h": 49 + }, + "spriteSourceSize": { + "x": 2, + "y": 3, + "w": 44, + "h": 46 + }, + "frame": { + "x": 48, + "y": 152, + "w": 44, + "h": 46 + } + }, + { + "filename": "0046.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 46, + "h": 49 + }, + "spriteSourceSize": { + "x": 2, + "y": 3, + "w": 44, + "h": 46 + }, + "frame": { + "x": 48, + "y": 152, + "w": 44, + "h": 46 + } + }, + { + "filename": "0056.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 46, + "h": 49 + }, + "spriteSourceSize": { + "x": 2, + "y": 3, + "w": 44, + "h": 46 + }, + "frame": { + "x": 48, + "y": 152, + "w": 44, + "h": 46 + } + }, + { + "filename": "0057.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 46, + "h": 49 + }, + "spriteSourceSize": { + "x": 2, + "y": 3, + "w": 44, + "h": 46 + }, + "frame": { + "x": 48, + "y": 152, + "w": 44, + "h": 46 + } + }, + { + "filename": "0067.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 46, + "h": 49 + }, + "spriteSourceSize": { + "x": 2, + "y": 3, + "w": 44, + "h": 46 + }, + "frame": { + "x": 48, + "y": 152, + "w": 44, + "h": 46 + } + }, + { + "filename": "0068.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 46, + "h": 49 + }, + "spriteSourceSize": { + "x": 2, + "y": 3, + "w": 44, + "h": 46 + }, + "frame": { + "x": 48, + "y": 152, + "w": 44, + "h": 46 + } + }, + { + "filename": "0011.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 46, + "h": 49 + }, + "spriteSourceSize": { + "x": 2, + "y": 3, + "w": 44, + "h": 46 + }, + "frame": { + "x": 143, + "y": 52, + "w": 44, + "h": 46 + } + }, + { + "filename": "0022.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 46, + "h": 49 + }, + "spriteSourceSize": { + "x": 2, + "y": 3, + "w": 44, + "h": 46 + }, + "frame": { + "x": 143, + "y": 52, + "w": 44, + "h": 46 + } + }, + { + "filename": "0033.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 46, + "h": 49 + }, + "spriteSourceSize": { + "x": 2, + "y": 3, + "w": 44, + "h": 46 + }, + "frame": { + "x": 143, + "y": 52, + "w": 44, + "h": 46 + } + }, + { + "filename": "0044.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 46, + "h": 49 + }, + "spriteSourceSize": { + "x": 2, + "y": 3, + "w": 44, + "h": 46 + }, + "frame": { + "x": 143, + "y": 52, + "w": 44, + "h": 46 + } + }, + { + "filename": "0055.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 46, + "h": 49 + }, + "spriteSourceSize": { + "x": 2, + "y": 3, + "w": 44, + "h": 46 + }, + "frame": { + "x": 143, + "y": 52, + "w": 44, + "h": 46 + } + }, + { + "filename": "0066.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 46, + "h": 49 + }, + "spriteSourceSize": { + "x": 2, + "y": 3, + "w": 44, + "h": 46 + }, + "frame": { + "x": 143, + "y": 52, + "w": 44, + "h": 46 + } + }, + { + "filename": "0008.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 46, + "h": 49 + }, + "spriteSourceSize": { + "x": 0, + "y": 1, + "w": 43, + "h": 48 + }, + "frame": { + "x": 189, + "y": 50, + "w": 43, + "h": 48 + } + }, + { + "filename": "0019.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 46, + "h": 49 + }, + "spriteSourceSize": { + "x": 0, + "y": 1, + "w": 43, + "h": 48 + }, + "frame": { + "x": 189, + "y": 50, + "w": 43, + "h": 48 + } + }, + { + "filename": "0030.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 46, + "h": 49 + }, + "spriteSourceSize": { + "x": 0, + "y": 1, + "w": 43, + "h": 48 + }, + "frame": { + "x": 189, + "y": 50, + "w": 43, + "h": 48 + } + }, + { + "filename": "0041.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 46, + "h": 49 + }, + "spriteSourceSize": { + "x": 0, + "y": 1, + "w": 43, + "h": 48 + }, + "frame": { + "x": 189, + "y": 50, + "w": 43, + "h": 48 + } + }, + { + "filename": "0052.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 46, + "h": 49 + }, + "spriteSourceSize": { + "x": 0, + "y": 1, + "w": 43, + "h": 48 + }, + "frame": { + "x": 189, + "y": 50, + "w": 43, + "h": 48 + } + }, + { + "filename": "0063.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 46, + "h": 49 + }, + "spriteSourceSize": { + "x": 0, + "y": 1, + "w": 43, + "h": 48 + }, + "frame": { + "x": 189, + "y": 50, + "w": 43, + "h": 48 + } + }, + { + "filename": "0009.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 46, + "h": 49 + }, + "spriteSourceSize": { + "x": 0, + "y": 1, + "w": 43, + "h": 48 + }, + "frame": { + "x": 234, + "y": 50, + "w": 43, + "h": 48 + } + }, + { + "filename": "0020.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 46, + "h": 49 + }, + "spriteSourceSize": { + "x": 0, + "y": 1, + "w": 43, + "h": 48 + }, + "frame": { + "x": 234, + "y": 50, + "w": 43, + "h": 48 + } + }, + { + "filename": "0031.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 46, + "h": 49 + }, + "spriteSourceSize": { + "x": 0, + "y": 1, + "w": 43, + "h": 48 + }, + "frame": { + "x": 234, + "y": 50, + "w": 43, + "h": 48 + } + }, + { + "filename": "0042.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 46, + "h": 49 + }, + "spriteSourceSize": { + "x": 0, + "y": 1, + "w": 43, + "h": 48 + }, + "frame": { + "x": 234, + "y": 50, + "w": 43, + "h": 48 + } + }, + { + "filename": "0053.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 46, + "h": 49 + }, + "spriteSourceSize": { + "x": 0, + "y": 1, + "w": 43, + "h": 48 + }, + "frame": { + "x": 234, + "y": 50, + "w": 43, + "h": 48 + } + }, + { + "filename": "0064.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 46, + "h": 49 + }, + "spriteSourceSize": { + "x": 0, + "y": 1, + "w": 43, + "h": 48 + }, + "frame": { + "x": 234, + "y": 50, + "w": 43, + "h": 48 + } + }, + { + "filename": "0074.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 46, + "h": 49 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 43, + "h": 49 + }, + "frame": { + "x": 94, + "y": 101, + "w": 43, + "h": 49 + } + }, { "filename": "0076.png", "rotated": false, "trimmed": true, "sourceSize": { - "w": 45, - "h": 50 + "w": 46, + "h": 49 }, "spriteSourceSize": { "x": 1, - "y": 3, - "w": 44, - "h": 47 + "y": 0, + "w": 43, + "h": 49 }, "frame": { - "x": 264, - "y": 246, - "w": 44, - "h": 47 + "x": 139, + "y": 100, + "w": 43, + "h": 49 } }, { - "filename": "0091.png", + "filename": "0077.png", "rotated": false, "trimmed": true, "sourceSize": { - "w": 45, - "h": 50 + "w": 46, + "h": 49 }, "spriteSourceSize": { "x": 1, - "y": 3, - "w": 44, - "h": 47 + "y": 0, + "w": 43, + "h": 49 }, "frame": { - "x": 264, - "y": 293, - "w": 44, - "h": 47 + "x": 184, + "y": 100, + "w": 43, + "h": 49 + } + }, + { + "filename": "0078.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 46, + "h": 49 + }, + "spriteSourceSize": { + "x": 1, + "y": 0, + "w": 43, + "h": 49 + }, + "frame": { + "x": 229, + "y": 100, + "w": 43, + "h": 49 + } + }, + { + "filename": "0079.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 46, + "h": 49 + }, + "spriteSourceSize": { + "x": 1, + "y": 0, + "w": 43, + "h": 49 + }, + "frame": { + "x": 94, + "y": 152, + "w": 43, + "h": 49 + } + }, + { + "filename": "0080.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 46, + "h": 49 + }, + "spriteSourceSize": { + "x": 1, + "y": 0, + "w": 43, + "h": 49 + }, + "frame": { + "x": 139, + "y": 151, + "w": 43, + "h": 49 + } + }, + { + "filename": "0081.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 46, + "h": 49 + }, + "spriteSourceSize": { + "x": 1, + "y": 0, + "w": 43, + "h": 49 + }, + "frame": { + "x": 184, + "y": 151, + "w": 43, + "h": 49 + } + }, + { + "filename": "0082.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 46, + "h": 49 + }, + "spriteSourceSize": { + "x": 1, + "y": 0, + "w": 43, + "h": 49 + }, + "frame": { + "x": 229, + "y": 151, + "w": 43, + "h": 49 + } + }, + { + "filename": "0075.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 46, + "h": 49 + }, + "spriteSourceSize": { + "x": 1, + "y": 0, + "w": 42, + "h": 49 + }, + "frame": { + "x": 47, + "y": 201, + "w": 42, + "h": 49 + } + }, + { + "filename": "0088.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 46, + "h": 49 + }, + "spriteSourceSize": { + "x": 0, + "y": 1, + "w": 43, + "h": 48 + }, + "frame": { + "x": 47, + "y": 252, + "w": 43, + "h": 48 + } + }, + { + "filename": "0083.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 46, + "h": 49 + }, + "spriteSourceSize": { + "x": 1, + "y": 0, + "w": 43, + "h": 49 + }, + "frame": { + "x": 139, + "y": 202, + "w": 43, + "h": 49 + } + }, + { + "filename": "0086.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 46, + "h": 49 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 43, + "h": 49 + }, + "frame": { + "x": 184, + "y": 202, + "w": 43, + "h": 49 + } + }, + { + "filename": "0087.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 46, + "h": 49 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 43, + "h": 49 + }, + "frame": { + "x": 229, + "y": 202, + "w": 43, + "h": 49 + } + }, + { + "filename": "0089.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 46, + "h": 49 + }, + "spriteSourceSize": { + "x": 0, + "y": 1, + "w": 43, + "h": 48 + }, + "frame": { + "x": 92, + "y": 203, + "w": 43, + "h": 48 } } ] @@ -2577,6 +1905,6 @@ "meta": { "app": "https://www.codeandweb.com/texturepacker", "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:d74d016320d4e69be41021af2e23899d:84d9208986a6ccae41903e4853367cb7:1d471fa25be339df4c4184625fad00b3$" + "smartupdate": "$TexturePacker:SmartUpdate:a44c0ac06d9b3f225bf4ca6ae3326041:93ae31dcf0673c1e0be8d6dfea13f44f:1d471fa25be339df4c4184625fad00b3$" } } diff --git a/public/images/pokemon/636.png b/public/images/pokemon/636.png index e3780aaab83..24b296bcb9d 100644 Binary files a/public/images/pokemon/636.png and b/public/images/pokemon/636.png differ diff --git a/public/images/pokemon/802-zenith.png b/public/images/pokemon/802-zenith.png index b6db4621a0b..17d2831a50c 100644 Binary files a/public/images/pokemon/802-zenith.png and b/public/images/pokemon/802-zenith.png differ diff --git a/public/images/pokemon/back/700.png b/public/images/pokemon/back/700.png index cfd4063921b..229c786c67e 100644 Binary files a/public/images/pokemon/back/700.png and b/public/images/pokemon/back/700.png differ diff --git a/public/images/pokemon/back/802-zenith.png b/public/images/pokemon/back/802-zenith.png index 4158e0c1ed2..e38e295be75 100644 Binary files a/public/images/pokemon/back/802-zenith.png and b/public/images/pokemon/back/802-zenith.png differ diff --git a/public/images/pokemon/back/shiny/715.png b/public/images/pokemon/back/shiny/715.png index e71e12f7445..dfd07126e59 100644 Binary files a/public/images/pokemon/back/shiny/715.png and b/public/images/pokemon/back/shiny/715.png differ diff --git a/public/images/pokemon/back/shiny/802-zenith.png b/public/images/pokemon/back/shiny/802-zenith.png index 4158e0c1ed2..8e71dd7c762 100644 Binary files a/public/images/pokemon/back/shiny/802-zenith.png and b/public/images/pokemon/back/shiny/802-zenith.png differ diff --git a/public/images/pokemon/back/shiny/982-three-segment.png b/public/images/pokemon/back/shiny/982-three-segment.png index 13d150bcdc7..11f855f9366 100644 Binary files a/public/images/pokemon/back/shiny/982-three-segment.png and b/public/images/pokemon/back/shiny/982-three-segment.png differ diff --git a/public/images/pokemon/back/shiny/982.png b/public/images/pokemon/back/shiny/982.png index df537fd151c..3f72e2a644f 100644 Binary files a/public/images/pokemon/back/shiny/982.png and b/public/images/pokemon/back/shiny/982.png differ diff --git a/public/images/pokemon/exp/823.png b/public/images/pokemon/exp/823.png index 22301ca3abe..b280ac7c9e6 100644 Binary files a/public/images/pokemon/exp/823.png and b/public/images/pokemon/exp/823.png differ diff --git a/public/images/pokemon/exp/back/150-mega-x.png b/public/images/pokemon/exp/back/150-mega-x.png index c9658de8211..80907e95074 100644 Binary files a/public/images/pokemon/exp/back/150-mega-x.png and b/public/images/pokemon/exp/back/150-mega-x.png differ diff --git a/public/images/pokemon/exp/back/823.png b/public/images/pokemon/exp/back/823.png index 69506ac4645..ea00aba09e5 100644 Binary files a/public/images/pokemon/exp/back/823.png and b/public/images/pokemon/exp/back/823.png differ diff --git a/public/images/pokemon/exp/back/shiny/150-mega-x.png b/public/images/pokemon/exp/back/shiny/150-mega-x.png index daecd9bf7b5..eca55d70313 100644 Binary files a/public/images/pokemon/exp/back/shiny/150-mega-x.png and b/public/images/pokemon/exp/back/shiny/150-mega-x.png differ diff --git a/public/images/pokemon/exp/back/shiny/823.png b/public/images/pokemon/exp/back/shiny/823.png index 81b3a07a6da..09c06f2aeb6 100644 Binary files a/public/images/pokemon/exp/back/shiny/823.png and b/public/images/pokemon/exp/back/shiny/823.png differ diff --git a/public/images/pokemon/exp/female/916.json b/public/images/pokemon/exp/female/916.json deleted file mode 100644 index e937dadda95..00000000000 --- a/public/images/pokemon/exp/female/916.json +++ /dev/null @@ -1,272 +0,0 @@ -{ - "textures": [ - { - "image": "916.png", - "format": "RGBA8888", - "size": { - "w": 250, - "h": 250 - }, - "scale": 1, - "frames": [ - { - "filename": "0006.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 61, - "h": 85 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 61, - "h": 85 - }, - "frame": { - "x": 0, - "y": 0, - "w": 61, - "h": 85 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 61, - "h": 85 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 60, - "h": 85 - }, - "frame": { - "x": 0, - "y": 85, - "w": 60, - "h": 85 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 61, - "h": 85 - }, - "spriteSourceSize": { - "x": 1, - "y": 5, - "w": 60, - "h": 80 - }, - "frame": { - "x": 0, - "y": 170, - "w": 60, - "h": 80 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 61, - "h": 85 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 60, - "h": 85 - }, - "frame": { - "x": 60, - "y": 85, - "w": 60, - "h": 85 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 61, - "h": 85 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 60, - "h": 85 - }, - "frame": { - "x": 61, - "y": 0, - "w": 60, - "h": 85 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 61, - "h": 85 - }, - "spriteSourceSize": { - "x": 2, - "y": 5, - "w": 59, - "h": 80 - }, - "frame": { - "x": 60, - "y": 170, - "w": 59, - "h": 80 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 61, - "h": 85 - }, - "spriteSourceSize": { - "x": 1, - "y": 6, - "w": 60, - "h": 79 - }, - "frame": { - "x": 119, - "y": 170, - "w": 60, - "h": 79 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 61, - "h": 85 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 60, - "h": 85 - }, - "frame": { - "x": 120, - "y": 85, - "w": 60, - "h": 85 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 61, - "h": 85 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 60, - "h": 83 - }, - "frame": { - "x": 121, - "y": 0, - "w": 60, - "h": 83 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 61, - "h": 85 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 60, - "h": 83 - }, - "frame": { - "x": 181, - "y": 0, - "w": 60, - "h": 83 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 61, - "h": 85 - }, - "spriteSourceSize": { - "x": 1, - "y": 4, - "w": 60, - "h": 81 - }, - "frame": { - "x": 180, - "y": 83, - "w": 60, - "h": 81 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 61, - "h": 85 - }, - "spriteSourceSize": { - "x": 2, - "y": 4, - "w": 59, - "h": 81 - }, - "frame": { - "x": 180, - "y": 164, - "w": 59, - "h": 81 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:08f91248c91e426c4993be4e9988fc0d:215799a2235190ac587b1617d8e7e8b9:72483d103fb6b8e5c1889150025102c8$" - } -} diff --git a/public/images/pokemon/exp/female/916.png b/public/images/pokemon/exp/female/916.png deleted file mode 100644 index 314062011c1..00000000000 Binary files a/public/images/pokemon/exp/female/916.png and /dev/null differ diff --git a/public/images/pokemon/exp/shiny/823.png b/public/images/pokemon/exp/shiny/823.png index 1e90dcb67d3..9df29297e3a 100644 Binary files a/public/images/pokemon/exp/shiny/823.png and b/public/images/pokemon/exp/shiny/823.png differ diff --git a/public/images/pokemon/female/6215.png b/public/images/pokemon/female/6215.png index 0bfb2114c0f..c98bc4847b7 100644 Binary files a/public/images/pokemon/female/6215.png and b/public/images/pokemon/female/6215.png differ diff --git a/public/images/pokemon/female/916.json b/public/images/pokemon/female/916.json deleted file mode 100644 index e174d4b2d1c..00000000000 --- a/public/images/pokemon/female/916.json +++ /dev/null @@ -1,272 +0,0 @@ -{ - "textures": [ - { - "image": "916.png", - "format": "RGBA8888", - "size": { - "w": 251, - "h": 251 - }, - "scale": 1, - "frames": [ - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 96 - }, - "spriteSourceSize": { - "x": 13, - "y": 10, - "w": 62, - "h": 86 - }, - "frame": { - "x": 0, - "y": 0, - "w": 62, - "h": 86 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 96 - }, - "spriteSourceSize": { - "x": 15, - "y": 10, - "w": 61, - "h": 86 - }, - "frame": { - "x": 62, - "y": 0, - "w": 61, - "h": 86 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 96 - }, - "spriteSourceSize": { - "x": 15, - "y": 10, - "w": 61, - "h": 86 - }, - "frame": { - "x": 123, - "y": 0, - "w": 61, - "h": 86 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 96 - }, - "spriteSourceSize": { - "x": 15, - "y": 10, - "w": 60, - "h": 86 - }, - "frame": { - "x": 184, - "y": 0, - "w": 60, - "h": 86 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 96 - }, - "spriteSourceSize": { - "x": 15, - "y": 15, - "w": 61, - "h": 81 - }, - "frame": { - "x": 0, - "y": 86, - "w": 61, - "h": 81 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 96 - }, - "spriteSourceSize": { - "x": 15, - "y": 16, - "w": 61, - "h": 80 - }, - "frame": { - "x": 61, - "y": 86, - "w": 61, - "h": 80 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 96 - }, - "spriteSourceSize": { - "x": 15, - "y": 10, - "w": 60, - "h": 86 - }, - "frame": { - "x": 122, - "y": 86, - "w": 60, - "h": 86 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 96 - }, - "spriteSourceSize": { - "x": 15, - "y": 13, - "w": 60, - "h": 83 - }, - "frame": { - "x": 61, - "y": 166, - "w": 60, - "h": 83 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 96 - }, - "spriteSourceSize": { - "x": 15, - "y": 13, - "w": 60, - "h": 83 - }, - "frame": { - "x": 0, - "y": 167, - "w": 60, - "h": 83 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 96 - }, - "spriteSourceSize": { - "x": 15, - "y": 17, - "w": 60, - "h": 79 - }, - "frame": { - "x": 121, - "y": 172, - "w": 60, - "h": 79 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 96 - }, - "spriteSourceSize": { - "x": 16, - "y": 15, - "w": 60, - "h": 81 - }, - "frame": { - "x": 182, - "y": 86, - "w": 60, - "h": 81 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 96 - }, - "spriteSourceSize": { - "x": 16, - "y": 16, - "w": 60, - "h": 80 - }, - "frame": { - "x": 182, - "y": 167, - "w": 60, - "h": 80 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:f1919e76120351b77d053dd0b1048890:6cc484548a07e592b87dcc37f6c74a39:72483d103fb6b8e5c1889150025102c8$" - } -} diff --git a/public/images/pokemon/female/916.png b/public/images/pokemon/female/916.png deleted file mode 100644 index 452b8403c66..00000000000 Binary files a/public/images/pokemon/female/916.png and /dev/null differ diff --git a/public/images/pokemon/shiny/563.json b/public/images/pokemon/shiny/563.json index 73e9cc7ca33..666ec547d18 100644 --- a/public/images/pokemon/shiny/563.json +++ b/public/images/pokemon/shiny/563.json @@ -1,3485 +1,699 @@ -{ - "textures": [ - { - "image": "563.png", - "format": "RGBA8888", - "size": { - "w": 500, - "h": 500 - }, - "scale": 1, - "frames": [ - { - "filename": "0026.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 116, - "h": 81 - }, - "frame": { - "x": 0, - "y": 0, - "w": 116, - "h": 81 - } - }, - { - "filename": "0027.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 116, - "h": 81 - }, - "frame": { - "x": 0, - "y": 0, - "w": 116, - "h": 81 - } - }, - { - "filename": "0061.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 116, - "h": 81 - }, - "frame": { - "x": 0, - "y": 0, - "w": 116, - "h": 81 - } - }, - { - "filename": "0062.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 116, - "h": 81 - }, - "frame": { - "x": 0, - "y": 0, - "w": 116, - "h": 81 - } - }, - { - "filename": "0156.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 116, - "h": 81 - }, - "frame": { - "x": 0, - "y": 0, - "w": 116, - "h": 81 - } - }, - { - "filename": "0157.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 116, - "h": 81 - }, - "frame": { - "x": 0, - "y": 0, - "w": 116, - "h": 81 - } - }, - { - "filename": "0025.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 19, - "y": 0, - "w": 103, - "h": 88 - }, - "frame": { - "x": 0, - "y": 81, - "w": 103, - "h": 88 - } - }, - { - "filename": "0060.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 19, - "y": 0, - "w": 103, - "h": 88 - }, - "frame": { - "x": 0, - "y": 81, - "w": 103, - "h": 88 - } - }, - { - "filename": "0155.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 19, - "y": 0, - "w": 103, - "h": 88 - }, - "frame": { - "x": 0, - "y": 81, - "w": 103, - "h": 88 - } - }, - { - "filename": "0028.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 1, - "y": 13, - "w": 116, - "h": 69 - }, - "frame": { - "x": 116, - "y": 0, - "w": 116, - "h": 69 - } - }, - { - "filename": "0029.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 1, - "y": 13, - "w": 116, - "h": 69 - }, - "frame": { - "x": 116, - "y": 0, - "w": 116, - "h": 69 - } - }, - { - "filename": "0063.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 1, - "y": 13, - "w": 116, - "h": 69 - }, - "frame": { - "x": 116, - "y": 0, - "w": 116, - "h": 69 - } - }, - { - "filename": "0064.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 1, - "y": 13, - "w": 116, - "h": 69 - }, - "frame": { - "x": 116, - "y": 0, - "w": 116, - "h": 69 - } - }, - { - "filename": "0158.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 1, - "y": 13, - "w": 116, - "h": 69 - }, - "frame": { - "x": 116, - "y": 0, - "w": 116, - "h": 69 - } - }, - { - "filename": "0159.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 1, - "y": 13, - "w": 116, - "h": 69 - }, - "frame": { - "x": 116, - "y": 0, - "w": 116, - "h": 69 - } - }, - { - "filename": "0031.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 101, - "h": 81 - }, - "frame": { - "x": 0, - "y": 169, - "w": 101, - "h": 81 - } - }, - { - "filename": "0032.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 101, - "h": 81 - }, - "frame": { - "x": 0, - "y": 169, - "w": 101, - "h": 81 - } - }, - { - "filename": "0066.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 101, - "h": 81 - }, - "frame": { - "x": 0, - "y": 169, - "w": 101, - "h": 81 - } - }, - { - "filename": "0067.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 101, - "h": 81 - }, - "frame": { - "x": 0, - "y": 169, - "w": 101, - "h": 81 - } - }, - { - "filename": "0161.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 101, - "h": 81 - }, - "frame": { - "x": 0, - "y": 169, - "w": 101, - "h": 81 - } - }, - { - "filename": "0162.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 101, - "h": 81 - }, - "frame": { - "x": 0, - "y": 169, - "w": 101, - "h": 81 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 99, - "h": 81 - }, - "frame": { - "x": 0, - "y": 250, - "w": 99, - "h": 81 - } - }, - { - "filename": "0040.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 99, - "h": 81 - }, - "frame": { - "x": 0, - "y": 250, - "w": 99, - "h": 81 - } - }, - { - "filename": "0135.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 99, - "h": 81 - }, - "frame": { - "x": 0, - "y": 250, - "w": 99, - "h": 81 - } - }, - { - "filename": "0033.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 3, - "y": 2, - "w": 98, - "h": 81 - }, - "frame": { - "x": 0, - "y": 331, - "w": 98, - "h": 81 - } - }, - { - "filename": "0034.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 3, - "y": 2, - "w": 98, - "h": 81 - }, - "frame": { - "x": 0, - "y": 331, - "w": 98, - "h": 81 - } - }, - { - "filename": "0068.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 3, - "y": 2, - "w": 98, - "h": 81 - }, - "frame": { - "x": 0, - "y": 331, - "w": 98, - "h": 81 - } - }, - { - "filename": "0069.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 3, - "y": 2, - "w": 98, - "h": 81 - }, - "frame": { - "x": 0, - "y": 331, - "w": 98, - "h": 81 - } - }, - { - "filename": "0163.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 3, - "y": 2, - "w": 98, - "h": 81 - }, - "frame": { - "x": 0, - "y": 331, - "w": 98, - "h": 81 - } - }, - { - "filename": "0164.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 3, - "y": 2, - "w": 98, - "h": 81 - }, - "frame": { - "x": 0, - "y": 331, - "w": 98, - "h": 81 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 4, - "y": 1, - "w": 96, - "h": 81 - }, - "frame": { - "x": 0, - "y": 412, - "w": 96, - "h": 81 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 4, - "y": 1, - "w": 96, - "h": 81 - }, - "frame": { - "x": 0, - "y": 412, - "w": 96, - "h": 81 - } - }, - { - "filename": "0038.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 4, - "y": 1, - "w": 96, - "h": 81 - }, - "frame": { - "x": 0, - "y": 412, - "w": 96, - "h": 81 - } - }, - { - "filename": "0039.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 4, - "y": 1, - "w": 96, - "h": 81 - }, - "frame": { - "x": 0, - "y": 412, - "w": 96, - "h": 81 - } - }, - { - "filename": "0133.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 4, - "y": 1, - "w": 96, - "h": 81 - }, - "frame": { - "x": 0, - "y": 412, - "w": 96, - "h": 81 - } - }, - { - "filename": "0134.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 4, - "y": 1, - "w": 96, - "h": 81 - }, - "frame": { - "x": 0, - "y": 412, - "w": 96, - "h": 81 - } - }, - { - "filename": "0030.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 10, - "w": 108, - "h": 72 - }, - "frame": { - "x": 232, - "y": 0, - "w": 108, - "h": 72 - } - }, - { - "filename": "0065.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 10, - "w": 108, - "h": 72 - }, - "frame": { - "x": 232, - "y": 0, - "w": 108, - "h": 72 - } - }, - { - "filename": "0160.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 10, - "w": 108, - "h": 72 - }, - "frame": { - "x": 232, - "y": 0, - "w": 108, - "h": 72 - } - }, - { - "filename": "0023.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 13, - "y": 13, - "w": 106, - "h": 72 - }, - "frame": { - "x": 340, - "y": 0, - "w": 106, - "h": 72 - } - }, - { - "filename": "0024.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 13, - "y": 13, - "w": 106, - "h": 72 - }, - "frame": { - "x": 340, - "y": 0, - "w": 106, - "h": 72 - } - }, - { - "filename": "0058.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 13, - "y": 13, - "w": 106, - "h": 72 - }, - "frame": { - "x": 340, - "y": 0, - "w": 106, - "h": 72 - } - }, - { - "filename": "0059.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 13, - "y": 13, - "w": 106, - "h": 72 - }, - "frame": { - "x": 340, - "y": 0, - "w": 106, - "h": 72 - } - }, - { - "filename": "0153.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 13, - "y": 13, - "w": 106, - "h": 72 - }, - "frame": { - "x": 340, - "y": 0, - "w": 106, - "h": 72 - } - }, - { - "filename": "0154.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 13, - "y": 13, - "w": 106, - "h": 72 - }, - "frame": { - "x": 340, - "y": 0, - "w": 106, - "h": 72 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 8, - "y": 11, - "w": 107, - "h": 68 - }, - "frame": { - "x": 116, - "y": 69, - "w": 107, - "h": 68 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 8, - "y": 11, - "w": 107, - "h": 68 - }, - "frame": { - "x": 116, - "y": 69, - "w": 107, - "h": 68 - } - }, - { - "filename": "0048.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 8, - "y": 11, - "w": 107, - "h": 68 - }, - "frame": { - "x": 116, - "y": 69, - "w": 107, - "h": 68 - } - }, - { - "filename": "0049.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 8, - "y": 11, - "w": 107, - "h": 68 - }, - "frame": { - "x": 116, - "y": 69, - "w": 107, - "h": 68 - } - }, - { - "filename": "0143.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 8, - "y": 11, - "w": 107, - "h": 68 - }, - "frame": { - "x": 116, - "y": 69, - "w": 107, - "h": 68 - } - }, - { - "filename": "0144.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 8, - "y": 11, - "w": 107, - "h": 68 - }, - "frame": { - "x": 116, - "y": 69, - "w": 107, - "h": 68 - } - }, - { - "filename": "0021.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 9, - "y": 15, - "w": 105, - "h": 68 - }, - "frame": { - "x": 223, - "y": 72, - "w": 105, - "h": 68 - } - }, - { - "filename": "0022.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 9, - "y": 15, - "w": 105, - "h": 68 - }, - "frame": { - "x": 223, - "y": 72, - "w": 105, - "h": 68 - } - }, - { - "filename": "0056.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 9, - "y": 15, - "w": 105, - "h": 68 - }, - "frame": { - "x": 223, - "y": 72, - "w": 105, - "h": 68 - } - }, - { - "filename": "0057.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 9, - "y": 15, - "w": 105, - "h": 68 - }, - "frame": { - "x": 223, - "y": 72, - "w": 105, - "h": 68 - } - }, - { - "filename": "0151.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 9, - "y": 15, - "w": 105, - "h": 68 - }, - "frame": { - "x": 223, - "y": 72, - "w": 105, - "h": 68 - } - }, - { - "filename": "0152.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 9, - "y": 15, - "w": 105, - "h": 68 - }, - "frame": { - "x": 223, - "y": 72, - "w": 105, - "h": 68 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 8, - "y": 10, - "w": 104, - "h": 67 - }, - "frame": { - "x": 328, - "y": 72, - "w": 104, - "h": 67 - } - }, - { - "filename": "0050.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 8, - "y": 10, - "w": 104, - "h": 67 - }, - "frame": { - "x": 328, - "y": 72, - "w": 104, - "h": 67 - } - }, - { - "filename": "0145.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 8, - "y": 10, - "w": 104, - "h": 67 - }, - "frame": { - "x": 328, - "y": 72, - "w": 104, - "h": 67 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 8, - "y": 14, - "w": 102, - "h": 68 - }, - "frame": { - "x": 103, - "y": 137, - "w": 102, - "h": 68 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 8, - "y": 14, - "w": 102, - "h": 68 - }, - "frame": { - "x": 103, - "y": 137, - "w": 102, - "h": 68 - } - }, - { - "filename": "0046.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 8, - "y": 14, - "w": 102, - "h": 68 - }, - "frame": { - "x": 103, - "y": 137, - "w": 102, - "h": 68 - } - }, - { - "filename": "0047.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 8, - "y": 14, - "w": 102, - "h": 68 - }, - "frame": { - "x": 103, - "y": 137, - "w": 102, - "h": 68 - } - }, - { - "filename": "0141.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 8, - "y": 14, - "w": 102, - "h": 68 - }, - "frame": { - "x": 103, - "y": 137, - "w": 102, - "h": 68 - } - }, - { - "filename": "0142.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 8, - "y": 14, - "w": 102, - "h": 68 - }, - "frame": { - "x": 103, - "y": 137, - "w": 102, - "h": 68 - } - }, - { - "filename": "0020.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 7, - "y": 9, - "w": 98, - "h": 73 - }, - "frame": { - "x": 205, - "y": 140, - "w": 98, - "h": 73 - } - }, - { - "filename": "0055.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 7, - "y": 9, - "w": 98, - "h": 73 - }, - "frame": { - "x": 205, - "y": 140, - "w": 98, - "h": 73 - } - }, - { - "filename": "0150.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 7, - "y": 9, - "w": 98, - "h": 73 - }, - "frame": { - "x": 205, - "y": 140, - "w": 98, - "h": 73 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 96, - "h": 75 - }, - "frame": { - "x": 101, - "y": 205, - "w": 96, - "h": 75 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 96, - "h": 75 - }, - "frame": { - "x": 101, - "y": 205, - "w": 96, - "h": 75 - } - }, - { - "filename": "0041.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 96, - "h": 75 - }, - "frame": { - "x": 101, - "y": 205, - "w": 96, - "h": 75 - } - }, - { - "filename": "0042.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 96, - "h": 75 - }, - "frame": { - "x": 101, - "y": 205, - "w": 96, - "h": 75 - } - }, - { - "filename": "0136.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 96, - "h": 75 - }, - "frame": { - "x": 101, - "y": 205, - "w": 96, - "h": 75 - } - }, - { - "filename": "0137.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 96, - "h": 75 - }, - "frame": { - "x": 101, - "y": 205, - "w": 96, - "h": 75 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 9, - "y": 7, - "w": 94, - "h": 75 - }, - "frame": { - "x": 197, - "y": 213, - "w": 94, - "h": 75 - } - }, - { - "filename": "0045.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 9, - "y": 7, - "w": 94, - "h": 75 - }, - "frame": { - "x": 197, - "y": 213, - "w": 94, - "h": 75 - } - }, - { - "filename": "0140.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 9, - "y": 7, - "w": 94, - "h": 75 - }, - "frame": { - "x": 197, - "y": 213, - "w": 94, - "h": 75 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 9, - "y": 4, - "w": 94, - "h": 78 - }, - "frame": { - "x": 99, - "y": 280, - "w": 94, - "h": 78 - } - }, - { - "filename": "0017.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 9, - "y": 4, - "w": 94, - "h": 78 - }, - "frame": { - "x": 99, - "y": 280, - "w": 94, - "h": 78 - } - }, - { - "filename": "0051.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 9, - "y": 4, - "w": 94, - "h": 78 - }, - "frame": { - "x": 99, - "y": 280, - "w": 94, - "h": 78 - } - }, - { - "filename": "0052.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 9, - "y": 4, - "w": 94, - "h": 78 - }, - "frame": { - "x": 99, - "y": 280, - "w": 94, - "h": 78 - } - }, - { - "filename": "0146.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 9, - "y": 4, - "w": 94, - "h": 78 - }, - "frame": { - "x": 99, - "y": 280, - "w": 94, - "h": 78 - } - }, - { - "filename": "0147.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 9, - "y": 4, - "w": 94, - "h": 78 - }, - "frame": { - "x": 99, - "y": 280, - "w": 94, - "h": 78 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 93, - "h": 78 - }, - "frame": { - "x": 193, - "y": 288, - "w": 93, - "h": 78 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 93, - "h": 78 - }, - "frame": { - "x": 193, - "y": 288, - "w": 93, - "h": 78 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 93, - "h": 78 - }, - "frame": { - "x": 193, - "y": 288, - "w": 93, - "h": 78 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 93, - "h": 78 - }, - "frame": { - "x": 193, - "y": 288, - "w": 93, - "h": 78 - } - }, - { - "filename": "0018.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 93, - "h": 78 - }, - "frame": { - "x": 193, - "y": 288, - "w": 93, - "h": 78 - } - }, - { - "filename": "0019.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 93, - "h": 78 - }, - "frame": { - "x": 193, - "y": 288, - "w": 93, - "h": 78 - } - }, - { - "filename": "0035.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 93, - "h": 78 - }, - "frame": { - "x": 193, - "y": 288, - "w": 93, - "h": 78 - } - }, - { - "filename": "0036.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 93, - "h": 78 - }, - "frame": { - "x": 193, - "y": 288, - "w": 93, - "h": 78 - } - }, - { - "filename": "0037.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 93, - "h": 78 - }, - "frame": { - "x": 193, - "y": 288, - "w": 93, - "h": 78 - } - }, - { - "filename": "0043.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 93, - "h": 78 - }, - "frame": { - "x": 193, - "y": 288, - "w": 93, - "h": 78 - } - }, - { - "filename": "0044.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 93, - "h": 78 - }, - "frame": { - "x": 193, - "y": 288, - "w": 93, - "h": 78 - } - }, - { - "filename": "0053.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 93, - "h": 78 - }, - "frame": { - "x": 193, - "y": 288, - "w": 93, - "h": 78 - } - }, - { - "filename": "0054.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 93, - "h": 78 - }, - "frame": { - "x": 193, - "y": 288, - "w": 93, - "h": 78 - } - }, - { - "filename": "0070.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 93, - "h": 78 - }, - "frame": { - "x": 193, - "y": 288, - "w": 93, - "h": 78 - } - }, - { - "filename": "0131.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 93, - "h": 78 - }, - "frame": { - "x": 193, - "y": 288, - "w": 93, - "h": 78 - } - }, - { - "filename": "0132.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 93, - "h": 78 - }, - "frame": { - "x": 193, - "y": 288, - "w": 93, - "h": 78 - } - }, - { - "filename": "0138.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 93, - "h": 78 - }, - "frame": { - "x": 193, - "y": 288, - "w": 93, - "h": 78 - } - }, - { - "filename": "0139.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 93, - "h": 78 - }, - "frame": { - "x": 193, - "y": 288, - "w": 93, - "h": 78 - } - }, - { - "filename": "0148.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 93, - "h": 78 - }, - "frame": { - "x": 193, - "y": 288, - "w": 93, - "h": 78 - } - }, - { - "filename": "0149.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 93, - "h": 78 - }, - "frame": { - "x": 193, - "y": 288, - "w": 93, - "h": 78 - } - }, - { - "filename": "0165.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 93, - "h": 78 - }, - "frame": { - "x": 193, - "y": 288, - "w": 93, - "h": 78 - } - }, - { - "filename": "0071.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 93, - "h": 78 - }, - "frame": { - "x": 98, - "y": 358, - "w": 93, - "h": 78 - } - }, - { - "filename": "0072.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 93, - "h": 78 - }, - "frame": { - "x": 98, - "y": 358, - "w": 93, - "h": 78 - } - }, - { - "filename": "0073.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 7, - "y": 4, - "w": 93, - "h": 78 - }, - "frame": { - "x": 191, - "y": 366, - "w": 93, - "h": 78 - } - }, - { - "filename": "0081.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 19, - "y": 18, - "w": 73, - "h": 64 - }, - "frame": { - "x": 96, - "y": 436, - "w": 73, - "h": 64 - } - }, - { - "filename": "0125.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 28, - "y": 17, - "w": 52, - "h": 65 - }, - "frame": { - "x": 446, - "y": 0, - "w": 52, - "h": 65 - } - }, - { - "filename": "0074.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 6, - "y": 3, - "w": 93, - "h": 79 - }, - "frame": { - "x": 303, - "y": 140, - "w": 93, - "h": 79 - } - }, - { - "filename": "0075.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 5, - "y": 4, - "w": 93, - "h": 78 - }, - "frame": { - "x": 291, - "y": 219, - "w": 93, - "h": 78 - } - }, - { - "filename": "0076.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 5, - "y": 4, - "w": 93, - "h": 78 - }, - "frame": { - "x": 291, - "y": 219, - "w": 93, - "h": 78 - } - }, - { - "filename": "0077.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 6, - "y": 5, - "w": 93, - "h": 77 - }, - "frame": { - "x": 286, - "y": 297, - "w": 93, - "h": 77 - } - }, - { - "filename": "0078.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 12, - "y": 9, - "w": 85, - "h": 73 - }, - "frame": { - "x": 284, - "y": 374, - "w": 85, - "h": 73 - } - }, - { - "filename": "0129.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 16, - "y": 5, - "w": 75, - "h": 79 - }, - "frame": { - "x": 396, - "y": 139, - "w": 75, - "h": 79 - } - }, - { - "filename": "0130.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 11, - "y": 4, - "w": 85, - "h": 79 - }, - "frame": { - "x": 384, - "y": 219, - "w": 85, - "h": 79 - } - }, - { - "filename": "0079.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 16, - "y": 15, - "w": 78, - "h": 67 - }, - "frame": { - "x": 379, - "y": 298, - "w": 78, - "h": 67 - } - }, - { - "filename": "0080.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 16, - "y": 15, - "w": 78, - "h": 67 - }, - "frame": { - "x": 379, - "y": 298, - "w": 78, - "h": 67 - } - }, - { - "filename": "0127.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 21, - "y": 8, - "w": 66, - "h": 76 - }, - "frame": { - "x": 369, - "y": 374, - "w": 66, - "h": 76 - } - }, - { - "filename": "0128.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 21, - "y": 8, - "w": 66, - "h": 76 - }, - "frame": { - "x": 369, - "y": 374, - "w": 66, - "h": 76 - } - }, - { - "filename": "0126.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 25, - "y": 12, - "w": 59, - "h": 70 - }, - "frame": { - "x": 435, - "y": 365, - "w": 59, - "h": 70 - } - }, - { - "filename": "0082.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 25, - "y": 19, - "w": 66, - "h": 63 - }, - "frame": { - "x": 432, - "y": 72, - "w": 66, - "h": 63 - } - }, - { - "filename": "0083.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 29, - "y": 20, - "w": 60, - "h": 62 - }, - "frame": { - "x": 435, - "y": 435, - "w": 60, - "h": 62 - } - }, - { - "filename": "0084.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 29, - "y": 20, - "w": 60, - "h": 62 - }, - "frame": { - "x": 435, - "y": 435, - "w": 60, - "h": 62 - } - }, - { - "filename": "0085.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 37, - "y": 20, - "w": 37, - "h": 61 - }, - "frame": { - "x": 457, - "y": 298, - "w": 37, - "h": 61 - } - }, - { - "filename": "0086.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 37, - "y": 20, - "w": 37, - "h": 61 - }, - "frame": { - "x": 457, - "y": 298, - "w": 37, - "h": 61 - } - }, - { - "filename": "0087.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 37, - "y": 20, - "w": 37, - "h": 61 - }, - "frame": { - "x": 457, - "y": 298, - "w": 37, - "h": 61 - } - }, - { - "filename": "0088.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 37, - "y": 20, - "w": 37, - "h": 61 - }, - "frame": { - "x": 457, - "y": 298, - "w": 37, - "h": 61 - } - }, - { - "filename": "0089.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 37, - "y": 16, - "w": 37, - "h": 61 - }, - "frame": { - "x": 457, - "y": 298, - "w": 37, - "h": 61 - } - }, - { - "filename": "0090.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 37, - "y": 16, - "w": 37, - "h": 61 - }, - "frame": { - "x": 457, - "y": 298, - "w": 37, - "h": 61 - } - }, - { - "filename": "0091.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 37, - "y": 17, - "w": 37, - "h": 61 - }, - "frame": { - "x": 457, - "y": 298, - "w": 37, - "h": 61 - } - }, - { - "filename": "0092.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 37, - "y": 17, - "w": 37, - "h": 61 - }, - "frame": { - "x": 457, - "y": 298, - "w": 37, - "h": 61 - } - }, - { - "filename": "0093.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 37, - "y": 20, - "w": 37, - "h": 61 - }, - "frame": { - "x": 457, - "y": 298, - "w": 37, - "h": 61 - } - }, - { - "filename": "0094.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 37, - "y": 20, - "w": 37, - "h": 61 - }, - "frame": { - "x": 457, - "y": 298, - "w": 37, - "h": 61 - } - }, - { - "filename": "0095.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 37, - "y": 14, - "w": 37, - "h": 61 - }, - "frame": { - "x": 457, - "y": 298, - "w": 37, - "h": 61 - } - }, - { - "filename": "0096.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 37, - "y": 14, - "w": 37, - "h": 61 - }, - "frame": { - "x": 457, - "y": 298, - "w": 37, - "h": 61 - } - }, - { - "filename": "0097.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 37, - "y": 15, - "w": 37, - "h": 61 - }, - "frame": { - "x": 457, - "y": 298, - "w": 37, - "h": 61 - } - }, - { - "filename": "0098.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 37, - "y": 15, - "w": 37, - "h": 61 - }, - "frame": { - "x": 457, - "y": 298, - "w": 37, - "h": 61 - } - }, - { - "filename": "0099.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 37, - "y": 20, - "w": 37, - "h": 61 - }, - "frame": { - "x": 457, - "y": 298, - "w": 37, - "h": 61 - } - }, - { - "filename": "0100.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 37, - "y": 20, - "w": 37, - "h": 61 - }, - "frame": { - "x": 457, - "y": 298, - "w": 37, - "h": 61 - } - }, - { - "filename": "0101.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 37, - "y": 20, - "w": 37, - "h": 61 - }, - "frame": { - "x": 457, - "y": 298, - "w": 37, - "h": 61 - } - }, - { - "filename": "0102.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 37, - "y": 20, - "w": 37, - "h": 61 - }, - "frame": { - "x": 457, - "y": 298, - "w": 37, - "h": 61 - } - }, - { - "filename": "0103.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 37, - "y": 20, - "w": 37, - "h": 61 - }, - "frame": { - "x": 457, - "y": 298, - "w": 37, - "h": 61 - } - }, - { - "filename": "0104.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 37, - "y": 20, - "w": 37, - "h": 61 - }, - "frame": { - "x": 457, - "y": 298, - "w": 37, - "h": 61 - } - }, - { - "filename": "0105.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 37, - "y": 20, - "w": 37, - "h": 61 - }, - "frame": { - "x": 457, - "y": 298, - "w": 37, - "h": 61 - } - }, - { - "filename": "0106.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 37, - "y": 20, - "w": 37, - "h": 61 - }, - "frame": { - "x": 457, - "y": 298, - "w": 37, - "h": 61 - } - }, - { - "filename": "0107.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 37, - "y": 16, - "w": 37, - "h": 61 - }, - "frame": { - "x": 457, - "y": 298, - "w": 37, - "h": 61 - } - }, - { - "filename": "0108.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 37, - "y": 16, - "w": 37, - "h": 61 - }, - "frame": { - "x": 457, - "y": 298, - "w": 37, - "h": 61 - } - }, - { - "filename": "0109.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 37, - "y": 17, - "w": 37, - "h": 61 - }, - "frame": { - "x": 457, - "y": 298, - "w": 37, - "h": 61 - } - }, - { - "filename": "0110.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 37, - "y": 17, - "w": 37, - "h": 61 - }, - "frame": { - "x": 457, - "y": 298, - "w": 37, - "h": 61 - } - }, - { - "filename": "0111.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 37, - "y": 20, - "w": 37, - "h": 61 - }, - "frame": { - "x": 457, - "y": 298, - "w": 37, - "h": 61 - } - }, - { - "filename": "0112.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 37, - "y": 20, - "w": 37, - "h": 61 - }, - "frame": { - "x": 457, - "y": 298, - "w": 37, - "h": 61 - } - }, - { - "filename": "0113.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 37, - "y": 20, - "w": 37, - "h": 61 - }, - "frame": { - "x": 457, - "y": 298, - "w": 37, - "h": 61 - } - }, - { - "filename": "0114.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 37, - "y": 20, - "w": 37, - "h": 61 - }, - "frame": { - "x": 457, - "y": 298, - "w": 37, - "h": 61 - } - }, - { - "filename": "0115.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 37, - "y": 20, - "w": 37, - "h": 61 - }, - "frame": { - "x": 457, - "y": 298, - "w": 37, - "h": 61 - } - }, - { - "filename": "0116.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 37, - "y": 20, - "w": 37, - "h": 61 - }, - "frame": { - "x": 457, - "y": 298, - "w": 37, - "h": 61 - } - }, - { - "filename": "0117.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 37, - "y": 20, - "w": 37, - "h": 61 - }, - "frame": { - "x": 457, - "y": 298, - "w": 37, - "h": 61 - } - }, - { - "filename": "0118.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 37, - "y": 20, - "w": 37, - "h": 61 - }, - "frame": { - "x": 457, - "y": 298, - "w": 37, - "h": 61 - } - }, - { - "filename": "0119.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 37, - "y": 20, - "w": 37, - "h": 61 - }, - "frame": { - "x": 457, - "y": 298, - "w": 37, - "h": 61 - } - }, - { - "filename": "0120.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 37, - "y": 20, - "w": 37, - "h": 61 - }, - "frame": { - "x": 457, - "y": 298, - "w": 37, - "h": 61 - } - }, - { - "filename": "0121.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 37, - "y": 20, - "w": 37, - "h": 61 - }, - "frame": { - "x": 457, - "y": 298, - "w": 37, - "h": 61 - } - }, - { - "filename": "0122.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 37, - "y": 20, - "w": 37, - "h": 61 - }, - "frame": { - "x": 457, - "y": 298, - "w": 37, - "h": 61 - } - }, - { - "filename": "0123.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 37, - "y": 20, - "w": 37, - "h": 61 - }, - "frame": { - "x": 457, - "y": 298, - "w": 37, - "h": 61 - } - }, - { - "filename": "0124.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 37, - "y": 20, - "w": 37, - "h": 61 - }, - "frame": { - "x": 457, - "y": 298, - "w": 37, - "h": 61 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:697c20c4ebed8144399c4936c33f0236:3973650c39d034cfc27663d9051d4736:12f3eae8283ab6c8e555ff3e46b7d8dc$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 388, "y": 225, "w": 91, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 6, "w": 91, "h": 76 }, + "sourceSize": { "w": 114, "h": 89 } + }, + { + "filename": "0002.png", + "frame": { "x": 388, "y": 152, "w": 97, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 10, "w": 97, "h": 72 }, + "sourceSize": { "w": 114, "h": 89 } + }, + { + "filename": "0003.png", + "frame": { "x": 105, "y": 161, "w": 102, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 15, "w": 102, "h": 68 }, + "sourceSize": { "w": 114, "h": 89 } + }, + { + "filename": "0004.png", + "frame": { "x": 95, "y": 90, "w": 101, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 14, "w": 101, "h": 70 }, + "sourceSize": { "w": 114, "h": 89 } + }, + { + "filename": "0005.png", + "frame": { "x": 108, "y": 0, "w": 94, "h": 89 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 20, "y": 0, "w": 94, "h": 89 }, + "sourceSize": { "w": 114, "h": 89 } + }, + { + "filename": "0006.png", + "frame": { "x": 0, "y": 0, "w": 107, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 5, "w": 107, "h": 80 }, + "sourceSize": { "w": 114, "h": 89 } + }, + { + "filename": "0007.png", + "frame": { "x": 303, "y": 0, "w": 112, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 13, "w": 112, "h": 69 }, + "sourceSize": { "w": 114, "h": 89 } + }, + { + "filename": "0008.png", + "frame": { "x": 399, "y": 81, "w": 106, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 12, "w": 106, "h": 70 }, + "sourceSize": { "w": 114, "h": 89 } + }, + { + "filename": "0009.png", + "frame": { "x": 203, "y": 0, "w": 99, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 3, "w": 99, "h": 80 }, + "sourceSize": { "w": 114, "h": 89 } + }, + { + "filename": "0010.png", + "frame": { "x": 303, "y": 70, "w": 95, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 95, "h": 80 }, + "sourceSize": { "w": 114, "h": 89 } + }, + { + "filename": "0011.png", + "frame": { "x": 388, "y": 225, "w": 91, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 6, "w": 91, "h": 76 }, + "sourceSize": { "w": 114, "h": 89 } + }, + { + "filename": "0012.png", + "frame": { "x": 0, "y": 81, "w": 94, "h": 79 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 94, "h": 79 }, + "sourceSize": { "w": 114, "h": 89 } + }, + { + "filename": "0013.png", + "frame": { "x": 416, "y": 0, "w": 96, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 96, "h": 80 }, + "sourceSize": { "w": 114, "h": 89 } + }, + { + "filename": "0014.png", + "frame": { "x": 92, "y": 230, "w": 94, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 6, "w": 94, "h": 73 }, + "sourceSize": { "w": 114, "h": 89 } + }, + { + "filename": "0015.png", + "frame": { "x": 388, "y": 225, "w": 91, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 6, "w": 91, "h": 76 }, + "sourceSize": { "w": 114, "h": 89 } + }, + { + "filename": "0016.png", + "frame": { "x": 92, "y": 304, "w": 92, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 9, "w": 92, "h": 73 }, + "sourceSize": { "w": 114, "h": 89 } + }, + { + "filename": "0017.png", + "frame": { "x": 185, "y": 305, "w": 99, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 15, "w": 99, "h": 67 }, + "sourceSize": { "w": 114, "h": 89 } + }, + { + "filename": "0018.png", + "frame": { "x": 0, "y": 161, "w": 104, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 11, "w": 104, "h": 67 }, + "sourceSize": { "w": 114, "h": 89 } + }, + { + "filename": "0019.png", + "frame": { "x": 392, "y": 302, "w": 101, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 10, "w": 101, "h": 67 }, + "sourceSize": { "w": 114, "h": 89 } + }, + { + "filename": "0020.png", + "frame": { "x": 295, "y": 151, "w": 92, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 6, "w": 92, "h": 76 }, + "sourceSize": { "w": 114, "h": 89 } + }, + { + "filename": "0021.png", + "frame": { "x": 388, "y": 225, "w": 91, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 6, "w": 91, "h": 76 }, + "sourceSize": { "w": 114, "h": 89 } + }, + { + "filename": "0022.png", + "frame": { "x": 388, "y": 152, "w": 97, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 10, "w": 97, "h": 72 }, + "sourceSize": { "w": 114, "h": 89 } + }, + { + "filename": "0023.png", + "frame": { "x": 105, "y": 161, "w": 102, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 15, "w": 102, "h": 68 }, + "sourceSize": { "w": 114, "h": 89 } + }, + { + "filename": "0024.png", + "frame": { "x": 95, "y": 90, "w": 101, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 14, "w": 101, "h": 70 }, + "sourceSize": { "w": 114, "h": 89 } + }, + { + "filename": "0025.png", + "frame": { "x": 108, "y": 0, "w": 94, "h": 89 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 20, "y": 0, "w": 94, "h": 89 }, + "sourceSize": { "w": 114, "h": 89 } + }, + { + "filename": "0026.png", + "frame": { "x": 0, "y": 0, "w": 107, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 5, "w": 107, "h": 80 }, + "sourceSize": { "w": 114, "h": 89 } + }, + { + "filename": "0027.png", + "frame": { "x": 303, "y": 0, "w": 112, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 13, "w": 112, "h": 69 }, + "sourceSize": { "w": 114, "h": 89 } + }, + { + "filename": "0028.png", + "frame": { "x": 399, "y": 81, "w": 106, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 12, "w": 106, "h": 70 }, + "sourceSize": { "w": 114, "h": 89 } + }, + { + "filename": "0029.png", + "frame": { "x": 203, "y": 0, "w": 99, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 3, "w": 99, "h": 80 }, + "sourceSize": { "w": 114, "h": 89 } + }, + { + "filename": "0030.png", + "frame": { "x": 303, "y": 70, "w": 95, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 95, "h": 80 }, + "sourceSize": { "w": 114, "h": 89 } + }, + { + "filename": "0031.png", + "frame": { "x": 388, "y": 225, "w": 91, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 6, "w": 91, "h": 76 }, + "sourceSize": { "w": 114, "h": 89 } + }, + { + "filename": "0032.png", + "frame": { "x": 0, "y": 81, "w": 94, "h": 79 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 94, "h": 79 }, + "sourceSize": { "w": 114, "h": 89 } + }, + { + "filename": "0033.png", + "frame": { "x": 416, "y": 0, "w": 96, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 96, "h": 80 }, + "sourceSize": { "w": 114, "h": 89 } + }, + { + "filename": "0034.png", + "frame": { "x": 92, "y": 230, "w": 94, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 6, "w": 94, "h": 73 }, + "sourceSize": { "w": 114, "h": 89 } + }, + { + "filename": "0035.png", + "frame": { "x": 388, "y": 225, "w": 91, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 6, "w": 91, "h": 76 }, + "sourceSize": { "w": 114, "h": 89 } + }, + { + "filename": "0036.png", + "frame": { "x": 92, "y": 304, "w": 92, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 9, "w": 92, "h": 73 }, + "sourceSize": { "w": 114, "h": 89 } + }, + { + "filename": "0037.png", + "frame": { "x": 185, "y": 305, "w": 99, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 15, "w": 99, "h": 67 }, + "sourceSize": { "w": 114, "h": 89 } + }, + { + "filename": "0038.png", + "frame": { "x": 0, "y": 161, "w": 104, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 11, "w": 104, "h": 67 }, + "sourceSize": { "w": 114, "h": 89 } + }, + { + "filename": "0039.png", + "frame": { "x": 392, "y": 302, "w": 101, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 10, "w": 101, "h": 67 }, + "sourceSize": { "w": 114, "h": 89 } + }, + { + "filename": "0040.png", + "frame": { "x": 295, "y": 151, "w": 92, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 6, "w": 92, "h": 76 }, + "sourceSize": { "w": 114, "h": 89 } + }, + { + "filename": "0041.png", + "frame": { "x": 388, "y": 225, "w": 91, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 6, "w": 91, "h": 76 }, + "sourceSize": { "w": 114, "h": 89 } + }, + { + "filename": "0042.png", + "frame": { "x": 388, "y": 152, "w": 97, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 10, "w": 97, "h": 72 }, + "sourceSize": { "w": 114, "h": 89 } + }, + { + "filename": "0043.png", + "frame": { "x": 105, "y": 161, "w": 102, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 15, "w": 102, "h": 68 }, + "sourceSize": { "w": 114, "h": 89 } + }, + { + "filename": "0044.png", + "frame": { "x": 95, "y": 90, "w": 101, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 14, "w": 101, "h": 70 }, + "sourceSize": { "w": 114, "h": 89 } + }, + { + "filename": "0045.png", + "frame": { "x": 108, "y": 0, "w": 94, "h": 89 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 20, "y": 0, "w": 94, "h": 89 }, + "sourceSize": { "w": 114, "h": 89 } + }, + { + "filename": "0046.png", + "frame": { "x": 0, "y": 0, "w": 107, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 5, "w": 107, "h": 80 }, + "sourceSize": { "w": 114, "h": 89 } + }, + { + "filename": "0047.png", + "frame": { "x": 303, "y": 0, "w": 112, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 13, "w": 112, "h": 69 }, + "sourceSize": { "w": 114, "h": 89 } + }, + { + "filename": "0048.png", + "frame": { "x": 399, "y": 81, "w": 106, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 12, "w": 106, "h": 70 }, + "sourceSize": { "w": 114, "h": 89 } + }, + { + "filename": "0049.png", + "frame": { "x": 203, "y": 0, "w": 99, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 3, "w": 99, "h": 80 }, + "sourceSize": { "w": 114, "h": 89 } + }, + { + "filename": "0050.png", + "frame": { "x": 303, "y": 70, "w": 95, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 95, "h": 80 }, + "sourceSize": { "w": 114, "h": 89 } + }, + { + "filename": "0051.png", + "frame": { "x": 388, "y": 225, "w": 91, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 6, "w": 91, "h": 76 }, + "sourceSize": { "w": 114, "h": 89 } + }, + { + "filename": "0052.png", + "frame": { "x": 208, "y": 228, "w": 91, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 6, "w": 91, "h": 76 }, + "sourceSize": { "w": 114, "h": 89 } + }, + { + "filename": "0053.png", + "frame": { "x": 203, "y": 81, "w": 91, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 5, "w": 91, "h": 77 }, + "sourceSize": { "w": 114, "h": 89 } + }, + { + "filename": "0054.png", + "frame": { "x": 0, "y": 229, "w": 91, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 6, "w": 91, "h": 76 }, + "sourceSize": { "w": 114, "h": 89 } + }, + { + "filename": "0055.png", + "frame": { "x": 300, "y": 302, "w": 91, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 7, "w": 91, "h": 75 }, + "sourceSize": { "w": 114, "h": 89 } + }, + { + "filename": "0056.png", + "frame": { "x": 300, "y": 228, "w": 83, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 11, "w": 83, "h": 71 }, + "sourceSize": { "w": 114, "h": 89 } + }, + { + "filename": "0057.png", + "frame": { "x": 208, "y": 159, "w": 76, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 16, "y": 17, "w": 76, "h": 65 }, + "sourceSize": { "w": 114, "h": 89 } + }, + { + "filename": "0058.png", + "frame": { "x": 392, "y": 370, "w": 70, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 20, "y": 16, "w": 70, "h": 66 }, + "sourceSize": { "w": 114, "h": 89 } + }, + { + "filename": "0059.png", + "frame": { "x": 494, "y": 305, "w": 64, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 15, "w": 64, "h": 67 }, + "sourceSize": { "w": 114, "h": 89 } + }, + { + "filename": "0060.png", + "frame": { "x": 463, "y": 373, "w": 58, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 29, "y": 20, "w": 58, "h": 62 }, + "sourceSize": { "w": 114, "h": 89 } + }, + { + "filename": "0061.png", + "frame": { "x": 513, "y": 0, "w": 36, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 37, "y": 22, "w": 36, "h": 59 }, + "sourceSize": { "w": 114, "h": 89 } + }, + { + "filename": "0062.png", + "frame": { "x": 513, "y": 0, "w": 36, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 37, "y": 18, "w": 36, "h": 59 }, + "sourceSize": { "w": 114, "h": 89 } + }, + { + "filename": "0063.png", + "frame": { "x": 513, "y": 0, "w": 36, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 37, "y": 19, "w": 36, "h": 59 }, + "sourceSize": { "w": 114, "h": 89 } + }, + { + "filename": "0064.png", + "frame": { "x": 513, "y": 0, "w": 36, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 37, "y": 22, "w": 36, "h": 59 }, + "sourceSize": { "w": 114, "h": 89 } + }, + { + "filename": "0065.png", + "frame": { "x": 242, "y": 373, "w": 36, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 37, "y": 16, "w": 36, "h": 59 }, + "sourceSize": { "w": 114, "h": 89 } + }, + { + "filename": "0066.png", + "frame": { "x": 242, "y": 373, "w": 36, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 37, "y": 17, "w": 36, "h": 59 }, + "sourceSize": { "w": 114, "h": 89 } + }, + { + "filename": "0067.png", + "frame": { "x": 513, "y": 0, "w": 36, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 37, "y": 22, "w": 36, "h": 59 }, + "sourceSize": { "w": 114, "h": 89 } + }, + { + "filename": "0068.png", + "frame": { "x": 513, "y": 0, "w": 36, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 37, "y": 18, "w": 36, "h": 59 }, + "sourceSize": { "w": 114, "h": 89 } + }, + { + "filename": "0069.png", + "frame": { "x": 513, "y": 0, "w": 36, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 37, "y": 19, "w": 36, "h": 59 }, + "sourceSize": { "w": 114, "h": 89 } + }, + { + "filename": "0070.png", + "frame": { "x": 513, "y": 0, "w": 36, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 37, "y": 22, "w": 36, "h": 59 }, + "sourceSize": { "w": 114, "h": 89 } + }, + { + "filename": "0071.png", + "frame": { "x": 506, "y": 81, "w": 50, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 18, "w": 50, "h": 64 }, + "sourceSize": { "w": 114, "h": 89 } + }, + { + "filename": "0072.png", + "frame": { "x": 185, "y": 373, "w": 56, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 25, "y": 14, "w": 56, "h": 68 }, + "sourceSize": { "w": 114, "h": 89 } + }, + { + "filename": "0073.png", + "frame": { "x": 494, "y": 230, "w": 64, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 21, "y": 10, "w": 64, "h": 74 }, + "sourceSize": { "w": 114, "h": 89 } + }, + { + "filename": "0074.png", + "frame": { "x": 486, "y": 152, "w": 73, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 16, "y": 7, "w": 73, "h": 77 }, + "sourceSize": { "w": 114, "h": 89 } + }, + { + "filename": "0075.png", + "frame": { "x": 0, "y": 306, "w": 83, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 6, "w": 83, "h": 77 }, + "sourceSize": { "w": 114, "h": 89 } + }, + { + "filename": "0076.png", + "frame": { "x": 388, "y": 225, "w": 91, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 6, "w": 91, "h": 76 }, + "sourceSize": { "w": 114, "h": 89 } + }, + { + "filename": "0077.png", + "frame": { "x": 0, "y": 81, "w": 94, "h": 79 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 94, "h": 79 }, + "sourceSize": { "w": 114, "h": 89 } + }, + { + "filename": "0078.png", + "frame": { "x": 416, "y": 0, "w": 96, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 96, "h": 80 }, + "sourceSize": { "w": 114, "h": 89 } + }, + { + "filename": "0079.png", + "frame": { "x": 92, "y": 230, "w": 94, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 6, "w": 94, "h": 73 }, + "sourceSize": { "w": 114, "h": 89 } + }, + { + "filename": "0080.png", + "frame": { "x": 388, "y": 225, "w": 91, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 6, "w": 91, "h": 76 }, + "sourceSize": { "w": 114, "h": 89 } + }, + { + "filename": "0081.png", + "frame": { "x": 92, "y": 304, "w": 92, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 9, "w": 92, "h": 73 }, + "sourceSize": { "w": 114, "h": 89 } + }, + { + "filename": "0082.png", + "frame": { "x": 185, "y": 305, "w": 99, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 15, "w": 99, "h": 67 }, + "sourceSize": { "w": 114, "h": 89 } + }, + { + "filename": "0083.png", + "frame": { "x": 0, "y": 161, "w": 104, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 11, "w": 104, "h": 67 }, + "sourceSize": { "w": 114, "h": 89 } + }, + { + "filename": "0084.png", + "frame": { "x": 392, "y": 302, "w": 101, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 10, "w": 101, "h": 67 }, + "sourceSize": { "w": 114, "h": 89 } + }, + { + "filename": "0085.png", + "frame": { "x": 295, "y": 151, "w": 92, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 6, "w": 92, "h": 76 }, + "sourceSize": { "w": 114, "h": 89 } + }, + { + "filename": "0086.png", + "frame": { "x": 388, "y": 225, "w": 91, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 6, "w": 91, "h": 76 }, + "sourceSize": { "w": 114, "h": 89 } + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.7-x64", + "image": "563.png", + "format": "I8", + "size": { "w": 559, "h": 441 }, + "scale": "1" + } } diff --git a/public/images/pokemon/shiny/563.png b/public/images/pokemon/shiny/563.png index 1958a3c1352..91624b28dc5 100644 Binary files a/public/images/pokemon/shiny/563.png and b/public/images/pokemon/shiny/563.png differ diff --git a/public/images/pokemon/shiny/636.json b/public/images/pokemon/shiny/636.json index e7878da24d1..9626c6d8263 100644 --- a/public/images/pokemon/shiny/636.json +++ b/public/images/pokemon/shiny/636.json @@ -4,744 +4,51 @@ "image": "636.png", "format": "RGBA8888", "size": { - "w": 341, - "h": 341 + "w": 301, + "h": 301 }, "scale": 1, "frames": [ - { - "filename": "0095.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 45, - "h": 50 - }, - "frame": { - "x": 0, - "y": 0, - "w": 45, - "h": 50 - } - }, - { - "filename": "0096.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 44, - "h": 50 - }, - "frame": { - "x": 0, - "y": 50, - "w": 44, - "h": 50 - } - }, - { - "filename": "0097.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 44, - "h": 50 - }, - "frame": { - "x": 0, - "y": 100, - "w": 44, - "h": 50 - } - }, - { - "filename": "0098.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 44, - "h": 50 - }, - "frame": { - "x": 0, - "y": 150, - "w": 44, - "h": 50 - } - }, - { - "filename": "0099.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 44, - "h": 50 - }, - "frame": { - "x": 0, - "y": 200, - "w": 44, - "h": 50 - } - }, - { - "filename": "0100.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 44, - "h": 50 - }, - "frame": { - "x": 0, - "y": 250, - "w": 44, - "h": 50 - } - }, - { - "filename": "0101.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 44, - "h": 50 - }, - "frame": { - "x": 44, - "y": 50, - "w": 44, - "h": 50 - } - }, - { - "filename": "0102.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 44, - "h": 50 - }, - "frame": { - "x": 44, - "y": 50, - "w": 44, - "h": 50 - } - }, - { - "filename": "0103.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 44, - "h": 50 - }, - "frame": { - "x": 45, - "y": 0, - "w": 44, - "h": 50 - } - }, - { - "filename": "0104.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 44, - "h": 50 - }, - "frame": { - "x": 44, - "y": 100, - "w": 44, - "h": 50 - } - }, - { - "filename": "0105.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 44, - "h": 50 - }, - "frame": { - "x": 44, - "y": 150, - "w": 44, - "h": 50 - } - }, - { - "filename": "0106.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 44, - "h": 50 - }, - "frame": { - "x": 44, - "y": 200, - "w": 44, - "h": 50 - } - }, - { - "filename": "0107.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 44, - "h": 50 - }, - "frame": { - "x": 44, - "y": 250, - "w": 44, - "h": 50 - } - }, { "filename": "0005.png", "rotated": false, "trimmed": true, "sourceSize": { - "w": 45, - "h": 50 + "w": 46, + "h": 49 }, "spriteSourceSize": { "x": 0, "y": 1, - "w": 45, - "h": 49 + "w": 46, + "h": 48 }, "frame": { - "x": 89, - "y": 0, - "w": 45, - "h": 49 + "x": 1, + "y": 1, + "w": 46, + "h": 48 } }, { - "filename": "0020.png", + "filename": "0016.png", "rotated": false, "trimmed": true, "sourceSize": { - "w": 45, - "h": 50 + "w": 46, + "h": 49 }, "spriteSourceSize": { "x": 0, "y": 1, - "w": 45, - "h": 49 + "w": 46, + "h": 48 }, "frame": { - "x": 89, - "y": 0, - "w": 45, - "h": 49 - } - }, - { - "filename": "0049.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, + "x": 1, "y": 1, - "w": 45, - "h": 49 - }, - "frame": { - "x": 89, - "y": 0, - "w": 45, - "h": 49 - } - }, - { - "filename": "0064.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 45, - "h": 49 - }, - "frame": { - "x": 89, - "y": 0, - "w": 45, - "h": 49 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 45, - "h": 49 - }, - "frame": { - "x": 134, - "y": 0, - "w": 45, - "h": 49 - } - }, - { - "filename": "0035.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 45, - "h": 49 - }, - "frame": { - "x": 134, - "y": 0, - "w": 45, - "h": 49 - } - }, - { - "filename": "0050.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 45, - "h": 49 - }, - "frame": { - "x": 134, - "y": 0, - "w": 45, - "h": 49 - } - }, - { - "filename": "0079.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 45, - "h": 49 - }, - "frame": { - "x": 134, - "y": 0, - "w": 45, - "h": 49 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 45, - "h": 49 - }, - "frame": { - "x": 179, - "y": 0, - "w": 45, - "h": 49 - } - }, - { - "filename": "0022.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 45, - "h": 49 - }, - "frame": { - "x": 179, - "y": 0, - "w": 45, - "h": 49 - } - }, - { - "filename": "0051.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 45, - "h": 49 - }, - "frame": { - "x": 179, - "y": 0, - "w": 45, - "h": 49 - } - }, - { - "filename": "0066.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 45, - "h": 49 - }, - "frame": { - "x": 179, - "y": 0, - "w": 45, - "h": 49 - } - }, - { - "filename": "0021.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 45, - "h": 49 - }, - "frame": { - "x": 224, - "y": 0, - "w": 45, - "h": 49 - } - }, - { - "filename": "0036.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 45, - "h": 49 - }, - "frame": { - "x": 224, - "y": 0, - "w": 45, - "h": 49 - } - }, - { - "filename": "0065.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 45, - "h": 49 - }, - "frame": { - "x": 224, - "y": 0, - "w": 45, - "h": 49 - } - }, - { - "filename": "0080.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 45, - "h": 49 - }, - "frame": { - "x": 224, - "y": 0, - "w": 45, - "h": 49 - } - }, - { - "filename": "0093.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 45, - "h": 49 - }, - "frame": { - "x": 269, - "y": 0, - "w": 45, - "h": 49 - } - }, - { - "filename": "0094.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 45, - "h": 49 - }, - "frame": { - "x": 89, - "y": 49, - "w": 45, - "h": 49 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 45, - "h": 47 - }, - "frame": { - "x": 134, - "y": 49, - "w": 45, - "h": 47 - } - }, - { - "filename": "0041.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 45, - "h": 47 - }, - "frame": { - "x": 134, - "y": 49, - "w": 45, - "h": 47 - } - }, - { - "filename": "0056.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 45, - "h": 47 - }, - "frame": { - "x": 134, - "y": 49, - "w": 45, - "h": 47 - } - }, - { - "filename": "0085.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 45, - "h": 47 - }, - "frame": { - "x": 134, - "y": 49, - "w": 45, - "h": 47 + "w": 46, + "h": 48 } }, { @@ -749,545 +56,20 @@ "rotated": false, "trimmed": true, "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 45, - "h": 47 - }, - "frame": { - "x": 179, - "y": 49, - "w": 45, - "h": 47 - } - }, - { - "filename": "0042.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 45, - "h": 47 - }, - "frame": { - "x": 179, - "y": 49, - "w": 45, - "h": 47 - } - }, - { - "filename": "0071.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 45, - "h": 47 - }, - "frame": { - "x": 179, - "y": 49, - "w": 45, - "h": 47 - } - }, - { - "filename": "0086.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 45, - "h": 47 - }, - "frame": { - "x": 179, - "y": 49, - "w": 45, - "h": 47 - } - }, - { - "filename": "0119.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 45, - "h": 47 - }, - "frame": { - "x": 224, - "y": 49, - "w": 45, - "h": 47 - } - }, - { - "filename": "0108.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 44, - "h": 50 - }, - "frame": { - "x": 269, - "y": 49, - "w": 44, - "h": 50 - } - }, - { - "filename": "0109.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 44, - "h": 50 - }, - "frame": { - "x": 134, - "y": 96, - "w": 44, - "h": 50 - } - }, - { - "filename": "0110.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 44, - "h": 50 - }, - "frame": { - "x": 88, - "y": 98, - "w": 44, - "h": 50 - } - }, - { - "filename": "0111.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 44, - "h": 50 - }, - "frame": { - "x": 178, - "y": 96, - "w": 44, - "h": 50 - } - }, - { - "filename": "0112.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 44, - "h": 50 - }, - "frame": { - "x": 222, - "y": 96, - "w": 44, - "h": 50 - } - }, - { - "filename": "0113.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 44, - "h": 50 - }, - "frame": { - "x": 266, - "y": 99, - "w": 44, - "h": 50 - } - }, - { - "filename": "0114.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 44, - "h": 50 - }, - "frame": { - "x": 132, - "y": 146, - "w": 44, - "h": 50 - } - }, - { - "filename": "0115.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 44, - "h": 50 - }, - "frame": { - "x": 88, - "y": 148, - "w": 44, - "h": 50 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 + "w": 46, + "h": 49 }, "spriteSourceSize": { "x": 0, "y": 1, - "w": 44, - "h": 49 + "w": 46, + "h": 48 }, "frame": { - "x": 176, - "y": 146, - "w": 44, - "h": 49 - } - }, - { - "filename": "0037.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, + "x": 1, "y": 1, - "w": 44, - "h": 49 - }, - "frame": { - "x": 176, - "y": 146, - "w": 44, - "h": 49 - } - }, - { - "filename": "0052.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 44, - "h": 49 - }, - "frame": { - "x": 176, - "y": 146, - "w": 44, - "h": 49 - } - }, - { - "filename": "0081.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 44, - "h": 49 - }, - "frame": { - "x": 176, - "y": 146, - "w": 44, - "h": 49 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 44, - "h": 49 - }, - "frame": { - "x": 220, - "y": 146, - "w": 44, - "h": 49 - } - }, - { - "filename": "0024.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 44, - "h": 49 - }, - "frame": { - "x": 220, - "y": 146, - "w": 44, - "h": 49 - } - }, - { - "filename": "0053.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 44, - "h": 49 - }, - "frame": { - "x": 220, - "y": 146, - "w": 44, - "h": 49 - } - }, - { - "filename": "0068.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 44, - "h": 49 - }, - "frame": { - "x": 220, - "y": 146, - "w": 44, - "h": 49 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 44, - "h": 49 - }, - "frame": { - "x": 264, - "y": 149, - "w": 44, - "h": 49 - } - }, - { - "filename": "0039.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 44, - "h": 49 - }, - "frame": { - "x": 264, - "y": 149, - "w": 44, - "h": 49 - } - }, - { - "filename": "0054.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 44, - "h": 49 - }, - "frame": { - "x": 264, - "y": 149, - "w": 44, - "h": 49 - } - }, - { - "filename": "0083.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 44, - "h": 49 - }, - "frame": { - "x": 264, - "y": 149, - "w": 44, - "h": 49 - } - }, - { - "filename": "0023.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 44, - "h": 49 - }, - "frame": { - "x": 176, - "y": 195, - "w": 44, - "h": 49 + "w": 46, + "h": 48 } }, { @@ -1295,82 +77,103 @@ "rotated": false, "trimmed": true, "sourceSize": { - "w": 45, - "h": 50 + "w": 46, + "h": 49 }, "spriteSourceSize": { "x": 0, "y": 1, - "w": 44, - "h": 49 + "w": 46, + "h": 48 }, "frame": { - "x": 176, - "y": 195, - "w": 44, - "h": 49 + "x": 1, + "y": 1, + "w": 46, + "h": 48 } }, { - "filename": "0067.png", + "filename": "0049.png", "rotated": false, "trimmed": true, "sourceSize": { - "w": 45, - "h": 50 + "w": 46, + "h": 49 }, "spriteSourceSize": { "x": 0, "y": 1, - "w": 44, - "h": 49 + "w": 46, + "h": 48 }, "frame": { - "x": 176, - "y": 195, - "w": 44, - "h": 49 + "x": 1, + "y": 1, + "w": 46, + "h": 48 } }, { - "filename": "0082.png", + "filename": "0060.png", "rotated": false, "trimmed": true, "sourceSize": { - "w": 45, - "h": 50 + "w": 46, + "h": 49 }, "spriteSourceSize": { "x": 0, "y": 1, - "w": 44, - "h": 49 + "w": 46, + "h": 48 }, "frame": { - "x": 176, - "y": 195, - "w": 44, - "h": 49 + "x": 1, + "y": 1, + "w": 46, + "h": 48 } }, { - "filename": "0116.png", + "filename": "0071.png", "rotated": false, "trimmed": true, "sourceSize": { - "w": 45, - "h": 50 + "w": 46, + "h": 49 }, "spriteSourceSize": { "x": 0, "y": 1, - "w": 44, + "w": 46, + "h": 48 + }, + "frame": { + "x": 1, + "y": 51, + "w": 46, + "h": 48 + } + }, + { + "filename": "0072.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 46, + "h": 49 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 45, "h": 49 }, "frame": { - "x": 132, - "y": 196, - "w": 44, + "x": 49, + "y": 1, + "w": 45, "h": 49 } }, @@ -1379,103 +182,40 @@ "rotated": false, "trimmed": true, "sourceSize": { - "w": 45, - "h": 50 + "w": 46, + "h": 49 }, "spriteSourceSize": { "x": 1, - "y": 2, - "w": 44, + "y": 1, + "w": 45, "h": 48 }, "frame": { - "x": 88, - "y": 198, - "w": 44, + "x": 1, + "y": 101, + "w": 45, "h": 48 } }, { - "filename": "0033.png", + "filename": "0015.png", "rotated": false, "trimmed": true, "sourceSize": { - "w": 45, - "h": 50 + "w": 46, + "h": 49 }, "spriteSourceSize": { "x": 1, - "y": 2, - "w": 44, + "y": 1, + "w": 45, "h": 48 }, "frame": { - "x": 88, - "y": 198, - "w": 44, - "h": 48 - } - }, - { - "filename": "0048.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { "x": 1, - "y": 2, - "w": 44, - "h": 48 - }, - "frame": { - "x": 88, - "y": 198, - "w": 44, - "h": 48 - } - }, - { - "filename": "0077.png", - "rotated": false, - "trimmed": true, - "sourceSize": { + "y": 101, "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 44, - "h": 48 - }, - "frame": { - "x": 88, - "y": 198, - "w": 44, - "h": 48 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 44, - "h": 48 - }, - "frame": { - "x": 220, - "y": 195, - "w": 44, "h": 48 } }, @@ -1484,40 +224,208 @@ "rotated": false, "trimmed": true, "sourceSize": { - "w": 45, - "h": 50 + "w": 46, + "h": 49 }, "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 44, + "x": 1, + "y": 1, + "w": 45, "h": 48 }, "frame": { - "x": 220, - "y": 195, - "w": 44, + "x": 1, + "y": 101, + "w": 45, "h": 48 } }, { - "filename": "0055.png", + "filename": "0037.png", "rotated": false, "trimmed": true, "sourceSize": { - "w": 45, - "h": 50 + "w": 46, + "h": 49 }, "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 44, + "x": 1, + "y": 1, + "w": 45, "h": 48 }, "frame": { - "x": 220, - "y": 195, - "w": 44, + "x": 1, + "y": 101, + "w": 45, + "h": 48 + } + }, + { + "filename": "0048.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 46, + "h": 49 + }, + "spriteSourceSize": { + "x": 1, + "y": 1, + "w": 45, + "h": 48 + }, + "frame": { + "x": 1, + "y": 101, + "w": 45, + "h": 48 + } + }, + { + "filename": "0059.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 46, + "h": 49 + }, + "spriteSourceSize": { + "x": 1, + "y": 1, + "w": 45, + "h": 48 + }, + "frame": { + "x": 1, + "y": 101, + "w": 45, + "h": 48 + } + }, + { + "filename": "0006.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 46, + "h": 49 + }, + "spriteSourceSize": { + "x": 0, + "y": 1, + "w": 45, + "h": 48 + }, + "frame": { + "x": 96, + "y": 1, + "w": 45, + "h": 48 + } + }, + { + "filename": "0017.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 46, + "h": 49 + }, + "spriteSourceSize": { + "x": 0, + "y": 1, + "w": 45, + "h": 48 + }, + "frame": { + "x": 96, + "y": 1, + "w": 45, + "h": 48 + } + }, + { + "filename": "0028.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 46, + "h": 49 + }, + "spriteSourceSize": { + "x": 0, + "y": 1, + "w": 45, + "h": 48 + }, + "frame": { + "x": 96, + "y": 1, + "w": 45, + "h": 48 + } + }, + { + "filename": "0039.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 46, + "h": 49 + }, + "spriteSourceSize": { + "x": 0, + "y": 1, + "w": 45, + "h": 48 + }, + "frame": { + "x": 96, + "y": 1, + "w": 45, + "h": 48 + } + }, + { + "filename": "0050.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 46, + "h": 49 + }, + "spriteSourceSize": { + "x": 0, + "y": 1, + "w": 45, + "h": 48 + }, + "frame": { + "x": 96, + "y": 1, + "w": 45, + "h": 48 + } + }, + { + "filename": "0061.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 46, + "h": 49 + }, + "spriteSourceSize": { + "x": 0, + "y": 1, + "w": 45, + "h": 48 + }, + "frame": { + "x": 96, + "y": 1, + "w": 45, "h": 48 } }, @@ -1526,123 +434,102 @@ "rotated": false, "trimmed": true, "sourceSize": { + "w": 46, + "h": 49 + }, + "spriteSourceSize": { + "x": 1, + "y": 1, "w": 45, - "h": 50 + "h": 48 + }, + "frame": { + "x": 1, + "y": 151, + "w": 45, + "h": 48 + } + }, + { + "filename": "0073.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 46, + "h": 49 }, "spriteSourceSize": { "x": 0, - "y": 2, + "y": 0, "w": 44, - "h": 48 + "h": 49 }, "frame": { - "x": 220, - "y": 195, - "w": 44, - "h": 48 - } - }, - { - "filename": "0019.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { "x": 1, - "y": 2, + "y": 201, "w": 44, - "h": 48 - }, - "frame": { - "x": 264, - "y": 198, - "w": 44, - "h": 48 + "h": 49 } }, { - "filename": "0034.png", + "filename": "0007.png", "rotated": false, "trimmed": true, "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 44, - "h": 48 - }, - "frame": { - "x": 264, - "y": 198, - "w": 44, - "h": 48 - } - }, - { - "filename": "0063.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 44, - "h": 48 - }, - "frame": { - "x": 264, - "y": 198, - "w": 44, - "h": 48 - } - }, - { - "filename": "0078.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 44, - "h": 48 - }, - "frame": { - "x": 264, - "y": 198, - "w": 44, - "h": 48 - } - }, - { - "filename": "0025.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 + "w": 46, + "h": 49 }, "spriteSourceSize": { "x": 0, - "y": 2, + "y": 1, "w": 44, "h": 48 }, "frame": { - "x": 220, - "y": 243, + "x": 1, + "y": 252, + "w": 44, + "h": 48 + } + }, + { + "filename": "0018.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 46, + "h": 49 + }, + "spriteSourceSize": { + "x": 0, + "y": 1, + "w": 44, + "h": 48 + }, + "frame": { + "x": 1, + "y": 252, + "w": 44, + "h": 48 + } + }, + { + "filename": "0029.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 46, + "h": 49 + }, + "spriteSourceSize": { + "x": 0, + "y": 1, + "w": 44, + "h": 48 + }, + "frame": { + "x": 1, + "y": 252, "w": 44, "h": 48 } @@ -1652,733 +539,82 @@ "rotated": false, "trimmed": true, "sourceSize": { - "w": 45, - "h": 50 + "w": 46, + "h": 49 }, "spriteSourceSize": { "x": 0, - "y": 2, + "y": 1, "w": 44, "h": 48 }, "frame": { - "x": 220, - "y": 243, + "x": 1, + "y": 252, "w": 44, "h": 48 } }, { - "filename": "0069.png", + "filename": "0051.png", "rotated": false, "trimmed": true, "sourceSize": { - "w": 45, - "h": 50 + "w": 46, + "h": 49 }, "spriteSourceSize": { "x": 0, - "y": 2, + "y": 1, "w": 44, "h": 48 }, "frame": { - "x": 220, - "y": 243, + "x": 1, + "y": 252, "w": 44, "h": 48 } }, - { - "filename": "0084.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 44, - "h": 48 - }, - "frame": { - "x": 220, - "y": 243, - "w": 44, - "h": 48 - } - }, - { - "filename": "0092.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 44, - "h": 48 - }, - "frame": { - "x": 176, - "y": 244, - "w": 44, - "h": 48 - } - }, - { - "filename": "0117.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 44, - "h": 48 - }, - "frame": { - "x": 132, - "y": 245, - "w": 44, - "h": 48 - } - }, - { - "filename": "0118.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 44, - "h": 48 - }, - "frame": { - "x": 88, - "y": 246, - "w": 44, - "h": 48 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 44, - "h": 47 - }, - "frame": { - "x": 88, - "y": 294, - "w": 44, - "h": 47 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 44, - "h": 47 - }, - "frame": { - "x": 88, - "y": 294, - "w": 44, - "h": 47 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 44, - "h": 47 - }, - "frame": { - "x": 88, - "y": 294, - "w": 44, - "h": 47 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 44, - "h": 47 - }, - "frame": { - "x": 88, - "y": 294, - "w": 44, - "h": 47 - } - }, - { - "filename": "0029.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 44, - "h": 47 - }, - "frame": { - "x": 88, - "y": 294, - "w": 44, - "h": 47 - } - }, - { - "filename": "0030.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 44, - "h": 47 - }, - "frame": { - "x": 88, - "y": 294, - "w": 44, - "h": 47 - } - }, - { - "filename": "0031.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 44, - "h": 47 - }, - "frame": { - "x": 88, - "y": 294, - "w": 44, - "h": 47 - } - }, - { - "filename": "0044.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 44, - "h": 47 - }, - "frame": { - "x": 88, - "y": 294, - "w": 44, - "h": 47 - } - }, - { - "filename": "0045.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 44, - "h": 47 - }, - "frame": { - "x": 88, - "y": 294, - "w": 44, - "h": 47 - } - }, - { - "filename": "0046.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 44, - "h": 47 - }, - "frame": { - "x": 88, - "y": 294, - "w": 44, - "h": 47 - } - }, - { - "filename": "0059.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 44, - "h": 47 - }, - "frame": { - "x": 88, - "y": 294, - "w": 44, - "h": 47 - } - }, - { - "filename": "0060.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 44, - "h": 47 - }, - "frame": { - "x": 88, - "y": 294, - "w": 44, - "h": 47 - } - }, - { - "filename": "0073.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 44, - "h": 47 - }, - "frame": { - "x": 88, - "y": 294, - "w": 44, - "h": 47 - } - }, - { - "filename": "0074.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 44, - "h": 47 - }, - "frame": { - "x": 88, - "y": 294, - "w": 44, - "h": 47 - } - }, - { - "filename": "0075.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 44, - "h": 47 - }, - "frame": { - "x": 88, - "y": 294, - "w": 44, - "h": 47 - } - }, - { - "filename": "0088.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 44, - "h": 47 - }, - "frame": { - "x": 88, - "y": 294, - "w": 44, - "h": 47 - } - }, - { - "filename": "0089.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 44, - "h": 47 - }, - "frame": { - "x": 88, - "y": 294, - "w": 44, - "h": 47 - } - }, - { - "filename": "0090.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 44, - "h": 47 - }, - "frame": { - "x": 88, - "y": 294, - "w": 44, - "h": 47 - } - }, - { - "filename": "0121.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 44, - "h": 47 - }, - "frame": { - "x": 88, - "y": 294, - "w": 44, - "h": 47 - } - }, - { - "filename": "0122.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 44, - "h": 47 - }, - "frame": { - "x": 88, - "y": 294, - "w": 44, - "h": 47 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 44, - "h": 47 - }, - "frame": { - "x": 132, - "y": 293, - "w": 44, - "h": 47 - } - }, - { - "filename": "0018.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 44, - "h": 47 - }, - "frame": { - "x": 132, - "y": 293, - "w": 44, - "h": 47 - } - }, - { - "filename": "0047.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 44, - "h": 47 - }, - "frame": { - "x": 132, - "y": 293, - "w": 44, - "h": 47 - } - }, { "filename": "0062.png", "rotated": false, "trimmed": true, "sourceSize": { - "w": 45, - "h": 50 + "w": 46, + "h": 49 }, "spriteSourceSize": { - "x": 1, - "y": 3, + "x": 0, + "y": 1, "w": 44, - "h": 47 + "h": 48 }, "frame": { - "x": 132, - "y": 293, + "x": 1, + "y": 252, "w": 44, - "h": 47 + "h": 48 } }, { - "filename": "0013.png", + "filename": "0003.png", "rotated": false, "trimmed": true, "sourceSize": { - "w": 45, - "h": 50 + "w": 46, + "h": 49 }, "spriteSourceSize": { "x": 1, - "y": 3, - "w": 44, - "h": 47 - }, - "frame": { - "x": 176, - "y": 292, - "w": 44, - "h": 47 - } - }, - { - "filename": "0028.png", - "rotated": false, - "trimmed": true, - "sourceSize": { + "y": 2, "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 44, "h": 47 }, "frame": { - "x": 176, - "y": 292, - "w": 44, - "h": 47 - } - }, - { - "filename": "0057.png", - "rotated": false, - "trimmed": true, - "sourceSize": { + "x": 49, + "y": 52, "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 44, - "h": 47 - }, - "frame": { - "x": 176, - "y": 292, - "w": 44, - "h": 47 - } - }, - { - "filename": "0072.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 44, - "h": 47 - }, - "frame": { - "x": 176, - "y": 292, - "w": 44, - "h": 47 - } - }, - { - "filename": "0120.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 50 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 44, - "h": 47 - }, - "frame": { - "x": 176, - "y": 292, - "w": 44, "h": 47 } }, @@ -2387,40 +623,82 @@ "rotated": false, "trimmed": true, "sourceSize": { - "w": 45, - "h": 50 + "w": 46, + "h": 49 }, "spriteSourceSize": { "x": 1, - "y": 3, - "w": 44, + "y": 2, + "w": 45, "h": 47 }, "frame": { - "x": 220, - "y": 291, - "w": 44, + "x": 49, + "y": 52, + "w": 45, "h": 47 } }, { - "filename": "0043.png", + "filename": "0025.png", "rotated": false, "trimmed": true, "sourceSize": { - "w": 45, - "h": 50 + "w": 46, + "h": 49 }, "spriteSourceSize": { "x": 1, - "y": 3, - "w": 44, + "y": 2, + "w": 45, "h": 47 }, "frame": { - "x": 220, - "y": 291, - "w": 44, + "x": 49, + "y": 52, + "w": 45, + "h": 47 + } + }, + { + "filename": "0036.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 46, + "h": 49 + }, + "spriteSourceSize": { + "x": 1, + "y": 2, + "w": 45, + "h": 47 + }, + "frame": { + "x": 49, + "y": 52, + "w": 45, + "h": 47 + } + }, + { + "filename": "0047.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 46, + "h": 49 + }, + "spriteSourceSize": { + "x": 1, + "y": 2, + "w": 45, + "h": 47 + }, + "frame": { + "x": 49, + "y": 52, + "w": 45, "h": 47 } }, @@ -2429,61 +707,82 @@ "rotated": false, "trimmed": true, "sourceSize": { - "w": 45, - "h": 50 + "w": 46, + "h": 49 }, "spriteSourceSize": { "x": 1, - "y": 3, - "w": 44, + "y": 2, + "w": 45, "h": 47 }, "frame": { - "x": 220, - "y": 291, - "w": 44, + "x": 49, + "y": 52, + "w": 45, "h": 47 } }, { - "filename": "0087.png", + "filename": "0084.png", "rotated": false, "trimmed": true, "sourceSize": { - "w": 45, - "h": 50 + "w": 46, + "h": 49 }, "spriteSourceSize": { - "x": 1, - "y": 3, + "x": 0, + "y": 0, "w": 44, + "h": 49 + }, + "frame": { + "x": 48, + "y": 101, + "w": 44, + "h": 49 + } + }, + { + "filename": "0010.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 46, + "h": 49 + }, + "spriteSourceSize": { + "x": 0, + "y": 2, + "w": 45, "h": 47 }, "frame": { - "x": 220, - "y": 291, - "w": 44, + "x": 96, + "y": 51, + "w": 45, "h": 47 } }, { - "filename": "0017.png", + "filename": "0021.png", "rotated": false, "trimmed": true, "sourceSize": { - "w": 45, - "h": 50 + "w": 46, + "h": 49 }, "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 44, + "x": 0, + "y": 2, + "w": 45, "h": 47 }, "frame": { - "x": 264, - "y": 246, - "w": 44, + "x": 96, + "y": 51, + "w": 45, "h": 47 } }, @@ -2492,83 +791,1112 @@ "rotated": false, "trimmed": true, "sourceSize": { - "w": 45, - "h": 50 + "w": 46, + "h": 49 }, "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 44, + "x": 0, + "y": 2, + "w": 45, "h": 47 }, "frame": { - "x": 264, - "y": 246, - "w": 44, + "x": 96, + "y": 51, + "w": 45, "h": 47 } }, { - "filename": "0061.png", + "filename": "0043.png", "rotated": false, "trimmed": true, "sourceSize": { - "w": 45, - "h": 50 + "w": 46, + "h": 49 }, "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 44, + "x": 0, + "y": 2, + "w": 45, "h": 47 }, "frame": { - "x": 264, - "y": 246, - "w": 44, + "x": 96, + "y": 51, + "w": 45, "h": 47 } }, + { + "filename": "0054.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 46, + "h": 49 + }, + "spriteSourceSize": { + "x": 0, + "y": 2, + "w": 45, + "h": 47 + }, + "frame": { + "x": 96, + "y": 51, + "w": 45, + "h": 47 + } + }, + { + "filename": "0065.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 46, + "h": 49 + }, + "spriteSourceSize": { + "x": 0, + "y": 2, + "w": 45, + "h": 47 + }, + "frame": { + "x": 96, + "y": 51, + "w": 45, + "h": 47 + } + }, + { + "filename": "0085.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 46, + "h": 49 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 44, + "h": 49 + }, + "frame": { + "x": 143, + "y": 1, + "w": 44, + "h": 49 + } + }, + { + "filename": "0069.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 46, + "h": 49 + }, + "spriteSourceSize": { + "x": 1, + "y": 2, + "w": 45, + "h": 47 + }, + "frame": { + "x": 189, + "y": 1, + "w": 45, + "h": 47 + } + }, + { + "filename": "0090.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 46, + "h": 49 + }, + "spriteSourceSize": { + "x": 0, + "y": 2, + "w": 45, + "h": 47 + }, + "frame": { + "x": 236, + "y": 1, + "w": 45, + "h": 47 + } + }, + { + "filename": "0001.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 46, + "h": 49 + }, + "spriteSourceSize": { + "x": 2, + "y": 3, + "w": 44, + "h": 46 + }, + "frame": { + "x": 48, + "y": 152, + "w": 44, + "h": 46 + } + }, + { + "filename": "0002.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 46, + "h": 49 + }, + "spriteSourceSize": { + "x": 2, + "y": 3, + "w": 44, + "h": 46 + }, + "frame": { + "x": 48, + "y": 152, + "w": 44, + "h": 46 + } + }, + { + "filename": "0012.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 46, + "h": 49 + }, + "spriteSourceSize": { + "x": 2, + "y": 3, + "w": 44, + "h": 46 + }, + "frame": { + "x": 48, + "y": 152, + "w": 44, + "h": 46 + } + }, + { + "filename": "0013.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 46, + "h": 49 + }, + "spriteSourceSize": { + "x": 2, + "y": 3, + "w": 44, + "h": 46 + }, + "frame": { + "x": 48, + "y": 152, + "w": 44, + "h": 46 + } + }, + { + "filename": "0023.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 46, + "h": 49 + }, + "spriteSourceSize": { + "x": 2, + "y": 3, + "w": 44, + "h": 46 + }, + "frame": { + "x": 48, + "y": 152, + "w": 44, + "h": 46 + } + }, + { + "filename": "0024.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 46, + "h": 49 + }, + "spriteSourceSize": { + "x": 2, + "y": 3, + "w": 44, + "h": 46 + }, + "frame": { + "x": 48, + "y": 152, + "w": 44, + "h": 46 + } + }, + { + "filename": "0034.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 46, + "h": 49 + }, + "spriteSourceSize": { + "x": 2, + "y": 3, + "w": 44, + "h": 46 + }, + "frame": { + "x": 48, + "y": 152, + "w": 44, + "h": 46 + } + }, + { + "filename": "0035.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 46, + "h": 49 + }, + "spriteSourceSize": { + "x": 2, + "y": 3, + "w": 44, + "h": 46 + }, + "frame": { + "x": 48, + "y": 152, + "w": 44, + "h": 46 + } + }, + { + "filename": "0045.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 46, + "h": 49 + }, + "spriteSourceSize": { + "x": 2, + "y": 3, + "w": 44, + "h": 46 + }, + "frame": { + "x": 48, + "y": 152, + "w": 44, + "h": 46 + } + }, + { + "filename": "0046.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 46, + "h": 49 + }, + "spriteSourceSize": { + "x": 2, + "y": 3, + "w": 44, + "h": 46 + }, + "frame": { + "x": 48, + "y": 152, + "w": 44, + "h": 46 + } + }, + { + "filename": "0056.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 46, + "h": 49 + }, + "spriteSourceSize": { + "x": 2, + "y": 3, + "w": 44, + "h": 46 + }, + "frame": { + "x": 48, + "y": 152, + "w": 44, + "h": 46 + } + }, + { + "filename": "0057.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 46, + "h": 49 + }, + "spriteSourceSize": { + "x": 2, + "y": 3, + "w": 44, + "h": 46 + }, + "frame": { + "x": 48, + "y": 152, + "w": 44, + "h": 46 + } + }, + { + "filename": "0067.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 46, + "h": 49 + }, + "spriteSourceSize": { + "x": 2, + "y": 3, + "w": 44, + "h": 46 + }, + "frame": { + "x": 48, + "y": 152, + "w": 44, + "h": 46 + } + }, + { + "filename": "0068.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 46, + "h": 49 + }, + "spriteSourceSize": { + "x": 2, + "y": 3, + "w": 44, + "h": 46 + }, + "frame": { + "x": 48, + "y": 152, + "w": 44, + "h": 46 + } + }, + { + "filename": "0011.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 46, + "h": 49 + }, + "spriteSourceSize": { + "x": 2, + "y": 3, + "w": 44, + "h": 46 + }, + "frame": { + "x": 143, + "y": 52, + "w": 44, + "h": 46 + } + }, + { + "filename": "0022.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 46, + "h": 49 + }, + "spriteSourceSize": { + "x": 2, + "y": 3, + "w": 44, + "h": 46 + }, + "frame": { + "x": 143, + "y": 52, + "w": 44, + "h": 46 + } + }, + { + "filename": "0033.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 46, + "h": 49 + }, + "spriteSourceSize": { + "x": 2, + "y": 3, + "w": 44, + "h": 46 + }, + "frame": { + "x": 143, + "y": 52, + "w": 44, + "h": 46 + } + }, + { + "filename": "0044.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 46, + "h": 49 + }, + "spriteSourceSize": { + "x": 2, + "y": 3, + "w": 44, + "h": 46 + }, + "frame": { + "x": 143, + "y": 52, + "w": 44, + "h": 46 + } + }, + { + "filename": "0055.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 46, + "h": 49 + }, + "spriteSourceSize": { + "x": 2, + "y": 3, + "w": 44, + "h": 46 + }, + "frame": { + "x": 143, + "y": 52, + "w": 44, + "h": 46 + } + }, + { + "filename": "0066.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 46, + "h": 49 + }, + "spriteSourceSize": { + "x": 2, + "y": 3, + "w": 44, + "h": 46 + }, + "frame": { + "x": 143, + "y": 52, + "w": 44, + "h": 46 + } + }, + { + "filename": "0008.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 46, + "h": 49 + }, + "spriteSourceSize": { + "x": 0, + "y": 1, + "w": 43, + "h": 48 + }, + "frame": { + "x": 189, + "y": 50, + "w": 43, + "h": 48 + } + }, + { + "filename": "0019.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 46, + "h": 49 + }, + "spriteSourceSize": { + "x": 0, + "y": 1, + "w": 43, + "h": 48 + }, + "frame": { + "x": 189, + "y": 50, + "w": 43, + "h": 48 + } + }, + { + "filename": "0030.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 46, + "h": 49 + }, + "spriteSourceSize": { + "x": 0, + "y": 1, + "w": 43, + "h": 48 + }, + "frame": { + "x": 189, + "y": 50, + "w": 43, + "h": 48 + } + }, + { + "filename": "0041.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 46, + "h": 49 + }, + "spriteSourceSize": { + "x": 0, + "y": 1, + "w": 43, + "h": 48 + }, + "frame": { + "x": 189, + "y": 50, + "w": 43, + "h": 48 + } + }, + { + "filename": "0052.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 46, + "h": 49 + }, + "spriteSourceSize": { + "x": 0, + "y": 1, + "w": 43, + "h": 48 + }, + "frame": { + "x": 189, + "y": 50, + "w": 43, + "h": 48 + } + }, + { + "filename": "0063.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 46, + "h": 49 + }, + "spriteSourceSize": { + "x": 0, + "y": 1, + "w": 43, + "h": 48 + }, + "frame": { + "x": 189, + "y": 50, + "w": 43, + "h": 48 + } + }, + { + "filename": "0009.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 46, + "h": 49 + }, + "spriteSourceSize": { + "x": 0, + "y": 1, + "w": 43, + "h": 48 + }, + "frame": { + "x": 234, + "y": 50, + "w": 43, + "h": 48 + } + }, + { + "filename": "0020.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 46, + "h": 49 + }, + "spriteSourceSize": { + "x": 0, + "y": 1, + "w": 43, + "h": 48 + }, + "frame": { + "x": 234, + "y": 50, + "w": 43, + "h": 48 + } + }, + { + "filename": "0031.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 46, + "h": 49 + }, + "spriteSourceSize": { + "x": 0, + "y": 1, + "w": 43, + "h": 48 + }, + "frame": { + "x": 234, + "y": 50, + "w": 43, + "h": 48 + } + }, + { + "filename": "0042.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 46, + "h": 49 + }, + "spriteSourceSize": { + "x": 0, + "y": 1, + "w": 43, + "h": 48 + }, + "frame": { + "x": 234, + "y": 50, + "w": 43, + "h": 48 + } + }, + { + "filename": "0053.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 46, + "h": 49 + }, + "spriteSourceSize": { + "x": 0, + "y": 1, + "w": 43, + "h": 48 + }, + "frame": { + "x": 234, + "y": 50, + "w": 43, + "h": 48 + } + }, + { + "filename": "0064.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 46, + "h": 49 + }, + "spriteSourceSize": { + "x": 0, + "y": 1, + "w": 43, + "h": 48 + }, + "frame": { + "x": 234, + "y": 50, + "w": 43, + "h": 48 + } + }, + { + "filename": "0074.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 46, + "h": 49 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 43, + "h": 49 + }, + "frame": { + "x": 94, + "y": 101, + "w": 43, + "h": 49 + } + }, { "filename": "0076.png", "rotated": false, "trimmed": true, "sourceSize": { - "w": 45, - "h": 50 + "w": 46, + "h": 49 }, "spriteSourceSize": { "x": 1, - "y": 3, - "w": 44, - "h": 47 + "y": 0, + "w": 43, + "h": 49 }, "frame": { - "x": 264, - "y": 246, - "w": 44, - "h": 47 + "x": 139, + "y": 100, + "w": 43, + "h": 49 } }, { - "filename": "0091.png", + "filename": "0077.png", "rotated": false, "trimmed": true, "sourceSize": { - "w": 45, - "h": 50 + "w": 46, + "h": 49 }, "spriteSourceSize": { "x": 1, - "y": 3, - "w": 44, - "h": 47 + "y": 0, + "w": 43, + "h": 49 }, "frame": { - "x": 264, - "y": 293, - "w": 44, - "h": 47 + "x": 184, + "y": 100, + "w": 43, + "h": 49 + } + }, + { + "filename": "0078.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 46, + "h": 49 + }, + "spriteSourceSize": { + "x": 1, + "y": 0, + "w": 43, + "h": 49 + }, + "frame": { + "x": 229, + "y": 100, + "w": 43, + "h": 49 + } + }, + { + "filename": "0079.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 46, + "h": 49 + }, + "spriteSourceSize": { + "x": 1, + "y": 0, + "w": 43, + "h": 49 + }, + "frame": { + "x": 94, + "y": 152, + "w": 43, + "h": 49 + } + }, + { + "filename": "0080.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 46, + "h": 49 + }, + "spriteSourceSize": { + "x": 1, + "y": 0, + "w": 43, + "h": 49 + }, + "frame": { + "x": 139, + "y": 151, + "w": 43, + "h": 49 + } + }, + { + "filename": "0081.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 46, + "h": 49 + }, + "spriteSourceSize": { + "x": 1, + "y": 0, + "w": 43, + "h": 49 + }, + "frame": { + "x": 184, + "y": 151, + "w": 43, + "h": 49 + } + }, + { + "filename": "0082.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 46, + "h": 49 + }, + "spriteSourceSize": { + "x": 1, + "y": 0, + "w": 43, + "h": 49 + }, + "frame": { + "x": 229, + "y": 151, + "w": 43, + "h": 49 + } + }, + { + "filename": "0075.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 46, + "h": 49 + }, + "spriteSourceSize": { + "x": 1, + "y": 0, + "w": 42, + "h": 49 + }, + "frame": { + "x": 47, + "y": 201, + "w": 42, + "h": 49 + } + }, + { + "filename": "0088.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 46, + "h": 49 + }, + "spriteSourceSize": { + "x": 0, + "y": 1, + "w": 43, + "h": 48 + }, + "frame": { + "x": 47, + "y": 252, + "w": 43, + "h": 48 + } + }, + { + "filename": "0083.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 46, + "h": 49 + }, + "spriteSourceSize": { + "x": 1, + "y": 0, + "w": 43, + "h": 49 + }, + "frame": { + "x": 139, + "y": 202, + "w": 43, + "h": 49 + } + }, + { + "filename": "0086.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 46, + "h": 49 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 43, + "h": 49 + }, + "frame": { + "x": 184, + "y": 202, + "w": 43, + "h": 49 + } + }, + { + "filename": "0087.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 46, + "h": 49 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 43, + "h": 49 + }, + "frame": { + "x": 229, + "y": 202, + "w": 43, + "h": 49 + } + }, + { + "filename": "0089.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 46, + "h": 49 + }, + "spriteSourceSize": { + "x": 0, + "y": 1, + "w": 43, + "h": 48 + }, + "frame": { + "x": 92, + "y": 203, + "w": 43, + "h": 48 } } ] @@ -2577,6 +1905,6 @@ "meta": { "app": "https://www.codeandweb.com/texturepacker", "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:e9936479afbfa12e3add90e9463f5c72:d4c500373e36054aceb990f7143e5d30:1d471fa25be339df4c4184625fad00b3$" + "smartupdate": "$TexturePacker:SmartUpdate:a44c0ac06d9b3f225bf4ca6ae3326041:93ae31dcf0673c1e0be8d6dfea13f44f:1d471fa25be339df4c4184625fad00b3$" } } diff --git a/public/images/pokemon/shiny/636.png b/public/images/pokemon/shiny/636.png index 5d03713293d..21088248dee 100644 Binary files a/public/images/pokemon/shiny/636.png and b/public/images/pokemon/shiny/636.png differ diff --git a/public/images/pokemon/shiny/802-zenith.png b/public/images/pokemon/shiny/802-zenith.png index b6db4621a0b..28c5a5e68d9 100644 Binary files a/public/images/pokemon/shiny/802-zenith.png and b/public/images/pokemon/shiny/802-zenith.png differ diff --git a/public/images/pokemon/variant/169.json b/public/images/pokemon/variant/169.json index 3824fc5e351..751102ef4a0 100644 --- a/public/images/pokemon/variant/169.json +++ b/public/images/pokemon/variant/169.json @@ -1,19 +1,4 @@ { - "0": { - "7b4a9c": "d684ce", - "63197b": "9c528c", - "a55ace": "ffb5f7", - "101010": "101010", - "b57bce": "ffd6ef", - "08426b": "638400", - "ce0021": "940821", - "ffd600": "ffd600", - "d69400": "d69400", - "216b94": "8ca508", - "ffffff": "ffffff", - "a5a5a5": "a5a5a5", - "6b6b6b": "6b6b6b" - }, "1": { "7b4a9c": "2f2a5f", "63197b": "14093b", diff --git a/public/images/pokemon/variant/169_1.png b/public/images/pokemon/variant/169_1.png deleted file mode 100644 index 1baf868c278..00000000000 Binary files a/public/images/pokemon/variant/169_1.png and /dev/null differ diff --git a/public/images/pokemon/variant/41.json b/public/images/pokemon/variant/41.json index d3af6fbd948..99ab116de02 100644 --- a/public/images/pokemon/variant/41.json +++ b/public/images/pokemon/variant/41.json @@ -1,28 +1,14 @@ { - "0": { - "101010": "101010", - "637bb5": "398422", - "4a427b": "084a00", - "bdceff": "99e870", - "8cb5ef": "5caf3b", - "b5529c": "bd9273", - "73215a": "a5785e", - "d673bd": "efd69c", - "ffffff": "ffffff", - "d6d6d6": "d6d6d6", - "636363": "636363" - }, "1": { "101010": "101010", - "637bb5": "37326f", + "637bb5": "12325c", "4a427b": "14093b", "bdceff": "868ecc", - "8cb5ef": "4e538f", - "b5529c": "cc7b32", - "73215a": "aa4c18", + "8cb5ef": "205182", + "b5529c": "d58e41", + "73215a": "b6591e", "d673bd": "f0ad57", "ffffff": "ffffff", - "d6d6d6": "d6d6d6", "636363": "636363" }, "2": { @@ -35,7 +21,6 @@ "73215a": "670f10", "d673bd": "bc3b1d", "ffffff": "ffffff", - "d6d6d6": "d6d6d6", "636363": "636363" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/41_1.png b/public/images/pokemon/variant/41_1.png deleted file mode 100644 index 003d45e5591..00000000000 Binary files a/public/images/pokemon/variant/41_1.png and /dev/null differ diff --git a/public/images/pokemon/variant/41_2.png b/public/images/pokemon/variant/41_2.png deleted file mode 100644 index 59605d5265a..00000000000 Binary files a/public/images/pokemon/variant/41_2.png and /dev/null differ diff --git a/public/images/pokemon/variant/41_3.png b/public/images/pokemon/variant/41_3.png deleted file mode 100644 index cd8c4542d2c..00000000000 Binary files a/public/images/pokemon/variant/41_3.png and /dev/null differ diff --git a/public/images/pokemon/variant/42.json b/public/images/pokemon/variant/42.json index 74311a59fb2..af784a0fd2c 100644 --- a/public/images/pokemon/variant/42.json +++ b/public/images/pokemon/variant/42.json @@ -1,31 +1,17 @@ { - "0": { - "3a3a7b": "142557", - "5aadef": "6265b4", - "6384ce": "323f81", - "631052": "093263", - "ce6bb5": "61b6da", - "adceff": "99a3ee", - "000000": "000000", - "ad52ad": "348cc1", - "636363": "636363", - "ffffff": "ffffff", - "d6d6d6": "d6d6d6", - "943a7b": "175990" - }, "1": { - "3a3a7b": "084a00", - "5aadef": "6b9c29", - "6384ce": "317300", - "631052": "c52931", - "ce6bb5": "ffada5", - "adceff": "84d64a", + "3a3a7b": "14093b", + "5aadef": "204882", + "6384ce": "12245c", + "631052": "892d03", + "ce6bb5": "f1a139", + "adceff": "3c74b1", "000000": "000000", - "ad52ad": "e6737b", + "ad52ad": "d5711b", "636363": "636363", "ffffff": "ffffff", "d6d6d6": "d6d6d6", - "943a7b": "d6525a" + "943a7b": "af4e0c" }, "2": { "3a3a7b": "3d2349", diff --git a/public/images/pokemon/variant/42_2.png b/public/images/pokemon/variant/42_2.png deleted file mode 100644 index 629e3a926f4..00000000000 Binary files a/public/images/pokemon/variant/42_2.png and /dev/null differ diff --git a/public/images/pokemon/variant/42_3.png b/public/images/pokemon/variant/42_3.png deleted file mode 100644 index 6fcfcbf1859..00000000000 Binary files a/public/images/pokemon/variant/42_3.png and /dev/null differ diff --git a/public/images/pokemon/variant/563.json b/public/images/pokemon/variant/563.json new file mode 100644 index 00000000000..0657f362348 --- /dev/null +++ b/public/images/pokemon/variant/563.json @@ -0,0 +1,30 @@ +{ + "1": { + "101010": "101010", + "216b7b": "18265c", + "294a4a": "242b71", + "3194ad": "32459b", + "393942": "a40e38", + "6b5a21": "684327", + "b58431": "8c6742", + "ffbd31": "d29887", + "ffffff": "e4d8ff", + "9c2142": "63f3ca", + "ff3121": "a0f7ff", + "393941": "521f2d" + }, + "2": { + "101010": "101010", + "216b7b": "923c1c", + "294a4a": "591105", + "3194ad": "e03241", + "393942": "3ce483", + "6b5a21": "74350f", + "b58431": "9c5e19", + "ffbd31": "d9e878", + "ffffff": "eaffa6", + "9c2142": "b1f1d2", + "ff3121": "ecffeb", + "393941": "2a3430" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/563_2.json b/public/images/pokemon/variant/563_2.json deleted file mode 100644 index 2b619fc1086..00000000000 --- a/public/images/pokemon/variant/563_2.json +++ /dev/null @@ -1,3485 +0,0 @@ -{ - "textures": [ - { - "image": "563_2.png", - "format": "RGBA8888", - "size": { - "w": 500, - "h": 500 - }, - "scale": 1, - "frames": [ - { - "filename": "0026.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 116, - "h": 81 - }, - "frame": { - "x": 0, - "y": 0, - "w": 116, - "h": 81 - } - }, - { - "filename": "0027.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 116, - "h": 81 - }, - "frame": { - "x": 0, - "y": 0, - "w": 116, - "h": 81 - } - }, - { - "filename": "0061.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 116, - "h": 81 - }, - "frame": { - "x": 0, - "y": 0, - "w": 116, - "h": 81 - } - }, - { - "filename": "0062.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 116, - "h": 81 - }, - "frame": { - "x": 0, - "y": 0, - "w": 116, - "h": 81 - } - }, - { - "filename": "0156.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 116, - "h": 81 - }, - "frame": { - "x": 0, - "y": 0, - "w": 116, - "h": 81 - } - }, - { - "filename": "0157.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 116, - "h": 81 - }, - "frame": { - "x": 0, - "y": 0, - "w": 116, - "h": 81 - } - }, - { - "filename": "0025.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 19, - "y": 0, - "w": 103, - "h": 88 - }, - "frame": { - "x": 0, - "y": 81, - "w": 103, - "h": 88 - } - }, - { - "filename": "0060.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 19, - "y": 0, - "w": 103, - "h": 88 - }, - "frame": { - "x": 0, - "y": 81, - "w": 103, - "h": 88 - } - }, - { - "filename": "0155.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 19, - "y": 0, - "w": 103, - "h": 88 - }, - "frame": { - "x": 0, - "y": 81, - "w": 103, - "h": 88 - } - }, - { - "filename": "0028.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 1, - "y": 13, - "w": 116, - "h": 69 - }, - "frame": { - "x": 116, - "y": 0, - "w": 116, - "h": 69 - } - }, - { - "filename": "0029.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 1, - "y": 13, - "w": 116, - "h": 69 - }, - "frame": { - "x": 116, - "y": 0, - "w": 116, - "h": 69 - } - }, - { - "filename": "0063.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 1, - "y": 13, - "w": 116, - "h": 69 - }, - "frame": { - "x": 116, - "y": 0, - "w": 116, - "h": 69 - } - }, - { - "filename": "0064.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 1, - "y": 13, - "w": 116, - "h": 69 - }, - "frame": { - "x": 116, - "y": 0, - "w": 116, - "h": 69 - } - }, - { - "filename": "0158.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 1, - "y": 13, - "w": 116, - "h": 69 - }, - "frame": { - "x": 116, - "y": 0, - "w": 116, - "h": 69 - } - }, - { - "filename": "0159.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 1, - "y": 13, - "w": 116, - "h": 69 - }, - "frame": { - "x": 116, - "y": 0, - "w": 116, - "h": 69 - } - }, - { - "filename": "0031.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 101, - "h": 81 - }, - "frame": { - "x": 0, - "y": 169, - "w": 101, - "h": 81 - } - }, - { - "filename": "0032.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 101, - "h": 81 - }, - "frame": { - "x": 0, - "y": 169, - "w": 101, - "h": 81 - } - }, - { - "filename": "0066.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 101, - "h": 81 - }, - "frame": { - "x": 0, - "y": 169, - "w": 101, - "h": 81 - } - }, - { - "filename": "0067.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 101, - "h": 81 - }, - "frame": { - "x": 0, - "y": 169, - "w": 101, - "h": 81 - } - }, - { - "filename": "0161.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 101, - "h": 81 - }, - "frame": { - "x": 0, - "y": 169, - "w": 101, - "h": 81 - } - }, - { - "filename": "0162.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 101, - "h": 81 - }, - "frame": { - "x": 0, - "y": 169, - "w": 101, - "h": 81 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 99, - "h": 81 - }, - "frame": { - "x": 0, - "y": 250, - "w": 99, - "h": 81 - } - }, - { - "filename": "0040.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 99, - "h": 81 - }, - "frame": { - "x": 0, - "y": 250, - "w": 99, - "h": 81 - } - }, - { - "filename": "0135.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 99, - "h": 81 - }, - "frame": { - "x": 0, - "y": 250, - "w": 99, - "h": 81 - } - }, - { - "filename": "0033.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 3, - "y": 2, - "w": 98, - "h": 81 - }, - "frame": { - "x": 0, - "y": 331, - "w": 98, - "h": 81 - } - }, - { - "filename": "0034.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 3, - "y": 2, - "w": 98, - "h": 81 - }, - "frame": { - "x": 0, - "y": 331, - "w": 98, - "h": 81 - } - }, - { - "filename": "0068.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 3, - "y": 2, - "w": 98, - "h": 81 - }, - "frame": { - "x": 0, - "y": 331, - "w": 98, - "h": 81 - } - }, - { - "filename": "0069.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 3, - "y": 2, - "w": 98, - "h": 81 - }, - "frame": { - "x": 0, - "y": 331, - "w": 98, - "h": 81 - } - }, - { - "filename": "0163.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 3, - "y": 2, - "w": 98, - "h": 81 - }, - "frame": { - "x": 0, - "y": 331, - "w": 98, - "h": 81 - } - }, - { - "filename": "0164.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 3, - "y": 2, - "w": 98, - "h": 81 - }, - "frame": { - "x": 0, - "y": 331, - "w": 98, - "h": 81 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 4, - "y": 1, - "w": 96, - "h": 81 - }, - "frame": { - "x": 0, - "y": 412, - "w": 96, - "h": 81 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 4, - "y": 1, - "w": 96, - "h": 81 - }, - "frame": { - "x": 0, - "y": 412, - "w": 96, - "h": 81 - } - }, - { - "filename": "0038.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 4, - "y": 1, - "w": 96, - "h": 81 - }, - "frame": { - "x": 0, - "y": 412, - "w": 96, - "h": 81 - } - }, - { - "filename": "0039.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 4, - "y": 1, - "w": 96, - "h": 81 - }, - "frame": { - "x": 0, - "y": 412, - "w": 96, - "h": 81 - } - }, - { - "filename": "0133.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 4, - "y": 1, - "w": 96, - "h": 81 - }, - "frame": { - "x": 0, - "y": 412, - "w": 96, - "h": 81 - } - }, - { - "filename": "0134.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 4, - "y": 1, - "w": 96, - "h": 81 - }, - "frame": { - "x": 0, - "y": 412, - "w": 96, - "h": 81 - } - }, - { - "filename": "0030.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 10, - "w": 108, - "h": 72 - }, - "frame": { - "x": 232, - "y": 0, - "w": 108, - "h": 72 - } - }, - { - "filename": "0065.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 10, - "w": 108, - "h": 72 - }, - "frame": { - "x": 232, - "y": 0, - "w": 108, - "h": 72 - } - }, - { - "filename": "0160.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 10, - "w": 108, - "h": 72 - }, - "frame": { - "x": 232, - "y": 0, - "w": 108, - "h": 72 - } - }, - { - "filename": "0023.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 13, - "y": 13, - "w": 106, - "h": 72 - }, - "frame": { - "x": 340, - "y": 0, - "w": 106, - "h": 72 - } - }, - { - "filename": "0024.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 13, - "y": 13, - "w": 106, - "h": 72 - }, - "frame": { - "x": 340, - "y": 0, - "w": 106, - "h": 72 - } - }, - { - "filename": "0058.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 13, - "y": 13, - "w": 106, - "h": 72 - }, - "frame": { - "x": 340, - "y": 0, - "w": 106, - "h": 72 - } - }, - { - "filename": "0059.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 13, - "y": 13, - "w": 106, - "h": 72 - }, - "frame": { - "x": 340, - "y": 0, - "w": 106, - "h": 72 - } - }, - { - "filename": "0153.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 13, - "y": 13, - "w": 106, - "h": 72 - }, - "frame": { - "x": 340, - "y": 0, - "w": 106, - "h": 72 - } - }, - { - "filename": "0154.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 13, - "y": 13, - "w": 106, - "h": 72 - }, - "frame": { - "x": 340, - "y": 0, - "w": 106, - "h": 72 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 8, - "y": 11, - "w": 107, - "h": 68 - }, - "frame": { - "x": 116, - "y": 69, - "w": 107, - "h": 68 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 8, - "y": 11, - "w": 107, - "h": 68 - }, - "frame": { - "x": 116, - "y": 69, - "w": 107, - "h": 68 - } - }, - { - "filename": "0048.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 8, - "y": 11, - "w": 107, - "h": 68 - }, - "frame": { - "x": 116, - "y": 69, - "w": 107, - "h": 68 - } - }, - { - "filename": "0049.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 8, - "y": 11, - "w": 107, - "h": 68 - }, - "frame": { - "x": 116, - "y": 69, - "w": 107, - "h": 68 - } - }, - { - "filename": "0143.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 8, - "y": 11, - "w": 107, - "h": 68 - }, - "frame": { - "x": 116, - "y": 69, - "w": 107, - "h": 68 - } - }, - { - "filename": "0144.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 8, - "y": 11, - "w": 107, - "h": 68 - }, - "frame": { - "x": 116, - "y": 69, - "w": 107, - "h": 68 - } - }, - { - "filename": "0021.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 9, - "y": 15, - "w": 105, - "h": 68 - }, - "frame": { - "x": 223, - "y": 72, - "w": 105, - "h": 68 - } - }, - { - "filename": "0022.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 9, - "y": 15, - "w": 105, - "h": 68 - }, - "frame": { - "x": 223, - "y": 72, - "w": 105, - "h": 68 - } - }, - { - "filename": "0056.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 9, - "y": 15, - "w": 105, - "h": 68 - }, - "frame": { - "x": 223, - "y": 72, - "w": 105, - "h": 68 - } - }, - { - "filename": "0057.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 9, - "y": 15, - "w": 105, - "h": 68 - }, - "frame": { - "x": 223, - "y": 72, - "w": 105, - "h": 68 - } - }, - { - "filename": "0151.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 9, - "y": 15, - "w": 105, - "h": 68 - }, - "frame": { - "x": 223, - "y": 72, - "w": 105, - "h": 68 - } - }, - { - "filename": "0152.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 9, - "y": 15, - "w": 105, - "h": 68 - }, - "frame": { - "x": 223, - "y": 72, - "w": 105, - "h": 68 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 8, - "y": 10, - "w": 104, - "h": 67 - }, - "frame": { - "x": 328, - "y": 72, - "w": 104, - "h": 67 - } - }, - { - "filename": "0050.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 8, - "y": 10, - "w": 104, - "h": 67 - }, - "frame": { - "x": 328, - "y": 72, - "w": 104, - "h": 67 - } - }, - { - "filename": "0145.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 8, - "y": 10, - "w": 104, - "h": 67 - }, - "frame": { - "x": 328, - "y": 72, - "w": 104, - "h": 67 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 8, - "y": 14, - "w": 102, - "h": 68 - }, - "frame": { - "x": 103, - "y": 137, - "w": 102, - "h": 68 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 8, - "y": 14, - "w": 102, - "h": 68 - }, - "frame": { - "x": 103, - "y": 137, - "w": 102, - "h": 68 - } - }, - { - "filename": "0046.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 8, - "y": 14, - "w": 102, - "h": 68 - }, - "frame": { - "x": 103, - "y": 137, - "w": 102, - "h": 68 - } - }, - { - "filename": "0047.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 8, - "y": 14, - "w": 102, - "h": 68 - }, - "frame": { - "x": 103, - "y": 137, - "w": 102, - "h": 68 - } - }, - { - "filename": "0141.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 8, - "y": 14, - "w": 102, - "h": 68 - }, - "frame": { - "x": 103, - "y": 137, - "w": 102, - "h": 68 - } - }, - { - "filename": "0142.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 8, - "y": 14, - "w": 102, - "h": 68 - }, - "frame": { - "x": 103, - "y": 137, - "w": 102, - "h": 68 - } - }, - { - "filename": "0020.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 7, - "y": 9, - "w": 98, - "h": 73 - }, - "frame": { - "x": 205, - "y": 140, - "w": 98, - "h": 73 - } - }, - { - "filename": "0055.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 7, - "y": 9, - "w": 98, - "h": 73 - }, - "frame": { - "x": 205, - "y": 140, - "w": 98, - "h": 73 - } - }, - { - "filename": "0150.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 7, - "y": 9, - "w": 98, - "h": 73 - }, - "frame": { - "x": 205, - "y": 140, - "w": 98, - "h": 73 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 96, - "h": 75 - }, - "frame": { - "x": 101, - "y": 205, - "w": 96, - "h": 75 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 96, - "h": 75 - }, - "frame": { - "x": 101, - "y": 205, - "w": 96, - "h": 75 - } - }, - { - "filename": "0041.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 96, - "h": 75 - }, - "frame": { - "x": 101, - "y": 205, - "w": 96, - "h": 75 - } - }, - { - "filename": "0042.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 96, - "h": 75 - }, - "frame": { - "x": 101, - "y": 205, - "w": 96, - "h": 75 - } - }, - { - "filename": "0136.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 96, - "h": 75 - }, - "frame": { - "x": 101, - "y": 205, - "w": 96, - "h": 75 - } - }, - { - "filename": "0137.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 96, - "h": 75 - }, - "frame": { - "x": 101, - "y": 205, - "w": 96, - "h": 75 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 9, - "y": 7, - "w": 94, - "h": 75 - }, - "frame": { - "x": 197, - "y": 213, - "w": 94, - "h": 75 - } - }, - { - "filename": "0045.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 9, - "y": 7, - "w": 94, - "h": 75 - }, - "frame": { - "x": 197, - "y": 213, - "w": 94, - "h": 75 - } - }, - { - "filename": "0140.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 9, - "y": 7, - "w": 94, - "h": 75 - }, - "frame": { - "x": 197, - "y": 213, - "w": 94, - "h": 75 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 9, - "y": 4, - "w": 94, - "h": 78 - }, - "frame": { - "x": 99, - "y": 280, - "w": 94, - "h": 78 - } - }, - { - "filename": "0017.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 9, - "y": 4, - "w": 94, - "h": 78 - }, - "frame": { - "x": 99, - "y": 280, - "w": 94, - "h": 78 - } - }, - { - "filename": "0051.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 9, - "y": 4, - "w": 94, - "h": 78 - }, - "frame": { - "x": 99, - "y": 280, - "w": 94, - "h": 78 - } - }, - { - "filename": "0052.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 9, - "y": 4, - "w": 94, - "h": 78 - }, - "frame": { - "x": 99, - "y": 280, - "w": 94, - "h": 78 - } - }, - { - "filename": "0146.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 9, - "y": 4, - "w": 94, - "h": 78 - }, - "frame": { - "x": 99, - "y": 280, - "w": 94, - "h": 78 - } - }, - { - "filename": "0147.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 9, - "y": 4, - "w": 94, - "h": 78 - }, - "frame": { - "x": 99, - "y": 280, - "w": 94, - "h": 78 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 93, - "h": 78 - }, - "frame": { - "x": 193, - "y": 288, - "w": 93, - "h": 78 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 93, - "h": 78 - }, - "frame": { - "x": 193, - "y": 288, - "w": 93, - "h": 78 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 93, - "h": 78 - }, - "frame": { - "x": 193, - "y": 288, - "w": 93, - "h": 78 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 93, - "h": 78 - }, - "frame": { - "x": 193, - "y": 288, - "w": 93, - "h": 78 - } - }, - { - "filename": "0018.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 93, - "h": 78 - }, - "frame": { - "x": 193, - "y": 288, - "w": 93, - "h": 78 - } - }, - { - "filename": "0019.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 93, - "h": 78 - }, - "frame": { - "x": 193, - "y": 288, - "w": 93, - "h": 78 - } - }, - { - "filename": "0035.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 93, - "h": 78 - }, - "frame": { - "x": 193, - "y": 288, - "w": 93, - "h": 78 - } - }, - { - "filename": "0036.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 93, - "h": 78 - }, - "frame": { - "x": 193, - "y": 288, - "w": 93, - "h": 78 - } - }, - { - "filename": "0037.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 93, - "h": 78 - }, - "frame": { - "x": 193, - "y": 288, - "w": 93, - "h": 78 - } - }, - { - "filename": "0043.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 93, - "h": 78 - }, - "frame": { - "x": 193, - "y": 288, - "w": 93, - "h": 78 - } - }, - { - "filename": "0044.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 93, - "h": 78 - }, - "frame": { - "x": 193, - "y": 288, - "w": 93, - "h": 78 - } - }, - { - "filename": "0053.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 93, - "h": 78 - }, - "frame": { - "x": 193, - "y": 288, - "w": 93, - "h": 78 - } - }, - { - "filename": "0054.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 93, - "h": 78 - }, - "frame": { - "x": 193, - "y": 288, - "w": 93, - "h": 78 - } - }, - { - "filename": "0070.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 93, - "h": 78 - }, - "frame": { - "x": 193, - "y": 288, - "w": 93, - "h": 78 - } - }, - { - "filename": "0131.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 93, - "h": 78 - }, - "frame": { - "x": 193, - "y": 288, - "w": 93, - "h": 78 - } - }, - { - "filename": "0132.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 93, - "h": 78 - }, - "frame": { - "x": 193, - "y": 288, - "w": 93, - "h": 78 - } - }, - { - "filename": "0138.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 93, - "h": 78 - }, - "frame": { - "x": 193, - "y": 288, - "w": 93, - "h": 78 - } - }, - { - "filename": "0139.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 93, - "h": 78 - }, - "frame": { - "x": 193, - "y": 288, - "w": 93, - "h": 78 - } - }, - { - "filename": "0148.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 93, - "h": 78 - }, - "frame": { - "x": 193, - "y": 288, - "w": 93, - "h": 78 - } - }, - { - "filename": "0149.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 93, - "h": 78 - }, - "frame": { - "x": 193, - "y": 288, - "w": 93, - "h": 78 - } - }, - { - "filename": "0165.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 93, - "h": 78 - }, - "frame": { - "x": 193, - "y": 288, - "w": 93, - "h": 78 - } - }, - { - "filename": "0071.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 93, - "h": 78 - }, - "frame": { - "x": 98, - "y": 358, - "w": 93, - "h": 78 - } - }, - { - "filename": "0072.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 93, - "h": 78 - }, - "frame": { - "x": 98, - "y": 358, - "w": 93, - "h": 78 - } - }, - { - "filename": "0073.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 7, - "y": 4, - "w": 93, - "h": 78 - }, - "frame": { - "x": 191, - "y": 366, - "w": 93, - "h": 78 - } - }, - { - "filename": "0081.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 19, - "y": 18, - "w": 73, - "h": 64 - }, - "frame": { - "x": 96, - "y": 436, - "w": 73, - "h": 64 - } - }, - { - "filename": "0125.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 28, - "y": 17, - "w": 52, - "h": 65 - }, - "frame": { - "x": 446, - "y": 0, - "w": 52, - "h": 65 - } - }, - { - "filename": "0074.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 6, - "y": 3, - "w": 93, - "h": 79 - }, - "frame": { - "x": 303, - "y": 140, - "w": 93, - "h": 79 - } - }, - { - "filename": "0075.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 5, - "y": 4, - "w": 93, - "h": 78 - }, - "frame": { - "x": 291, - "y": 219, - "w": 93, - "h": 78 - } - }, - { - "filename": "0076.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 5, - "y": 4, - "w": 93, - "h": 78 - }, - "frame": { - "x": 291, - "y": 219, - "w": 93, - "h": 78 - } - }, - { - "filename": "0077.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 6, - "y": 5, - "w": 93, - "h": 77 - }, - "frame": { - "x": 286, - "y": 297, - "w": 93, - "h": 77 - } - }, - { - "filename": "0078.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 12, - "y": 9, - "w": 85, - "h": 73 - }, - "frame": { - "x": 284, - "y": 374, - "w": 85, - "h": 73 - } - }, - { - "filename": "0129.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 16, - "y": 5, - "w": 75, - "h": 79 - }, - "frame": { - "x": 396, - "y": 139, - "w": 75, - "h": 79 - } - }, - { - "filename": "0130.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 11, - "y": 4, - "w": 85, - "h": 79 - }, - "frame": { - "x": 384, - "y": 219, - "w": 85, - "h": 79 - } - }, - { - "filename": "0079.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 16, - "y": 15, - "w": 78, - "h": 67 - }, - "frame": { - "x": 379, - "y": 298, - "w": 78, - "h": 67 - } - }, - { - "filename": "0080.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 16, - "y": 15, - "w": 78, - "h": 67 - }, - "frame": { - "x": 379, - "y": 298, - "w": 78, - "h": 67 - } - }, - { - "filename": "0127.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 21, - "y": 8, - "w": 66, - "h": 76 - }, - "frame": { - "x": 369, - "y": 374, - "w": 66, - "h": 76 - } - }, - { - "filename": "0128.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 21, - "y": 8, - "w": 66, - "h": 76 - }, - "frame": { - "x": 369, - "y": 374, - "w": 66, - "h": 76 - } - }, - { - "filename": "0126.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 25, - "y": 12, - "w": 59, - "h": 70 - }, - "frame": { - "x": 435, - "y": 365, - "w": 59, - "h": 70 - } - }, - { - "filename": "0082.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 25, - "y": 19, - "w": 66, - "h": 63 - }, - "frame": { - "x": 432, - "y": 72, - "w": 66, - "h": 63 - } - }, - { - "filename": "0083.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 29, - "y": 20, - "w": 60, - "h": 62 - }, - "frame": { - "x": 435, - "y": 435, - "w": 60, - "h": 62 - } - }, - { - "filename": "0084.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 29, - "y": 20, - "w": 60, - "h": 62 - }, - "frame": { - "x": 435, - "y": 435, - "w": 60, - "h": 62 - } - }, - { - "filename": "0085.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 37, - "y": 20, - "w": 37, - "h": 61 - }, - "frame": { - "x": 457, - "y": 298, - "w": 37, - "h": 61 - } - }, - { - "filename": "0086.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 37, - "y": 20, - "w": 37, - "h": 61 - }, - "frame": { - "x": 457, - "y": 298, - "w": 37, - "h": 61 - } - }, - { - "filename": "0087.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 37, - "y": 20, - "w": 37, - "h": 61 - }, - "frame": { - "x": 457, - "y": 298, - "w": 37, - "h": 61 - } - }, - { - "filename": "0088.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 37, - "y": 20, - "w": 37, - "h": 61 - }, - "frame": { - "x": 457, - "y": 298, - "w": 37, - "h": 61 - } - }, - { - "filename": "0089.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 37, - "y": 16, - "w": 37, - "h": 61 - }, - "frame": { - "x": 457, - "y": 298, - "w": 37, - "h": 61 - } - }, - { - "filename": "0090.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 37, - "y": 16, - "w": 37, - "h": 61 - }, - "frame": { - "x": 457, - "y": 298, - "w": 37, - "h": 61 - } - }, - { - "filename": "0091.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 37, - "y": 17, - "w": 37, - "h": 61 - }, - "frame": { - "x": 457, - "y": 298, - "w": 37, - "h": 61 - } - }, - { - "filename": "0092.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 37, - "y": 17, - "w": 37, - "h": 61 - }, - "frame": { - "x": 457, - "y": 298, - "w": 37, - "h": 61 - } - }, - { - "filename": "0093.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 37, - "y": 20, - "w": 37, - "h": 61 - }, - "frame": { - "x": 457, - "y": 298, - "w": 37, - "h": 61 - } - }, - { - "filename": "0094.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 37, - "y": 20, - "w": 37, - "h": 61 - }, - "frame": { - "x": 457, - "y": 298, - "w": 37, - "h": 61 - } - }, - { - "filename": "0095.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 37, - "y": 14, - "w": 37, - "h": 61 - }, - "frame": { - "x": 457, - "y": 298, - "w": 37, - "h": 61 - } - }, - { - "filename": "0096.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 37, - "y": 14, - "w": 37, - "h": 61 - }, - "frame": { - "x": 457, - "y": 298, - "w": 37, - "h": 61 - } - }, - { - "filename": "0097.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 37, - "y": 15, - "w": 37, - "h": 61 - }, - "frame": { - "x": 457, - "y": 298, - "w": 37, - "h": 61 - } - }, - { - "filename": "0098.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 37, - "y": 15, - "w": 37, - "h": 61 - }, - "frame": { - "x": 457, - "y": 298, - "w": 37, - "h": 61 - } - }, - { - "filename": "0099.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 37, - "y": 20, - "w": 37, - "h": 61 - }, - "frame": { - "x": 457, - "y": 298, - "w": 37, - "h": 61 - } - }, - { - "filename": "0100.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 37, - "y": 20, - "w": 37, - "h": 61 - }, - "frame": { - "x": 457, - "y": 298, - "w": 37, - "h": 61 - } - }, - { - "filename": "0101.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 37, - "y": 20, - "w": 37, - "h": 61 - }, - "frame": { - "x": 457, - "y": 298, - "w": 37, - "h": 61 - } - }, - { - "filename": "0102.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 37, - "y": 20, - "w": 37, - "h": 61 - }, - "frame": { - "x": 457, - "y": 298, - "w": 37, - "h": 61 - } - }, - { - "filename": "0103.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 37, - "y": 20, - "w": 37, - "h": 61 - }, - "frame": { - "x": 457, - "y": 298, - "w": 37, - "h": 61 - } - }, - { - "filename": "0104.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 37, - "y": 20, - "w": 37, - "h": 61 - }, - "frame": { - "x": 457, - "y": 298, - "w": 37, - "h": 61 - } - }, - { - "filename": "0105.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 37, - "y": 20, - "w": 37, - "h": 61 - }, - "frame": { - "x": 457, - "y": 298, - "w": 37, - "h": 61 - } - }, - { - "filename": "0106.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 37, - "y": 20, - "w": 37, - "h": 61 - }, - "frame": { - "x": 457, - "y": 298, - "w": 37, - "h": 61 - } - }, - { - "filename": "0107.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 37, - "y": 16, - "w": 37, - "h": 61 - }, - "frame": { - "x": 457, - "y": 298, - "w": 37, - "h": 61 - } - }, - { - "filename": "0108.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 37, - "y": 16, - "w": 37, - "h": 61 - }, - "frame": { - "x": 457, - "y": 298, - "w": 37, - "h": 61 - } - }, - { - "filename": "0109.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 37, - "y": 17, - "w": 37, - "h": 61 - }, - "frame": { - "x": 457, - "y": 298, - "w": 37, - "h": 61 - } - }, - { - "filename": "0110.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 37, - "y": 17, - "w": 37, - "h": 61 - }, - "frame": { - "x": 457, - "y": 298, - "w": 37, - "h": 61 - } - }, - { - "filename": "0111.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 37, - "y": 20, - "w": 37, - "h": 61 - }, - "frame": { - "x": 457, - "y": 298, - "w": 37, - "h": 61 - } - }, - { - "filename": "0112.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 37, - "y": 20, - "w": 37, - "h": 61 - }, - "frame": { - "x": 457, - "y": 298, - "w": 37, - "h": 61 - } - }, - { - "filename": "0113.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 37, - "y": 20, - "w": 37, - "h": 61 - }, - "frame": { - "x": 457, - "y": 298, - "w": 37, - "h": 61 - } - }, - { - "filename": "0114.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 37, - "y": 20, - "w": 37, - "h": 61 - }, - "frame": { - "x": 457, - "y": 298, - "w": 37, - "h": 61 - } - }, - { - "filename": "0115.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 37, - "y": 20, - "w": 37, - "h": 61 - }, - "frame": { - "x": 457, - "y": 298, - "w": 37, - "h": 61 - } - }, - { - "filename": "0116.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 37, - "y": 20, - "w": 37, - "h": 61 - }, - "frame": { - "x": 457, - "y": 298, - "w": 37, - "h": 61 - } - }, - { - "filename": "0117.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 37, - "y": 20, - "w": 37, - "h": 61 - }, - "frame": { - "x": 457, - "y": 298, - "w": 37, - "h": 61 - } - }, - { - "filename": "0118.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 37, - "y": 20, - "w": 37, - "h": 61 - }, - "frame": { - "x": 457, - "y": 298, - "w": 37, - "h": 61 - } - }, - { - "filename": "0119.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 37, - "y": 20, - "w": 37, - "h": 61 - }, - "frame": { - "x": 457, - "y": 298, - "w": 37, - "h": 61 - } - }, - { - "filename": "0120.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 37, - "y": 20, - "w": 37, - "h": 61 - }, - "frame": { - "x": 457, - "y": 298, - "w": 37, - "h": 61 - } - }, - { - "filename": "0121.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 37, - "y": 20, - "w": 37, - "h": 61 - }, - "frame": { - "x": 457, - "y": 298, - "w": 37, - "h": 61 - } - }, - { - "filename": "0122.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 37, - "y": 20, - "w": 37, - "h": 61 - }, - "frame": { - "x": 457, - "y": 298, - "w": 37, - "h": 61 - } - }, - { - "filename": "0123.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 37, - "y": 20, - "w": 37, - "h": 61 - }, - "frame": { - "x": 457, - "y": 298, - "w": 37, - "h": 61 - } - }, - { - "filename": "0124.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 37, - "y": 20, - "w": 37, - "h": 61 - }, - "frame": { - "x": 457, - "y": 298, - "w": 37, - "h": 61 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:a1c52466e8cdc83633a9fbd5b8675ca7:19652e451f806ac9b4bbb01e17b071df:12f3eae8283ab6c8e555ff3e46b7d8dc$" - } -} \ No newline at end of file diff --git a/public/images/pokemon/variant/563_2.png b/public/images/pokemon/variant/563_2.png deleted file mode 100644 index 3a0e775d833..00000000000 Binary files a/public/images/pokemon/variant/563_2.png and /dev/null differ diff --git a/public/images/pokemon/variant/563_3.json b/public/images/pokemon/variant/563_3.json deleted file mode 100644 index 9f6a43a4a97..00000000000 --- a/public/images/pokemon/variant/563_3.json +++ /dev/null @@ -1,3485 +0,0 @@ -{ - "textures": [ - { - "image": "563_3.png", - "format": "RGBA8888", - "size": { - "w": 500, - "h": 500 - }, - "scale": 1, - "frames": [ - { - "filename": "0026.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 116, - "h": 81 - }, - "frame": { - "x": 0, - "y": 0, - "w": 116, - "h": 81 - } - }, - { - "filename": "0027.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 116, - "h": 81 - }, - "frame": { - "x": 0, - "y": 0, - "w": 116, - "h": 81 - } - }, - { - "filename": "0061.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 116, - "h": 81 - }, - "frame": { - "x": 0, - "y": 0, - "w": 116, - "h": 81 - } - }, - { - "filename": "0062.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 116, - "h": 81 - }, - "frame": { - "x": 0, - "y": 0, - "w": 116, - "h": 81 - } - }, - { - "filename": "0156.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 116, - "h": 81 - }, - "frame": { - "x": 0, - "y": 0, - "w": 116, - "h": 81 - } - }, - { - "filename": "0157.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 116, - "h": 81 - }, - "frame": { - "x": 0, - "y": 0, - "w": 116, - "h": 81 - } - }, - { - "filename": "0025.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 19, - "y": 0, - "w": 103, - "h": 88 - }, - "frame": { - "x": 0, - "y": 81, - "w": 103, - "h": 88 - } - }, - { - "filename": "0060.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 19, - "y": 0, - "w": 103, - "h": 88 - }, - "frame": { - "x": 0, - "y": 81, - "w": 103, - "h": 88 - } - }, - { - "filename": "0155.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 19, - "y": 0, - "w": 103, - "h": 88 - }, - "frame": { - "x": 0, - "y": 81, - "w": 103, - "h": 88 - } - }, - { - "filename": "0028.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 1, - "y": 13, - "w": 116, - "h": 69 - }, - "frame": { - "x": 116, - "y": 0, - "w": 116, - "h": 69 - } - }, - { - "filename": "0029.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 1, - "y": 13, - "w": 116, - "h": 69 - }, - "frame": { - "x": 116, - "y": 0, - "w": 116, - "h": 69 - } - }, - { - "filename": "0063.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 1, - "y": 13, - "w": 116, - "h": 69 - }, - "frame": { - "x": 116, - "y": 0, - "w": 116, - "h": 69 - } - }, - { - "filename": "0064.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 1, - "y": 13, - "w": 116, - "h": 69 - }, - "frame": { - "x": 116, - "y": 0, - "w": 116, - "h": 69 - } - }, - { - "filename": "0158.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 1, - "y": 13, - "w": 116, - "h": 69 - }, - "frame": { - "x": 116, - "y": 0, - "w": 116, - "h": 69 - } - }, - { - "filename": "0159.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 1, - "y": 13, - "w": 116, - "h": 69 - }, - "frame": { - "x": 116, - "y": 0, - "w": 116, - "h": 69 - } - }, - { - "filename": "0031.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 101, - "h": 81 - }, - "frame": { - "x": 0, - "y": 169, - "w": 101, - "h": 81 - } - }, - { - "filename": "0032.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 101, - "h": 81 - }, - "frame": { - "x": 0, - "y": 169, - "w": 101, - "h": 81 - } - }, - { - "filename": "0066.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 101, - "h": 81 - }, - "frame": { - "x": 0, - "y": 169, - "w": 101, - "h": 81 - } - }, - { - "filename": "0067.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 101, - "h": 81 - }, - "frame": { - "x": 0, - "y": 169, - "w": 101, - "h": 81 - } - }, - { - "filename": "0161.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 101, - "h": 81 - }, - "frame": { - "x": 0, - "y": 169, - "w": 101, - "h": 81 - } - }, - { - "filename": "0162.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 101, - "h": 81 - }, - "frame": { - "x": 0, - "y": 169, - "w": 101, - "h": 81 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 99, - "h": 81 - }, - "frame": { - "x": 0, - "y": 250, - "w": 99, - "h": 81 - } - }, - { - "filename": "0040.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 99, - "h": 81 - }, - "frame": { - "x": 0, - "y": 250, - "w": 99, - "h": 81 - } - }, - { - "filename": "0135.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 99, - "h": 81 - }, - "frame": { - "x": 0, - "y": 250, - "w": 99, - "h": 81 - } - }, - { - "filename": "0033.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 3, - "y": 2, - "w": 98, - "h": 81 - }, - "frame": { - "x": 0, - "y": 331, - "w": 98, - "h": 81 - } - }, - { - "filename": "0034.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 3, - "y": 2, - "w": 98, - "h": 81 - }, - "frame": { - "x": 0, - "y": 331, - "w": 98, - "h": 81 - } - }, - { - "filename": "0068.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 3, - "y": 2, - "w": 98, - "h": 81 - }, - "frame": { - "x": 0, - "y": 331, - "w": 98, - "h": 81 - } - }, - { - "filename": "0069.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 3, - "y": 2, - "w": 98, - "h": 81 - }, - "frame": { - "x": 0, - "y": 331, - "w": 98, - "h": 81 - } - }, - { - "filename": "0163.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 3, - "y": 2, - "w": 98, - "h": 81 - }, - "frame": { - "x": 0, - "y": 331, - "w": 98, - "h": 81 - } - }, - { - "filename": "0164.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 3, - "y": 2, - "w": 98, - "h": 81 - }, - "frame": { - "x": 0, - "y": 331, - "w": 98, - "h": 81 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 4, - "y": 1, - "w": 96, - "h": 81 - }, - "frame": { - "x": 0, - "y": 412, - "w": 96, - "h": 81 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 4, - "y": 1, - "w": 96, - "h": 81 - }, - "frame": { - "x": 0, - "y": 412, - "w": 96, - "h": 81 - } - }, - { - "filename": "0038.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 4, - "y": 1, - "w": 96, - "h": 81 - }, - "frame": { - "x": 0, - "y": 412, - "w": 96, - "h": 81 - } - }, - { - "filename": "0039.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 4, - "y": 1, - "w": 96, - "h": 81 - }, - "frame": { - "x": 0, - "y": 412, - "w": 96, - "h": 81 - } - }, - { - "filename": "0133.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 4, - "y": 1, - "w": 96, - "h": 81 - }, - "frame": { - "x": 0, - "y": 412, - "w": 96, - "h": 81 - } - }, - { - "filename": "0134.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 4, - "y": 1, - "w": 96, - "h": 81 - }, - "frame": { - "x": 0, - "y": 412, - "w": 96, - "h": 81 - } - }, - { - "filename": "0030.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 10, - "w": 108, - "h": 72 - }, - "frame": { - "x": 232, - "y": 0, - "w": 108, - "h": 72 - } - }, - { - "filename": "0065.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 10, - "w": 108, - "h": 72 - }, - "frame": { - "x": 232, - "y": 0, - "w": 108, - "h": 72 - } - }, - { - "filename": "0160.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 10, - "w": 108, - "h": 72 - }, - "frame": { - "x": 232, - "y": 0, - "w": 108, - "h": 72 - } - }, - { - "filename": "0023.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 13, - "y": 13, - "w": 106, - "h": 72 - }, - "frame": { - "x": 340, - "y": 0, - "w": 106, - "h": 72 - } - }, - { - "filename": "0024.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 13, - "y": 13, - "w": 106, - "h": 72 - }, - "frame": { - "x": 340, - "y": 0, - "w": 106, - "h": 72 - } - }, - { - "filename": "0058.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 13, - "y": 13, - "w": 106, - "h": 72 - }, - "frame": { - "x": 340, - "y": 0, - "w": 106, - "h": 72 - } - }, - { - "filename": "0059.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 13, - "y": 13, - "w": 106, - "h": 72 - }, - "frame": { - "x": 340, - "y": 0, - "w": 106, - "h": 72 - } - }, - { - "filename": "0153.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 13, - "y": 13, - "w": 106, - "h": 72 - }, - "frame": { - "x": 340, - "y": 0, - "w": 106, - "h": 72 - } - }, - { - "filename": "0154.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 13, - "y": 13, - "w": 106, - "h": 72 - }, - "frame": { - "x": 340, - "y": 0, - "w": 106, - "h": 72 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 8, - "y": 11, - "w": 107, - "h": 68 - }, - "frame": { - "x": 116, - "y": 69, - "w": 107, - "h": 68 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 8, - "y": 11, - "w": 107, - "h": 68 - }, - "frame": { - "x": 116, - "y": 69, - "w": 107, - "h": 68 - } - }, - { - "filename": "0048.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 8, - "y": 11, - "w": 107, - "h": 68 - }, - "frame": { - "x": 116, - "y": 69, - "w": 107, - "h": 68 - } - }, - { - "filename": "0049.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 8, - "y": 11, - "w": 107, - "h": 68 - }, - "frame": { - "x": 116, - "y": 69, - "w": 107, - "h": 68 - } - }, - { - "filename": "0143.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 8, - "y": 11, - "w": 107, - "h": 68 - }, - "frame": { - "x": 116, - "y": 69, - "w": 107, - "h": 68 - } - }, - { - "filename": "0144.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 8, - "y": 11, - "w": 107, - "h": 68 - }, - "frame": { - "x": 116, - "y": 69, - "w": 107, - "h": 68 - } - }, - { - "filename": "0021.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 9, - "y": 15, - "w": 105, - "h": 68 - }, - "frame": { - "x": 223, - "y": 72, - "w": 105, - "h": 68 - } - }, - { - "filename": "0022.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 9, - "y": 15, - "w": 105, - "h": 68 - }, - "frame": { - "x": 223, - "y": 72, - "w": 105, - "h": 68 - } - }, - { - "filename": "0056.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 9, - "y": 15, - "w": 105, - "h": 68 - }, - "frame": { - "x": 223, - "y": 72, - "w": 105, - "h": 68 - } - }, - { - "filename": "0057.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 9, - "y": 15, - "w": 105, - "h": 68 - }, - "frame": { - "x": 223, - "y": 72, - "w": 105, - "h": 68 - } - }, - { - "filename": "0151.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 9, - "y": 15, - "w": 105, - "h": 68 - }, - "frame": { - "x": 223, - "y": 72, - "w": 105, - "h": 68 - } - }, - { - "filename": "0152.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 9, - "y": 15, - "w": 105, - "h": 68 - }, - "frame": { - "x": 223, - "y": 72, - "w": 105, - "h": 68 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 8, - "y": 10, - "w": 104, - "h": 67 - }, - "frame": { - "x": 328, - "y": 72, - "w": 104, - "h": 67 - } - }, - { - "filename": "0050.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 8, - "y": 10, - "w": 104, - "h": 67 - }, - "frame": { - "x": 328, - "y": 72, - "w": 104, - "h": 67 - } - }, - { - "filename": "0145.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 8, - "y": 10, - "w": 104, - "h": 67 - }, - "frame": { - "x": 328, - "y": 72, - "w": 104, - "h": 67 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 8, - "y": 14, - "w": 102, - "h": 68 - }, - "frame": { - "x": 103, - "y": 137, - "w": 102, - "h": 68 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 8, - "y": 14, - "w": 102, - "h": 68 - }, - "frame": { - "x": 103, - "y": 137, - "w": 102, - "h": 68 - } - }, - { - "filename": "0046.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 8, - "y": 14, - "w": 102, - "h": 68 - }, - "frame": { - "x": 103, - "y": 137, - "w": 102, - "h": 68 - } - }, - { - "filename": "0047.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 8, - "y": 14, - "w": 102, - "h": 68 - }, - "frame": { - "x": 103, - "y": 137, - "w": 102, - "h": 68 - } - }, - { - "filename": "0141.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 8, - "y": 14, - "w": 102, - "h": 68 - }, - "frame": { - "x": 103, - "y": 137, - "w": 102, - "h": 68 - } - }, - { - "filename": "0142.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 8, - "y": 14, - "w": 102, - "h": 68 - }, - "frame": { - "x": 103, - "y": 137, - "w": 102, - "h": 68 - } - }, - { - "filename": "0020.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 7, - "y": 9, - "w": 98, - "h": 73 - }, - "frame": { - "x": 205, - "y": 140, - "w": 98, - "h": 73 - } - }, - { - "filename": "0055.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 7, - "y": 9, - "w": 98, - "h": 73 - }, - "frame": { - "x": 205, - "y": 140, - "w": 98, - "h": 73 - } - }, - { - "filename": "0150.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 7, - "y": 9, - "w": 98, - "h": 73 - }, - "frame": { - "x": 205, - "y": 140, - "w": 98, - "h": 73 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 96, - "h": 75 - }, - "frame": { - "x": 101, - "y": 205, - "w": 96, - "h": 75 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 96, - "h": 75 - }, - "frame": { - "x": 101, - "y": 205, - "w": 96, - "h": 75 - } - }, - { - "filename": "0041.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 96, - "h": 75 - }, - "frame": { - "x": 101, - "y": 205, - "w": 96, - "h": 75 - } - }, - { - "filename": "0042.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 96, - "h": 75 - }, - "frame": { - "x": 101, - "y": 205, - "w": 96, - "h": 75 - } - }, - { - "filename": "0136.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 96, - "h": 75 - }, - "frame": { - "x": 101, - "y": 205, - "w": 96, - "h": 75 - } - }, - { - "filename": "0137.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 96, - "h": 75 - }, - "frame": { - "x": 101, - "y": 205, - "w": 96, - "h": 75 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 9, - "y": 7, - "w": 94, - "h": 75 - }, - "frame": { - "x": 197, - "y": 213, - "w": 94, - "h": 75 - } - }, - { - "filename": "0045.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 9, - "y": 7, - "w": 94, - "h": 75 - }, - "frame": { - "x": 197, - "y": 213, - "w": 94, - "h": 75 - } - }, - { - "filename": "0140.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 9, - "y": 7, - "w": 94, - "h": 75 - }, - "frame": { - "x": 197, - "y": 213, - "w": 94, - "h": 75 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 9, - "y": 4, - "w": 94, - "h": 78 - }, - "frame": { - "x": 99, - "y": 280, - "w": 94, - "h": 78 - } - }, - { - "filename": "0017.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 9, - "y": 4, - "w": 94, - "h": 78 - }, - "frame": { - "x": 99, - "y": 280, - "w": 94, - "h": 78 - } - }, - { - "filename": "0051.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 9, - "y": 4, - "w": 94, - "h": 78 - }, - "frame": { - "x": 99, - "y": 280, - "w": 94, - "h": 78 - } - }, - { - "filename": "0052.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 9, - "y": 4, - "w": 94, - "h": 78 - }, - "frame": { - "x": 99, - "y": 280, - "w": 94, - "h": 78 - } - }, - { - "filename": "0146.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 9, - "y": 4, - "w": 94, - "h": 78 - }, - "frame": { - "x": 99, - "y": 280, - "w": 94, - "h": 78 - } - }, - { - "filename": "0147.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 9, - "y": 4, - "w": 94, - "h": 78 - }, - "frame": { - "x": 99, - "y": 280, - "w": 94, - "h": 78 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 93, - "h": 78 - }, - "frame": { - "x": 193, - "y": 288, - "w": 93, - "h": 78 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 93, - "h": 78 - }, - "frame": { - "x": 193, - "y": 288, - "w": 93, - "h": 78 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 93, - "h": 78 - }, - "frame": { - "x": 193, - "y": 288, - "w": 93, - "h": 78 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 93, - "h": 78 - }, - "frame": { - "x": 193, - "y": 288, - "w": 93, - "h": 78 - } - }, - { - "filename": "0018.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 93, - "h": 78 - }, - "frame": { - "x": 193, - "y": 288, - "w": 93, - "h": 78 - } - }, - { - "filename": "0019.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 93, - "h": 78 - }, - "frame": { - "x": 193, - "y": 288, - "w": 93, - "h": 78 - } - }, - { - "filename": "0035.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 93, - "h": 78 - }, - "frame": { - "x": 193, - "y": 288, - "w": 93, - "h": 78 - } - }, - { - "filename": "0036.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 93, - "h": 78 - }, - "frame": { - "x": 193, - "y": 288, - "w": 93, - "h": 78 - } - }, - { - "filename": "0037.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 93, - "h": 78 - }, - "frame": { - "x": 193, - "y": 288, - "w": 93, - "h": 78 - } - }, - { - "filename": "0043.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 93, - "h": 78 - }, - "frame": { - "x": 193, - "y": 288, - "w": 93, - "h": 78 - } - }, - { - "filename": "0044.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 93, - "h": 78 - }, - "frame": { - "x": 193, - "y": 288, - "w": 93, - "h": 78 - } - }, - { - "filename": "0053.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 93, - "h": 78 - }, - "frame": { - "x": 193, - "y": 288, - "w": 93, - "h": 78 - } - }, - { - "filename": "0054.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 93, - "h": 78 - }, - "frame": { - "x": 193, - "y": 288, - "w": 93, - "h": 78 - } - }, - { - "filename": "0070.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 93, - "h": 78 - }, - "frame": { - "x": 193, - "y": 288, - "w": 93, - "h": 78 - } - }, - { - "filename": "0131.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 93, - "h": 78 - }, - "frame": { - "x": 193, - "y": 288, - "w": 93, - "h": 78 - } - }, - { - "filename": "0132.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 93, - "h": 78 - }, - "frame": { - "x": 193, - "y": 288, - "w": 93, - "h": 78 - } - }, - { - "filename": "0138.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 93, - "h": 78 - }, - "frame": { - "x": 193, - "y": 288, - "w": 93, - "h": 78 - } - }, - { - "filename": "0139.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 93, - "h": 78 - }, - "frame": { - "x": 193, - "y": 288, - "w": 93, - "h": 78 - } - }, - { - "filename": "0148.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 93, - "h": 78 - }, - "frame": { - "x": 193, - "y": 288, - "w": 93, - "h": 78 - } - }, - { - "filename": "0149.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 93, - "h": 78 - }, - "frame": { - "x": 193, - "y": 288, - "w": 93, - "h": 78 - } - }, - { - "filename": "0165.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 93, - "h": 78 - }, - "frame": { - "x": 193, - "y": 288, - "w": 93, - "h": 78 - } - }, - { - "filename": "0071.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 93, - "h": 78 - }, - "frame": { - "x": 98, - "y": 358, - "w": 93, - "h": 78 - } - }, - { - "filename": "0072.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 93, - "h": 78 - }, - "frame": { - "x": 98, - "y": 358, - "w": 93, - "h": 78 - } - }, - { - "filename": "0073.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 7, - "y": 4, - "w": 93, - "h": 78 - }, - "frame": { - "x": 191, - "y": 366, - "w": 93, - "h": 78 - } - }, - { - "filename": "0081.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 19, - "y": 18, - "w": 73, - "h": 64 - }, - "frame": { - "x": 96, - "y": 436, - "w": 73, - "h": 64 - } - }, - { - "filename": "0125.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 28, - "y": 17, - "w": 52, - "h": 65 - }, - "frame": { - "x": 446, - "y": 0, - "w": 52, - "h": 65 - } - }, - { - "filename": "0074.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 6, - "y": 3, - "w": 93, - "h": 79 - }, - "frame": { - "x": 303, - "y": 140, - "w": 93, - "h": 79 - } - }, - { - "filename": "0075.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 5, - "y": 4, - "w": 93, - "h": 78 - }, - "frame": { - "x": 291, - "y": 219, - "w": 93, - "h": 78 - } - }, - { - "filename": "0076.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 5, - "y": 4, - "w": 93, - "h": 78 - }, - "frame": { - "x": 291, - "y": 219, - "w": 93, - "h": 78 - } - }, - { - "filename": "0077.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 6, - "y": 5, - "w": 93, - "h": 77 - }, - "frame": { - "x": 286, - "y": 297, - "w": 93, - "h": 77 - } - }, - { - "filename": "0078.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 12, - "y": 9, - "w": 85, - "h": 73 - }, - "frame": { - "x": 284, - "y": 374, - "w": 85, - "h": 73 - } - }, - { - "filename": "0129.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 16, - "y": 5, - "w": 75, - "h": 79 - }, - "frame": { - "x": 396, - "y": 139, - "w": 75, - "h": 79 - } - }, - { - "filename": "0130.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 11, - "y": 4, - "w": 85, - "h": 79 - }, - "frame": { - "x": 384, - "y": 219, - "w": 85, - "h": 79 - } - }, - { - "filename": "0079.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 16, - "y": 15, - "w": 78, - "h": 67 - }, - "frame": { - "x": 379, - "y": 298, - "w": 78, - "h": 67 - } - }, - { - "filename": "0080.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 16, - "y": 15, - "w": 78, - "h": 67 - }, - "frame": { - "x": 379, - "y": 298, - "w": 78, - "h": 67 - } - }, - { - "filename": "0127.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 21, - "y": 8, - "w": 66, - "h": 76 - }, - "frame": { - "x": 369, - "y": 374, - "w": 66, - "h": 76 - } - }, - { - "filename": "0128.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 21, - "y": 8, - "w": 66, - "h": 76 - }, - "frame": { - "x": 369, - "y": 374, - "w": 66, - "h": 76 - } - }, - { - "filename": "0126.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 25, - "y": 12, - "w": 59, - "h": 70 - }, - "frame": { - "x": 435, - "y": 365, - "w": 59, - "h": 70 - } - }, - { - "filename": "0082.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 25, - "y": 19, - "w": 66, - "h": 63 - }, - "frame": { - "x": 432, - "y": 72, - "w": 66, - "h": 63 - } - }, - { - "filename": "0083.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 29, - "y": 20, - "w": 60, - "h": 62 - }, - "frame": { - "x": 435, - "y": 435, - "w": 60, - "h": 62 - } - }, - { - "filename": "0084.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 29, - "y": 20, - "w": 60, - "h": 62 - }, - "frame": { - "x": 435, - "y": 435, - "w": 60, - "h": 62 - } - }, - { - "filename": "0085.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 37, - "y": 20, - "w": 37, - "h": 61 - }, - "frame": { - "x": 457, - "y": 298, - "w": 37, - "h": 61 - } - }, - { - "filename": "0086.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 37, - "y": 20, - "w": 37, - "h": 61 - }, - "frame": { - "x": 457, - "y": 298, - "w": 37, - "h": 61 - } - }, - { - "filename": "0087.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 37, - "y": 20, - "w": 37, - "h": 61 - }, - "frame": { - "x": 457, - "y": 298, - "w": 37, - "h": 61 - } - }, - { - "filename": "0088.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 37, - "y": 20, - "w": 37, - "h": 61 - }, - "frame": { - "x": 457, - "y": 298, - "w": 37, - "h": 61 - } - }, - { - "filename": "0089.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 37, - "y": 16, - "w": 37, - "h": 61 - }, - "frame": { - "x": 457, - "y": 298, - "w": 37, - "h": 61 - } - }, - { - "filename": "0090.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 37, - "y": 16, - "w": 37, - "h": 61 - }, - "frame": { - "x": 457, - "y": 298, - "w": 37, - "h": 61 - } - }, - { - "filename": "0091.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 37, - "y": 17, - "w": 37, - "h": 61 - }, - "frame": { - "x": 457, - "y": 298, - "w": 37, - "h": 61 - } - }, - { - "filename": "0092.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 37, - "y": 17, - "w": 37, - "h": 61 - }, - "frame": { - "x": 457, - "y": 298, - "w": 37, - "h": 61 - } - }, - { - "filename": "0093.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 37, - "y": 20, - "w": 37, - "h": 61 - }, - "frame": { - "x": 457, - "y": 298, - "w": 37, - "h": 61 - } - }, - { - "filename": "0094.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 37, - "y": 20, - "w": 37, - "h": 61 - }, - "frame": { - "x": 457, - "y": 298, - "w": 37, - "h": 61 - } - }, - { - "filename": "0095.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 37, - "y": 14, - "w": 37, - "h": 61 - }, - "frame": { - "x": 457, - "y": 298, - "w": 37, - "h": 61 - } - }, - { - "filename": "0096.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 37, - "y": 14, - "w": 37, - "h": 61 - }, - "frame": { - "x": 457, - "y": 298, - "w": 37, - "h": 61 - } - }, - { - "filename": "0097.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 37, - "y": 15, - "w": 37, - "h": 61 - }, - "frame": { - "x": 457, - "y": 298, - "w": 37, - "h": 61 - } - }, - { - "filename": "0098.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 37, - "y": 15, - "w": 37, - "h": 61 - }, - "frame": { - "x": 457, - "y": 298, - "w": 37, - "h": 61 - } - }, - { - "filename": "0099.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 37, - "y": 20, - "w": 37, - "h": 61 - }, - "frame": { - "x": 457, - "y": 298, - "w": 37, - "h": 61 - } - }, - { - "filename": "0100.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 37, - "y": 20, - "w": 37, - "h": 61 - }, - "frame": { - "x": 457, - "y": 298, - "w": 37, - "h": 61 - } - }, - { - "filename": "0101.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 37, - "y": 20, - "w": 37, - "h": 61 - }, - "frame": { - "x": 457, - "y": 298, - "w": 37, - "h": 61 - } - }, - { - "filename": "0102.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 37, - "y": 20, - "w": 37, - "h": 61 - }, - "frame": { - "x": 457, - "y": 298, - "w": 37, - "h": 61 - } - }, - { - "filename": "0103.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 37, - "y": 20, - "w": 37, - "h": 61 - }, - "frame": { - "x": 457, - "y": 298, - "w": 37, - "h": 61 - } - }, - { - "filename": "0104.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 37, - "y": 20, - "w": 37, - "h": 61 - }, - "frame": { - "x": 457, - "y": 298, - "w": 37, - "h": 61 - } - }, - { - "filename": "0105.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 37, - "y": 20, - "w": 37, - "h": 61 - }, - "frame": { - "x": 457, - "y": 298, - "w": 37, - "h": 61 - } - }, - { - "filename": "0106.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 37, - "y": 20, - "w": 37, - "h": 61 - }, - "frame": { - "x": 457, - "y": 298, - "w": 37, - "h": 61 - } - }, - { - "filename": "0107.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 37, - "y": 16, - "w": 37, - "h": 61 - }, - "frame": { - "x": 457, - "y": 298, - "w": 37, - "h": 61 - } - }, - { - "filename": "0108.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 37, - "y": 16, - "w": 37, - "h": 61 - }, - "frame": { - "x": 457, - "y": 298, - "w": 37, - "h": 61 - } - }, - { - "filename": "0109.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 37, - "y": 17, - "w": 37, - "h": 61 - }, - "frame": { - "x": 457, - "y": 298, - "w": 37, - "h": 61 - } - }, - { - "filename": "0110.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 37, - "y": 17, - "w": 37, - "h": 61 - }, - "frame": { - "x": 457, - "y": 298, - "w": 37, - "h": 61 - } - }, - { - "filename": "0111.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 37, - "y": 20, - "w": 37, - "h": 61 - }, - "frame": { - "x": 457, - "y": 298, - "w": 37, - "h": 61 - } - }, - { - "filename": "0112.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 37, - "y": 20, - "w": 37, - "h": 61 - }, - "frame": { - "x": 457, - "y": 298, - "w": 37, - "h": 61 - } - }, - { - "filename": "0113.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 37, - "y": 20, - "w": 37, - "h": 61 - }, - "frame": { - "x": 457, - "y": 298, - "w": 37, - "h": 61 - } - }, - { - "filename": "0114.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 37, - "y": 20, - "w": 37, - "h": 61 - }, - "frame": { - "x": 457, - "y": 298, - "w": 37, - "h": 61 - } - }, - { - "filename": "0115.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 37, - "y": 20, - "w": 37, - "h": 61 - }, - "frame": { - "x": 457, - "y": 298, - "w": 37, - "h": 61 - } - }, - { - "filename": "0116.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 37, - "y": 20, - "w": 37, - "h": 61 - }, - "frame": { - "x": 457, - "y": 298, - "w": 37, - "h": 61 - } - }, - { - "filename": "0117.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 37, - "y": 20, - "w": 37, - "h": 61 - }, - "frame": { - "x": 457, - "y": 298, - "w": 37, - "h": 61 - } - }, - { - "filename": "0118.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 37, - "y": 20, - "w": 37, - "h": 61 - }, - "frame": { - "x": 457, - "y": 298, - "w": 37, - "h": 61 - } - }, - { - "filename": "0119.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 37, - "y": 20, - "w": 37, - "h": 61 - }, - "frame": { - "x": 457, - "y": 298, - "w": 37, - "h": 61 - } - }, - { - "filename": "0120.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 37, - "y": 20, - "w": 37, - "h": 61 - }, - "frame": { - "x": 457, - "y": 298, - "w": 37, - "h": 61 - } - }, - { - "filename": "0121.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 37, - "y": 20, - "w": 37, - "h": 61 - }, - "frame": { - "x": 457, - "y": 298, - "w": 37, - "h": 61 - } - }, - { - "filename": "0122.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 37, - "y": 20, - "w": 37, - "h": 61 - }, - "frame": { - "x": 457, - "y": 298, - "w": 37, - "h": 61 - } - }, - { - "filename": "0123.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 37, - "y": 20, - "w": 37, - "h": 61 - }, - "frame": { - "x": 457, - "y": 298, - "w": 37, - "h": 61 - } - }, - { - "filename": "0124.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 122, - "h": 88 - }, - "spriteSourceSize": { - "x": 37, - "y": 20, - "w": 37, - "h": 61 - }, - "frame": { - "x": 457, - "y": 298, - "w": 37, - "h": 61 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:a1c52466e8cdc83633a9fbd5b8675ca7:19652e451f806ac9b4bbb01e17b071df:12f3eae8283ab6c8e555ff3e46b7d8dc$" - } -} \ No newline at end of file diff --git a/public/images/pokemon/variant/563_3.png b/public/images/pokemon/variant/563_3.png deleted file mode 100644 index d7988d44d23..00000000000 Binary files a/public/images/pokemon/variant/563_3.png and /dev/null differ diff --git a/public/images/pokemon/variant/622.json b/public/images/pokemon/variant/622.json index e43817498e7..9d3d631c473 100644 --- a/public/images/pokemon/variant/622.json +++ b/public/images/pokemon/variant/622.json @@ -1,20 +1,4 @@ { - "0": { - "106b63": "0d1e10", - "004a52": "102c16", - "84cece": "758076", - "191921": "191921", - "29848c": "224427", - "298c8c": "1c3820", - "5aada5": "3e5d43", - "106b7b": "102c16", - "ffefa5": "ff9942", - "dece94": "e46424", - "bdad73": "cb3000", - "6b4200": "54190e", - "c59c52": "a65c3f", - "9c7329": "763826" - }, "1": { "106b63": "732d02", "004a52": "4c1b11", diff --git a/public/images/pokemon/variant/622_1.png b/public/images/pokemon/variant/622_1.png deleted file mode 100644 index 615a9a629ae..00000000000 Binary files a/public/images/pokemon/variant/622_1.png and /dev/null differ diff --git a/public/images/pokemon/variant/622_2.png b/public/images/pokemon/variant/622_2.png deleted file mode 100644 index 1ce1c3e9f0e..00000000000 Binary files a/public/images/pokemon/variant/622_2.png and /dev/null differ diff --git a/public/images/pokemon/variant/623.json b/public/images/pokemon/variant/623.json index d4a00ad94ba..2a9f0774f9a 100644 --- a/public/images/pokemon/variant/623.json +++ b/public/images/pokemon/variant/623.json @@ -1,19 +1,4 @@ { - "0": { - "297b8c": "152c18", - "105263": "041408", - "5aa5a5": "2b3c2d", - "195a7b": "051b0a", - "84c5ce": "3f4a3f", - "003a52": "020e06", - "191921": "191921", - "ffefa5": "ff9942", - "bdad73": "e46424", - "dece94": "cb3000", - "6b4200": "5e1c0b", - "c59c52": "ad5735", - "9c7329": "943b21" - }, "1": { "297b8c": "6b2808", "105263": "8b2a05", diff --git a/public/images/pokemon/variant/623_1.json b/public/images/pokemon/variant/623_1.json deleted file mode 100644 index 3a12266f102..00000000000 --- a/public/images/pokemon/variant/623_1.json +++ /dev/null @@ -1,3590 +0,0 @@ -{ - "textures": [ - { - "image": "623_1.png", - "format": "RGBA8888", - "size": { - "w": 401, - "h": 401 - }, - "scale": 1, - "frames": [ - { - "filename": "0121.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 83, - "h": 80 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 83, - "h": 80 - }, - "frame": { - "x": 0, - "y": 0, - "w": 83, - "h": 80 - } - }, - { - "filename": "0122.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 83, - "h": 80 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 83, - "h": 80 - }, - "frame": { - "x": 0, - "y": 0, - "w": 83, - "h": 80 - } - }, - { - "filename": "0123.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 83, - "h": 80 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 83, - "h": 80 - }, - "frame": { - "x": 0, - "y": 80, - "w": 83, - "h": 80 - } - }, - { - "filename": "0124.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 83, - "h": 80 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 83, - "h": 80 - }, - "frame": { - "x": 0, - "y": 80, - "w": 83, - "h": 80 - } - }, - { - "filename": "0125.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 83, - "h": 80 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 83, - "h": 80 - }, - "frame": { - "x": 83, - "y": 0, - "w": 83, - "h": 80 - } - }, - { - "filename": "0126.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 83, - "h": 80 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 83, - "h": 80 - }, - "frame": { - "x": 83, - "y": 0, - "w": 83, - "h": 80 - } - }, - { - "filename": "0115.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 83, - "h": 80 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 83, - "h": 79 - }, - "frame": { - "x": 0, - "y": 160, - "w": 83, - "h": 79 - } - }, - { - "filename": "0116.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 83, - "h": 80 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 83, - "h": 79 - }, - "frame": { - "x": 0, - "y": 160, - "w": 83, - "h": 79 - } - }, - { - "filename": "0117.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 83, - "h": 80 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 83, - "h": 79 - }, - "frame": { - "x": 83, - "y": 80, - "w": 83, - "h": 79 - } - }, - { - "filename": "0118.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 83, - "h": 80 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 83, - "h": 79 - }, - "frame": { - "x": 83, - "y": 80, - "w": 83, - "h": 79 - } - }, - { - "filename": "0119.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 83, - "h": 80 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 83, - "h": 79 - }, - "frame": { - "x": 166, - "y": 0, - "w": 83, - "h": 79 - } - }, - { - "filename": "0120.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 83, - "h": 80 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 83, - "h": 79 - }, - "frame": { - "x": 166, - "y": 0, - "w": 83, - "h": 79 - } - }, - { - "filename": "0113.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 83, - "h": 80 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 81, - "h": 80 - }, - "frame": { - "x": 0, - "y": 239, - "w": 81, - "h": 80 - } - }, - { - "filename": "0114.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 83, - "h": 80 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 81, - "h": 80 - }, - "frame": { - "x": 0, - "y": 239, - "w": 81, - "h": 80 - } - }, - { - "filename": "0127.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 83, - "h": 80 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 81, - "h": 80 - }, - "frame": { - "x": 83, - "y": 159, - "w": 81, - "h": 80 - } - }, - { - "filename": "0128.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 83, - "h": 80 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 81, - "h": 80 - }, - "frame": { - "x": 83, - "y": 159, - "w": 81, - "h": 80 - } - }, - { - "filename": "0129.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 83, - "h": 80 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 81, - "h": 80 - }, - "frame": { - "x": 166, - "y": 79, - "w": 81, - "h": 80 - } - }, - { - "filename": "0130.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 83, - "h": 80 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 81, - "h": 80 - }, - "frame": { - "x": 166, - "y": 79, - "w": 81, - "h": 80 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 83, - "h": 80 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 79, - "h": 80 - }, - "frame": { - "x": 0, - "y": 319, - "w": 79, - "h": 80 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 83, - "h": 80 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 79, - "h": 80 - }, - "frame": { - "x": 0, - "y": 319, - "w": 79, - "h": 80 - } - }, - { - "filename": "0033.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 83, - "h": 80 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 79, - "h": 80 - }, - "frame": { - "x": 0, - "y": 319, - "w": 79, - "h": 80 - } - }, - { - "filename": "0034.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 83, - "h": 80 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 79, - "h": 80 - }, - "frame": { - "x": 0, - "y": 319, - "w": 79, - "h": 80 - } - }, - { - "filename": "0035.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 83, - "h": 80 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 79, - "h": 80 - }, - "frame": { - "x": 0, - "y": 319, - "w": 79, - "h": 80 - } - }, - { - "filename": "0036.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 83, - "h": 80 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 79, - "h": 80 - }, - "frame": { - "x": 0, - "y": 319, - "w": 79, - "h": 80 - } - }, - { - "filename": "0067.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 83, - "h": 80 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 79, - "h": 80 - }, - "frame": { - "x": 0, - "y": 319, - "w": 79, - "h": 80 - } - }, - { - "filename": "0068.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 83, - "h": 80 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 79, - "h": 80 - }, - "frame": { - "x": 0, - "y": 319, - "w": 79, - "h": 80 - } - }, - { - "filename": "0069.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 83, - "h": 80 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 79, - "h": 80 - }, - "frame": { - "x": 0, - "y": 319, - "w": 79, - "h": 80 - } - }, - { - "filename": "0070.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 83, - "h": 80 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 79, - "h": 80 - }, - "frame": { - "x": 0, - "y": 319, - "w": 79, - "h": 80 - } - }, - { - "filename": "0101.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 83, - "h": 80 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 79, - "h": 80 - }, - "frame": { - "x": 0, - "y": 319, - "w": 79, - "h": 80 - } - }, - { - "filename": "0102.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 83, - "h": 80 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 79, - "h": 80 - }, - "frame": { - "x": 0, - "y": 319, - "w": 79, - "h": 80 - } - }, - { - "filename": "0103.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 83, - "h": 80 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 79, - "h": 80 - }, - "frame": { - "x": 0, - "y": 319, - "w": 79, - "h": 80 - } - }, - { - "filename": "0104.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 83, - "h": 80 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 79, - "h": 80 - }, - "frame": { - "x": 0, - "y": 319, - "w": 79, - "h": 80 - } - }, - { - "filename": "0135.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 83, - "h": 80 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 79, - "h": 80 - }, - "frame": { - "x": 0, - "y": 319, - "w": 79, - "h": 80 - } - }, - { - "filename": "0136.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 83, - "h": 80 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 79, - "h": 80 - }, - "frame": { - "x": 0, - "y": 319, - "w": 79, - "h": 80 - } - }, - { - "filename": "0137.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 83, - "h": 80 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 79, - "h": 80 - }, - "frame": { - "x": 0, - "y": 319, - "w": 79, - "h": 80 - } - }, - { - "filename": "0138.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 83, - "h": 80 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 79, - "h": 80 - }, - "frame": { - "x": 0, - "y": 319, - "w": 79, - "h": 80 - } - }, - { - "filename": "0169.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 83, - "h": 80 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 79, - "h": 80 - }, - "frame": { - "x": 0, - "y": 319, - "w": 79, - "h": 80 - } - }, - { - "filename": "0170.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 83, - "h": 80 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 79, - "h": 80 - }, - "frame": { - "x": 0, - "y": 319, - "w": 79, - "h": 80 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 83, - "h": 80 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 79, - "h": 80 - }, - "frame": { - "x": 81, - "y": 239, - "w": 79, - "h": 80 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 83, - "h": 80 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 79, - "h": 80 - }, - "frame": { - "x": 81, - "y": 239, - "w": 79, - "h": 80 - } - }, - { - "filename": "0031.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 83, - "h": 80 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 79, - "h": 80 - }, - "frame": { - "x": 81, - "y": 239, - "w": 79, - "h": 80 - } - }, - { - "filename": "0032.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 83, - "h": 80 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 79, - "h": 80 - }, - "frame": { - "x": 81, - "y": 239, - "w": 79, - "h": 80 - } - }, - { - "filename": "0037.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 83, - "h": 80 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 79, - "h": 80 - }, - "frame": { - "x": 81, - "y": 239, - "w": 79, - "h": 80 - } - }, - { - "filename": "0038.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 83, - "h": 80 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 79, - "h": 80 - }, - "frame": { - "x": 81, - "y": 239, - "w": 79, - "h": 80 - } - }, - { - "filename": "0065.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 83, - "h": 80 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 79, - "h": 80 - }, - "frame": { - "x": 81, - "y": 239, - "w": 79, - "h": 80 - } - }, - { - "filename": "0066.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 83, - "h": 80 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 79, - "h": 80 - }, - "frame": { - "x": 81, - "y": 239, - "w": 79, - "h": 80 - } - }, - { - "filename": "0071.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 83, - "h": 80 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 79, - "h": 80 - }, - "frame": { - "x": 81, - "y": 239, - "w": 79, - "h": 80 - } - }, - { - "filename": "0072.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 83, - "h": 80 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 79, - "h": 80 - }, - "frame": { - "x": 81, - "y": 239, - "w": 79, - "h": 80 - } - }, - { - "filename": "0099.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 83, - "h": 80 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 79, - "h": 80 - }, - "frame": { - "x": 81, - "y": 239, - "w": 79, - "h": 80 - } - }, - { - "filename": "0100.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 83, - "h": 80 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 79, - "h": 80 - }, - "frame": { - "x": 81, - "y": 239, - "w": 79, - "h": 80 - } - }, - { - "filename": "0139.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 83, - "h": 80 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 79, - "h": 80 - }, - "frame": { - "x": 81, - "y": 239, - "w": 79, - "h": 80 - } - }, - { - "filename": "0140.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 83, - "h": 80 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 79, - "h": 80 - }, - "frame": { - "x": 81, - "y": 239, - "w": 79, - "h": 80 - } - }, - { - "filename": "0167.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 83, - "h": 80 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 79, - "h": 80 - }, - "frame": { - "x": 81, - "y": 239, - "w": 79, - "h": 80 - } - }, - { - "filename": "0168.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 83, - "h": 80 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 79, - "h": 80 - }, - "frame": { - "x": 81, - "y": 239, - "w": 79, - "h": 80 - } - }, - { - "filename": "0105.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 83, - "h": 80 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 79, - "h": 80 - }, - "frame": { - "x": 164, - "y": 159, - "w": 79, - "h": 80 - } - }, - { - "filename": "0106.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 83, - "h": 80 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 79, - "h": 80 - }, - "frame": { - "x": 164, - "y": 159, - "w": 79, - "h": 80 - } - }, - { - "filename": "0133.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 83, - "h": 80 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 79, - "h": 80 - }, - "frame": { - "x": 164, - "y": 159, - "w": 79, - "h": 80 - } - }, - { - "filename": "0134.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 83, - "h": 80 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 79, - "h": 80 - }, - "frame": { - "x": 164, - "y": 159, - "w": 79, - "h": 80 - } - }, - { - "filename": "0107.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 83, - "h": 80 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 79, - "h": 80 - }, - "frame": { - "x": 79, - "y": 319, - "w": 79, - "h": 80 - } - }, - { - "filename": "0108.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 83, - "h": 80 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 79, - "h": 80 - }, - "frame": { - "x": 79, - "y": 319, - "w": 79, - "h": 80 - } - }, - { - "filename": "0109.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 83, - "h": 80 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 79, - "h": 80 - }, - "frame": { - "x": 160, - "y": 239, - "w": 79, - "h": 80 - } - }, - { - "filename": "0110.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 83, - "h": 80 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 79, - "h": 80 - }, - "frame": { - "x": 160, - "y": 239, - "w": 79, - "h": 80 - } - }, - { - "filename": "0111.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 83, - "h": 80 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 79, - "h": 80 - }, - "frame": { - "x": 158, - "y": 319, - "w": 79, - "h": 80 - } - }, - { - "filename": "0112.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 83, - "h": 80 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 79, - "h": 80 - }, - "frame": { - "x": 158, - "y": 319, - "w": 79, - "h": 80 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 83, - "h": 80 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 79, - "h": 79 - }, - "frame": { - "x": 249, - "y": 0, - "w": 79, - "h": 79 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 83, - "h": 80 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 79, - "h": 79 - }, - "frame": { - "x": 249, - "y": 0, - "w": 79, - "h": 79 - } - }, - { - "filename": "0029.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 83, - "h": 80 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 79, - "h": 79 - }, - "frame": { - "x": 249, - "y": 0, - "w": 79, - "h": 79 - } - }, - { - "filename": "0030.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 83, - "h": 80 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 79, - "h": 79 - }, - "frame": { - "x": 249, - "y": 0, - "w": 79, - "h": 79 - } - }, - { - "filename": "0039.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 83, - "h": 80 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 79, - "h": 79 - }, - "frame": { - "x": 249, - "y": 0, - "w": 79, - "h": 79 - } - }, - { - "filename": "0040.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 83, - "h": 80 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 79, - "h": 79 - }, - "frame": { - "x": 249, - "y": 0, - "w": 79, - "h": 79 - } - }, - { - "filename": "0063.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 83, - "h": 80 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 79, - "h": 79 - }, - "frame": { - "x": 249, - "y": 0, - "w": 79, - "h": 79 - } - }, - { - "filename": "0064.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 83, - "h": 80 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 79, - "h": 79 - }, - "frame": { - "x": 249, - "y": 0, - "w": 79, - "h": 79 - } - }, - { - "filename": "0073.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 83, - "h": 80 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 79, - "h": 79 - }, - "frame": { - "x": 249, - "y": 0, - "w": 79, - "h": 79 - } - }, - { - "filename": "0074.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 83, - "h": 80 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 79, - "h": 79 - }, - "frame": { - "x": 249, - "y": 0, - "w": 79, - "h": 79 - } - }, - { - "filename": "0097.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 83, - "h": 80 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 79, - "h": 79 - }, - "frame": { - "x": 249, - "y": 0, - "w": 79, - "h": 79 - } - }, - { - "filename": "0098.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 83, - "h": 80 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 79, - "h": 79 - }, - "frame": { - "x": 249, - "y": 0, - "w": 79, - "h": 79 - } - }, - { - "filename": "0141.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 83, - "h": 80 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 79, - "h": 79 - }, - "frame": { - "x": 249, - "y": 0, - "w": 79, - "h": 79 - } - }, - { - "filename": "0142.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 83, - "h": 80 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 79, - "h": 79 - }, - "frame": { - "x": 249, - "y": 0, - "w": 79, - "h": 79 - } - }, - { - "filename": "0165.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 83, - "h": 80 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 79, - "h": 79 - }, - "frame": { - "x": 249, - "y": 0, - "w": 79, - "h": 79 - } - }, - { - "filename": "0166.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 83, - "h": 80 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 79, - "h": 79 - }, - "frame": { - "x": 249, - "y": 0, - "w": 79, - "h": 79 - } - }, - { - "filename": "0131.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 83, - "h": 80 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 79, - "h": 80 - }, - "frame": { - "x": 247, - "y": 79, - "w": 79, - "h": 80 - } - }, - { - "filename": "0132.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 83, - "h": 80 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 79, - "h": 80 - }, - "frame": { - "x": 247, - "y": 79, - "w": 79, - "h": 80 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 83, - "h": 80 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 79, - "h": 79 - }, - "frame": { - "x": 243, - "y": 159, - "w": 79, - "h": 79 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 83, - "h": 80 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 79, - "h": 79 - }, - "frame": { - "x": 243, - "y": 159, - "w": 79, - "h": 79 - } - }, - { - "filename": "0027.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 83, - "h": 80 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 79, - "h": 79 - }, - "frame": { - "x": 243, - "y": 159, - "w": 79, - "h": 79 - } - }, - { - "filename": "0028.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 83, - "h": 80 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 79, - "h": 79 - }, - "frame": { - "x": 243, - "y": 159, - "w": 79, - "h": 79 - } - }, - { - "filename": "0041.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 83, - "h": 80 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 79, - "h": 79 - }, - "frame": { - "x": 243, - "y": 159, - "w": 79, - "h": 79 - } - }, - { - "filename": "0042.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 83, - "h": 80 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 79, - "h": 79 - }, - "frame": { - "x": 243, - "y": 159, - "w": 79, - "h": 79 - } - }, - { - "filename": "0061.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 83, - "h": 80 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 79, - "h": 79 - }, - "frame": { - "x": 243, - "y": 159, - "w": 79, - "h": 79 - } - }, - { - "filename": "0062.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 83, - "h": 80 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 79, - "h": 79 - }, - "frame": { - "x": 243, - "y": 159, - "w": 79, - "h": 79 - } - }, - { - "filename": "0075.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 83, - "h": 80 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 79, - "h": 79 - }, - "frame": { - "x": 243, - "y": 159, - "w": 79, - "h": 79 - } - }, - { - "filename": "0076.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 83, - "h": 80 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 79, - "h": 79 - }, - "frame": { - "x": 243, - "y": 159, - "w": 79, - "h": 79 - } - }, - { - "filename": "0095.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 83, - "h": 80 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 79, - "h": 79 - }, - "frame": { - "x": 243, - "y": 159, - "w": 79, - "h": 79 - } - }, - { - "filename": "0096.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 83, - "h": 80 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 79, - "h": 79 - }, - "frame": { - "x": 243, - "y": 159, - "w": 79, - "h": 79 - } - }, - { - "filename": "0143.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 83, - "h": 80 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 79, - "h": 79 - }, - "frame": { - "x": 243, - "y": 159, - "w": 79, - "h": 79 - } - }, - { - "filename": "0144.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 83, - "h": 80 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 79, - "h": 79 - }, - "frame": { - "x": 243, - "y": 159, - "w": 79, - "h": 79 - } - }, - { - "filename": "0163.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 83, - "h": 80 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 79, - "h": 79 - }, - "frame": { - "x": 243, - "y": 159, - "w": 79, - "h": 79 - } - }, - { - "filename": "0164.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 83, - "h": 80 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 79, - "h": 79 - }, - "frame": { - "x": 243, - "y": 159, - "w": 79, - "h": 79 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 83, - "h": 80 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 79, - "h": 78 - }, - "frame": { - "x": 322, - "y": 159, - "w": 79, - "h": 78 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 83, - "h": 80 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 79, - "h": 78 - }, - "frame": { - "x": 322, - "y": 159, - "w": 79, - "h": 78 - } - }, - { - "filename": "0025.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 83, - "h": 80 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 79, - "h": 78 - }, - "frame": { - "x": 322, - "y": 159, - "w": 79, - "h": 78 - } - }, - { - "filename": "0026.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 83, - "h": 80 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 79, - "h": 78 - }, - "frame": { - "x": 322, - "y": 159, - "w": 79, - "h": 78 - } - }, - { - "filename": "0043.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 83, - "h": 80 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 79, - "h": 78 - }, - "frame": { - "x": 322, - "y": 159, - "w": 79, - "h": 78 - } - }, - { - "filename": "0044.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 83, - "h": 80 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 79, - "h": 78 - }, - "frame": { - "x": 322, - "y": 159, - "w": 79, - "h": 78 - } - }, - { - "filename": "0059.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 83, - "h": 80 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 79, - "h": 78 - }, - "frame": { - "x": 322, - "y": 159, - "w": 79, - "h": 78 - } - }, - { - "filename": "0060.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 83, - "h": 80 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 79, - "h": 78 - }, - "frame": { - "x": 322, - "y": 159, - "w": 79, - "h": 78 - } - }, - { - "filename": "0077.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 83, - "h": 80 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 79, - "h": 78 - }, - "frame": { - "x": 322, - "y": 159, - "w": 79, - "h": 78 - } - }, - { - "filename": "0078.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 83, - "h": 80 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 79, - "h": 78 - }, - "frame": { - "x": 322, - "y": 159, - "w": 79, - "h": 78 - } - }, - { - "filename": "0093.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 83, - "h": 80 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 79, - "h": 78 - }, - "frame": { - "x": 322, - "y": 159, - "w": 79, - "h": 78 - } - }, - { - "filename": "0094.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 83, - "h": 80 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 79, - "h": 78 - }, - "frame": { - "x": 322, - "y": 159, - "w": 79, - "h": 78 - } - }, - { - "filename": "0145.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 83, - "h": 80 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 79, - "h": 78 - }, - "frame": { - "x": 322, - "y": 159, - "w": 79, - "h": 78 - } - }, - { - "filename": "0146.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 83, - "h": 80 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 79, - "h": 78 - }, - "frame": { - "x": 322, - "y": 159, - "w": 79, - "h": 78 - } - }, - { - "filename": "0161.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 83, - "h": 80 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 79, - "h": 78 - }, - "frame": { - "x": 322, - "y": 159, - "w": 79, - "h": 78 - } - }, - { - "filename": "0162.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 83, - "h": 80 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 79, - "h": 78 - }, - "frame": { - "x": 322, - "y": 159, - "w": 79, - "h": 78 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 83, - "h": 80 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 79, - "h": 77 - }, - "frame": { - "x": 322, - "y": 237, - "w": 79, - "h": 77 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 83, - "h": 80 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 79, - "h": 77 - }, - "frame": { - "x": 322, - "y": 237, - "w": 79, - "h": 77 - } - }, - { - "filename": "0023.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 83, - "h": 80 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 79, - "h": 77 - }, - "frame": { - "x": 322, - "y": 237, - "w": 79, - "h": 77 - } - }, - { - "filename": "0024.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 83, - "h": 80 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 79, - "h": 77 - }, - "frame": { - "x": 322, - "y": 237, - "w": 79, - "h": 77 - } - }, - { - "filename": "0045.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 83, - "h": 80 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 79, - "h": 77 - }, - "frame": { - "x": 322, - "y": 237, - "w": 79, - "h": 77 - } - }, - { - "filename": "0046.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 83, - "h": 80 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 79, - "h": 77 - }, - "frame": { - "x": 322, - "y": 237, - "w": 79, - "h": 77 - } - }, - { - "filename": "0057.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 83, - "h": 80 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 79, - "h": 77 - }, - "frame": { - "x": 322, - "y": 237, - "w": 79, - "h": 77 - } - }, - { - "filename": "0058.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 83, - "h": 80 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 79, - "h": 77 - }, - "frame": { - "x": 322, - "y": 237, - "w": 79, - "h": 77 - } - }, - { - "filename": "0079.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 83, - "h": 80 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 79, - "h": 77 - }, - "frame": { - "x": 322, - "y": 237, - "w": 79, - "h": 77 - } - }, - { - "filename": "0080.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 83, - "h": 80 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 79, - "h": 77 - }, - "frame": { - "x": 322, - "y": 237, - "w": 79, - "h": 77 - } - }, - { - "filename": "0091.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 83, - "h": 80 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 79, - "h": 77 - }, - "frame": { - "x": 322, - "y": 237, - "w": 79, - "h": 77 - } - }, - { - "filename": "0092.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 83, - "h": 80 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 79, - "h": 77 - }, - "frame": { - "x": 322, - "y": 237, - "w": 79, - "h": 77 - } - }, - { - "filename": "0147.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 83, - "h": 80 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 79, - "h": 77 - }, - "frame": { - "x": 322, - "y": 237, - "w": 79, - "h": 77 - } - }, - { - "filename": "0148.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 83, - "h": 80 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 79, - "h": 77 - }, - "frame": { - "x": 322, - "y": 237, - "w": 79, - "h": 77 - } - }, - { - "filename": "0159.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 83, - "h": 80 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 79, - "h": 77 - }, - "frame": { - "x": 322, - "y": 237, - "w": 79, - "h": 77 - } - }, - { - "filename": "0160.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 83, - "h": 80 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 79, - "h": 77 - }, - "frame": { - "x": 322, - "y": 237, - "w": 79, - "h": 77 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 83, - "h": 80 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 81, - "h": 77 - }, - "frame": { - "x": 239, - "y": 239, - "w": 81, - "h": 77 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 83, - "h": 80 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 81, - "h": 77 - }, - "frame": { - "x": 239, - "y": 239, - "w": 81, - "h": 77 - } - }, - { - "filename": "0021.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 83, - "h": 80 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 81, - "h": 77 - }, - "frame": { - "x": 239, - "y": 239, - "w": 81, - "h": 77 - } - }, - { - "filename": "0022.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 83, - "h": 80 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 81, - "h": 77 - }, - "frame": { - "x": 239, - "y": 239, - "w": 81, - "h": 77 - } - }, - { - "filename": "0047.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 83, - "h": 80 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 81, - "h": 77 - }, - "frame": { - "x": 239, - "y": 239, - "w": 81, - "h": 77 - } - }, - { - "filename": "0048.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 83, - "h": 80 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 81, - "h": 77 - }, - "frame": { - "x": 239, - "y": 239, - "w": 81, - "h": 77 - } - }, - { - "filename": "0055.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 83, - "h": 80 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 81, - "h": 77 - }, - "frame": { - "x": 239, - "y": 239, - "w": 81, - "h": 77 - } - }, - { - "filename": "0056.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 83, - "h": 80 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 81, - "h": 77 - }, - "frame": { - "x": 239, - "y": 239, - "w": 81, - "h": 77 - } - }, - { - "filename": "0081.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 83, - "h": 80 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 81, - "h": 77 - }, - "frame": { - "x": 239, - "y": 239, - "w": 81, - "h": 77 - } - }, - { - "filename": "0082.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 83, - "h": 80 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 81, - "h": 77 - }, - "frame": { - "x": 239, - "y": 239, - "w": 81, - "h": 77 - } - }, - { - "filename": "0089.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 83, - "h": 80 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 81, - "h": 77 - }, - "frame": { - "x": 239, - "y": 239, - "w": 81, - "h": 77 - } - }, - { - "filename": "0090.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 83, - "h": 80 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 81, - "h": 77 - }, - "frame": { - "x": 239, - "y": 239, - "w": 81, - "h": 77 - } - }, - { - "filename": "0149.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 83, - "h": 80 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 81, - "h": 77 - }, - "frame": { - "x": 239, - "y": 239, - "w": 81, - "h": 77 - } - }, - { - "filename": "0150.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 83, - "h": 80 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 81, - "h": 77 - }, - "frame": { - "x": 239, - "y": 239, - "w": 81, - "h": 77 - } - }, - { - "filename": "0157.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 83, - "h": 80 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 81, - "h": 77 - }, - "frame": { - "x": 239, - "y": 239, - "w": 81, - "h": 77 - } - }, - { - "filename": "0158.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 83, - "h": 80 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 81, - "h": 77 - }, - "frame": { - "x": 239, - "y": 239, - "w": 81, - "h": 77 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 83, - "h": 80 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 81, - "h": 76 - }, - "frame": { - "x": 320, - "y": 314, - "w": 81, - "h": 76 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 83, - "h": 80 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 81, - "h": 76 - }, - "frame": { - "x": 320, - "y": 314, - "w": 81, - "h": 76 - } - }, - { - "filename": "0019.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 83, - "h": 80 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 81, - "h": 76 - }, - "frame": { - "x": 320, - "y": 314, - "w": 81, - "h": 76 - } - }, - { - "filename": "0020.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 83, - "h": 80 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 81, - "h": 76 - }, - "frame": { - "x": 320, - "y": 314, - "w": 81, - "h": 76 - } - }, - { - "filename": "0049.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 83, - "h": 80 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 81, - "h": 76 - }, - "frame": { - "x": 320, - "y": 314, - "w": 81, - "h": 76 - } - }, - { - "filename": "0050.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 83, - "h": 80 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 81, - "h": 76 - }, - "frame": { - "x": 320, - "y": 314, - "w": 81, - "h": 76 - } - }, - { - "filename": "0053.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 83, - "h": 80 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 81, - "h": 76 - }, - "frame": { - "x": 320, - "y": 314, - "w": 81, - "h": 76 - } - }, - { - "filename": "0054.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 83, - "h": 80 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 81, - "h": 76 - }, - "frame": { - "x": 320, - "y": 314, - "w": 81, - "h": 76 - } - }, - { - "filename": "0083.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 83, - "h": 80 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 81, - "h": 76 - }, - "frame": { - "x": 320, - "y": 314, - "w": 81, - "h": 76 - } - }, - { - "filename": "0084.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 83, - "h": 80 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 81, - "h": 76 - }, - "frame": { - "x": 320, - "y": 314, - "w": 81, - "h": 76 - } - }, - { - "filename": "0087.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 83, - "h": 80 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 81, - "h": 76 - }, - "frame": { - "x": 320, - "y": 314, - "w": 81, - "h": 76 - } - }, - { - "filename": "0088.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 83, - "h": 80 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 81, - "h": 76 - }, - "frame": { - "x": 320, - "y": 314, - "w": 81, - "h": 76 - } - }, - { - "filename": "0151.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 83, - "h": 80 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 81, - "h": 76 - }, - "frame": { - "x": 320, - "y": 314, - "w": 81, - "h": 76 - } - }, - { - "filename": "0152.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 83, - "h": 80 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 81, - "h": 76 - }, - "frame": { - "x": 320, - "y": 314, - "w": 81, - "h": 76 - } - }, - { - "filename": "0155.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 83, - "h": 80 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 81, - "h": 76 - }, - "frame": { - "x": 320, - "y": 314, - "w": 81, - "h": 76 - } - }, - { - "filename": "0156.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 83, - "h": 80 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 81, - "h": 76 - }, - "frame": { - "x": 320, - "y": 314, - "w": 81, - "h": 76 - } - }, - { - "filename": "0017.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 83, - "h": 80 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 82, - "h": 75 - }, - "frame": { - "x": 237, - "y": 319, - "w": 82, - "h": 75 - } - }, - { - "filename": "0018.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 83, - "h": 80 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 82, - "h": 75 - }, - "frame": { - "x": 237, - "y": 319, - "w": 82, - "h": 75 - } - }, - { - "filename": "0051.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 83, - "h": 80 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 82, - "h": 75 - }, - "frame": { - "x": 237, - "y": 319, - "w": 82, - "h": 75 - } - }, - { - "filename": "0052.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 83, - "h": 80 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 82, - "h": 75 - }, - "frame": { - "x": 237, - "y": 319, - "w": 82, - "h": 75 - } - }, - { - "filename": "0085.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 83, - "h": 80 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 82, - "h": 75 - }, - "frame": { - "x": 237, - "y": 319, - "w": 82, - "h": 75 - } - }, - { - "filename": "0086.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 83, - "h": 80 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 82, - "h": 75 - }, - "frame": { - "x": 237, - "y": 319, - "w": 82, - "h": 75 - } - }, - { - "filename": "0153.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 83, - "h": 80 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 82, - "h": 75 - }, - "frame": { - "x": 237, - "y": 319, - "w": 82, - "h": 75 - } - }, - { - "filename": "0154.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 83, - "h": 80 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 82, - "h": 75 - }, - "frame": { - "x": 237, - "y": 319, - "w": 82, - "h": 75 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:76e8001e2d30637bbf46d66a3c01cc86:32d4799151bd0a494e1cc16c07cc1afb:869abf8e0bcb859d5abfb33d03e5db07$" - } -} \ No newline at end of file diff --git a/public/images/pokemon/variant/623_1.png b/public/images/pokemon/variant/623_1.png deleted file mode 100644 index 836f46d459f..00000000000 Binary files a/public/images/pokemon/variant/623_1.png and /dev/null differ diff --git a/public/images/pokemon/variant/623_2.png b/public/images/pokemon/variant/623_2.png deleted file mode 100644 index fc7de7bdccb..00000000000 Binary files a/public/images/pokemon/variant/623_2.png and /dev/null differ diff --git a/public/images/pokemon/variant/802.json b/public/images/pokemon/variant/802.json index 841bb430fad..95a92d8babc 100644 --- a/public/images/pokemon/variant/802.json +++ b/public/images/pokemon/variant/802.json @@ -24,9 +24,9 @@ "f2a455": "ff9a50" }, "2": { - "2c3e30": "5a0423", - "6a806d": "ce3e63", - "536155": "97123b", + "2c3e30": "508294", + "6a806d": "a7eaee", + "536155": "82b7c3", "101010": "101010", "2d3137": "5a0423", "747778": "ce3e63", diff --git a/public/images/pokemon/variant/_masterlist.json b/public/images/pokemon/variant/_masterlist.json index e2feeaa9e55..a60e25a7c9d 100644 --- a/public/images/pokemon/variant/_masterlist.json +++ b/public/images/pokemon/variant/_masterlist.json @@ -125,12 +125,12 @@ 1 ], "41": [ - 1, + 0, 1, 1 ], "42": [ - 1, + 0, 1, 1 ], @@ -480,7 +480,7 @@ 2 ], "169": [ - 1, + 0, 1, 1 ], @@ -1721,8 +1721,8 @@ ], "563": [ 0, - 2, - 2 + 1, + 1 ], "568": [ 0, @@ -1895,12 +1895,12 @@ 1 ], "622": [ - 1, + 0, 1, 1 ], "623": [ - 2, + 0, 1, 1 ], @@ -1939,36 +1939,6 @@ 1, 1 ], - "641-incarnate": [ - 0, - 0, - 0 - ], - "641-therian": [ - 0, - 0, - 0 - ], - "642-incarnate": [ - 0, - 0, - 0 - ], - "642-therian": [ - 0, - 0, - 0 - ], - "645-incarnate": [ - 0, - 0, - 0 - ], - "645-therian": [ - 0, - 0, - 0 - ], "647-resolute": [ 0, 1, @@ -3389,6 +3359,11 @@ 1, 1, 1 + ], + "6215": [ + 0, + 1, + 1 ] }, "back": { @@ -3518,12 +3493,12 @@ 1 ], "41": [ - 1, + 0, 1, 1 ], "42": [ - 1, + 0, 1, 1 ], @@ -3840,7 +3815,7 @@ "150-mega-y": [ 0, 1, - 0 + 1 ], "150": [ 0, @@ -3873,7 +3848,7 @@ 1 ], "169": [ - 1, + 0, 1, 1 ], @@ -5288,12 +5263,12 @@ 1 ], "622": [ - 1, + 0, 1, 1 ], "623": [ - 2, + 0, 1, 1 ], @@ -6772,6 +6747,11 @@ 1, 1, 1 + ], + "6215": [ + 0, + 1, + 1 ] } }, diff --git a/public/images/pokemon/variant/back/150-mega-y.json b/public/images/pokemon/variant/back/150-mega-y.json index d00e44e0579..daae4ff6ca7 100644 --- a/public/images/pokemon/variant/back/150-mega-y.json +++ b/public/images/pokemon/variant/back/150-mega-y.json @@ -11,5 +11,18 @@ "6e318c": "318c8a", "f8f8f8": "f8f8f8", "f25555": "4bac9a" + }, + "2": { + "101010": "101010", + "36364d": "884c17", + "461f59": "59201f", + "6e318c": "8c3331", + "7a7a99": "d68f40", + "9643bf": "bf4c43", + "be55f2": "f26155", + "acacbf": "edaf5b", + "f25555": "f25555", + "f8f8f8": "ffdd98", + "dadaf2": "ffdd98" } -} \ No newline at end of file +} diff --git a/public/images/pokemon/variant/back/169.json b/public/images/pokemon/variant/back/169.json index b66c1c82caa..34cfabeb573 100644 --- a/public/images/pokemon/variant/back/169.json +++ b/public/images/pokemon/variant/back/169.json @@ -1,27 +1,18 @@ { - "0": { - "63197b": "142557", - "a55ace": "6265b4", - "7b4a9c": "323f81", - "b57bce": "99a3ee", - "101010": "101010", - "08426b": "206f9e", - "216b94": "4aa6ce" - }, "1": { - "63197b": "9c528c", - "a55ace": "ffb5f7", - "7b4a9c": "d684ce", - "b57bce": "ffd6ef", + "63197b": "14093b", + "a55ace": "3d4381", + "7b4a9c": "2f2a5f", + "b57bce": "666fb4", "101010": "101010", - "08426b": "638400", - "216b94": "8ca508" + "08426b": "b06130", + "216b94": "ffb049" }, "2": { "63197b": "3c1e39", - "a55ace": "b5a3b3", - "7b4a9c": "958093", - "b57bce": "d4c3d1", + "a55ace": "b49db2", + "7b4a9c": "80607b", + "b57bce": "c8b6c2", "101010": "101010", "08426b": "901606", "216b94": "b52c0c" diff --git a/public/images/pokemon/variant/back/41.json b/public/images/pokemon/variant/back/41.json index 6a75080db16..42283672198 100644 --- a/public/images/pokemon/variant/back/41.json +++ b/public/images/pokemon/variant/back/41.json @@ -1,16 +1,4 @@ { - "0": { - "101010": "101010", - "8cb5ef": "6569c0", - "4a427b": "142557", - "637bb5": "323f81", - "73215a": "196297", - "b5529c": "61b6da", - "bdceff": "959ee9", - "ffffff": "ffffff", - "636363": "636363", - "d6d6d6": "d6d6d6" - }, "1": { "101010": "101010", "8cb5ef": "205182", @@ -25,12 +13,12 @@ }, "2": { "101010": "101010", - "8cb5ef": "c1aec0", + "8cb5ef": "cbabca", "4a427b": "4d3259", - "637bb5": "866881", + "637bb5": "916c8b", "73215a": "670f10", "b5529c": "94241c", - "bdceff": "dfcddd", + "bdceff": "e8d2e6", "ffffff": "ffffff", "636363": "636363", "d6d6d6": "d6d6d6" diff --git a/public/images/pokemon/variant/back/41_1.png b/public/images/pokemon/variant/back/41_1.png deleted file mode 100644 index 6943a2eddb4..00000000000 Binary files a/public/images/pokemon/variant/back/41_1.png and /dev/null differ diff --git a/public/images/pokemon/variant/back/42.json b/public/images/pokemon/variant/back/42.json index 54417a7af59..df3cf67d3ef 100644 --- a/public/images/pokemon/variant/back/42.json +++ b/public/images/pokemon/variant/back/42.json @@ -1,15 +1,4 @@ { - "0": { - "3a3a7b": "142557", - "6384ce": "323f81", - "adceff": "99a3ee", - "5aadef": "6265b4", - "631052": "093263", - "000000": "000000", - "ce6bb5": "61b6da", - "ad52ad": "348cc1", - "943a7b": "348cc1" - }, "1": { "3a3a7b": "14093b", "6384ce": "12245c", @@ -22,10 +11,10 @@ "943a7b": "af4e0c" }, "2": { - "3a3a7b": "584055", - "6384ce": "866881", + "3a3a7b": "3d2349", + "6384ce": "916c8b", "adceff": "dfcddd", - "5aadef": "c1aec0", + "5aadef": "cbabca", "631052": "54070c", "000000": "000000", "ce6bb5": "bc3b1d", diff --git a/public/images/pokemon/variant/back/42_1.png b/public/images/pokemon/variant/back/42_1.png deleted file mode 100644 index 2f649cdc649..00000000000 Binary files a/public/images/pokemon/variant/back/42_1.png and /dev/null differ diff --git a/public/images/pokemon/variant/back/445.json b/public/images/pokemon/variant/back/445.json index c5b10066d10..7bf76d03212 100644 --- a/public/images/pokemon/variant/back/445.json +++ b/public/images/pokemon/variant/back/445.json @@ -1,8 +1,8 @@ { "0": { - "292952": "091f4e", - "5a63ad": "33719e", - "42428c": "1e4b77", + "292952": "0a1347", + "5a63ad": "226596", + "42428c": "264074", "7b7bce": "65a2d5", "101010": "101010", "c59410": "3aadc5", diff --git a/public/images/pokemon/variant/back/622.json b/public/images/pokemon/variant/back/622.json index 9ad7426a9d7..97f38954bab 100644 --- a/public/images/pokemon/variant/back/622.json +++ b/public/images/pokemon/variant/back/622.json @@ -1,20 +1,4 @@ { - "0": { - "298c8c": "427373", - "5aada5": "6b9c94", - "84cece": "94bdbd", - "004a52": "192121", - "106b63": "21524a", - "191921": "191921", - "106b7b": "293a42", - "29848c": "424a5a", - "6b4200": "523a10", - "c59c52": "b59463", - "9c7329": "846b3a", - "dece94": "b5de21", - "ffefa5": "d6ff42", - "bdad73": "94bd00" - }, "1": { "298c8c": "793907", "5aada5": "9d5915", diff --git a/public/images/pokemon/variant/back/622_1.png b/public/images/pokemon/variant/back/622_1.png deleted file mode 100644 index 8caa7b15ac0..00000000000 Binary files a/public/images/pokemon/variant/back/622_1.png and /dev/null differ diff --git a/public/images/pokemon/variant/back/622_2.png b/public/images/pokemon/variant/back/622_2.png deleted file mode 100644 index 9e57b6fd73a..00000000000 Binary files a/public/images/pokemon/variant/back/622_2.png and /dev/null differ diff --git a/public/images/pokemon/variant/back/623.json b/public/images/pokemon/variant/back/623.json index 56017b98f59..7c3429ecb26 100644 --- a/public/images/pokemon/variant/back/623.json +++ b/public/images/pokemon/variant/back/623.json @@ -1,16 +1,4 @@ { - "0": { - "003a52": "020e06", - "195a7b": "051b0a", - "191921": "191921", - "297b8c": "152c18", - "84c5ce": "3f4a3f", - "5aa5a5": "2b3c2d", - "105263": "041408", - "6b4200": "54190e", - "9c7329": "763826", - "c59c52": "a65c3f" - }, "1": { "003a52": "471205", "195a7b": "4d0a00", diff --git a/public/images/pokemon/variant/back/623_1.json b/public/images/pokemon/variant/back/623_1.json deleted file mode 100644 index 893fe66c597..00000000000 --- a/public/images/pokemon/variant/back/623_1.json +++ /dev/null @@ -1,3590 +0,0 @@ -{ - "textures": [ - { - "image": "623_1.png", - "format": "RGBA8888", - "size": { - "w": 392, - "h": 392 - }, - "scale": 1, - "frames": [ - { - "filename": "0123.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 78, - "h": 80 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 78, - "h": 79 - }, - "frame": { - "x": 0, - "y": 0, - "w": 78, - "h": 79 - } - }, - { - "filename": "0124.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 78, - "h": 80 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 78, - "h": 79 - }, - "frame": { - "x": 0, - "y": 0, - "w": 78, - "h": 79 - } - }, - { - "filename": "0115.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 78, - "h": 80 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 78, - "h": 78 - }, - "frame": { - "x": 0, - "y": 79, - "w": 78, - "h": 78 - } - }, - { - "filename": "0116.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 78, - "h": 80 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 78, - "h": 78 - }, - "frame": { - "x": 0, - "y": 79, - "w": 78, - "h": 78 - } - }, - { - "filename": "0117.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 78, - "h": 80 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 78, - "h": 78 - }, - "frame": { - "x": 78, - "y": 0, - "w": 78, - "h": 78 - } - }, - { - "filename": "0118.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 78, - "h": 80 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 78, - "h": 78 - }, - "frame": { - "x": 78, - "y": 0, - "w": 78, - "h": 78 - } - }, - { - "filename": "0119.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 78, - "h": 80 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 78, - "h": 78 - }, - "frame": { - "x": 78, - "y": 0, - "w": 78, - "h": 78 - } - }, - { - "filename": "0120.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 78, - "h": 80 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 78, - "h": 78 - }, - "frame": { - "x": 78, - "y": 0, - "w": 78, - "h": 78 - } - }, - { - "filename": "0121.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 78, - "h": 80 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 78, - "h": 78 - }, - "frame": { - "x": 0, - "y": 157, - "w": 78, - "h": 78 - } - }, - { - "filename": "0122.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 78, - "h": 80 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 78, - "h": 78 - }, - "frame": { - "x": 0, - "y": 157, - "w": 78, - "h": 78 - } - }, - { - "filename": "0125.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 78, - "h": 80 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 77, - "h": 79 - }, - "frame": { - "x": 78, - "y": 78, - "w": 77, - "h": 79 - } - }, - { - "filename": "0126.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 78, - "h": 80 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 77, - "h": 79 - }, - "frame": { - "x": 78, - "y": 78, - "w": 77, - "h": 79 - } - }, - { - "filename": "0127.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 78, - "h": 80 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 76, - "h": 80 - }, - "frame": { - "x": 0, - "y": 235, - "w": 76, - "h": 80 - } - }, - { - "filename": "0128.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 78, - "h": 80 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 76, - "h": 80 - }, - "frame": { - "x": 0, - "y": 235, - "w": 76, - "h": 80 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 78, - "h": 80 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 74, - "h": 77 - }, - "frame": { - "x": 0, - "y": 315, - "w": 74, - "h": 77 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 78, - "h": 80 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 74, - "h": 77 - }, - "frame": { - "x": 0, - "y": 315, - "w": 74, - "h": 77 - } - }, - { - "filename": "0019.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 78, - "h": 80 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 74, - "h": 77 - }, - "frame": { - "x": 0, - "y": 315, - "w": 74, - "h": 77 - } - }, - { - "filename": "0020.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 78, - "h": 80 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 74, - "h": 77 - }, - "frame": { - "x": 0, - "y": 315, - "w": 74, - "h": 77 - } - }, - { - "filename": "0049.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 78, - "h": 80 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 74, - "h": 77 - }, - "frame": { - "x": 0, - "y": 315, - "w": 74, - "h": 77 - } - }, - { - "filename": "0050.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 78, - "h": 80 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 74, - "h": 77 - }, - "frame": { - "x": 0, - "y": 315, - "w": 74, - "h": 77 - } - }, - { - "filename": "0053.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 78, - "h": 80 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 74, - "h": 77 - }, - "frame": { - "x": 0, - "y": 315, - "w": 74, - "h": 77 - } - }, - { - "filename": "0054.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 78, - "h": 80 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 74, - "h": 77 - }, - "frame": { - "x": 0, - "y": 315, - "w": 74, - "h": 77 - } - }, - { - "filename": "0083.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 78, - "h": 80 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 74, - "h": 77 - }, - "frame": { - "x": 0, - "y": 315, - "w": 74, - "h": 77 - } - }, - { - "filename": "0084.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 78, - "h": 80 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 74, - "h": 77 - }, - "frame": { - "x": 0, - "y": 315, - "w": 74, - "h": 77 - } - }, - { - "filename": "0087.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 78, - "h": 80 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 74, - "h": 77 - }, - "frame": { - "x": 0, - "y": 315, - "w": 74, - "h": 77 - } - }, - { - "filename": "0088.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 78, - "h": 80 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 74, - "h": 77 - }, - "frame": { - "x": 0, - "y": 315, - "w": 74, - "h": 77 - } - }, - { - "filename": "0151.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 78, - "h": 80 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 74, - "h": 77 - }, - "frame": { - "x": 0, - "y": 315, - "w": 74, - "h": 77 - } - }, - { - "filename": "0152.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 78, - "h": 80 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 74, - "h": 77 - }, - "frame": { - "x": 0, - "y": 315, - "w": 74, - "h": 77 - } - }, - { - "filename": "0155.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 78, - "h": 80 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 74, - "h": 77 - }, - "frame": { - "x": 0, - "y": 315, - "w": 74, - "h": 77 - } - }, - { - "filename": "0156.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 78, - "h": 80 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 74, - "h": 77 - }, - "frame": { - "x": 0, - "y": 315, - "w": 74, - "h": 77 - } - }, - { - "filename": "0113.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 78, - "h": 80 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 75, - "h": 79 - }, - "frame": { - "x": 156, - "y": 0, - "w": 75, - "h": 79 - } - }, - { - "filename": "0114.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 78, - "h": 80 - }, - "spriteSourceSize": { - "x": 2, - "y": 1, - "w": 75, - "h": 79 - }, - "frame": { - "x": 156, - "y": 0, - "w": 75, - "h": 79 - } - }, - { - "filename": "0111.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 78, - "h": 80 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 74, - "h": 80 - }, - "frame": { - "x": 231, - "y": 0, - "w": 74, - "h": 80 - } - }, - { - "filename": "0112.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 78, - "h": 80 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 74, - "h": 80 - }, - "frame": { - "x": 231, - "y": 0, - "w": 74, - "h": 80 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 78, - "h": 80 - }, - "spriteSourceSize": { - "x": 4, - "y": 0, - "w": 73, - "h": 80 - }, - "frame": { - "x": 305, - "y": 0, - "w": 73, - "h": 80 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 78, - "h": 80 - }, - "spriteSourceSize": { - "x": 4, - "y": 0, - "w": 73, - "h": 80 - }, - "frame": { - "x": 305, - "y": 0, - "w": 73, - "h": 80 - } - }, - { - "filename": "0033.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 78, - "h": 80 - }, - "spriteSourceSize": { - "x": 4, - "y": 0, - "w": 73, - "h": 80 - }, - "frame": { - "x": 305, - "y": 0, - "w": 73, - "h": 80 - } - }, - { - "filename": "0034.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 78, - "h": 80 - }, - "spriteSourceSize": { - "x": 4, - "y": 0, - "w": 73, - "h": 80 - }, - "frame": { - "x": 305, - "y": 0, - "w": 73, - "h": 80 - } - }, - { - "filename": "0035.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 78, - "h": 80 - }, - "spriteSourceSize": { - "x": 4, - "y": 0, - "w": 73, - "h": 80 - }, - "frame": { - "x": 305, - "y": 0, - "w": 73, - "h": 80 - } - }, - { - "filename": "0036.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 78, - "h": 80 - }, - "spriteSourceSize": { - "x": 4, - "y": 0, - "w": 73, - "h": 80 - }, - "frame": { - "x": 305, - "y": 0, - "w": 73, - "h": 80 - } - }, - { - "filename": "0067.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 78, - "h": 80 - }, - "spriteSourceSize": { - "x": 4, - "y": 0, - "w": 73, - "h": 80 - }, - "frame": { - "x": 305, - "y": 0, - "w": 73, - "h": 80 - } - }, - { - "filename": "0068.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 78, - "h": 80 - }, - "spriteSourceSize": { - "x": 4, - "y": 0, - "w": 73, - "h": 80 - }, - "frame": { - "x": 305, - "y": 0, - "w": 73, - "h": 80 - } - }, - { - "filename": "0069.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 78, - "h": 80 - }, - "spriteSourceSize": { - "x": 4, - "y": 0, - "w": 73, - "h": 80 - }, - "frame": { - "x": 305, - "y": 0, - "w": 73, - "h": 80 - } - }, - { - "filename": "0070.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 78, - "h": 80 - }, - "spriteSourceSize": { - "x": 4, - "y": 0, - "w": 73, - "h": 80 - }, - "frame": { - "x": 305, - "y": 0, - "w": 73, - "h": 80 - } - }, - { - "filename": "0101.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 78, - "h": 80 - }, - "spriteSourceSize": { - "x": 4, - "y": 0, - "w": 73, - "h": 80 - }, - "frame": { - "x": 305, - "y": 0, - "w": 73, - "h": 80 - } - }, - { - "filename": "0102.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 78, - "h": 80 - }, - "spriteSourceSize": { - "x": 4, - "y": 0, - "w": 73, - "h": 80 - }, - "frame": { - "x": 305, - "y": 0, - "w": 73, - "h": 80 - } - }, - { - "filename": "0103.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 78, - "h": 80 - }, - "spriteSourceSize": { - "x": 4, - "y": 0, - "w": 73, - "h": 80 - }, - "frame": { - "x": 305, - "y": 0, - "w": 73, - "h": 80 - } - }, - { - "filename": "0104.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 78, - "h": 80 - }, - "spriteSourceSize": { - "x": 4, - "y": 0, - "w": 73, - "h": 80 - }, - "frame": { - "x": 305, - "y": 0, - "w": 73, - "h": 80 - } - }, - { - "filename": "0135.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 78, - "h": 80 - }, - "spriteSourceSize": { - "x": 4, - "y": 0, - "w": 73, - "h": 80 - }, - "frame": { - "x": 305, - "y": 0, - "w": 73, - "h": 80 - } - }, - { - "filename": "0136.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 78, - "h": 80 - }, - "spriteSourceSize": { - "x": 4, - "y": 0, - "w": 73, - "h": 80 - }, - "frame": { - "x": 305, - "y": 0, - "w": 73, - "h": 80 - } - }, - { - "filename": "0137.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 78, - "h": 80 - }, - "spriteSourceSize": { - "x": 4, - "y": 0, - "w": 73, - "h": 80 - }, - "frame": { - "x": 305, - "y": 0, - "w": 73, - "h": 80 - } - }, - { - "filename": "0138.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 78, - "h": 80 - }, - "spriteSourceSize": { - "x": 4, - "y": 0, - "w": 73, - "h": 80 - }, - "frame": { - "x": 305, - "y": 0, - "w": 73, - "h": 80 - } - }, - { - "filename": "0169.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 78, - "h": 80 - }, - "spriteSourceSize": { - "x": 4, - "y": 0, - "w": 73, - "h": 80 - }, - "frame": { - "x": 305, - "y": 0, - "w": 73, - "h": 80 - } - }, - { - "filename": "0170.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 78, - "h": 80 - }, - "spriteSourceSize": { - "x": 4, - "y": 0, - "w": 73, - "h": 80 - }, - "frame": { - "x": 305, - "y": 0, - "w": 73, - "h": 80 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 78, - "h": 80 - }, - "spriteSourceSize": { - "x": 4, - "y": 2, - "w": 74, - "h": 78 - }, - "frame": { - "x": 78, - "y": 157, - "w": 74, - "h": 78 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 78, - "h": 80 - }, - "spriteSourceSize": { - "x": 4, - "y": 2, - "w": 74, - "h": 78 - }, - "frame": { - "x": 78, - "y": 157, - "w": 74, - "h": 78 - } - }, - { - "filename": "0021.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 78, - "h": 80 - }, - "spriteSourceSize": { - "x": 4, - "y": 2, - "w": 74, - "h": 78 - }, - "frame": { - "x": 78, - "y": 157, - "w": 74, - "h": 78 - } - }, - { - "filename": "0022.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 78, - "h": 80 - }, - "spriteSourceSize": { - "x": 4, - "y": 2, - "w": 74, - "h": 78 - }, - "frame": { - "x": 78, - "y": 157, - "w": 74, - "h": 78 - } - }, - { - "filename": "0047.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 78, - "h": 80 - }, - "spriteSourceSize": { - "x": 4, - "y": 2, - "w": 74, - "h": 78 - }, - "frame": { - "x": 78, - "y": 157, - "w": 74, - "h": 78 - } - }, - { - "filename": "0048.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 78, - "h": 80 - }, - "spriteSourceSize": { - "x": 4, - "y": 2, - "w": 74, - "h": 78 - }, - "frame": { - "x": 78, - "y": 157, - "w": 74, - "h": 78 - } - }, - { - "filename": "0055.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 78, - "h": 80 - }, - "spriteSourceSize": { - "x": 4, - "y": 2, - "w": 74, - "h": 78 - }, - "frame": { - "x": 78, - "y": 157, - "w": 74, - "h": 78 - } - }, - { - "filename": "0056.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 78, - "h": 80 - }, - "spriteSourceSize": { - "x": 4, - "y": 2, - "w": 74, - "h": 78 - }, - "frame": { - "x": 78, - "y": 157, - "w": 74, - "h": 78 - } - }, - { - "filename": "0081.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 78, - "h": 80 - }, - "spriteSourceSize": { - "x": 4, - "y": 2, - "w": 74, - "h": 78 - }, - "frame": { - "x": 78, - "y": 157, - "w": 74, - "h": 78 - } - }, - { - "filename": "0082.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 78, - "h": 80 - }, - "spriteSourceSize": { - "x": 4, - "y": 2, - "w": 74, - "h": 78 - }, - "frame": { - "x": 78, - "y": 157, - "w": 74, - "h": 78 - } - }, - { - "filename": "0089.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 78, - "h": 80 - }, - "spriteSourceSize": { - "x": 4, - "y": 2, - "w": 74, - "h": 78 - }, - "frame": { - "x": 78, - "y": 157, - "w": 74, - "h": 78 - } - }, - { - "filename": "0090.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 78, - "h": 80 - }, - "spriteSourceSize": { - "x": 4, - "y": 2, - "w": 74, - "h": 78 - }, - "frame": { - "x": 78, - "y": 157, - "w": 74, - "h": 78 - } - }, - { - "filename": "0149.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 78, - "h": 80 - }, - "spriteSourceSize": { - "x": 4, - "y": 2, - "w": 74, - "h": 78 - }, - "frame": { - "x": 78, - "y": 157, - "w": 74, - "h": 78 - } - }, - { - "filename": "0150.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 78, - "h": 80 - }, - "spriteSourceSize": { - "x": 4, - "y": 2, - "w": 74, - "h": 78 - }, - "frame": { - "x": 78, - "y": 157, - "w": 74, - "h": 78 - } - }, - { - "filename": "0157.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 78, - "h": 80 - }, - "spriteSourceSize": { - "x": 4, - "y": 2, - "w": 74, - "h": 78 - }, - "frame": { - "x": 78, - "y": 157, - "w": 74, - "h": 78 - } - }, - { - "filename": "0158.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 78, - "h": 80 - }, - "spriteSourceSize": { - "x": 4, - "y": 2, - "w": 74, - "h": 78 - }, - "frame": { - "x": 78, - "y": 157, - "w": 74, - "h": 78 - } - }, - { - "filename": "0129.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 78, - "h": 80 - }, - "spriteSourceSize": { - "x": 4, - "y": 0, - "w": 73, - "h": 80 - }, - "frame": { - "x": 76, - "y": 235, - "w": 73, - "h": 80 - } - }, - { - "filename": "0130.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 78, - "h": 80 - }, - "spriteSourceSize": { - "x": 4, - "y": 0, - "w": 73, - "h": 80 - }, - "frame": { - "x": 76, - "y": 235, - "w": 73, - "h": 80 - } - }, - { - "filename": "0017.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 78, - "h": 80 - }, - "spriteSourceSize": { - "x": 3, - "y": 4, - "w": 75, - "h": 76 - }, - "frame": { - "x": 74, - "y": 315, - "w": 75, - "h": 76 - } - }, - { - "filename": "0018.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 78, - "h": 80 - }, - "spriteSourceSize": { - "x": 3, - "y": 4, - "w": 75, - "h": 76 - }, - "frame": { - "x": 74, - "y": 315, - "w": 75, - "h": 76 - } - }, - { - "filename": "0051.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 78, - "h": 80 - }, - "spriteSourceSize": { - "x": 3, - "y": 4, - "w": 75, - "h": 76 - }, - "frame": { - "x": 74, - "y": 315, - "w": 75, - "h": 76 - } - }, - { - "filename": "0052.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 78, - "h": 80 - }, - "spriteSourceSize": { - "x": 3, - "y": 4, - "w": 75, - "h": 76 - }, - "frame": { - "x": 74, - "y": 315, - "w": 75, - "h": 76 - } - }, - { - "filename": "0085.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 78, - "h": 80 - }, - "spriteSourceSize": { - "x": 3, - "y": 4, - "w": 75, - "h": 76 - }, - "frame": { - "x": 74, - "y": 315, - "w": 75, - "h": 76 - } - }, - { - "filename": "0086.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 78, - "h": 80 - }, - "spriteSourceSize": { - "x": 3, - "y": 4, - "w": 75, - "h": 76 - }, - "frame": { - "x": 74, - "y": 315, - "w": 75, - "h": 76 - } - }, - { - "filename": "0153.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 78, - "h": 80 - }, - "spriteSourceSize": { - "x": 3, - "y": 4, - "w": 75, - "h": 76 - }, - "frame": { - "x": 74, - "y": 315, - "w": 75, - "h": 76 - } - }, - { - "filename": "0154.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 78, - "h": 80 - }, - "spriteSourceSize": { - "x": 3, - "y": 4, - "w": 75, - "h": 76 - }, - "frame": { - "x": 74, - "y": 315, - "w": 75, - "h": 76 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 78, - "h": 80 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 72, - "h": 80 - }, - "frame": { - "x": 155, - "y": 79, - "w": 72, - "h": 80 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 78, - "h": 80 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 72, - "h": 80 - }, - "frame": { - "x": 155, - "y": 79, - "w": 72, - "h": 80 - } - }, - { - "filename": "0031.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 78, - "h": 80 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 72, - "h": 80 - }, - "frame": { - "x": 155, - "y": 79, - "w": 72, - "h": 80 - } - }, - { - "filename": "0032.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 78, - "h": 80 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 72, - "h": 80 - }, - "frame": { - "x": 155, - "y": 79, - "w": 72, - "h": 80 - } - }, - { - "filename": "0037.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 78, - "h": 80 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 72, - "h": 80 - }, - "frame": { - "x": 155, - "y": 79, - "w": 72, - "h": 80 - } - }, - { - "filename": "0038.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 78, - "h": 80 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 72, - "h": 80 - }, - "frame": { - "x": 155, - "y": 79, - "w": 72, - "h": 80 - } - }, - { - "filename": "0065.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 78, - "h": 80 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 72, - "h": 80 - }, - "frame": { - "x": 155, - "y": 79, - "w": 72, - "h": 80 - } - }, - { - "filename": "0066.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 78, - "h": 80 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 72, - "h": 80 - }, - "frame": { - "x": 155, - "y": 79, - "w": 72, - "h": 80 - } - }, - { - "filename": "0071.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 78, - "h": 80 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 72, - "h": 80 - }, - "frame": { - "x": 155, - "y": 79, - "w": 72, - "h": 80 - } - }, - { - "filename": "0072.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 78, - "h": 80 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 72, - "h": 80 - }, - "frame": { - "x": 155, - "y": 79, - "w": 72, - "h": 80 - } - }, - { - "filename": "0099.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 78, - "h": 80 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 72, - "h": 80 - }, - "frame": { - "x": 155, - "y": 79, - "w": 72, - "h": 80 - } - }, - { - "filename": "0100.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 78, - "h": 80 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 72, - "h": 80 - }, - "frame": { - "x": 155, - "y": 79, - "w": 72, - "h": 80 - } - }, - { - "filename": "0139.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 78, - "h": 80 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 72, - "h": 80 - }, - "frame": { - "x": 155, - "y": 79, - "w": 72, - "h": 80 - } - }, - { - "filename": "0140.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 78, - "h": 80 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 72, - "h": 80 - }, - "frame": { - "x": 155, - "y": 79, - "w": 72, - "h": 80 - } - }, - { - "filename": "0167.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 78, - "h": 80 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 72, - "h": 80 - }, - "frame": { - "x": 155, - "y": 79, - "w": 72, - "h": 80 - } - }, - { - "filename": "0168.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 78, - "h": 80 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 72, - "h": 80 - }, - "frame": { - "x": 155, - "y": 79, - "w": 72, - "h": 80 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 78, - "h": 80 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 72, - "h": 80 - }, - "frame": { - "x": 227, - "y": 80, - "w": 72, - "h": 80 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 78, - "h": 80 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 72, - "h": 80 - }, - "frame": { - "x": 227, - "y": 80, - "w": 72, - "h": 80 - } - }, - { - "filename": "0029.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 78, - "h": 80 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 72, - "h": 80 - }, - "frame": { - "x": 227, - "y": 80, - "w": 72, - "h": 80 - } - }, - { - "filename": "0030.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 78, - "h": 80 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 72, - "h": 80 - }, - "frame": { - "x": 227, - "y": 80, - "w": 72, - "h": 80 - } - }, - { - "filename": "0039.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 78, - "h": 80 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 72, - "h": 80 - }, - "frame": { - "x": 227, - "y": 80, - "w": 72, - "h": 80 - } - }, - { - "filename": "0040.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 78, - "h": 80 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 72, - "h": 80 - }, - "frame": { - "x": 227, - "y": 80, - "w": 72, - "h": 80 - } - }, - { - "filename": "0063.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 78, - "h": 80 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 72, - "h": 80 - }, - "frame": { - "x": 227, - "y": 80, - "w": 72, - "h": 80 - } - }, - { - "filename": "0064.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 78, - "h": 80 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 72, - "h": 80 - }, - "frame": { - "x": 227, - "y": 80, - "w": 72, - "h": 80 - } - }, - { - "filename": "0073.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 78, - "h": 80 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 72, - "h": 80 - }, - "frame": { - "x": 227, - "y": 80, - "w": 72, - "h": 80 - } - }, - { - "filename": "0074.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 78, - "h": 80 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 72, - "h": 80 - }, - "frame": { - "x": 227, - "y": 80, - "w": 72, - "h": 80 - } - }, - { - "filename": "0097.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 78, - "h": 80 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 72, - "h": 80 - }, - "frame": { - "x": 227, - "y": 80, - "w": 72, - "h": 80 - } - }, - { - "filename": "0098.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 78, - "h": 80 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 72, - "h": 80 - }, - "frame": { - "x": 227, - "y": 80, - "w": 72, - "h": 80 - } - }, - { - "filename": "0141.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 78, - "h": 80 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 72, - "h": 80 - }, - "frame": { - "x": 227, - "y": 80, - "w": 72, - "h": 80 - } - }, - { - "filename": "0142.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 78, - "h": 80 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 72, - "h": 80 - }, - "frame": { - "x": 227, - "y": 80, - "w": 72, - "h": 80 - } - }, - { - "filename": "0165.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 78, - "h": 80 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 72, - "h": 80 - }, - "frame": { - "x": 227, - "y": 80, - "w": 72, - "h": 80 - } - }, - { - "filename": "0166.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 78, - "h": 80 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 72, - "h": 80 - }, - "frame": { - "x": 227, - "y": 80, - "w": 72, - "h": 80 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 78, - "h": 80 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 72, - "h": 80 - }, - "frame": { - "x": 299, - "y": 80, - "w": 72, - "h": 80 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 78, - "h": 80 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 72, - "h": 80 - }, - "frame": { - "x": 299, - "y": 80, - "w": 72, - "h": 80 - } - }, - { - "filename": "0027.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 78, - "h": 80 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 72, - "h": 80 - }, - "frame": { - "x": 299, - "y": 80, - "w": 72, - "h": 80 - } - }, - { - "filename": "0028.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 78, - "h": 80 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 72, - "h": 80 - }, - "frame": { - "x": 299, - "y": 80, - "w": 72, - "h": 80 - } - }, - { - "filename": "0041.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 78, - "h": 80 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 72, - "h": 80 - }, - "frame": { - "x": 299, - "y": 80, - "w": 72, - "h": 80 - } - }, - { - "filename": "0042.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 78, - "h": 80 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 72, - "h": 80 - }, - "frame": { - "x": 299, - "y": 80, - "w": 72, - "h": 80 - } - }, - { - "filename": "0061.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 78, - "h": 80 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 72, - "h": 80 - }, - "frame": { - "x": 299, - "y": 80, - "w": 72, - "h": 80 - } - }, - { - "filename": "0062.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 78, - "h": 80 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 72, - "h": 80 - }, - "frame": { - "x": 299, - "y": 80, - "w": 72, - "h": 80 - } - }, - { - "filename": "0075.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 78, - "h": 80 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 72, - "h": 80 - }, - "frame": { - "x": 299, - "y": 80, - "w": 72, - "h": 80 - } - }, - { - "filename": "0076.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 78, - "h": 80 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 72, - "h": 80 - }, - "frame": { - "x": 299, - "y": 80, - "w": 72, - "h": 80 - } - }, - { - "filename": "0095.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 78, - "h": 80 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 72, - "h": 80 - }, - "frame": { - "x": 299, - "y": 80, - "w": 72, - "h": 80 - } - }, - { - "filename": "0096.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 78, - "h": 80 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 72, - "h": 80 - }, - "frame": { - "x": 299, - "y": 80, - "w": 72, - "h": 80 - } - }, - { - "filename": "0143.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 78, - "h": 80 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 72, - "h": 80 - }, - "frame": { - "x": 299, - "y": 80, - "w": 72, - "h": 80 - } - }, - { - "filename": "0144.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 78, - "h": 80 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 72, - "h": 80 - }, - "frame": { - "x": 299, - "y": 80, - "w": 72, - "h": 80 - } - }, - { - "filename": "0163.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 78, - "h": 80 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 72, - "h": 80 - }, - "frame": { - "x": 299, - "y": 80, - "w": 72, - "h": 80 - } - }, - { - "filename": "0164.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 78, - "h": 80 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 72, - "h": 80 - }, - "frame": { - "x": 299, - "y": 80, - "w": 72, - "h": 80 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 78, - "h": 80 - }, - "spriteSourceSize": { - "x": 5, - "y": 1, - "w": 72, - "h": 79 - }, - "frame": { - "x": 152, - "y": 159, - "w": 72, - "h": 79 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 78, - "h": 80 - }, - "spriteSourceSize": { - "x": 5, - "y": 1, - "w": 72, - "h": 79 - }, - "frame": { - "x": 152, - "y": 159, - "w": 72, - "h": 79 - } - }, - { - "filename": "0025.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 78, - "h": 80 - }, - "spriteSourceSize": { - "x": 5, - "y": 1, - "w": 72, - "h": 79 - }, - "frame": { - "x": 152, - "y": 159, - "w": 72, - "h": 79 - } - }, - { - "filename": "0026.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 78, - "h": 80 - }, - "spriteSourceSize": { - "x": 5, - "y": 1, - "w": 72, - "h": 79 - }, - "frame": { - "x": 152, - "y": 159, - "w": 72, - "h": 79 - } - }, - { - "filename": "0043.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 78, - "h": 80 - }, - "spriteSourceSize": { - "x": 5, - "y": 1, - "w": 72, - "h": 79 - }, - "frame": { - "x": 152, - "y": 159, - "w": 72, - "h": 79 - } - }, - { - "filename": "0044.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 78, - "h": 80 - }, - "spriteSourceSize": { - "x": 5, - "y": 1, - "w": 72, - "h": 79 - }, - "frame": { - "x": 152, - "y": 159, - "w": 72, - "h": 79 - } - }, - { - "filename": "0059.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 78, - "h": 80 - }, - "spriteSourceSize": { - "x": 5, - "y": 1, - "w": 72, - "h": 79 - }, - "frame": { - "x": 152, - "y": 159, - "w": 72, - "h": 79 - } - }, - { - "filename": "0060.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 78, - "h": 80 - }, - "spriteSourceSize": { - "x": 5, - "y": 1, - "w": 72, - "h": 79 - }, - "frame": { - "x": 152, - "y": 159, - "w": 72, - "h": 79 - } - }, - { - "filename": "0077.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 78, - "h": 80 - }, - "spriteSourceSize": { - "x": 5, - "y": 1, - "w": 72, - "h": 79 - }, - "frame": { - "x": 152, - "y": 159, - "w": 72, - "h": 79 - } - }, - { - "filename": "0078.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 78, - "h": 80 - }, - "spriteSourceSize": { - "x": 5, - "y": 1, - "w": 72, - "h": 79 - }, - "frame": { - "x": 152, - "y": 159, - "w": 72, - "h": 79 - } - }, - { - "filename": "0093.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 78, - "h": 80 - }, - "spriteSourceSize": { - "x": 5, - "y": 1, - "w": 72, - "h": 79 - }, - "frame": { - "x": 152, - "y": 159, - "w": 72, - "h": 79 - } - }, - { - "filename": "0094.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 78, - "h": 80 - }, - "spriteSourceSize": { - "x": 5, - "y": 1, - "w": 72, - "h": 79 - }, - "frame": { - "x": 152, - "y": 159, - "w": 72, - "h": 79 - } - }, - { - "filename": "0145.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 78, - "h": 80 - }, - "spriteSourceSize": { - "x": 5, - "y": 1, - "w": 72, - "h": 79 - }, - "frame": { - "x": 152, - "y": 159, - "w": 72, - "h": 79 - } - }, - { - "filename": "0146.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 78, - "h": 80 - }, - "spriteSourceSize": { - "x": 5, - "y": 1, - "w": 72, - "h": 79 - }, - "frame": { - "x": 152, - "y": 159, - "w": 72, - "h": 79 - } - }, - { - "filename": "0161.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 78, - "h": 80 - }, - "spriteSourceSize": { - "x": 5, - "y": 1, - "w": 72, - "h": 79 - }, - "frame": { - "x": 152, - "y": 159, - "w": 72, - "h": 79 - } - }, - { - "filename": "0162.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 78, - "h": 80 - }, - "spriteSourceSize": { - "x": 5, - "y": 1, - "w": 72, - "h": 79 - }, - "frame": { - "x": 152, - "y": 159, - "w": 72, - "h": 79 - } - }, - { - "filename": "0105.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 78, - "h": 80 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 72, - "h": 80 - }, - "frame": { - "x": 149, - "y": 238, - "w": 72, - "h": 80 - } - }, - { - "filename": "0106.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 78, - "h": 80 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 72, - "h": 80 - }, - "frame": { - "x": 149, - "y": 238, - "w": 72, - "h": 80 - } - }, - { - "filename": "0133.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 78, - "h": 80 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 72, - "h": 80 - }, - "frame": { - "x": 149, - "y": 238, - "w": 72, - "h": 80 - } - }, - { - "filename": "0134.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 78, - "h": 80 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 72, - "h": 80 - }, - "frame": { - "x": 149, - "y": 238, - "w": 72, - "h": 80 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 78, - "h": 80 - }, - "spriteSourceSize": { - "x": 5, - "y": 2, - "w": 72, - "h": 78 - }, - "frame": { - "x": 224, - "y": 160, - "w": 72, - "h": 78 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 78, - "h": 80 - }, - "spriteSourceSize": { - "x": 5, - "y": 2, - "w": 72, - "h": 78 - }, - "frame": { - "x": 224, - "y": 160, - "w": 72, - "h": 78 - } - }, - { - "filename": "0023.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 78, - "h": 80 - }, - "spriteSourceSize": { - "x": 5, - "y": 2, - "w": 72, - "h": 78 - }, - "frame": { - "x": 224, - "y": 160, - "w": 72, - "h": 78 - } - }, - { - "filename": "0024.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 78, - "h": 80 - }, - "spriteSourceSize": { - "x": 5, - "y": 2, - "w": 72, - "h": 78 - }, - "frame": { - "x": 224, - "y": 160, - "w": 72, - "h": 78 - } - }, - { - "filename": "0045.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 78, - "h": 80 - }, - "spriteSourceSize": { - "x": 5, - "y": 2, - "w": 72, - "h": 78 - }, - "frame": { - "x": 224, - "y": 160, - "w": 72, - "h": 78 - } - }, - { - "filename": "0046.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 78, - "h": 80 - }, - "spriteSourceSize": { - "x": 5, - "y": 2, - "w": 72, - "h": 78 - }, - "frame": { - "x": 224, - "y": 160, - "w": 72, - "h": 78 - } - }, - { - "filename": "0057.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 78, - "h": 80 - }, - "spriteSourceSize": { - "x": 5, - "y": 2, - "w": 72, - "h": 78 - }, - "frame": { - "x": 224, - "y": 160, - "w": 72, - "h": 78 - } - }, - { - "filename": "0058.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 78, - "h": 80 - }, - "spriteSourceSize": { - "x": 5, - "y": 2, - "w": 72, - "h": 78 - }, - "frame": { - "x": 224, - "y": 160, - "w": 72, - "h": 78 - } - }, - { - "filename": "0079.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 78, - "h": 80 - }, - "spriteSourceSize": { - "x": 5, - "y": 2, - "w": 72, - "h": 78 - }, - "frame": { - "x": 224, - "y": 160, - "w": 72, - "h": 78 - } - }, - { - "filename": "0080.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 78, - "h": 80 - }, - "spriteSourceSize": { - "x": 5, - "y": 2, - "w": 72, - "h": 78 - }, - "frame": { - "x": 224, - "y": 160, - "w": 72, - "h": 78 - } - }, - { - "filename": "0091.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 78, - "h": 80 - }, - "spriteSourceSize": { - "x": 5, - "y": 2, - "w": 72, - "h": 78 - }, - "frame": { - "x": 224, - "y": 160, - "w": 72, - "h": 78 - } - }, - { - "filename": "0092.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 78, - "h": 80 - }, - "spriteSourceSize": { - "x": 5, - "y": 2, - "w": 72, - "h": 78 - }, - "frame": { - "x": 224, - "y": 160, - "w": 72, - "h": 78 - } - }, - { - "filename": "0147.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 78, - "h": 80 - }, - "spriteSourceSize": { - "x": 5, - "y": 2, - "w": 72, - "h": 78 - }, - "frame": { - "x": 224, - "y": 160, - "w": 72, - "h": 78 - } - }, - { - "filename": "0148.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 78, - "h": 80 - }, - "spriteSourceSize": { - "x": 5, - "y": 2, - "w": 72, - "h": 78 - }, - "frame": { - "x": 224, - "y": 160, - "w": 72, - "h": 78 - } - }, - { - "filename": "0159.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 78, - "h": 80 - }, - "spriteSourceSize": { - "x": 5, - "y": 2, - "w": 72, - "h": 78 - }, - "frame": { - "x": 224, - "y": 160, - "w": 72, - "h": 78 - } - }, - { - "filename": "0160.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 78, - "h": 80 - }, - "spriteSourceSize": { - "x": 5, - "y": 2, - "w": 72, - "h": 78 - }, - "frame": { - "x": 224, - "y": 160, - "w": 72, - "h": 78 - } - }, - { - "filename": "0107.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 78, - "h": 80 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 72, - "h": 80 - }, - "frame": { - "x": 221, - "y": 238, - "w": 72, - "h": 80 - } - }, - { - "filename": "0108.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 78, - "h": 80 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 72, - "h": 80 - }, - "frame": { - "x": 221, - "y": 238, - "w": 72, - "h": 80 - } - }, - { - "filename": "0131.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 78, - "h": 80 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 72, - "h": 80 - }, - "frame": { - "x": 296, - "y": 160, - "w": 72, - "h": 80 - } - }, - { - "filename": "0132.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 78, - "h": 80 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 72, - "h": 80 - }, - "frame": { - "x": 296, - "y": 160, - "w": 72, - "h": 80 - } - }, - { - "filename": "0109.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 78, - "h": 80 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 71, - "h": 80 - }, - "frame": { - "x": 293, - "y": 240, - "w": 71, - "h": 80 - } - }, - { - "filename": "0110.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 78, - "h": 80 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 71, - "h": 80 - }, - "frame": { - "x": 293, - "y": 240, - "w": 71, - "h": 80 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:d2a0b4f8d67951bad9facc61ed8ecd29:029ea763f8f267a92908e8da6c5b70c9:869abf8e0bcb859d5abfb33d03e5db07$" - } -} \ No newline at end of file diff --git a/public/images/pokemon/variant/back/623_1.png b/public/images/pokemon/variant/back/623_1.png deleted file mode 100644 index b02cc764502..00000000000 Binary files a/public/images/pokemon/variant/back/623_1.png and /dev/null differ diff --git a/public/images/pokemon/variant/back/623_2.png b/public/images/pokemon/variant/back/623_2.png deleted file mode 100644 index 456f439cd86..00000000000 Binary files a/public/images/pokemon/variant/back/623_2.png and /dev/null differ diff --git a/public/images/pokemon/variant/back/female/6215.json b/public/images/pokemon/variant/back/female/6215.json new file mode 100644 index 00000000000..741d6ddc0bb --- /dev/null +++ b/public/images/pokemon/variant/back/female/6215.json @@ -0,0 +1,32 @@ +{ + "1": { + "724ca2": "12968b", + "503678": "0f5d6d", + "956cbe": "31dabb", + "9c9bce": "ae8976", + "514a80": "402010", + "dcdbf7": "d0b3a4", + "080808": "080808", + "28234b": "220d0a", + "7d6ca4": "853a36", + "584d80": "562627", + "f6f6ff": "f6f6ff", + "bdbdc5": "bdbdc5", + "c52973": "ea903f" + }, + "2": { + "724ca2": "982e33", + "503678": "601522", + "956cbe": "cc5427", + "9c9bce": "3c8775", + "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/female/118.json b/public/images/pokemon/variant/female/118.json index 659fcbf17d3..ba5a9377fdb 100644 --- a/public/images/pokemon/variant/female/118.json +++ b/public/images/pokemon/variant/female/118.json @@ -1,22 +1,5 @@ { "1": { - "52525a": "2e5453", - "ffffff": "f0fff8", - "101010": "101010", - "8c8c94": "4c867a", - "d6d6de": "9cd8c4", - "efefef": "c3f0dd", - "ceb57b": "65aaae", - "ffc57b": "5addc9", - "ef7b42": "4cb5b1", - "d64210": "2a7580", - "ad1000": "174a5a", - "006b63": "8c3824", - "42ada5": "af704f", - "ad5273": "1f562f", - "f7848c": "5e9964" - }, - "2": { "52525a": "5b3856", "ffffff": "fff9fc", "101010": "101010", @@ -32,5 +15,22 @@ "42ada5": "ffdf5b", "ad5273": "762066", "f7848c": "c450a5" + }, + "2": { + "52525a": "2e5453", + "ffffff": "f0fff8", + "101010": "101010", + "8c8c94": "4c867a", + "d6d6de": "9cd8c4", + "efefef": "c3f0dd", + "ceb57b": "65aaae", + "ffc57b": "5addc9", + "ef7b42": "4cb5b1", + "d64210": "2a7580", + "ad1000": "174a5a", + "006b63": "8c3824", + "42ada5": "af704f", + "ad5273": "1f562f", + "f7848c": "5e9964" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/female/41_2.png b/public/images/pokemon/variant/female/41_2.png deleted file mode 100644 index 9ef30a5e98e..00000000000 Binary files a/public/images/pokemon/variant/female/41_2.png and /dev/null differ diff --git a/public/images/pokemon/variant/female/41_3.png b/public/images/pokemon/variant/female/41_3.png deleted file mode 100644 index cbc73b70515..00000000000 Binary files a/public/images/pokemon/variant/female/41_3.png and /dev/null differ diff --git a/public/images/pokemon/variant/female/42_2.png b/public/images/pokemon/variant/female/42_2.png deleted file mode 100644 index a8183eaf60b..00000000000 Binary files a/public/images/pokemon/variant/female/42_2.png and /dev/null differ diff --git a/public/images/pokemon/variant/female/42_3.png b/public/images/pokemon/variant/female/42_3.png deleted file mode 100644 index a0029ba8548..00000000000 Binary files a/public/images/pokemon/variant/female/42_3.png and /dev/null differ diff --git a/public/images/pokemon/variant/female/6215.json b/public/images/pokemon/variant/female/6215.json new file mode 100644 index 00000000000..99e0c880142 --- /dev/null +++ b/public/images/pokemon/variant/female/6215.json @@ -0,0 +1,36 @@ +{ + "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" + }, + "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" + } +} \ No newline at end of file diff --git a/public/images/pokemon_icons_7v.json b/public/images/pokemon_icons_7v.json index ceb7a0b991f..cf34740925a 100644 --- a/public/images/pokemon_icons_7v.json +++ b/public/images/pokemon_icons_7v.json @@ -1096,7 +1096,7 @@ }, "frame": { "x": 96, - "y": 445, + "y": 446, "w": 17, "h": 22 } diff --git a/public/images/pokemon_icons_7v.png b/public/images/pokemon_icons_7v.png index 822f7950f3e..308e405525d 100644 Binary files a/public/images/pokemon_icons_7v.png and b/public/images/pokemon_icons_7v.png differ diff --git a/public/images/ui/discord.png b/public/images/ui/discord.png new file mode 100644 index 00000000000..1cd833854b0 Binary files /dev/null and b/public/images/ui/discord.png differ diff --git a/public/images/ui/google.png b/public/images/ui/google.png new file mode 100644 index 00000000000..82760552886 Binary files /dev/null and b/public/images/ui/google.png differ diff --git a/public/images/ui/legacy/discord.png b/public/images/ui/legacy/discord.png new file mode 100644 index 00000000000..eac801cdd9d Binary files /dev/null and b/public/images/ui/legacy/discord.png differ diff --git a/public/images/ui/legacy/google.png b/public/images/ui/legacy/google.png new file mode 100644 index 00000000000..82760552886 Binary files /dev/null and b/public/images/ui/legacy/google.png differ diff --git a/public/images/ui/legacy/passive_bg.png b/public/images/ui/legacy/passive_bg.png new file mode 100644 index 00000000000..1e18a47b881 Binary files /dev/null and b/public/images/ui/legacy/passive_bg.png differ diff --git a/public/images/ui/passive_bg.png b/public/images/ui/passive_bg.png new file mode 100644 index 00000000000..1e18a47b881 Binary files /dev/null and b/public/images/ui/passive_bg.png differ diff --git a/src/account.ts b/src/account.ts index 4d19513908f..7fd1d208496 100644 --- a/src/account.ts +++ b/src/account.ts @@ -4,6 +4,8 @@ import * as Utils from "./utils"; export interface UserInfo { username: string; lastSessionSlot: integer; + discordId: string; + googleId: string; } export let loggedInUser: UserInfo = null; @@ -11,13 +13,13 @@ export let loggedInUser: UserInfo = null; export const clientSessionId = Utils.randomString(32); export function initLoggedInUser(): void { - loggedInUser = { username: "Guest", lastSessionSlot: -1 }; + loggedInUser = { username: "Guest", lastSessionSlot: -1, discordId: "", googleId: ""}; } export function updateUserInfo(): Promise<[boolean, integer]> { return new Promise<[boolean, integer]>(resolve => { if (bypassLogin) { - loggedInUser = { username: "Guest", lastSessionSlot: -1 }; + loggedInUser = { username: "Guest", lastSessionSlot: -1, discordId: "", googleId: "" }; let lastSessionSlot = -1; for (let s = 0; s < 5; s++) { if (localStorage.getItem(`sessionData${s ? s : ""}_${loggedInUser.username}`)) { diff --git a/src/battle-scene.ts b/src/battle-scene.ts index f20c6503229..b33a5696b7b 100644 --- a/src/battle-scene.ts +++ b/src/battle-scene.ts @@ -49,11 +49,11 @@ import { SceneBase } from "./scene-base"; import CandyBar from "./ui/candy-bar"; import { Variant, variantData } from "./data/variant"; import { Localizable } from "#app/interfaces/locales"; -import * as Overrides from "./overrides"; +import Overrides from "#app/overrides"; import {InputsController} from "./inputs-controller"; import {UiInputs} from "./ui-inputs"; import { NewArenaEvent } from "./events/battle-scene"; -import ArenaFlyout from "./ui/arena-flyout"; +import { ArenaFlyout } from "./ui/arena-flyout"; import { EaseType } from "#enums/ease-type"; import { Abilities } from "#enums/abilities"; import { BattleSpec } from "#enums/battle-spec"; @@ -67,6 +67,7 @@ import { Species } from "#enums/species"; import { UiTheme } from "#enums/ui-theme"; import { TimedEventManager } from "#app/timed-event-manager.js"; import i18next from "i18next"; +import {TrainerType} from "#enums/trainer-type"; export const bypassLogin = import.meta.env.VITE_BYPASS_LOGIN === "1"; @@ -223,6 +224,9 @@ export default class BattleScene extends SceneBase { private fieldOverlay: Phaser.GameObjects.Rectangle; private shopOverlay: Phaser.GameObjects.Rectangle; + private shopOverlayShown: boolean = false; + private shopOverlayOpacity: number = .80; + public modifiers: PersistentModifier[]; private enemyModifiers: PersistentModifier[]; public uiContainer: Phaser.GameObjects.Container; @@ -1046,6 +1050,10 @@ export default class BattleScene extends SceneBase { this.applyModifiers(DoubleBattleChanceBoosterModifier, true, doubleChance); playerField.forEach(p => applyAbAttrs(DoubleBattleChanceAbAttr, p, null, doubleChance)); doubleTrainer = !Utils.randSeedInt(doubleChance.value); + // 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 === TrainerType.TATE || trainerType === TrainerType.LIZA)) { + doubleTrainer = false; + } } newTrainer = trainerData !== undefined ? trainerData.toTrainer(this) : new Trainer(this, trainerType, doubleTrainer ? TrainerVariant.DOUBLE : Utils.randSeedInt(2) ? TrainerVariant.FEMALE : TrainerVariant.DEFAULT); this.field.add(newTrainer); @@ -1119,7 +1127,7 @@ export default class BattleScene extends SceneBase { this.arena.updatePoolsForTimeOfDay(); } if (resetArenaState) { - this.arena.removeAllTags(); + this.arena.resetArenaEffects(); playerField.forEach((_, p) => this.unshiftPhase(new ReturnPhase(this, p))); for (const pokemon of this.getParty()) { @@ -1423,19 +1431,29 @@ export default class BattleScene extends SceneBase { }); } + updateShopOverlayOpacity(value: number): void { + this.shopOverlayOpacity = value; + + if (this.shopOverlayShown) { + this.shopOverlay.setAlpha(this.shopOverlayOpacity); + } + } + showShopOverlay(duration: integer): Promise { + this.shopOverlayShown = true; return new Promise(resolve => { this.tweens.add({ targets: this.shopOverlay, - alpha: 0.8, + alpha: this.shopOverlayOpacity, ease: "Sine.easeOut", - duration: duration, + duration, onComplete: () => resolve() }); }); } hideShopOverlay(duration: integer): Promise { + this.shopOverlayShown = false; return new Promise(resolve => { this.tweens.add({ targets: this.shopOverlay, @@ -1888,7 +1906,7 @@ export default class BattleScene extends SceneBase { case "battle_legendary_pecharunt": //SV Pecharunt Battle return 6.508; case "battle_rival": //BW Rival Battle - return 13.689; + return 14.110; case "battle_rival_2": //BW N Battle return 17.714; case "battle_rival_3": //BW Final N Battle @@ -2066,6 +2084,24 @@ export default class BattleScene extends SceneBase { } } + /** + * Tries to add the input phase to index before target phase in the phaseQueue, else simply calls unshiftPhase() + * @param phase {@linkcode Phase} the phase to be added + * @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); + + if (targetIndex !== -1) { + this.phaseQueue.splice(targetIndex, 0, phase); + return true; + } else { + this.unshiftPhase(phase); + return false; + } + } + queueMessage(message: string, callbackDelay?: integer, prompt?: boolean, promptDelay?: integer, defer?: boolean) { const phase = new MessagePhase(this, message, callbackDelay, prompt, promptDelay); if (!defer) { diff --git a/src/battle.ts b/src/battle.ts index 3f2519df3e8..1e0605bdc64 100644 --- a/src/battle.ts +++ b/src/battle.ts @@ -157,7 +157,7 @@ export default class Battle { } addPostBattleLoot(enemyPokemon: EnemyPokemon): void { - this.postBattleLoot.push(...enemyPokemon.scene.findModifiers(m => m instanceof PokemonHeldItemModifier && m.pokemonId === enemyPokemon.id && m.getTransferrable(false), false).map(i => { + this.postBattleLoot.push(...enemyPokemon.scene.findModifiers(m => m instanceof PokemonHeldItemModifier && m.pokemonId === enemyPokemon.id && m.isTransferrable, false).map(i => { const ret = i as PokemonHeldItemModifier; ret.pokemonId = null; return ret; diff --git a/src/data/ability.ts b/src/data/ability.ts index f449b33992b..2dd3f1687ca 100644 --- a/src/data/ability.ts +++ b/src/data/ability.ts @@ -4,7 +4,7 @@ import { Constructor } from "#app/utils"; import * as Utils from "../utils"; import { BattleStat, getBattleStatName } from "./battle-stat"; import { MovePhase, PokemonHealPhase, ShowAbilityPhase, StatChangePhase } from "../phases"; -import { getPokemonMessage, getPokemonNameWithAffix } from "../messages"; +import { getPokemonNameWithAffix } from "../messages"; import { Weather, WeatherType } from "./weather"; import { BattlerTag, GroundedTag } from "./battler-tags"; import { StatusEffect, getNonVolatileStatusEffects, getStatusEffectDescriptor, getStatusEffectHealText } from "./status-effect"; @@ -284,7 +284,10 @@ export class BlockItemTheftAbAttr extends AbAttr { } getTriggerMessage(pokemon: Pokemon, abilityName: string, ...args: any[]) { - return getPokemonMessage(pokemon, `'s ${abilityName}\nprevents item theft!`); + return i18next.t("abilityTriggers:blockItemTheft", { + pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), + abilityName: abilityName, + }); } } @@ -361,13 +364,13 @@ export class TypeImmunityAbAttr extends PreDefendAbAttr { /** * Applies immunity if this ability grants immunity to the type of the given move. - * @param pokemon {@linkcode Pokemon} the defending Pokemon - * @param passive N/A - * @param attacker {@linkcode Pokemon} the attacking Pokemon - * @param move {@linkcode Move} the attacking move - * @param cancelled N/A + * @param pokemon {@linkcode Pokemon} The defending Pokemon. + * @param passive - Whether the ability is passive. + * @param attacker {@linkcode Pokemon} The attacking Pokemon. + * @param move {@linkcode Move} The attacking move. + * @param cancelled {@linkcode Utils.BooleanHolder} - A holder for a boolean value indicating if the move was cancelled. * @param args [0] {@linkcode Utils.NumberHolder} gets set to 0 if move is immuned by an ability. - * @param args [1] {@linkcode Utils.NumberHolder} type of move being defended against in case it has changed from default type + * @param args [1] - Whether the move is simulated. */ applyPreDefend(pokemon: Pokemon, passive: boolean, attacker: Pokemon, move: Move, cancelled: Utils.BooleanHolder, args: any[]): boolean { // Field moves should ignore immunity @@ -402,7 +405,7 @@ export class TypeImmunityHealAbAttr extends TypeImmunityAbAttr { if (!simulated) { const abilityName = (!passive ? pokemon.getAbility() : pokemon.getPassiveAbility()).name; pokemon.scene.unshiftPhase(new PokemonHealPhase(pokemon.scene, pokemon.getBattlerIndex(), - Math.max(Math.floor(pokemon.getMaxHp() / 4), 1), getPokemonMessage(pokemon, `'s ${abilityName}\nrestored its HP a little!`), true)); + Math.max(Math.floor(pokemon.getMaxHp() / 4), 1), i18next.t("abilityTriggers:typeImmunityHeal", {pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), abilityName: abilityName}), true)); } } return true; @@ -480,7 +483,10 @@ export class NonSuperEffectiveImmunityAbAttr extends TypeImmunityAbAttr { } getTriggerMessage(pokemon: Pokemon, abilityName: string, ...args: any[]): string { - return getPokemonMessage(pokemon, ` avoided damage\nwith ${abilityName}!`); + return i18next.t("abilityTriggers:nonSuperEffectiveImmunity", { + pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), + abilityName: abilityName, + }); } } @@ -501,7 +507,7 @@ export class PostDefendDisguiseAbAttr extends PostDefendAbAttr { } pokemon.damageAndUpdate(recoilDamage, HitResult.OTHER); pokemon.turnData.damageTaken += recoilDamage; - pokemon.scene.queueMessage(getPokemonMessage(pokemon, "'s disguise was busted!")); + pokemon.scene.queueMessage(i18next.t("abilityTriggers:postDefendDisguise", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) })); return true; } @@ -573,7 +579,7 @@ export class MoveImmunityAbAttr extends PreDefendAbAttr { } getTriggerMessage(pokemon: Pokemon, abilityName: string, ...args: any[]): string { - return `It doesn\'t affect ${pokemon.name}!`; + return i18next.t("abilityTriggers:moveImmunity", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) }); } } @@ -637,7 +643,7 @@ export class ReverseDrainAbAttr extends PostDefendAbAttr { */ applyPostDefend(pokemon: Pokemon, passive: boolean, attacker: Pokemon, move: Move, hitResult: HitResult, args: any[]): boolean { if (move.hasAttr(HitHealAttr)) { - pokemon.scene.queueMessage(getPokemonMessage(attacker, " sucked up the liquid ooze!")); + pokemon.scene.queueMessage(i18next.t("abilityTriggers:reverseDrain", { pokemonNameWithAffix: getPokemonNameWithAffix(attacker) })); return true; } return false; @@ -746,7 +752,7 @@ export class PostDefendApplyBattlerTagAbAttr extends PostDefendAbAttr { if (this.condition(pokemon, attacker, move)) { if (!pokemon.getTag(this.tagType)) { pokemon.addTag(this.tagType, undefined, undefined, pokemon.id); - pokemon.scene.queueMessage(i18next.t("abilityTriggers:windPowerCharged", { pokemonName: pokemon.name, moveName: move.name })); + pokemon.scene.queueMessage(i18next.t("abilityTriggers:windPowerCharged", { pokemonName: getPokemonNameWithAffix(pokemon), moveName: move.name })); } return true; } @@ -769,7 +775,11 @@ export class PostDefendTypeChangeAbAttr extends PostDefendAbAttr { } getTriggerMessage(pokemon: Pokemon, abilityName: string, ...args: any[]): string { - return getPokemonMessage(pokemon, `'s ${abilityName}\nmade it the ${Utils.toReadableString(Type[pokemon.getTypes(true)[0]])} type!`); + return i18next.t("abilityTriggers:postDefendTypeChange", { + pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), + abilityName: abilityName, + typeName: i18next.t(`pokemonInfo:Type.${Type[pokemon.getTypes(true)[0]]}`) + }); } } @@ -889,7 +899,10 @@ export class PostDefendContactDamageAbAttr extends PostDefendAbAttr { } getTriggerMessage(pokemon: Pokemon, abilityName: string, ...args: any[]): string { - return getPokemonMessage(pokemon, `'s ${abilityName}\nhurt its attacker!`); + return i18next.t("abilityTriggers:postDefendContactDamage", { + pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), + abilityName: abilityName, + }); } } /** @@ -961,7 +974,7 @@ export class PostDefendAbilitySwapAbAttr extends PostDefendAbAttr { } getTriggerMessage(pokemon: Pokemon, abilityName: string, ...args: any[]): string { - return getPokemonMessage(pokemon, " swapped\nabilities with its target!"); + return i18next.t("abilityTriggers:postDefendAbilitySwap", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) }); } } @@ -984,7 +997,10 @@ export class PostDefendAbilityGiveAbAttr extends PostDefendAbAttr { } getTriggerMessage(pokemon: Pokemon, abilityName: string, ...args: any[]): string { - return getPokemonMessage(pokemon, ` gave its target\n${abilityName}!`); + return i18next.t("abilityTriggers:postDefendAbilityGive", { + pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), + abilityName: abilityName, + }); } } @@ -1014,7 +1030,10 @@ export class PostDefendMoveDisableAbAttr extends PostDefendAbAttr { } getTriggerMessage(pokemon: Pokemon, abilityName: string, ...args: any[]): string { - return getPokemonMessage(this.attacker, `'s ${this.move.name}\nwas disabled!`); + return i18next.t("abilityTriggers:postDefendMoveDisable", { + pokemonNameWithAffix: getPokemonNameWithAffix(this.attacker), + moveName: this.move.name, + }); } } @@ -1227,7 +1246,10 @@ export class PokemonTypeChangeAbAttr extends PreAttackAbAttr { } getTriggerMessage(pokemon: Pokemon, abilityName: string, ...args: any[]): string { - return getPokemonMessage(pokemon, ` transformed into the ${Type[this.moveType]} type!`); + return i18next.t("abilityTriggers:pokemonTypeChange", { + pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), + moveType: i18next.t(`pokemonInfo:Type.${Type[this.moveType]}`), + }); } } @@ -1525,12 +1547,12 @@ export class PostAttackStealHeldItemAbAttr extends PostAttackAbAttr { applyPostAttack(pokemon: Pokemon, passive: boolean, defender: Pokemon, move: Move, hitResult: HitResult, args: any[]): Promise { return new Promise(resolve => { if (hitResult < HitResult.NO_EFFECT && (!this.condition || this.condition(pokemon, defender, move))) { - const heldItems = this.getTargetHeldItems(defender).filter(i => i.getTransferrable(false)); + const heldItems = this.getTargetHeldItems(defender).filter(i => i.isTransferrable); if (heldItems.length) { const stolenItem = heldItems[pokemon.randSeedInt(heldItems.length)]; pokemon.scene.tryTransferHeldItemModifier(stolenItem, pokemon, false).then(success => { if (success) { - pokemon.scene.queueMessage(getPokemonMessage(pokemon, ` stole\n${defender.name}'s ${stolenItem.type.name}!`)); + pokemon.scene.queueMessage(i18next.t("abilityTriggers:postAttackStealHeldItem", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), defenderName: defender.name, stolenItemType: stolenItem.type.name })); } resolve(success); }); @@ -1543,7 +1565,7 @@ export class PostAttackStealHeldItemAbAttr extends PostAttackAbAttr { getTargetHeldItems(target: Pokemon): PokemonHeldItemModifier[] { return target.scene.findModifiers(m => m instanceof PokemonHeldItemModifier - && (m as PokemonHeldItemModifier).pokemonId === target.id, target.isPlayer()) as PokemonHeldItemModifier[]; + && m.pokemonId === target.id, target.isPlayer()) as PokemonHeldItemModifier[]; } } @@ -1614,12 +1636,12 @@ export class PostDefendStealHeldItemAbAttr extends PostDefendAbAttr { applyPostDefend(pokemon: Pokemon, passive: boolean, attacker: Pokemon, move: Move, hitResult: HitResult, args: any[]): Promise { return new Promise(resolve => { if (hitResult < HitResult.NO_EFFECT && (!this.condition || this.condition(pokemon, attacker, move))) { - const heldItems = this.getTargetHeldItems(attacker).filter(i => i.getTransferrable(false)); + const heldItems = this.getTargetHeldItems(attacker).filter(i => i.isTransferrable); if (heldItems.length) { const stolenItem = heldItems[pokemon.randSeedInt(heldItems.length)]; pokemon.scene.tryTransferHeldItemModifier(stolenItem, pokemon, false).then(success => { if (success) { - pokemon.scene.queueMessage(getPokemonMessage(pokemon, ` stole\n${attacker.name}'s ${stolenItem.type.name}!`)); + pokemon.scene.queueMessage(i18next.t("abilityTriggers:postDefendStealHeldItem", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), attackerName: attacker.name, stolenItemType: stolenItem.type.name })); } resolve(success); }); @@ -1632,7 +1654,7 @@ export class PostDefendStealHeldItemAbAttr extends PostDefendAbAttr { getTargetHeldItems(target: Pokemon): PokemonHeldItemModifier[] { return target.scene.findModifiers(m => m instanceof PokemonHeldItemModifier - && (m as PokemonHeldItemModifier).pokemonId === target.id, target.isPlayer()) as PokemonHeldItemModifier[]; + && m.pokemonId === target.id, target.isPlayer()) as PokemonHeldItemModifier[]; } } @@ -1718,7 +1740,7 @@ export class CopyFaintedAllyAbilityAbAttr extends PostKnockOutAbAttr { applyPostKnockOut(pokemon: Pokemon, passive: boolean, knockedOut: Pokemon, args: any[]): boolean | Promise { if (pokemon.isPlayer() === knockedOut.isPlayer() && !knockedOut.getAbility().hasAttr(UncopiableAbilityAbAttr)) { pokemon.summonData.ability = knockedOut.getAbility().id; - pokemon.scene.queueMessage(getPokemonMessage(knockedOut, `'s ${allAbilities[knockedOut.getAbility().id].name} was taken over!`)); + pokemon.scene.queueMessage(i18next.t("abilityTriggers:copyFaintedAllyAbility", { pokemonNameWithAffix: getPokemonNameWithAffix(knockedOut), abilityName: allAbilities[knockedOut.getAbility().id].name })); return true; } @@ -1771,7 +1793,10 @@ export class IntimidateImmunityAbAttr extends AbAttr { } getTriggerMessage(pokemon: Pokemon, abilityName: string, ...args: any[]): string { - return getPokemonMessage(pokemon, `'s ${abilityName} prevented it from being Intimidated!`); + return i18next.t("abilityTriggers:intimidateImmunity", { + pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), + abilityName: abilityName, + }); } } @@ -1937,7 +1962,7 @@ export class PostSummonAllyHealAbAttr extends PostSummonAbAttr { const target = pokemon.getAlly(); if (target?.isActive(true)) { target.scene.unshiftPhase(new PokemonHealPhase(target.scene, target.getBattlerIndex(), - Math.max(Math.floor(pokemon.getMaxHp() / this.healRatio), 1), getPokemonMessage(target, ` drank down all the\nmatcha that ${pokemon.name} made!`), true, !this.showAnim)); + Math.max(Math.floor(pokemon.getMaxHp() / this.healRatio), 1), i18next.t("abilityTriggers:postSummonAllyHeal", { pokemonNameWithAffix: getPokemonNameWithAffix(target), pokemonName: pokemon.name }), true, !this.showAnim)); return true; } @@ -1965,7 +1990,7 @@ export class PostSummonClearAllyStatsAbAttr extends PostSummonAbAttr { target.summonData.battleStats[s] = 0; } - target.scene.queueMessage(getPokemonMessage(target, "'s stat changes\nwere removed!")); + target.scene.queueMessage(i18next.t("abilityTriggers:postSummonClearAllyStats", { pokemonNameWithAffix: getPokemonNameWithAffix(target) })); return true; } @@ -2180,7 +2205,7 @@ export class PostSummonTransformAbAttr extends PostSummonAbAttr { pokemon.loadAssets(false).then(() => pokemon.playAnim()); - pokemon.scene.queueMessage(getPokemonMessage(pokemon, ` transformed\ninto ${target.name}!`)); + pokemon.scene.queueMessage(i18next.t("abilityTriggers:postSummonTransform", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), targetName: target.name, })); return true; } @@ -2325,7 +2350,11 @@ export class ProtectStatAbAttr extends PreStatChangeAbAttr { } getTriggerMessage(pokemon: Pokemon, abilityName: string, ...args: any[]): string { - return getPokemonMessage(pokemon, `'s ${abilityName}\nprevents lowering its ${this.protectedStat !== undefined ? getBattleStatName(this.protectedStat) : "stats"}!`); + return i18next.t("abilityTriggers:protectStat", { + pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), + abilityName: abilityName, + statName: this.protectedStat !== undefined ? getBattleStatName(this.protectedStat) : "stats", // TODO : Change "stats" to i18next.t("battle:stats") after PR#2600 merged to 'main' + }); } } @@ -2387,7 +2416,16 @@ export class StatusEffectImmunityAbAttr extends PreSetStatusAbAttr { } getTriggerMessage(pokemon: Pokemon, abilityName: string, ...args: any[]): string { - return getPokemonMessage(pokemon, `'s ${abilityName}\nprevents ${this.immuneEffects.length ? getStatusEffectDescriptor(args[0] as StatusEffect) : "status problems"}!`); + return this.immuneEffects.length ? + i18next.t("abilityTriggers:statusEffectImmunityWithName", { + pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), + abilityName: abilityName, + statusEffectName: getStatusEffectDescriptor(args[0] as StatusEffect) + }) : + i18next.t("abilityTriggers:statusEffectImmunity", { + pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), + abilityName: abilityName, + }); } } @@ -2416,7 +2454,11 @@ export class BattlerTagImmunityAbAttr extends PreApplyBattlerTagAbAttr { } getTriggerMessage(pokemon: Pokemon, abilityName: string, ...args: any[]): string { - return getPokemonMessage(pokemon, `'s ${abilityName}\nprevents ${(args[0] as BattlerTag).getDescriptor()}!`); + return i18next.t("abilityTriggers:battlerTagImmunity", { + pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), + abilityName: abilityName, + battlerTagName: (args[0] as BattlerTag).getDescriptor() + }); } } @@ -2720,7 +2762,7 @@ export class ForewarnAbAttr extends PostSummonAbAttr { } } } - pokemon.scene.queueMessage(getPokemonMessage(pokemon, " was forewarned about " + maxMove + "!")); + pokemon.scene.queueMessage(i18next.t("abilityTriggers:forewarn", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), moveName: maxMove })); return true; } } @@ -2732,7 +2774,7 @@ export class FriskAbAttr extends PostSummonAbAttr { applyPostSummon(pokemon: Pokemon, passive: boolean, args: any[]): boolean { for (const opponent of pokemon.getOpponents()) { - pokemon.scene.queueMessage(getPokemonMessage(pokemon, " frisked " + opponent.name + "'s " + opponent.getAbility().name + "!")); + pokemon.scene.queueMessage(i18next.t("abilityTriggers:frisk", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), opponentName: opponent.name, opponentAbilityName: opponent.getAbility().name })); setAbilityRevealed(opponent); } return true; @@ -2800,7 +2842,7 @@ export class PostWeatherLapseHealAbAttr extends PostWeatherLapseAbAttr { const scene = pokemon.scene; const abilityName = (!passive ? pokemon.getAbility() : pokemon.getPassiveAbility()).name; scene.unshiftPhase(new PokemonHealPhase(scene, pokemon.getBattlerIndex(), - Math.max(Math.floor(pokemon.getMaxHp() / (16 / this.healFactor)), 1), getPokemonMessage(pokemon, `'s ${abilityName}\nrestored its HP a little!`), true)); + Math.max(Math.floor(pokemon.getMaxHp() / (16 / this.healFactor)), 1), i18next.t("abilityTriggers:postWeatherLapseHeal", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), abilityName: abilityName }), true)); return true; } @@ -2820,7 +2862,7 @@ export class PostWeatherLapseDamageAbAttr extends PostWeatherLapseAbAttr { applyPostWeatherLapse(pokemon: Pokemon, passive: boolean, weather: Weather, args: any[]): boolean { const scene = pokemon.scene; const abilityName = (!passive ? pokemon.getAbility() : pokemon.getPassiveAbility()).name; - scene.queueMessage(getPokemonMessage(pokemon, ` is hurt\nby its ${abilityName}!`)); + scene.queueMessage(i18next.t("abilityTriggers:postWeatherLapseDamage", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), abilityName: abilityName })); pokemon.damageAndUpdate(Math.ceil(pokemon.getMaxHp() / (16 / this.damageFactor)), HitResult.OTHER); return true; } @@ -2894,7 +2936,7 @@ export class PostTurnStatusHealAbAttr extends PostTurnAbAttr { const scene = pokemon.scene; const abilityName = (!passive ? pokemon.getAbility() : pokemon.getPassiveAbility()).name; scene.unshiftPhase(new PokemonHealPhase(scene, pokemon.getBattlerIndex(), - Math.max(Math.floor(pokemon.getMaxHp() / 8), 1), i18next.t("abilityTriggers:poisonHeal", { pokemonName: pokemon.name, abilityName: abilityName}), true)); + Math.max(Math.floor(pokemon.getMaxHp() / 8), 1), i18next.t("abilityTriggers:poisonHeal", { pokemonName: getPokemonNameWithAffix(pokemon), abilityName: abilityName}), true)); return true; } } @@ -2992,7 +3034,7 @@ export class PostTurnLootAbAttr extends PostTurnAbAttr { berryModifier.stackCount++; } - pokemon.scene.queueMessage(getPokemonMessage(pokemon, ` harvested one ${chosenBerry.name}!`)); + pokemon.scene.queueMessage(i18next.t("abilityTriggers:postTurnLootCreateEatenBerry", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), berryName: chosenBerry.name })); pokemon.scene.updateModifiers(pokemon.isPlayer()); return true; @@ -3047,7 +3089,7 @@ export class PostTurnHealAbAttr extends PostTurnAbAttr { const scene = pokemon.scene; const abilityName = (!passive ? pokemon.getAbility() : pokemon.getPassiveAbility()).name; scene.unshiftPhase(new PokemonHealPhase(scene, pokemon.getBattlerIndex(), - Math.max(Math.floor(pokemon.getMaxHp() / 16), 1), getPokemonMessage(pokemon, `'s ${abilityName}\nrestored its HP a little!`), true)); + Math.max(Math.floor(pokemon.getMaxHp() / 16), 1), i18next.t("abilityTriggers:postTurnHeal", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), abilityName: abilityName }), true)); return true; } @@ -3123,7 +3165,7 @@ export class FetchBallAbAttr extends PostTurnAbAttr { if (lastUsed !== null && pokemon.isPlayer) { pokemon.scene.pokeballCounts[lastUsed]++; pokemon.scene.currentBattle.lastUsedPokeball = null; - pokemon.scene.queueMessage(getPokemonMessage(pokemon, ` found a\n${getPokeballName(lastUsed)}!`)); + pokemon.scene.queueMessage(i18next.t("abilityTriggers:fetchBall", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), pokeballName: getPokeballName(lastUsed) })); return true; } return false; @@ -3299,7 +3341,7 @@ export class HealFromBerryUseAbAttr extends AbAttr { pokemon.scene, pokemon.getBattlerIndex(), Math.max(Math.floor(pokemon.getMaxHp() * this.healPercent), 1), - getPokemonMessage(pokemon, `'s ${abilityName}\nrestored its HP!`), + i18next.t("abilityTriggers:healFromBerryUse", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), abilityName: abilityName }), true ) ); @@ -3374,7 +3416,7 @@ export class ArenaTrapAbAttr extends CheckTrappedAbAttr { } getTriggerMessage(pokemon: Pokemon, abilityName: string, ...args: any[]): string { - return getPokemonMessage(pokemon, `\'s ${abilityName}\nprevents switching!`); + return i18next.t("abilityTriggers:arenaTrap", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), abilityName: abilityName }); } } @@ -3403,7 +3445,7 @@ export class PostBattleLootAbAttr extends PostBattleAbAttr { const randItem = Utils.randSeedItem(postBattleLoot); if (pokemon.scene.tryTransferHeldItemModifier(randItem, pokemon, true, 1, true)) { postBattleLoot.splice(postBattleLoot.indexOf(randItem), 1); - pokemon.scene.queueMessage(getPokemonMessage(pokemon, ` picked up\n${randItem.type.name}!`)); + pokemon.scene.queueMessage(i18next.t("abilityTriggers:postBattleLoot", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), itemName: randItem.type.name })); return true; } } @@ -3492,7 +3534,7 @@ export class PostFaintContactDamageAbAttr extends PostFaintAbAttr { } getTriggerMessage(pokemon: Pokemon, abilityName: string, ...args: any[]): string { - return getPokemonMessage(pokemon, `'s ${abilityName} hurt\nits attacker!`); + return i18next.t("abilityTriggers:postFaintContactDamage", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), abilityName: abilityName }); } } @@ -3512,7 +3554,7 @@ export class PostFaintHPDamageAbAttr extends PostFaintAbAttr { } getTriggerMessage(pokemon: Pokemon, abilityName: string, ...args: any[]): string { - return getPokemonMessage(pokemon, `'s ${abilityName} hurt\nits attacker!`); + return i18next.t("abilityTriggers:postFaintHpDamage", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), abilityName: abilityName }); } } @@ -3870,7 +3912,7 @@ export class IceFaceBlockPhysicalAbAttr extends ReceivedMoveDamageMultiplierAbAt * @returns {string} - The trigger message. */ getTriggerMessage(pokemon: Pokemon, abilityName: string, ...args: any[]): string { - return i18next.t("abilityTriggers:iceFaceAvoidedDamage", { pokemonName: pokemon.name, abilityName: abilityName }); + return i18next.t("abilityTriggers:iceFaceAvoidedDamage", { pokemonName: getPokemonNameWithAffix(pokemon), abilityName: abilityName }); } } @@ -3922,47 +3964,42 @@ export class BypassSpeedChanceAbAttr extends AbAttr { } } -function applyAbAttrsInternal(attrType: Constructor, - pokemon: Pokemon, applyFunc: AbAttrApplyFunc, args: any[], isAsync: boolean = false, showAbilityInstant: boolean = false, quiet: boolean = false, passive: boolean = false): Promise { - return new Promise(resolve => { +async function applyAbAttrsInternal( + attrType: Constructor, + pokemon: Pokemon, + applyFunc: AbAttrApplyFunc, + args: any[], + showAbilityInstant: boolean = false, + quiet: boolean = false, +) { + for (const passive of [false, true]) { if (!pokemon.canApplyAbility(passive)) { - if (!passive) { - return applyAbAttrsInternal(attrType, pokemon, applyFunc, args, isAsync, showAbilityInstant, quiet, true).then(() => resolve()); - } else { - return resolve(); - } + continue; } - const ability = (!passive ? pokemon.getAbility() : pokemon.getPassiveAbility()); - const attrs = ability.getAttrs(attrType); + const ability = passive ? pokemon.getPassiveAbility() : pokemon.getAbility(); + for (const attr of ability.getAttrs(attrType)) { + const condition = attr.getCondition(); + if (condition && !condition(pokemon)) { + continue; + } - const clearSpliceQueueAndResolve = () => { - pokemon.scene?.clearPhaseQueueSplice(); - if (!passive) { - return applyAbAttrsInternal(attrType, pokemon, applyFunc, args, isAsync, showAbilityInstant, quiet, true).then(() => resolve()); - } else { - return resolve(); - } - }; - const applyNextAbAttr = () => { - if (attrs.length) { - applyAbAttr(attrs.shift()); - } else { - clearSpliceQueueAndResolve(); - } - }; - const applyAbAttr = (attr: TAttr) => { - if (!canApplyAttr(pokemon, attr)) { - return applyNextAbAttr(); - } pokemon.scene.setPhaseQueueSplice(); - const onApplySuccess = () => { + + let result = applyFunc(attr, passive); + // TODO Remove this when promises get reworked PR#924 + if (result instanceof Promise) { + result = await result; + } + + if (result) { if (pokemon.summonData && !pokemon.summonData.abilitiesApplied.includes(ability.id)) { pokemon.summonData.abilitiesApplied.push(ability.id); } if (pokemon.battleData && !pokemon.battleData.abilitiesApplied.includes(ability.id)) { pokemon.battleData.abilitiesApplied.push(ability.id); } + if (attr.showAbility && !quiet) { if (showAbilityInstant) { pokemon.scene.abilityBar.showAbility(pokemon, passive); @@ -3970,34 +4007,18 @@ function applyAbAttrsInternal(attrType: Constructor queueShowAbility(pokemon, passive); } } + if (!quiet) { - const message = attr.getTriggerMessage(pokemon, (!passive ? pokemon.getAbility() : pokemon.getPassiveAbility()).name, args); + const message = attr.getTriggerMessage(pokemon, ability.name, args); if (message) { - if (isAsync) { - pokemon.scene.ui.showText(message, null, () => pokemon.scene.ui.showText(null, 0), null, true); - } else { - pokemon.scene.queueMessage(message); - } + pokemon.scene.queueMessage(message); } } - }; - const result = applyFunc(attr, passive); - if (result instanceof Promise) { - result.then(success => { - if (success) { - onApplySuccess(); - } - applyNextAbAttr(); - }); - } else { - if (result) { - onApplySuccess(); - } - applyNextAbAttr(); } - }; - applyNextAbAttr(); - }); + } + + pokemon.scene.clearPhaseQueueSplice(); + } } export function applyAbAttrs(attrType: Constructor, pokemon: Pokemon, cancelled: Utils.BooleanHolder, ...args: any[]): Promise { @@ -4012,7 +4033,7 @@ export function applyPostBattleInitAbAttrs(attrType: Constructor, pokemon: Pokemon, attacker: Pokemon, move: Move, cancelled: Utils.BooleanHolder, ...args: any[]): Promise { const simulated = args.length > 1 && args[1]; - return applyAbAttrsInternal(attrType, pokemon, (attr, passive) => attr.applyPreDefend(pokemon, passive, attacker, move, cancelled, args), args, false, false, simulated); + return applyAbAttrsInternal(attrType, pokemon, (attr, passive) => attr.applyPreDefend(pokemon, passive, attacker, move, cancelled, args), args, false, simulated); } export function applyPostDefendAbAttrs(attrType: Constructor, @@ -4072,7 +4093,7 @@ export function applyPostSummonAbAttrs(attrType: Constructor, export function applyPreSwitchOutAbAttrs(attrType: Constructor, pokemon: Pokemon, ...args: any[]): Promise { - return applyAbAttrsInternal(attrType, pokemon, (attr, passive) => attr.applyPreSwitchOut(pokemon, passive, args), args, false, true); + return applyAbAttrsInternal(attrType, pokemon, (attr, passive) => attr.applyPreSwitchOut(pokemon, passive, args), args, true); } export function applyPreStatChangeAbAttrs(attrType: Constructor, @@ -4088,7 +4109,7 @@ export function applyPostStatChangeAbAttrs(attrType: Constructor, pokemon: Pokemon, effect: StatusEffect, cancelled: Utils.BooleanHolder, ...args: any[]): Promise { const simulated = args.length > 1 && args[1]; - return applyAbAttrsInternal(attrType, pokemon, (attr, passive) => attr.applyPreSetStatus(pokemon, passive, effect, cancelled, args), args, false, false, !simulated); + return applyAbAttrsInternal(attrType, pokemon, (attr, passive) => attr.applyPreSetStatus(pokemon, passive, effect, cancelled, args), args, false, !simulated); } export function applyPreApplyBattlerTagAbAttrs(attrType: Constructor, @@ -4098,7 +4119,7 @@ export function applyPreApplyBattlerTagAbAttrs(attrType: Constructor, pokemon: Pokemon, weather: Weather, cancelled: Utils.BooleanHolder, ...args: any[]): Promise { - return applyAbAttrsInternal(attrType, pokemon, (attr, passive) => attr.applyPreWeatherEffect(pokemon, passive, weather, cancelled, args), args, false, true); + return applyAbAttrsInternal(attrType, pokemon, (attr, passive) => attr.applyPreWeatherEffect(pokemon, passive, weather, cancelled, args), args, true); } export function applyPostTurnAbAttrs(attrType: Constructor, @@ -4123,7 +4144,7 @@ export function applyPostTerrainChangeAbAttrs(attrType: Constructor, pokemon: Pokemon, trapped: Utils.BooleanHolder, otherPokemon: Pokemon, ...args: any[]): Promise { - return applyAbAttrsInternal(attrType, pokemon, (attr, passive) => attr.applyCheckTrapped(pokemon, passive, trapped, otherPokemon, args), args, true); + return applyAbAttrsInternal(attrType, pokemon, (attr, passive) => attr.applyCheckTrapped(pokemon, passive, trapped, otherPokemon, args), args); } export function applyPostBattleAbAttrs(attrType: Constructor, @@ -4136,11 +4157,6 @@ export function applyPostFaintAbAttrs(attrType: Constructor, return applyAbAttrsInternal(attrType, pokemon, (attr, passive) => attr.applyPostFaint(pokemon, passive, attacker, move, hitResult, args), args); } -function canApplyAttr(pokemon: Pokemon, attr: AbAttr): boolean { - const condition = attr.getCondition(); - return !condition || condition(pokemon); -} - function queueShowAbility(pokemon: Pokemon, passive: boolean): void { pokemon.scene.unshiftPhase(new ShowAbilityPhase(pokemon.scene, pokemon.id, passive)); pokemon.scene.clearPhaseQueueSplice(); @@ -4311,7 +4327,7 @@ export function initAbilities() { .attr(PostBiomeChangeWeatherChangeAbAttr, WeatherType.SANDSTORM), new Ability(Abilities.PRESSURE, 3) .attr(IncreasePpAbAttr) - .attr(PostSummonMessageAbAttr, (pokemon: Pokemon) => getPokemonMessage(pokemon, " is exerting its Pressure!")), + .attr(PostSummonMessageAbAttr, (pokemon: Pokemon) => i18next.t("abilityTriggers:postSummonPressure", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) })), new Ability(Abilities.THICK_FAT, 3) .attr(ReceivedTypeDamageMultiplierAbAttr, Type.FIRE, 0.5) .attr(ReceivedTypeDamageMultiplierAbAttr, Type.ICE, 0.5) @@ -4480,7 +4496,7 @@ export function initAbilities() { new Ability(Abilities.KLUTZ, 4) .unimplemented(), new Ability(Abilities.MOLD_BREAKER, 4) - .attr(PostSummonMessageAbAttr, (pokemon: Pokemon) => getPokemonMessage(pokemon, " breaks the mold!")) + .attr(PostSummonMessageAbAttr, (pokemon: Pokemon) => i18next.t("abilityTriggers:postSummonMoldBreaker", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) })) .attr(MoveAbilityBypassAbAttr), new Ability(Abilities.SUPER_LUCK, 4) .attr(BonusCritAbAttr) @@ -4489,7 +4505,7 @@ export function initAbilities() { .attr(PostFaintContactDamageAbAttr,4) .bypassFaint(), new Ability(Abilities.ANTICIPATION, 4) - .conditionalAttr(getAnticipationCondition(), PostSummonMessageAbAttr, (pokemon: Pokemon) => getPokemonMessage(pokemon, " shuddered!")), + .conditionalAttr(getAnticipationCondition(), PostSummonMessageAbAttr, (pokemon: Pokemon) => i18next.t("abilityTriggers:postSummonAnticipation", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) })), new Ability(Abilities.FOREWARN, 4) .attr(ForewarnAbAttr), new Ability(Abilities.UNAWARE, 4) @@ -4664,10 +4680,10 @@ export function initAbilities() { .attr(BattleStatMultiplierAbAttr, BattleStat.ACC, 1.1) .partial(), new Ability(Abilities.TURBOBLAZE, 5) - .attr(PostSummonMessageAbAttr, (pokemon: Pokemon) => getPokemonMessage(pokemon, " is radiating a blazing aura!")) + .attr(PostSummonMessageAbAttr, (pokemon: Pokemon) => i18next.t("abilityTriggers:postSummonTurboblaze", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) })) .attr(MoveAbilityBypassAbAttr), new Ability(Abilities.TERAVOLT, 5) - .attr(PostSummonMessageAbAttr, (pokemon: Pokemon) => getPokemonMessage(pokemon, " is radiating a bursting aura!")) + .attr(PostSummonMessageAbAttr, (pokemon: Pokemon) => i18next.t("abilityTriggers:postSummonTeravolt", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) })) .attr(MoveAbilityBypassAbAttr), new Ability(Abilities.AROMA_VEIL, 6) .ignorable() @@ -4725,10 +4741,10 @@ export function initAbilities() { new Ability(Abilities.PARENTAL_BOND, 6) .attr(AddSecondStrikeAbAttr, 0.25), new Ability(Abilities.DARK_AURA, 6) - .attr(PostSummonMessageAbAttr, (pokemon: Pokemon) => getPokemonMessage(pokemon, " is radiating a Dark Aura!")) + .attr(PostSummonMessageAbAttr, (pokemon: Pokemon) => i18next.t("abilityTriggers:postSummonDarkAura", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) })) .attr(FieldMoveTypePowerBoostAbAttr, Type.DARK, 4 / 3), new Ability(Abilities.FAIRY_AURA, 6) - .attr(PostSummonMessageAbAttr, (pokemon: Pokemon) => getPokemonMessage(pokemon, " is radiating a Fairy Aura!")) + .attr(PostSummonMessageAbAttr, (pokemon: Pokemon) => i18next.t("abilityTriggers:postSummonFairyAura", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) })) .attr(FieldMoveTypePowerBoostAbAttr, Type.FAIRY, 4 / 3), new Ability(Abilities.AURA_BREAK, 6) .ignorable() @@ -4991,7 +5007,7 @@ export function initAbilities() { .attr(UncopiableAbilityAbAttr) .attr(UnswappableAbilityAbAttr) .attr(NoTransformAbilityAbAttr) - .attr(PostSummonMessageAbAttr, (pokemon: Pokemon) => getPokemonMessage(pokemon, "'s Neutralizing Gas filled the area!")) + .attr(PostSummonMessageAbAttr, (pokemon: Pokemon) => i18next.t("abilityTriggers:postSummonNeutralizingGas", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) })) .partial(), new Ability(Abilities.PASTEL_VEIL, 8) .attr(StatusEffectImmunityAbAttr, StatusEffect.POISON, StatusEffect.TOXIC) @@ -5019,14 +5035,14 @@ export function initAbilities() { new Ability(Abilities.GRIM_NEIGH, 8) .attr(PostVictoryStatChangeAbAttr, BattleStat.SPATK, 1), new Ability(Abilities.AS_ONE_GLASTRIER, 8) - .attr(PostSummonMessageAbAttr, (pokemon: Pokemon) => getPokemonMessage(pokemon, " has two Abilities!")) + .attr(PostSummonMessageAbAttr, (pokemon: Pokemon) => i18next.t("abilityTriggers:postSummonAsOneGlastrier", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) })) .attr(PreventBerryUseAbAttr) .attr(PostVictoryStatChangeAbAttr, BattleStat.ATK, 1) .attr(UncopiableAbilityAbAttr) .attr(UnswappableAbilityAbAttr) .attr(UnsuppressableAbilityAbAttr), new Ability(Abilities.AS_ONE_SPECTRIER, 8) - .attr(PostSummonMessageAbAttr, (pokemon: Pokemon) => getPokemonMessage(pokemon, " has two Abilities!")) + .attr(PostSummonMessageAbAttr, (pokemon: Pokemon) => i18next.t("abilityTriggers:postSummonAsOneSpectrier", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) })) .attr(PreventBerryUseAbAttr) .attr(PostVictoryStatChangeAbAttr, BattleStat.SPATK, 1) .attr(UncopiableAbilityAbAttr) @@ -5099,19 +5115,19 @@ export function initAbilities() { .partial(), new Ability(Abilities.VESSEL_OF_RUIN, 9) .attr(FieldMultiplyBattleStatAbAttr, Stat.SPATK, 0.75) - .attr(PostSummonMessageAbAttr, (user) => getPokemonMessage(user, `'s Vessel of Ruin lowered the ${getStatName(Stat.SPATK)}\nof all surrounding Pokémon!`)) + .attr(PostSummonMessageAbAttr, (user) => i18next.t("abilityTriggers:postSummonVesselOfRuin", { pokemonNameWithAffix: getPokemonNameWithAffix(user), statName: getStatName(Stat.SPATK) })) .ignorable(), new Ability(Abilities.SWORD_OF_RUIN, 9) .attr(FieldMultiplyBattleStatAbAttr, Stat.DEF, 0.75) - .attr(PostSummonMessageAbAttr, (user) => getPokemonMessage(user, `'s Sword of Ruin lowered the ${getStatName(Stat.DEF)}\nof all surrounding Pokémon!`)) + .attr(PostSummonMessageAbAttr, (user) => i18next.t("abilityTriggers:postSummonSwordOfRuin", { pokemonNameWithAffix: getPokemonNameWithAffix(user), statName: getStatName(Stat.DEF) })) .ignorable(), new Ability(Abilities.TABLETS_OF_RUIN, 9) .attr(FieldMultiplyBattleStatAbAttr, Stat.ATK, 0.75) - .attr(PostSummonMessageAbAttr, (user) => getPokemonMessage(user, `'s Tablets of Ruin lowered the ${getStatName(Stat.ATK)}\nof all surrounding Pokémon!`)) + .attr(PostSummonMessageAbAttr, (user) => i18next.t("abilityTriggers:postSummonTabletsOfRuin", { pokemonNameWithAffix: getPokemonNameWithAffix(user), statName: getStatName(Stat.ATK) })) .ignorable(), new Ability(Abilities.BEADS_OF_RUIN, 9) .attr(FieldMultiplyBattleStatAbAttr, Stat.SPDEF, 0.75) - .attr(PostSummonMessageAbAttr, (user) => getPokemonMessage(user, `'s Beads of Ruin lowered the ${getStatName(Stat.SPDEF)}\nof all surrounding Pokémon!`)) + .attr(PostSummonMessageAbAttr, (user) => i18next.t("abilityTriggers:postSummonBeadsOfRuin", { pokemonNameWithAffix: getPokemonNameWithAffix(user), statName: getStatName(Stat.SPDEF) })) .ignorable(), new Ability(Abilities.ORICHALCUM_PULSE, 9) .attr(PostSummonWeatherChangeAbAttr, WeatherType.SUNNY) diff --git a/src/data/arena-tag.ts b/src/data/arena-tag.ts index 28d38daffb4..2676826ff63 100644 --- a/src/data/arena-tag.ts +++ b/src/data/arena-tag.ts @@ -2,7 +2,7 @@ import { Arena } from "../field/arena"; import { Type } from "./type"; import * as Utils from "../utils"; import { MoveCategory, allMoves, MoveTarget } from "./move"; -import { getPokemonMessage } from "../messages"; +import { getPokemonMessage, getPokemonNameWithAffix } from "../messages"; import Pokemon, { HitResult, PokemonMove } from "../field/pokemon"; import { MoveEffectPhase, PokemonHealPhase, ShowAbilityPhase, StatChangePhase } from "../phases"; import { StatusEffect } from "./status-effect"; @@ -635,7 +635,7 @@ class StealthRockTag extends ArenaTrapTag { if (damageHpRatio) { const damage = Math.ceil(pokemon.getMaxHp() * damageHpRatio); - pokemon.scene.queueMessage(`Pointed stones dug into\n${pokemon.name}!`); + pokemon.scene.queueMessage(`Pointed stones dug into\n${getPokemonNameWithAffix(pokemon)}!`); pokemon.damageAndUpdate(damage, HitResult.OTHER); if (pokemon.turnData) { pokemon.turnData.damageTaken += damage; @@ -677,7 +677,7 @@ class StickyWebTag extends ArenaTrapTag { const cancelled = new Utils.BooleanHolder(false); applyAbAttrs(ProtectStatAbAttr, pokemon, cancelled); if (!cancelled.value) { - pokemon.scene.queueMessage(`The opposing ${pokemon.name} was caught in a sticky web!`); + pokemon.scene.queueMessage(`The opposing ${getPokemonNameWithAffix(pokemon)} was caught in a sticky web!`); const statLevels = new Utils.NumberHolder(-1); pokemon.scene.unshiftPhase(new StatChangePhase(pokemon.scene, pokemon.getBattlerIndex(), false, [BattleStat.SPD], statLevels.value)); } @@ -759,7 +759,7 @@ class TailwindTag extends ArenaTag { // 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: pokemon.name, moveName: this.getMoveName() })); + pokemon.scene.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)) { diff --git a/src/data/battle-stat.ts b/src/data/battle-stat.ts index 7dccd4f8a7c..47f52b46d94 100644 --- a/src/data/battle-stat.ts +++ b/src/data/battle-stat.ts @@ -1,4 +1,4 @@ -import i18next from "i18next"; +import i18next, {ParseKeys} from "i18next"; export enum BattleStat { ATK, @@ -32,7 +32,7 @@ export function getBattleStatName(stat: BattleStat) { } } -export function getBattleStatLevelChangeDescription(pokemonNameWithAffix: string, stats: string, levels: integer, up: boolean) { +export function getBattleStatLevelChangeDescription(pokemonNameWithAffix: string, stats: string, levels: integer, up: boolean, count: integer = 1) { const stringKey = (() => { if (up) { switch (levels) { @@ -64,6 +64,5 @@ export function getBattleStatLevelChangeDescription(pokemonNameWithAffix: string } } })(); - - return i18next.t(stringKey, { pokemonNameWithAffix, stats }); + return i18next.t(stringKey as ParseKeys, { pokemonNameWithAffix, stats, count }); } diff --git a/src/data/battler-tags.ts b/src/data/battler-tags.ts index 41b6f73ec28..5d175ca22ec 100644 --- a/src/data/battler-tags.ts +++ b/src/data/battler-tags.ts @@ -1,6 +1,6 @@ import { CommonAnim, CommonBattleAnim } from "./battle-anims"; import { CommonAnimPhase, MoveEffectPhase, MovePhase, PokemonHealPhase, ShowAbilityPhase, StatChangePhase } from "../phases"; -import { getPokemonMessage, getPokemonNameWithAffix } from "../messages"; +import { getPokemonNameWithAffix } from "../messages"; import Pokemon, { MoveResult, HitResult } from "../field/pokemon"; import { Stat, getStatName } from "./pokemon-stat"; import { StatusEffect } from "./status-effect"; @@ -31,14 +31,14 @@ export enum BattlerTagLapseType { export class BattlerTag { public tagType: BattlerTagType; - public lapseType: BattlerTagLapseType; + public lapseType: BattlerTagLapseType[]; public turnCount: integer; public sourceMove: Moves; public sourceId?: integer; - constructor(tagType: BattlerTagType, lapseType: BattlerTagLapseType, turnCount: integer, sourceMove: Moves, sourceId?: integer) { + constructor(tagType: BattlerTagType, lapseType: BattlerTagLapseType | BattlerTagLapseType[], turnCount: integer, sourceMove: Moves, sourceId?: integer) { this.tagType = tagType; - this.lapseType = lapseType; + this.lapseType = typeof lapseType === "number" ? [ lapseType ] : lapseType; this.turnCount = turnCount; this.sourceMove = sourceMove; this.sourceId = sourceId; @@ -142,7 +142,7 @@ export class TrappedTag extends BattlerTag { } getDescriptor(): string { - return "trapping"; + return i18next.t("battlerTags:trappedDesc"); } isSourceLinked(): boolean { @@ -154,9 +154,12 @@ export class TrappedTag extends BattlerTag { } } +/** + * BattlerTag that represents the {@link https://bulbapedia.bulbagarden.net/wiki/Flinch Flinch} status condition + */ export class FlinchedTag extends BattlerTag { constructor(sourceMove: Moves) { - super(BattlerTagType.FLINCHED, BattlerTagLapseType.PRE_MOVE, 0, sourceMove); + super(BattlerTagType.FLINCHED, [ BattlerTagLapseType.PRE_MOVE, BattlerTagLapseType.TURN_END ], 0, sourceMove); } onAdd(pokemon: Pokemon): void { @@ -169,17 +172,23 @@ export class FlinchedTag extends BattlerTag { return !pokemon.isMax(); } + /** + * Cancels the Pokemon's next Move on the turn this tag is applied + * @param pokemon The {@linkcode Pokemon} with this tag + * @param lapseType The {@linkcode BattlerTagLapseType lapse type} used for this function call + * @returns `false` (This tag is always removed after applying its effects) + */ lapse(pokemon: Pokemon, lapseType: BattlerTagLapseType): boolean { - super.lapse(pokemon, lapseType); + if (lapseType === BattlerTagLapseType.PRE_MOVE) { + (pokemon.scene.getCurrentPhase() as MovePhase).cancel(); + pokemon.scene.queueMessage(i18next.t("battle:battlerTagsFlinchedLapse", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) })); + } - (pokemon.scene.getCurrentPhase() as MovePhase).cancel(); - pokemon.scene.queueMessage(i18next.t("battle:battlerTagsFlinchedLapse", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) })); - - return true; + return super.lapse(pokemon, lapseType); } getDescriptor(): string { - return "flinching"; + return i18next.t("battlerTags:flinchedDesc"); } } @@ -200,14 +209,13 @@ export class InterruptedTag extends BattlerTag { } lapse(pokemon: Pokemon, lapseType: BattlerTagLapseType): boolean { - super.lapse(pokemon, lapseType); (pokemon.scene.getCurrentPhase() as MovePhase).cancel(); - return true; + return super.lapse(pokemon, lapseType); } } /** - * BattlerTag that represents the {@link https://bulbapedia.bulbagarden.net/wiki/Confusion_(status_condition)} + * BattlerTag that represents the {@link https://bulbapedia.bulbagarden.net/wiki/Confusion_(status_condition) Confusion} status condition */ export class ConfusedTag extends BattlerTag { constructor(turnCount: integer, sourceMove: Moves) { @@ -260,7 +268,7 @@ export class ConfusedTag extends BattlerTag { } getDescriptor(): string { - return "confusion"; + return i18next.t("battlerTags:confusedDesc"); } } @@ -327,7 +335,7 @@ export class InfatuatedTag extends BattlerTag { pokemon.scene.queueMessage( i18next.t("battle:battlerTagsInfatuatedOnAdd", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), - sourcePokemonName: pokemon.scene.getPokemonById(this.sourceId).name + sourcePokemonName: getPokemonNameWithAffix(pokemon.scene.getPokemonById(this.sourceId)) }) ); } @@ -345,7 +353,7 @@ export class InfatuatedTag extends BattlerTag { pokemon.scene.queueMessage( i18next.t("battle:battlerTagsInfatuatedLapse", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), - sourcePokemonName: pokemon.scene.getPokemonById(this.sourceId).name + sourcePokemonName: getPokemonNameWithAffix(pokemon.scene.getPokemonById(this.sourceId)) }) ); pokemon.scene.unshiftPhase(new CommonAnimPhase(pokemon.scene, pokemon.getBattlerIndex(), undefined, CommonAnim.ATTRACT)); @@ -370,7 +378,7 @@ export class InfatuatedTag extends BattlerTag { } getDescriptor(): string { - return "infatuation"; + return i18next.t("battlerTags:infatuatedDesc"); } } @@ -427,7 +435,7 @@ export class SeedTag extends BattlerTag { } getDescriptor(): string { - return "seeding"; + return i18next.t("battlerTags:seedDesc"); } } @@ -467,7 +475,7 @@ export class NightmareTag extends BattlerTag { } getDescriptor(): string { - return "nightmares"; + return i18next.t("battlerTags:nightmareDesc"); } } @@ -573,7 +581,7 @@ export class HelpingHandTag extends BattlerTag { pokemon.scene.queueMessage( i18next.t("battle:battlerTagsHelpingHandOnAdd", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon.scene.getPokemonById(this.sourceId)), - pokemonName: pokemon.name + pokemonName: getPokemonNameWithAffix(pokemon) }) ); } @@ -622,7 +630,33 @@ export class IngrainTag extends TrappedTag { } getDescriptor(): string { - return "roots"; + return i18next.t("battlerTags:ingrainDesc"); + } +} + +/** + * Octolock traps the target pokemon and reduces its DEF and SPDEF by one stage at the + * end of each turn. + */ +export class OctolockTag extends TrappedTag { + constructor(sourceId: number) { + super(BattlerTagType.OCTOLOCK, BattlerTagLapseType.TURN_END, 1, Moves.OCTOLOCK, sourceId); + } + + canAdd(pokemon: Pokemon): boolean { + const isOctolocked = pokemon.getTag(BattlerTagType.OCTOLOCK); + return !isOctolocked; + } + + lapse(pokemon: Pokemon, lapseType: BattlerTagLapseType): boolean { + const shouldLapse = lapseType !== BattlerTagLapseType.CUSTOM || super.lapse(pokemon, lapseType); + + if (shouldLapse) { + pokemon.scene.unshiftPhase(new StatChangePhase(pokemon.scene, pokemon.getBattlerIndex(), true, [BattleStat.DEF, BattleStat.SPDEF], -1)); + return true; + } + + return false; } } @@ -648,7 +682,7 @@ export class AquaRingTag extends BattlerTag { Math.floor(pokemon.getMaxHp() / 16), i18next.t("battle:battlerTagsAquaRingLapse", { moveName: this.getMoveName(), - pokemonName: pokemon.name + pokemonName: getPokemonNameWithAffix(pokemon) }), true)); } @@ -709,7 +743,7 @@ export class DrowsyTag extends BattlerTag { } getDescriptor(): string { - return "drowsiness"; + return i18next.t("battlerTags:drowsyDesc"); } } @@ -767,7 +801,7 @@ export class BindTag extends DamagingTrapTag { getTrapMessage(pokemon: Pokemon): string { return i18next.t("battle:battlerTagsBindOnTrap", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), - sourcePokemonName: pokemon.scene.getPokemonById(this.sourceId).name, + sourcePokemonName: getPokemonNameWithAffix(pokemon.scene.getPokemonById(this.sourceId)), moveName: this.getMoveName() }); } @@ -781,7 +815,7 @@ export class WrapTag extends DamagingTrapTag { getTrapMessage(pokemon: Pokemon): string { return i18next.t("battle:battlerTagsWrapOnTrap", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), - sourcePokemonName: pokemon.scene.getPokemonById(this.sourceId).name + sourcePokemonName: getPokemonNameWithAffix(pokemon.scene.getPokemonById(this.sourceId)) }); } } @@ -816,7 +850,7 @@ export class ClampTag extends DamagingTrapTag { getTrapMessage(pokemon: Pokemon): string { return i18next.t("battle:battlerTagsClampOnTrap", { sourcePokemonNameWithAffix: getPokemonNameWithAffix(pokemon.scene.getPokemonById(this.sourceId)), - pokemonName: pokemon.name, + pokemonName: getPokemonNameWithAffix(pokemon), }); } } @@ -883,7 +917,7 @@ export class InfestationTag extends DamagingTrapTag { export class ProtectedTag extends BattlerTag { constructor(sourceMove: Moves, tagType: BattlerTagType = BattlerTagType.PROTECTED) { - super(tagType, BattlerTagLapseType.CUSTOM, 0, sourceMove); + super(tagType, BattlerTagLapseType.TURN_END, 0, sourceMove); } onAdd(pokemon: Pokemon): void { @@ -1106,7 +1140,7 @@ export class CenterOfAttentionTag extends BattlerTag { onAdd(pokemon: Pokemon): void { super.onAdd(pokemon); - pokemon.scene.queueMessage(getPokemonMessage(pokemon, " became the center\nof attention!")); + pokemon.scene.queueMessage(i18next.t("battle:battlerTagsCenterOfAttentionOnAdd", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) })); } } @@ -1313,13 +1347,13 @@ export class MagnetRisenTag extends TypeImmuneTag { onAdd(pokemon: Pokemon): void { super.onAdd(pokemon); - pokemon.scene.queueMessage(getPokemonMessage(pokemon, " levitated with electromagnetism!")); + pokemon.scene.queueMessage(i18next.t("battle:battlerTagsMagnetRisenOnAdd", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) })); } onRemove(pokemon: Pokemon): void { super.onRemove(pokemon); - pokemon.scene.queueMessage(getPokemonMessage(pokemon, " stopped levitating!")); + pokemon.scene.queueMessage(i18next.t("battle:battlerTagsMagnetRisenOnRemove", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) })); } } @@ -1386,6 +1420,18 @@ export class IgnoreAccuracyTag extends BattlerTag { } } +export class AlwaysGetHitTag extends BattlerTag { + constructor(sourceMove: Moves) { + super(BattlerTagType.ALWAYS_GET_HIT, BattlerTagLapseType.PRE_MOVE, 1, sourceMove); + } +} + +export class ReceiveDoubleDamageTag extends BattlerTag { + constructor(sourceMove: Moves) { + super(BattlerTagType.RECEIVE_DOUBLE_DAMAGE, BattlerTagLapseType.PRE_MOVE, 1, sourceMove); + } +} + export class SaltCuredTag extends BattlerTag { private sourceIndex: integer; @@ -1477,8 +1523,8 @@ export class CursedTag extends BattlerTag { /** * Battler tag for effects that ground the source, allowing Ground-type moves to hit them. Encompasses two tag types: - * @item IGNORE_FLYING: Persistent grounding effects (i.e. from Smack Down and Thousand Waves) - * @item ROOSTED: One-turn grounding effects (i.e. from Roost) + * @item `IGNORE_FLYING`: Persistent grounding effects (i.e. from Smack Down and Thousand Waves) + * @item `ROOSTED`: One-turn grounding effects (i.e. from Roost) */ export class GroundedTag extends BattlerTag { constructor(tagType: BattlerTagType, lapseType: BattlerTagLapseType, sourceMove: Moves) { @@ -1634,6 +1680,10 @@ export function getBattlerTag(tagType: BattlerTagType, turnCount: integer, sourc return new BattlerTag(tagType, BattlerTagLapseType.AFTER_MOVE, turnCount, sourceMove); case BattlerTagType.IGNORE_ACCURACY: return new IgnoreAccuracyTag(sourceMove); + case BattlerTagType.ALWAYS_GET_HIT: + return new AlwaysGetHitTag(sourceMove); + case BattlerTagType.RECEIVE_DOUBLE_DAMAGE: + return new ReceiveDoubleDamageTag(sourceMove); case BattlerTagType.BYPASS_SLEEP: return new BattlerTag(BattlerTagType.BYPASS_SLEEP, BattlerTagLapseType.TURN_END, turnCount, sourceMove); case BattlerTagType.IGNORE_FLYING: @@ -1654,6 +1704,8 @@ export function getBattlerTag(tagType: BattlerTagType, turnCount: integer, sourc return new DestinyBondTag(sourceMove, sourceId); case BattlerTagType.ICE_FACE: return new IceFaceTag(sourceMove); + case BattlerTagType.OCTOLOCK: + return new OctolockTag(sourceId); case BattlerTagType.NONE: default: return new BattlerTag(tagType, BattlerTagLapseType.CUSTOM, turnCount, sourceMove, sourceId); diff --git a/src/data/berry.ts b/src/data/berry.ts index 2f0f466d8a9..5ca64544544 100644 --- a/src/data/berry.ts +++ b/src/data/berry.ts @@ -1,5 +1,5 @@ import { PokemonHealPhase, StatChangePhase } from "../phases"; -import { getPokemonMessage, getPokemonNameWithAffix } from "../messages"; +import { getPokemonNameWithAffix } from "../messages"; import Pokemon, { HitResult } from "../field/pokemon"; import { BattleStat } from "./battle-stat"; import { getStatusEffectHealText } from "./status-effect"; @@ -72,7 +72,7 @@ export function getBerryEffectFunc(berryType: BerryType): BerryEffectFunc { const hpHealed = new Utils.NumberHolder(Math.floor(pokemon.getMaxHp() / 4)); applyAbAttrs(DoubleBerryEffectAbAttr, pokemon, null, hpHealed); pokemon.scene.unshiftPhase(new PokemonHealPhase(pokemon.scene, pokemon.getBattlerIndex(), - hpHealed.value, getPokemonMessage(pokemon, `'s ${getBerryName(berryType)}\nrestored its HP!`), true)); + hpHealed.value, i18next.t("battle:hpHealBerry", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), berryName: getBerryName(berryType) }), true)); }; case BerryType.LUM: return (pokemon: Pokemon) => { @@ -123,7 +123,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); if (ppRestoreMove !== undefined) { ppRestoreMove.ppUsed = Math.max(ppRestoreMove.ppUsed - 10, 0); - pokemon.scene.queueMessage(getPokemonMessage(pokemon, ` restored PP to its move ${ppRestoreMove.getName()}\nusing its ${getBerryName(berryType)}!`)); + pokemon.scene.queueMessage(i18next.t("battle:ppHealBerry", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), moveName: ppRestoreMove.getName(), berryName: getBerryName(berryType) })); } }; } diff --git a/src/data/challenge.ts b/src/data/challenge.ts index 75b200b24ee..9035c7e7a3f 100644 --- a/src/data/challenge.ts +++ b/src/data/challenge.ts @@ -1,52 +1,94 @@ import * as Utils from "../utils"; import i18next from "i18next"; -import { DexAttrProps, GameData } from "#app/system/game-data.js"; +import { defaultStarterSpecies, DexAttrProps, GameData } from "#app/system/game-data.js"; import PokemonSpecies, { getPokemonSpecies, getPokemonSpeciesForm, speciesStarters } from "./pokemon-species"; -import Pokemon from "#app/field/pokemon.js"; +import Pokemon, { PokemonMove } from "#app/field/pokemon.js"; import { BattleType, FixedBattleConfig } from "#app/battle.js"; import Trainer, { TrainerVariant } from "#app/field/trainer.js"; import { GameMode } from "#app/game-mode.js"; import { Type } from "./type"; -import { pokemonEvolutions } from "./pokemon-evolutions"; -import { pokemonFormChanges } from "./pokemon-forms"; import { Challenges } from "#enums/challenges"; import { Species } from "#enums/species"; import { TrainerType } from "#enums/trainer-type"; +import { Nature } from "./nature"; +import { Moves } from "#app/enums/moves.js"; import { TypeColor, TypeShadow } from "#app/enums/color.js"; +import { Gender } from "./gender"; +import { pokemonEvolutions } from "./pokemon-evolutions"; +import { pokemonFormChanges } from "./pokemon-forms"; /** * An enum for all the challenge types. The parameter entries on these describe the * parameters to use when calling the applyChallenges function. */ export enum ChallengeType { - /** - * Challenges which modify what starters you can choose - * @param args [0] {@link PokemonSpecies} The species to check - * [1] {@link Utils.BooleanHolder} Sets to false if illegal, pass in true. - */ + /** + * Challenges which modify what starters you can choose + * @see {@link Challenge.applyStarterChoice} + */ STARTER_CHOICE, - /** - * Challenges which modify how many starter points you have - * @param args [0] {@link Utils.NumberHolder} The amount of starter points you have - */ + /** + * Challenges which modify how many starter points you have + * @see {@link Challenge.applyStarterPoints} + */ STARTER_POINTS, + /** + * Challenges which modify how many starter points you have + * @see {@link Challenge.applyStarterPointCost} + */ + STARTER_COST, /** * Challenges which modify your starters in some way - * Not Fully Implemented + * @see {@link Challenge.applyStarterModify} */ STARTER_MODIFY, /** * Challenges which limit which pokemon you can have in battle. - * @param args [0] {@link Pokemon} The pokemon to check - * [1] {@link Utils.BooleanHolder} Sets to false if illegal, pass in true. + * @see {@link Challenge.applyPokemonInBattle} */ POKEMON_IN_BATTLE, /** * Adds or modifies the fixed battles in a run - * @param args [0] integer The wave to get a battle for - * [1] {@link FixedBattleConfig} A new fixed battle. It'll be modified if a battle exists. + * @see {@link Challenge.applyFixedBattle} */ FIXED_BATTLES, + /** + * Modifies what level the AI pokemon are. UNIMPLEMENTED. + */ + AI_LEVEL, + /** + * Modifies how many move slots the AI has. UNIMPLEMENTED. + */ + AI_MOVE_SLOTS, + /** + * Modifies if a pokemon has its passive. UNIMPLEMENTED. + */ + PASSIVE_ACCESS, + /** + * Modifies the game mode settings in some way. UNIMPLEMENTED. + */ + GAME_MODE_MODIFY, + /** + * Modifies what level AI pokemon can access a move. UNIMPLEMENTED. + */ + MOVE_ACCESS, + /** + * Modifies what weight AI pokemon have when generating movesets. UNIMPLEMENTED. + */ + MOVE_WEIGHT, +} + +/** + * Used for challenge types that modify movesets, these denote the various sources of moves for pokemon. + */ +export enum MoveSourceType { + LEVEL_UP, // Currently unimplemented for move access + RELEARNER, // Relearner moves currently unimplemented + COMMON_TM, + GREAT_TM, + ULTRA_TM, + COMMON_EGG, + RARE_EGG } /** @@ -61,10 +103,9 @@ export abstract class Challenge { public maxSeverity: integer; // The maximum severity of the challenge. public conditions: ChallengeCondition[]; - public challengeTypes: ChallengeType[]; /** - * @param {Challenges} id The enum value for the challenge + * @param id {@link Challenges} The enum value for the challenge */ constructor(id: Challenges, maxValue: integer = Number.MAX_SAFE_INTEGER) { this.id = id; @@ -74,7 +115,6 @@ export abstract class Challenge { this.severity = 0; this.maxSeverity = 0; this.conditions = []; - this.challengeTypes = []; } /** @@ -87,7 +127,7 @@ export abstract class Challenge { /** * Gets the localisation key for the challenge - * @returns The i18n key for this challenge + * @returns {@link string} The i18n key for this challenge */ geti18nKey(): string { return Challenges[this.id].split("_").map((f, i) => i ? `${f[0]}${f.slice(1).toLowerCase()}` : f.toLowerCase()).join(""); @@ -95,8 +135,8 @@ export abstract class Challenge { /** * Used for unlockable challenges to check if they're unlocked. - * @param {GameData} data The save data. - * @returns {boolean} Whether this challenge is unlocked. + * @param data {@link GameData} The save data. + * @returns {@link boolean} Whether this challenge is unlocked. */ isUnlocked(data: GameData): boolean { return this.conditions.every(f => f(data)); @@ -104,8 +144,8 @@ export abstract class Challenge { /** * Adds an unlock condition to this challenge. - * @param {ChallengeCondition} condition The condition to add. - * @returns {Challenge} This challenge + * @param condition {@link ChallengeCondition} The condition to add. + * @returns {@link Challenge} This challenge */ condition(condition: ChallengeCondition): Challenge { this.conditions.push(condition); @@ -114,27 +154,7 @@ export abstract class Challenge { } /** - * If this challenge is of a particular type - * @param {ChallengeType} challengeType The challenge type to check. - * @returns {Challenge} This challenge - */ - isOfType(challengeType: ChallengeType): boolean { - return this.challengeTypes.some(c => c === challengeType); - } - - /** - * Adds a challenge type to this challenge. - * @param {ChallengeType} challengeType The challenge type to add. - * @returns {Challenge} This challenge - */ - addChallengeType(challengeType: ChallengeType): Challenge { - this.challengeTypes.push(challengeType); - - return this; - } - - /** - * @returns {string} The localised name of this challenge. + * @returns {@link string} The localised name of this challenge. */ getName(): string { return i18next.t(`challenges:${this.geti18nKey()}.name`); @@ -142,8 +162,8 @@ export abstract class Challenge { /** * Returns the textual representation of a challenge's current value. - * @param {value} overrideValue The value to check for. If undefined, gets the current value. - * @returns {string} The localised name for the current value. + * @param overrideValue {@link integer} The value to check for. If undefined, gets the current value. + * @returns {@link string} The localised name for the current value. */ getValue(overrideValue?: integer): string { if (overrideValue === undefined) { @@ -154,19 +174,19 @@ export abstract class Challenge { /** * Returns the description of a challenge's current value. - * @param {value} overrideValue The value to check for. If undefined, gets the current value. - * @returns {string} The localised description for the current value. + * @param overrideValue {@link integer} The value to check for. If undefined, gets the current value. + * @returns {@link string} The localised description for the current value. */ getDescription(overrideValue?: integer): string { if (overrideValue === undefined) { overrideValue = this.value; } - return `${i18next.t("challenges:usePokemon")}${i18next.t(`challenges:${this.geti18nKey()}.desc.${this.value}`)}`; + return `${i18next.t([`challenges:${this.geti18nKey()}.desc.${this.value}`, `challenges:${this.geti18nKey()}.desc`])}`; } /** * Increase the value of the challenge - * @returns {boolean} Returns true if the value changed + * @returns {@link boolean} Returns true if the value changed */ increaseValue(): boolean { if (this.value < this.maxValue) { @@ -178,7 +198,7 @@ export abstract class Challenge { /** * Decrease the value of the challenge - * @returns {boolean} Returns true if the value changed + * @returns {@link boolean} Returns true if the value changed */ decreaseValue(): boolean { if (this.value > 0) { @@ -197,7 +217,7 @@ export abstract class Challenge { /** * Decrease the severity of the challenge - * @returns {boolean} Returns true if the value changed + * @returns {@link boolean} Returns true if the value changed */ decreaseSeverity(): boolean { if (this.severity > 0) { @@ -209,7 +229,7 @@ export abstract class Challenge { /** * Increase the severity of the challenge - * @returns {boolean} Returns true if the value changed + * @returns {@link boolean} Returns true if the value changed */ increaseSeverity(): boolean { if (this.severity < this.maxSeverity) { @@ -221,7 +241,7 @@ export abstract class Challenge { /** * Gets the "difficulty" value of this challenge. - * @returns {integer} The difficulty value. + * @returns {@link integer} The difficulty value. */ getDifficulty(): integer { return this.value; @@ -229,27 +249,145 @@ export abstract class Challenge { /** * Gets the minimum difficulty added by this challenge. - * @returns {integer} The difficulty value. + * @returns {@link integer} The difficulty value. */ getMinDifficulty(): integer { return 0; } - /** - * Modifies the data or game state in some way to apply the challenge. - * @param {ChallengeType} challengeType Which challenge type this is being applied for. - * @param args Irrelevant. See the specific challenge's apply function for additional information. - */ - abstract apply(challengeType: ChallengeType, args: any[]): boolean; - /** * Clones a challenge, either from another challenge or json. Chainable. - * @param {Challenge | any} source The source challenge of json. - * @returns {Challenge} This challenge. + * @param source The source challenge or json. + * @returns This challenge. */ static loadChallenge(source: Challenge | any): Challenge { throw new Error("Method not implemented! Use derived class"); } + + /** + * An apply function for STARTER_CHOICE challenges. Derived classes should alter this. + * @param pokemon {@link PokemonSpecies} The pokemon to check the validity of. + * @param valid {@link Utils.BooleanHolder} A BooleanHolder, the value gets set to false if the pokemon isn't allowed. + * @param dexAttr {@link DexAttrProps} The dex attributes of the pokemon. + * @param soft {@link boolean} If true, allow it if it could become a valid pokemon. + * @returns {@link boolean} Whether this function did anything. + */ + applyStarterChoice(pokemon: PokemonSpecies, valid: Utils.BooleanHolder, dexAttr: DexAttrProps, soft: boolean = false): boolean { + return false; + } + + /** + * An apply function for STARTER_POINTS challenges. Derived classes should alter this. + * @param points {@link Utils.NumberHolder} The amount of points you have available. + * @returns {@link boolean} Whether this function did anything. + */ + applyStarterPoints(points: Utils.NumberHolder): boolean { + return false; + } + + /** + * An apply function for STARTER_COST challenges. Derived classes should alter this. + * @param species {@link Species} The pokemon to change the cost of. + * @param cost {@link Utils.NumberHolder} The cost of the starter. + * @returns {@link boolean} Whether this function did anything. + */ + applyStarterCost(species: Species, cost: Utils.NumberHolder): boolean { + return false; + } + + /** + * An apply function for STARTER_MODIFY challenges. Derived classes should alter this. + * @param pokemon {@link Pokemon} The starter pokemon to modify. + * @returns {@link boolean} Whether this function did anything. + */ + applyStarterModify(pokemon: Pokemon): boolean { + return false; + } + + /** + * An apply function for POKEMON_IN_BATTLE challenges. Derived classes should alter this. + * @param pokemon {@link Pokemon} The pokemon to check the validity of. + * @param valid {@link Utils.BooleanHolder} A BooleanHolder, the value gets set to false if the pokemon isn't allowed. + * @returns {@link boolean} Whether this function did anything. + */ + applyPokemonInBattle(pokemon: Pokemon, valid: Utils.BooleanHolder): boolean { + return false; + } + + /** + * An apply function for FIXED_BATTLE challenges. Derived classes should alter this. + * @param waveIndex {@link Number} The current wave index. + * @param battleConfig {@link FixedBattleConfig} The battle config to modify. + * @returns {@link boolean} Whether this function did anything. + */ + applyFixedBattle(waveIndex: Number, battleConfig: FixedBattleConfig): boolean { + return false; + } + + /** + * An apply function for AI_LEVEL challenges. Derived classes should alter this. + * @param level {@link Utils.IntegerHolder} 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 { + 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. + * @returns {@link boolean} Whether this function did anything. + */ + applyMoveSlot(pokemon: Pokemon, moveSlots: Utils.IntegerHolder): boolean { + return false; + } + + /** + * An apply function for PASSIVE_ACCESS challenges. Derived classes should alter this. + * @param pokemon {@link Pokemon} The pokemon to change. + * @param hasPassive {@link Utils.BooleanHolder} Whether it should have its passive. + * @returns {@link boolean} Whether this function did anything. + */ + applyPassiveAccess(pokemon: Pokemon, hasPassive: Utils.BooleanHolder): boolean { + return false; + } + + /** + * An apply function for GAME_MODE_MODIFY challenges. Derived classes should alter this. + * @param gameMode {@link GameMode} The current game mode. + * @returns {@link boolean} Whether this function did anything. + */ + applyGameModeModify(gameMode: GameMode): boolean { + return false; + } + + /** + * An apply function for MOVE_ACCESS. Derived classes should alter this. + * @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. + * @returns {@link boolean} Whether this function did anything. + */ + applyMoveAccessLevel(pokemon: Pokemon, moveSource: MoveSourceType, move: Moves, level: Utils.IntegerHolder): boolean { + return false; + } + + /** + * An apply function for MOVE_WEIGHT. Derived classes should alter this. + * @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 + * @returns {@link boolean} Whether this function did anything. + */ + applyMoveWeight(pokemon: Pokemon, moveSource: MoveSourceType, move: Moves, level: Utils.IntegerHolder): boolean { + return false; + } } type ChallengeCondition = (data: GameData) => boolean; @@ -260,87 +398,74 @@ type ChallengeCondition = (data: GameData) => boolean; export class SingleGenerationChallenge extends Challenge { constructor() { super(Challenges.SINGLE_GENERATION, 9); - this.addChallengeType(ChallengeType.STARTER_CHOICE); - this.addChallengeType(ChallengeType.POKEMON_IN_BATTLE); - this.addChallengeType(ChallengeType.FIXED_BATTLES); } - apply(challengeType: ChallengeType, args: any[]): boolean { - if (this.value === 0) { - return false; - } - + applyStarterChoice(pokemon: PokemonSpecies, valid: Utils.BooleanHolder, dexAttr: DexAttrProps, soft: boolean = false): boolean { /** * We have special code below for victini because it is classed as a generation 4 pokemon in the code * despite being a generation 5 pokemon. This is due to UI constraints, the starter select screen has * no more room for pokemon so victini is put in the gen 4 section instead. This code just overrides the * normal generation check to correctly treat victini as gen 5. */ - switch (challengeType) { - case ChallengeType.STARTER_CHOICE: - const species = args[0] as PokemonSpecies; - const isValidStarter = args[1] as Utils.BooleanHolder; - const amountOfPokemon = args[3] as number; - const starterGeneration = species.speciesId === Species.VICTINI ? 5 : species.generation; - const generations = [starterGeneration]; - if (amountOfPokemon > 0) { - const speciesToCheck = [species.speciesId]; - while (speciesToCheck.length) { - const checking = speciesToCheck.pop(); - if (pokemonEvolutions.hasOwnProperty(checking)) { - pokemonEvolutions[checking].forEach(e => { - speciesToCheck.push(e.speciesId); - generations.push(getPokemonSpecies(e.speciesId).generation); - }); - } + const starterGeneration = pokemon.speciesId === Species.VICTINI ? 5 : pokemon.generation; + const generations = [starterGeneration]; + if (soft) { + const speciesToCheck = [pokemon.speciesId]; + while (speciesToCheck.length) { + const checking = speciesToCheck.pop(); + if (pokemonEvolutions.hasOwnProperty(checking)) { + pokemonEvolutions[checking].forEach(e => { + speciesToCheck.push(e.speciesId); + generations.push(getPokemonSpecies(e.speciesId).generation); + }); } } - if (!generations.includes(this.value)) { - isValidStarter.value = false; - return true; - } - break; - case ChallengeType.POKEMON_IN_BATTLE: - const pokemon = args[0] as Pokemon; - const isValidPokemon = args[1] as Utils.BooleanHolder; - 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; - if (pokemon.isPlayer() && (baseGeneration !== this.value || (pokemon.isFusion() && fusionGeneration !== this.value))) { - isValidPokemon.value = false; - return true; - } - break; - case ChallengeType.FIXED_BATTLES: - const waveIndex = args[0] as integer; - const battleConfig = args[1] as FixedBattleConfig; - let trainerTypes: TrainerType[] = []; - switch (waveIndex) { - case 182: - 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: - trainerTypes = [ TrainerType.BRUNO, TrainerType.KOGA, TrainerType.PHOEBE, TrainerType.BERTHA, TrainerType.MARSHAL, TrainerType.SIEBOLD, TrainerType.OLIVIA, TrainerType.NESSA_ELITE, TrainerType.POPPY ]; - break; - case 186: - 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: - 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 ]) ]; - break; - } - if (trainerTypes.length === 0) { - return false; - } else { - battleConfig.setBattleType(BattleType.TRAINER).setGetTrainerFunc(scene => new Trainer(scene, trainerTypes[this.value - 1], TrainerVariant.DEFAULT)); - return true; - } + } + + if (!generations.includes(this.value)) { + valid.value = false; + return true; } return false; } + 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; + if (pokemon.isPlayer() && (baseGeneration !== this.value || (pokemon.isFusion() && fusionGeneration !== this.value))) { + valid.value = false; + return true; + } + return false; + } + + applyFixedBattle(waveIndex: Number, battleConfig: FixedBattleConfig): boolean { + let trainerTypes: TrainerType[] = []; + switch (waveIndex) { + case 182: + 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: + trainerTypes = [ TrainerType.BRUNO, TrainerType.KOGA, TrainerType.PHOEBE, TrainerType.BERTHA, TrainerType.MARSHAL, TrainerType.SIEBOLD, TrainerType.OLIVIA, TrainerType.NESSA_ELITE, TrainerType.POPPY ]; + break; + case 186: + 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: + 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 ]) ]; + break; + } + if (trainerTypes.length === 0) { + return false; + } else { + battleConfig.setBattleType(BattleType.TRAINER).setGetTrainerFunc(scene => new Trainer(scene, trainerTypes[this.value - 1], TrainerVariant.DEFAULT)); + return true; + } + } + /** * @overrides */ @@ -407,62 +532,47 @@ export class SingleTypeChallenge extends Challenge { constructor() { super(Challenges.SINGLE_TYPE, 18); - this.addChallengeType(ChallengeType.STARTER_CHOICE); - this.addChallengeType(ChallengeType.POKEMON_IN_BATTLE); } - apply(challengeType: ChallengeType, args: any[]): boolean { - if (this.value === 0) { - return false; - } - - switch (challengeType) { - case ChallengeType.STARTER_CHOICE: - const species = args[0] as PokemonSpecies; - const isValidStarter = args[1] as Utils.BooleanHolder; - const dexAttr = args[2] as DexAttrProps; - const amountOfPokemon = args[3] as number; - const speciesForm = getPokemonSpeciesForm(species.speciesId, dexAttr.formIndex); - const types = [speciesForm.type1, speciesForm.type2]; - if (amountOfPokemon > 0) { - const speciesToCheck = [species.speciesId]; - while (speciesToCheck.length) { - const checking = speciesToCheck.pop(); - if (pokemonEvolutions.hasOwnProperty(checking)) { - pokemonEvolutions[checking].forEach(e => { - speciesToCheck.push(e.speciesId); - types.push(getPokemonSpecies(e.speciesId).type1, getPokemonSpecies(e.speciesId).type2); + applyStarterChoice(pokemon: PokemonSpecies, valid: Utils.BooleanHolder, dexAttr: DexAttrProps, soft: boolean = false): boolean { + const speciesForm = getPokemonSpeciesForm(pokemon.speciesId, dexAttr.formIndex); + const types = [speciesForm.type1, speciesForm.type2]; + if (soft) { + const speciesToCheck = [pokemon.speciesId]; + while (speciesToCheck.length) { + const checking = speciesToCheck.pop(); + if (pokemonEvolutions.hasOwnProperty(checking)) { + pokemonEvolutions[checking].forEach(e => { + speciesToCheck.push(e.speciesId); + types.push(getPokemonSpecies(e.speciesId).type1, getPokemonSpecies(e.speciesId).type2); + }); + } + if (pokemonFormChanges.hasOwnProperty(checking)) { + pokemonFormChanges[checking].forEach(f1 => { + getPokemonSpecies(checking).forms.forEach(f2 => { + if (f1.formKey === f2.formKey) { + types.push(f2.type1, f2.type2); + } }); - } - if (pokemonFormChanges.hasOwnProperty(checking)) { - pokemonFormChanges[checking].forEach(f1 => { - getPokemonSpecies(checking).forms.forEach(f2 => { - if (f1.formKey === f2.formKey) { - types.push(f2.type1, f2.type2); - } - }); - }); - } + }); } } - if (!types.includes(this.value - 1)) { - isValidStarter.value = false; - return true; - } - break; - case ChallengeType.POKEMON_IN_BATTLE: - const pokemon = args[0] as Pokemon; - const isValidPokemon = args[1] as Utils.BooleanHolder; - if (pokemon.isPlayer() && !pokemon.isOfType(this.value - 1, false, false, true) - && !SingleTypeChallenge.TYPE_OVERRIDES.some(o => o.type === (this.value - 1) && (pokemon.isFusion() && o.fusion ? pokemon.fusionSpecies : pokemon.species).speciesId === o.species)) { - isValidPokemon.value = false; - return true; - } - break; + } + if (!types.includes(this.value - 1)) { + valid.value = false; + return true; } return false; } + applyPokemonInBattle(pokemon: Pokemon, valid: Utils.BooleanHolder): boolean { + if (pokemon.isPlayer() && !pokemon.isOfType(this.value - 1, false, false, true) + && !SingleTypeChallenge.TYPE_OVERRIDES.some(o => o.type === (this.value - 1) && (pokemon.isFusion() && o.fusion ? pokemon.fusionSpecies : pokemon.species).speciesId === o.species)) { + valid.value = false; + return true; + } + } + /** * @overrides */ @@ -512,28 +622,37 @@ export class SingleTypeChallenge extends Challenge { export class FreshStartChallenge extends Challenge { constructor() { super(Challenges.FRESH_START, 1); - this.addChallengeType(ChallengeType.STARTER_CHOICE); - this.addChallengeType(ChallengeType.STARTER_MODIFY); } - apply(challengeType: ChallengeType, args: any[]): boolean { - if (this.value === 0) { - return false; - } - - switch (challengeType) { - case ChallengeType.STARTER_CHOICE: - const species = args[0] as PokemonSpecies; - const isValidStarter = args[1] as Utils.BooleanHolder; - if (species) { - isValidStarter.value = false; - return true; - } - break; + applyStarterChoice(pokemon: PokemonSpecies, valid: Utils.BooleanHolder): boolean { + if (!defaultStarterSpecies.includes(pokemon.speciesId)) { + valid.value = false; + return true; } return false; } + applyStarterCost(species: Species, cost: Utils.NumberHolder): boolean { + if (defaultStarterSpecies.includes(species) && cost.value !== 3) { + cost.value = 3; + return true; + } + return false; + } + + applyStarterModify(pokemon: Pokemon): boolean { + pokemon.abilityIndex = 0; // Always base ability, not hidden ability + pokemon.passive = false; // Passive isn't unlocked + pokemon.nature = Nature.HARDY; // Neutral nature + pokemon.moveset = pokemon.species.getLevelMoves().filter(m => m[0] <= 5).map(lm => lm[1]).slice(0, 4).map(m => new PokemonMove(m)); // No egg moves + pokemon.luck = 0; // No luck + pokemon.shiny = false; // Not shiny + pokemon.variant = 0; // Not shiny + pokemon.gender = Gender.MALE; // Starters default to male + pokemon.formIndex = 0; // Froakie should be base form + return true; + } + /** * @overrides */ @@ -555,7 +674,6 @@ export class FreshStartChallenge extends Challenge { export class LowerStarterMaxCostChallenge extends Challenge { constructor() { super(Challenges.LOWER_MAX_STARTER_COST, 9); - this.addChallengeType(ChallengeType.STARTER_CHOICE); } /** @@ -568,19 +686,10 @@ export class LowerStarterMaxCostChallenge extends Challenge { return (10 - overrideValue).toString(); } - apply(challengeType: ChallengeType, args: any[]): boolean { - if (this.value === 0) { - return false; - } - - switch (challengeType) { - case ChallengeType.STARTER_CHOICE: - const species = args[0] as PokemonSpecies; - const isValid = args[1] as Utils.BooleanHolder; - if (speciesStarters[species.speciesId] > 10 - this.value) { - isValid.value = false; - return true; - } + applyStarterChoice(pokemon: PokemonSpecies, valid: Utils.BooleanHolder): boolean { + if (speciesStarters[pokemon.speciesId] > 10 - this.value) { + valid.value = false; + return true; } return false; } @@ -599,7 +708,6 @@ export class LowerStarterMaxCostChallenge extends Challenge { export class LowerStarterPointsChallenge extends Challenge { constructor() { super(Challenges.LOWER_STARTER_POINTS, 9); - this.addChallengeType(ChallengeType.STARTER_POINTS); } /** @@ -612,18 +720,9 @@ export class LowerStarterPointsChallenge extends Challenge { return (10 - overrideValue).toString(); } - apply(challengeType: ChallengeType, args: any[]): boolean { - if (this.value === 0) { - return false; - } - - switch (challengeType) { - case ChallengeType.STARTER_POINTS: - const points = args[0] as Utils.NumberHolder; - points.value -= this.value; - return true; - } - return false; + applyStarterPoints(points: Utils.NumberHolder): boolean { + points.value -= this.value; + return true; } static loadChallenge(source: LowerStarterPointsChallenge | any): LowerStarterPointsChallenge { @@ -635,22 +734,169 @@ export class LowerStarterPointsChallenge extends Challenge { } /** - * Apply all challenges of a given challenge type. - * @param {GameMode} gameMode The current game mode - * @param {ChallengeType} challengeType What challenge type to apply - * @param {any[]} args Any args for that challenge type - * @returns {boolean} True if any challenge was successfully applied. + * Apply all challenges that modify starter choice. + * @param gameMode {@link GameMode} The current gameMode + * @param challengeType {@link ChallengeType} ChallengeType.STARTER_CHOICE + * @param pokemon {@link PokemonSpecies} The pokemon to check the validity of. + * @param valid {@link Utils.BooleanHolder} A BooleanHolder, the value gets set to false if the pokemon isn't allowed. + * @param dexAttr {@link DexAttrProps} The dex attributes of the pokemon. + * @param soft {@link boolean} If true, allow it if it could become a valid pokemon. + * @returns True if any challenge was successfully applied. */ +export function applyChallenges(gameMode: GameMode, challengeType: ChallengeType.STARTER_CHOICE, pokemon: PokemonSpecies, valid: Utils.BooleanHolder, dexAttr: DexAttrProps, soft: boolean): boolean; +/** + * Apply all challenges that modify available total starter points. + * @param gameMode {@link GameMode} The current gameMode + * @param challengeType {@link ChallengeType} ChallengeType.STARTER_POINTS + * @param points {@link Utils.NumberHolder} The amount of points you have available. + * @returns True if any challenge was successfully applied. + */ +export function applyChallenges(gameMode: GameMode, challengeType: ChallengeType.STARTER_POINTS, points: Utils.NumberHolder): boolean; +/** + * Apply all challenges that modify the cost of a starter. + * @param gameMode {@link GameMode} The current gameMode + * @param challengeType {@link ChallengeType} ChallengeType.STARTER_COST + * @param species {@link Species} The pokemon to change the cost of. + * @param points {@link Utils.NumberHolder} The cost of the pokemon. + * @returns True if any challenge was successfully applied. + */ +export function applyChallenges(gameMode: GameMode, challengeType: ChallengeType.STARTER_COST, species: Species, cost: Utils.NumberHolder): boolean; +/** + * Apply all challenges that modify a starter after selection. + * @param gameMode {@link GameMode} The current gameMode + * @param challengeType {@link ChallengeType} ChallengeType.STARTER_MODIFY + * @param pokemon {@link Pokemon} The starter pokemon to modify. + * @returns True if any challenge was successfully applied. + */ +export function applyChallenges(gameMode: GameMode, challengeType: ChallengeType.STARTER_MODIFY, pokemon: Pokemon): boolean; +/** + * Apply all challenges that what pokemon you can have in battle. + * @param gameMode {@link GameMode} The current gameMode + * @param challengeType {@link ChallengeType} ChallengeType.POKEMON_IN_BATTLE + * @param pokemon {@link Pokemon} The pokemon to check the validity of. + * @param valid {@link Utils.BooleanHolder} A BooleanHolder, the value gets set to false if the pokemon isn't allowed. + * @returns True if any challenge was successfully applied. + */ +export function applyChallenges(gameMode: GameMode, challengeType: ChallengeType.POKEMON_IN_BATTLE, pokemon: Pokemon, valid: Utils.BooleanHolder): boolean; +/** + * Apply all challenges that modify what fixed battles there are. + * @param gameMode {@link GameMode} The current gameMode + * @param challengeType {@link ChallengeType} ChallengeType.FIXED_BATTLES + * @param waveIndex {@link Number} The current wave index. + * @param battleConfig {@link FixedBattleConfig} The battle config to modify. + * @returns True if any challenge was successfully applied. + */ +export function applyChallenges(gameMode: GameMode, challengeType: ChallengeType.FIXED_BATTLES, waveIndex: Number, battleConfig: FixedBattleConfig): boolean; +/** + * 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 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; +/** + * 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. + * @returns True if any challenge was successfully applied. + */ +export function applyChallenges(gameMode: GameMode, challengeType: ChallengeType.AI_MOVE_SLOTS, pokemon: Pokemon, moveSlots: Utils.IntegerHolder): boolean; +/** + * Apply all challenges that modify whether a pokemon has its passive. + * @param gameMode {@link GameMode} The current gameMode + * @param challengeType {@link ChallengeType} ChallengeType.PASSIVE_ACCESS + * @param pokemon {@link Pokemon} The pokemon to modify. + * @param hasPassive {@link Utils.BooleanHolder} Whether it has its passive. + * @returns True if any challenge was successfully applied. + */ +export function applyChallenges(gameMode: GameMode, challengeType: ChallengeType.PASSIVE_ACCESS, pokemon: Pokemon, hasPassive: Utils.BooleanHolder): boolean; +/** + * Apply all challenges that modify the game modes settings. + * @param gameMode {@link GameMode} The current gameMode + * @param challengeType {@link ChallengeType} ChallengeType.GAME_MODE_MODIFY + * @returns True if any challenge was successfully applied. + */ +export function applyChallenges(gameMode: GameMode, challengeType: ChallengeType.GAME_MODE_MODIFY): boolean; +/** + * Apply all challenges that modify what level a pokemon can access a move. + * @param gameMode {@link GameMode} The current gameMode + * @param challengeType {@link ChallengeType} ChallengeType.MOVE_ACCESS + * @param pokemon {@link Pokemon} What pokemon would learn the move. + * @param moveSource {@link MoveSourceType} What source the pokemon would get the move from. + * @param move {@link Moves} The move in question. + * @param level {@link Utils.IntegerHolder} 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; +/** + * Apply all challenges that modify what weight a pokemon gives to move generation + * @param gameMode {@link GameMode} The current gameMode + * @param challengeType {@link ChallengeType} ChallengeType.MOVE_WEIGHT + * @param pokemon {@link Pokemon} What pokemon would learn the move. + * @param moveSource {@link MoveSourceType} What source the pokemon would get the move from. + * @param move {@link Moves} The move in question. + * @param weight {@link Utils.IntegerHolder} 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, ...args: any[]): boolean { let ret = false; - gameMode.challenges.forEach(v => { - if (v.isOfType(challengeType)) { - ret ||= v.apply(challengeType, args); + gameMode.challenges.forEach(c => { + if (c.value !== 0) { + switch (challengeType) { + case ChallengeType.STARTER_CHOICE: + ret ||= c.applyStarterChoice(args[0], args[1], args[2], args[3]); + break; + case ChallengeType.STARTER_POINTS: + ret ||= c.applyStarterPoints(args[0]); + break; + case ChallengeType.STARTER_COST: + ret ||= c.applyStarterCost(args[0], args[1]); + break; + case ChallengeType.STARTER_MODIFY: + ret ||= c.applyStarterModify(args[0]); + break; + case ChallengeType.POKEMON_IN_BATTLE: + ret ||= c.applyPokemonInBattle(args[0], args[1]); + break; + case ChallengeType.FIXED_BATTLES: + ret ||= c.applyFixedBattle(args[0], args[1]); + break; + case ChallengeType.AI_LEVEL: + ret ||= c.applyLevelChange(args[0], args[1], args[2], args[3]); + break; + case ChallengeType.AI_MOVE_SLOTS: + ret ||= c.applyMoveSlot(args[0], args[1]); + break; + case ChallengeType.PASSIVE_ACCESS: + ret ||= c.applyPassiveAccess(args[0], args[1]); + break; + case ChallengeType.GAME_MODE_MODIFY: + ret ||= c.applyGameModeModify(gameMode); + break; + case ChallengeType.MOVE_ACCESS: + ret ||= c.applyMoveAccessLevel(args[0], args[1], args[2], args[3]); + break; + case ChallengeType.MOVE_WEIGHT: + ret ||= c.applyMoveWeight(args[0], args[1], args[2], args[3]); + break; + } } }); return ret; } +/** + * + * @param source A challenge to copy, or an object of a challenge's properties. Missing values are treated as defaults. + * @returns The challenge in question. + */ export function copyChallenge(source: Challenge | any): Challenge { switch (source.id) { case Challenges.SINGLE_GENERATION: @@ -661,6 +907,8 @@ export function copyChallenge(source: Challenge | any): Challenge { return LowerStarterMaxCostChallenge.loadChallenge(source); case Challenges.LOWER_STARTER_POINTS: return LowerStarterPointsChallenge.loadChallenge(source); + case Challenges.FRESH_START: + return FreshStartChallenge.loadChallenge(source); } throw new Error("Unknown challenge copied"); } @@ -671,8 +919,6 @@ export function initChallenges() { allChallenges.push( new SingleGenerationChallenge(), new SingleTypeChallenge(), - // new LowerStarterMaxCostChallenge(), - // new LowerStarterPointsChallenge(), - // new FreshStartChallenge() + new FreshStartChallenge(), ); } diff --git a/src/data/egg.ts b/src/data/egg.ts index bb952d71fb0..4cbb7afbaf6 100644 --- a/src/data/egg.ts +++ b/src/data/egg.ts @@ -2,7 +2,7 @@ import BattleScene from "../battle-scene"; import PokemonSpecies, { getPokemonSpecies, speciesStarters } from "./pokemon-species"; import { VariantTier } from "../enums/variant-tiers"; import * as Utils from "../utils"; -import * as Overrides from "../overrides"; +import Overrides from "../overrides"; import { pokemonPrevolutions } from "./pokemon-evolutions"; import { PlayerPokemon } from "#app/field/pokemon"; import i18next from "i18next"; diff --git a/src/data/move.ts b/src/data/move.ts index 321fbc6d097..eb708c36a73 100644 --- a/src/data/move.ts +++ b/src/data/move.ts @@ -1,18 +1,18 @@ import { ChargeAnim, MoveChargeAnim, initMoveAnim, loadMoveAnimAssets } from "./battle-anims"; -import { BattleEndPhase, MovePhase, NewBattlePhase, PartyStatusCurePhase, PokemonHealPhase, StatChangePhase, SwitchSummonPhase } from "../phases"; +import { BattleEndPhase, MoveEndPhase, MovePhase, NewBattlePhase, PartyStatusCurePhase, PokemonHealPhase, StatChangePhase, SwitchSummonPhase } from "../phases"; import { BattleStat, getBattleStatName } from "./battle-stat"; -import { EncoreTag, SemiInvulnerableTag } from "./battler-tags"; +import { EncoreTag, HelpingHandTag, SemiInvulnerableTag, TypeBoostTag } from "./battler-tags"; import { getPokemonMessage, getPokemonNameWithAffix } from "../messages"; import Pokemon, { AttackMoveResult, EnemyPokemon, HitResult, MoveResult, PlayerPokemon, PokemonMove, TurnMove } from "../field/pokemon"; import { StatusEffect, getStatusEffectHealText, isNonVolatileStatusEffect, getNonVolatileStatusEffects} from "./status-effect"; -import { Type } from "./type"; +import { getTypeResistances, Type } from "./type"; import { Constructor } from "#app/utils"; import * as Utils from "../utils"; import { WeatherType } from "./weather"; -import { ArenaTagSide, ArenaTrapTag } from "./arena-tag"; -import { UnswappableAbilityAbAttr, UncopiableAbilityAbAttr, UnsuppressableAbilityAbAttr, BlockRecoilDamageAttr, BlockOneHitKOAbAttr, IgnoreContactAbAttr, MaxMultiHitAbAttr, applyAbAttrs, BlockNonDirectDamageAbAttr, applyPreSwitchOutAbAttrs, PreSwitchOutAbAttr, applyPostDefendAbAttrs, PostDefendContactApplyStatusEffectAbAttr, MoveAbilityBypassAbAttr, ReverseDrainAbAttr, FieldPreventExplosiveMovesAbAttr, ForceSwitchOutImmunityAbAttr, BlockItemTheftAbAttr, applyPostAttackAbAttrs, ConfusionOnStatusEffectAbAttr, HealFromBerryUseAbAttr, IgnoreProtectOnContactAbAttr, IgnoreMoveEffectsAbAttr, applyPreDefendAbAttrs, MoveEffectChanceMultiplierAbAttr } from "./ability"; +import { ArenaTagSide, ArenaTrapTag, WeakenMoveTypeTag } from "./arena-tag"; +import { UnswappableAbilityAbAttr, UncopiableAbilityAbAttr, UnsuppressableAbilityAbAttr, BlockRecoilDamageAttr, BlockOneHitKOAbAttr, IgnoreContactAbAttr, MaxMultiHitAbAttr, applyAbAttrs, BlockNonDirectDamageAbAttr, applyPreSwitchOutAbAttrs, PreSwitchOutAbAttr, applyPostDefendAbAttrs, PostDefendContactApplyStatusEffectAbAttr, MoveAbilityBypassAbAttr, ReverseDrainAbAttr, FieldPreventExplosiveMovesAbAttr, ForceSwitchOutImmunityAbAttr, BlockItemTheftAbAttr, applyPostAttackAbAttrs, ConfusionOnStatusEffectAbAttr, HealFromBerryUseAbAttr, IgnoreProtectOnContactAbAttr, IgnoreMoveEffectsAbAttr, applyPreDefendAbAttrs, MoveEffectChanceMultiplierAbAttr, WonderSkinAbAttr, applyPreAttackAbAttrs, MoveTypeChangeAttr, UserFieldMoveTypePowerBoostAbAttr, FieldMoveTypePowerBoostAbAttr, AllyMoveCategoryPowerBoostAbAttr, VariableMovePowerAbAttr } from "./ability"; import { allAbilities } from "./ability"; -import { PokemonHeldItemModifier, BerryModifier, PreserveBerryModifier } from "../modifier/modifier"; +import { PokemonHeldItemModifier, BerryModifier, PreserveBerryModifier, PokemonMoveAccuracyBoosterModifier, AttackTypeBoosterModifier, PokemonMultiHitModifier } from "../modifier/modifier"; import { BattlerIndex } from "../battle"; import { Stat } from "./pokemon-stat"; import { TerrainType } from "./terrain"; @@ -655,6 +655,108 @@ export default class Move implements Localizable { return score; } + + /** + * Calculates the accuracy of a move in battle based on various conditions and attributes. + * + * @param user {@linkcode Pokemon} The Pokémon using the move. + * @param target {@linkcode Pokemon} The Pokémon being targeted by the move. + * @returns The calculated accuracy of the move. + */ + calculateBattleAccuracy(user: Pokemon, target: Pokemon) { + const moveAccuracy = new Utils.NumberHolder(this.accuracy); + + applyMoveAttrs(VariableAccuracyAttr, user, target, this, moveAccuracy); + applyPreDefendAbAttrs(WonderSkinAbAttr, target, user, this, { value: false }, moveAccuracy); + + if (moveAccuracy.value === -1) { + return moveAccuracy.value; + } + + const isOhko = this.hasAttr(OneHitKOAccuracyAttr); + + if (!isOhko) { + user.scene.applyModifiers(PokemonMoveAccuracyBoosterModifier, user.isPlayer(), user, moveAccuracy); + } + + if (user.scene.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} + */ + moveAccuracy.value = Math.floor(moveAccuracy.value * 0.9); + } + + if (!isOhko && user.scene.arena.getTag(ArenaTagType.GRAVITY)) { + moveAccuracy.value = Math.floor(moveAccuracy.value * 1.67); + } + + return moveAccuracy.value; + } + + /** + * Calculates the power of a move in battle based on various conditions and attributes. + * + * @param source {@linkcode Pokemon} The Pokémon using the move. + * @param target {@linkcode Pokemon} The Pokémon being targeted by the move. + * @returns The calculated power of the move. + */ + calculateBattlePower(source: Pokemon, target: Pokemon): number { + const power = new Utils.NumberHolder(this.power); + + const typeChangeMovePowerMultiplier = new Utils.NumberHolder(1); + applyPreAttackAbAttrs(MoveTypeChangeAttr, source, target, this, 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)) { + power.value = 60; + } + + applyPreAttackAbAttrs(VariableMovePowerAbAttr, source, target, this, power); + + if (source.getAlly()) { + applyPreAttackAbAttrs(AllyMoveCategoryPowerBoostAbAttr, source.getAlly(), target, this, power); + } + + const fieldAuras = new Set( + source.scene.getField(true) + .map((p) => p.getAbilityAttrs(FieldMoveTypePowerBoostAbAttr) as FieldMoveTypePowerBoostAbAttr[]) + .flat(), + ); + for (const aura of fieldAuras) { + // The only relevant values are `move` and the `power` holder + aura.applyPreAttack(null, null, null, this, [power]); + } + + const alliedField: Pokemon[] = source instanceof PlayerPokemon ? source.scene.getPlayerField() : source.scene.getEnemyField(); + alliedField.forEach(p => applyPreAttackAbAttrs(UserFieldMoveTypePowerBoostAbAttr, p, target, this, power)); + + power.value *= typeChangeMovePowerMultiplier.value; + + const typeBoost = source.findTag(t => t instanceof TypeBoostTag && t.boostedType === this.type) as TypeBoostTag; + if (typeBoost) { + power.value *= typeBoost.boostValue; + } + + if (source.scene.arena.getTerrainType() === TerrainType.GRASSY && target.isGrounded() && this.type === Type.GROUND && this.moveTarget === MoveTarget.ALL_NEAR_OTHERS) { + power.value /= 2; + } + + applyMoveAttrs(VariablePowerAttr, source, target, this, power); + + source.scene.applyModifiers(PokemonMultiHitModifier, source.isPlayer(), source, new Utils.IntegerHolder(0), power); + + if (!this.hasAttr(TypelessAttr)) { + source.scene.arena.applyTags(WeakenMoveTypeTag, this.type, power); + source.scene.applyModifiers(AttackTypeBoosterModifier, source.isPlayer(), source, this.type, power); + } + + if (source.getTag(HelpingHandTag)) { + power.value *= 1.5; + } + + return power.value; + } } export class AttackMove extends Move { @@ -1085,6 +1187,7 @@ export class RecoilAttr extends MoveEffectAttr { const cancelled = new Utils.BooleanHolder(false); if (!this.unblockable) { applyAbAttrs(BlockRecoilDamageAttr, user, cancelled); + applyAbAttrs(BlockNonDirectDamageAbAttr, user, cancelled); } if (cancelled.value) { @@ -1097,7 +1200,6 @@ export class RecoilAttr extends MoveEffectAttr { return false; } - applyAbAttrs(BlockNonDirectDamageAbAttr, user, cancelled); if (cancelled.value) { return false; } @@ -1512,11 +1614,11 @@ export class HitHealAttr extends MoveEffectAttr { if (this.healStat) { // Strength Sap formula healAmount = target.getBattleStat(this.healStat); - message = i18next.t("battle:drainMessage", {pokemonName: target.name}); + message = i18next.t("battle:drainMessage", {pokemonName: getPokemonNameWithAffix(target)}); } else { // Default healing formula used by draining moves like Absorb, Draining Kiss, Bitter Blade, etc. healAmount = Math.max(Math.floor(user.turnData.currDamageDealt * this.healRatio), 1); - message = i18next.t("battle:regainHealth", {pokemonName: user.name}); + message = i18next.t("battle:regainHealth", {pokemonName: getPokemonNameWithAffix(user)}); } if (reverseDrain) { user.turnData.damageTaken += healAmount; @@ -1796,7 +1898,7 @@ export class StealHeldItemChanceAttr extends MoveEffectAttr { if (rand >= this.chance) { return resolve(false); } - const heldItems = this.getTargetHeldItems(target).filter(i => i.getTransferrable(false)); + const heldItems = this.getTargetHeldItems(target).filter(i => i.isTransferrable); 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); @@ -1817,7 +1919,7 @@ export class StealHeldItemChanceAttr extends MoveEffectAttr { getTargetHeldItems(target: Pokemon): PokemonHeldItemModifier[] { return target.scene.findModifiers(m => m instanceof PokemonHeldItemModifier - && (m as PokemonHeldItemModifier).pokemonId === target.id, target.isPlayer()) as PokemonHeldItemModifier[]; + && m.pokemonId === target.id, target.isPlayer()) as PokemonHeldItemModifier[]; } getUserBenefitScore(user: Pokemon, target: Pokemon, move: Move): number { @@ -1857,7 +1959,6 @@ export class RemoveHeldItemAttr extends MoveEffectAttr { * @returns {boolean} True if an item was removed */ apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { - if (!this.berriesOnly && target.isPlayer()) { // "Wild Pokemon cannot knock off Player Pokemon's held items" (See Bulbapedia) return false; } @@ -1870,7 +1971,8 @@ export class RemoveHeldItemAttr extends MoveEffectAttr { } // Considers entire transferrable item pool by default (Knock Off). Otherwise berries only if specified (Incinerate). - let heldItems = this.getTargetHeldItems(target).filter(i => i.getTransferrable(false)); + let heldItems = this.getTargetHeldItems(target).filter(i => i.isTransferrable); + if (this.berriesOnly) { heldItems = heldItems.filter(m => m instanceof BerryModifier && m.pokemonId === target.id, target.isPlayer()); } @@ -1894,7 +1996,7 @@ export class RemoveHeldItemAttr extends MoveEffectAttr { getTargetHeldItems(target: Pokemon): PokemonHeldItemModifier[] { return target.scene.findModifiers(m => m instanceof PokemonHeldItemModifier - && (m as PokemonHeldItemModifier).pokemonId === target.id, target.isPlayer()) as PokemonHeldItemModifier[]; + && m.pokemonId === target.id, target.isPlayer()) as PokemonHeldItemModifier[]; } getUserBenefitScore(user: Pokemon, target: Pokemon, move: Move): number { @@ -1986,7 +2088,8 @@ export class StealEatBerryAttr extends EatBerryAttr { if (cancelled.value === true) { return false; } - const heldBerries = this.getTargetHeldBerries(target).filter(i => i.getTransferrable(false)); + + const heldBerries = this.getTargetHeldBerries(target); if (heldBerries.length <= 0) { return false; } @@ -2215,7 +2318,11 @@ export class ChargeAttr extends OverrideMoveEffectAttr { user.pushMoveHistory({ move: move.id, targets: [ target.getBattlerIndex() ], result: MoveResult.OTHER }); user.getMoveQueue().push({ move: move.id, targets: [ target.getBattlerIndex() ], ignorePP: true }); if (this.sameTurn) { - user.scene.pushMovePhase(new MovePhase(user.scene, user, [ target.getBattlerIndex() ], user.moveset.find(m => m.moveId === move.id), true), this.followUpPriority); + let movesetMove = user.moveset.find(m => m.moveId === move.id); + if (!movesetMove) { // account for any move that calls a ChargeAttr move when the ChargeAttr move does not exist in moveset + movesetMove = new PokemonMove(move.id, 0, 0, true); + } + user.scene.pushMovePhase(new MovePhase(user.scene, user, [ target.getBattlerIndex() ], movesetMove, true), this.followUpPriority); } user.addTag(BattlerTagType.CHARGING, 1, move.id, user.id); resolve(true); @@ -2309,7 +2416,7 @@ export class DelayedAttackAttr extends OverrideMoveEffectAttr { if (args.length < 2 || !args[1]) { new MoveChargeAnim(this.chargeAnim, move.id, user).play(user.scene, () => { (args[0] as Utils.BooleanHolder).value = true; - user.scene.queueMessage(getPokemonMessage(user, ` ${this.chargeText.replace("{TARGET}", target.name)}`)); + user.scene.queueMessage(getPokemonMessage(user, ` ${this.chargeText.replace("{TARGET}", getPokemonNameWithAffix(target))}`)); user.pushMoveHistory({ move: move.id, targets: [ target.getBattlerIndex() ], result: MoveResult.OTHER }); user.scene.arena.addTag(this.tagType, 3, move.id, user.id, ArenaTagSide.BOTH, false, target.getBattlerIndex()); @@ -2463,20 +2570,17 @@ export class HalfHpStatMaxAttr extends StatChangeAttr { apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): Promise { return new Promise(resolve => { - const damage = user.damageAndUpdate(Math.floor(user.getMaxHp() / 2), HitResult.OTHER, false, true); - if (damage) { - user.scene.damageNumberHandler.add(user, damage); - } + user.damageAndUpdate(Math.floor(user.getMaxHp() / 2), HitResult.OTHER, false, true); user.updateInfo().then(() => { const ret = super.apply(user, target, move, args); - user.scene.queueMessage(getPokemonMessage(user, ` cut its own HP\nand maximized its ${getBattleStatName(this.stats[0])}!`)); + user.scene.queueMessage(getPokemonMessage(user, ` cut its own HP\nand maximized its ${getBattleStatName(this.stats[BattleStat.ATK])}!`)); resolve(ret); }); }); } getCondition(): MoveConditionFunc { - return (user, target, move) => user.getHpRatio() > 0.5 && user.summonData.battleStats[this.stats[0]] < 6; + return (user, target, move) => user.getHpRatio() > 0.5 && user.summonData.battleStats[this.stats[BattleStat.ATK]] < 6; } // TODO: Add benefit score that considers HP cut @@ -2493,10 +2597,7 @@ export class CutHpStatBoostAttr extends StatChangeAttr { apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): Promise { return new Promise(resolve => { - const damage = user.damageAndUpdate(Math.floor(user.getMaxHp() / this.cutRatio), HitResult.OTHER, false, true); - if (damage) { - user.scene.damageNumberHandler.add(user, damage); - } + user.damageAndUpdate(Math.floor(user.getMaxHp() / this.cutRatio), HitResult.OTHER, false, true); user.updateInfo().then(() => { const ret = super.apply(user, target, move, args); resolve(ret); @@ -3617,7 +3718,7 @@ export class TerrainPulseTypeAttr extends VariableMoveTypeAttr { * @returns true if the function succeeds */ apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { - if (!user.isGrounded) { + if (!user.isGrounded()) { return false; } @@ -4027,7 +4128,7 @@ export class CurseAttr extends MoveEffectAttr { user.scene.queueMessage( i18next.t("battle:battlerTagsCursedOnAdd", { pokemonNameWithAffix: getPokemonNameWithAffix(user), - pokemonName: target.name + pokemonName: getPokemonNameWithAffix(target) }) ); @@ -4157,9 +4258,9 @@ export class IgnoreAccuracyAttr extends AddBattlerTagAttr { } } -export class AlwaysCritsAttr extends AddBattlerTagAttr { +export class AlwaysGetHitAttr extends AddBattlerTagAttr { constructor() { - super(BattlerTagType.ALWAYS_CRIT, true, false, 2); + super(BattlerTagType.ALWAYS_GET_HIT, true, false, 0, 0, true); } apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { @@ -4167,7 +4268,19 @@ export class AlwaysCritsAttr extends AddBattlerTagAttr { return false; } - user.scene.queueMessage(getPokemonMessage(user, ` took aim\nat ${target.name}!`)); + return true; + } +} + +export class ReceiveDoubleDamageAttr extends AddBattlerTagAttr { + constructor() { + super(BattlerTagType.RECEIVE_DOUBLE_DAMAGE, true, false, 0, 0, true); + } + + apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { + if (!super.apply(user, target, move, args)) { + return false; + } return true; } @@ -4423,7 +4536,7 @@ export class SwapArenaTagsAttr extends MoveEffectAttr { } - user.scene.queueMessage( `${user.name} swapped the battle effects affecting each side of the field!`); + user.scene.queueMessage( `${getPokemonNameWithAffix(user)} swapped the battle effects affecting each side of the field!`); return true; } } @@ -4464,7 +4577,7 @@ export class RevivalBlessingAttr extends MoveEffectAttr { const slotIndex = user.scene.getEnemyParty().findIndex(p => pokemon.id === p.id); pokemon.resetStatus(); pokemon.heal(Math.min(Math.max(Math.ceil(Math.floor(0.5 * pokemon.getMaxHp())), 1), pokemon.getMaxHp())); - user.scene.queueMessage(`${pokemon.name} was revived!`,0,true); + user.scene.queueMessage(`${getPokemonNameWithAffix(pokemon)} was revived!`,0,true); if (user.scene.currentBattle.double && user.scene.getEnemyParty().length > 1) { const allyPokemon = user.getAlly(); @@ -4515,10 +4628,11 @@ export class ForceSwitchOutAttr extends MoveEffectAttr { // This ensures that the switch out only happens when the conditions are met const switchOutTarget = this.user ? user : target; if (switchOutTarget instanceof PlayerPokemon) { - if (switchOutTarget.hp) { - applyPreSwitchOutAbAttrs(PreSwitchOutAbAttr, switchOutTarget); - (switchOutTarget as PlayerPokemon).switchOut(this.batonPass, true).then(() => resolve(true)); - } else { + if (switchOutTarget.hp > 0) { + applyPreSwitchOutAbAttrs(PreSwitchOutAbAttr, switchOutTarget); + // switchOut below sets the UI to select party(this is not a separate Phase), then adds a SwitchSummonPhase with selected 'mon + (switchOutTarget as PlayerPokemon).switchOut(this.batonPass, true).then(() => resolve(true)); + } else { resolve(false); } return; @@ -4531,8 +4645,9 @@ export class ForceSwitchOutAttr extends MoveEffectAttr { switchOutTarget.scene.field.remove(switchOutTarget); user.scene.triggerPokemonFormChange(switchOutTarget, SpeciesFormChangeActiveTrigger, true); - if (switchOutTarget.hp) { - user.scene.unshiftPhase(new SwitchSummonPhase(user.scene, switchOutTarget.getFieldIndex(), user.scene.currentBattle.trainer.getNextSummonIndex((switchOutTarget as EnemyPokemon).trainerSlot), false, this.batonPass, false)); + if (switchOutTarget.hp > 0) { + // for opponent switching out + user.scene.prependToPhase(new SwitchSummonPhase(user.scene, switchOutTarget.getFieldIndex(), user.scene.currentBattle.trainer.getNextSummonIndex((switchOutTarget as EnemyPokemon).trainerSlot), false, this.batonPass, false), MoveEndPhase); } } else { // Switch out logic for everything else @@ -4653,7 +4768,7 @@ export class CopyTypeAttr extends MoveEffectAttr { user.summonData.types = target.getTypes(true); user.updateInfo(); - user.scene.queueMessage(getPokemonMessage(user, `'s type\nchanged to match ${target.name}'s!`)); + user.scene.queueMessage(getPokemonMessage(user, `'s type\nchanged to match ${getPokemonNameWithAffix(target)}'s!`)); return true; } @@ -4718,7 +4833,9 @@ export class AddTypeAttr extends MoveEffectAttr { apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { const types = target.getTypes().slice(0, 2).filter(t => t !== Type.UNKNOWN); // TODO: Figure out some way to actually check if another version of this effect is already applied - types.push(this.type); + if (this.type !== Type.UNKNOWN) { + types.push(this.type); + } target.summonData.types = types; target.updateInfo(); @@ -4743,10 +4860,8 @@ export class FirstMoveTypeAttr extends MoveEffectAttr { } const firstMoveType = target.getMoveset()[0].getMove().type; - user.summonData.types = [ firstMoveType ]; - - user.scene.queueMessage(getPokemonMessage(user, ` transformed\ninto to the ${Utils.toReadableString(Type[firstMoveType])} type!`)); + user.scene.queueMessage(i18next.t("battle:transformedIntoType", {pokemonName: getPokemonNameWithAffix(user), type: Utils.toReadableString(Type[firstMoveType])})); return true; } @@ -5035,7 +5150,7 @@ export class ReducePpMoveAttr extends MoveEffectAttr { const lastPpUsed = movesetMove.ppUsed; movesetMove.ppUsed = Math.min(movesetMove.ppUsed + this.reduction, movesetMove.getMovePp()); - const message = i18next.t("battle:ppReduced", {targetName: target.name, moveName: movesetMove.getName(), reduction: movesetMove.ppUsed - lastPpUsed}); + const message = i18next.t("battle:ppReduced", {targetName: getPokemonNameWithAffix(target), moveName: movesetMove.getName(), reduction: movesetMove.ppUsed - lastPpUsed}); user.scene.queueMessage(message); @@ -5168,15 +5283,13 @@ export class SketchAttr extends MoveEffectAttr { return false; } - const targetMoves = target.getMoveHistory().filter(m => !m.virtual); - if (!targetMoves.length) { + const targetMove = target.getMoveHistory().filter(m => !m.virtual).at(-1); + if (!targetMove) { return false; } - const sketchedMove = allMoves[targetMoves[0].move]; - + const sketchedMove = allMoves[targetMove.move]; const sketchIndex = user.getMoveset().findIndex(m => m.moveId === move.id); - if (sketchIndex === -1) { return false; } @@ -5481,7 +5594,7 @@ export class AttackedByItemAttr extends MoveAttr { */ getCondition(): MoveConditionFunc { return (user: Pokemon, target: Pokemon, move: Move) => { - const heldItems = target.getHeldItems().filter(i => i.getTransferrable(true)); + const heldItems = target.getHeldItems().filter(i => i.isTransferrable); if (heldItems.length === 0) { return false; } @@ -5592,6 +5705,62 @@ export class hitsSameTypeAttr extends VariableMoveTypeMultiplierAttr { } } +/** + * Attribute used for Conversion 2, to convert the user's type to a random type that resists the target's last used move. + * Fails if the user already has ALL types that resist the target's last used move. + * Fails if the opponent has not used a move yet + * Fails if the type is unknown or stellar + * + * TODO: + * If a move has its type changed (e.g. {@linkcode Moves.HIDDEN_POWER}), it will check the new type. + */ +export class ResistLastMoveTypeAttr extends MoveEffectAttr { + constructor() { + super(true); + } + /** + * User changes its type to a random type that resists the target's last used move + * @param {Pokemon} user Pokemon that used the move and will change types + * @param {Pokemon} target Opposing pokemon that recently used a move + * @param {Move} move Move being used + * @param {any[]} args Unused + * @returns {boolean} true if the function succeeds + */ + apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { + if (!super.apply(user, target, move, args)) { + return false; + } + + const [targetMove] = target.getLastXMoves(1); // target's most recent move + if (!targetMove) { + return false; + } + + const moveData = allMoves[targetMove.move]; + if (moveData.type === Type.STELLAR || moveData.type === Type.UNKNOWN) { + return false; + } + const userTypes = user.getTypes(); + const validTypes = getTypeResistances(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])})); + user.updateInfo(); + + return true; + } + + getCondition(): MoveConditionFunc { + return (user, target, move) => { + const moveHistory = target.getLastXMoves(); + return !!moveHistory.length; + }; + } +} + const unknownTypeCondition: MoveConditionFunc = (user, target, move) => !user.getTypes().includes(Type.UNKNOWN); export type MoveTargetSet = { @@ -6139,7 +6308,8 @@ export function initMoves() { new AttackMove(Moves.FLAIL, Type.NORMAL, MoveCategory.PHYSICAL, -1, 100, 15, -1, 0, 2) .attr(LowHpPowerAttr), new StatusMove(Moves.CONVERSION_2, Type.NORMAL, -1, 30, -1, 0, 2) - .unimplemented(), + .attr(ResistLastMoveTypeAttr) + .partial(), // Checks the move's original typing and not if its type is changed through some other means new AttackMove(Moves.AEROBLAST, Type.FLYING, MoveCategory.SPECIAL, 100, 95, 5, -1, 0, 2) .attr(HighCritAttr), new StatusMove(Moves.COTTON_SPORE, Type.GRASS, 100, 40, -1, 0, 2) @@ -6439,7 +6609,7 @@ export function initMoves() { .attr(AddBattlerTagAttr, BattlerTagType.DROWSY, false, true) .condition((user, target, move) => !target.status), 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.getTransferrable(false)).length > 0 ? 1.5 : 1) + .attr(MovePowerMultiplierAttr, (user, target, move) => target.getHeldItems().filter(i => i.isTransferrable).length > 0 ? 1.5 : 1) .attr(RemoveHeldItemAttr, false), new AttackMove(Moves.ENDEAVOR, Type.NORMAL, MoveCategory.PHYSICAL, -1, 100, 5, -1, 0, 3) .attr(MatchHpAttr) @@ -7070,7 +7240,7 @@ export function initMoves() { new StatusMove(Moves.QUASH, Type.DARK, 100, 15, -1, 0, 5) .unimplemented(), 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.getTransferrable(true)).reduce((v, m) => v + m.stackCount, 0))), + .attr(MovePowerMultiplierAttr, (user, target, move) => Math.max(1, 2 - 0.2 * user.getHeldItems().filter(i => i.isTransferrable).reduce((v, m) => v + m.stackCount, 0))), new StatusMove(Moves.REFLECT_TYPE, Type.NORMAL, -1, 15, -1, 0, 5) .attr(CopyTypeAttr), new AttackMove(Moves.RETALIATE, Type.NORMAL, MoveCategory.PHYSICAL, 70, 100, 5, -1, 0, 5) @@ -7751,9 +7921,19 @@ export function initMoves() { .ignoresVirtual(), /* End Unused */ new AttackMove(Moves.DYNAMAX_CANNON, Type.DRAGON, MoveCategory.SPECIAL, 100, 100, 5, -1, 0, 8) - .attr(MovePowerMultiplierAttr, (user, target, move) => target.level > 200 ? 2 : 1) + .attr(MovePowerMultiplierAttr, (user, target, move) => { + // Move is only stronger against overleveled foes. + if (target.level > target.scene.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)); + } else { + return 1; + } + }) .attr(DiscourageFrequentUseAttr) .ignoresVirtual(), + new AttackMove(Moves.SNIPE_SHOT, Type.WATER, MoveCategory.SPECIAL, 80, 100, 15, -1, 0, 8) .attr(HighCritAttr) .attr(BypassRedirectAttr), @@ -7765,7 +7945,7 @@ export function initMoves() { .attr(EatBerryAttr) .attr(StatChangeAttr, BattleStat.DEF, 2, true) .condition((user) => { - const userBerries = user.scene.findModifiers(m => m instanceof BerryModifier); + const userBerries = user.scene.findModifiers(m => m instanceof BerryModifier, user.isPlayer()); return userBerries.length > 0; }) .partial(), @@ -7786,8 +7966,7 @@ export function initMoves() { .attr(EatBerryAttr) .target(MoveTarget.ALL), new StatusMove(Moves.OCTOLOCK, Type.FIGHTING, 100, 15, -1, 0, 8) - .attr(AddBattlerTagAttr, BattlerTagType.TRAPPED, false, true, 1) - .partial(), + .attr(AddBattlerTagAttr, BattlerTagType.OCTOLOCK, false, true, 1), new AttackMove(Moves.BOLT_BEAK, Type.ELECTRIC, MoveCategory.PHYSICAL, 85, 100, 10, -1, 0, 8) .attr(FirstAttackDoublePowerAttr), new AttackMove(Moves.FISHIOUS_REND, Type.WATER, MoveCategory.PHYSICAL, 85, 100, 10, -1, 0, 8) @@ -8231,7 +8410,8 @@ export function initMoves() { new AttackMove(Moves.ICE_SPINNER, Type.ICE, MoveCategory.PHYSICAL, 80, 100, 15, -1, 0, 9) .attr(ClearTerrainAttr), new AttackMove(Moves.GLAIVE_RUSH, Type.DRAGON, MoveCategory.PHYSICAL, 120, 100, 5, -1, 0, 9) - .partial(), + .attr(AlwaysGetHitAttr) + .attr(ReceiveDoubleDamageAttr), new StatusMove(Moves.REVIVAL_BLESSING, Type.NORMAL, -1, 1, -1, 0, 9) .triageMove() .attr(RevivalBlessingAttr) diff --git a/src/data/nature.ts b/src/data/nature.ts index 0d9be0f663d..1ae3b76a6b6 100644 --- a/src/data/nature.ts +++ b/src/data/nature.ts @@ -1,36 +1,11 @@ import { Stat, getStatName } from "./pokemon-stat"; import * as Utils from "../utils"; import { TextStyle, getBBCodeFrag } from "../ui/text"; +import { Nature } from "#enums/nature"; import { UiTheme } from "#enums/ui-theme"; import i18next from "i18next"; -export enum Nature { - HARDY, - LONELY, - BRAVE, - ADAMANT, - NAUGHTY, - BOLD, - DOCILE, - RELAXED, - IMPISH, - LAX, - TIMID, - HASTY, - SERIOUS, - JOLLY, - NAIVE, - MODEST, - MILD, - QUIET, - BASHFUL, - RASH, - CALM, - GENTLE, - SASSY, - CAREFUL, - QUIRKY -} +export { Nature }; export function getNatureName(nature: Nature, includeStatEffects: boolean = false, forStarterSelect: boolean = false, ignoreBBCode: boolean = false, uiTheme: UiTheme = UiTheme.DEFAULT): string { let ret = Utils.toReadableString(Nature[nature]); diff --git a/src/data/pokeball.ts b/src/data/pokeball.ts index 5964884d967..f26451b802b 100644 --- a/src/data/pokeball.ts +++ b/src/data/pokeball.ts @@ -1,14 +1,8 @@ +import { PokeballType } from "#enums/pokeball"; import BattleScene from "../battle-scene"; import i18next from "i18next"; -export enum PokeballType { - POKEBALL, - GREAT_BALL, - ULTRA_BALL, - ROGUE_BALL, - MASTER_BALL, - LUXURY_BALL -} +export { PokeballType }; export const MAX_PER_TYPE_POKEBALLS: integer = 99; diff --git a/src/data/pokemon-forms.ts b/src/data/pokemon-forms.ts index ae1532f0be0..2c2d637c6f0 100644 --- a/src/data/pokemon-forms.ts +++ b/src/data/pokemon-forms.ts @@ -8,6 +8,7 @@ import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; import { TimeOfDay } from "#enums/time-of-day"; +import { getPokemonNameWithAffix } from "#app/messages.js"; export enum FormChangeItem { NONE, @@ -369,7 +370,7 @@ export function getSpeciesFormChangeMessage(pokemon: Pokemon, formChange: Specie return `${prefix}${preName} Eternamaxed\ninto ${pokemon.name}!`; } if (isRevert) { - return `${prefix}${pokemon.name} reverted\nto its original form!`; + return `${prefix}${getPokemonNameWithAffix(pokemon)} reverted\nto its original form!`; } return `${prefix}${preName} changed form!`; } diff --git a/src/data/pokemon-level-moves.ts b/src/data/pokemon-level-moves.ts index 53272ed5beb..2ba8ccdf463 100644 --- a/src/data/pokemon-level-moves.ts +++ b/src/data/pokemon-level-moves.ts @@ -587,28 +587,28 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 48, Moves.HEALING_WISH ], ], [Species.CLEFABLE]: [ + [ RELEARN_MOVE, Moves.POUND ], + [ RELEARN_MOVE, Moves.GROWL ], + [ RELEARN_MOVE, Moves.SING ], + [ RELEARN_MOVE, Moves.DEFENSE_CURL ], + [ RELEARN_MOVE, Moves.SPLASH ], + [ RELEARN_MOVE, Moves.SWEET_KISS ], + [ RELEARN_MOVE, Moves.CHARM ], + [ RELEARN_MOVE, Moves.ENCORE ], + [ RELEARN_MOVE, Moves.MOONLIGHT ], + [ RELEARN_MOVE, Moves.FOLLOW_ME ], + [ RELEARN_MOVE, Moves.COSMIC_POWER ], + [ RELEARN_MOVE, Moves.GRAVITY ], + [ RELEARN_MOVE, Moves.HEALING_WISH ], + [ RELEARN_MOVE, Moves.COPYCAT ], + [ RELEARN_MOVE, Moves.AFTER_YOU ], + [ RELEARN_MOVE, Moves.STORED_POWER ], + [ RELEARN_MOVE, Moves.DISARMING_VOICE ], [ 1, Moves.METRONOME ], [ 1, Moves.METEOR_MASH ], [ 1, Moves.MOONBLAST ], [ 1, Moves.LIFE_DEW ], - [ 1, Moves.POUND ], - [ 1, Moves.GROWL ], - [ 1, Moves.SING ], - [ 1, Moves.DEFENSE_CURL ], - [ 1, Moves.SPLASH ], - [ 1, Moves.SWEET_KISS ], - [ 1, Moves.CHARM ], - [ 1, Moves.ENCORE ], - [ 1, Moves.MOONLIGHT ], - [ 1, Moves.FOLLOW_ME ], - [ 1, Moves.COSMIC_POWER ], - [ 1, Moves.GRAVITY ], - [ 1, Moves.HEALING_WISH ], - [ 1, Moves.COPYCAT ], - [ 1, Moves.AFTER_YOU ], - [ 1, Moves.STORED_POWER ], [ 1, Moves.SPOTLIGHT ], - [ 1, Moves.DISARMING_VOICE ], ], [Species.VULPIX]: [ [ 1, Moves.TAIL_WHIP ], @@ -628,22 +628,22 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 52, Moves.FIRE_BLAST ], ], [Species.NINETALES]: [ + [ RELEARN_MOVE, Moves.DISABLE ], + [ RELEARN_MOVE, Moves.EMBER ], + [ RELEARN_MOVE, Moves.FIRE_SPIN ], + [ RELEARN_MOVE, Moves.CONFUSE_RAY ], + [ RELEARN_MOVE, Moves.FIRE_BLAST ], + [ RELEARN_MOVE, Moves.SPITE ], + [ RELEARN_MOVE, Moves.SAFEGUARD ], + [ RELEARN_MOVE, Moves.WILL_O_WISP ], + [ RELEARN_MOVE, Moves.IMPRISON ], + [ RELEARN_MOVE, Moves.EXTRASENSORY ], + [ RELEARN_MOVE, Moves.NASTY_PLOT ], + [ RELEARN_MOVE, Moves.INCINERATE ], + [ RELEARN_MOVE, Moves.INFERNO ], [ 1, Moves.FLAMETHROWER ], [ 1, Moves.TAIL_WHIP ], [ 1, Moves.QUICK_ATTACK ], - [ 1, Moves.DISABLE ], - [ 1, Moves.EMBER ], - [ 1, Moves.FIRE_SPIN ], - [ 1, Moves.CONFUSE_RAY ], - [ 1, Moves.FIRE_BLAST ], - [ 1, Moves.SPITE ], - [ 1, Moves.SAFEGUARD ], - [ 1, Moves.WILL_O_WISP ], - [ 1, Moves.IMPRISON ], - [ 1, Moves.EXTRASENSORY ], - [ 1, Moves.NASTY_PLOT ], - [ 1, Moves.INCINERATE ], - [ 1, Moves.INFERNO ], ], [Species.JIGGLYPUFF]: [ [ 1, Moves.POUND ], @@ -1047,16 +1047,16 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.BUBBLE_BEAM ], [ 1, Moves.BODY_SLAM ], [ 1, Moves.HYPNOSIS ], - [ 1, Moves.POUND ], - [ 1, Moves.DOUBLE_EDGE ], - [ 1, Moves.WATER_GUN ], [ 1, Moves.WATER_SPORT ], - [ 1, Moves.HYDRO_PUMP ], - [ 1, Moves.BELLY_DRUM ], - [ 1, Moves.RAIN_DANCE ], - [ 1, Moves.MUD_SHOT ], - [ 1, Moves.EARTH_POWER ], - [ 1, Moves.CIRCLE_THROW ], + [ RELEARN_MOVE, Moves.POUND ], + [ RELEARN_MOVE, Moves.DOUBLE_EDGE ], + [ RELEARN_MOVE, Moves.WATER_GUN ], + [ RELEARN_MOVE, Moves.HYDRO_PUMP ], + [ RELEARN_MOVE, Moves.BELLY_DRUM ], + [ RELEARN_MOVE, Moves.RAIN_DANCE ], + [ RELEARN_MOVE, Moves.MUD_SHOT ], + [ RELEARN_MOVE, Moves.EARTH_POWER ], + [ RELEARN_MOVE, Moves.CIRCLE_THROW ], ], [Species.ABRA]: [ [ 1, Moves.TELEPORT ], @@ -1181,15 +1181,15 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { ], [Species.VICTREEBEL]: [ [ EVOLVE_MOVE, Moves.LEAF_STORM ], + [ RELEARN_MOVE, Moves.STOCKPILE ], + [ RELEARN_MOVE, Moves.SWALLOW ], + [ RELEARN_MOVE, Moves.SPIT_UP ], + [ RELEARN_MOVE, Moves.GASTRO_ACID ], + [ RELEARN_MOVE, Moves.POWER_WHIP ], [ 1, Moves.VINE_WHIP ], [ 1, Moves.SLEEP_POWDER ], [ 1, Moves.SWEET_SCENT ], [ 1, Moves.RAZOR_LEAF ], - [ 1, Moves.STOCKPILE ], - [ 1, Moves.SWALLOW ], - [ 1, Moves.SPIT_UP ], - [ 1, Moves.GASTRO_ACID ], - [ 1, Moves.POWER_WHIP ], [ 44, Moves.LEAF_BLADE ], ], [Species.TENTACOOL]: [ @@ -1328,6 +1328,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 45, Moves.HEAL_PULSE ], ], [Species.SLOWBRO]: [ + [ RELEARN_MOVE, Moves.FUTURE_SIGHT ], [ 1, Moves.TACKLE ], [ 1, Moves.GROWL ], [ 1, Moves.WATER_GUN ], @@ -1745,6 +1746,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { ], [Species.EXEGGUTOR]: [ [ EVOLVE_MOVE, Moves.STOMP ], + [ RELEARN_MOVE, Moves.GROWTH ], [ 1, Moves.BARRAGE ], [ 1, Moves.SEED_BOMB ], [ 1, Moves.PSYSHOCK ], @@ -1763,7 +1765,6 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.HYPNOSIS ], [ 1, Moves.REFLECT ], [ 1, Moves.LEECH_SEED ], - [ 1, Moves.GROWTH ], ], [Species.CUBONE]: [ [ 1, Moves.GROWL ], @@ -3206,20 +3207,20 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { ], [Species.POLITOED]: [ [ EVOLVE_MOVE, Moves.BOUNCE ], + [ RELEARN_MOVE, Moves.BODY_SLAM ], + [ RELEARN_MOVE, Moves.DOUBLE_EDGE ], + [ RELEARN_MOVE, Moves.WATER_GUN ], + [ RELEARN_MOVE, Moves.BUBBLE_BEAM ], + [ RELEARN_MOVE, Moves.HYPNOSIS ], + [ RELEARN_MOVE, Moves.PERISH_SONG ], + [ RELEARN_MOVE, Moves.SWAGGER ], + [ RELEARN_MOVE, Moves.HYPER_VOICE ], + [ RELEARN_MOVE, Moves.MUD_SHOT ], + [ RELEARN_MOVE, Moves.EARTH_POWER ], [ 1, Moves.RAIN_DANCE ], [ 1, Moves.HYDRO_PUMP ], [ 1, Moves.BELLY_DRUM ], [ 1, Moves.POUND ], - [ 1, Moves.BODY_SLAM ], - [ 1, Moves.DOUBLE_EDGE ], - [ 1, Moves.WATER_GUN ], - [ 1, Moves.BUBBLE_BEAM ], - [ 1, Moves.HYPNOSIS ], - [ 1, Moves.PERISH_SONG ], - [ 1, Moves.SWAGGER ], - [ 1, Moves.HYPER_VOICE ], - [ 1, Moves.MUD_SHOT ], - [ 1, Moves.EARTH_POWER ], ], [Species.HOPPIP]: [ [ 1, Moves.TACKLE ], @@ -3448,6 +3449,8 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 60, Moves.QUASH ], ], [Species.SLOWKING]: [ + [ RELEARN_MOVE, Moves.FUTURE_SIGHT ], + [ RELEARN_MOVE, Moves.CHILLY_RECEPTION ], [ 1, Moves.POWER_GEM ], [ 1, Moves.NASTY_PLOT ], [ 1, Moves.SWAGGER ], @@ -3455,8 +3458,6 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.CURSE ], [ 1, Moves.GROWL ], [ 1, Moves.WATER_GUN ], - [ 1, Moves.FUTURE_SIGHT ], - [ 1, Moves.CHILLY_RECEPTION ], [ 9, Moves.YAWN ], [ 12, Moves.CONFUSION ], [ 15, Moves.DISABLE ], @@ -4214,12 +4215,12 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 78, Moves.ZAP_CANNON ], ], [Species.ENTEI]: [ + [ RELEARN_MOVE, Moves.SACRED_FIRE ], + [ RELEARN_MOVE, Moves.EXTREME_SPEED ], [ 1, Moves.STOMP ], [ 1, Moves.LEER ], [ 1, Moves.EMBER ], [ 1, Moves.SMOKESCREEN ], - [ 1, Moves.SACRED_FIRE ], - [ 1, Moves.EXTREME_SPEED ], [ 6, Moves.FLAME_WHEEL ], [ 12, Moves.BITE ], [ 18, Moves.CALM_MIND ], @@ -4235,12 +4236,12 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 78, Moves.ERUPTION ], ], [Species.SUICUNE]: [ + [ RELEARN_MOVE, Moves.EXTREME_SPEED ], + [ RELEARN_MOVE, Moves.SHEER_COLD ], [ 1, Moves.GUST ], [ 1, Moves.LEER ], [ 1, Moves.MIST ], [ 1, Moves.WATER_GUN ], - [ 1, Moves.EXTREME_SPEED ], - [ 1, Moves.SHEER_COLD ], [ 6, Moves.WATER_PULSE ], [ 12, Moves.BITE ], [ 18, Moves.CALM_MIND ], @@ -4317,11 +4318,11 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 59, Moves.GIGA_IMPACT ], ], [Species.LUGIA]: [ + [ RELEARN_MOVE, Moves.DRAGON_RUSH ], [ 1, Moves.GUST ], [ 1, Moves.WHIRLWIND ], [ 1, Moves.ANCIENT_POWER ], [ 1, Moves.WEATHER_BALL ], - [ 1, Moves.DRAGON_RUSH ], [ 9, Moves.MIST ], [ 18, Moves.SAFEGUARD ], [ 27, Moves.CALM_MIND ], @@ -4383,14 +4384,14 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 39, Moves.LEAF_STORM ], ], [Species.GROVYLE]: [ + [ RELEARN_MOVE, Moves.FALSE_SWIPE ], + [ RELEARN_MOVE, Moves.FURY_CUTTER ], + [ RELEARN_MOVE, Moves.X_SCISSOR ], + [ RELEARN_MOVE, Moves.ENERGY_BALL ], [ 1, Moves.POUND ], [ 1, Moves.LEER ], [ 1, Moves.LEAFAGE ], [ 1, Moves.QUICK_ATTACK ], - [ 1, Moves.FALSE_SWIPE ], - [ 1, Moves.FURY_CUTTER ], - [ 1, Moves.X_SCISSOR ], - [ 1, Moves.ENERGY_BALL ], [ 9, Moves.MEGA_DRAIN ], [ 12, Moves.DETECT ], [ 15, Moves.QUICK_GUARD ], @@ -4405,15 +4406,15 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { ], [Species.SCEPTILE]: [ [ EVOLVE_MOVE, Moves.LEAF_BLADE ], + [ RELEARN_MOVE, Moves.FALSE_SWIPE ], + [ RELEARN_MOVE, Moves.FURY_CUTTER ], + [ RELEARN_MOVE, Moves.X_SCISSOR ], + [ RELEARN_MOVE, Moves.ENERGY_BALL ], + [ RELEARN_MOVE, Moves.SHED_TAIL ], [ 1, Moves.POUND ], [ 1, Moves.LEER ], [ 1, Moves.LEAFAGE ], [ 1, Moves.QUICK_ATTACK ], - [ 1, Moves.FALSE_SWIPE ], - [ 1, Moves.FURY_CUTTER ], - [ 1, Moves.X_SCISSOR ], - [ 1, Moves.ENERGY_BALL ], - [ 1, Moves.SHED_TAIL ], [ 1, Moves.DUAL_CHOP ], [ 5, Moves.MEGA_DRAIN ], [ 12, Moves.DETECT ], @@ -4445,12 +4446,12 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { ], [Species.COMBUSKEN]: [ [ EVOLVE_MOVE, Moves.DOUBLE_KICK ], + [ RELEARN_MOVE, Moves.FLAMETHROWER ], + [ RELEARN_MOVE, Moves.FEATHER_DANCE ], [ 1, Moves.SCRATCH ], [ 1, Moves.GROWL ], [ 1, Moves.EMBER ], [ 1, Moves.QUICK_ATTACK ], - [ 1, Moves.FLAMETHROWER ], - [ 1, Moves.FEATHER_DANCE ], [ 9, Moves.FLAME_CHARGE ], [ 12, Moves.DETECT ], [ 15, Moves.SAND_ATTACK ], @@ -4465,14 +4466,14 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { ], [Species.BLAZIKEN]: [ [ EVOLVE_MOVE, Moves.BLAZE_KICK ], + [ RELEARN_MOVE, Moves.FIRE_PUNCH ], + [ RELEARN_MOVE, Moves.EMBER ], + [ RELEARN_MOVE, Moves.FLAMETHROWER ], + [ RELEARN_MOVE, Moves.FEATHER_DANCE ], [ 1, Moves.DOUBLE_KICK ], [ 1, Moves.SCRATCH ], [ 1, Moves.GROWL ], [ 1, Moves.QUICK_ATTACK ], - [ 1, Moves.FIRE_PUNCH ], - [ 1, Moves.EMBER ], - [ 1, Moves.FLAMETHROWER ], - [ 1, Moves.FEATHER_DANCE ], [ 9, Moves.FLAME_CHARGE ], [ 12, Moves.DETECT ], [ 15, Moves.SAND_ATTACK ], @@ -4504,10 +4505,10 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { ], [Species.MARSHTOMP]: [ [ EVOLVE_MOVE, Moves.MUD_SHOT ], + [ RELEARN_MOVE, Moves.ROCK_SMASH ], [ 1, Moves.TACKLE ], [ 1, Moves.GROWL ], [ 1, Moves.WATER_GUN ], - [ 1, Moves.ROCK_SMASH ], [ 9, Moves.ROCK_THROW ], [ 12, Moves.PROTECT ], [ 15, Moves.SUPERSONIC ], @@ -4521,14 +4522,14 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 55, Moves.HYDRO_PUMP ], ], [Species.SWAMPERT]: [ + [ RELEARN_MOVE, Moves.SURF ], + [ RELEARN_MOVE, Moves.EARTHQUAKE ], + [ RELEARN_MOVE, Moves.ROCK_SMASH ], + [ RELEARN_MOVE, Moves.HAMMER_ARM ], [ 1, Moves.MUD_SHOT ], [ 1, Moves.TACKLE ], [ 1, Moves.GROWL ], [ 1, Moves.WATER_GUN ], - [ 1, Moves.SURF ], - [ 1, Moves.EARTHQUAKE ], - [ 1, Moves.ROCK_SMASH ], - [ 1, Moves.HAMMER_ARM ], [ 9, Moves.ROCK_THROW ], [ 12, Moves.PROTECT ], [ 15, Moves.SUPERSONIC ], @@ -4706,22 +4707,22 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 64, Moves.HYDRO_PUMP ], ], [Species.LUDICOLO]: [ + [ RELEARN_MOVE, Moves.GROWL ], + [ RELEARN_MOVE, Moves.MIST ], + [ RELEARN_MOVE, Moves.WATER_GUN ], + [ RELEARN_MOVE, Moves.HYDRO_PUMP ], + [ RELEARN_MOVE, Moves.ABSORB ], + [ RELEARN_MOVE, Moves.MEGA_DRAIN ], + [ RELEARN_MOVE, Moves.FURY_SWIPES ], + [ RELEARN_MOVE, Moves.FLAIL ], + [ RELEARN_MOVE, Moves.KNOCK_OFF ], + [ RELEARN_MOVE, Moves.TEETER_DANCE ], + [ RELEARN_MOVE, Moves.ASTONISH ], + [ RELEARN_MOVE, Moves.ENERGY_BALL ], + [ RELEARN_MOVE, Moves.ZEN_HEADBUTT ], [ 1, Moves.FAKE_OUT ], [ 1, Moves.BUBBLE_BEAM ], [ 1, Moves.RAIN_DANCE ], - [ 1, Moves.GROWL ], - [ 1, Moves.MIST ], - [ 1, Moves.WATER_GUN ], - [ 1, Moves.HYDRO_PUMP ], - [ 1, Moves.ABSORB ], - [ 1, Moves.MEGA_DRAIN ], - [ 1, Moves.FURY_SWIPES ], - [ 1, Moves.FLAIL ], - [ 1, Moves.KNOCK_OFF ], - [ 1, Moves.TEETER_DANCE ], - [ 1, Moves.ASTONISH ], - [ 1, Moves.ENERGY_BALL ], - [ 1, Moves.ZEN_HEADBUTT ], ], [Species.SEEDOT]: [ [ 1, Moves.TACKLE ], @@ -4762,27 +4763,27 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { ], [Species.SHIFTRY]: [ [ EVOLVE_MOVE, Moves.LEAF_BLADE ], + [ RELEARN_MOVE, Moves.WHIRLWIND ], + [ RELEARN_MOVE, Moves.TACKLE ], + [ RELEARN_MOVE, Moves.ABSORB ], + [ RELEARN_MOVE, Moves.MEGA_DRAIN ], + [ RELEARN_MOVE, Moves.GROWTH ], + [ RELEARN_MOVE, Moves.RAZOR_LEAF ], + [ RELEARN_MOVE, Moves.HARDEN ], + [ RELEARN_MOVE, Moves.EXPLOSION ], + [ RELEARN_MOVE, Moves.ROLLOUT ], + [ RELEARN_MOVE, Moves.SWAGGER ], + [ RELEARN_MOVE, Moves.SYNTHESIS ], + [ RELEARN_MOVE, Moves.BEAT_UP ], + [ RELEARN_MOVE, Moves.FAKE_OUT ], + [ RELEARN_MOVE, Moves.TORMENT ], + [ RELEARN_MOVE, Moves.ASTONISH ], + [ RELEARN_MOVE, Moves.EXTRASENSORY ], + [ RELEARN_MOVE, Moves.SUCKER_PUNCH ], [ 1, Moves.AIR_CUTTER ], [ 1, Moves.HURRICANE ], [ 1, Moves.PAYBACK ], [ 1, Moves.SUNNY_DAY ], - [ 1, Moves.WHIRLWIND ], - [ 1, Moves.TACKLE ], - [ 1, Moves.ABSORB ], - [ 1, Moves.MEGA_DRAIN ], - [ 1, Moves.GROWTH ], - [ 1, Moves.RAZOR_LEAF ], - [ 1, Moves.HARDEN ], - [ 1, Moves.EXPLOSION ], - [ 1, Moves.ROLLOUT ], - [ 1, Moves.SWAGGER ], - [ 1, Moves.SYNTHESIS ], - [ 1, Moves.BEAT_UP ], - [ 1, Moves.FAKE_OUT ], - [ 1, Moves.TORMENT ], - [ 1, Moves.ASTONISH ], - [ 1, Moves.EXTRASENSORY ], - [ 1, Moves.SUCKER_PUNCH ], ], [Species.TAILLOW]: [ [ 1, Moves.PECK ], @@ -4952,6 +4953,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { ], [Species.BRELOOM]: [ [ EVOLVE_MOVE, Moves.MACH_PUNCH ], + [ RELEARN_MOVE, Moves.SPORE ], [ 1, Moves.POISON_POWDER ], [ 1, Moves.GROWTH ], [ 1, Moves.TOXIC ], @@ -5388,11 +5390,11 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 60, Moves.ELECTRIC_TERRAIN ], ], [Species.PLUSLE]: [ + [ RELEARN_MOVE, Moves.NUZZLE ], [ 1, Moves.PLAY_NICE ], [ 1, Moves.GROWL ], [ 1, Moves.THUNDER_WAVE ], [ 1, Moves.QUICK_ATTACK ], - [ 1, Moves.NUZZLE ], [ 4, Moves.HELPING_HAND ], [ 7, Moves.SPARK ], [ 10, Moves.ENCORE ], @@ -5410,11 +5412,11 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 49, Moves.ENTRAINMENT ], ], [Species.MINUN]: [ + [ RELEARN_MOVE, Moves.NUZZLE ], [ 1, Moves.PLAY_NICE ], [ 1, Moves.GROWL ], [ 1, Moves.THUNDER_WAVE ], [ 1, Moves.QUICK_ATTACK ], - [ 1, Moves.NUZZLE ], [ 4, Moves.HELPING_HAND ], [ 7, Moves.SPARK ], [ 10, Moves.ENCORE ], @@ -5712,15 +5714,15 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { ], [Species.VIBRAVA]: [ [ EVOLVE_MOVE, Moves.DRAGON_BREATH ], + [ RELEARN_MOVE, Moves.SUPERSONIC ], + [ RELEARN_MOVE, Moves.FISSURE ], + [ RELEARN_MOVE, Moves.CRUNCH ], + [ RELEARN_MOVE, Moves.SUPERPOWER ], + [ RELEARN_MOVE, Moves.ASTONISH ], + [ RELEARN_MOVE, Moves.BULLDOZE ], [ 1, Moves.DIG ], [ 1, Moves.SAND_ATTACK ], [ 1, Moves.BITE ], - [ 1, Moves.SUPERSONIC ], - [ 1, Moves.FISSURE ], - [ 1, Moves.CRUNCH ], - [ 1, Moves.SUPERPOWER ], - [ 1, Moves.ASTONISH ], - [ 1, Moves.BULLDOZE ], [ 1, Moves.BIDE ], [ 1, Moves.FEINT_ATTACK ], [ 12, Moves.MUD_SLAP ], @@ -5737,18 +5739,18 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { ], [Species.FLYGON]: [ [ EVOLVE_MOVE, Moves.DRAGON_CLAW ], + [ RELEARN_MOVE, Moves.BITE ], + [ RELEARN_MOVE, Moves.FISSURE ], + [ RELEARN_MOVE, Moves.DIG ], + [ RELEARN_MOVE, Moves.CRUNCH ], + [ RELEARN_MOVE, Moves.SUPERPOWER ], + [ RELEARN_MOVE, Moves.ASTONISH ], + [ RELEARN_MOVE, Moves.DRAGON_DANCE ], + [ RELEARN_MOVE, Moves.FEINT ], [ 1, Moves.DRAGON_BREATH ], [ 1, Moves.BULLDOZE ], [ 1, Moves.SAND_ATTACK ], [ 1, Moves.SUPERSONIC ], - [ 1, Moves.BITE ], - [ 1, Moves.FISSURE ], - [ 1, Moves.DIG ], - [ 1, Moves.CRUNCH ], - [ 1, Moves.SUPERPOWER ], - [ 1, Moves.ASTONISH ], - [ 1, Moves.DRAGON_DANCE ], - [ 1, Moves.FEINT ], [ 1, Moves.BIDE ], [ 1, Moves.FEINT_ATTACK ], [ 12, Moves.MUD_SLAP ], @@ -6526,12 +6528,12 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { ], [Species.METAGROSS]: [ [ EVOLVE_MOVE, Moves.HAMMER_ARM ], + [ RELEARN_MOVE, Moves.EXPLOSION ], + [ RELEARN_MOVE, Moves.HONE_CLAWS ], [ 1, Moves.CONFUSION ], [ 1, Moves.METAL_CLAW ], [ 1, Moves.BULLET_PUNCH ], [ 1, Moves.TACKLE ], - [ 1, Moves.EXPLOSION ], - [ 1, Moves.HONE_CLAWS ], [ 6, Moves.ZEN_HEADBUTT ], [ 12, Moves.MAGNET_RISE ], [ 16, Moves.FLASH_CANNON ], @@ -6796,6 +6798,8 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { ], [Species.INFERNAPE]: [ [ EVOLVE_MOVE, Moves.CLOSE_COMBAT ], + [ RELEARN_MOVE, Moves.TAUNT ], + [ RELEARN_MOVE, Moves.SLACK_OFF ], [ 1, Moves.SCRATCH ], [ 1, Moves.LEER ], [ 1, Moves.EMBER ], @@ -7082,6 +7086,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { ], [Species.BASTIODON]: [ [ EVOLVE_MOVE, Moves.BLOCK ], + [ RELEARN_MOVE, Moves.WIDE_GUARD ], [ 1, Moves.TACKLE ], [ 1, Moves.PROTECT ], [ 1, Moves.TAUNT ], @@ -8066,6 +8071,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.LIFE_DEW ], ], [Species.YANMEGA]: [ + [ RELEARN_MOVE, Moves.HYPNOSIS ], [ 1, Moves.TACKLE ], [ 1, Moves.DOUBLE_TEAM ], [ 1, Moves.NIGHT_SLASH ], @@ -8311,6 +8317,16 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 55, Moves.UPROAR ], ], [Species.UXIE]: [ + [ RELEARN_MOVE, Moves.TRI_ATTACK ], + [ RELEARN_MOVE, Moves.SNORE ], + [ RELEARN_MOVE, Moves.SAFEGUARD ], + [ RELEARN_MOVE, Moves.IRON_TAIL ], + [ RELEARN_MOVE, Moves.PSYCHO_CUT ], + [ RELEARN_MOVE, Moves.WONDER_ROOM ], + [ RELEARN_MOVE, Moves.MAGIC_ROOM ], + [ RELEARN_MOVE, Moves.ROUND ], + [ RELEARN_MOVE, Moves.ALLY_SWITCH ], + [ RELEARN_MOVE, Moves.EXPANDING_FORCE ], [ 1, Moves.CONFUSION ], [ 1, Moves.REST ], [ 7, Moves.SWIFT ], @@ -8327,6 +8343,16 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 84, Moves.MYSTICAL_POWER ], ], [Species.MESPRIT]: [ + [ RELEARN_MOVE, Moves.TRI_ATTACK ], + [ RELEARN_MOVE, Moves.SNORE ], + [ RELEARN_MOVE, Moves.SAFEGUARD ], + [ RELEARN_MOVE, Moves.IRON_TAIL ], + [ RELEARN_MOVE, Moves.PSYCHO_CUT ], + [ RELEARN_MOVE, Moves.WONDER_ROOM ], + [ RELEARN_MOVE, Moves.MAGIC_ROOM ], + [ RELEARN_MOVE, Moves.ROUND ], + [ RELEARN_MOVE, Moves.ALLY_SWITCH ], + [ RELEARN_MOVE, Moves.EXPANDING_FORCE ], [ 1, Moves.CONFUSION ], [ 1, Moves.REST ], [ 7, Moves.SWIFT ], @@ -8343,6 +8369,19 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 84, Moves.MYSTICAL_POWER ], ], [Species.AZELF]: [ + [ RELEARN_MOVE, Moves.SELF_DESTRUCT ], + [ RELEARN_MOVE, Moves.TRI_ATTACK ], + [ RELEARN_MOVE, Moves.SNORE ], + [ RELEARN_MOVE, Moves.SAFEGUARD ], + [ RELEARN_MOVE, Moves.IRON_TAIL ], + [ RELEARN_MOVE, Moves.PAYBACK ], + [ RELEARN_MOVE, Moves.ASSURANCE ], + [ RELEARN_MOVE, Moves.PSYCHO_CUT ], + [ RELEARN_MOVE, Moves.WONDER_ROOM ], + [ RELEARN_MOVE, Moves.MAGIC_ROOM ], + [ RELEARN_MOVE, Moves.ROUND ], + [ RELEARN_MOVE, Moves.ALLY_SWITCH ], + [ RELEARN_MOVE, Moves.EXPANDING_FORCE ], [ 1, Moves.CONFUSION ], [ 1, Moves.REST ], [ 7, Moves.SWIFT ], @@ -8633,12 +8672,12 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 52, Moves.FLARE_BLITZ ], ], [Species.EMBOAR]: [ + [ RELEARN_MOVE, Moves.ENDURE ], + [ RELEARN_MOVE, Moves.HAMMER_ARM ], [ 1, Moves.TACKLE ], [ 1, Moves.TAIL_WHIP ], [ 1, Moves.EMBER ], [ 1, Moves.ARM_THRUST ], - [ 1, Moves.ENDURE ], - [ 1, Moves.HAMMER_ARM ], [ 13, Moves.DEFENSE_CURL ], [ 15, Moves.FLAME_CHARGE ], [ 20, Moves.SMOG ], @@ -9300,6 +9339,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { ], [Species.LEAVANNY]: [ [ EVOLVE_MOVE, Moves.SLASH ], + [ RELEARN_MOVE, Moves.BUG_BITE ], [ 1, Moves.TACKLE ], [ 1, Moves.RAZOR_LEAF ], [ 1, Moves.STRING_SHOT ], @@ -9864,21 +9904,21 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { ], [Species.CINCCINO]: [ [ EVOLVE_MOVE, Moves.TAIL_SLAP ], + [ RELEARN_MOVE, Moves.SLAM ], + [ RELEARN_MOVE, Moves.SWIFT ], + [ RELEARN_MOVE, Moves.ENCORE ], + [ RELEARN_MOVE, Moves.HELPING_HAND ], + [ RELEARN_MOVE, Moves.HYPER_VOICE ], + [ RELEARN_MOVE, Moves.TICKLE ], + [ RELEARN_MOVE, Moves.ROCK_BLAST ], + [ RELEARN_MOVE, Moves.LAST_RESORT ], + [ RELEARN_MOVE, Moves.AFTER_YOU ], + [ RELEARN_MOVE, Moves.ECHOED_VOICE ], + [ RELEARN_MOVE, Moves.BABY_DOLL_EYES ], [ 1, Moves.BULLET_SEED ], [ 1, Moves.SING ], [ 1, Moves.CHARM ], [ 1, Moves.POUND ], - [ 1, Moves.SLAM ], - [ 1, Moves.SWIFT ], - [ 1, Moves.ENCORE ], - [ 1, Moves.HELPING_HAND ], - [ 1, Moves.HYPER_VOICE ], - [ 1, Moves.TICKLE ], - [ 1, Moves.ROCK_BLAST ], - [ 1, Moves.LAST_RESORT ], - [ 1, Moves.AFTER_YOU ], - [ 1, Moves.ECHOED_VOICE ], - [ 1, Moves.BABY_DOLL_EYES ], ], [Species.GOTHITA]: [ [ 1, Moves.POUND ], @@ -10738,10 +10778,10 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 56, Moves.DYNAMIC_PUNCH ], ], [Species.GOLURK]: [ + [ RELEARN_MOVE, Moves.MUD_SLAP ], + [ RELEARN_MOVE, Moves.FOCUS_PUNCH ], [ 1, Moves.POUND ], [ 1, Moves.DEFENSE_CURL ], - [ 1, Moves.MUD_SLAP ], - [ 1, Moves.FOCUS_PUNCH ], [ 1, Moves.ASTONISH ], [ 1, Moves.HIGH_HORSEPOWER ], [ 12, Moves.SHADOW_PUNCH ], @@ -11045,6 +11085,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 70, Moves.CLOSE_COMBAT ], ], [Species.VIRIZION]: [ + [ RELEARN_MOVE, Moves.TAKE_DOWN ], [ 1, Moves.LEER ], [ 1, Moves.QUICK_ATTACK ], [ 1, Moves.HELPING_HAND ], @@ -12543,13 +12584,13 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { ], [Species.INCINEROAR]: [ [ EVOLVE_MOVE, Moves.DARKEST_LARIAT ], - [ 1, Moves.SCRATCH ], - [ 1, Moves.GROWL ], + [ RELEARN_MOVE, Moves.SCRATCH ], + [ RELEARN_MOVE, Moves.GROWL ], + [ RELEARN_MOVE, Moves.THROAT_CHOP ], [ 1, Moves.EMBER ], [ 1, Moves.LICK ], [ 1, Moves.CROSS_CHOP ], [ 1, Moves.BULK_UP ], - [ 1, Moves.THROAT_CHOP ], [ 9, Moves.ROAR ], [ 12, Moves.FURY_SWIPES ], [ 15, Moves.BITE ], @@ -12626,11 +12667,11 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 37, Moves.HYPER_VOICE ], ], [Species.TRUMBEAK]: [ + [ RELEARN_MOVE, Moves.ECHOED_VOICE ], [ 1, Moves.GROWL ], [ 1, Moves.PECK ], [ 1, Moves.ROCK_SMASH ], [ 1, Moves.ROCK_BLAST ], - [ 1, Moves.ECHOED_VOICE ], [ 13, Moves.SUPERSONIC ], [ 16, Moves.PLUCK ], [ 21, Moves.ROOST ], @@ -12720,16 +12761,16 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { ], [Species.VIKAVOLT]: [ [ EVOLVE_MOVE, Moves.THUNDERBOLT ], + [ RELEARN_MOVE, Moves.VISE_GRIP ], + [ RELEARN_MOVE, Moves.DIG ], + [ RELEARN_MOVE, Moves.MUD_SLAP ], + [ RELEARN_MOVE, Moves.IRON_DEFENSE ], + [ RELEARN_MOVE, Moves.X_SCISSOR ], + [ RELEARN_MOVE, Moves.BUG_BITE ], [ 1, Moves.CHARGE ], [ 1, Moves.CRUNCH ], [ 1, Moves.DISCHARGE ], [ 1, Moves.STRING_SHOT ], - [ 1, Moves.VISE_GRIP ], - [ 1, Moves.DIG ], - [ 1, Moves.MUD_SLAP ], - [ 1, Moves.IRON_DEFENSE ], - [ 1, Moves.X_SCISSOR ], - [ 1, Moves.BUG_BITE ], [ 15, Moves.BITE ], [ 23, Moves.SPARK ], [ 29, Moves.STICKY_WEB ], @@ -13473,6 +13514,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { ], [Species.KOMMO_O]: [ [ EVOLVE_MOVE, Moves.CLANGING_SCALES ], + [ RELEARN_MOVE, Moves.BELLY_DRUM ], [ 1, Moves.TACKLE ], [ 1, Moves.LEER ], [ 1, Moves.PROTECT ], @@ -14411,6 +14453,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 51, Moves.SAND_TOMB ], ], [Species.CRAMORANT]: [ + [ RELEARN_MOVE, Moves.BELCH ], [ 1, Moves.PECK ], [ 1, Moves.STOCKPILE ], [ 1, Moves.SPIT_UP ], @@ -15437,6 +15480,8 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { ], [Species.MEOWSCARADA]: [ [ EVOLVE_MOVE, Moves.FLOWER_TRICK ], + [ RELEARN_MOVE, Moves.DOUBLE_TEAM ], + [ RELEARN_MOVE, Moves.TRICK ], [ 1, Moves.SCRATCH ], [ 1, Moves.TAIL_WHIP ], [ 1, Moves.LEAFAGE ], @@ -15487,6 +15532,8 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { ], [Species.SKELEDIRGE]: [ [ EVOLVE_MOVE, Moves.TORCH_SONG ], + [ RELEARN_MOVE, Moves.SING ], + [ RELEARN_MOVE, Moves.YAWN ], [ 1, Moves.TACKLE ], [ 1, Moves.LEER ], [ 1, Moves.EMBER ], @@ -15538,6 +15585,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { ], [Species.QUAQUAVAL]: [ [ EVOLVE_MOVE, Moves.AQUA_STEP ], + [ RELEARN_MOVE, Moves.COUNTER ], [ 1, Moves.POUND ], [ 1, Moves.GROWL ], [ 1, Moves.WATER_GUN ], @@ -15937,13 +15985,13 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { ], [Species.CERULEDGE]: [ [ EVOLVE_MOVE, Moves.SHADOW_CLAW ], + [ RELEARN_MOVE, Moves.NIGHT_SLASH ], + [ RELEARN_MOVE, Moves.SHADOW_SNEAK ], + [ RELEARN_MOVE, Moves.QUICK_GUARD ], + [ RELEARN_MOVE, Moves.SOLAR_BLADE ], [ 1, Moves.EMBER ], [ 1, Moves.LEER ], [ 1, Moves.ASTONISH ], - [ 1, Moves.NIGHT_SLASH ], - [ 1, Moves.SHADOW_SNEAK ], - [ 1, Moves.QUICK_GUARD ], - [ 1, Moves.SOLAR_BLADE ], [ 8, Moves.CLEAR_SMOG ], [ 12, Moves.FIRE_SPIN ], [ 16, Moves.WILL_O_WISP ], @@ -16224,6 +16272,8 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { ], [Species.RABSCA]: [ [ EVOLVE_MOVE, Moves.REVIVAL_BLESSING ], + [ RELEARN_MOVE, Moves.SAFEGUARD ], + [ RELEARN_MOVE, Moves.PSYCH_UP ], [ 1, Moves.TACKLE ], [ 1, Moves.CONFUSION ], [ 1, Moves.DEFENSE_CURL ], @@ -16756,6 +16806,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 91, Moves.HEADLONG_RUSH ], ], [Species.SCREAM_TAIL]: [ + [ RELEARN_MOVE, Moves.SUNNY_DAY ], [ 1, Moves.POUND ], [ 1, Moves.SING ], [ 1, Moves.DISABLE ], @@ -16774,6 +16825,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 91, Moves.BOOMBURST ], ], [Species.BRUTE_BONNET]: [ + [ RELEARN_MOVE, Moves.SUNNY_DAY ], [ 1, Moves.ABSORB ], [ 1, Moves.GROWTH ], [ 1, Moves.ASTONISH ], @@ -16791,6 +16843,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 91, Moves.SOLAR_BEAM ], ], [Species.FLUTTER_MANE]: [ + [ RELEARN_MOVE, Moves.SUNNY_DAY ], [ 1, Moves.CONFUSE_RAY ], [ 1, Moves.SPITE ], [ 1, Moves.ASTONISH ], @@ -16809,6 +16862,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 91, Moves.PERISH_SONG ], ], [Species.SLITHER_WING]: [ + [ RELEARN_MOVE, Moves.SUNNY_DAY ], [ 1, Moves.GUST ], [ 1, Moves.EMBER ], [ 1, Moves.BUG_BITE ], @@ -16828,6 +16882,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 91, Moves.THRASH ], ], [Species.SANDY_SHOCKS]: [ + [ RELEARN_MOVE, Moves.SUNNY_DAY ], [ 1, Moves.SUPERSONIC ], [ 1, Moves.THUNDER_SHOCK ], [ 1, Moves.THUNDER_WAVE ], @@ -16865,6 +16920,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 91, Moves.STEEL_ROLLER ], ], [Species.IRON_BUNDLE]: [ + [ RELEARN_MOVE, Moves.ELECTRIC_TERRAIN ], [ 1, Moves.PRESENT ], [ 1, Moves.WATER_GUN ], //Custom [ 7, Moves.POWDER_SNOW ], @@ -16882,6 +16938,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 91, Moves.BLIZZARD ], ], [Species.IRON_HANDS]: [ + [ RELEARN_MOVE, Moves.ELECTRIC_TERRAIN ], [ 1, Moves.SAND_ATTACK ], [ 1, Moves.TACKLE ], [ 1, Moves.FOCUS_ENERGY ], @@ -16901,6 +16958,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 91, Moves.FOCUS_PUNCH ], ], [Species.IRON_JUGULIS]: [ + [ RELEARN_MOVE, Moves.ELECTRIC_TERRAIN ], [ 1, Moves.FOCUS_ENERGY ], [ 1, Moves.TRI_ATTACK ], [ 1, Moves.AIR_CUTTER ], @@ -16920,6 +16978,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 91, Moves.HYPER_BEAM ], ], [Species.IRON_MOTH]: [ + [ RELEARN_MOVE, Moves.ELECTRIC_TERRAIN ], [ 1, Moves.GUST ], [ 1, Moves.WHIRLWIND ], [ 1, Moves.EMBER ], @@ -16939,6 +16998,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 91, Moves.OVERHEAT ], ], [Species.IRON_THORNS]: [ + [ RELEARN_MOVE, Moves.ELECTRIC_TERRAIN ], [ 1, Moves.ROCK_THROW ], [ 1, Moves.IRON_DEFENSE ], [ 1, Moves.THUNDER_FANG ], @@ -17106,6 +17166,10 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 75, Moves.OVERHEAT ], ], [Species.ROARING_MOON]: [ + [ RELEARN_MOVE, Moves.SUNNY_DAY ], + [ RELEARN_MOVE, Moves.JAW_LOCK ], + [ RELEARN_MOVE, Moves.BREAKING_SWIPE ], + [ RELEARN_MOVE, Moves.SCALE_SHOT ], [ 1, Moves.LEER ], [ 1, Moves.BITE ], [ 1, Moves.FOCUS_ENERGY ], @@ -17125,6 +17189,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 91, Moves.DOUBLE_EDGE ], ], [Species.IRON_VALIANT]: [ + [ RELEARN_MOVE, Moves.ELECTRIC_TERRAIN ], [ 1, Moves.DISABLE ], [ 1, Moves.DOUBLE_TEAM ], [ 1, Moves.FURY_CUTTER ], @@ -17222,11 +17287,11 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { ], [Species.DIPPLIN]: [ [ EVOLVE_MOVE, Moves.DOUBLE_HIT ], + [ RELEARN_MOVE, Moves.INFESTATION ], [ 1, Moves.WITHDRAW ], [ 1, Moves.SWEET_SCENT ], [ 1, Moves.RECYCLE ], [ 1, Moves.ASTONISH ], - [ 1, Moves.INFESTATION ], [ 4, Moves.DRAGON_TAIL ], [ 8, Moves.GROWTH ], [ 12, Moves.DRAGON_BREATH ], @@ -17315,6 +17380,10 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 72, Moves.MOONBLAST ], ], [Species.OGERPON]: [ + [ RELEARN_MOVE, Moves.DOUBLE_KICK ], + [ RELEARN_MOVE, Moves.COUNTER ], + [ RELEARN_MOVE, Moves.RETALIATE ], + [ RELEARN_MOVE, Moves.HORN_LEECH ], [ 1, Moves.VINE_WHIP ], [ 1, Moves.LEECH_SEED ], [ 1, Moves.QUICK_ATTACK ], @@ -17349,13 +17418,13 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { ], [Species.HYDRAPPLE]: [ [ EVOLVE_MOVE, Moves.FICKLE_BEAM ], + [ RELEARN_MOVE, Moves.YAWN ], + [ RELEARN_MOVE, Moves.DOUBLE_HIT ], + [ RELEARN_MOVE, Moves.INFESTATION ], [ 1, Moves.WITHDRAW ], [ 1, Moves.SWEET_SCENT ], [ 1, Moves.RECYCLE ], [ 1, Moves.ASTONISH ], - [ 1, Moves.YAWN ], - [ 1, Moves.DOUBLE_HIT ], - [ 1, Moves.INFESTATION ], [ 4, Moves.DRAGON_TAIL ], [ 8, Moves.GROWTH ], [ 12, Moves.DRAGON_BREATH ], @@ -17463,6 +17532,9 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 90, Moves.GYRO_BALL ], ], [Species.PECHARUNT]: [ + [ RELEARN_MOVE, Moves.DEFENSE_CURL ], + [ RELEARN_MOVE, Moves.ROLLOUT ], + [ RELEARN_MOVE, Moves.MEAN_LOOK ], [ 1, Moves.SMOG ], [ 1, Moves.POISON_GAS ], [ 1, Moves.MEMENTO ], @@ -17555,25 +17627,25 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { ], [Species.ALOLA_SANDSLASH]: [ [ EVOLVE_MOVE, Moves.ICICLE_SPEAR ], + [ RELEARN_MOVE, Moves.SCRATCH ], + [ RELEARN_MOVE, Moves.MIST ], + [ RELEARN_MOVE, Moves.BLIZZARD ], + [ RELEARN_MOVE, Moves.DEFENSE_CURL ], + [ RELEARN_MOVE, Moves.SWIFT ], + [ RELEARN_MOVE, Moves.FURY_SWIPES ], + [ RELEARN_MOVE, Moves.POWDER_SNOW ], + [ RELEARN_MOVE, Moves.ROLLOUT ], + [ RELEARN_MOVE, Moves.FURY_CUTTER ], + [ RELEARN_MOVE, Moves.RAPID_SPIN ], + [ RELEARN_MOVE, Moves.IRON_DEFENSE ], + [ RELEARN_MOVE, Moves.GYRO_BALL ], + [ RELEARN_MOVE, Moves.METAL_BURST ], + [ RELEARN_MOVE, Moves.IRON_HEAD ], + [ RELEARN_MOVE, Moves.SNOWSCAPE ], [ 1, Moves.ICICLE_CRASH ], [ 1, Moves.METAL_CLAW ], [ 1, Moves.SLASH ], [ 1, Moves.SWORDS_DANCE ], - [ 1, Moves.SCRATCH ], - [ 1, Moves.MIST ], - [ 1, Moves.BLIZZARD ], - [ 1, Moves.DEFENSE_CURL ], - [ 1, Moves.SWIFT ], - [ 1, Moves.FURY_SWIPES ], - [ 1, Moves.POWDER_SNOW ], - [ 1, Moves.ROLLOUT ], - [ 1, Moves.FURY_CUTTER ], - [ 1, Moves.RAPID_SPIN ], - [ 1, Moves.IRON_DEFENSE ], - [ 1, Moves.GYRO_BALL ], - [ 1, Moves.METAL_BURST ], - [ 1, Moves.IRON_HEAD ], - [ 1, Moves.SNOWSCAPE ], [ 1, Moves.ICE_BALL ], ], [Species.ALOLA_VULPIX]: [ @@ -17595,22 +17667,22 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { ], [Species.ALOLA_NINETALES]: [ [ EVOLVE_MOVE, Moves.DAZZLING_GLEAM ], + [ RELEARN_MOVE, Moves.DISABLE ], + [ RELEARN_MOVE, Moves.MIST ], + [ RELEARN_MOVE, Moves.ICE_BEAM ], + [ RELEARN_MOVE, Moves.AURORA_BEAM ], + [ RELEARN_MOVE, Moves.CONFUSE_RAY ], + [ RELEARN_MOVE, Moves.SPITE ], + [ RELEARN_MOVE, Moves.POWDER_SNOW ], + [ RELEARN_MOVE, Moves.EXTRASENSORY ], + [ RELEARN_MOVE, Moves.NASTY_PLOT ], + [ RELEARN_MOVE, Moves.ICE_SHARD ], + [ RELEARN_MOVE, Moves.FREEZE_DRY ], + [ RELEARN_MOVE, Moves.AURORA_VEIL ], [ 1, Moves.ICY_WIND ], [ 1, Moves.IMPRISON ], [ 1, Moves.BLIZZARD ], [ 1, Moves.TAIL_WHIP ], - [ 1, Moves.DISABLE ], - [ 1, Moves.MIST ], - [ 1, Moves.ICE_BEAM ], - [ 1, Moves.AURORA_BEAM ], - [ 1, Moves.CONFUSE_RAY ], - [ 1, Moves.SPITE ], - [ 1, Moves.POWDER_SNOW ], - [ 1, Moves.EXTRASENSORY ], - [ 1, Moves.NASTY_PLOT ], - [ 1, Moves.ICE_SHARD ], - [ 1, Moves.FREEZE_DRY ], - [ 1, Moves.AURORA_VEIL ], ], [Species.ALOLA_DIGLETT]: [ [ 1, Moves.SAND_ATTACK ], @@ -17771,6 +17843,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { ], [Species.ALOLA_EXEGGUTOR]: [ [ EVOLVE_MOVE, Moves.DRAGON_HAMMER ], + [ RELEARN_MOVE, Moves.GROWTH ], [ 1, Moves.BARRAGE ], [ 1, Moves.SEED_BOMB ], [ 1, Moves.PSYSHOCK ], @@ -17789,7 +17862,6 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.HYPNOSIS ], [ 1, Moves.REFLECT ], [ 1, Moves.LEECH_SEED ], - [ 1, Moves.GROWTH ], ], [Species.ALOLA_MAROWAK]: [ [ EVOLVE_MOVE, Moves.SHADOW_BONE ], @@ -18043,6 +18115,9 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { ], [Species.GALAR_SLOWKING]: [ [ EVOLVE_MOVE, Moves.EERIE_SPELL ], + [ RELEARN_MOVE, Moves.FUTURE_SIGHT ], + [ RELEARN_MOVE, Moves.CHILLY_RECEPTION ], + [ RELEARN_MOVE, Moves.TOXIC ], [ 1, Moves.POWER_GEM ], [ 1, Moves.NASTY_PLOT ], [ 1, Moves.SWAGGER ], @@ -18050,9 +18125,6 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.CURSE ], [ 1, Moves.GROWL ], [ 1, Moves.ACID ], - [ 1, Moves.TOXIC ], - [ 1, Moves.FUTURE_SIGHT ], - [ 1, Moves.CHILLY_RECEPTION ], [ 9, Moves.YAWN ], [ 12, Moves.CONFUSION ], [ 15, Moves.DISABLE ], @@ -18523,11 +18595,11 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 40, Moves.EARTHQUAKE ], ], [Species.BLOODMOON_URSALUNA]: [ + [ RELEARN_MOVE, Moves.MOONLIGHT ], [ 1, Moves.HEADLONG_RUSH ], [ 1, Moves.SCRATCH ], [ 1, Moves.LEER ], [ 1, Moves.LICK ], - [ 1, Moves.MOONLIGHT ], [ 8, Moves.FURY_SWIPES ], [ 13, Moves.PAYBACK ], [ 17, Moves.HARDEN ], diff --git a/src/data/pokemon-stat.ts b/src/data/pokemon-stat.ts index a6bf77b1daa..16570785a62 100644 --- a/src/data/pokemon-stat.ts +++ b/src/data/pokemon-stat.ts @@ -1,16 +1,10 @@ +import { Stat } from "#enums/stat"; import i18next from "i18next"; -export enum Stat { - HP = 0, - ATK, - DEF, - SPATK, - SPDEF, - SPD -} +export { Stat }; export function getStatName(stat: Stat, shorten: boolean = false) { - let ret: string; + let ret: string = ""; switch (stat) { case Stat.HP: ret = !shorten ? i18next.t("pokemonInfo:Stat.HP") : i18next.t("pokemonInfo:Stat.HPshortened"); diff --git a/src/data/splash-messages.ts b/src/data/splash-messages.ts index bd64456c993..8e95bba0591 100644 --- a/src/data/splash-messages.ts +++ b/src/data/splash-messages.ts @@ -6,7 +6,7 @@ export function getBattleCountSplashMessage(): string { export function getSplashMessages(): string[] { const splashMessages = Array(10).fill(getBattleCountSplashMessage()); - splashMessages.push(...[ + splashMessages.push( i18next.t("splashMessages:joinTheDiscord"), i18next.t("splashMessages:infiniteLevels"), i18next.t("splashMessages:everythingStacks"), @@ -39,7 +39,8 @@ export function getSplashMessages(): string[] { i18next.t("splashMessages:alsoTryRadicalRed"), i18next.t("splashMessages:eeveeExpo"), i18next.t("splashMessages:ynoproject"), - ]); + i18next.t("splashMessages:breedersInSpace"), + ); return splashMessages; } diff --git a/src/data/status-effect.ts b/src/data/status-effect.ts index 5949fb2f130..65caf58ccb9 100644 --- a/src/data/status-effect.ts +++ b/src/data/status-effect.ts @@ -1,16 +1,8 @@ import * as Utils from "../utils"; +import { StatusEffect } from "#enums/status-effect"; import i18next, { ParseKeys } from "i18next"; -export enum StatusEffect { - NONE, - POISON, - TOXIC, - PARALYSIS, - SLEEP, - FREEZE, - BURN, - FAINT -} +export { StatusEffect }; export class Status { public effect: StatusEffect; diff --git a/src/data/terrain.ts b/src/data/terrain.ts index f7324c28b93..507557eaf9f 100644 --- a/src/data/terrain.ts +++ b/src/data/terrain.ts @@ -60,7 +60,8 @@ export class Terrain { if (!move.hasAttr(ProtectAttr)) { const priority = new Utils.IntegerHolder(move.priority); applyAbAttrs(IncrementMovePriorityAbAttr, user, null, move, priority); - return priority.value > 0 && user.getOpponents().filter(o => targets.includes(o.getBattlerIndex())).length > 0; + // Cancels move if the move has positive priority and targets a Pokemon grounded on the Psychic Terrain + return priority.value > 0 && user.getOpponents().filter(o => targets.includes(o.getBattlerIndex()) && o.isGrounded()).length > 0; } } diff --git a/src/data/tms.ts b/src/data/tms.ts index 0a13cef4ee8..a0359a5d526 100644 --- a/src/data/tms.ts +++ b/src/data/tms.ts @@ -6119,6 +6119,229 @@ export const tmSpecies: TmSpecies = { Species.PALDEA_WOOPER, Species.BLOODMOON_URSALUNA, ], + [Moves.COUNTER]: [ + Species.CHARMANDER, + Species.CHARMELEON, + Species.CHARIZARD, + Species.SQUIRTLE, + Species.WARTORTLE, + Species.BLASTOISE, + Species.RATTATA, + Species.RATICATE, + Species.PIKACHU, + Species.RAICHU, + Species.SANDSHREW, + Species.SANDSLASH, + Species.NIDORAN_F, + Species.NIDORINA, + Species.NIDOQUEEN, + Species.NIDORAN_M, + Species.NIDORINO, + Species.NIDOKING, + Species.CLEFAIRY, + Species.CLEFABLE, + Species.JIGGLYPUFF, + Species.WIGGLYTUFF, + Species.PARAS, + Species.PARASECT, + Species.PSYDUCK, + Species.GOLDUCK, + Species.MANKEY, + Species.PRIMEAPE, + Species.POLIWHIRL, + Species.POLIWRATH, + Species.ABRA, + Species.KADABRA, + Species.ALAKAZAM, + Species.MACHOP, + Species.MACHOKE, + Species.MACHAMP, + Species.GEODUDE, + Species.GRAVELER, + Species.GOLEM, + Species.SLOWPOKE, + Species.SLOWBRO, + Species.GENGAR, + Species.DROWZEE, + Species.HYPNO, + Species.CUBONE, + Species.MAROWAK, + Species.HITMONLEE, + Species.HITMONCHAN, + Species.LICKITUNG, + Species.RHYHORN, + Species.RHYDON, + Species.CHANSEY, + Species.KANGASKHAN, + Species.MR_MIME, + Species.SCYTHER, + Species.JYNX, + Species.ELECTABUZZ, + Species.MAGMAR, + Species.SNORLAX, + Species.MEWTWO, + Species.MEW, + Species.CHIKORITA, + Species.BAYLEEF, + Species.MEGANIUM, + Species.TYPHLOSION, + Species.TOTODILE, + Species.CROCONAW, + Species.FERALIGATR, + Species.LEDYBA, + Species.LEDIAN, + Species.TOGEPI, + Species.TOGETIC, + Species.MAREEP, + Species.FLAAFFY, + Species.AMPHAROS, + Species.SUDOWOODO, + Species.WOOPER, + Species.QUAGSIRE, + Species.WOBBUFFET, + Species.PINECO, + Species.FORRETRESS, + Species.DUNSPARCE, + Species.GLIGAR, + Species.SNUBBULL, + Species.GRANBULL, + Species.HERACROSS, + Species.SNEASEL, + Species.TEDDIURSA, + Species.URSARING, + Species.DELIBIRD, + Species.SKARMORY, + Species.HOUNDOUR, + Species.HOUNDOOM, + Species.PHANPY, + Species.DONPHAN, + Species.MILTANK, + Species.TYRANITAR, + Species.TREECKO, + Species.GROVYLE, + Species.SCEPTILE, + Species.TORCHIC, + Species.COMBUSKEN, + Species.BLAZIKEN, + Species.MUDKIP, + Species.MARSHTOMP, + Species.SWAMPERT, + Species.POOCHYENA, + Species.MIGHTYENA, + Species.ZIGZAGOON, + Species.LINOONE, + Species.LOTAD, + Species.LOMBRE, + Species.LUDICOLO, + Species.TAILLOW, + Species.SWELLOW, + Species.BRELOOM, + Species.SLAKOTH, + Species.VIGOROTH, + Species.SLAKING, + Species.WHISMUR, + Species.LOUDRED, + Species.EXPLOUD, + Species.MAKUHITA, + Species.HARIYAMA, + Species.SABLEYE, + Species.MAWILE, + Species.AGGRON, + Species.MEDITITE, + Species.MEDICHAM, + Species.PLUSLE, + Species.MINUN, + Species.VOLBEAT, + Species.ILLUMISE, + Species.GULPIN, + Species.SWALOT, + Species.GRUMPIG, + Species.SPINDA, + Species.CACNEA, + Species.CACTURNE, + Species.ZANGOOSE, + Species.CORPHISH, + Species.CRAWDAUNT, + Species.KECLEON, + Species.DUSKULL, + Species.DUSCLOPS, + Species.ABSOL, + Species.REGIROCK, + Species.REGICE, + Species.REGISTEEL, + Species.GROUDON, + Species.DEOXYS, + Species.CHIMCHAR, + Species.MONFERNO, + Species.INFERNAPE, + Species.SHIELDON, + Species.BASTIODON, + Species.RIOLU, + Species.LUCARIO, + Species.SHELLOS, + Species.GASTRODON, + Species.CROAGUNK, + Species.TOXICROAK, + Species.TIMBURR, + Species.GURDURR, + Species.CONKELDURR, + Species.SAWK, + Species.SANDILE, + Species.KROKOROK, + Species.KROOKODILE, + Species.DWEBBLE, + Species.CRUSTLE, + Species.SCRAGGY, + Species.SCRAFTY, + Species.ZORUA, + Species.ZOROARK, + Species.KARRABLAST, + Species.ESCAVALIER, + Species.ACCELGOR, + Species.AXEW, + Species.FRAXURE, + Species.HAXORUS, + Species.FROAKIE, + Species.FROGADIER, + Species.GRENINJA, + Species.GOOMY, + Species.SLIGGOO, + Species.GOODRA, + Species.LYCANROC, + Species.MUDBRAY, + Species.MUDSDALE, + Species.PASSIMIAN, + Species.PYUKUMUKU, + Species.JANGMO_O, + Species.HAKAMO_O, + Species.KOMMO_O, + Species.BUZZWOLE, + Species.MARSHADOW, + Species.SCORBUNNY, + Species.RABOOT, + Species.CINDERACE, + Species.SKWOVET, + Species.GREEDENT, + Species.WOOLOO, + Species.DUBWOOL, + Species.CHEWTLE, + Species.DREDNAW, + Species.FALINKS, + Species.KUBFU, + Species.URSHIFU, + Species.QUAQUAVAL, + Species.TAROUNTULA, + Species.SPIDOPS, + Species.NYMBLE, + Species.LOKIX, + Species.FINIZEN, + Species.PALAFIN, + Species.TATSUGIRI, + Species.KORAIDON, + Species.OKIDOGI, + Species.OGERPON, + Species.IRON_BOULDER, + ], [Moves.STRENGTH]: [ Species.BULBASAUR, Species.IVYSAUR, @@ -11796,6 +12019,8 @@ export const tmSpecies: TmSpecies = { ], [Moves.HAZE]: [ Species.SQUIRTLE, + Species.WARTORTLE, + Species.BLASTOISE, Species.EKANS, Species.ARBOK, Species.ZUBAT, @@ -11808,6 +12033,9 @@ export const tmSpecies: TmSpecies = { Species.TENTACOOL, Species.TENTACRUEL, Species.DODUO, + Species.DODRIO, + Species.SEEL, + Species.DEWGONG, Species.GRIMER, Species.MUK, Species.GASTLY, @@ -11816,11 +12044,15 @@ export const tmSpecies: TmSpecies = { Species.DROWZEE, Species.HYPNO, Species.KRABBY, + Species.KINGLER, Species.KOFFING, Species.WEEZING, Species.GOLDEEN, + Species.SEAKING, + Species.LAPRAS, Species.VAPOREON, Species.OMANYTE, + Species.OMASTAR, Species.ARTICUNO, Species.DRATINI, Species.DRAGONAIR, @@ -11830,6 +12062,7 @@ export const tmSpecies: TmSpecies = { Species.NOCTOWL, Species.CROBAT, Species.NATU, + Species.XATU, Species.POLITOED, Species.WOOPER, Species.QUAGSIRE, @@ -11838,6 +12071,7 @@ export const tmSpecies: TmSpecies = { Species.SWINUB, Species.PILOSWINE, Species.REMORAID, + Species.OCTILLERY, Species.DELIBIRD, Species.MANTINE, Species.SURSKIT, @@ -11868,20 +12102,24 @@ export const tmSpecies: TmSpecies = { Species.YAMASK, Species.COFAGRIGUS, Species.TRUBBISH, + Species.GARBODOR, Species.LITWICK, Species.LAMPENT, Species.CHANDELURE, Species.CRYOGONAL, + Species.ZEKROM, Species.GRENINJA, Species.SKRELP, Species.DRAGALGE, Species.AMAURA, + Species.AURORUS, Species.TREVENANT, Species.ZYGARDE, Species.VOLCANION, Species.ROWLET, Species.DARTRIX, Species.DECIDUEYE, + Species.PRIMARINA, Species.MAREANIE, Species.TOXAPEX, Species.TAPU_FINI, @@ -15924,6 +16162,8 @@ export const tmSpecies: TmSpecies = { Species.ZIGZAGOON, Species.LINOONE, Species.MAWILE, + Species.PLUSLE, + Species.MINUN, Species.CARVANHA, Species.SHARPEDO, Species.GLALIE, @@ -15945,6 +16185,8 @@ export const tmSpecies: TmSpecies = { Species.SWOOBAT, Species.SCRAGGY, Species.SCRAFTY, + Species.MINCCINO, + Species.CINCCINO, Species.EELEKTRIK, Species.EELEKTROSS, Species.CHESPIN, @@ -26683,6 +26925,89 @@ export const tmSpecies: TmSpecies = { Species.PALDEA_WOOPER, Species.BLOODMOON_URSALUNA, ], + [Moves.HEAL_BELL]: [ + Species.CLEFAIRY, + Species.CLEFABLE, + Species.JIGGLYPUFF, + Species.WIGGLYTUFF, + Species.LICKITUNG, + Species.CHANSEY, + Species.JYNX, + Species.LAPRAS, + Species.EEVEE, + Species.VAPOREON, + Species.JOLTEON, + Species.FLAREON, + Species.ARTICUNO, + Species.DRAGONITE, + Species.MEW, + Species.CHINCHOU, + Species.LANTURN, + Species.IGGLYBUFF, + Species.TOGEPI, + Species.TOGETIC, + Species.MAREEP, + Species.FLAAFFY, + Species.AMPHAROS, + Species.ESPEON, + Species.UMBREON, + Species.MISDREAVUS, + Species.SNUBBULL, + Species.GRANBULL, + Species.SMOOCHUM, + Species.MILTANK, + Species.BLISSEY, + Species.CELEBI, + Species.POOCHYENA, + Species.MIGHTYENA, + Species.GARDEVOIR, + Species.SKITTY, + Species.DELCATTY, + Species.SPOINK, + Species.GRUMPIG, + Species.SWABLU, + Species.ALTARIA, + Species.CHIMECHO, + Species.KRICKETUNE, + Species.BUNEARY, + Species.LOPUNNY, + Species.MISMAGIUS, + Species.CHINGLING, + Species.HAPPINY, + Species.LICKILICKY, + Species.TOGEKISS, + Species.LEAFEON, + Species.GLACEON, + Species.UXIE, + Species.PHIONE, + Species.MANAPHY, + Species.MUNNA, + Species.MUSHARNA, + Species.AUDINO, + Species.PETILIL, + Species.LILLIGANT, + Species.GOTHITA, + Species.GOTHORITA, + Species.GOTHITELLE, + Species.MELOETTA, + Species.FLABEBE, + Species.FLOETTE, + Species.FLORGES, + Species.ESPURR, + Species.MEOWSTIC, + Species.SPRITZEE, + Species.AROMATISSE, + Species.SWIRLIX, + Species.SLURPUFF, + Species.SYLVEON, + Species.DIANCIE, + Species.COMFEY, + Species.MAGEARNA, + Species.ALOLA_VULPIX, + Species.ALOLA_NINETALES, + Species.HISUI_LILLIGANT, + Species.ETERNAL_FLOETTE, + ], [Moves.RETURN]: [ Species.BULBASAUR, Species.IVYSAUR, @@ -30111,6 +30436,118 @@ export const tmSpecies: TmSpecies = { Species.HISUI_BRAVIARY, Species.BLOODMOON_URSALUNA, ], + [Moves.SYNTHESIS]: [ + Species.BULBASAUR, + Species.IVYSAUR, + Species.VENUSAUR, + Species.ODDISH, + Species.GLOOM, + Species.VILEPLUME, + Species.PARAS, + Species.PARASECT, + Species.BELLSPROUT, + Species.WEEPINBELL, + Species.VICTREEBEL, + Species.EXEGGCUTE, + Species.EXEGGUTOR, + Species.TANGELA, + Species.MEW, + Species.CHIKORITA, + Species.BAYLEEF, + Species.MEGANIUM, + Species.BELLOSSOM, + Species.HOPPIP, + Species.SKIPLOOM, + Species.JUMPLUFF, + Species.SUNKERN, + Species.SUNFLORA, + Species.CELEBI, + Species.TREECKO, + Species.GROVYLE, + Species.SCEPTILE, + Species.LOTAD, + Species.LOMBRE, + Species.LUDICOLO, + Species.SEEDOT, + Species.NUZLEAF, + Species.SHIFTRY, + Species.SHROOMISH, + Species.BRELOOM, + Species.ROSELIA, + Species.CACNEA, + Species.CACTURNE, + Species.LILEEP, + Species.CRADILY, + Species.TROPIUS, + Species.TURTWIG, + Species.GROTLE, + Species.TORTERRA, + Species.BUDEW, + Species.ROSERADE, + [ + Species.WORMADAM, + "plant", + ], + Species.CHERUBI, + Species.CHERRIM, + Species.CARNIVINE, + Species.SNOVER, + Species.ABOMASNOW, + Species.TANGROWTH, + Species.LEAFEON, + Species.SHAYMIN, + Species.SNIVY, + Species.SERVINE, + Species.SERPERIOR, + Species.PANSAGE, + Species.SIMISAGE, + Species.SEWADDLE, + Species.SWADLOON, + Species.LEAVANNY, + Species.PETILIL, + Species.LILLIGANT, + Species.MARACTUS, + Species.DEERLING, + Species.SAWSBUCK, + Species.FOONGUS, + Species.AMOONGUSS, + Species.VIRIZION, + Species.CHESPIN, + Species.QUILLADIN, + Species.CHESNAUGHT, + Species.FLABEBE, + Species.FLOETTE, + Species.FLORGES, + Species.SKIDDO, + Species.GOGOAT, + Species.PUMPKABOO, + Species.GOURGEIST, + Species.ROWLET, + Species.DARTRIX, + Species.DECIDUEYE, + Species.FOMANTIS, + Species.LURANTIS, + Species.MORELULL, + Species.SHIINOTIC, + Species.BOUNSWEET, + Species.STEENEE, + Species.TSAREENA, + Species.COMFEY, + Species.DHELMISE, + Species.TAPU_BULU, + Species.KARTANA, + Species.GOSSIFLEUR, + Species.ELDEGOSS, + Species.ZARUDE, + Species.SMOLIV, + Species.DOLLIV, + Species.ARBOLIVA, + Species.BRUTE_BONNET, + Species.OGERPON, + Species.ALOLA_EXEGGUTOR, + Species.HISUI_LILLIGANT, + Species.HISUI_DECIDUEYE, + ], [Moves.HIDDEN_POWER]: [ Species.BULBASAUR, Species.IVYSAUR, @@ -38153,6 +38590,123 @@ export const tmSpecies: TmSpecies = { ], Species.HISUI_BRAVIARY, ], + [Moves.RECYCLE]: [ + Species.CLEFAIRY, + Species.CLEFABLE, + Species.JIGGLYPUFF, + Species.WIGGLYTUFF, + Species.ABRA, + Species.KADABRA, + Species.ALAKAZAM, + Species.SLOWPOKE, + Species.SLOWBRO, + Species.MAGNEMITE, + Species.MAGNETON, + Species.DROWZEE, + Species.HYPNO, + Species.VOLTORB, + Species.ELECTRODE, + Species.CHANSEY, + Species.STARYU, + Species.STARMIE, + Species.MR_MIME, + Species.JYNX, + Species.PORYGON, + Species.SNORLAX, + Species.MEWTWO, + Species.MEW, + Species.HOOTHOOT, + Species.NOCTOWL, + Species.CLEFFA, + Species.IGGLYBUFF, + Species.SLOWKING, + Species.GIRAFARIG, + Species.DELIBIRD, + Species.PORYGON2, + Species.SMOOCHUM, + Species.BLISSEY, + Species.RALTS, + Species.KIRLIA, + Species.GARDEVOIR, + Species.MEDITITE, + Species.MEDICHAM, + Species.SPOINK, + Species.GRUMPIG, + Species.SPINDA, + Species.LUNATONE, + Species.SOLROCK, + Species.BALTOY, + Species.CLAYDOL, + Species.KECLEON, + Species.CHIMECHO, + Species.JIRACHI, + Species.DEOXYS, + Species.DRIFLOON, + Species.DRIFBLIM, + Species.CHINGLING, + Species.BRONZOR, + Species.BRONZONG, + Species.MIME_JR, + Species.HAPPINY, + Species.MUNCHLAX, + Species.MAGNEZONE, + Species.PORYGON_Z, + Species.GALLADE, + Species.UXIE, + Species.MESPRIT, + Species.AZELF, + Species.CRESSELIA, + Species.ARCEUS, + Species.PANSAGE, + Species.SIMISAGE, + Species.PANSEAR, + Species.SIMISEAR, + Species.PANPOUR, + Species.SIMIPOUR, + Species.TRUBBISH, + Species.GARBODOR, + Species.GOTHITA, + Species.GOTHORITA, + Species.GOTHITELLE, + Species.KLINK, + Species.KLANG, + Species.KLINKLANG, + Species.ELGYEM, + Species.BEHEEYEM, + Species.HEATMOR, + Species.MELOETTA, + Species.GENESECT, + Species.BRAIXEN, + Species.DELPHOX, + Species.BUNNELBY, + Species.DIGGERSBY, + Species.ESPURR, + Species.MEOWSTIC, + Species.DEDENNE, + Species.KLEFKI, + Species.HOOPA, + Species.MORELULL, + Species.SHIINOTIC, + Species.SANDYGAST, + Species.PALOSSAND, + Species.PYUKUMUKU, + Species.NECROZMA, + Species.STAKATAKA, + Species.BLACEPHALON, + Species.APPLIN, + Species.FLAPPLE, + Species.APPLETUN, + Species.MR_RIME, + Species.FARIGIRAF, + Species.DIPPLIN, + Species.HYDRAPPLE, + Species.ALOLA_RAICHU, + Species.ALOLA_GRIMER, + Species.ALOLA_MUK, + Species.GALAR_MR_MIME, + Species.HISUI_VOLTORB, + Species.HISUI_ELECTRODE, + ], [Moves.REVENGE]: [ Species.RATTATA, Species.MANKEY, @@ -40075,15 +40629,21 @@ export const tmSpecies: TmSpecies = { Species.BLASTOISE, Species.VULPIX, Species.NINETALES, + Species.VILEPLUME, Species.POLIWAG, Species.POLIWHIRL, Species.POLIWRATH, Species.BELLSPROUT, Species.WEEPINBELL, Species.VICTREEBEL, + Species.TENTACRUEL, Species.SLOWPOKE, Species.SLOWBRO, + Species.SEEL, + Species.DEWGONG, Species.CLOYSTER, + Species.HORSEA, + Species.SEADRA, Species.LAPRAS, Species.EEVEE, Species.VAPOREON, @@ -40096,6 +40656,8 @@ export const tmSpecies: TmSpecies = { Species.DRAGONITE, Species.MEWTWO, Species.MEW, + Species.MEGANIUM, + Species.BELLOSSOM, Species.POLITOED, Species.SUNKERN, Species.SUNFLORA, @@ -40103,12 +40665,14 @@ export const tmSpecies: TmSpecies = { Species.UMBREON, Species.SLOWKING, Species.DELIBIRD, + Species.KINGDRA, Species.RAIKOU, Species.ENTEI, Species.SUICUNE, Species.LUGIA, Species.HO_OH, Species.CELEBI, + Species.SWAMPERT, Species.LOTAD, Species.LOMBRE, Species.LUDICOLO, @@ -40128,6 +40692,8 @@ export const tmSpecies: TmSpecies = { Species.CASTFORM, Species.SNORUNT, Species.GLALIE, + Species.LATIAS, + Species.LATIOS, Species.PIPLUP, Species.PRINPLUP, Species.EMPOLEON, @@ -41428,6 +41994,7 @@ export const tmSpecies: TmSpecies = { Species.SQUIRTLE, Species.WARTORTLE, Species.BLASTOISE, + Species.PSYDUCK, Species.GOLDUCK, Species.POLIWAG, Species.POLIWHIRL, @@ -41435,16 +42002,24 @@ export const tmSpecies: TmSpecies = { Species.TENTACOOL, Species.TENTACRUEL, Species.SLOWBRO, + Species.SEEL, + Species.DEWGONG, Species.LICKITUNG, Species.HORSEA, Species.SEADRA, Species.GOLDEEN, Species.SEAKING, Species.GYARADOS, + Species.LAPRAS, Species.VAPOREON, Species.OMANYTE, Species.OMASTAR, Species.MEW, + Species.TOTODILE, + Species.CROCONAW, + Species.FERALIGATR, + Species.CHINCHOU, + Species.LANTURN, Species.MARILL, Species.AZUMARILL, Species.POLITOED, @@ -41455,10 +42030,14 @@ export const tmSpecies: TmSpecies = { Species.LARVITAR, Species.PUPITAR, Species.TYRANITAR, + Species.MUDKIP, Species.MARSHTOMP, Species.SWAMPERT, + Species.LOTAD, Species.LOMBRE, Species.LUDICOLO, + Species.WINGULL, + Species.PELIPPER, Species.AZURILL, Species.BARBOACH, Species.WHISCASH, @@ -41469,6 +42048,7 @@ export const tmSpecies: TmSpecies = { Species.CLAMPERL, Species.RELICANTH, Species.KYOGRE, + Species.FLOATZEL, Species.SHELLOS, Species.GASTRODON, Species.HIPPOPOTAS, @@ -41484,6 +42064,8 @@ export const tmSpecies: TmSpecies = { Species.STUNFISK, Species.KELDEO, Species.BARBARACLE, + Species.SKRELP, + Species.DRAGALGE, Species.CLAUNCHER, Species.CLAWITZER, Species.GOOMY, @@ -41502,8 +42084,13 @@ export const tmSpecies: TmSpecies = { Species.CLOBBOPUS, Species.GRAPPLOCT, Species.PINCURCHIN, + Species.BASCULEGION, Species.TADBULB, + Species.BELLIBOLT, + Species.WIGLETT, + Species.WUGTRIO, Species.TATSUGIRI, + Species.CLODSIRE, Species.GALAR_SLOWBRO, Species.GALAR_SLOWKING, Species.GALAR_STUNFISK, @@ -42007,6 +42594,7 @@ export const tmSpecies: TmSpecies = { Species.SHELLDER, Species.CLOYSTER, Species.JYNX, + Species.LAPRAS, Species.ARTICUNO, Species.MEW, Species.SNEASEL, @@ -42980,6 +43568,230 @@ export const tmSpecies: TmSpecies = { Species.HISUI_SNEASEL, Species.PALDEA_WOOPER, ], + [Moves.COVET]: [ + Species.RATTATA, + Species.RATICATE, + Species.PIKACHU, + Species.RAICHU, + Species.SANDSHREW, + Species.SANDSLASH, + Species.CLEFAIRY, + Species.CLEFABLE, + Species.VULPIX, + Species.NINETALES, + Species.JIGGLYPUFF, + Species.WIGGLYTUFF, + Species.MEOWTH, + Species.PERSIAN, + Species.MANKEY, + Species.PRIMEAPE, + Species.GROWLITHE, + Species.ARCANINE, + Species.FARFETCHD, + Species.HITMONLEE, + Species.HITMONCHAN, + Species.CHANSEY, + Species.KANGASKHAN, + Species.MR_MIME, + Species.JYNX, + Species.ELECTABUZZ, + Species.MAGMAR, + Species.EEVEE, + Species.VAPOREON, + Species.JOLTEON, + Species.FLAREON, + Species.SNORLAX, + Species.MEW, + Species.CYNDAQUIL, + Species.QUILAVA, + Species.TYPHLOSION, + Species.SENTRET, + Species.FURRET, + Species.PICHU, + Species.CLEFFA, + Species.IGGLYBUFF, + Species.TOGEPI, + Species.TOGETIC, + Species.MARILL, + Species.AZUMARILL, + Species.SUDOWOODO, + Species.AIPOM, + Species.ESPEON, + Species.UMBREON, + Species.SNUBBULL, + Species.GRANBULL, + Species.SHUCKLE, + Species.TEDDIURSA, + Species.URSARING, + Species.TYROGUE, + Species.HITMONTOP, + Species.SMOOCHUM, + Species.ELEKID, + Species.MAGBY, + Species.BLISSEY, + Species.POOCHYENA, + Species.MIGHTYENA, + Species.ZIGZAGOON, + Species.LINOONE, + Species.SLAKOTH, + Species.VIGOROTH, + Species.SLAKING, + Species.AZURILL, + Species.SKITTY, + Species.DELCATTY, + Species.PLUSLE, + Species.MINUN, + Species.ILLUMISE, + Species.ROSELIA, + Species.SPOINK, + Species.GRUMPIG, + Species.SPINDA, + Species.LATIAS, + Species.CHIMCHAR, + Species.MONFERNO, + Species.INFERNAPE, + Species.PIPLUP, + Species.PRINPLUP, + Species.EMPOLEON, + Species.BIDOOF, + Species.BIBAREL, + Species.BUDEW, + Species.ROSERADE, + Species.PACHIRISU, + Species.AMBIPOM, + Species.BUNEARY, + Species.LOPUNNY, + Species.GLAMEOW, + Species.PURUGLY, + Species.BONSLY, + Species.MIME_JR, + Species.HAPPINY, + Species.MUNCHLAX, + Species.ELECTIVIRE, + Species.MAGMORTAR, + Species.LICKILICKY, + Species.TOGEKISS, + Species.LEAFEON, + Species.GLACEON, + Species.PHIONE, + Species.MANAPHY, + Species.SHAYMIN, + Species.TEPIG, + Species.PIGNITE, + Species.EMBOAR, + Species.OSHAWOTT, + Species.DEWOTT, + Species.SAMUROTT, + Species.PATRAT, + Species.WATCHOG, + Species.LILLIPUP, + Species.HERDIER, + Species.STOUTLAND, + Species.PURRLOIN, + Species.LIEPARD, + Species.PANSAGE, + Species.SIMISAGE, + Species.PANPOUR, + Species.SIMIPOUR, + Species.PANSEAR, + Species.SIMISEAR, + Species.AUDINO, + Species.COTTONEE, + Species.WHIMSICOTT, + Species.PETILIL, + Species.LILLIGANT, + Species.ZORUA, + Species.ZOROARK, + Species.MINCCINO, + Species.CINCCINO, + Species.GOTHITA, + Species.GOTHORITA, + Species.GOTHITELLE, + Species.EMOLGA, + Species.CUBCHOO, + Species.BEARTIC, + Species.KELDEO, + Species.MELOETTA, + Species.FENNEKIN, + Species.BRAIXEN, + Species.DELPHOX, + Species.FLABEBE, + Species.FLOETTE, + Species.FLORGES, + Species.PANCHAM, + Species.PANGORO, + Species.ESPURR, + Species.MEOWSTIC, + Species.SPRITZEE, + Species.AROMATISSE, + Species.SWIRLIX, + Species.SLURPUFF, + Species.SYLVEON, + Species.DEDENNE, + Species.CARBINK, + Species.KLEFKI, + Species.DIANCIE, + Species.HOOPA, + Species.ROWLET, + Species.DARTRIX, + Species.DECIDUEYE, + Species.LITTEN, + Species.TORRACAT, + Species.INCINEROAR, + Species.POPPLIO, + Species.BRIONNE, + Species.PRIMARINA, + Species.ORICORIO, + Species.CUTIEFLY, + Species.RIBOMBEE, + Species.ROCKRUFF, + Species.LYCANROC, + Species.WISHIWASHI, + Species.MAREANIE, + Species.TOXAPEX, + Species.SALANDIT, + Species.SALAZZLE, + Species.BOUNSWEET, + Species.STEENEE, + Species.TSAREENA, + Species.COMFEY, + Species.ORANGURU, + Species.TOGEDEMARU, + Species.MIMIKYU, + Species.POIPOLE, + Species.GREEDENT, + Species.PERRSERKER, + Species.SIRFETCHD, + Species.MR_RIME, + Species.URSALUNA, + Species.LECHONK, + Species.OINKOLOGNE, + Species.FIDOUGH, + Species.DACHSBUN, + Species.TINKATINK, + Species.TINKATUFF, + Species.TINKATON, + Species.ANNIHILAPE, + Species.ALOLA_RATTATA, + Species.ALOLA_RATICATE, + Species.ALOLA_RAICHU, + Species.ALOLA_SANDSHREW, + Species.ALOLA_SANDSLASH, + Species.ALOLA_VULPIX, + Species.ALOLA_NINETALES, + Species.ALOLA_MEOWTH, + Species.ALOLA_PERSIAN, + Species.GALAR_MEOWTH, + Species.GALAR_FARFETCHD, + Species.GALAR_MR_MIME, + Species.HISUI_GROWLITHE, + Species.HISUI_ARCANINE, + Species.HISUI_TYPHLOSION, + Species.HISUI_SAMUROTT, + Species.HISUI_LILLIGANT, + Species.HISUI_DECIDUEYE, + Species.ETERNAL_FLOETTE, + ], [Moves.MAGICAL_LEAF]: [ Species.BULBASAUR, Species.IVYSAUR, @@ -44010,17 +44822,25 @@ export const tmSpecies: TmSpecies = { Species.BUZZWOLE, Species.PHEROMOSA, Species.ROOKIDEE, + Species.CORVISQUIRE, + Species.CORVIKNIGHT, Species.CRAMORANT, + Species.KLEAVOR, Species.QUAXLY, + Species.QUAXWELL, + Species.QUAQUAVAL, Species.SQUAWKABILLY, Species.WATTREL, Species.KILOWATTREL, Species.FLITTLE, + Species.ESPATHRA, Species.BOMBIRDIER, Species.FLAMIGO, Species.DUDUNSPARCE, Species.ROARING_MOON, Species.FEZANDIPITI, + Species.HISUI_BRAVIARY, + Species.HISUI_DECIDUEYE, ], [Moves.GRAVITY]: [ Species.CLEFAIRY, @@ -44393,6 +45213,90 @@ export const tmSpecies: TmSpecies = { ], Species.HISUI_QWILFISH, ], + [Moves.PLUCK]: [ + Species.PIDGEY, + Species.PIDGEOTTO, + Species.PIDGEOT, + Species.RATTATA, + Species.RATICATE, + Species.SPEAROW, + Species.FEAROW, + Species.ZUBAT, + Species.GOLBAT, + Species.FARFETCHD, + Species.DODUO, + Species.DODRIO, + Species.ARTICUNO, + Species.ZAPDOS, + Species.MOLTRES, + Species.MEW, + Species.HOOTHOOT, + Species.NOCTOWL, + Species.CROBAT, + Species.NATU, + Species.XATU, + Species.MURKROW, + Species.DELIBIRD, + Species.SKARMORY, + Species.HO_OH, + Species.TAILLOW, + Species.SWELLOW, + Species.WINGULL, + Species.PELIPPER, + Species.SWABLU, + Species.ALTARIA, + Species.PIPLUP, + Species.PRINPLUP, + Species.EMPOLEON, + Species.STARLY, + Species.STARAVIA, + Species.STARAPTOR, + Species.BIDOOF, + Species.BIBAREL, + Species.HONCHKROW, + Species.CHATOT, + Species.TOGEKISS, + Species.PIDOVE, + Species.TRANQUILL, + Species.UNFEZANT, + Species.WOOBAT, + Species.SWOOBAT, + Species.SIGILYPH, + Species.ARCHEN, + Species.ARCHEOPS, + Species.DUCKLETT, + Species.SWANNA, + Species.RUFFLET, + Species.BRAVIARY, + Species.VULLABY, + Species.MANDIBUZZ, + Species.INKAY, + Species.MALAMAR, + Species.ROWLET, + Species.DARTRIX, + Species.DECIDUEYE, + Species.PIKIPEK, + Species.TRUMBEAK, + Species.TOUCANNON, + Species.ORICORIO, + Species.ROOKIDEE, + Species.CORVISQUIRE, + Species.CORVIKNIGHT, + Species.CRAMORANT, + Species.DRACOZOLT, + Species.ARCTOZOLT, + Species.WATTREL, + Species.KILOWATTREL, + Species.FLITTLE, + Species.ESPATHRA, + Species.BOMBIRDIER, + Species.VELUZA, + Species.ALOLA_RATTATA, + Species.ALOLA_RATICATE, + Species.GALAR_ZAPDOS, + Species.HISUI_BRAVIARY, + Species.HISUI_DECIDUEYE, + ], [Moves.TAILWIND]: [ Species.CHARIZARD, Species.BUTTERFREE, @@ -45929,6 +46833,62 @@ export const tmSpecies: TmSpecies = { Species.HISUI_ZOROARK, Species.BLOODMOON_URSALUNA, ], + [Moves.GASTRO_ACID]: [ + Species.EKANS, + Species.ARBOK, + Species.ODDISH, + Species.GLOOM, + Species.VILEPLUME, + Species.BELLSPROUT, + Species.WEEPINBELL, + Species.VICTREEBEL, + Species.SNORLAX, + Species.MEW, + Species.BELLOSSOM, + Species.SHUCKLE, + Species.GULPIN, + Species.SWALOT, + Species.SEVIPER, + Species.LILEEP, + Species.CRADILY, + Species.MUNCHLAX, + Species.CARNIVINE, + Species.SNIVY, + Species.SERVINE, + Species.SERPERIOR, + Species.PANSAGE, + Species.SIMISAGE, + Species.PANSEAR, + Species.SIMISEAR, + Species.PANPOUR, + Species.SIMIPOUR, + Species.PALPITOAD, + Species.SEISMITOAD, + Species.FOONGUS, + Species.AMOONGUSS, + Species.JOLTIK, + Species.GALVANTULA, + Species.EELEKTRIK, + Species.EELEKTROSS, + Species.SHELMET, + Species.ACCELGOR, + Species.HEATMOR, + Species.DIGGERSBY, + Species.SWIRLIX, + Species.SLURPUFF, + Species.MAREANIE, + Species.TOXAPEX, + Species.PYUKUMUKU, + Species.GUZZLORD, + Species.POIPOLE, + Species.NAGANADEL, + Species.CHEWTLE, + Species.DREDNAW, + Species.TAROUNTULA, + Species.SPIDOPS, + Species.ALOLA_GRIMER, + Species.ALOLA_MUK, + ], [Moves.POWER_SWAP]: [ Species.VULPIX, Species.NINETALES, @@ -46071,6 +47031,124 @@ export const tmSpecies: TmSpecies = { "female", ], ], + [Moves.WORRY_SEED]: [ + Species.BULBASAUR, + Species.IVYSAUR, + Species.VENUSAUR, + Species.ODDISH, + Species.GLOOM, + Species.VILEPLUME, + Species.PARAS, + Species.PARASECT, + Species.PSYDUCK, + Species.GOLDUCK, + Species.BELLSPROUT, + Species.WEEPINBELL, + Species.VICTREEBEL, + Species.EXEGGCUTE, + Species.EXEGGUTOR, + Species.TANGELA, + Species.MEW, + Species.CHIKORITA, + Species.BAYLEEF, + Species.MEGANIUM, + Species.BELLOSSOM, + Species.HOPPIP, + Species.SKIPLOOM, + Species.JUMPLUFF, + Species.SUNKERN, + Species.SUNFLORA, + Species.CELEBI, + Species.TREECKO, + Species.GROVYLE, + Species.SCEPTILE, + Species.SEEDOT, + Species.NUZLEAF, + Species.SHIFTRY, + Species.SHROOMISH, + Species.BRELOOM, + Species.ROSELIA, + Species.CACNEA, + Species.CACTURNE, + Species.LILEEP, + Species.CRADILY, + Species.TROPIUS, + Species.TURTWIG, + Species.GROTLE, + Species.TORTERRA, + Species.BUDEW, + Species.ROSERADE, + Species.WORMADAM, + Species.CHERUBI, + Species.CHERRIM, + Species.CARNIVINE, + Species.SNOVER, + Species.ABOMASNOW, + Species.TANGROWTH, + Species.LEAFEON, + Species.SHAYMIN, + Species.SNIVY, + Species.SERVINE, + Species.SERPERIOR, + Species.PANSAGE, + Species.SIMISAGE, + Species.MUNNA, + Species.MUSHARNA, + Species.SEWADDLE, + Species.SWADLOON, + Species.LEAVANNY, + Species.COTTONEE, + Species.WHIMSICOTT, + Species.PETILIL, + Species.LILLIGANT, + Species.MARACTUS, + Species.DEERLING, + Species.SAWSBUCK, + Species.FOONGUS, + Species.AMOONGUSS, + Species.FERROSEED, + Species.FERROTHORN, + Species.VIRIZION, + Species.CHESPIN, + Species.QUILLADIN, + Species.CHESNAUGHT, + Species.FLABEBE, + Species.FLOETTE, + Species.FLORGES, + Species.SKIDDO, + Species.GOGOAT, + Species.PHANTUMP, + Species.TREVENANT, + Species.PUMPKABOO, + Species.GOURGEIST, + Species.ROWLET, + Species.DARTRIX, + Species.DECIDUEYE, + Species.FOMANTIS, + Species.LURANTIS, + Species.MORELULL, + Species.SHIINOTIC, + Species.BOUNSWEET, + Species.STEENEE, + Species.TSAREENA, + Species.COMFEY, + Species.TAPU_BULU, + Species.NIHILEGO, + Species.GROOKEY, + Species.THWACKEY, + Species.RILLABOOM, + Species.GOSSIFLEUR, + Species.ELDEGOSS, + Species.SPRIGATITO, + Species.FLORAGATO, + Species.MEOWSCARADA, + Species.CAPSAKID, + Species.SCOVILLAIN, + Species.ALOLA_EXEGGUTOR, + Species.HISUI_LILLIGANT, + Species.HISUI_DECIDUEYE, + Species.ETERNAL_FLOETTE, + ], [Moves.TOXIC_SPIKES]: [ Species.BEEDRILL, Species.EKANS, @@ -46811,6 +47889,151 @@ export const tmSpecies: TmSpecies = { Species.HISUI_ZORUA, Species.HISUI_ZOROARK, ], + [Moves.AQUA_TAIL]: [ + Species.SQUIRTLE, + Species.WARTORTLE, + Species.BLASTOISE, + Species.EKANS, + Species.ARBOK, + Species.NIDOQUEEN, + Species.NIDOKING, + Species.PSYDUCK, + Species.GOLDUCK, + Species.SLOWPOKE, + Species.SLOWBRO, + Species.SEEL, + Species.DEWGONG, + Species.LICKITUNG, + Species.RHYHORN, + Species.RHYDON, + Species.KANGASKHAN, + Species.GOLDEEN, + Species.SEAKING, + Species.LAPRAS, + Species.VAPOREON, + Species.KABUTOPS, + Species.AERODACTYL, + Species.DRATINI, + Species.DRAGONAIR, + Species.DRAGONITE, + Species.MEWTWO, + Species.MEW, + Species.TOTODILE, + Species.CROCONAW, + Species.FERALIGATR, + Species.SENTRET, + Species.FURRET, + Species.LANTURN, + Species.MARILL, + Species.AZUMARILL, + Species.WOOPER, + Species.QUAGSIRE, + Species.SLOWKING, + Species.DUNSPARCE, + Species.GLIGAR, + Species.STEELIX, + Species.QWILFISH, + Species.MANTINE, + Species.TYRANITAR, + Species.LUGIA, + Species.MUDKIP, + Species.MARSHTOMP, + Species.SWAMPERT, + Species.AGGRON, + Species.SEVIPER, + Species.BARBOACH, + Species.WHISCASH, + Species.ARMALDO, + Species.MILOTIC, + Species.KECLEON, + Species.SPHEAL, + Species.SEALEO, + Species.WALREIN, + Species.HUNTAIL, + Species.GOREBYSS, + Species.RELICANTH, + Species.SALAMENCE, + Species.KYOGRE, + Species.RAYQUAZA, + Species.BIDOOF, + Species.BIBAREL, + Species.BUIZEL, + Species.FLOATZEL, + Species.GARCHOMP, + Species.SKORUPI, + Species.DRAPION, + Species.FINNEON, + Species.LUMINEON, + Species.LICKILICKY, + Species.RHYPERIOR, + Species.GLACEON, + Species.GLISCOR, + Species.PALKIA, + Species.GIRATINA, + Species.ARCEUS, + Species.SNIVY, + Species.SERVINE, + Species.SERPERIOR, + Species.OSHAWOTT, + Species.DEWOTT, + Species.SAMUROTT, + Species.PATRAT, + Species.WATCHOG, + Species.PANPOUR, + Species.SIMIPOUR, + Species.SCOLIPEDE, + Species.SANDILE, + Species.KROKOROK, + Species.KROOKODILE, + Species.TIRTOUGA, + Species.CARRACOSTA, + Species.ARCHEN, + Species.ARCHEOPS, + Species.MINCCINO, + Species.CINCCINO, + Species.EELEKTRIK, + Species.EELEKTROSS, + Species.AXEW, + Species.FRAXURE, + Species.HAXORUS, + Species.STUNFISK, + Species.DRUDDIGON, + Species.DEINO, + Species.ZWEILOUS, + Species.HYDREIGON, + Species.KELDEO, + Species.SKRELP, + Species.DRAGALGE, + Species.CLAUNCHER, + Species.CLAWITZER, + Species.AMAURA, + Species.AURORUS, + Species.GOODRA, + Species.POPPLIO, + Species.BRIONNE, + Species.PRIMARINA, + Species.WISHIWASHI, + Species.BRUXISH, + Species.JANGMO_O, + Species.HAKAMO_O, + Species.KOMMO_O, + Species.BASCULEGION, + Species.OVERQWIL, + Species.FINIZEN, + Species.PALAFIN, + Species.CYCLIZAR, + Species.DONDOZO, + Species.DUDUNSPARCE, + Species.FRIGIBAX, + Species.ARCTIBAX, + Species.BAXCALIBUR, + Species.ALOLA_SANDSHREW, + Species.ALOLA_SANDSLASH, + Species.ALOLA_VULPIX, + Species.ALOLA_NINETALES, + Species.HISUI_QWILFISH, + Species.HISUI_SAMUROTT, + ], [Moves.SEED_BOMB]: [ Species.BULBASAUR, Species.IVYSAUR, @@ -47728,6 +48951,8 @@ export const tmSpecies: TmSpecies = { Species.HERACROSS, Species.TYROGUE, Species.HITMONTOP, + Species.GROVYLE, + Species.SCEPTILE, Species.COMBUSKEN, Species.BLAZIKEN, Species.SHIFTRY, @@ -47737,6 +48962,7 @@ export const tmSpecies: TmSpecies = { Species.HARIYAMA, Species.MEDITITE, Species.MEDICHAM, + Species.FLYGON, Species.CHIMCHAR, Species.MONFERNO, Species.INFERNAPE, @@ -47749,6 +48975,9 @@ export const tmSpecies: TmSpecies = { Species.DEWOTT, Species.SAMUROTT, Species.MIENSHAO, + Species.COBALION, + Species.VIRIZION, + Species.KELDEO, Species.PASSIMIAN, Species.HAKAMO_O, Species.KOMMO_O, @@ -49985,6 +51214,7 @@ export const tmSpecies: TmSpecies = { Species.KADABRA, Species.ALAKAZAM, Species.DROWZEE, + Species.HYPNO, Species.EXEGGUTOR, Species.STARMIE, Species.SCYTHER, @@ -49996,6 +51226,7 @@ export const tmSpecies: TmSpecies = { Species.SNEASEL, Species.CELEBI, Species.MEDITITE, + Species.MEDICHAM, Species.SPINDA, Species.ABSOL, Species.METANG, @@ -50030,15 +51261,20 @@ export const tmSpecies: TmSpecies = { Species.HATTERENE, Species.ZACIAN, Species.SPECTRIER, + Species.KLEAVOR, Species.CERULEDGE, Species.VELUZA, Species.IRON_VALIANT, + Species.IRON_BOULDER, + Species.IRON_CROWN, Species.GALAR_RAPIDASH, Species.GALAR_ARTICUNO, [ Species.CALYREX, "shadow", ], + Species.HISUI_SAMUROTT, + Species.HISUI_DECIDUEYE, ], [Moves.ZEN_HEADBUTT]: [ Species.SQUIRTLE, @@ -51217,7 +52453,9 @@ export const tmSpecies: TmSpecies = { Species.NAGANADEL, Species.OBSTAGOON, Species.ETERNATUS, + Species.KLEAVOR, Species.SHROODLE, + Species.GRAFAIAI, Species.FEZANDIPITI, ], [Moves.GUNK_SHOT]: [ @@ -52878,6 +54116,7 @@ export const tmSpecies: TmSpecies = { Species.OBSTAGOON, Species.PERRSERKER, Species.DURALUDON, + Species.URSALUNA, Species.SNEASLER, Species.SPRIGATITO, Species.FLORAGATO, @@ -52885,10 +54124,13 @@ export const tmSpecies: TmSpecies = { Species.MASCHIFF, Species.MABOSSTIFF, Species.BOMBIRDIER, + Species.KINGAMBIT, Species.WALKING_WAKE, + Species.ARCHALUDON, Species.ALOLA_SANDSHREW, Species.ALOLA_SANDSLASH, Species.ALOLA_DIGLETT, + Species.ALOLA_DUGTRIO, Species.GALAR_MEOWTH, Species.GALAR_LINOONE, Species.HISUI_SNEASEL, @@ -53510,6 +54752,9 @@ export const tmSpecies: TmSpecies = { Species.NIDOKING, Species.VILEPLUME, Species.DUGTRIO, + Species.BELLSPROUT, + Species.WEEPINBELL, + Species.VICTREEBEL, Species.TENTACOOL, Species.TENTACRUEL, Species.GRIMER, @@ -53520,6 +54765,8 @@ export const tmSpecies: TmSpecies = { Species.KOFFING, Species.WEEZING, Species.MEW, + Species.SPINARAK, + Species.ARIADOS, Species.WOOPER, Species.QUAGSIRE, Species.QWILFISH, @@ -53534,6 +54781,8 @@ export const tmSpecies: TmSpecies = { Species.CRAWDAUNT, Species.CRADILY, Species.GASTRODON, + Species.STUNKY, + Species.SKUNTANK, Species.CROAGUNK, Species.TOXICROAK, Species.TYMPOLE, @@ -53547,6 +54796,7 @@ export const tmSpecies: TmSpecies = { Species.TORNADUS, Species.THUNDURUS, Species.LANDORUS, + Species.GRENINJA, Species.BINACLE, Species.BARBARACLE, Species.SKRELP, @@ -53570,10 +54820,17 @@ export const tmSpecies: TmSpecies = { Species.NAGANADEL, Species.TOXTRICITY, Species.ETERNATUS, + Species.SNEASLER, + Species.OVERQWIL, + Species.SHROODLE, + Species.GRAFAIAI, + Species.VAROOM, + Species.REVAVROOM, Species.GLIMMET, Species.GLIMMORA, Species.CLODSIRE, Species.IRON_MOTH, + Species.OKIDOGI, Species.MUNKIDORI, Species.PECHARUNT, Species.ALOLA_RATICATE, @@ -53584,6 +54841,9 @@ export const tmSpecies: TmSpecies = { Species.GALAR_WEEZING, Species.GALAR_SLOWKING, Species.GALAR_STUNFISK, + Species.HISUI_SNEASEL, + Species.HISUI_SLIGGOO, + Species.HISUI_GOODRA, Species.PALDEA_WOOPER, ], [Moves.HEAVY_SLAM]: [ @@ -55475,6 +56735,8 @@ export const tmSpecies: TmSpecies = { Species.SLOWBRO, Species.DROWZEE, Species.HYPNO, + Species.EXEGGCUTE, + Species.EXEGGUTOR, Species.CHANSEY, Species.MR_MIME, Species.JYNX, @@ -55514,6 +56776,7 @@ export const tmSpecies: TmSpecies = { Species.LATIAS, Species.LATIOS, Species.JIRACHI, + Species.DEOXYS, Species.DRIFLOON, Species.DRIFBLIM, Species.MISMAGIUS, @@ -55532,6 +56795,7 @@ export const tmSpecies: TmSpecies = { Species.MESPRIT, Species.AZELF, Species.CRESSELIA, + Species.MANAPHY, Species.ARCEUS, Species.VICTINI, Species.MUNNA, @@ -55553,6 +56817,7 @@ export const tmSpecies: TmSpecies = { Species.FLABEBE, Species.FLOETTE, Species.FLORGES, + Species.MEOWSTIC, Species.INKAY, Species.MALAMAR, Species.SYLVEON, @@ -55597,14 +56862,11 @@ export const tmSpecies: TmSpecies = { Species.MUNKIDORI, Species.IRON_CROWN, Species.TERAPAGOS, - [ - Species.MEOWSTIC, - "female", - ], Species.ALOLA_RAICHU, Species.ALOLA_VULPIX, Species.ETERNAL_FLOETTE, Species.ALOLA_NINETALES, + Species.ALOLA_EXEGGUTOR, Species.GALAR_PONYTA, Species.GALAR_RAPIDASH, Species.GALAR_SLOWPOKE, @@ -56115,6 +57377,208 @@ export const tmSpecies: TmSpecies = { Species.LUNALA, Species.NAGANADEL, ], + [Moves.INCINERATE]: [ + Species.CHARMANDER, + Species.CHARMELEON, + Species.CHARIZARD, + Species.NIDOQUEEN, + Species.NIDOKING, + Species.CLEFAIRY, + Species.CLEFABLE, + Species.VULPIX, + Species.NINETALES, + Species.JIGGLYPUFF, + Species.WIGGLYTUFF, + Species.GROWLITHE, + Species.ARCANINE, + Species.MACHOP, + Species.MACHOKE, + Species.MACHAMP, + Species.GEODUDE, + Species.GRAVELER, + Species.GOLEM, + Species.PONYTA, + Species.RAPIDASH, + Species.SLOWPOKE, + Species.SLOWBRO, + Species.GRIMER, + Species.MUK, + Species.CUBONE, + Species.MAROWAK, + Species.LICKITUNG, + Species.KOFFING, + Species.WEEZING, + Species.RHYHORN, + Species.RHYDON, + Species.CHANSEY, + Species.KANGASKHAN, + Species.MAGMAR, + Species.TAUROS, + Species.GYARADOS, + Species.FLAREON, + Species.AERODACTYL, + Species.SNORLAX, + Species.MOLTRES, + Species.DRATINI, + Species.DRAGONAIR, + Species.DRAGONITE, + Species.MEWTWO, + Species.MEW, + Species.CYNDAQUIL, + Species.QUILAVA, + Species.TYPHLOSION, + Species.CLEFFA, + Species.IGGLYBUFF, + Species.TOGEPI, + Species.TOGETIC, + Species.SLOWKING, + Species.DUNSPARCE, + Species.SNUBBULL, + Species.GRANBULL, + Species.SLUGMA, + Species.MAGCARGO, + Species.REMORAID, + Species.OCTILLERY, + Species.HOUNDOUR, + Species.HOUNDOOM, + Species.MAGBY, + Species.BLISSEY, + Species.ENTEI, + Species.HO_OH, + Species.TORCHIC, + Species.COMBUSKEN, + Species.BLAZIKEN, + Species.POOCHYENA, + Species.MIGHTYENA, + Species.SLAKOTH, + Species.VIGOROTH, + Species.SLAKING, + Species.WHISMUR, + Species.LOUDRED, + Species.EXPLOUD, + Species.SABLEYE, + Species.MAWILE, + Species.AGGRON, + Species.NUMEL, + Species.CAMERUPT, + Species.TORKOAL, + Species.FLYGON, + Species.ALTARIA, + Species.ZANGOOSE, + Species.SOLROCK, + Species.CASTFORM, + Species.KECLEON, + Species.ABSOL, + Species.BAGON, + Species.SHELGON, + Species.SALAMENCE, + Species.GROUDON, + Species.RAYQUAZA, + Species.CHIMCHAR, + Species.MONFERNO, + Species.INFERNAPE, + Species.CRANIDOS, + Species.RAMPARDOS, + Species.SHIELDON, + Species.BASTIODON, + Species.HONCHKROW, + Species.STUNKY, + Species.SKUNTANK, + Species.HAPPINY, + Species.GIBLE, + Species.GABITE, + Species.GARCHOMP, + Species.MUNCHLAX, + Species.LICKILICKY, + Species.RHYPERIOR, + Species.MAGMORTAR, + Species.TOGEKISS, + Species.AZELF, + Species.DIALGA, + Species.PALKIA, + Species.HEATRAN, + Species.DARKRAI, + Species.ARCEUS, + Species.VICTINI, + Species.TEPIG, + Species.PIGNITE, + Species.EMBOAR, + Species.PANSEAR, + Species.SIMISEAR, + Species.AUDINO, + Species.SANDILE, + Species.KROKOROK, + Species.KROOKODILE, + Species.DARUMAKA, + Species.DARMANITAN, + Species.SCRAGGY, + Species.SCRAFTY, + Species.ZORUA, + Species.ZOROARK, + Species.LITWICK, + Species.LAMPENT, + Species.CHANDELURE, + Species.AXEW, + Species.FRAXURE, + Species.HAXORUS, + Species.DRUDDIGON, + Species.VULLABY, + Species.MANDIBUZZ, + Species.HEATMOR, + Species.DEINO, + Species.ZWEILOUS, + Species.HYDREIGON, + Species.LARVESTA, + Species.VOLCARONA, + Species.TORNADUS, + Species.THUNDURUS, + Species.RESHIRAM, + Species.FENNEKIN, + Species.BRAIXEN, + Species.DELPHOX, + Species.FLETCHINDER, + Species.TALONFLAME, + Species.LITLEO, + Species.PYROAR, + Species.GOODRA, + Species.PUMPKABOO, + Species.GOURGEIST, + Species.VOLCANION, + Species.SALANDIT, + Species.SALAZZLE, + Species.TURTONATOR, + Species.BLACEPHALON, + Species.ROLYCOLY, + Species.CARKOL, + Species.COALOSSAL, + Species.FUECOCO, + Species.CROCALOR, + Species.SKELEDIRGE, + Species.CHARCADET, + Species.ARMAROUGE, + Species.CERULEDGE, + Species.DUDUNSPARCE, + Species.CHI_YU, + Species.ROARING_MOON, + Species.GOUGING_FIRE, + Species.ALOLA_GEODUDE, + Species.ALOLA_GRAVELER, + Species.ALOLA_GOLEM, + Species.ALOLA_GRIMER, + Species.ALOLA_MUK, + Species.ALOLA_MAROWAK, + Species.GALAR_SLOWPOKE, + Species.GALAR_SLOWBRO, + Species.GALAR_WEEZING, + Species.GALAR_SLOWKING, + Species.GALAR_DARUMAKA, + Species.GALAR_DARMANITAN, + Species.HISUI_GROWLITHE, + Species.HISUI_ARCANINE, + Species.HISUI_TYPHLOSION, + Species.HISUI_GOODRA, + Species.PALDEA_TAUROS, + ], [Moves.QUASH]: [ Species.NIDOQUEEN, Species.NIDOKING, @@ -57998,6 +59462,7 @@ export const tmSpecies: TmSpecies = { Species.TORKOAL, Species.GROUDON, Species.RHYPERIOR, + Species.MAGMORTAR, Species.HEATRAN, Species.REGIGIGAS, Species.TEPIG, @@ -58033,6 +59498,8 @@ export const tmSpecies: TmSpecies = { Species.ZIGZAGOON, Species.LINOONE, Species.BUIZEL, + Species.FLOATZEL, + Species.AMBIPOM, Species.STUNKY, Species.SKUNTANK, Species.MINCCINO, @@ -58134,12 +59601,6 @@ export const tmSpecies: TmSpecies = { Species.HISUI_LILLIGANT, Species.HISUI_BRAVIARY, ], - [Moves.RELIC_SONG]: [ - Species.MELOETTA, - ], - [Moves.SECRET_SWORD]: [ - Species.KELDEO, - ], [Moves.SNARL]: [ Species.EKANS, Species.ARBOK, @@ -60268,8 +61729,226 @@ export const tmSpecies: TmSpecies = { Species.ALOLA_MUK, Species.ALOLA_EXEGGUTOR, ], - [Moves.DRAGON_ASCENT]: [ - Species.RAYQUAZA, + [Moves.POWER_UP_PUNCH]: [ + Species.CHARMANDER, + Species.CHARMELEON, + Species.CHARIZARD, + Species.SQUIRTLE, + Species.WARTORTLE, + Species.BLASTOISE, + Species.NIDOQUEEN, + Species.NIDOKING, + Species.CLEFAIRY, + Species.CLEFABLE, + Species.JIGGLYPUFF, + Species.WIGGLYTUFF, + Species.PSYDUCK, + Species.GOLDUCK, + Species.MANKEY, + Species.PRIMEAPE, + Species.POLIWHIRL, + Species.POLIWRATH, + Species.MACHOP, + Species.MACHOKE, + Species.MACHAMP, + Species.GEODUDE, + Species.GRAVELER, + Species.GOLEM, + Species.GRIMER, + Species.MUK, + Species.GENGAR, + Species.DROWZEE, + Species.HYPNO, + Species.CUBONE, + Species.MAROWAK, + Species.HITMONLEE, + Species.HITMONCHAN, + Species.LICKITUNG, + Species.RHYDON, + Species.CHANSEY, + Species.KANGASKHAN, + Species.MR_MIME, + Species.JYNX, + Species.ELECTABUZZ, + Species.MAGMAR, + Species.SNORLAX, + Species.DRAGONITE, + Species.MEWTWO, + Species.MEW, + Species.TYPHLOSION, + Species.TOTODILE, + Species.CROCONAW, + Species.FERALIGATR, + Species.SENTRET, + Species.FURRET, + Species.LEDYBA, + Species.LEDIAN, + Species.FLAAFFY, + Species.AMPHAROS, + Species.MARILL, + Species.AZUMARILL, + Species.SUDOWOODO, + Species.POLITOED, + Species.AIPOM, + Species.WOOPER, + Species.QUAGSIRE, + Species.SLOWKING, + Species.SNUBBULL, + Species.GRANBULL, + Species.SNEASEL, + Species.TEDDIURSA, + Species.URSARING, + Species.DELIBIRD, + Species.ELEKID, + Species.MAGBY, + Species.MILTANK, + Species.BLISSEY, + Species.LARVITAR, + Species.PUPITAR, + Species.TYRANITAR, + Species.TREECKO, + Species.GROVYLE, + Species.SCEPTILE, + Species.COMBUSKEN, + Species.BLAZIKEN, + Species.MARSHTOMP, + Species.SWAMPERT, + Species.LOMBRE, + Species.LUDICOLO, + Species.NUZLEAF, + Species.SHIFTRY, + Species.BRELOOM, + Species.SLAKOTH, + Species.VIGOROTH, + Species.SLAKING, + Species.LOUDRED, + Species.EXPLOUD, + Species.MAKUHITA, + Species.HARIYAMA, + Species.SABLEYE, + Species.MAWILE, + Species.AGGRON, + Species.MEDITITE, + Species.MEDICHAM, + Species.VOLBEAT, + Species.ILLUMISE, + Species.GULPIN, + Species.SWALOT, + Species.GRUMPIG, + Species.SPINDA, + Species.FLYGON, + Species.CACNEA, + Species.CACTURNE, + Species.ZANGOOSE, + Species.KECLEON, + Species.DUSCLOPS, + Species.METANG, + Species.METAGROSS, + Species.REGIROCK, + Species.REGICE, + Species.REGISTEEL, + Species.GROUDON, + Species.JIRACHI, + Species.DEOXYS, + Species.CHIMCHAR, + Species.MONFERNO, + Species.INFERNAPE, + Species.KRICKETUNE, + Species.CRANIDOS, + Species.RAMPARDOS, + Species.BUIZEL, + Species.FLOATZEL, + Species.AMBIPOM, + Species.BUNEARY, + Species.LOPUNNY, + Species.MUNCHLAX, + Species.RIOLU, + Species.LUCARIO, + Species.CROAGUNK, + Species.TOXICROAK, + Species.WEAVILE, + Species.LICKILICKY, + Species.RHYPERIOR, + Species.ELECTIVIRE, + Species.MAGMORTAR, + Species.GALLADE, + Species.DUSKNOIR, + Species.UXIE, + Species.MESPRIT, + Species.AZELF, + Species.REGIGIGAS, + Species.DARKRAI, + Species.VICTINI, + Species.PIGNITE, + Species.EMBOAR, + Species.WATCHOG, + Species.SIMISAGE, + Species.SIMISEAR, + Species.SIMIPOUR, + Species.AUDINO, + Species.TIMBURR, + Species.GURDURR, + Species.CONKELDURR, + Species.SEISMITOAD, + Species.THROH, + Species.SAWK, + Species.KROKOROK, + Species.KROOKODILE, + Species.DARUMAKA, + Species.DARMANITAN, + Species.SCRAGGY, + Species.SCRAFTY, + Species.GOTHITELLE, + Species.REUNICLUS, + Species.EELEKTROSS, + Species.CUBCHOO, + Species.BEARTIC, + Species.MIENFOO, + Species.MIENSHAO, + Species.DRUDDIGON, + Species.GOLETT, + Species.GOLURK, + Species.PAWNIARD, + Species.BISHARP, + Species.HEATMOR, + Species.MELOETTA, + Species.CHESPIN, + Species.QUILLADIN, + Species.CHESNAUGHT, + Species.FENNEKIN, + Species.BRAIXEN, + Species.DELPHOX, + Species.FROAKIE, + Species.FROGADIER, + Species.GRENINJA, + Species.BUNNELBY, + Species.DIGGERSBY, + Species.PANCHAM, + Species.PANGORO, + Species.MEOWSTIC, + Species.BINACLE, + Species.BARBARACLE, + Species.HAWLUCHA, + Species.PHANTUMP, + Species.TREVENANT, + Species.HOOPA, + Species.CRABRAWLER, + Species.CRABOMINABLE, + Species.BUZZWOLE, + Species.ZERAORA, + Species.TOXEL, + Species.TOXTRICITY, + Species.CLOBBOPUS, + Species.GRAPPLOCT, + Species.GRIMMSNARL, + Species.URSALUNA, + Species.ANNIHILAPE, + Species.KINGAMBIT, + Species.ALOLA_GRIMER, + Species.ALOLA_MUK, + Species.ALOLA_MAROWAK, + Species.GALAR_DARUMAKA, + Species.GALAR_DARMANITAN, ], [Moves.DARKEST_LARIAT]: [ Species.POLIWRATH, @@ -60346,6 +62025,9 @@ export const tmSpecies: TmSpecies = { Species.MAMOSWINE, Species.PROBOPASS, Species.REGIGIGAS, + Species.PIGNITE, + Species.EMBOAR, + Species.ZEBSTRIKA, Species.DRILBUR, Species.EXCADRILL, Species.GURDURR, @@ -60354,6 +62036,7 @@ export const tmSpecies: TmSpecies = { Species.SAWSBUCK, Species.GOLURK, Species.BOUFFALANT, + Species.TERRAKION, Species.CHESNAUGHT, Species.DIGGERSBY, Species.GOGOAT, @@ -61016,6 +62699,7 @@ export const tmSpecies: TmSpecies = { Species.ZACIAN, Species.ETERNATUS, Species.ZARUDE, + Species.KLEAVOR, Species.TINKATINK, Species.TINKATUFF, Species.TINKATON, @@ -61032,6 +62716,33 @@ export const tmSpecies: TmSpecies = { Species.GALAR_WEEZING, Species.GALAR_YAMASK, ], + [Moves.AURORA_VEIL]: [ + Species.JYNX, + Species.ARTICUNO, + Species.MEW, + Species.DELIBIRD, + Species.SMOOCHUM, + Species.REGICE, + Species.ABOMASNOW, + Species.GLACEON, + Species.FROSLASS, + Species.VANILLITE, + Species.VANILLISH, + Species.VANILLUXE, + Species.CRYOGONAL, + Species.AMAURA, + Species.AURORUS, + Species.BERGMITE, + Species.AVALUGG, + Species.EISCUE, + Species.ARCTOVISH, + Species.IRON_BUNDLE, + Species.ALOLA_SANDSHREW, + Species.ALOLA_SANDSLASH, + Species.ALOLA_VULPIX, + Species.ALOLA_NINETALES, + Species.HISUI_AVALUGG, + ], [Moves.PSYCHIC_FANGS]: [ Species.EKANS, Species.ARBOK, @@ -61698,29 +63409,47 @@ export const tmSpecies: TmSpecies = { Species.BLOODMOON_URSALUNA, ], [Moves.BREAKING_SWIPE]: [ + Species.CHARMANDER, + Species.CHARMELEON, Species.CHARIZARD, + Species.ARBOK, Species.ONIX, Species.RHYDON, Species.DRATINI, Species.DRAGONAIR, Species.DRAGONITE, Species.MEW, + Species.TOTODILE, + Species.CROCONAW, + Species.FERALIGATR, + Species.AMPHAROS, + Species.DUNSPARCE, + Species.GLIGAR, Species.STEELIX, Species.KINGDRA, Species.TYRANITAR, + Species.TREECKO, + Species.GROVYLE, Species.SCEPTILE, Species.FLYGON, Species.ALTARIA, + Species.SEVIPER, Species.MILOTIC, Species.SALAMENCE, Species.LATIAS, Species.LATIOS, Species.RAYQUAZA, + Species.RAMPARDOS, + Species.GABITE, Species.GARCHOMP, Species.RHYPERIOR, + Species.GLISCOR, Species.DIALGA, Species.PALKIA, Species.GIRATINA, + Species.SERPERIOR, + Species.KROKOROK, + Species.KROOKODILE, Species.AXEW, Species.FRAXURE, Species.HAXORUS, @@ -61731,9 +63460,12 @@ export const tmSpecies: TmSpecies = { Species.HELIOLISK, Species.TYRANTRUM, Species.GOODRA, + Species.NOIVERN, Species.ZYGARDE, Species.SALAZZLE, Species.DRAMPA, + Species.JANGMO_O, + Species.HAKAMO_O, Species.KOMMO_O, Species.NECROZMA, Species.NAGANADEL, @@ -61744,12 +63476,18 @@ export const tmSpecies: TmSpecies = { Species.DRAGAPULT, Species.REGIDRAGO, Species.CYCLIZAR, + Species.DUDUNSPARCE, + Species.IRON_THORNS, Species.BAXCALIBUR, Species.ROARING_MOON, Species.KORAIDON, Species.WALKING_WAKE, Species.ARCHALUDON, + Species.HYDRAPPLE, + Species.GOUGING_FIRE, + Species.RAGING_BOLT, Species.ALOLA_EXEGGUTOR, + Species.HISUI_GOODRA, ], [Moves.STEEL_BEAM]: [ Species.MAGNEMITE, @@ -61968,6 +63706,7 @@ export const tmSpecies: TmSpecies = { Species.COPPERAJAH, Species.DURALUDON, Species.IRON_TREADS, + Species.ARCHALUDON, Species.ALOLA_SANDSHREW, Species.ALOLA_SANDSLASH, ], @@ -62064,10 +63803,12 @@ export const tmSpecies: TmSpecies = { Species.KABUTOPS, Species.AERODACTYL, Species.MEW, + Species.AMPHAROS, Species.SUDOWOODO, Species.STEELIX, Species.SHUCKLE, Species.CORSOLA, + Species.NOSEPASS, Species.AGGRON, Species.LUNATONE, Species.SOLROCK, @@ -62082,8 +63823,12 @@ export const tmSpecies: TmSpecies = { Species.REGISTEEL, Species.RAYQUAZA, Species.JIRACHI, + Species.DEOXYS, + Species.BASTIODON, Species.BRONZONG, Species.RHYPERIOR, + Species.PROBOPASS, + Species.ARCEUS, Species.ROGGENROLA, Species.BOLDORE, Species.GIGALITH, @@ -62101,6 +63846,7 @@ export const tmSpecies: TmSpecies = { Species.AURORUS, Species.CARBINK, Species.DIANCIE, + Species.MINIOR, Species.SOLGALEO, Species.LUNALA, Species.NIHILEGO, @@ -62132,7 +63878,9 @@ export const tmSpecies: TmSpecies = { Species.ARCHALUDON, Species.IRON_BOULDER, Species.TERAPAGOS, + Species.ALOLA_GOLEM, Species.GALAR_CORSOLA, + Species.HISUI_AVALUGG, ], [Moves.MISTY_EXPLOSION]: [ Species.CLEFAIRY, @@ -62307,6 +64055,7 @@ export const tmSpecies: TmSpecies = { Species.DRACOZOLT, Species.ARCTOZOLT, Species.REGIELEKI, + Species.RAGING_BOLT, Species.ALOLA_RAICHU, ], [Moves.TERRAIN_PULSE]: [ @@ -62335,30 +64084,63 @@ export const tmSpecies: TmSpecies = { Species.SMOLIV, Species.DOLLIV, Species.ARBOLIVA, + Species.DUDUNSPARCE, Species.ALOLA_EXEGGUTOR, Species.GALAR_STUNFISK, ], [Moves.SKITTER_SMACK]: [ + Species.EKANS, + Species.ARBOK, + Species.VENONAT, + Species.VENOMOTH, Species.PERSIAN, + Species.TENTACRUEL, Species.GASTLY, Species.HAUNTER, Species.GENGAR, + Species.SCYTHER, Species.MEW, + Species.SPINARAK, + Species.ARIADOS, + Species.YANMA, Species.DUNSPARCE, + Species.GLIGAR, + Species.SCIZOR, Species.SHUCKLE, + Species.HERACROSS, Species.OCTILLERY, + Species.SURSKIT, + Species.MASQUERAIN, Species.NINCADA, Species.NINJASK, Species.SHEDINJA, + Species.SABLEYE, + Species.VOLBEAT, + Species.ILLUMISE, + Species.CACNEA, + Species.CACTURNE, + Species.SEVIPER, Species.MILOTIC, + Species.SHUPPET, + Species.BANETTE, Species.DUSKULL, Species.DUSCLOPS, + Species.KRICKETOT, + Species.KRICKETUNE, + Species.COMBEE, + Species.VESPIQUEN, Species.SHELLOS, Species.GASTRODON, Species.SKORUPI, Species.DRAPION, + Species.YANMEGA, + Species.GLISCOR, Species.DUSKNOIR, + Species.GIRATINA, Species.LIEPARD, + Species.SEWADDLE, + Species.SWADLOON, + Species.LEAVANNY, Species.VENIPEDE, Species.WHIRLIPEDE, Species.SCOLIPEDE, @@ -62379,26 +64161,32 @@ export const tmSpecies: TmSpecies = { Species.DURANT, Species.LARVESTA, Species.VOLCARONA, + Species.VIVILLON, Species.GOOMY, Species.SLIGGOO, Species.GOODRA, + Species.KLEFKI, Species.PHANTUMP, Species.TREVENANT, Species.PUMPKABOO, Species.GOURGEIST, Species.ZYGARDE, + Species.HOOPA, Species.DECIDUEYE, Species.GRUBBIN, Species.CHARJABUG, Species.VIKAVOLT, Species.DEWPIDER, Species.ARAQUANID, + Species.FOMANTIS, + Species.LURANTIS, Species.SALANDIT, Species.SALAZZLE, Species.WIMPOD, Species.GOLISOPOD, Species.PHEROMOSA, Species.MARSHADOW, + Species.INTELEON, Species.CHEWTLE, Species.DREDNAW, Species.SILICOBRA, @@ -62408,13 +64196,29 @@ export const tmSpecies: TmSpecies = { Species.GRAPPLOCT, Species.SNOM, Species.FROSMOTH, + Species.KLEAVOR, Species.TAROUNTULA, Species.SPIDOPS, Species.NYMBLE, + Species.LOKIX, + Species.SHROODLE, + Species.GRAFAIAI, + Species.BRAMBLEGHAST, + Species.TOEDSCOOL, + Species.TOEDSCRUEL, + Species.KLAWF, + Species.RELLOR, + Species.RABSCA, Species.TINKATINK, Species.TINKATUFF, Species.TINKATON, + Species.DUDUNSPARCE, + Species.SLITHER_WING, Species.ALOLA_PERSIAN, + Species.HISUI_ZORUA, + Species.HISUI_ZOROARK, + Species.HISUI_SLIGGOO, + Species.HISUI_GOODRA, ], [Moves.BURNING_JEALOUSY]: [ Species.VULPIX, @@ -62722,11 +64526,16 @@ export const tmSpecies: TmSpecies = { Species.HITMONTOP, Species.COMBUSKEN, Species.BLAZIKEN, + Species.MAKUHITA, + Species.HARIYAMA, + Species.INFERNAPE, Species.RIOLU, Species.LUCARIO, Species.CROAGUNK, Species.TOXICROAK, Species.GALLADE, + Species.PIGNITE, + Species.EMBOAR, Species.TIMBURR, Species.GURDURR, Species.CONKELDURR, @@ -62740,9 +64549,13 @@ export const tmSpecies: TmSpecies = { Species.TERRAKION, Species.VIRIZION, Species.KELDEO, + Species.MELOETTA, + Species.CHESNAUGHT, Species.PANCHAM, Species.PANGORO, Species.HAWLUCHA, + Species.CRABRAWLER, + Species.CRABOMINABLE, Species.STUFFUL, Species.BEWEAR, Species.PASSIMIAN, @@ -62760,7 +64573,17 @@ export const tmSpecies: TmSpecies = { Species.ZAMAZENTA, Species.KUBFU, Species.URSHIFU, + Species.SNEASLER, + Species.QUAQUAVAL, + Species.PAWMO, + Species.PAWMOT, + Species.ANNIHILAPE, + Species.IRON_VALIANT, + Species.IRON_LEAVES, Species.GALAR_ZAPDOS, + Species.HISUI_SNEASEL, + Species.HISUI_LILLIGANT, + Species.HISUI_DECIDUEYE, ], [Moves.FLIP_TURN]: [ Species.SQUIRTLE, @@ -62768,6 +64591,10 @@ export const tmSpecies: TmSpecies = { Species.BLASTOISE, Species.PSYDUCK, Species.GOLDUCK, + Species.TENTACOOL, + Species.TENTACRUEL, + Species.SEEL, + Species.DEWGONG, Species.HORSEA, Species.SEADRA, Species.GOLDEEN, @@ -62777,6 +64604,11 @@ export const tmSpecies: TmSpecies = { Species.VAPOREON, Species.KABUTOPS, Species.MEW, + Species.TOTODILE, + Species.CROCONAW, + Species.FERALIGATR, + Species.CHINCHOU, + Species.LANTURN, Species.QWILFISH, Species.KINGDRA, Species.SWAMPERT, @@ -62784,6 +64616,7 @@ export const tmSpecies: TmSpecies = { Species.SHARPEDO, Species.MILOTIC, Species.LUVDISC, + Species.LATIOS, Species.PIPLUP, Species.PRINPLUP, Species.EMPOLEON, @@ -62823,24 +64656,34 @@ export const tmSpecies: TmSpecies = { Species.HISUI_SAMUROTT, ], [Moves.TRIPLE_AXEL]: [ + Species.SEEL, + Species.DEWGONG, Species.JYNX, Species.ARTICUNO, Species.MEW, + Species.BELLOSSOM, Species.SNEASEL, Species.DELIBIRD, Species.HITMONTOP, Species.KIRLIA, Species.GARDEVOIR, Species.MILOTIC, + Species.PIPLUP, + Species.PRINPLUP, + Species.EMPOLEON, + Species.AMBIPOM, Species.BUNEARY, Species.LOPUNNY, Species.WEAVILE, Species.GLACEON, Species.GALLADE, Species.FROSLASS, + Species.LEAVANNY, Species.MINCCINO, Species.CINCCINO, Species.CRYOGONAL, + Species.MIENSHAO, + Species.MELOETTA, Species.POPPLIO, Species.BRIONNE, Species.PRIMARINA, @@ -62849,10 +64692,14 @@ export const tmSpecies: TmSpecies = { Species.PHEROMOSA, Species.MR_RIME, Species.FROSMOTH, + Species.MEOWSCARADA, + Species.QUAXWELL, + Species.QUAQUAVAL, Species.ALOLA_SANDSHREW, Species.ALOLA_SANDSLASH, Species.ALOLA_NINETALES, Species.GALAR_MR_MIME, + Species.HISUI_LILLIGANT, ], [Moves.DUAL_WINGBEAT]: [ Species.CHARIZARD, @@ -62893,6 +64740,7 @@ export const tmSpecies: TmSpecies = { Species.FLYGON, Species.SWABLU, Species.ALTARIA, + Species.TROPIUS, Species.SALAMENCE, Species.LATIAS, Species.LATIOS, @@ -62937,6 +64785,9 @@ export const tmSpecies: TmSpecies = { Species.ROWLET, Species.DARTRIX, Species.DECIDUEYE, + Species.PIKIPEK, + Species.TRUMBEAK, + Species.TOUCANNON, Species.VIKAVOLT, Species.ORICORIO, Species.CUTIEFLY, @@ -62989,10 +64840,14 @@ export const tmSpecies: TmSpecies = { Species.FLAREON, Species.MOLTRES, Species.MEW, + Species.TYPHLOSION, Species.STEELIX, + Species.MAGCARGO, Species.ENTEI, Species.HO_OH, Species.BLAZIKEN, + Species.NUMEL, + Species.CAMERUPT, Species.TORKOAL, Species.TRAPINCH, Species.VIBRAVA, @@ -63000,6 +64855,10 @@ export const tmSpecies: TmSpecies = { Species.BALTOY, Species.CLAYDOL, Species.GROUDON, + Species.INFERNAPE, + Species.TORTERRA, + Species.SHIELDON, + Species.BASTIODON, Species.GIBLE, Species.GABITE, Species.GARCHOMP, @@ -63008,6 +64867,7 @@ export const tmSpecies: TmSpecies = { Species.RHYPERIOR, Species.MAGMORTAR, Species.HEATRAN, + Species.ARCEUS, Species.VICTINI, Species.DRILBUR, Species.EXCADRILL, @@ -63018,12 +64878,16 @@ export const tmSpecies: TmSpecies = { Species.GOLURK, Species.HEATMOR, Species.RESHIRAM, + Species.LANDORUS, + Species.DELPHOX, Species.DIGGERSBY, Species.ZYGARDE, + Species.DIANCIE, Species.VOLCANION, Species.INCINEROAR, Species.SANDYGAST, Species.PALOSSAND, + Species.MINIOR, Species.TURTONATOR, Species.CINDERACE, Species.CARKOL, @@ -63040,6 +64904,8 @@ export const tmSpecies: TmSpecies = { Species.ALOLA_DIGLETT, Species.ALOLA_DUGTRIO, Species.ALOLA_MAROWAK, + Species.HISUI_GROWLITHE, + Species.HISUI_ARCANINE, ], [Moves.TERA_BLAST]: [ Species.BULBASAUR, @@ -65306,6 +67172,7 @@ export const tmPoolTiers: TmPoolTiers = { [Moves.PSYBEAM]: ModifierTier.GREAT, [Moves.HYPER_BEAM]: ModifierTier.ULTRA, [Moves.LOW_KICK]: ModifierTier.COMMON, + [Moves.COUNTER]: ModifierTier.COMMON, [Moves.STRENGTH]: ModifierTier.GREAT, [Moves.SOLAR_BEAM]: ModifierTier.ULTRA, [Moves.FIRE_SPIN]: ModifierTier.COMMON, @@ -65361,6 +67228,7 @@ export const tmPoolTiers: TmPoolTiers = { [Moves.STEEL_WING]: ModifierTier.GREAT, [Moves.ATTRACT]: ModifierTier.COMMON, [Moves.SLEEP_TALK]: ModifierTier.COMMON, + [Moves.HEAL_BELL]: ModifierTier.COMMON, [Moves.RETURN]: ModifierTier.ULTRA, [Moves.FRUSTRATION]: ModifierTier.COMMON, [Moves.SAFEGUARD]: ModifierTier.COMMON, @@ -65370,6 +67238,7 @@ export const tmPoolTiers: TmPoolTiers = { [Moves.ENCORE]: ModifierTier.COMMON, [Moves.IRON_TAIL]: ModifierTier.GREAT, [Moves.METAL_CLAW]: ModifierTier.COMMON, + [Moves.SYNTHESIS]: ModifierTier.GREAT, [Moves.HIDDEN_POWER]: ModifierTier.GREAT, [Moves.RAIN_DANCE]: ModifierTier.COMMON, [Moves.SUNNY_DAY]: ModifierTier.COMMON, @@ -65393,6 +67262,7 @@ export const tmPoolTiers: TmPoolTiers = { [Moves.HELPING_HAND]: ModifierTier.COMMON, [Moves.TRICK]: ModifierTier.COMMON, [Moves.SUPERPOWER]: ModifierTier.ULTRA, + [Moves.RECYCLE]: ModifierTier.COMMON, [Moves.REVENGE]: ModifierTier.GREAT, [Moves.BRICK_BREAK]: ModifierTier.GREAT, [Moves.KNOCK_OFF]: ModifierTier.GREAT, @@ -65425,6 +67295,7 @@ export const tmPoolTiers: TmPoolTiers = { [Moves.BOUNCE]: ModifierTier.GREAT, [Moves.MUD_SHOT]: ModifierTier.GREAT, [Moves.POISON_TAIL]: ModifierTier.GREAT, + [Moves.COVET]: ModifierTier.GREAT, [Moves.MAGICAL_LEAF]: ModifierTier.GREAT, [Moves.CALM_MIND]: ModifierTier.GREAT, [Moves.LEAF_BLADE]: ModifierTier.ULTRA, @@ -65435,6 +67306,7 @@ export const tmPoolTiers: TmPoolTiers = { [Moves.GRAVITY]: ModifierTier.COMMON, [Moves.GYRO_BALL]: ModifierTier.COMMON, [Moves.BRINE]: ModifierTier.GREAT, + [Moves.PLUCK]: ModifierTier.GREAT, [Moves.TAILWIND]: ModifierTier.GREAT, [Moves.U_TURN]: ModifierTier.GREAT, [Moves.CLOSE_COMBAT]: ModifierTier.ULTRA, @@ -65442,14 +67314,17 @@ export const tmPoolTiers: TmPoolTiers = { [Moves.ASSURANCE]: ModifierTier.COMMON, [Moves.EMBARGO]: ModifierTier.COMMON, [Moves.FLING]: ModifierTier.COMMON, + [Moves.GASTRO_ACID]: ModifierTier.GREAT, [Moves.POWER_SWAP]: ModifierTier.COMMON, [Moves.GUARD_SWAP]: ModifierTier.COMMON, + [Moves.WORRY_SEED]: ModifierTier.GREAT, [Moves.TOXIC_SPIKES]: ModifierTier.GREAT, [Moves.FLARE_BLITZ]: ModifierTier.ULTRA, [Moves.AURA_SPHERE]: ModifierTier.GREAT, [Moves.ROCK_POLISH]: ModifierTier.COMMON, [Moves.POISON_JAB]: ModifierTier.GREAT, [Moves.DARK_PULSE]: ModifierTier.GREAT, + [Moves.AQUA_TAIL]: ModifierTier.GREAT, [Moves.SEED_BOMB]: ModifierTier.GREAT, [Moves.AIR_SLASH]: ModifierTier.GREAT, [Moves.X_SCISSOR]: ModifierTier.GREAT, @@ -65506,6 +67381,7 @@ export const tmPoolTiers: TmPoolTiers = { [Moves.SCALD]: ModifierTier.GREAT, [Moves.HEX]: ModifierTier.GREAT, [Moves.SKY_DROP]: ModifierTier.GREAT, + [Moves.INCINERATE]: ModifierTier.GREAT, [Moves.QUASH]: ModifierTier.COMMON, [Moves.ACROBATICS]: ModifierTier.GREAT, [Moves.RETALIATE]: ModifierTier.GREAT, @@ -65541,7 +67417,7 @@ export const tmPoolTiers: TmPoolTiers = { [Moves.ELECTRIC_TERRAIN]: ModifierTier.COMMON, [Moves.DAZZLING_GLEAM]: ModifierTier.ULTRA, [Moves.INFESTATION]: ModifierTier.COMMON, - [Moves.DRAGON_ASCENT]: ModifierTier.ULTRA, + [Moves.POWER_UP_PUNCH]: ModifierTier.GREAT, [Moves.DARKEST_LARIAT]: ModifierTier.GREAT, [Moves.HIGH_HORSEPOWER]: ModifierTier.ULTRA, [Moves.SOLAR_BLADE]: ModifierTier.GREAT, @@ -65552,6 +67428,7 @@ export const tmPoolTiers: TmPoolTiers = { [Moves.SPEED_SWAP]: ModifierTier.COMMON, [Moves.SMART_STRIKE]: ModifierTier.GREAT, [Moves.BRUTAL_SWING]: ModifierTier.GREAT, + [Moves.AURORA_VEIL]: ModifierTier.COMMON, [Moves.PSYCHIC_FANGS]: ModifierTier.GREAT, [Moves.STOMPING_TANTRUM]: ModifierTier.GREAT, [Moves.LIQUIDATION]: ModifierTier.ULTRA, diff --git a/src/data/trainer-config.ts b/src/data/trainer-config.ts index 8a25406fc5a..4f3481b27ac 100644 --- a/src/data/trainer-config.ts +++ b/src/data/trainer-config.ts @@ -1346,15 +1346,18 @@ export const trainerConfigs: TrainerConfigs = { .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.PIDGEOT], TrainerSlot.TRAINER, true, p => { p.formIndex = 1; 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") .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.PIKACHU], TrainerSlot.TRAINER, true, p => { p.formIndex = 8; p.generateAndPopulateMoveset(); + p.generateName(); })) .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.VENUSAUR, Species.CHARIZARD, Species.BLASTOISE], TrainerSlot.TRAINER, true, p => { p.formIndex = 1; 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 => { @@ -1363,6 +1366,7 @@ export const trainerConfigs: TrainerConfigs = { .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.LATIAS, Species.LATIOS], TrainerSlot.TRAINER, true, p => { p.formIndex = 1; p.generateAndPopulateMoveset(); + p.generateName(); })), [TrainerType.STEVEN]: new TrainerConfig(++t).initForChampion(signatureSpecies["STEVEN"],true).setBattleBgm("battle_hoenn_champion").setMixedBattleBgm("battle_hoenn_champion").setHasDouble("steven_wallace_double").setDoubleTrainerType(TrainerType.WALLACE).setDoubleTitle("champion_double") .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.SKARMORY], TrainerSlot.TRAINER, true, p => { @@ -1371,6 +1375,7 @@ export const trainerConfigs: TrainerConfigs = { .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.METAGROSS], TrainerSlot.TRAINER, true, p => { p.formIndex = 1; p.generateAndPopulateMoveset(); + p.generateName(); })), [TrainerType.WALLACE]: new TrainerConfig(++t).initForChampion(signatureSpecies["WALLACE"],true).setBattleBgm("battle_hoenn_champion").setMixedBattleBgm("battle_hoenn_champion").setHasDouble("wallace_steven_double").setDoubleTrainerType(TrainerType.STEVEN).setDoubleTitle("champion_double") .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.PELIPPER], TrainerSlot.TRAINER, true, p => { @@ -1388,6 +1393,7 @@ export const trainerConfigs: TrainerConfigs = { .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.GARCHOMP], TrainerSlot.TRAINER, true, p => { p.formIndex = 1; 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 => { @@ -1400,6 +1406,7 @@ export const trainerConfigs: TrainerConfigs = { .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.LAPRAS], TrainerSlot.TRAINER, true, p => { p.formIndex = 1; 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 => { @@ -1408,6 +1415,7 @@ export const trainerConfigs: TrainerConfigs = { .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.GARDEVOIR], TrainerSlot.TRAINER, true, p => { p.formIndex = 1; p.generateAndPopulateMoveset(); + p.generateName(); })), [TrainerType.HAU]: new TrainerConfig(++t).initForChampion(signatureSpecies["HAU"],true).setMixedBattleBgm("battle_alola_champion") .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.ALOLA_RAICHU], TrainerSlot.TRAINER, true, p => { @@ -1420,6 +1428,7 @@ export const trainerConfigs: TrainerConfigs = { .setPartyMemberFunc(1, getRandomPartyMemberFunc([Species.CHARIZARD], TrainerSlot.TRAINER, true, p => { p.formIndex = 3; p.generateAndPopulateMoveset(); + p.generateName(); })), [TrainerType.GEETA]: new TrainerConfig(++t).initForChampion(signatureSpecies["GEETA"],false).setMixedBattleBgm("battle_champion_geeta") .setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.GLIMMORA], TrainerSlot.TRAINER, true, p => { @@ -1494,6 +1503,7 @@ export const trainerConfigs: TrainerConfigs = { p.shiny = true; p.variant = 1; p.formIndex = 1; + p.generateName(); })) .setGenModifiersFunc(party => { const starter = party[0]; @@ -1511,6 +1521,7 @@ export const trainerConfigs: TrainerConfigs = { p.generateAndPopulateMoveset(); p.pokeball = PokeballType.ULTRA_BALL; p.formIndex = 1; + 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 => { @@ -1525,6 +1536,7 @@ export const trainerConfigs: TrainerConfigs = { p.generateAndPopulateMoveset(); p.pokeball = PokeballType.ULTRA_BALL; p.formIndex = 1; + p.generateName(); })) .setPartyMemberFunc(4, getRandomPartyMemberFunc([ Species.GASTRODON])) .setPartyMemberFunc(5, getRandomPartyMemberFunc([ Species.MEWTWO ], TrainerSlot.TRAINER, true, p => { @@ -1543,6 +1555,7 @@ export const trainerConfigs: TrainerConfigs = { p.generateAndPopulateMoveset(); p.pokeball = PokeballType.ULTRA_BALL; p.formIndex = 1; + p.generateName(); })), [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 => { @@ -1564,6 +1577,7 @@ export const trainerConfigs: TrainerConfigs = { p.generateAndPopulateMoveset(); p.pokeball = PokeballType.ULTRA_BALL; p.formIndex = 1; + p.generateName(); })) .setPartyMemberFunc(5, getRandomPartyMemberFunc([ Species.GROUDON ], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); @@ -1581,6 +1595,7 @@ export const trainerConfigs: TrainerConfigs = { p.generateAndPopulateMoveset(); p.pokeball = PokeballType.ULTRA_BALL; p.formIndex = 1; + p.generateName(); })), [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.KINGDRA, Species.LUDICOLO ], TrainerSlot.TRAINER, true, p => { @@ -1605,6 +1620,7 @@ export const trainerConfigs: TrainerConfigs = { p.generateAndPopulateMoveset(); p.pokeball = PokeballType.ULTRA_BALL; p.formIndex = 1; + p.generateName(); })) .setPartyMemberFunc(5, getRandomPartyMemberFunc([ Species.KYOGRE ], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); @@ -1620,6 +1636,7 @@ export const trainerConfigs: TrainerConfigs = { p.generateAndPopulateMoveset(); p.pokeball = PokeballType.ULTRA_BALL; p.formIndex = 1; + p.generateName(); })) .setPartyMemberFunc(5, getRandomPartyMemberFunc([ Species.WEAVILE ], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); @@ -1637,6 +1654,7 @@ export const trainerConfigs: TrainerConfigs = { p.generateAndPopulateMoveset(); p.pokeball = PokeballType.ULTRA_BALL; p.formIndex = 1; + p.generateName(); })) .setPartyMemberFunc(4, getRandomPartyMemberFunc([ Species.WEAVILE ], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); @@ -1689,6 +1707,7 @@ export const trainerConfigs: TrainerConfigs = { p.generateAndPopulateMoveset(); p.pokeball = PokeballType.ULTRA_BALL; p.formIndex = 1; + p.generateName(); })), [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 => { @@ -1704,6 +1723,7 @@ export const trainerConfigs: TrainerConfigs = { p.generateAndPopulateMoveset(); p.pokeball = PokeballType.ULTRA_BALL; p.formIndex = 1; + p.generateName(); })) .setPartyMemberFunc(5, getRandomPartyMemberFunc([ Species.YVELTAL ], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 2); diff --git a/src/data/type.ts b/src/data/type.ts index c92416afca9..cf3bc85ab48 100644 --- a/src/data/type.ts +++ b/src/data/type.ts @@ -501,6 +501,55 @@ export function getTypeDamageMultiplier(attackType: integer, defType: integer): } } +/** + * Retrieve the types resisting a given type + * @returns An array populated with Types, or an empty array if no resistances exist (Unknown or Stellar type) + */ +export function getTypeResistances(type: integer): Type[] { + switch (type) { + case Type.NORMAL: + return [Type.ROCK, Type.STEEL, Type.GHOST]; + case Type.FIGHTING: + return [Type.FLYING, Type.POISON, Type.BUG, Type.PSYCHIC, Type.FAIRY, Type.GHOST]; + case Type.FLYING: + return [Type.ROCK, Type.ELECTRIC, Type.STEEL]; + case Type.POISON: + return [Type.POISON, Type.GROUND, Type.ROCK, Type.GHOST, Type.STEEL]; + case Type.GROUND: + return [Type.BUG, Type.GRASS, Type.FLYING]; + case Type.ROCK: + return [Type.FIGHTING, Type.GROUND, Type.STEEL]; + case Type.BUG: + return [Type.FIGHTING, Type.FLYING, Type.POISON, Type.GHOST, Type.STEEL, Type.FIRE, Type.FAIRY]; + case Type.GHOST: + return [Type.DARK, Type.NORMAL]; + case Type.STEEL: + return [Type.STEEL, Type.FIRE, Type.WATER, Type.ELECTRIC]; + case Type.FIRE: + return [Type.ROCK, Type.FIRE, Type.WATER, Type.DRAGON]; + case Type.WATER: + return [Type.WATER, Type.GRASS, Type.DRAGON]; + case Type.GRASS: + return [Type.FLYING, Type.POISON, Type.BUG, Type.STEEL, Type.FIRE, Type.GRASS, Type.DRAGON]; + case Type.ELECTRIC: + return [Type.GRASS, Type.ELECTRIC, Type.DRAGON, Type.GROUND]; + case Type.PSYCHIC: + return [Type.STEEL, Type.PSYCHIC]; + case Type.ICE: + return [Type.STEEL, Type.FIRE, Type.WATER, Type.ICE]; + case Type.DRAGON: + return [Type.STEEL, Type.FAIRY]; + case Type.DARK: + return [Type.FIGHTING, Type.DARK, Type.FAIRY]; + case Type.FAIRY: + return [Type.POISON, Type.STEEL, Type.FIRE]; + case Type.UNKNOWN: + case Type.STELLAR: + default: + return []; + } +} + /** * Retrieve the color corresponding to a specific damage multiplier * @returns A color or undefined if the default color should be used diff --git a/src/data/weather.ts b/src/data/weather.ts index f671c754873..901ad08d164 100644 --- a/src/data/weather.ts +++ b/src/data/weather.ts @@ -1,4 +1,5 @@ import { Biome } from "#enums/biome"; +import { WeatherType } from "#enums/weather-type"; import { getPokemonNameWithAffix } from "../messages"; import Pokemon from "../field/pokemon"; import { Type } from "./type"; @@ -9,19 +10,7 @@ import { SuppressWeatherEffectAbAttr } from "./ability"; import { TerrainType, getTerrainName } from "./terrain"; import i18next from "i18next"; -export enum WeatherType { - NONE, - SUNNY, - RAIN, - SANDSTORM, - HAIL, - SNOW, - FOG, - HEAVY_RAIN, - HARSH_SUN, - STRONG_WINDS -} - +export { WeatherType }; export class Weather { public weatherType: WeatherType; public turnsLeft: integer; diff --git a/src/egg-hatch-phase.ts b/src/egg-hatch-phase.ts index 44b72fb3d05..3965eae74f6 100644 --- a/src/egg-hatch-phase.ts +++ b/src/egg-hatch-phase.ts @@ -11,6 +11,7 @@ import { achvs } from "./system/achv"; import PokemonInfoContainer from "./ui/pokemon-info-container"; import EggCounterContainer from "./ui/egg-counter-container"; import { EggCountChangedEvent } from "./events/egg"; +import { getPokemonNameWithAffix } from "./messages"; /** * Class that represents egg hatching @@ -342,7 +343,7 @@ export class EggHatchPhase extends Phase { this.scene.playSoundWithoutBgm("evolution_fanfare"); - this.scene.ui.showText(i18next.t("egg:hatchFromTheEgg", { pokemonName: this.pokemon.name }), null, () => { + 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(() => { diff --git a/src/enums/battler-tag-type.ts b/src/enums/battler-tag-type.ts index 5cdabfe78c2..786f67f5d33 100644 --- a/src/enums/battler-tag-type.ts +++ b/src/enums/battler-tag-type.ts @@ -13,6 +13,7 @@ export enum BattlerTagType { ENCORE = "ENCORE", HELPING_HAND = "HELPING_HAND", INGRAIN = "INGRAIN", + OCTOLOCK = "OCTOLOCK", AQUA_RING = "AQUA_RING", DROWSY = "DROWSY", TRAPPED = "TRAPPED", @@ -59,5 +60,7 @@ export enum BattlerTagType { MINIMIZED = "MINIMIZED", DESTINY_BOND = "DESTINY_BOND", CENTER_OF_ATTENTION = "CENTER_OF_ATTENTION", - ICE_FACE = "ICE_FACE" + ICE_FACE = "ICE_FACE", + RECEIVE_DOUBLE_DAMAGE = "RECEIVE_DOUBLE_DAMAGE", + ALWAYS_GET_HIT = "ALWAYS_GET_HIT" } diff --git a/src/enums/nature.ts b/src/enums/nature.ts new file mode 100644 index 00000000000..5ab8f3c850b --- /dev/null +++ b/src/enums/nature.ts @@ -0,0 +1,27 @@ +export enum Nature { + HARDY, + LONELY, + BRAVE, + ADAMANT, + NAUGHTY, + BOLD, + DOCILE, + RELAXED, + IMPISH, + LAX, + TIMID, + HASTY, + SERIOUS, + JOLLY, + NAIVE, + MODEST, + MILD, + QUIET, + BASHFUL, + RASH, + CALM, + GENTLE, + SASSY, + CAREFUL, + QUIRKY, +} diff --git a/src/enums/pokeball.ts b/src/enums/pokeball.ts new file mode 100644 index 00000000000..8d97fea464c --- /dev/null +++ b/src/enums/pokeball.ts @@ -0,0 +1,8 @@ +export enum PokeballType { + POKEBALL, + GREAT_BALL, + ULTRA_BALL, + ROGUE_BALL, + MASTER_BALL, + LUXURY_BALL, +} diff --git a/src/enums/stat.ts b/src/enums/stat.ts new file mode 100644 index 00000000000..a40319664d6 --- /dev/null +++ b/src/enums/stat.ts @@ -0,0 +1,8 @@ +export enum Stat { + HP = 0, + ATK, + DEF, + SPATK, + SPDEF, + SPD, +} diff --git a/src/enums/status-effect.ts b/src/enums/status-effect.ts new file mode 100644 index 00000000000..b79951f530a --- /dev/null +++ b/src/enums/status-effect.ts @@ -0,0 +1,10 @@ +export enum StatusEffect { + NONE, + POISON, + TOXIC, + PARALYSIS, + SLEEP, + FREEZE, + BURN, + FAINT, +} diff --git a/src/enums/weather-type.ts b/src/enums/weather-type.ts new file mode 100644 index 00000000000..fa699bb3514 --- /dev/null +++ b/src/enums/weather-type.ts @@ -0,0 +1,12 @@ +export enum WeatherType { + NONE, + SUNNY, + RAIN, + SANDSTORM, + HAIL, + SNOW, + FOG, + HEAVY_RAIN, + HARSH_SUN, + STRONG_WINDS, +} diff --git a/src/evolution-phase.ts b/src/evolution-phase.ts index c7986f6664f..28edeee1a77 100644 --- a/src/evolution-phase.ts +++ b/src/evolution-phase.ts @@ -10,6 +10,7 @@ import { cos, sin } from "./field/anims"; import { PlayerPokemon } from "./field/pokemon"; import { getTypeRgb } from "./data/type"; import i18next from "i18next"; +import { getPokemonNameWithAffix } from "./messages"; export class EvolutionPhase extends Phase { protected pokemon: PlayerPokemon; @@ -116,7 +117,7 @@ export class EvolutionPhase extends Phase { doEvolution(): void { const evolutionHandler = this.scene.ui.getHandler() as EvolutionSceneHandler; - const preName = this.pokemon.name; + const preName = getPokemonNameWithAffix(this.pokemon); this.scene.ui.showText(i18next.t("menu:evolving", { pokemonName: preName }), null, () => { this.pokemon.cry(); diff --git a/src/field/arena.ts b/src/field/arena.ts index ddb3499b3ae..8b1996c27da 100644 --- a/src/field/arena.ts +++ b/src/field/arena.ts @@ -13,7 +13,7 @@ import { BattlerIndex } from "../battle"; import { Terrain, TerrainType } from "../data/terrain"; import { PostTerrainChangeAbAttr, PostWeatherChangeAbAttr, applyPostTerrainChangeAbAttrs, applyPostWeatherChangeAbAttrs } from "../data/ability"; import Pokemon from "./pokemon"; -import * as Overrides from "../overrides"; +import Overrides from "../overrides"; import { WeatherChangedEvent, TerrainChangedEvent, TagAddedEvent, TagRemovedEvent } from "../events/arena"; import { ArenaTagType } from "#enums/arena-tag-type"; import { Biome } from "#enums/biome"; @@ -638,6 +638,12 @@ export class Arena { } } + /** Clears terrain and arena tags when entering new biome or trainer battle. */ + resetArenaEffects(): void { + this.trySetTerrain(TerrainType.NONE, false, true); + this.removeAllTags(); + } + preloadBgm(): void { this.scene.loadBgm(this.bgm); } @@ -657,7 +663,7 @@ export class Arena { case Biome.FOREST: return 4.294; case Biome.SEA: - return 1.672; + return 0.024; case Biome.SWAMP: return 4.461; case Biome.BEACH: @@ -709,7 +715,7 @@ export class Arena { case Biome.LABORATORY: return 114.862; case Biome.SLUM: - return 1.221; + return 0.000; case Biome.SNOWY_FOREST: return 3.047; } diff --git a/src/field/pokemon.ts b/src/field/pokemon.ts index 0fb74d51304..2fe1d831659 100644 --- a/src/field/pokemon.ts +++ b/src/field/pokemon.ts @@ -3,27 +3,27 @@ import BattleScene, { AnySound } from "../battle-scene"; import { Variant, VariantSet, variantColorCache } from "#app/data/variant"; import { variantData } from "#app/data/variant"; import BattleInfo, { PlayerBattleInfo, EnemyBattleInfo } from "../ui/battle-info"; -import Move, { HighCritAttr, HitsTagAttr, applyMoveAttrs, FixedDamageAttr, VariableAtkAttr, VariablePowerAttr, allMoves, MoveCategory, TypelessAttr, CritOnlyAttr, getMoveTargets, OneHitKOAttr, MultiHitAttr, VariableMoveTypeAttr, StatusMoveTypeImmunityAttr, MoveTarget, VariableDefAttr, AttackMove, ModifiedDamageAttr, VariableMoveTypeMultiplierAttr, IgnoreOpponentStatChangesAttr, SacrificialAttr, VariableMoveCategoryAttr, CounterDamageAttr, StatChangeAttr, RechargeAttr, ChargeAttr, IgnoreWeatherTypeDebuffAttr, BypassBurnDamageReductionAttr, SacrificialAttrOnHit, MoveFlags, NeutralDamageAgainstFlyingTypeMultiplierAttr } from "../data/move"; +import Move, { HighCritAttr, HitsTagAttr, applyMoveAttrs, FixedDamageAttr, VariableAtkAttr, allMoves, MoveCategory, TypelessAttr, CritOnlyAttr, getMoveTargets, OneHitKOAttr, VariableMoveTypeAttr, StatusMoveTypeImmunityAttr, VariableDefAttr, AttackMove, ModifiedDamageAttr, VariableMoveTypeMultiplierAttr, IgnoreOpponentStatChangesAttr, SacrificialAttr, VariableMoveCategoryAttr, CounterDamageAttr, StatChangeAttr, RechargeAttr, ChargeAttr, IgnoreWeatherTypeDebuffAttr, BypassBurnDamageReductionAttr, SacrificialAttrOnHit, MoveFlags, NeutralDamageAgainstFlyingTypeMultiplierAttr } from "../data/move"; import { default as PokemonSpecies, PokemonSpeciesForm, SpeciesFormKey, getFusedSpeciesName, getPokemonSpecies, getPokemonSpeciesForm, getStarterValueFriendshipCap, speciesStarters, starterPassiveAbilities } from "../data/pokemon-species"; import { Constructor } from "#app/utils"; import * as Utils from "../utils"; import { Type, TypeDamageMultiplier, getTypeDamageMultiplier, getTypeRgb } from "../data/type"; import { getLevelTotalExp } from "../data/exp"; import { Stat } from "../data/pokemon-stat"; -import { AttackTypeBoosterModifier, DamageMoneyRewardModifier, EnemyDamageBoosterModifier, EnemyDamageReducerModifier, EnemyEndureChanceModifier, EnemyFusionChanceModifier, HiddenAbilityRateBoosterModifier, PokemonBaseStatModifier, PokemonFriendshipBoosterModifier, PokemonHeldItemModifier, PokemonMultiHitModifier, PokemonNatureWeightModifier, ShinyRateBoosterModifier, SurviveDamageModifier, TempBattleStatBoosterModifier, StatBoosterModifier, TerastallizeModifier } from "../modifier/modifier"; +import { DamageMoneyRewardModifier, EnemyDamageBoosterModifier, EnemyDamageReducerModifier, EnemyEndureChanceModifier, EnemyFusionChanceModifier, HiddenAbilityRateBoosterModifier, PokemonBaseStatModifier, PokemonFriendshipBoosterModifier, PokemonHeldItemModifier, PokemonNatureWeightModifier, ShinyRateBoosterModifier, SurviveDamageModifier, TempBattleStatBoosterModifier, StatBoosterModifier, CritBoosterModifier, TerastallizeModifier } from "../modifier/modifier"; import { PokeballType } from "../data/pokeball"; import { Gender } from "../data/gender"; import { initMoveAnim, loadMoveAnimAssets } from "../data/battle-anims"; import { Status, StatusEffect, getRandomStatus } from "../data/status-effect"; import { pokemonEvolutions, pokemonPrevolutions, SpeciesFormEvolution, SpeciesEvolutionCondition, FusionSpeciesFormEvolution } from "../data/pokemon-evolutions"; import { reverseCompatibleTms, tmSpecies, tmPoolTiers } from "../data/tms"; -import { DamagePhase, FaintPhase, LearnMovePhase, MoveEffectPhase, ObtainStatusEffectPhase, StatChangePhase, SwitchSummonPhase, ToggleDoublePositionPhase } from "../phases"; +import { DamagePhase, FaintPhase, LearnMovePhase, MoveEffectPhase, ObtainStatusEffectPhase, StatChangePhase, SwitchSummonPhase, ToggleDoublePositionPhase, MoveEndPhase } from "../phases"; import { BattleStat } from "../data/battle-stat"; -import { BattlerTag, BattlerTagLapseType, EncoreTag, GroundedTag, HelpingHandTag, HighestStatBoostTag, TypeBoostTag, TypeImmuneTag, getBattlerTag } from "../data/battler-tags"; +import { BattlerTag, BattlerTagLapseType, EncoreTag, GroundedTag, HighestStatBoostTag, TypeImmuneTag, getBattlerTag, SemiInvulnerableTag, TypeBoostTag } from "../data/battler-tags"; import { WeatherType } from "../data/weather"; import { TempBattleStat } from "../data/temp-battle-stat"; -import { ArenaTagSide, WeakenMoveScreenTag, WeakenMoveTypeTag } from "../data/arena-tag"; -import { Ability, AbAttr, BattleStatMultiplierAbAttr, BlockCritAbAttr, BonusCritAbAttr, BypassBurnDamageReductionAbAttr, FieldPriorityMoveImmunityAbAttr, IgnoreOpponentStatChangesAbAttr, MoveImmunityAbAttr, MoveTypeChangeAttr, PreApplyBattlerTagAbAttr, PreDefendFullHpEndureAbAttr, ReceivedMoveDamageMultiplierAbAttr, ReduceStatusEffectDurationAbAttr, StabBoostAbAttr, StatusEffectImmunityAbAttr, TypeImmunityAbAttr, VariableMovePowerAbAttr, WeightMultiplierAbAttr, allAbilities, applyAbAttrs, applyBattleStatMultiplierAbAttrs, applyPreApplyBattlerTagAbAttrs, applyPreAttackAbAttrs, applyPreDefendAbAttrs, applyPreSetStatusAbAttrs, UnsuppressableAbilityAbAttr, SuppressFieldAbilitiesAbAttr, NoFusionAbilityAbAttr, MultCritAbAttr, IgnoreTypeImmunityAbAttr, DamageBoostAbAttr, IgnoreTypeStatusEffectImmunityAbAttr, ConditionalCritAbAttr, applyFieldBattleStatMultiplierAbAttrs, FieldMultiplyBattleStatAbAttr, AllyMoveCategoryPowerBoostAbAttr, FieldMoveTypePowerBoostAbAttr, AddSecondStrikeAbAttr, UserFieldMoveTypePowerBoostAbAttr } from "../data/ability"; +import { ArenaTagSide, WeakenMoveScreenTag } from "../data/arena-tag"; +import { Ability, AbAttr, BattleStatMultiplierAbAttr, BlockCritAbAttr, BonusCritAbAttr, BypassBurnDamageReductionAbAttr, FieldPriorityMoveImmunityAbAttr, IgnoreOpponentStatChangesAbAttr, MoveImmunityAbAttr, PreApplyBattlerTagAbAttr, PreDefendFullHpEndureAbAttr, ReceivedMoveDamageMultiplierAbAttr, ReduceStatusEffectDurationAbAttr, StabBoostAbAttr, StatusEffectImmunityAbAttr, TypeImmunityAbAttr, WeightMultiplierAbAttr, allAbilities, applyAbAttrs, applyBattleStatMultiplierAbAttrs, applyPreApplyBattlerTagAbAttrs, applyPreAttackAbAttrs, applyPreDefendAbAttrs, applyPreSetStatusAbAttrs, UnsuppressableAbilityAbAttr, SuppressFieldAbilitiesAbAttr, NoFusionAbilityAbAttr, MultCritAbAttr, IgnoreTypeImmunityAbAttr, DamageBoostAbAttr, IgnoreTypeStatusEffectImmunityAbAttr, ConditionalCritAbAttr, applyFieldBattleStatMultiplierAbAttrs, FieldMultiplyBattleStatAbAttr, AddSecondStrikeAbAttr, IgnoreOpponentEvasionAbAttr } from "../data/ability"; import PokemonData from "../system/pokemon-data"; import { BattlerIndex } from "../battle"; import { Mode } from "../ui/ui"; @@ -37,7 +37,7 @@ import { Nature, getNatureStatMultiplier } from "../data/nature"; import { SpeciesFormChange, SpeciesFormChangeActiveTrigger, SpeciesFormChangeMoveLearnedTrigger, SpeciesFormChangePostMoveTrigger, SpeciesFormChangeStatusEffectTrigger } from "../data/pokemon-forms"; import { TerrainType } from "../data/terrain"; import { TrainerSlot } from "../data/trainer-config"; -import * as Overrides from "../overrides"; +import Overrides from "../overrides"; import i18next from "i18next"; import { speciesEggMoves } from "../data/egg-moves"; import { ModifierTier } from "../modifier/modifier-tier"; @@ -50,6 +50,7 @@ import { BerryType } from "#enums/berry-type"; import { Biome } from "#enums/biome"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; +import { getPokemonNameWithAffix } from "#app/messages.js"; export enum FieldPosition { CENTER, @@ -60,6 +61,7 @@ export enum FieldPosition { export default abstract class Pokemon extends Phaser.GameObjects.Container { public id: integer; public name: string; + public nickname: string; public species: PokemonSpecies; public formIndex: integer; public abilityIndex: integer; @@ -153,6 +155,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { this.variant = 0; } this.nature = dataSource.nature || 0 as Nature; + this.nickname = dataSource.nickname; this.natureOverride = dataSource.natureOverride !== undefined ? dataSource.natureOverride : -1; this.moveset = dataSource.moveset; this.status = dataSource.status; @@ -226,6 +229,19 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { this.calculateStats(); } + + getNameToRender() { + try { + if (this.nickname) { + return decodeURIComponent(escape(atob(this.nickname))); + } + return this.name; + } catch (err) { + console.error(`Failed to decode nickname for ${this.name}`, err); + return this.name; + } + } + init(): void { this.fieldPosition = FieldPosition.CENTER; @@ -295,6 +311,11 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { return ret; } + /** + * Sets the Pokemon's name. Only called when loading a Pokemon so this function needs to be called when + * initializing hardcoded Pokemon or else it will not display the form index name properly. + * @returns n/a + */ generateName(): void { if (!this.fusionSpecies) { this.name = this.species.getName(this.formIndex); @@ -520,7 +541,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { if (!this.scene) { return []; } - return this.scene.findModifiers(m => m instanceof PokemonHeldItemModifier && (m as PokemonHeldItemModifier).pokemonId === this.id, this.isPlayer()) as PokemonHeldItemModifier[]; + return this.scene.findModifiers(m => m instanceof PokemonHeldItemModifier && m.pokemonId === this.id, this.isPlayer()) as PokemonHeldItemModifier[]; } updateScale(): void { @@ -1120,7 +1141,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } isGrounded(): boolean { - return !!this.getTag(GroundedTag) || (!this.isOfType(Type.FLYING, true, true) && !this.hasAbility(Abilities.LEVITATE) && !this.getTag(BattlerTagType.MAGNET_RISEN)); + return !!this.getTag(GroundedTag) || (!this.isOfType(Type.FLYING, true, true) && !this.hasAbility(Abilities.LEVITATE) && !this.getTag(BattlerTagType.MAGNET_RISEN) && !this.getTag(SemiInvulnerableTag)); } /** @@ -1733,6 +1754,43 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { return (this.isPlayer() ? this.scene.getPlayerField() : this.scene.getEnemyField())[this.getFieldIndex() ? 0 : 1]; } + /** + * Calculates the accuracy multiplier of the user against a target. + * + * This method considers various factors such as the user's accuracy level, the target's evasion level, + * abilities, and modifiers to compute the final accuracy multiplier. + * + * @param target {@linkcode Pokemon} - The target Pokémon against which the move is used. + * @param sourceMove {@linkcode Move} - The move being used by the user. + * @returns The calculated accuracy multiplier. + */ + getAccuracyMultiplier(target: Pokemon, sourceMove: Move): number { + const userAccuracyLevel = new Utils.IntegerHolder(this.summonData.battleStats[BattleStat.ACC]); + const targetEvasionLevel = new Utils.IntegerHolder(target.summonData.battleStats[BattleStat.EVA]); + + applyAbAttrs(IgnoreOpponentStatChangesAbAttr, target, null, userAccuracyLevel); + applyAbAttrs(IgnoreOpponentStatChangesAbAttr, this, null, targetEvasionLevel); + applyAbAttrs(IgnoreOpponentEvasionAbAttr, this, null, targetEvasionLevel); + applyMoveAttrs(IgnoreOpponentStatChangesAttr, this, target, sourceMove, targetEvasionLevel); + this.scene.applyModifiers(TempBattleStatBoosterModifier, this.isPlayer(), TempBattleStat.ACC, userAccuracyLevel); + + const accuracyMultiplier = new Utils.NumberHolder(1); + if (userAccuracyLevel.value !== targetEvasionLevel.value) { + accuracyMultiplier.value = userAccuracyLevel.value > targetEvasionLevel.value + ? (3 + Math.min(userAccuracyLevel.value - targetEvasionLevel.value, 6)) / 3 + : 3 / (3 + Math.min(targetEvasionLevel.value - userAccuracyLevel.value, 6)); + } + + applyBattleStatMultiplierAbAttrs(BattleStatMultiplierAbAttr, this, BattleStat.ACC, accuracyMultiplier, sourceMove); + + const evasionMultiplier = new Utils.NumberHolder(1); + applyBattleStatMultiplierAbAttrs(BattleStatMultiplierAbAttr, target, BattleStat.EVA, evasionMultiplier); + + accuracyMultiplier.value /= evasionMultiplier.value; + + return accuracyMultiplier.value; + } + apply(source: Pokemon, move: Move): HitResult { let result: HitResult; const damage = new Utils.NumberHolder(0); @@ -1742,9 +1800,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { applyMoveAttrs(VariableMoveCategoryAttr, source, this, move, variableCategory); const moveCategory = variableCategory.value as MoveCategory; - const typeChangeMovePowerMultiplier = new Utils.NumberHolder(1); applyMoveAttrs(VariableMoveTypeAttr, source, this, move); - applyPreAttackAbAttrs(MoveTypeChangeAttr, source, this, move, typeChangeMovePowerMultiplier); const types = this.getTypes(true, true); const cancelled = new Utils.BooleanHolder(false); @@ -1773,31 +1829,8 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { case MoveCategory.PHYSICAL: case MoveCategory.SPECIAL: const isPhysical = moveCategory === MoveCategory.PHYSICAL; - const power = new Utils.NumberHolder(move.power); + const power = move.calculateBattlePower(source, this); const sourceTeraType = source.getTeraType(); - if (sourceTeraType !== Type.UNKNOWN && sourceTeraType === move.type && power.value < 60 && move.priority <= 0 && !move.hasAttr(MultiHitAttr) && !this.scene.findModifier(m => m instanceof PokemonMultiHitModifier && m.pokemonId === source.id)) { - power.value = 60; - } - applyPreAttackAbAttrs(VariableMovePowerAbAttr, source, this, move, power); - - if (source.getAlly()?.hasAbilityWithAttr(AllyMoveCategoryPowerBoostAbAttr)) { - applyPreAttackAbAttrs(AllyMoveCategoryPowerBoostAbAttr, source, this, move, power); - } - - const fieldAuras = new Set( - this.scene.getField(true) - .map((p) => p.getAbilityAttrs(FieldMoveTypePowerBoostAbAttr) as FieldMoveTypePowerBoostAbAttr[]) - .flat(), - ); - for (const aura of fieldAuras) { - // The only relevant values are `move` and the `power` holder - aura.applyPreAttack(null, null, null, move, [power]); - } - - const alliedField: Pokemon[] = source instanceof PlayerPokemon ? this.scene.getPlayerField() : this.scene.getEnemyField(); - alliedField.forEach(p => applyPreAttackAbAttrs(UserFieldMoveTypePowerBoostAbAttr, p, this, move, power)); - - power.value *= typeChangeMovePowerMultiplier.value; if (!typeless) { applyPreDefendAbAttrs(TypeImmunityAbAttr, this, source, move, cancelled, typeMultiplier); @@ -1813,27 +1846,16 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { result = HitResult.NO_EFFECT; } else { const typeBoost = source.findTag(t => t instanceof TypeBoostTag && t.boostedType === move.type) as TypeBoostTag; - if (typeBoost) { - power.value *= typeBoost.boostValue; - if (typeBoost.oneUse) { - source.removeTag(typeBoost.tagType); - } + if (typeBoost?.oneUse) { + source.removeTag(typeBoost.tagType); } + const arenaAttackTypeMultiplier = new Utils.NumberHolder(this.scene.arena.getAttackTypeMultiplier(move.type, source.isGrounded())); applyMoveAttrs(IgnoreWeatherTypeDebuffAttr, source, this, move, arenaAttackTypeMultiplier); - if (this.scene.arena.getTerrainType() === TerrainType.GRASSY && this.isGrounded() && move.type === Type.GROUND && move.moveTarget === MoveTarget.ALL_NEAR_OTHERS) { - power.value /= 2; - } - applyMoveAttrs(VariablePowerAttr, source, this, move, power); - - this.scene.applyModifiers(PokemonMultiHitModifier, source.isPlayer(), source, new Utils.IntegerHolder(0), power); - if (!typeless) { - this.scene.arena.applyTags(WeakenMoveTypeTag, move.type, power); - this.scene.applyModifiers(AttackTypeBoosterModifier, source.isPlayer(), source, move.type, power); - } - if (source.getTag(HelpingHandTag)) { - power.value *= 1.5; + const glaiveRushModifier = new Utils.IntegerHolder(1); + if (this.getTag(BattlerTagType.RECEIVE_DOUBLE_DAMAGE)) { + glaiveRushModifier.value = 2; } let isCritical: boolean; const critOnly = new Utils.BooleanHolder(false); @@ -1845,6 +1867,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } else { const critLevel = new Utils.IntegerHolder(0); applyMoveAttrs(HighCritAttr, source, this, move, critLevel); + this.scene.applyModifiers(CritBoosterModifier, source.isPlayer(), source, critLevel); this.scene.applyModifiers(TempBattleStatBoosterModifier, source.isPlayer(), TempBattleStat.CRIT, critLevel); const bonusCrit = new Utils.BooleanHolder(false); if (applyAbAttrs(BonusCritAbAttr, source, null, bonusCrit)) { @@ -1855,6 +1878,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { if (source.getTag(BattlerTagType.CRIT_BOOST)) { critLevel.value += 2; } + console.log(`crit stage: +${critLevel.value}`); const critChance = [24, 8, 2, 1][Math.max(0, Math.min(critLevel.value, 3))]; isCritical = !source.getTag(BattlerTagType.NO_CRIT) && (critChance === 1 || !this.scene.randBattleSeedInt(critChance)); if (Overrides.NEVER_CRIT_OVERRIDE) { @@ -1892,6 +1916,9 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { stabMultiplier.value = Math.min(stabMultiplier.value + 0.5, 2.25); } + const targetCount = getMoveTargets(source, move.id).targets.length; + const targetMultiplier = targetCount > 1 ? 0.75 : 1; + applyMoveAttrs(VariableAtkAttr, source, this, move, sourceAtk); applyMoveAttrs(VariableDefAttr, source, this, move, targetDef); @@ -1904,7 +1931,19 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { applyPreAttackAbAttrs(AddSecondStrikeAbAttr, source, this, move, numTargets, new Utils.IntegerHolder(0), twoStrikeMultiplier); if (!isTypeImmune) { - damage.value = Math.ceil(((((2 * source.level / 5 + 2) * power.value * sourceAtk.value / targetDef.value) / 50) + 2) * stabMultiplier.value * typeMultiplier.value * arenaAttackTypeMultiplier.value * screenMultiplier.value * twoStrikeMultiplier.value * ((this.scene.randBattleSeedInt(15) + 85) / 100) * criticalMultiplier.value); + const levelMultiplier = (2 * source.level / 5 + 2); + const randomMultiplier = ((this.scene.randBattleSeedInt(16) + 85) / 100); + damage.value = Math.ceil((((levelMultiplier * power * sourceAtk.value / targetDef.value) / 50) + 2) + * stabMultiplier.value + * typeMultiplier.value + * arenaAttackTypeMultiplier.value + * screenMultiplier.value + * twoStrikeMultiplier.value + * targetMultiplier + * criticalMultiplier.value + * glaiveRushModifier.value + * randomMultiplier); + if (isPhysical && source.status && source.status.effect === StatusEffect.BURN) { if (!move.hasAttr(BypassBurnDamageReductionAttr)) { const burnDamageReductionCancelled = new Utils.BooleanHolder(false); @@ -1946,9 +1985,9 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { if (!typeMultiplier.value) { result = move.id === Moves.SHEER_COLD ? HitResult.IMMUNE : HitResult.NO_EFFECT; } else { - const oneHitKo = new Utils.BooleanHolder(false); - applyMoveAttrs(OneHitKOAttr, source, this, move, oneHitKo); - if (oneHitKo.value) { + const isOneHitKo = new Utils.BooleanHolder(false); + applyMoveAttrs(OneHitKOAttr, source, this, move, isOneHitKo); + if (isOneHitKo.value) { result = HitResult.ONE_HIT_KO; isCritical = false; damage.value = this.hp; @@ -1962,24 +2001,27 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } } - if (!fixedDamage.value) { + const isOneHitKo = result === HitResult.ONE_HIT_KO; + + if (!fixedDamage.value && !isOneHitKo) { if (!source.isPlayer()) { this.scene.applyModifiers(EnemyDamageBoosterModifier, false, damage); } if (!this.isPlayer()) { this.scene.applyModifiers(EnemyDamageReducerModifier, false, damage); } + + applyPreDefendAbAttrs(ReceivedMoveDamageMultiplierAbAttr, this, source, move, cancelled, damage); } + // This attribute may modify damage arbitrarily, so be careful about changing its order of application. applyMoveAttrs(ModifiedDamageAttr, source, this, move, damage); - applyPreDefendAbAttrs(ReceivedMoveDamageMultiplierAbAttr, this, source, move, cancelled, damage); - console.log("damage", damage.value, move.name, power.value, sourceAtk, targetDef); + console.log("damage", damage.value, move.name, power, sourceAtk, targetDef); // In case of fatal damage, this tag would have gotten cleared before we could lapse it. const destinyTag = this.getTag(BattlerTagType.DESTINY_BOND); - const oneHitKo = result === HitResult.ONE_HIT_KO; if (damage.value) { if (this.getHpRatio() === 1) { applyPreDefendAbAttrs(PreDefendFullHpEndureAbAttr, this, source, move, cancelled, damage); @@ -1988,10 +2030,10 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } /** - * We explicitly require to ignore the faint phase here, as we want to show the messages - * about the critical hit and the super effective/not very effective messages before the faint phase. - */ - damage.value = this.damageAndUpdate(damage.value, result as DamageResult, isCritical, oneHitKo, oneHitKo, true); + * We explicitly require to ignore the faint phase here, as we want to show the messages + * about the critical hit and the super effective/not very effective messages before the faint phase. + */ + damage.value = this.damageAndUpdate(damage.value, result as DamageResult, isCritical, isOneHitKo, isOneHitKo, true); this.turnData.damageTaken += damage.value; if (isCritical) { this.scene.queueMessage(i18next.t("battle:hitResultCriticalHit")); @@ -2021,7 +2063,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { this.scene.queueMessage(i18next.t("battle:hitResultNotVeryEffective")); break; case HitResult.NO_EFFECT: - this.scene.queueMessage(i18next.t("battle:hitResultNoEffect", { pokemonName: this.name })); + this.scene.queueMessage(i18next.t("battle:hitResultNoEffect", { pokemonName: getPokemonNameWithAffix(this) })); break; case HitResult.IMMUNE: this.scene.queueMessage(`${this.name} is unaffected!`); @@ -2033,7 +2075,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } if (this.isFainted()) { - this.scene.unshiftPhase(new FaintPhase(this.scene, this.getBattlerIndex(), oneHitKo)); + this.scene.unshiftPhase(new FaintPhase(this.scene, this.getBattlerIndex(), isOneHitKo)); this.resetSummonData(); } @@ -2054,7 +2096,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { defendingSidePlayField.forEach((p) => applyPreDefendAbAttrs(FieldPriorityMoveImmunityAbAttr, p, source, move, cancelled, typeMultiplier)); } if (!typeMultiplier.value) { - this.scene.queueMessage(i18next.t("battle:hitResultNoEffect", { pokemonName: this.name })); + this.scene.queueMessage(i18next.t("battle:hitResultNoEffect", { pokemonName: getPokemonNameWithAffix(this) })); } result = cancelled.value || !typeMultiplier.value ? HitResult.NO_EFFECT : HitResult.STATUS; break; @@ -2184,7 +2226,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { lapseTags(lapseType: BattlerTagLapseType): void { const tags = this.summonData.tags; - tags.filter(t => lapseType === BattlerTagLapseType.FAINT || ((t.lapseType === lapseType) && !(t.lapse(this, lapseType))) || (lapseType === BattlerTagLapseType.TURN_END && t.turnCount < 1)).forEach(t => { + tags.filter(t => lapseType === BattlerTagLapseType.FAINT || ((t.lapseType.some(lType => lType === lapseType)) && !(t.lapse(this, lapseType)))).forEach(t => { t.onRemove(this); tags.splice(tags.indexOf(t), 1); }); @@ -3103,7 +3145,7 @@ export class PlayerPokemon extends Pokemon { 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.unshiftPhase(new SwitchSummonPhase(this.scene, this.getFieldIndex(), slotIndex, false, batonPass)); + this.scene.prependToPhase(new SwitchSummonPhase(this.scene, this.getFieldIndex(), slotIndex, false, batonPass), MoveEndPhase); } if (removeFromField) { this.setVisible(false); @@ -3279,7 +3321,7 @@ export class PlayerPokemon extends Pokemon { this.scene.getParty().push(newPokemon); newPokemon.evolve(!isFusion ? newEvolution : new FusionSpeciesFormEvolution(this.id, newEvolution)); const modifiers = this.scene.findModifiers(m => m instanceof PokemonHeldItemModifier - && (m as PokemonHeldItemModifier).pokemonId === this.id, true) as PokemonHeldItemModifier[]; + && m.pokemonId === this.id, true) as PokemonHeldItemModifier[]; modifiers.forEach(m => { const clonedModifier = m.clone() as PokemonHeldItemModifier; clonedModifier.pokemonId = newPokemon.id; @@ -3372,7 +3414,7 @@ export class PlayerPokemon extends Pokemon { partyMemberIndex--; } const fusedPartyMemberHeldModifiers = this.scene.findModifiers(m => m instanceof PokemonHeldItemModifier - && (m as PokemonHeldItemModifier).pokemonId === pokemon.id, true) as 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)); diff --git a/src/form-change-phase.ts b/src/form-change-phase.ts index ebf91c635fd..55bf655081b 100644 --- a/src/form-change-phase.ts +++ b/src/form-change-phase.ts @@ -10,6 +10,7 @@ import PartyUiHandler from "./ui/party-ui-handler"; import { BattleSpec } from "#enums/battle-spec"; import { BattlePhase, MovePhase, PokemonHealPhase } from "./phases"; import { getTypeRgb } from "./data/type"; +import { getPokemonNameWithAffix } from "./messages"; export class FormChangePhase extends EvolutionPhase { private formChange: SpeciesFormChange; @@ -34,7 +35,7 @@ export class FormChangePhase extends EvolutionPhase { } doEvolution(): void { - const preName = this.pokemon.name; + const preName = getPokemonNameWithAffix(this.pokemon); this.pokemon.getPossibleForm(this.formChange).then(transformedPokemon => { @@ -191,7 +192,7 @@ export class QuietFormChangePhase extends BattlePhase { return this.end(); } - const preName = this.pokemon.name; + const preName = getPokemonNameWithAffix(this.pokemon); if (!this.pokemon.isOnField()) { this.pokemon.changeForm(this.formChange).then(() => { diff --git a/src/game-mode.ts b/src/game-mode.ts index dd22e69d719..34e09fb762c 100644 --- a/src/game-mode.ts +++ b/src/game-mode.ts @@ -4,7 +4,7 @@ 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 * as Overrides from "./overrides"; +import Overrides from "./overrides"; import * as Utils from "./utils"; import { Biome } from "#enums/biome"; import { Species } from "#enums/species"; diff --git a/src/loading-scene.ts b/src/loading-scene.ts index 15cd295d23c..a422adda61d 100644 --- a/src/loading-scene.ts +++ b/src/loading-scene.ts @@ -39,7 +39,7 @@ export class LoadingScene extends SceneBase { this.loadImage("loading_bg", "arenas"); this.loadImage("logo", ""); - this.loadImage("pride-update", "events"); + // this.loadImage("pride-update", "events"); // Load menu images this.loadAtlas("bg", "ui"); @@ -91,6 +91,7 @@ export class LoadingScene extends SceneBase { this.loadImage("shiny_star_small", "ui", "shiny_small.png"); this.loadImage("shiny_star_small_1", "ui", "shiny_small_1.png"); this.loadImage("shiny_star_small_2", "ui", "shiny_small_2.png"); + this.loadImage("passive_bg", "ui", "passive_bg.png"); this.loadAtlas("shiny_icons", "ui"); this.loadImage("ha_capsule", "ui", "ha_capsule.png"); this.loadImage("champion_ribbon", "ui", "champion_ribbon.png"); @@ -154,6 +155,8 @@ export class LoadingScene extends SceneBase { this.loadImage("select_gen_cursor_highlight", "ui"); this.loadImage("saving_icon", "ui"); + this.loadImage("discord", "ui"); + this.loadImage("google", "ui"); this.loadImage("default_bg", "arenas"); // Load arena images diff --git a/src/locales/de/ability-trigger.ts b/src/locales/de/ability-trigger.ts index 4e69db20231..68930fbee21 100644 --- a/src/locales/de/ability-trigger.ts +++ b/src/locales/de/ability-trigger.ts @@ -5,7 +5,58 @@ export const abilityTriggers: SimpleTranslationEntries = { "badDreams": "{{pokemonName}} ist in einem Alptraum gefangen!", "costar": "{{pokemonName}} kopiert die Statusveränderungen von {{allyName}}!", "iceFaceAvoidedDamage": "{{pokemonName}} wehrt Schaden mit {{abilityName}} ab!", + "perishBody": "Durch {{abilityName}} von {{pokemonName}} werden beide Pokémon nach drei Runden K.O. gehen!", + "poisonHeal": "{{abilityName}} von {{pokemonName}} füllte einige KP auf!", "trace": "{{pokemonName}} kopiert {{abilityName}} von {{targetName}}!", "windPowerCharged": "Der Treffer durch {{moveName}} läd die Stärke von {{pokemonName}} auf!", "quickDraw": "Durch Schnellschuss kann {{pokemonName}} schneller handeln als sonst!", + "blockItemTheft": "{{abilityName}} von {{pokemonNameWithAffix}} verhindert Item-Diebstahl!", + "typeImmunityHeal": "{{abilityName}} von {{pokemonNameWithAffix}} füllte einige KP auf!", + "nonSuperEffectiveImmunity": "{{pokemonNameWithAffix}} vermeidet Schaden mit {{abilityName}}!", + "postDefendDisguise": "Die Tarnung von {{pokemonNameWithAffix}} ist aufgeflogen!!", + "moveImmunity": "Es hat keine Wirkung auf {{pokemonNameWithAffix}}...", + "reverseDrain": "{{pokemonNameWithAffix}} saugt Kloakensoße auf!", + "postDefendTypeChange": "{{abilityName}} von {{pokemonNameWithAffix}} macht es zu einem {{typeName}}-Typ!", + "postDefendContactDamage": "{{abilityName}} von {{pokemonNameWithAffix}} schadet seinem Angreifer!", + "postDefendAbilitySwap": "{{pokemonNameWithAffix}} tauscht Fähigkeiten mit dem Ziel!", + "postDefendAbilityGive": "{{pokemonNameWithAffix}} gibt seinem Ziel {{abilityName}}!", + "postDefendMoveDisable": "{{moveName}} von {{pokemonNameWithAffix}} wurde blockiert!", + "pokemonTypeChange": "{{pokemonNameWithAffix}} nimmt den Typ {{moveType}} an!", + "postAttackStealHeldItem": "{{pokemonNameWithAffix}} stiehlt {{stolenItemType}} von {{defenderName}}!", + "postDefendStealHeldItem": "{{pokemonNameWithAffix}} stiehlt {{stolenItemType}} von {{attackerName}}!", + "copyFaintedAllyAbility": "Die Fähigkeit {{abilityName}} von {{pokemonNameWithAffix}} wurde übernommen!", + "intimidateImmunity": "{{abilityName}} von {{pokemonNameWithAffix}} verhindert den Effekt von Bedroher!", + "postSummonAllyHeal": "{{pokemonNameWithAffix}} trinkt den von {{pokemonName}} zubereiteten Tee!", + "postSummonClearAllyStats": "Die Statusveränderungen von {{pokemonNameWithAffix}} wurden aufgehoben!", + "postSummonTransform": "{{pokemonNameWithAffix}} verwandelt sich in {{targetName}}!", + "protectStat": "{{abilityName}} von {{pokemonNameWithAffix}} verhindert das der Statuswert {{statName}} gesenkt wird!", + "statusEffectImmunityWithName": "{{abilityName}} von {{pokemonNameWithAffix}} verhindert {{statusEffectName}}!", + "statusEffectImmunity": "{{abilityName}} von {{pokemonNameWithAffix}} verhindert Statusprobleme", + "battlerTagImmunity": "{{abilityName}} von {{pokemonNameWithAffix}} verhindert {{battlerTagName}}!", + "forewarn": "Vorwarnung von {{pokemonNameWithAffix}}: Konzentraion auf {{moveName}}!", + "frisk": "{{pokemonNameWithAffix}} hat die Fähigkeit {{opponentAbilityName}} von {{opponentName}} erschnüffelt!", + "postWeatherLapseHeal": "{{abilityName}} von {{pokemonName}} füllte einige KP auf!", + "postWeatherLapseDamage": "{{pokemonNameWithAffix}} wurde durch {{abilityName}} verletzt!", + "postTurnLootCreateEatenBerry": "{{pokemonNameWithAffix}} hat {{berryName}} geerntet!", + "postTurnHeal": "{{abilityName}} von {{pokemonName}} füllte einige KP auf!", + "fetchBall": "{{pokemonNameWithAffix}} hat einen {{pokeballName}} gefunden!", + "healFromBerryUse": "{{abilityName}} von {{pokemonName}} füllte einige KP auf!", + "arenaTrap": "{{abilityName}} von {{pokemonNameWithAffix}} verhindert den Tausch!", + "postBattleLoot": "{{pokemonNameWithAffix}} hebt {{itemName}} auf!", + "postFaintContactDamage": "{{abilityName}} von {{pokemonNameWithAffix}} schadet seinem Angreifer!", + "postFaintHpDamage": "{{abilityName}} von {{pokemonNameWithAffix}} schadet seinem Angreifer!", + "postSummonPressure": "{{pokemonNameWithAffix}} setzt Gegner mit Erzwinger unter Druck!", + "postSummonMoldBreaker": "{{pokemonNameWithAffix}} gelingt es, gegnerische Fähigkeiten zu überbrücken!", + "postSummonAnticipation": "{{pokemonNameWithAffix}} erschaudert!", + "postSummonTurboblaze": "{{pokemonNameWithAffix}} strahlt eine lodernde Aura aus!", + "postSummonTeravolt": "{{pokemonNameWithAffix}} strahlt eine knisternde Aura aus!", + "postSummonDarkAura": "{{pokemonNameWithAffix}} strahlt eine dunkle Aura aus!", + "postSummonFairyAura": "{{pokemonNameWithAffix}} strahlt eine Feenaura aus!", + "postSummonNeutralizingGas": "Reaktionsgas von {{pokemonNameWithAffix}} hat sich in der Umgebung ausgebreitet!", + "postSummonAsOneGlastrier": "{{pokemonNameWithAffix}} verfügt über zwei Fähigkeiten!", + "postSummonAsOneSpectrier": "{{pokemonNameWithAffix}} verfügt über zwei Fähigkeiten!", + "postSummonVesselOfRuin": "Unheilsgefäß von {{pokemonNameWithAffix}} schwächt {{statName}} aller Pokémon im Umkreis!", + "postSummonSwordOfRuin": "Unheilsschwert von {{pokemonNameWithAffix}} schwächt {{statName} aller Pokémon im Umkreis!", + "postSummonTabletsOfRuin": "Unheilstafeln von {{pokemonNameWithAffix}} schwächt {{statName}} aller Pokémon im Umkreis!", + "postSummonBeadsOfRuin": "Unheilsjuwelen von {{pokemonNameWithAffix}} schwächt {{statName}} aller Pokémon im Umkreis!", } as const; diff --git a/src/locales/de/arena-flyout.ts b/src/locales/de/arena-flyout.ts new file mode 100644 index 00000000000..c353b432bc0 --- /dev/null +++ b/src/locales/de/arena-flyout.ts @@ -0,0 +1,49 @@ +import { SimpleTranslationEntries } from "#app/interfaces/locales"; + +export const arenaFlyout: SimpleTranslationEntries = { + // Title + "activeBattleEffects": "Aktive Kampfeffekte", + "player": "Spieler", + "neutral": "Neutral", + "enemy": "Gegner", + + // WeatherType + "sunny": "Sonne", + "rain": "Regen", + "sandstorm": "Sandsturm", + "hail": "Hagelsturm", + "snow": "Schneesturm", + "fog": "Nebel", + "heavyRain": "Strömender Regen", + "harshSun": "Sehr starker Sonnenschein", + "strongWinds": "Luftströmungen", + + // TerrainType + "misty": "Nebelfeld", + "electric": "Elektrofeld", + "grassy": "Grasfeld", + "psychic": "Psychofeld", + + // ArenaTagType + "mudSport": "Lehmsuhler", + "waterSport": "Nassmacher", + "spikes": "Stachler", + "toxicSpikes": "Giftspitzen", + "mist": "Weißnebel", + "futureSight": "Seher", + "doomDesire": "Kismetwunsch", + "wish": "Wunschtraum", + "stealthRock": "Tarnsteine", + "stickyWeb": "Klebenetz", + "trickRoom": "Bizarroraum", + "gravity": "Erdanziehung", + "reflect": "Reflektor", + "lightScreen": "Lichtschild", + "auroraVeil": "Auroraschleier", + "quickGuard": "Rapidschutz", + "wideGuard": "Rundumschutz", + "matBlock": "Tatami-Schild", + "craftyShield": "Trickschutz", + "tailwind": "Rückenwind", + "happyHour": "Goldene Zeiten", +}; diff --git a/src/locales/de/battle-info.ts b/src/locales/de/battle-info.ts new file mode 100644 index 00000000000..f24dad46c6c --- /dev/null +++ b/src/locales/de/battle-info.ts @@ -0,0 +1,5 @@ +import { SimpleTranslationEntries } from "#app/interfaces/locales"; + +export const battleInfo: SimpleTranslationEntries = { + "generation": "Generation {{generation}}", +} as const; diff --git a/src/locales/de/battle.ts b/src/locales/de/battle.ts index 06b9ec719ba..74ddede5c89 100644 --- a/src/locales/de/battle.ts +++ b/src/locales/de/battle.ts @@ -2,22 +2,22 @@ import { SimpleTranslationEntries } from "#app/interfaces/locales"; export const battle: SimpleTranslationEntries = { "bossAppeared": "{{bossName}} erscheint.", - "trainerAppeared": "{{trainerName}}\nmöchte kämpfen!", - "trainerAppearedDouble": "{{trainerName}}\nmöchten kämpfen!", - "trainerSendOut": "{{trainerName}} setzt\n{{pokemonName}} ein!", + "trainerAppeared": "{{trainerName}} möchte kämpfen!", + "trainerAppearedDouble": "{{trainerName}} möchten kämpfen!", + "trainerSendOut": "{{trainerName}} setzt {{pokemonName}} ein!", "singleWildAppeared": "Ein wildes {{pokemonName}} erscheint!", - "multiWildAppeared": "Ein wildes {{pokemonName1}}\nund {{pokemonName2}} erscheinen!", + "multiWildAppeared": "Ein wildes {{pokemonName1}} und {{pokemonName2}} erscheinen!", "playerComeBack": "Komm zurück, {{pokemonName}}!", "trainerComeBack": "{{trainerName}} ruft {{pokemonName}} zurück!", "playerGo": "Los! {{pokemonName}}!", "trainerGo": "{{trainerName}} sendet {{pokemonName}} raus!", - "switchQuestion": "Möchtest du\n{{pokemonName}} auswechseln?", - "trainerDefeated": "{{trainerName}}\nwurde besiegt!", - "moneyWon": "Du gewinnst\n{{moneyAmount}} ₽!", + "switchQuestion": "Möchtest du {{pokemonName}} auswechseln?", + "trainerDefeated": "{{trainerName}} wurde besiegt!", + "moneyWon": "Du gewinnst {{moneyAmount}} ₽!", "moneyPickedUp": "Du hebst {{moneyAmount}} ₽ auf!", "pokemonCaught": "{{pokemonName}} wurde gefangen!", "addedAsAStarter": "{{pokemonName}} wurde als Starterpokémon hinzugefügt!", - "partyFull": "Dein Team ist voll.\nMöchtest du ein Pokémon durch {{pokemonName}} ersetzen?", + "partyFull": "Dein Team ist voll. Möchtest du ein Pokémon durch {{pokemonName}} ersetzen?", "pokemon": "Pokémon", "sendOutPokemon": "Los, {{pokemonName}}!", "hitResultCriticalHit": "Ein Volltreffer!", @@ -28,36 +28,36 @@ export const battle: SimpleTranslationEntries = { "attackFailed": "Es ist fehlgeschlagen!", "attackMissed": "Die Attacke hat {{pokemonNameWithAffix}} verfehlt!", "attackHitsCount": "{{count}}-mal getroffen!", - "rewardGain": "Du erhältst\n{{modifierName}}!", - "expGain": "{{pokemonName}} erhält\n{{exp}} Erfahrungspunkte!", - "levelUp": "{{pokemonName}} erreicht\nLv. {{level}}!", - "learnMove": "{{pokemonName}} erlernt\n{{moveName}}!", + "rewardGain": "Du erhältst {{modifierName}}!", + "expGain": "{{pokemonName}} erhält {{exp}} Erfahrungspunkte!", + "levelUp": "{{pokemonName}} erreicht Lv. {{level}}!", + "learnMove": "{{pokemonName}} erlernt {{moveName}}!", "learnMovePrompt": "{{pokemonName}} versucht, {{moveName}} zu erlernen.", - "learnMoveLimitReached": "Aber {{pokemonName}} kann nur\nmaximal vier Attacken erlernen.", - "learnMoveReplaceQuestion": "Soll eine bekannte Attacke durch\n{{moveName}} ersetzt werden?", - "learnMoveStopTeaching": "{{moveName}} nicht\nerlernen?", - "learnMoveNotLearned": "{{pokemonName}} hat\n{{moveName}} nicht erlernt.", + "learnMoveLimitReached": "Aber {{pokemonName}} kann nur maximal vier Attacken erlernen.", + "learnMoveReplaceQuestion": "Soll eine bekannte Attacke durch {{moveName}} ersetzt werden?", + "learnMoveStopTeaching": "{{moveName}} nicht erlernen?", + "learnMoveNotLearned": "{{pokemonName}} hat {{moveName}} nicht erlernt.", "learnMoveForgetQuestion": "Welche Attacke soll vergessen werden?", - "learnMoveForgetSuccess": "{{pokemonName}} hat\n{{moveName}} vergessen.", + "learnMoveForgetSuccess": "{{pokemonName}} hat {{moveName}} vergessen.", "countdownPoof": "@d{32}Eins, @d{15}zwei @d{15}und@d{15}… @d{15}… @d{15}… @d{15}@s{pb_bounce_1}schwupp!", "learnMoveAnd": "Und…", - "levelCapUp": "Die Levelbeschränkung\nwurde auf {{levelCap}} erhöht!", + "levelCapUp": "Die Levelbeschränkung wurde auf {{levelCap}} erhöht!", "moveNotImplemented": "{{moveName}} ist noch nicht implementiert und kann nicht ausgewählt werden.", - "moveNoPP": "Es sind keine AP für\ndiese Attacke mehr übrig!", + "moveNoPP": "Es sind keine AP für diese Attacke mehr übrig!", "moveDisabled": "{{moveName}} ist deaktiviert!", - "noPokeballForce": "Eine unsichtbare Kraft\nverhindert die Nutzung von Pokébällen.", - "noPokeballTrainer": "Du kannst das Pokémon\neines anderen Trainers nicht fangen!", - "noPokeballMulti": "Du kannst erst einen Pokéball werfen,\nwenn nur noch ein Pokémon übrig ist!", - "noPokeballStrong": "Das Ziel-Pokémon ist zu stark, um gefangen zu werden!\nDu musst es zuerst schwächen!", - "noEscapeForce": "Eine unsichtbare Kraft\nverhindert die Flucht.", - "noEscapeTrainer": "Du kannst nicht\naus einem Trainerkampf fliehen!", - "noEscapePokemon": "{{pokemonName}}'s {{moveName}}\nverhindert {{escapeVerb}}!", + "noPokeballForce": "Eine unsichtbare Kraft verhindert die Nutzung von Pokébällen.", + "noPokeballTrainer": "Du kannst das Pokémon eines anderen Trainers nicht fangen!", + "noPokeballMulti": "Du kannst erst einen Pokéball werfen, wenn nur noch ein Pokémon übrig ist!", + "noPokeballStrong": "Das Ziel-Pokémon ist zu stark, um gefangen zu werden! Du musst es zuerst schwächen!", + "noEscapeForce": "Eine unsichtbare Kraft verhindert die Flucht.", + "noEscapeTrainer": "Du kannst nicht aus einem Trainerkampf fliehen!", + "noEscapePokemon": "{{moveName}} von {{pokemonName}} verhindert {{escapeVerb}}!", "runAwaySuccess": "Du bist entkommen!", "runAwayCannotEscape": "Flucht gescheitert!", "escapeVerbSwitch": "auswechseln", "escapeVerbFlee": "flucht", "skipItemQuestion": "Bist du sicher, dass du kein Item nehmen willst?", - "notDisabled": "{{pokemonName}}'s {{moveName}} ist\nnicht mehr deaktiviert!", + "notDisabled": "{{moveName}} von {{pokemonName}} ist nicht mehr deaktiviert!", "turnEndHpRestore": "Die KP von {{pokemonName}} wurden wiederhergestellt.", "hpIsFull": "Die KP von {{pokemonName}} sind voll!", "eggHatching": "Oh?", @@ -67,17 +67,34 @@ export const battle: SimpleTranslationEntries = { "useMove": "{{pokemonNameWithAffix}} setzt {{moveName}} ein!", "drainMessage": "{{pokemonName}} wurde Energie abgesaugt", "regainHealth": "KP von {{pokemonName}} wurden wieder aufgefrischt!", - "stealEatBerry": "{{pokemonName}} stole and ate\n{{targetName}}'s {{berryName}}!", + "stealEatBerry": "{{pokemonName}} hat {{targetName}} seine {{berryName}} weggefuttert!", + "ppHealBerry": "{{berryName}} von {{pokemonNameWithAffix}} füllt AP von {{moveName}} auf!", + "hpHealBerry": "{{berryName}} füllt KP von {{pokemonNameWithAffix}} auf!", "fainted": "{{pokemonNameWithAffix}} wurde besiegt!", - "statRose": "{{stats}} von {{pokemonNameWithAffix}} steigt!", - "statSharplyRose": "{{stats}} von {{pokemonNameWithAffix}} steigt stark!", - "statRoseDrastically": "{{stats}} von {{pokemonNameWithAffix}} steigt drastisch!", - "statWontGoAnyHigher": "{{stats}} von {{pokemonNameWithAffix}} kann nicht weiter erhöht werden!", - "statFell": "{{stats}} von {{pokemonNameWithAffix}} sinkt!", - "statHarshlyFell": "{{stats}} von {{pokemonNameWithAffix}} sinkt stark!", - "statSeverelyFell": "{{stats}} von {{pokemonNameWithAffix}} sinkt drastisch!", - "statWontGoAnyLower": "{{stats}} von {{pokemonNameWithAffix}} kann nicht weiter sinken!", + "statsAnd": "und", + "stats": "Alle Werte", + "statRose_one": "{{stats}} von {{pokemonNameWithAffix}} steigt!", + "statRose_other": "{{stats}} von {{pokemonNameWithAffix}} steigen!", + "statSharplyRose_one": "{{stats}} von {{pokemonNameWithAffix}} steigt stark!", + "statSharplyRose_other": "{{stats}} von {{pokemonNameWithAffix}} steigen stark!", + "statRoseDrastically_one": "{{stats}} von {{pokemonNameWithAffix}} steigt drastisch!", + "statRoseDrastically_other": "{{stats}} von {{pokemonNameWithAffix}} steigen drastisch!", + "statWontGoAnyHigher_one": "{{stats}} von {{pokemonNameWithAffix}} kann nicht weiter erhöht werden!", + "statWontGoAnyHigher_other": "{{stats}} von {{pokemonNameWithAffix}} können nicht weiter erhöht werden!", + "statFell_one": "{{stats}} von {{pokemonNameWithAffix}} sinkt!", + "statFell_other": "{{stats}} von {{pokemonNameWithAffix}} sinken!", + "statHarshlyFell_one": "{{stats}} von {{pokemonNameWithAffix}} sinkt stark!", + "statHarshlyFell_other": "{{stats}} von {{pokemonNameWithAffix}} sinken stark!", + "statSeverelyFell_one": "{{stats}} von {{pokemonNameWithAffix}} sinkt drastisch!", + "statSeverelyFell_other": "{{stats}} von {{pokemonNameWithAffix}} sinken drastisch!", + "statWontGoAnyLower_one": "{{stats}} von {{pokemonNameWithAffix}} kann nicht weiter sinken!", + "statWontGoAnyLower_other": "{{stats}} von {{pokemonNameWithAffix}} können nicht weiter sinken!", + "transformedIntoType": "{{pokemonName}} transformed\ninto the {{type}} type!", "ppReduced": "{{moveName}} von {{targetName}} wird um {{reduction}} AP reduziert!", + "retryBattle": "Möchtest du vom Beginn des Kampfes neustarten?", + "unlockedSomething": "{{unlockedThing}} wurde freigeschaltet.", + "congratulations": "Glückwunsch!", + "beatModeFirstTime": "{{speciesName}} hat den {{gameMode}} Modus zum ersten Mal beendet! Du erhältst {{newModifier}}!", "battlerTagsRechargingLapse": "{{pokemonNameWithAffix}} kann sich wegen des Rückstoßes durch den Angriff nicht bewegen!", "battlerTagsTrappedOnAdd": "{{pokemonNameWithAffix}} kann nicht mehr fliehen!", "battlerTagsTrappedOnRemove": "{{pokemonNameWithAffix}} wurde von {{moveName}} befreit.", @@ -124,11 +141,14 @@ export const battle: SimpleTranslationEntries = { "battlerTagsEnduringLapse": "{{pokemonNameWithAffix}} übersteht die Attacke!", "battlerTagsSturdyLapse": "{{pokemonNameWithAffix}} übersteht die Attacke!", "battlerTagsPerishSongLapse": "Abgesang von {{pokemonNameWithAffix}} steht bei {{turnCount}}.", + "battlerTagsCenterOfAttentionOnAdd": "{{pokemonNameWithAffix}} zieht alle Aufmerksamkeit auf sich!", "battlerTagsTruantLapse": "{{pokemonNameWithAffix}} faulenzt!", "battlerTagsSlowStartOnAdd": "{{pokemonNameWithAffix}} kommt nicht in Fahrt!", "battlerTagsSlowStartOnRemove": "{{pokemonNameWithAffix}} kriegt schließlich doch noch die Kurve!", "battlerTagsHighestStatBoostOnAdd": "{{statName}} von {{pokemonNameWithAffix}} wird verstärkt!", "battlerTagsHighestStatBoostOnRemove": "Der Effekt von {{abilityName}} von {{pokemonNameWithAffix}} lässt nach!", + "battlerTagsMagnetRisenOnAdd": "{{pokemonNameWithAffix}} schwebt aufgrund von Elektromagnetismus!", + "battlerTagsMagnetRisenOnRemove": "Der Elektromagnetismus von {{pokemonNameWithAffix}} hört auf zu wirken!", "battlerTagsCritBoostOnAdd": "{{pokemonNameWithAffix}} läuft zu Hochtouren auf!", "battlerTagsCritBoostOnRemove": "{{pokemonNameWithAffix}} entspannt.", "battlerTagsSaltCuredOnAdd": "{{pokemonNameWithAffix}} wurde eingepökelt!", diff --git a/src/locales/de/battler-tags.ts b/src/locales/de/battler-tags.ts new file mode 100644 index 00000000000..2858d163dac --- /dev/null +++ b/src/locales/de/battler-tags.ts @@ -0,0 +1,12 @@ +import { SimpleTranslationEntries } from "#app/interfaces/locales"; + +export const battlerTags: SimpleTranslationEntries = { + "trappedDesc": "Wechselsperre", + "flinchedDesc": "Zurückschrecken", + "confusedDesc": "Verwirrung", + "infatuatedDesc": "Verliebt", + "seedDesc": "Bepflanzt", + "nightmareDesc": "Nachtmahr", + "ingrainDesc": "Verwurzlung", + "drowsyDesc": "Schläfrigkeit", +} as const; diff --git a/src/locales/de/bgm-name.ts b/src/locales/de/bgm-name.ts index 1a6712b8608..6df4c911230 100644 --- a/src/locales/de/bgm-name.ts +++ b/src/locales/de/bgm-name.ts @@ -110,9 +110,9 @@ export const bgmName: SimpleTranslationEntries = { "plains": "PMD Erkundungsteam Himmel Himmelsgipfel-Prärie", "power_plant": "PMD Erkundungsteam Himmel Weite Ampere-Ebene", "ruins": "PMD Erkundungsteam Himmel Tiefes Ruinenverlies", - "sea": "PMD Erkundungsteam Himmel Salzwasserhöhle", + "sea": "Andr06 - Marine Mystique", // Name defined by the composer "seabed": "Firel - Seabed", // The composer thinks about a more creative name - "slum": "PMD Erkundungsteam Himmel Himmelsgipfel-Küste", + "slum": "Andr06 - Sneaky Snom", // Name defined by the composer "snowy_forest": "PMD Erkundungsteam Himmel Himmelsgipfel-Schneefeld", "space": "Firel - Aether", "swamp": "PMD Erkundungsteam Himmel Ringmeer", diff --git a/src/locales/de/challenges.ts b/src/locales/de/challenges.ts index b9321268ee9..e5e8a96f3fd 100644 --- a/src/locales/de/challenges.ts +++ b/src/locales/de/challenges.ts @@ -1,67 +1,32 @@ -import { SimpleTranslationEntries } from "#app/plugins/i18n"; +import { TranslationEntries } from "#app/interfaces/locales"; -export const challenges: SimpleTranslationEntries = { +export const challenges: TranslationEntries = { "title": "Herausforderungsmodifikatoren", - "confirm_start": "Mit diesen Modifikatoren fortfahren?", - "singleGeneration.name": "Mono-Generation", - "singleGeneration.value.0": "Aus", - "singleGeneration.desc.0": "Du kannst nur Pokémon aus der gewählten Generation verwenden.", - "singleGeneration.value.1": "Generation I", - "singleGeneration.desc.1": "Du kannst nur Pokémon aus der ersten Generation verwenden.", - "singleGeneration.value.2": "Generation II", - "singleGeneration.desc.2": "Du kannst nur Pokémon aus der zweiten Generation verwenden.", - "singleGeneration.value.3": "Generation III", - "singleGeneration.desc.3": "Du kannst nur Pokémon aus der dritten Generation verwenden.", - "singleGeneration.value.4": "Generation IV", - "singleGeneration.desc.4": "Du kannst nur Pokémon aus der vierten Generation verwenden.", - "singleGeneration.value.5": "Generation V", - "singleGeneration.desc.5": "Du kannst nur Pokémon aus der fünften Generation verwenden.", - "singleGeneration.value.6": "Generation VI", - "singleGeneration.desc.6": "Du kannst nur Pokémon aus der sechsten Generation verwenden.", - "singleGeneration.value.7": "Generation VII", - "singleGeneration.desc.7": "Du kannst nur Pokémon aus der siebten Generation verwenden.", - "singleGeneration.value.8": "Generation VIII", - "singleGeneration.desc.8": "Du kannst nur Pokémon aus der achten Generation verwenden.", - "singleGeneration.value.9": "Generation IX", - "singleGeneration.desc.9": "Du kannst nur Pokémon aus der neunten Generation verwenden.", - "singleType.name": "Mono-Typ", - "singleType.value.0": "Aus", - "singleType.desc.0": "Du kannst nur Pokémon des gewählten Typs verwenden.", - "singleType.value.1": "Normal", - "singleType.desc.1": "Du kannst nur Pokémon des Typs Normal verwenden.", - "singleType.value.2": "Kampf", - "singleType.desc.2": "Du kannst nur Pokémon des Typs Kampf verwenden.", - "singleType.value.3": "Flug", - "singleType.desc.3": "Du kannst nur Pokémon des Typs Flug verwenden.", - "singleType.value.4": "Gift", - "singleType.desc.4": "Du kannst nur Pokémon des Typs Gift verwenden.", - "singleType.value.5": "Boden", - "singleType.desc.5": "Du kannst nur Pokémon des Typs Boden verwenden.", - "singleType.value.6": "Gestein", - "singleType.desc.6": "Du kannst nur Pokémon des Typs Gestein verwenden.", - "singleType.value.7": "Käfer", - "singleType.desc.7": "Du kannst nur Pokémon des Typs Käfer verwenden.", - "singleType.value.8": "Geist", - "singleType.desc.8": "Du kannst nur Pokémon des Typs Geist verwenden.", - "singleType.value.9": "Stahl", - "singleType.desc.9": "Du kannst nur Pokémon des Typs Stahl verwenden.", - "singleType.value.10": "Feuer", - "singleType.desc.10": "Du kannst nur Pokémon des Typs Feuer verwenden.", - "singleType.value.11": "Wasser", - "singleType.desc.11": "Du kannst nur Pokémon des Typs Wasser verwenden.", - "singleType.value.12": "Pflanze", - "singleType.desc.12": "Du kannst nur Pokémon des Typs Pflanze verwenden.", - "singleType.value.13": "Elektro", - "singleType.desc.13": "Du kannst nur Pokémon des Typs Elektro verwenden.", - "singleType.value.14": "Psycho", - "singleType.desc.14": "Du kannst nur Pokémon des Typs Psycho verwenden.", - "singleType.value.15": "Eis", - "singleType.desc.15": "Du kannst nur Pokémon des Typs Eis verwenden.", - "singleType.value.16": "Drache", - "singleType.desc.16": "Du kannst nur Pokémon des Typs Drache verwenden.", - "singleType.value.17": "Unlicht", - "singleType.desc.17": "Du kannst nur Pokémon des Typs Unlicht verwenden.", - "singleType.value.18": "Fee", - "singleType.desc.18": "Du kannst nur Pokémon des Typs Fee verwenden." - + "illegalEvolution": "{{pokemon}} hat sich in ein Pokémon verwandelt, dass für diese Herausforderung nicht zulässig ist!", + "singleGeneration": { + "name": "Mono-Generation", + "desc": "Du kannst nur Pokémon aus der {{gen}} Generation verwenden.", + "desc_default": "Du kannst nur Pokémon gewählten Generation verwenden.", + "gen_1": "ersten", + "gen_2": "zweiten", + "gen_3": "dritten", + "gen_4": "vierten", + "gen_5": "fünften", + "gen_6": "sechsten", + "gen_7": "siebten", + "gen_8": "achten", + "gen_9": "neunten", + }, + "singleType": { + "name": "Mono-Typ", + "desc": "Du kannst nur Pokémon des Typs {{type}} verwenden.", + "desc_default": "Du kannst nur Pokémon des gewählten Typs verwenden." + // types in pokemon-info + }, + "freshStart": { + "name": "Neuanfang", + "desc": "Du kannst nur die ursprünglichen Starter verwenden, genau so, als hättest du gerade erst mit Pokérogue begonnen.", + "value.0": "Aus", + "value.1": "An", + } } as const; diff --git a/src/locales/de/config.ts b/src/locales/de/config.ts index ffbb2733205..cd4979e0792 100644 --- a/src/locales/de/config.ts +++ b/src/locales/de/config.ts @@ -1,8 +1,11 @@ import { ability } from "./ability"; import { abilityTriggers } from "./ability-trigger"; +import { arenaFlyout } from "./arena-flyout"; import { PGFachv, PGMachv } from "./achv"; import { battle } from "./battle"; +import { battleInfo } from "./battle-info"; import { battleMessageUiHandler } from "./battle-message-ui-handler"; +import { battlerTags } from "./battler-tags"; import { berry } from "./berry"; import { bgmName } from "./bgm-name"; import { biome } from "./biome"; @@ -33,6 +36,7 @@ import { pokeball } from "./pokeball"; import { pokemon } from "./pokemon"; import { pokemonInfo } from "./pokemon-info"; import { pokemonInfoContainer } from "./pokemon-info-container"; +import { pokemonSummary } from "./pokemon-summary"; import { saveSlotSelectUiHandler } from "./save-slot-select-ui-handler"; import { splashMessages } from "./splash-messages"; import { starterSelectUiHandler } from "./starter-select-ui-handler"; @@ -49,8 +53,11 @@ import { modifierSelectUiHandler } from "./modifier-select-ui-handler"; export const deConfig = { ability: ability, abilityTriggers: abilityTriggers, + arenaFlyout: arenaFlyout, battle: battle, + battleInfo: battleInfo, battleMessageUiHandler: battleMessageUiHandler, + battlerTags: battlerTags, berry: berry, bgmName: bgmName, biome: biome, @@ -82,6 +89,7 @@ export const deConfig = { pokemon: pokemon, pokemonInfo: pokemonInfo, pokemonInfoContainer: pokemonInfoContainer, + pokemonSummary: pokemonSummary, saveSlotSelectUiHandler: saveSlotSelectUiHandler, settings: settings, splashMessages: splashMessages, diff --git a/src/locales/de/game-mode.ts b/src/locales/de/game-mode.ts index 72661bd4682..3347bbb565f 100644 --- a/src/locales/de/game-mode.ts +++ b/src/locales/de/game-mode.ts @@ -6,5 +6,5 @@ export const gameMode: SimpleTranslationEntries = { "endlessSpliced": "Endlos (Fusion)", "dailyRun": "Täglicher Run", "unknown": "Unbekannt", - "challenge": "Challenge", + "challenge": "Herausforderung", } as const; diff --git a/src/locales/de/menu-ui-handler.ts b/src/locales/de/menu-ui-handler.ts index 0338ba6f399..6d461d286af 100644 --- a/src/locales/de/menu-ui-handler.ts +++ b/src/locales/de/menu-ui-handler.ts @@ -18,6 +18,10 @@ export const menuUiHandler: SimpleTranslationEntries = { "exportSlotSelect": "Wähle einen Slot zum Exportieren.", "importData": "Daten importieren", "exportData": "Daten exportieren", + "linkDiscord": "Discord verbinden", + "unlinkDiscord": "Discord trennen", + "linkGoogle": "Google verbinden", + "unlinkGoogle": "Google trennen", "cancel": "Abbrechen", "losingProgressionWarning": "Du wirst jeglichen Fortschritt seit Anfang dieses Kampfes verlieren. Fortfahren?", "noEggs": "Du brütest aktuell keine Eier aus!" diff --git a/src/locales/de/menu.ts b/src/locales/de/menu.ts index cb8cf9a318a..bfc4c31efcb 100644 --- a/src/locales/de/menu.ts +++ b/src/locales/de/menu.ts @@ -17,6 +17,7 @@ export const menu: SimpleTranslationEntries = { "username": "Benutzername", "password": "Passwort", "login": "Anmelden", + "orUse": "Oder nutze", "register": "Registrieren", "emptyUsername": "Benutzername darf nicht leer sein.", "invalidLoginUsername": "Der eingegebene Benutzername ist ungültig.", @@ -53,5 +54,9 @@ export const menu: SimpleTranslationEntries = { "no":"Nein", "disclaimer": "HAFTUNGSAUSSCHLUSS", "disclaimerDescription": "Dieses Spiel ist ein unfertiges Produkt. Es kann spielbeinträchtigende Fehler (bis hin zum Verlust des Speicherstandes)\n aufweisen, sich ohne Vorankündigung ändern und es gibt keine Garantie dass es weiterentwickelt oder fertiggestellt wird.", + "choosePokemon": "Wähle ein Pokémon.", + "renamePokemon": "Pokémon umbennenen", + "rename": "Umbenennen", + "nickname": "Spitzname", "errorServerDown": "Ups! Es gab einen Fehler beim Versuch\nden Server zu kontaktieren\nLasse dieses Fenster offen\nDu wirst automatisch neu verbunden.", } as const; diff --git a/src/locales/de/modifier-type.ts b/src/locales/de/modifier-type.ts index d1019ec4270..2451224ef25 100644 --- a/src/locales/de/modifier-type.ts +++ b/src/locales/de/modifier-type.ts @@ -58,10 +58,10 @@ export const modifierType: ModifierTypeTranslationEntries = { description: "Erhöht die Stärke aller {{moveType}}-Attacken eines Pokémon um 20%.", }, "PokemonLevelIncrementModifierType": { - description: "Erhöht das Level eines Pokémon um 1.", + description: "Erhöht das Level eines Pokémon um {{levels}}.", }, "AllPokemonLevelIncrementModifierType": { - description: "Erhöht das Level aller Teammitglieder um 1.", + description: "Erhöht das Level aller Teammitglieder um {{levels}}.", }, "PokemonBaseStatBoosterModifierType": { description: "Erhöht den {{statName}} Basiswert des Trägers um 10%. Das Stapellimit erhöht sich, je höher dein IS-Wert ist.", @@ -182,6 +182,9 @@ export const modifierType: ModifierTypeTranslationEntries = { "SOOTHE_BELL": { name: "Sanftglocke" }, + "SCOPE_LENS": { name: "Scope-Linse", description: "Ein Item zum Tragen. Es erhöht die Volltrefferquote." }, + "LEEK": { name: "Lauchstange", description: "Ein Item, das von Porenta getragen werden kann. Diese lange Lauchstange erhöht die Volltrefferquote stark." }, + "EVIOLITE": { name: "Evolith", description: "Ein mysteriöser Klumpen, der die Vert. u. Spez.-Vert. von Pokémon erhöht, die sich noch entwickeln können." }, "SOUL_DEW": { name: "Seelentau", description: "Erhöht den Einfluss des Wesens eines Pokemon auf seine Werte um 10% (additiv)." }, @@ -208,7 +211,7 @@ export const modifierType: ModifierTypeTranslationEntries = { "FOCUS_BAND": { name: "Fokusband", description: "Fügt eine 10% Chance hinzu, dass Angriffe die zur Kampfunfähigkeit führen mit 1 KP überlebt werden." }, - "QUICK_CLAW": { name: "Quick Claw", description: "Fügt eine 10% Change hinzu als erster anzugreifen. (Nach Prioritätsangriffen)." }, + "QUICK_CLAW": { name: "Flinkklaue", description: "Fügt eine 10% Change hinzu als erster anzugreifen. (Nach Prioritätsangriffen)." }, "KINGS_ROCK": { name: "King-Stein", description: "Fügt eine 10% Chance hinzu, dass der Gegner nach einem Angriff zurückschreckt." }, @@ -221,7 +224,7 @@ export const modifierType: ModifierTypeTranslationEntries = { "BATON": { name: "Stab", description: "Ermöglicht das Weitergeben von Effekten beim Wechseln von Pokémon, wodurch auch Fallen umgangen werden." }, "SHINY_CHARM": { name: "Schillerpin", description: "Erhöht die Chance deutlich, dass ein wildes Pokémon ein schillernd ist." }, - "ABILITY_CHARM": { name: "Ability Charm", description: "Erhöht die Chance deutlich, dass ein wildes Pokémon eine versteckte Fähigkeit hat." }, + "ABILITY_CHARM": { name: "Fähigkeitspin", description: "Erhöht die Chance deutlich, dass ein wildes Pokémon eine versteckte Fähigkeit hat." }, "IV_SCANNER": { name: "IS-Scanner", description: "Erlaubt es die IS-Werte von wilden Pokémon zu scannen.\n(2 IS-Werte pro Staplung. Die besten IS-Werte zuerst)." }, diff --git a/src/locales/de/move-trigger.ts b/src/locales/de/move-trigger.ts new file mode 100644 index 00000000000..e69de29bb2d diff --git a/src/locales/de/move.ts b/src/locales/de/move.ts index 430b4f85ec3..f8e5f7c6ff5 100644 --- a/src/locales/de/move.ts +++ b/src/locales/de/move.ts @@ -2975,7 +2975,7 @@ export const move: MoveTranslationEntries = { }, "dynamaxCannon": { name: "Dynamax-Kanone", - effect: "Der Anwender schießt einen Strahl aus seinem Kern ab. Dynamaximierte Ziele erleiden doppelten Schaden." + effect: "Der Anwender schießt einen Strahl aus seinem Kern ab. Verursacht bis zu doppelt so viel Schaden, wenn das Level des Gegners höher als die Levelgrenze ist." }, "snipeShot": { name: "Präzisionsschuss", diff --git a/src/locales/de/party-ui-handler.ts b/src/locales/de/party-ui-handler.ts index 604efb83628..097b670c768 100644 --- a/src/locales/de/party-ui-handler.ts +++ b/src/locales/de/party-ui-handler.ts @@ -16,6 +16,7 @@ export const partyUiHandler: SimpleTranslationEntries = { "PASS_BATON": "Stafette nutzen", "UNPAUSE_EVOLUTION": "Entwicklung fortsetzen", "REVIVE": "Wiederbeleben", + "RENAME": "Umbenennen", "choosePokemon": "Wähle ein Pokémon.", "doWhatWithThisPokemon": "Was soll mit diesem Pokémon geschehen?", diff --git a/src/locales/de/pokemon-summary.ts b/src/locales/de/pokemon-summary.ts new file mode 100644 index 00000000000..69683d4d4a0 --- /dev/null +++ b/src/locales/de/pokemon-summary.ts @@ -0,0 +1,20 @@ +import { TranslationEntries } from "#app/interfaces/locales"; + +export const pokemonSummary: TranslationEntries = { + "pokemonInfo": "Pokémon Info", + "status": "Status", + "powerAccuracyCategory": "Stärke\nGenauigkeit\nKategorie", + "type": "Typ", + "unknownTrainer": "Unbekannt", + "ot": "OT", + "nature": "Wesen", + "expPoints": "Erf. Punkte", + "nextLv": "Nächstes Lvl.", + "cancel": "Abbrechen", + + "memoString": "Wesen: {{natureFragment}}\n{{metFragment}}", + "metFragment": { + "normal": "Herkunft: {{biome}}\nMit Lv. {{level}} erhalten.", + "apparently": "Herkunft: {{biome}}\nOffenbar mit Lv. {{level}} erhalten.", + }, +} as const; diff --git a/src/locales/de/save-slot-select-ui-handler.ts b/src/locales/de/save-slot-select-ui-handler.ts index b6577cd574a..47069d62780 100644 --- a/src/locales/de/save-slot-select-ui-handler.ts +++ b/src/locales/de/save-slot-select-ui-handler.ts @@ -4,6 +4,6 @@ export const saveSlotSelectUiHandler: SimpleTranslationEntries = { "overwriteData": "Den ausgewählten Speicherstand überschreiben?", "loading": "Läd...", "wave": "Welle", - "lv": "Lvl", + "lv": "Lv. ", "empty": "Leer", } as const; diff --git a/src/locales/de/settings.ts b/src/locales/de/settings.ts index 0254611b5d5..227b8f97581 100644 --- a/src/locales/de/settings.ts +++ b/src/locales/de/settings.ts @@ -96,4 +96,5 @@ export const settings: SimpleTranslationEntries = { "controller": "Controller", "gamepadSupport": "Controllerunterstützung", "showBgmBar": "Musiknamen anzeigen", + "shopOverlayOpacity": "Shop Overlay Deckkraft", } as const; diff --git a/src/locales/de/splash-messages.ts b/src/locales/de/splash-messages.ts index f5ab8572b7b..a521d96057d 100644 --- a/src/locales/de/splash-messages.ts +++ b/src/locales/de/splash-messages.ts @@ -34,4 +34,5 @@ export const splashMessages: SimpleTranslationEntries = { "alsoTryRadicalRed": "Versuche auch Radical Red!", "eeveeExpo": "Evoli-Expo!", "ynoproject": "YNO-Projekt!", + "breedersInSpace": "Züchter im Weltall!", } as const; diff --git a/src/locales/en/ability-trigger.ts b/src/locales/en/ability-trigger.ts index b516bc8dde0..8e35ea4deb9 100644 --- a/src/locales/en/ability-trigger.ts +++ b/src/locales/en/ability-trigger.ts @@ -10,4 +10,53 @@ export const abilityTriggers: SimpleTranslationEntries = { "trace": "{{pokemonName}} copied {{targetName}}'s\n{{abilityName}}!", "windPowerCharged": "Being hit by {{moveName}} charged {{pokemonName}} with power!", "quickDraw": "{{pokemonName}} can act faster than normal, thanks to its Quick Draw!", + "blockItemTheft": "{{pokemonNameWithAffix}}'s {{abilityName}}\nprevents item theft!", + "typeImmunityHeal": "{{pokemonNameWithAffix}}'s {{abilityName}}\nrestored its HP a little!", + "nonSuperEffectiveImmunity": "{{pokemonNameWithAffix}} avoided damage\nwith {{abilityName}}!", + "postDefendDisguise": "{{pokemonNameWithAffix}}'s disguise was busted!", + "moveImmunity": "It doesn't affect {{pokemonNameWithAffix}}!", + "reverseDrain": "{{pokemonNameWithAffix}} sucked up the liquid ooze!", + "postDefendTypeChange": "{{pokemonNameWithAffix}}'s {{abilityName}}\nmade it the {{typeName}} type!", + "postDefendContactDamage": "{{pokemonNameWithAffix}}'s {{abilityName}}\nhurt its attacker!", + "postDefendAbilitySwap": "{{pokemonNameWithAffix}} swapped\nabilities with its target!", + "postDefendAbilityGive": "{{pokemonNameWithAffix}} gave its target\n{{abilityName}}!", + "postDefendMoveDisable": "{{pokemonNameWithAffix}}'s {{moveName}}\nwas disabled!", + "pokemonTypeChange": "{{pokemonNameWithAffix}} transformed into the {{moveType}} type!", + "postAttackStealHeldItem": "{{pokemonNameWithAffix}} stole\n{{defenderName}}'s {{stolenItemType}}!", + "postDefendStealHeldItem": "{{pokemonNameWithAffix}} stole\n{{attackerName}}'s {{stolenItemType}}!", + "copyFaintedAllyAbility": "{{pokemonNameWithAffix}}'s {{abilityName}} was taken over!", + "intimidateImmunity": "{{pokemonNameWithAffix}}'s {{abilityName}} prevented it from being Intimidated!", + "postSummonAllyHeal": "{{pokemonNameWithAffix}} drank down all the\nmatcha that {{pokemonName}} made!", + "postSummonClearAllyStats": "{{pokemonNameWithAffix}}'s stat changes\nwere removed!", + "postSummonTransform": "{{pokemonNameWithAffix}} transformed\ninto {{targetName}}!", + "protectStat": "{{pokemonNameWithAffix}}'s {{abilityName}}\nprevents lowering its {{statName}}!", + "statusEffectImmunityWithName": "{{pokemonNameWithAffix}}'s {{abilityName}}\nprevents {{statusEffectName}}!", + "statusEffectImmunity": "{{pokemonNameWithAffix}}'s {{abilityName}}\nprevents status problems!", + "battlerTagImmunity": "{{pokemonNameWithAffix}}'s {{abilityName}}\nprevents {{battlerTagName}}!", + "forewarn": "{{pokemonNameWithAffix}} was forewarned about {{moveName}}!", + "frisk": "{{pokemonNameWithAffix}} frisked {{opponentName}}'s {{opponentAbilityName}}!", + "postWeatherLapseHeal": "{{pokemonNameWithAffix}}'s {{abilityName}}\nrestored its HP a little!", + "postWeatherLapseDamage": "{{pokemonNameWithAffix}} is hurt\nby its {{abilityName}}!", + "postTurnLootCreateEatenBerry": "{{pokemonNameWithAffix}} harvested one {{berryName}}!", + "postTurnHeal": "{{pokemonNameWithAffix}}'s {{abilityName}}\nrestored its HP a little!", + "fetchBall": "{{pokemonNameWithAffix}} found a\n{{pokeballName}}!", + "healFromBerryUse": "{{pokemonNameWithAffix}}'s {{abilityName}}\nrestored its HP!", + "arenaTrap": "{{pokemonNameWithAffix}}'s {{abilityName}}\nprevents switching!", + "postBattleLoot": "{{pokemonNameWithAffix}} picked up\n{{itemName}}!", + "postFaintContactDamage": "{{pokemonNameWithAffix}}'s {{abilityName}}\nhurt its attacker!", + "postFaintHpDamage": "{{pokemonNameWithAffix}}'s {{abilityName}}\nhurt its attacker!", + "postSummonPressure": "{{pokemonNameWithAffix}} is exerting its Pressure!", + "postSummonMoldBreaker": "{{pokemonNameWithAffix}} breaks the mold!", + "postSummonAnticipation": "{{pokemonNameWithAffix}} shuddered!", + "postSummonTurboblaze": "{{pokemonNameWithAffix}} is radiating a blazing aura!", + "postSummonTeravolt": "{{pokemonNameWithAffix}} is radiating a bursting aura!", + "postSummonDarkAura": "{{pokemonNameWithAffix}} is radiating a Dark Aura!", + "postSummonFairyAura": "{{pokemonNameWithAffix}} is radiating a Fairy Aura!", + "postSummonNeutralizingGas": "{{pokemonNameWithAffix}}'s Neutralizing Gas filled the area!", + "postSummonAsOneGlastrier": "{{pokemonNameWithAffix}} has two Abilities!", + "postSummonAsOneSpectrier": "{{pokemonNameWithAffix}} has two Abilities!", + "postSummonVesselOfRuin": "{{pokemonNameWithAffix}}'s Vessel of Ruin lowered the {{statName}}\nof all surrounding Pokémon!", + "postSummonSwordOfRuin": "{{pokemonNameWithAffix}}'s Sword of Ruin lowered the {{statName}}\nof all surrounding Pokémon!", + "postSummonTabletsOfRuin": "{{pokemonNameWithAffix}}'s Tablets of Ruin lowered the {{statName}}\nof all surrounding Pokémon!", + "postSummonBeadsOfRuin": "{{pokemonNameWithAffix}}'s Beads of Ruin lowered the {{statName}}\nof all surrounding Pokémon!", } as const; diff --git a/src/locales/en/achv.ts b/src/locales/en/achv.ts index 4235db5995a..d8dda2c67e8 100644 --- a/src/locales/en/achv.ts +++ b/src/locales/en/achv.ts @@ -264,6 +264,10 @@ export const PGMachv: AchievementTranslationEntries = { "MONO_FAIRY": { name: "Hey! Listen!", }, + "FRESH_START": { + name: "First Try!", + description: "Complete the fresh start challenge." + } } as const; // Achievement translations for the when the player character is female (it for now uses the same translations as the male version) diff --git a/src/locales/en/arena-flyout.ts b/src/locales/en/arena-flyout.ts new file mode 100644 index 00000000000..8a31d37b10c --- /dev/null +++ b/src/locales/en/arena-flyout.ts @@ -0,0 +1,49 @@ +import { SimpleTranslationEntries } from "#app/interfaces/locales"; + +export const arenaFlyout: SimpleTranslationEntries = { + // Title + "activeBattleEffects": "Active Battle Effects", + "player": "Player", + "neutral": "Neutral", + "enemy": "Enemy", + + // WeatherType + "sunny": "Sunny", + "rain": "Rain", + "sandstorm": "Sandstorm", + "hail": "Hail", + "snow": "Snow", + "fog": "Fog", + "heavyRain": "Heavy Rain", + "harshSun": "Harsh Sun", + "strongWinds": "Strong Winds", + + // TerrainType + "misty": "Misty Terrain", + "electric": "Electric Terrain", + "grassy": "Grassy Terrain", + "psychic": "Psychic Terrain", + + // ArenaTagType + "mudSport": "Mud Sport", + "waterSport": "Water Sport", + "spikes": "Spikes", + "toxicSpikes": "Toxic Spikes", + "mist": "Mist", + "futureSight": "Future Sight", + "doomDesire": "Doom Desire", + "wish": "Wish", + "stealthRock": "Stealth Rock", + "stickyWeb": "Sticky Web", + "trickRoom": "Trick Room", + "gravity": "Gravity", + "reflect": "Reflect", + "lightScreen": "Light Screen", + "auroraVeil": "Aurora Veil", + "quickGuard": "Quick Guard", + "wideGuard": "Wide Guard", + "matBlock": "Mat Block", + "craftyShield": "Crafty Shield", + "tailwind": "Tailwind", + "happyHour": "Happy Hour", +}; diff --git a/src/locales/en/battle-info.ts b/src/locales/en/battle-info.ts new file mode 100644 index 00000000000..f24dad46c6c --- /dev/null +++ b/src/locales/en/battle-info.ts @@ -0,0 +1,5 @@ +import { SimpleTranslationEntries } from "#app/interfaces/locales"; + +export const battleInfo: SimpleTranslationEntries = { + "generation": "Generation {{generation}}", +} as const; diff --git a/src/locales/en/battle.ts b/src/locales/en/battle.ts index c7e2ef96be4..d7a1f6ccf90 100644 --- a/src/locales/en/battle.ts +++ b/src/locales/en/battle.ts @@ -68,15 +68,32 @@ export const battle: SimpleTranslationEntries = { "drainMessage": "{{pokemonName}} had its\nenergy drained!", "regainHealth": "{{pokemonName}} regained\nhealth!", "stealEatBerry": "{{pokemonName}} stole and ate\n{{targetName}}'s {{berryName}}!", + "ppHealBerry": "{{pokemonNameWithAffix}} restored PP to its move {{moveName}}\nusing its {{berryName}}!", + "hpHealBerry": "{{pokemonNameWithAffix}} restored its health using\nits {{berryName}}!", "fainted": "{{pokemonNameWithAffix}} fainted!", - "statRose": "{{pokemonNameWithAffix}}'s {{stats}} rose!", - "statSharplyRose": "{{pokemonNameWithAffix}}'s {{stats}} sharply rose!", - "statRoseDrastically": "{{pokemonNameWithAffix}}'s {{stats}} rose drastically!", - "statWontGoAnyHigher": "{{pokemonNameWithAffix}}'s {{stats}} won't go any higher!", - "statFell": "{{pokemonNameWithAffix}}'s {{stats}} fell!", - "statHarshlyFell": "{{pokemonNameWithAffix}}'s {{stats}} harshly fell!", - "statSeverelyFell": "{{pokemonNameWithAffix}}'s {{stats}} severely fell!", - "statWontGoAnyLower": "{{pokemonNameWithAffix}}'s {{stats}} won't go any lower!", + "statsAnd": "and", + "stats": "Stats", + "statRose_one": "{{pokemonNameWithAffix}}'s {{stats}} rose!", + "statRose_other": "{{pokemonNameWithAffix}}'s {{stats}} rose!", + "statSharplyRose_one": "{{pokemonNameWithAffix}}'s {{stats}} sharply rose!", + "statSharplyRose_other": "{{pokemonNameWithAffix}}'s {{stats}} sharply rose!", + "statRoseDrastically_one": "{{pokemonNameWithAffix}}'s {{stats}} rose drastically!", + "statRoseDrastically_other": "{{pokemonNameWithAffix}}'s {{stats}} rose drastically!", + "statWontGoAnyHigher_one": "{{pokemonNameWithAffix}}'s {{stats}} won't go any higher!", + "statWontGoAnyHigher_other": "{{pokemonNameWithAffix}}'s {{stats}} won't go any higher!", + "statFell_one": "{{pokemonNameWithAffix}}'s {{stats}} fell!", + "statFell_other": "{{pokemonNameWithAffix}}'s {{stats}} fell!", + "statHarshlyFell_one": "{{pokemonNameWithAffix}}'s {{stats}} harshly fell!", + "statHarshlyFell_other": "{{pokemonNameWithAffix}}'s {{stats}} harshly fell!", + "statSeverelyFell_one": "{{pokemonNameWithAffix}}'s {{stats}} severely fell!", + "statSeverelyFell_other": "{{pokemonNameWithAffix}}'s {{stats}} severely fell!", + "statWontGoAnyLower_one": "{{pokemonNameWithAffix}}'s {{stats}} won't go any lower!", + "statWontGoAnyLower_other": "{{pokemonNameWithAffix}}'s {{stats}} won't go any lower!", + "transformedIntoType": "{{pokemonName}} transformed\ninto the {{type}} type!", + "retryBattle": "Would you like to retry from the start of the battle?", + "unlockedSomething": "{{unlockedThing}}\nhas been unlocked.", + "congratulations": "Congratulations!", + "beatModeFirstTime": "{{speciesName}} beat {{gameMode}} Mode for the first time!\nYou received {{newModifier}}!", "ppReduced": "It reduced the PP of {{targetName}}'s\n{{moveName}} by {{reduction}}!", "battlerTagsRechargingLapse": "{{pokemonNameWithAffix}} must\nrecharge!", "battlerTagsTrappedOnAdd": "{{pokemonNameWithAffix}} can no\nlonger escape!", @@ -124,15 +141,18 @@ export const battle: SimpleTranslationEntries = { "battlerTagsEnduringLapse": "{{pokemonNameWithAffix}} endured\nthe hit!", "battlerTagsSturdyLapse": "{{pokemonNameWithAffix}} endured\nthe hit!", "battlerTagsPerishSongLapse": "{{pokemonNameWithAffix}}'s perish count fell to {{turnCount}}.", + "battlerTagsCenterOfAttentionOnAdd": "{{pokemonNameWithAffix}} became the center\nof attention!", "battlerTagsTruantLapse": "{{pokemonNameWithAffix}} is\nloafing around!", "battlerTagsSlowStartOnAdd": "{{pokemonNameWithAffix}} can't\nget it going!", "battlerTagsSlowStartOnRemove": "{{pokemonNameWithAffix}} finally\ngot its act together!", "battlerTagsHighestStatBoostOnAdd": "{{pokemonNameWithAffix}}'s {{statName}}\nwas heightened!", "battlerTagsHighestStatBoostOnRemove": "The effects of {{pokemonNameWithAffix}}'s\n{{abilityName}} wore off!", + "battlerTagsMagnetRisenOnAdd": "{{pokemonNameWithAffix}} levitated with electromagnetism!", + "battlerTagsMagnetRisenOnRemove": "{{pokemonNameWithAffix}}'s electromagnetism wore off!", "battlerTagsCritBoostOnAdd": "{{pokemonNameWithAffix}} is getting\npumped!", "battlerTagsCritBoostOnRemove": "{{pokemonNameWithAffix}} relaxed.", "battlerTagsSaltCuredOnAdd": "{{pokemonNameWithAffix}} is being salt cured!", "battlerTagsSaltCuredLapse": "{{pokemonNameWithAffix}} is hurt by {{moveName}}!", "battlerTagsCursedOnAdd": "{{pokemonNameWithAffix}} cut its own HP and put a curse on the {{pokemonName}}!", - "battlerTagsCursedLapse": "{{pokemonNameWithAffix}} is afflicted by the Curse!" + "battlerTagsCursedLapse": "{{pokemonNameWithAffix}} is afflicted by the Curse!", } as const; diff --git a/src/locales/en/battler-tags.ts b/src/locales/en/battler-tags.ts new file mode 100644 index 00000000000..1d897c70f3d --- /dev/null +++ b/src/locales/en/battler-tags.ts @@ -0,0 +1,12 @@ +import { SimpleTranslationEntries } from "#app/interfaces/locales"; + +export const battlerTags: SimpleTranslationEntries = { + "trappedDesc": "trapping", + "flinchedDesc": "flinching", + "confusedDesc": "confusion", + "infatuatedDesc": "infatuation", + "seedDesc": "seeding", + "nightmareDesc": "nightmares", + "ingrainDesc": "roots", + "drowsyDesc": "drowsiness", +} as const; diff --git a/src/locales/en/bgm-name.ts b/src/locales/en/bgm-name.ts index 87d90dabc9d..01fb86b281d 100644 --- a/src/locales/en/bgm-name.ts +++ b/src/locales/en/bgm-name.ts @@ -110,9 +110,9 @@ export const bgmName: SimpleTranslationEntries = { "plains": "PMD EoS Sky Peak Prairie", "power_plant": "PMD EoS Far Amp Plains", "ruins": "PMD EoS Deep Sealed Ruin", - "sea": "PMD EoS Brine Cave", + "sea": "Andr06 - Marine Mystique", // Name defined by the composer "seabed": "Firel - Seabed", // The composer thinks about a more creative name - "slum": "PMD EoS Sky Peak Coast", + "slum": "Andr06 - Sneaky Snom", // Name defined by the composer "snowy_forest": "PMD EoS Sky Peak Snowfield", "space": "Firel - Aether", "swamp": "PMD EoS Surrounded Sea", diff --git a/src/locales/en/challenges.ts b/src/locales/en/challenges.ts index b76091fefa8..0cb85c0ddeb 100644 --- a/src/locales/en/challenges.ts +++ b/src/locales/en/challenges.ts @@ -23,4 +23,10 @@ export const challenges: TranslationEntries = { "desc_default": "You can only use Pokémon of the chosen type." //types in pokemon-info }, + "freshStart": { + "name": "Fresh Start", + "desc": "You can only use the original starters, and only as if you had just started pokerogue.", + "value.0": "Off", + "value.1": "On", + } } as const; diff --git a/src/locales/en/config.ts b/src/locales/en/config.ts index 1c5449a2e88..e20aaa2bbb3 100644 --- a/src/locales/en/config.ts +++ b/src/locales/en/config.ts @@ -2,9 +2,12 @@ import { common } from "./common.js"; import { settings } from "./settings.js"; import { ability } from "./ability"; import { abilityTriggers } from "./ability-trigger"; +import { arenaFlyout } from "./arena-flyout"; import { PGFachv, PGMachv } from "./achv"; import { battle } from "./battle"; +import { battleInfo } from "./battle-info"; import { battleMessageUiHandler } from "./battle-message-ui-handler"; +import { battlerTags } from "./battler-tags"; import { berry } from "./berry"; import { bgmName } from "./bgm-name"; import { biome } from "./biome"; @@ -36,6 +39,7 @@ import { pokeball } from "./pokeball"; import { pokemon } from "./pokemon"; import { pokemonInfo } from "./pokemon-info"; import { pokemonInfoContainer } from "./pokemon-info-container"; +import { pokemonSummary } from "./pokemon-summary"; import { saveSlotSelectUiHandler } from "./save-slot-select-ui-handler"; import { splashMessages } from "./splash-messages"; import { starterSelectUiHandler } from "./starter-select-ui-handler"; @@ -49,8 +53,11 @@ import { modifierSelectUiHandler } from "./modifier-select-ui-handler"; export const enConfig = { ability: ability, abilityTriggers: abilityTriggers, + arenaFlyout: arenaFlyout, battle: battle, + battleInfo: battleInfo, battleMessageUiHandler: battleMessageUiHandler, + battlerTags: battlerTags, berry: berry, bgmName: bgmName, biome: biome, @@ -82,6 +89,7 @@ export const enConfig = { pokemon: pokemon, pokemonInfo: pokemonInfo, pokemonInfoContainer: pokemonInfoContainer, + pokemonSummary: pokemonSummary, saveSlotSelectUiHandler: saveSlotSelectUiHandler, settings: settings, splashMessages: splashMessages, diff --git a/src/locales/en/menu-ui-handler.ts b/src/locales/en/menu-ui-handler.ts index 97d6e38a099..6eb680544ed 100644 --- a/src/locales/en/menu-ui-handler.ts +++ b/src/locales/en/menu-ui-handler.ts @@ -18,6 +18,10 @@ export const menuUiHandler: SimpleTranslationEntries = { "exportSlotSelect": "Select a slot to export from.", "importData": "Import Data", "exportData": "Export Data", + "linkDiscord": "Link Discord", + "unlinkDiscord": "Unlink Discord", + "linkGoogle": "Link Google", + "unlinkGoogle": "Unlink Google", "cancel": "Cancel", "losingProgressionWarning": "You will lose any progress since the beginning of the battle. Proceed?", "noEggs": "You are not hatching\nany eggs at the moment!" diff --git a/src/locales/en/menu.ts b/src/locales/en/menu.ts index 542399fee51..fe4d96c5120 100644 --- a/src/locales/en/menu.ts +++ b/src/locales/en/menu.ts @@ -17,6 +17,7 @@ export const menu: SimpleTranslationEntries = { "username": "Username", "password": "Password", "login": "Login", + "orUse": "Or use", "register": "Register", "emptyUsername": "Username must not be empty", "invalidLoginUsername": "The provided username is invalid", @@ -53,5 +54,9 @@ export const menu: SimpleTranslationEntries = { "no":"No", "disclaimer": "DISCLAIMER", "disclaimerDescription": "This game is an unfinished product; it might have playability issues (including the potential loss of save data),\n change without notice, and may or may not be updated further or completed.", + "choosePokemon": "Choose a Pokémon.", + "renamePokemon": "Rename Pokémon", + "rename": "Rename", + "nickname": "Nickname", "errorServerDown": "Oops! There was an issue contacting the server.\n\nYou may leave this window open,\nthe game will automatically reconnect.", } as const; diff --git a/src/locales/en/modifier-type.ts b/src/locales/en/modifier-type.ts index 7bbf89388c4..b3f34a20386 100644 --- a/src/locales/en/modifier-type.ts +++ b/src/locales/en/modifier-type.ts @@ -58,10 +58,10 @@ export const modifierType: ModifierTypeTranslationEntries = { description: "Increases the power of a Pokémon's {{moveType}}-type moves by 20%.", }, "PokemonLevelIncrementModifierType": { - description: "Increases a Pokémon's level by 1.", + description: "Increases a Pokémon's level by {{levels}}.", }, "AllPokemonLevelIncrementModifierType": { - description: "Increases all party members' level by 1.", + description: "Increases all party members' level by {{levels}}.", }, "PokemonBaseStatBoosterModifierType": { description: "Increases the holder's base {{statName}} by 10%. The higher your IVs, the higher the stack limit.", @@ -182,6 +182,9 @@ export const modifierType: ModifierTypeTranslationEntries = { "SOOTHE_BELL": { name: "Soothe Bell" }, + "SCOPE_LENS": { name: "Scope Lens", description: "It's a lens for scoping out weak points. It boosts the holder's critical-hit ratio."}, + "LEEK": { name: "Leek", description: "This very long and stiff stalk of leek boosts the critical-hit ratio of Farfetch'd's moves."}, + "EVIOLITE": { name: "Eviolite", description: "This mysterious evolutionary lump boosts the Defense and Sp. Def stats when held by a Pokémon that can still evolve." }, "SOUL_DEW": { name: "Soul Dew", description: "Increases the influence of a Pokémon's nature on its stats by 10% (additive)." }, diff --git a/src/locales/en/move.ts b/src/locales/en/move.ts index b9a8836dfec..cec7c93ede5 100644 --- a/src/locales/en/move.ts +++ b/src/locales/en/move.ts @@ -2975,7 +2975,7 @@ export const move: MoveTranslationEntries = { }, "dynamaxCannon": { name: "Dynamax Cannon", - effect: "The user unleashes a strong beam from its core. This move deals twice the damage if the target is over level 200." + effect: "The user unleashes a strong beam from its core. Deals up to twice the damage if the target is overly leveled." }, "snipeShot": { name: "Snipe Shot", diff --git a/src/locales/en/party-ui-handler.ts b/src/locales/en/party-ui-handler.ts index 78fdcc14dbe..4f300dd36ea 100644 --- a/src/locales/en/party-ui-handler.ts +++ b/src/locales/en/party-ui-handler.ts @@ -16,6 +16,7 @@ export const partyUiHandler: SimpleTranslationEntries = { "PASS_BATON": "Pass Baton", "UNPAUSE_EVOLUTION": "Unpause Evolution", "REVIVE": "Revive", + "RENAME": "Rename", "choosePokemon": "Choose a Pokémon.", "doWhatWithThisPokemon": "Do what with this Pokémon?", diff --git a/src/locales/en/pokemon-summary.ts b/src/locales/en/pokemon-summary.ts new file mode 100644 index 00000000000..484ea2a9d67 --- /dev/null +++ b/src/locales/en/pokemon-summary.ts @@ -0,0 +1,20 @@ +import { TranslationEntries } from "#app/interfaces/locales"; + +export const pokemonSummary: TranslationEntries = { + "pokemonInfo": "Pokémon Info", + "status": "Status", + "powerAccuracyCategory": "Power\nAccuracy\nCategory", + "type": "Type", + "unknownTrainer": "Unknown", + "ot": "OT", + "nature": "nature", + "expPoints": "Exp. Points", + "nextLv": "Next Lv.", + "cancel": "Cancel", + + "memoString": "{{natureFragment}} nature,\n{{metFragment}}", + "metFragment": { + "normal": "met at Lv{{level}},\n{{biome}}.", + "apparently": "apparently met at Lv{{level}},\n{{biome}}.", + }, +} as const; diff --git a/src/locales/en/settings.ts b/src/locales/en/settings.ts index f68a649269f..491bfa4a481 100644 --- a/src/locales/en/settings.ts +++ b/src/locales/en/settings.ts @@ -96,4 +96,5 @@ export const settings: SimpleTranslationEntries = { "controller": "Controller", "gamepadSupport": "Gamepad Support", "showBgmBar": "Show Music Names", + "shopOverlayOpacity": "Shop Overlay Opacity" } as const; diff --git a/src/locales/en/splash-messages.ts b/src/locales/en/splash-messages.ts index 17eafc2d6d6..e549bc24f19 100644 --- a/src/locales/en/splash-messages.ts +++ b/src/locales/en/splash-messages.ts @@ -34,4 +34,5 @@ export const splashMessages: SimpleTranslationEntries = { "alsoTryRadicalRed": "Also Try Radical Red!", "eeveeExpo": "Eevee Expo!", "ynoproject": "YNOproject!", + "breedersInSpace": "Breeders in space!", } as const; diff --git a/src/locales/es/ability-trigger.ts b/src/locales/es/ability-trigger.ts index 5c09c3832c0..d5d487235e9 100644 --- a/src/locales/es/ability-trigger.ts +++ b/src/locales/es/ability-trigger.ts @@ -5,7 +5,58 @@ export const abilityTriggers: SimpleTranslationEntries = { "badDreams": "¡{{pokemonName}} está atormentado!", "costar": "{{pokemonName}} copied {{allyName}}'s stat changes!", "iceFaceAvoidedDamage": "¡{{pokemonNameWithAffix}} evitó\ndaño con {{abilityName}}!", + "perishBody": "{{pokemonName}}'s {{abilityName}}\nwill faint both pokemon in 3 turns!", + "poisonHeal": "{{pokemonName}}'s {{abilityName}}\nrestored its HP a little!", "trace": "{{pokemonName}} copied {{targetName}}'s\n{{abilityName}}!", "windPowerCharged": "¡{{pokemonName}} se ha cargado de electricidad gracias a {{moveName}}!", "quickDraw": "{{pokemonName}} can act faster than normal, thanks to its Quick Draw!", + "blockItemTheft": "{{pokemonNameWithAffix}}'s {{abilityName}}\nprevents item theft!", + "typeImmunityHeal": "{{pokemonNameWithAffix}}'s {{abilityName}}\nrestored its HP a little!", + "nonSuperEffectiveImmunity": "{{pokemonNameWithAffix}} avoided damage\nwith {{abilityName}}!", + "postDefendDisguise": "{{pokemonNameWithAffix}}'s disguise was busted!", + "moveImmunity": "It doesn't affect {{pokemonNameWithAffix}}!", + "reverseDrain": "{{pokemonNameWithAffix}} sucked up the liquid ooze!", + "postDefendTypeChange": "{{pokemonNameWithAffix}}'s {{abilityName}}\nmade it the {{typeName}} type!", + "postDefendContactDamage": "{{pokemonNameWithAffix}}'s {{abilityName}}\nhurt its attacker!", + "postDefendAbilitySwap": "{{pokemonNameWithAffix}} swapped\nabilities with its target!", + "postDefendAbilityGive": "{{pokemonNameWithAffix}} gave its target\n{{abilityName}}!", + "postDefendMoveDisable": "{{pokemonNameWithAffix}}'s {{moveName}}\nwas disabled!", + "pokemonTypeChange": "{{pokemonNameWithAffix}} transformed into the {{moveType}} type!", + "postAttackStealHeldItem": "{{pokemonNameWithAffix}} stole\n{{defenderName}}'s {{stolenItemType}}!", + "postDefendStealHeldItem": "{{pokemonNameWithAffix}} stole\n{{attackerName}}'s {{stolenItemType}}!", + "copyFaintedAllyAbility": "{{pokemonNameWithAffix}}'s {{abilityName}} was taken over!", + "intimidateImmunity": "{{pokemonNameWithAffix}}'s {{abilityName}} prevented it from being Intimidated!", + "postSummonAllyHeal": "{{pokemonNameWithAffix}} drank down all the\nmatcha that {{pokemonName}} made!", + "postSummonClearAllyStats": "{{pokemonNameWithAffix}}'s stat changes\nwere removed!", + "postSummonTransform": "{{pokemonNameWithAffix}} transformed\ninto {{targetName}}!", + "protectStat": "{{pokemonNameWithAffix}}'s {{abilityName}}\nprevents lowering its {{statName}}!", + "statusEffectImmunityWithName": "{{pokemonNameWithAffix}}'s {{abilityName}}\nprevents {{statusEffectName}}!", + "statusEffectImmunity": "{{pokemonNameWithAffix}}'s {{abilityName}}\nprevents status problems!", + "battlerTagImmunity": "{{pokemonNameWithAffix}}'s {{abilityName}}\nprevents {{battlerTagName}}!", + "forewarn": "{{pokemonNameWithAffix}} was forewarned about {{moveName}}!", + "frisk": "{{pokemonNameWithAffix}} frisked {{opponentName}}'s {{opponentAbilityName}}!", + "postWeatherLapseHeal": "{{pokemonNameWithAffix}}'s {{abilityName}}\nrestored its HP a little!", + "postWeatherLapseDamage": "{{pokemonNameWithAffix}} is hurt\nby its {{abilityName}}!", + "postTurnLootCreateEatenBerry": "{{pokemonNameWithAffix}} harvested one {{berryName}}!", + "postTurnHeal": "{{pokemonNameWithAffix}}'s {{abilityName}}\nrestored its HP a little!", + "fetchBall": "{{pokemonNameWithAffix}} found a\n{{pokeballName}}!", + "healFromBerryUse": "{{pokemonNameWithAffix}}'s {{abilityName}}\nrestored its HP!", + "arenaTrap": "{{pokemonNameWithAffix}}'s {{abilityName}}\nprevents switching!", + "postBattleLoot": "{{pokemonNameWithAffix}} picked up\n{{itemName}}!", + "postFaintContactDamage": "{{pokemonNameWithAffix}}'s {{abilityName}}\nhurt its attacker!", + "postFaintHpDamage": "{{pokemonNameWithAffix}}'s {{abilityName}}\nhurt its attacker!", + "postSummonPressure": "{{pokemonNameWithAffix}} is exerting its Pressure!", + "postSummonMoldBreaker": "{{pokemonNameWithAffix}} breaks the mold!", + "postSummonAnticipation": "{{pokemonNameWithAffix}} shuddered!", + "postSummonTurboblaze": "{{pokemonNameWithAffix}} is radiating a blazing aura!", + "postSummonTeravolt": "{{pokemonNameWithAffix}} is radiating a bursting aura!", + "postSummonDarkAura": "{{pokemonNameWithAffix}} is radiating a Dark Aura!", + "postSummonFairyAura": "{{pokemonNameWithAffix}} is radiating a Fairy Aura!", + "postSummonNeutralizingGas": "{{pokemonNameWithAffix}}'s Neutralizing Gas filled the area!", + "postSummonAsOneGlastrier": "{{pokemonNameWithAffix}} has two Abilities!", + "postSummonAsOneSpectrier": "{{pokemonNameWithAffix}} has two Abilities!", + "postSummonVesselOfRuin": "{{pokemonNameWithAffix}}'s Vessel of Ruin lowered the {{statName}}\nof all surrounding Pokémon!", + "postSummonSwordOfRuin": "{{pokemonNameWithAffix}}'s Sword of Ruin lowered the {{statName}}\nof all surrounding Pokémon!", + "postSummonTabletsOfRuin": "{{pokemonNameWithAffix}}'s Tablets of Ruin lowered the {{statName}}\nof all surrounding Pokémon!", + "postSummonBeadsOfRuin": "{{pokemonNameWithAffix}}'s Beads of Ruin lowered the {{statName}}\nof all surrounding Pokémon!", } as const; diff --git a/src/locales/es/arena-flyout.ts b/src/locales/es/arena-flyout.ts new file mode 100644 index 00000000000..376b737811f --- /dev/null +++ b/src/locales/es/arena-flyout.ts @@ -0,0 +1,49 @@ +import { SimpleTranslationEntries } from "#app/interfaces/locales"; + +export const arenaFlyout: SimpleTranslationEntries = { + // Title + "activeBattleEffects": "Efectos de Terreno Activos", + "player": "Jugador", + "neutral": "Neutral", + "enemy": "Enemigo", + + // WeatherType + "sunny": "Sol", + "rain": "Lluvia", + "sandstorm": "Tormenta de Arena", + "hail": "Granizo", + "snow": "Nieve", + "fog": "Niebla", + "heavyRain": "Diluvio", + "harshSun": "Sol Abrasador", + "strongWinds": "Turbulencias", + + // TerrainType + "misty": "Campo de Niebla", + "electric": "Campo Eléctrico", + "grassy": "Campo de Hierba", + "psychic": "Campo Psíquico", + + // ArenaTagType + "mudSport": "Chapoteo Lodo", + "waterSport": "Hidrochorro", + "spikes": "Púas", + "toxicSpikes": "Púas Tóxicas", + "mist": "Neblina", + "futureSight": "Premonición", + "doomDesire": "Deseo Oculto", + "wish": "Deseo", + "stealthRock": "Trampa Rocas", + "stickyWeb": "Red Vidcosa", + "trickRoom": "Espacio Raro", + "gravity": "Gravedad", + "reflect": "Reflejo", + "lightScreen": "Pantalla de Luz", + "auroraVeil": "Velo Aurora", + "quickGuard": "Anticipo", + "wideGuard": "Vasta Guardia", + "matBlock": "Escudo Tatami", + "craftyShield": "Truco Defensa", + "tailwind": "Viento Afín", + "happyHour": "Paga Extra", +}; diff --git a/src/locales/es/battle-info.ts b/src/locales/es/battle-info.ts new file mode 100644 index 00000000000..f24dad46c6c --- /dev/null +++ b/src/locales/es/battle-info.ts @@ -0,0 +1,5 @@ +import { SimpleTranslationEntries } from "#app/interfaces/locales"; + +export const battleInfo: SimpleTranslationEntries = { + "generation": "Generation {{generation}}", +} as const; diff --git a/src/locales/es/battle.ts b/src/locales/es/battle.ts index bc0dd1e4b78..d0efa369b8d 100644 --- a/src/locales/es/battle.ts +++ b/src/locales/es/battle.ts @@ -68,15 +68,32 @@ export const battle: SimpleTranslationEntries = { "drainMessage": "¡{{pokemonName}} tuvo su\nenergía absorbida!", "regainHealth": "¡{{pokemonName}} recuperó\nPS!", "stealEatBerry": "¡{{pokemonName}} robó la {{berryName}}\nde {{targetName}} y se la comió!", + "ppHealBerry": "{{pokemonNameWithAffix}} restored PP to its move {{moveName}}\nusing its {{berryName}}!", + "hpHealBerry": "{{pokemonNameWithAffix}} restored its health using\nits {{berryName}}!", "fainted": "¡{{pokemonNameWithAffix}} se debilitó!", - "statRose": "¡El {{stats}} de {{pokemonNameWithAffix}} ha subido!", - "statSharplyRose": "¡El {{stats}} de {{pokemonNameWithAffix}} ha subido mucho!", - "statRoseDrastically": "¡El {{stats}} de {{pokemonNameWithAffix}} ha subido muchísimo!", - "statWontGoAnyHigher": "¡El {{stats}} de {{pokemonNameWithAffix}} no puede subir más!", - "statFell": "¡El {{stats}} de {{pokemonNameWithAffix}} ha bajado!", - "statHarshlyFell": "¡El {{stats}} de {{pokemonNameWithAffix}}} ha bajado mucho!", - "statSeverelyFell": "¡El {{stats}} de {{pokemonNameWithAffix}} ha bajado muchísimo!", - "statWontGoAnyLower": "¡El {{stats}} de {{pokemonNameWithAffix}} no puede bajar más!", + "statsAnd": "y", + "stats": "Las estadísticas", + "statRose_one": "¡El {{stats}} de {{pokemonNameWithAffix}} ha subido!", + "statRose_other": "¡{{stats}} de\n{{pokemonNameWithAffix}} han subido!", + "statSharplyRose_one": "¡El {{stats}} de {{pokemonNameWithAffix}} ha subido mucho!", + "statSharplyRose_other": "¡{{stats}} de\n{{pokemonNameWithAffix}} han subido mucho!", + "statRoseDrastically_one": "¡El {{stats}} de {{pokemonNameWithAffix}} ha subido muchísimo!", + "statRoseDrastically_other": "¡{{stats}} de\n{{pokemonNameWithAffix}} han subido muchísimo!", + "statWontGoAnyHigher_one": "¡El {{stats}} de {{pokemonNameWithAffix}} no puede subir más!", + "statWontGoAnyHigher_other": "¡{{stats}} de\n{{pokemonNameWithAffix}} no pueden subir más!", + "statFell_one": "¡El {{stats}} de {{pokemonNameWithAffix}} ha bajado!", + "statFell_other": "¡{{stats}} de\n{{pokemonNameWithAffix}} han bajado!", + "statHarshlyFell_one": "¡El {{stats}} de {{pokemonNameWithAffix}} ha bajado mucho!", + "statHarshlyFell_other": "¡{{stats}} de\n{{pokemonNameWithAffix}} han bajado mucho!", + "statSeverelyFell_one": "¡El {{stats}} de {{pokemonNameWithAffix}} ha bajado muchísimo!", + "statSeverelyFell_other": "¡{{stats}} de\n{{pokemonNameWithAffix}} han bajado muchísimo!", + "statWontGoAnyLower_one": "¡El {{stats}} de {{pokemonNameWithAffix}} no puede bajar más!", + "statWontGoAnyLower_other": "¡{{stats}} de\n{{pokemonNameWithAffix}} no pueden bajar más!", + "transformedIntoType": "{{pokemonName}} transformed\ninto the {{type}} type!", + "retryBattle": "Would you like to retry from the start of the battle?", + "unlockedSomething": "{{unlockedThing}}\nhas been unlocked.", + "congratulations": "Congratulations!", + "beatModeFirstTime": "{{speciesName}} beat {{gameMode}} Mode for the first time!\nYou received {{newModifier}}!", "ppReduced": "It reduced the PP of {{targetName}}'s\n{{moveName}} by {{reduction}}!", "battlerTagsRechargingLapse": "{{pokemonNameWithAffix}} must\nrecharge!", "battlerTagsTrappedOnAdd": "{{pokemonNameWithAffix}} can no\nlonger escape!", @@ -124,11 +141,14 @@ export const battle: SimpleTranslationEntries = { "battlerTagsEnduringLapse": "{{pokemonNameWithAffix}} endured\nthe hit!", "battlerTagsSturdyLapse": "{{pokemonNameWithAffix}} endured\nthe hit!", "battlerTagsPerishSongLapse": "{{pokemonNameWithAffix}}'s perish count fell to {{turnCount}}.", + "battlerTagsCenterOfAttentionOnAdd": "{{pokemonNameWithAffix}} became the center\nof attention!", "battlerTagsTruantLapse": "{{pokemonNameWithAffix}} is\nloafing around!", "battlerTagsSlowStartOnAdd": "{{pokemonNameWithAffix}} can't\nget it going!", "battlerTagsSlowStartOnRemove": "{{pokemonNameWithAffix}} finally\ngot its act together!", "battlerTagsHighestStatBoostOnAdd": "{{pokemonNameWithAffix}}'s {{statName}}\nwas heightened!", "battlerTagsHighestStatBoostOnRemove": "The effects of {{pokemonNameWithAffix}}'s\n{{abilityName}} wore off!", + "battlerTagsMagnetRisenOnAdd": "{{pokemonNameWithAffix}} levitated with electromagnetism!", + "battlerTagsMagnetRisenOnRemove": "{{pokemonNameWithAffix}}'s electromagnetism wore off!", "battlerTagsCritBoostOnAdd": "{{pokemonNameWithAffix}} is getting\npumped!", "battlerTagsCritBoostOnRemove": "{{pokemonNameWithAffix}} relaxed.", "battlerTagsSaltCuredOnAdd": "{{pokemonNameWithAffix}} is being salt cured!", diff --git a/src/locales/es/battler-tags.ts b/src/locales/es/battler-tags.ts new file mode 100644 index 00000000000..1d897c70f3d --- /dev/null +++ b/src/locales/es/battler-tags.ts @@ -0,0 +1,12 @@ +import { SimpleTranslationEntries } from "#app/interfaces/locales"; + +export const battlerTags: SimpleTranslationEntries = { + "trappedDesc": "trapping", + "flinchedDesc": "flinching", + "confusedDesc": "confusion", + "infatuatedDesc": "infatuation", + "seedDesc": "seeding", + "nightmareDesc": "nightmares", + "ingrainDesc": "roots", + "drowsyDesc": "drowsiness", +} as const; diff --git a/src/locales/es/bgm-name.ts b/src/locales/es/bgm-name.ts index a0f7544d608..ab6de0b81b5 100644 --- a/src/locales/es/bgm-name.ts +++ b/src/locales/es/bgm-name.ts @@ -110,9 +110,9 @@ export const bgmName: SimpleTranslationEntries = { "plains": "PMD EoS - Pradera de la Cumbre del Cielo", "power_plant": "PMD EoS - Pradera Destello", "ruins": "PMD EoS - Sima Hermética", - "sea": "PMD EoS - Cueva Aguamar", + "sea": "Andr06 - Marine Mystique", // Name defined by the composer "seabed": "Firel - Seabed", // The composer thinks about a more creative name - "slum": "PMD EoS - Costa de la Cumbre del Cielo", + "slum": "Andr06 - Sneaky Snom", // Name defined by the composer "snowy_forest": "PMD EoS - Campo nevado de la Cumbre del Cielo", "space": "Firel - Aether", "swamp": "PMD EoS - Mar Circundante", diff --git a/src/locales/es/config.ts b/src/locales/es/config.ts index 341fafa4ca9..73587d0c3d3 100644 --- a/src/locales/es/config.ts +++ b/src/locales/es/config.ts @@ -1,8 +1,11 @@ import { ability } from "./ability"; import { abilityTriggers } from "./ability-trigger"; +import { arenaFlyout } from "./arena-flyout"; import { PGFachv, PGMachv } from "./achv"; import { battle } from "./battle"; +import { battleInfo } from "./battle-info"; import { battleMessageUiHandler } from "./battle-message-ui-handler"; +import { battlerTags } from "./battler-tags"; import { berry } from "./berry"; import { bgmName } from "./bgm-name"; import { biome } from "./biome"; @@ -33,6 +36,7 @@ import { pokeball } from "./pokeball"; import { pokemon } from "./pokemon"; import { pokemonInfo } from "./pokemon-info"; import { pokemonInfoContainer } from "./pokemon-info-container"; +import { pokemonSummary } from "./pokemon-summary"; import { saveSlotSelectUiHandler } from "./save-slot-select-ui-handler"; import { splashMessages } from "./splash-messages"; import { starterSelectUiHandler } from "./starter-select-ui-handler"; @@ -49,8 +53,11 @@ import { modifierSelectUiHandler } from "./modifier-select-ui-handler"; export const esConfig = { ability: ability, abilityTriggers: abilityTriggers, + arenaFlyout: arenaFlyout, battle: battle, + battleInfo: battleInfo, battleMessageUiHandler: battleMessageUiHandler, + battlerTags: battlerTags, berry: berry, bgmName: bgmName, biome: biome, @@ -82,6 +89,7 @@ export const esConfig = { pokemon: pokemon, pokemonInfo: pokemonInfo, pokemonInfoContainer: pokemonInfoContainer, + pokemonSummary: pokemonSummary, saveSlotSelectUiHandler: saveSlotSelectUiHandler, settings: settings, splashMessages: splashMessages, diff --git a/src/locales/es/menu-ui-handler.ts b/src/locales/es/menu-ui-handler.ts index bf71c2b390b..e38ac4eab3d 100644 --- a/src/locales/es/menu-ui-handler.ts +++ b/src/locales/es/menu-ui-handler.ts @@ -18,6 +18,10 @@ export const menuUiHandler: SimpleTranslationEntries = { "exportSlotSelect": "Selecciona una ranura para exportar.", "importData": "Importar Datos", "exportData": "Exportar Datos", + "linkDiscord": "Conectar Discord", + "unlinkDiscord": "Desconectar Discord", + "linkGoogle": "Conectar Google", + "unlinkGoogle": "Desconectar Google", "cancel": "Cancelar", "losingProgressionWarning": "Perderás cualquier progreso desde el inicio de la batalla. ¿Continuar?", "noEggs": "You are not hatching\nany eggs at the moment!" diff --git a/src/locales/es/menu.ts b/src/locales/es/menu.ts index 85d9d50f015..55bd9c6c038 100644 --- a/src/locales/es/menu.ts +++ b/src/locales/es/menu.ts @@ -17,6 +17,7 @@ export const menu: SimpleTranslationEntries = { "username": "Usuario", "password": "Contraseña", "login": "Iniciar Sesión", + "orUse": "O usa", "register": "Registrarse", "emptyUsername": "El usuario no puede estar vacío", "invalidLoginUsername": "El usuario no es válido", @@ -53,5 +54,9 @@ export const menu: SimpleTranslationEntries = { "no":"No", "disclaimer": "AVISO", "disclaimerDescription": "Este juego es un producto inacabado; puede tener problemas de jugabilidad (incluyendo la posible pérdida\n de datos de guardado),cambiar sin avisar, y puede o no puede ser actualizado hasta ser completado.", + "choosePokemon": "Choose a Pokémon.", + "renamePokemon": "Rename Pokémon", + "rename": "Rename", + "nickname": "Nickname", "errorServerDown": "¡Ups! Ha habido un problema al contactar con el servidor.\n\nPuedes mantener esta ventana abierta,\nel juego se reconectará automáticamente.", } as const; diff --git a/src/locales/es/modifier-type.ts b/src/locales/es/modifier-type.ts index 5d5ed5ddc5c..c3a2fb5d66a 100644 --- a/src/locales/es/modifier-type.ts +++ b/src/locales/es/modifier-type.ts @@ -58,10 +58,10 @@ export const modifierType: ModifierTypeTranslationEntries = { description: "Aumenta la potencia de los movimientos de tipo {{moveType}} de un Pokémon en un 20%.", }, "PokemonLevelIncrementModifierType": { - description: "Aumenta el nivel de un Pokémon en 1.", + description: "Aumenta el nivel de un Pokémon en {{levels}}.", }, "AllPokemonLevelIncrementModifierType": { - description: "Aumenta el nivel de todos los miembros del equipo en 1.", + description: "Aumenta el nivel de todos los miembros del equipo en {{levels}}.", }, "PokemonBaseStatBoosterModifierType": { description: "Aumenta la est. {{statName}} base del portador en un 10%.\nCuanto mayores sean tus IVs, mayor será el límite de acumulación.", @@ -182,6 +182,9 @@ export const modifierType: ModifierTypeTranslationEntries = { "SOOTHE_BELL": { name: "Camp. Alivio" }, + "SCOPE_LENS": { name: "Periscopio", description: "Aumenta la probabilidad de asestar un golpe crítico." }, + "LEEK": { name: "Puerro", description: "Puerro muy largo y duro que aumenta la probabilidad de asestar un golpe crítico. Debe llevarlo Farfetch'd." }, + "EVIOLITE": { name: "Mineral Evolutivo", description: "Roca misteriosa. El Pokémon portador aumentará su Defensa y su Defensa Especial si aún puede evolucionar." }, "SOUL_DEW": { name: "Rocío bondad", description: "Aumenta la influencia de la naturaleza de un Pokémon en sus estadísticas en un 10% (aditivo)." }, diff --git a/src/locales/es/move.ts b/src/locales/es/move.ts index 3693e008574..873e7e2da94 100644 --- a/src/locales/es/move.ts +++ b/src/locales/es/move.ts @@ -2975,7 +2975,7 @@ export const move: MoveTranslationEntries = { }, dynamaxCannon: { name: "Cañón Dinamax", - effect: "El usuario ataca emitiendo un rayo desde su núcleo. El daño infligido se duplica si el objetivo supera el nivel 200.", + effect: "El usuario ataca emitiendo un rayo desde su núcleo. Inflinge hasta el doble de daño si el objetivo tiene más niveles de lo normal." }, snipeShot: { name: "Disparo Certero", diff --git a/src/locales/es/party-ui-handler.ts b/src/locales/es/party-ui-handler.ts index b310a98840d..cbbd6734b62 100644 --- a/src/locales/es/party-ui-handler.ts +++ b/src/locales/es/party-ui-handler.ts @@ -16,6 +16,7 @@ export const partyUiHandler: SimpleTranslationEntries = { "PASS_BATON": "Relevo", "UNPAUSE_EVOLUTION": "Reanudar Evolución", "REVIVE": "Revivir", + "RENAME": "Rename", "choosePokemon": "Elige a un Pokémon.", "doWhatWithThisPokemon": "¿Que quieres hacer con este Pokémon?", diff --git a/src/locales/es/pokemon-summary.ts b/src/locales/es/pokemon-summary.ts new file mode 100644 index 00000000000..2eca4f118c6 --- /dev/null +++ b/src/locales/es/pokemon-summary.ts @@ -0,0 +1,20 @@ +import { TranslationEntries } from "#app/interfaces/locales"; + +export const pokemonSummary: TranslationEntries = { + "pokemonInfo": "Info. Pokémon", + "status": "Estado", + "powerAccuracyCategory": "Potencia\nPrecisión\nCategoría", + "type": "Tipo", + "unknownTrainer": "Desconocido", + "ot": "EO", + "nature": "Naturaleza", + "expPoints": "Puntos Exp.", + "nextLv": "Nv. siguiente", + "cancel": "Salir", + + "memoString": "Naturaleza {{natureFragment}},\n{{metFragment}}", + "metFragment": { + "normal": "encontrado al Nv. {{level}},\n{{biome}}.", + "apparently": "aparentemente encontrado al Nv. {{level}},\n{{biome}}.", + }, +} as const; diff --git a/src/locales/es/settings.ts b/src/locales/es/settings.ts index dfd6f097242..407bfab602f 100644 --- a/src/locales/es/settings.ts +++ b/src/locales/es/settings.ts @@ -96,4 +96,5 @@ export const settings: SimpleTranslationEntries = { "controller": "Controller", "gamepadSupport": "Gamepad Support", "showBgmBar": "Show Music Names", + "shopOverlayOpacity": "Opacidad de la fase de compra" } as const; diff --git a/src/locales/es/splash-messages.ts b/src/locales/es/splash-messages.ts index 0d6f050be94..47f9fa1f98f 100644 --- a/src/locales/es/splash-messages.ts +++ b/src/locales/es/splash-messages.ts @@ -34,4 +34,5 @@ export const splashMessages: SimpleTranslationEntries = { "alsoTryRadicalRed": "¡Prueba también Radical Red!", "eeveeExpo": "¡Eevee Expo!", "ynoproject": "¡YNOproject!", + "breedersInSpace": "Criadores... ¡EN EL ESPACIO!", } as const; diff --git a/src/locales/fr/ability-trigger.ts b/src/locales/fr/ability-trigger.ts index f99ff15c26f..b063a2aca68 100644 --- a/src/locales/fr/ability-trigger.ts +++ b/src/locales/fr/ability-trigger.ts @@ -9,5 +9,54 @@ export const abilityTriggers: SimpleTranslationEntries = { "poisonHeal": "{{abilityName}} de {{pokemonName}}\nrestaure un peu ses PV !", "trace": "{{pokemonName}} copie le talent {{abilityName}}\nde {{targetName}} !", "windPowerCharged": "{{pokemonName}} a été touché par la capacité {{moveName}} et se charge en électricité !", - "quickDraw": "{{pokemonName}} can act faster than normal, thanks to its Quick Draw!", + "quickDraw": "Tir Vif permet à {{pokemonName}}\nd’agir plus vite que d’habitude !", + "blockItemTheft": "{{abilityName}} de {{pokemonNameWithAffix}}\nempêche son objet d’être volé !", + "typeImmunityHeal": "{{abilityName}} de {{pokemonNameWithAffix}}\nrestaure un peu ses PV !", + "nonSuperEffectiveImmunity": "{{pokemonNameWithAffix}} évite\nles dégâts avec {{abilityName}} !", + "postDefendDisguise": "Le déguisement de {{pokemonNameWithAffix}}\ntombe !", + "moveImmunity": "Ça n'affecte pas {{pokemonNameWithAffix}}…", + "reverseDrain": "{{pokemonNameWithAffix}} aspire\nle suintement !", + "postDefendTypeChange": "{{abilityName}} de {{pokemonNameWithAffix}}\nle transforme en type {{typeName}} !", + "postDefendContactDamage": "{{pokemonNameWithAffix}} est blessé\npar son talent {{abilityName}} !", + "postDefendAbilitySwap": "{{pokemonNameWithAffix}} et sa cible\néchangent leurs talents !", + "postDefendAbilityGive": "{{pokemonNameWithAffix}} donne\nle talent {{abilityName}} à sa cible !", + "postDefendMoveDisable": "La capacité {{moveName}}\nde {{pokemonNameWithAffix}} est mise sous entrave !", + "pokemonTypeChange": "{{pokemonNameWithAffix}} prend\nle type {{moveType}} !", + "postAttackStealHeldItem": "{{pokemonNameWithAffix}} vole\nl’objet {{stolenItemType}} de {{defenderName}} !", + "postDefendStealHeldItem": "{{pokemonNameWithAffix}} vole\nl’objet {{stolenItemType}} de {{attackerName}} !", + "copyFaintedAllyAbility": "{{pokemonNameWithAffix}} reçoit\nle talent {{abilityName}} !", + "intimidateImmunity": "{{abilityName}} de {{pokemonNameWithAffix}}\nl’empêche d'être intimidé !", + "postSummonAllyHeal": "{{pokemonNameWithAffix}} boit le thé\npréparé par {{pokemonName}} !", + "postSummonClearAllyStats": "Les stats de {{pokemonNameWithAffix}}\nsont revenues à la normale !", + "postSummonTransform": "{{pokemonNameWithAffix}} prend\nl’apparence de {{targetName}} !", + "protectStat": "{{abilityName}} de {{pokemonNameWithAffix}}\nempêche {{statName}} de baisser !", + "statusEffectImmunityWithName": "{{abilityName}} de {{pokemonNameWithAffix}}\nl’empêche d’être {{statusEffectName}} !", + "statusEffectImmunity": "{{abilityName}} de {{pokemonNameWithAffix}}\nempêche tout problème de statut !", + "battlerTagImmunity": "{{abilityName}} de {{pokemonNameWithAffix}}\nempêche {{battlerTagName}} !", + "forewarn": "La capacité {{moveName}}\nde {{pokemonNameWithAffix}} a été détectée !", + "frisk": "{{pokemonNameWithAffix}} fouille {{opponentName}}\net trouve son talent {{opponentAbilityName}} !", + "postWeatherLapseHeal": "{{abilityName}} de {{pokemonNameWithAffix}}\nrestaure un peu ses PV !", + "postWeatherLapseDamage": "{{pokemonNameWithAffix}} est blessé\npar son talent {{abilityName}} !", + "postTurnLootCreateEatenBerry": "{{pokemonNameWithAffix}} a récolté\nune {{berryName}} !", + "postTurnHeal": "{{abilityName}} de {{pokemonNameWithAffix}}\nrestaure un peu ses PV !", + "fetchBall": "{{pokemonNameWithAffix}} trouve\nune {{pokeballName}} !", + "healFromBerryUse": "{{abilityName}} de {{pokemonNameWithAffix}}\nrestaure un peu ses PV !", + "arenaTrap": "{{pokemonNameWithAffix}} empêche\nles changements grâce à son talent {{abilityName}} !", + "postBattleLoot": "{{pokemonNameWithAffix}} ramasse\nl’objet {{itemName}} !", + "postFaintContactDamage": "{{pokemonNameWithAffix}} est blessé\npar son talent {{abilityName}} !", + "postFaintHpDamage": "{{pokemonNameWithAffix}} est blessé\npar son talent {{abilityName}} !", + "postSummonPressure": "{{pokemonNameWithAffix}}\naugmente la pression !", + "postSummonMoldBreaker": "{{pokemonNameWithAffix}}\nbrise le moule !", + "postSummonAnticipation": "{{pokemonNameWithAffix}}\nest tout tremblant !", + "postSummonTurboblaze": "{{pokemonNameWithAffix}} dégage\nune aura de flammes incandescentes !", + "postSummonTeravolt": "{{pokemonNameWithAffix}} dégage\nune aura électrique instable !", + "postSummonDarkAura": "{{pokemonNameWithAffix}} dégage\nune aura ténébreuse !", + "postSummonFairyAura": "{{pokemonNameWithAffix}} dégage\nune aura enchanteresse !", + "postSummonNeutralizingGas": "Le gaz inhibiteur {{pokemonNameWithAffix}}\nenvahit les lieux !", + "postSummonAsOneGlastrier": "{{pokemonNameWithAffix}}\na deux talents !", + "postSummonAsOneSpectrier": "{{pokemonNameWithAffix}}\na deux talents !", + "postSummonVesselOfRuin": "L’Urne du Fléau de {{pokemonNameWithAffix}}\naffaiblit l’{{statName}} des Pokémon alentour !", + "postSummonSwordOfRuin": "L’Épée du Fléau de {{pokemonNameWithAffix}}\naffaiblit la {{statName}} des Pokémon alentour !", + "postSummonTabletsOfRuin": "Le Bois du Fléau de {{pokemonNameWithAffix}}\naffaiblit l’{{statName}} des Pokémon alentour !", + "postSummonBeadsOfRuin": "Les Perles du Fléau de {{pokemonNameWithAffix}}\naffaiblissent la {{statName}} des Pokémon alentour !", } as const; diff --git a/src/locales/fr/arena-flyout.ts b/src/locales/fr/arena-flyout.ts new file mode 100644 index 00000000000..cf412e3b671 --- /dev/null +++ b/src/locales/fr/arena-flyout.ts @@ -0,0 +1,49 @@ +import { SimpleTranslationEntries } from "#app/interfaces/locales"; + +export const arenaFlyout: SimpleTranslationEntries = { + // Title + "activeBattleEffects": "Effets Actifs", + "player": "Vous", + "neutral": "Neutre", + "enemy": "Ennemi", + + // WeatherType + "sunny": "Soleil", + "rain": "Pluie", + "sandstorm": "Tempête de Sable", + "hail": "Grêle", + "snow": "Neige", + "fog": "Brouillard", + "heavyRain": "Pluie Battante", + "harshSun": "Soleil Brulant", + "strongWinds": "Vent Mystérieux", + + // TerrainType + "misty": "Champ Brumeux", + "electric": "Champ Électrifié", + "grassy": "Champ Herbu", + "psychic": "Champ Psychique", + + // ArenaTagType + "mudSport": "Lance-Boue", + "waterSport": "Tourniquet", + "spikes": "Picots", + "toxicSpikes": "Pics Toxik", + "mist": "Brume", + "futureSight": "Prescience", + "doomDesire": "Vœu Destructeur", + "wish": "Vœu", + "stealthRock": "Piège de Roc", + "stickyWeb": "Toile Gluante", + "trickRoom": "Distorsion", + "gravity": "Gravité", + "reflect": "Protection", + "lightScreen": "Mur Lumière", + "auroraVeil": "Voile Aurore", + "quickGuard": "Prévention", + "wideGuard": "Garde Large", + "matBlock": "Tatamigaeshi", + "craftyShield": "Vigilance", + "tailwind": "Vent Arrière", + "happyHour": "Étrennes", +}; diff --git a/src/locales/fr/battle-info.ts b/src/locales/fr/battle-info.ts new file mode 100644 index 00000000000..a0b2ad2911a --- /dev/null +++ b/src/locales/fr/battle-info.ts @@ -0,0 +1,5 @@ +import { SimpleTranslationEntries } from "#app/interfaces/locales"; + +export const battleInfo: SimpleTranslationEntries = { + "generation": "Génération {{generation}}", +} as const; diff --git a/src/locales/fr/battle.ts b/src/locales/fr/battle.ts index fc155664aaa..0ce9d73c70e 100644 --- a/src/locales/fr/battle.ts +++ b/src/locales/fr/battle.ts @@ -66,18 +66,35 @@ export const battle: SimpleTranslationEntries = { "foePokemonWithAffix": "{{pokemonName}} ennemi", "useMove": "{{pokemonNameWithAffix}} utilise\n{{moveName}} !", "stealEatBerry": "{{pokemonName}} vole et mange\nla {{berryName}} de {{targetName}} !", + "ppHealBerry": "La {{berryName}} de {{pokemonNameWithAffix}}\nrestaure les PP de sa capacité {{moveName}} !", + "hpHealBerry": "La {{berryName}} de {{pokemonNameWithAffix}}\nrestaure son énergie !", "drainMessage": "L’énergie de {{pokemonName}}\nest drainée !", "regainHealth": "{{pokemonName}} récupère\ndes PV !", "fainted": "{{pokemonNameWithAffix}}\nest K.O. !", - "statRose": "{{stats}} de {{pokemonNameWithAffix}}\naugmente !", - "statSharplyRose": "{{stats}} de {{pokemonNameWithAffix}}\naugmente beaucoup !", - "statRoseDrastically": "{{stats}} de {{pokemonNameWithAffix}}\naugmente énormément !", - "statWontGoAnyHigher": "{{stats}} de {{pokemonNameWithAffix}}\nne peut plus augmenter !", - "statFell": "{{stats}} de {{pokemonNameWithAffix}}\nbaisse !", - "statHarshlyFell": "{{stats}} de {{pokemonNameWithAffix}}\nbaisse beaucoup !", - "statSeverelyFell": "{{stats}} de {{pokemonNameWithAffix}}\nbaisse énormément !", - "statWontGoAnyLower": "{{stats}} de {{pokemonNameWithAffix}}\nne peut plus baisser !", + "statsAnd": "et", + "stats": "Les stats", + "statRose_one": "{{stats}} de {{pokemonNameWithAffix}}\naugmente !", + "statRose_other": "{{stats}} de {{pokemonNameWithAffix}}\naugmentent !", + "statSharplyRose_one": "{{stats}} de {{pokemonNameWithAffix}}\naugmente beaucoup !", + "statSharplyRose_other": "{{stats}} de {{pokemonNameWithAffix}}\naugmentent beaucoup !", + "statRoseDrastically_one": "{{stats}} de {{pokemonNameWithAffix}}\naugmente énormément !", + "statRoseDrastically_other": "{{stats}} de {{pokemonNameWithAffix}}\naugmentent énormément !", + "statWontGoAnyHigher_one": "{{stats}} de {{pokemonNameWithAffix}}\nne peut plus augmenter !", + "statWontGoAnyHigher_other": "{{stats}} de {{pokemonNameWithAffix}}\nne peuvent plus augmenter !", + "statFell_one": "{{stats}} de {{pokemonNameWithAffix}}\nbaisse !", + "statFell_other": "{{stats}} de {{pokemonNameWithAffix}}\nbaissent !", + "statHarshlyFell_one": "{{stats}} de {{pokemonNameWithAffix}}\nbaisse beaucoup !", + "statHarshlyFell_other": "{{stats}} de {{pokemonNameWithAffix}}\nbaissent beaucoup !", + "statSeverelyFell_one": "{{stats}} de {{pokemonNameWithAffix}}\nbaisse énormément !", + "statSeverelyFell_other": "{{stats}} de {{pokemonNameWithAffix}}\nbaissent énormément !", + "statWontGoAnyLower_one": "{{stats}} de {{pokemonNameWithAffix}}\nne peut plus baisser !", + "statWontGoAnyLower_other": "{{stats}} de {{pokemonNameWithAffix}}\nne peuvent plus baisser !", + "transformedIntoType": "{{pokemonName}} transformed\ninto the {{type}} type!", "ppReduced": "Les PP de la capacité {{moveName}}\nde {{targetName}} baissent de {{reduction}} !", + "retryBattle": "Voulez-vous réessayer depuis le début du combat ?", + "unlockedSomething": "{{unlockedThing}}\na été débloqué.", + "congratulations": "Félicitations !", + "beatModeFirstTime": "{{speciesName}} a battu le mode {{gameMode}} pour la première fois !\nVous avez reçu {{newModifier}} !", "battlerTagsRechargingLapse": "Le contrecoup empêche {{pokemonNameWithAffix}}\n de bouger !", "battlerTagsTrappedOnAdd": "{{pokemonNameWithAffix}}\nne peut plus s’échapper !", "battlerTagsTrappedOnRemove": "{{pokemonNameWithAffix}} est libéré\nde la capacité {{moveName}} !", @@ -124,11 +141,14 @@ export const battle: SimpleTranslationEntries = { "battlerTagsEnduringLapse": "{{pokemonNameWithAffix}}\nencaisse les coups !", "battlerTagsSturdyLapse": "{{pokemonNameWithAffix}}\nencaisse les coups !", "battlerTagsPerishSongLapse": "Le compte à rebours de Requiem\nde {{pokemonNameWithAffix}} descend à {{turnCount}} !", - "battlerTagsTruantLapse": "{{pokemonNameWithAffix}} paresse !", - "battlerTagsSlowStartOnAdd": "{{pokemonNameWithAffix}}\nn’arrive pas à se motiver !", - "battlerTagsSlowStartOnRemove": "{{pokemonNameWithAffix}}\narrive enfin à s’y mettre sérieusement !", - "battlerTagsHighestStatBoostOnAdd": "{{statName}} de {{pokemonNameWithAffix}}\nest renforcée !", - "battlerTagsHighestStatBoostOnRemove": "L’effet du talent {{abilityName}}\nde {{pokemonNameWithAffix}} se dissipe !", + "battlerTagsCenterOfAttentionOnAdd": "{{pokemonNameWithAffix}} devient\nle centre de l’attention !", + "battlerTagsTruantLapse": "{{pokemonNameWithAffix}} paresse !", + "battlerTagsSlowStartOnAdd": "{{pokemonNameWithAffix}}\nn’arrive pas à se motiver !", + "battlerTagsSlowStartOnRemove": "{{pokemonNameWithAffix}}\narrive enfin à s’y mettre sérieusement !", + "battlerTagsHighestStatBoostOnAdd": "{{statName}} de {{pokemonNameWithAffix}}\nest renforcée !", + "battlerTagsHighestStatBoostOnRemove": "L’effet du talent {{abilityName}}\nde {{pokemonNameWithAffix}} se dissipe !", + "battlerTagsMagnetRisenOnAdd": "{{pokemonNameWithAffix}} lévite\nsur un champ magnétique !", + "battlerTagsMagnetRisenOnRemove": "Le magnétisme de{{pokemonNameWithAffix}}\nse dissipe !", "battlerTagsCritBoostOnAdd": "{{pokemonNameWithAffix}}\nest prêt à tout donner !", "battlerTagsCritBoostOnRemove": "{{pokemonNameWithAffix}} se détend.", "battlerTagsSaltCuredOnAdd": "{{pokemonNameWithAffix}}\nest couvert de sel !", diff --git a/src/locales/fr/battler-tags.ts b/src/locales/fr/battler-tags.ts new file mode 100644 index 00000000000..971fe4e00d1 --- /dev/null +++ b/src/locales/fr/battler-tags.ts @@ -0,0 +1,12 @@ +import { SimpleTranslationEntries } from "#app/interfaces/locales"; + +export const battlerTags: SimpleTranslationEntries = { + "trappedDesc": "le piège", + "flinchedDesc": "la peur", + "confusedDesc": "la confusion", + "infatuatedDesc": "l’amour", + "seedDesc": "l’infection", + "nightmareDesc": "les cauchemars", + "ingrainDesc": "l’enracinement", + "drowsyDesc": "la somnolence", +} as const; diff --git a/src/locales/fr/bgm-name.ts b/src/locales/fr/bgm-name.ts index 15ec145a6ff..c6453a919cf 100644 --- a/src/locales/fr/bgm-name.ts +++ b/src/locales/fr/bgm-name.ts @@ -110,9 +110,9 @@ export const bgmName: SimpleTranslationEntries = { "plains": "PDM EdS - Pic Céleste (prairie)", "power_plant": "PDM EdS - Plaines Élek", "ruins": "PDM EdS - Ruine Scellée", - "sea": "PDM EdS - Caverne Saline", + "sea": "Andr06 - Marine Mystique", // Name defined by the composer "seabed": "Firel - Seabed", // The composer thinks about a more creative name - "slum": "PDM EdS - Pic Céleste (côte)", + "slum": "Andr06 - Sneaky Snom", // Name defined by the composer "snowy_forest": "PDM EdS - Pic Céleste (plaine enneigée)", "space": "Firel - Aether", "swamp": "PDM EdS - Mer Fermée", diff --git a/src/locales/fr/config.ts b/src/locales/fr/config.ts index d8f9a6601c1..f6bc1ac68d1 100644 --- a/src/locales/fr/config.ts +++ b/src/locales/fr/config.ts @@ -1,8 +1,11 @@ import { ability } from "./ability"; import { abilityTriggers } from "./ability-trigger"; +import { arenaFlyout } from "./arena-flyout"; import { PGFachv, PGMachv } from "./achv"; import { battle } from "./battle"; +import { battleInfo } from "./battle-info"; import { battleMessageUiHandler } from "./battle-message-ui-handler"; +import { battlerTags } from "./battler-tags"; import { berry } from "./berry"; import { bgmName } from "./bgm-name"; import { biome } from "./biome"; @@ -33,6 +36,7 @@ import { pokeball } from "./pokeball"; import { pokemon } from "./pokemon"; import { pokemonInfo } from "./pokemon-info"; import { pokemonInfoContainer } from "./pokemon-info-container"; +import { pokemonSummary } from "./pokemon-summary"; import { saveSlotSelectUiHandler } from "./save-slot-select-ui-handler"; import { splashMessages } from "./splash-messages"; import { starterSelectUiHandler } from "./starter-select-ui-handler"; @@ -49,8 +53,11 @@ import { modifierSelectUiHandler } from "./modifier-select-ui-handler"; export const frConfig = { ability: ability, abilityTriggers: abilityTriggers, + arenaFlyout: arenaFlyout, battle: battle, + battleInfo: battleInfo, battleMessageUiHandler: battleMessageUiHandler, + battlerTags: battlerTags, berry: berry, bgmName: bgmName, biome: biome, @@ -82,6 +89,7 @@ export const frConfig = { pokemon: pokemon, pokemonInfo: pokemonInfo, pokemonInfoContainer: pokemonInfoContainer, + pokemonSummary: pokemonSummary, saveSlotSelectUiHandler: saveSlotSelectUiHandler, settings: settings, splashMessages: splashMessages, diff --git a/src/locales/fr/menu-ui-handler.ts b/src/locales/fr/menu-ui-handler.ts index 3eabc132f6b..70cf05fe984 100644 --- a/src/locales/fr/menu-ui-handler.ts +++ b/src/locales/fr/menu-ui-handler.ts @@ -18,6 +18,10 @@ export const menuUiHandler: SimpleTranslationEntries = { "exportSlotSelect": "Sélectionnez l’emplacement depuis lequel exporter les données.", "importData": "Importer données", "exportData": "Exporter données", + "linkDiscord": "Link Discord", + "unlinkDiscord": "Unlink Discord", + "linkGoogle": "Link Google", + "unlinkGoogle": "Unlink Google", "cancel": "Retour", "losingProgressionWarning": "Vous allez perdre votre progression depuis le début du combat. Continuer ?", "noEggs": "Vous ne faites actuellement\néclore aucun Œuf !" diff --git a/src/locales/fr/menu.ts b/src/locales/fr/menu.ts index 3aee5c42103..41927f83b1c 100644 --- a/src/locales/fr/menu.ts +++ b/src/locales/fr/menu.ts @@ -12,6 +12,7 @@ export const menu: SimpleTranslationEntries = { "username": "Nom d’utilisateur", "password": "Mot de passe", "login": "Connexion", + "orUse": "Ou utilisez", "register": "S’inscrire", "emptyUsername": "Le nom d’utilisateur est manquant", "invalidLoginUsername": "Le nom d’utilisateur n’est pas valide", @@ -48,5 +49,9 @@ export const menu: SimpleTranslationEntries = { "no":"Non", "disclaimer": "AVERTISSEMENT", "disclaimerDescription": "Ce jeu n’est pas un produit fini et peut contenir des problèmes de jouabilité, dont de possibles pertes de sauvegardes,\ndes modifications sans avertissement et pourrait ou non encore être mis à jour ou terminé.", + "choosePokemon": "Sélectionnez un Pokémon.", + "renamePokemon": "Renommer Pokémon", + "rename": "Renommer", + "nickname": "Surnom", "errorServerDown": "Oupsi ! Un problème de connexion au serveur est survenu.\n\nVous pouvez garder cette fenêtre ouverte,\nle jeu se reconnectera automatiquement.", } as const; diff --git a/src/locales/fr/modifier-type.ts b/src/locales/fr/modifier-type.ts index 498b064de75..be9aa17b9ea 100644 --- a/src/locales/fr/modifier-type.ts +++ b/src/locales/fr/modifier-type.ts @@ -58,10 +58,10 @@ export const modifierType: ModifierTypeTranslationEntries = { description: "Augmente de 20% la puissance des capacités de type {{moveType}} d’un Pokémon.", }, "PokemonLevelIncrementModifierType": { - description: "Fait monter un Pokémon d’un niveau.", + description: "Fait monter un Pokémon de {{levels}} niveau·x.", }, "AllPokemonLevelIncrementModifierType": { - description: "Fait monter toute l’équipe d’un niveau.", + description: "Fait monter toute l’équipe de {{levels}} niveau·x.", }, "PokemonBaseStatBoosterModifierType": { description: "Augmente de 10% {{statName}} de base de son porteur. Plus les IV sont hauts, plus il peut en porter.", @@ -182,6 +182,9 @@ export const modifierType: ModifierTypeTranslationEntries = { "SOOTHE_BELL": { name: "Grelot Zen" }, + "SCOPE_LENS": { name: "Lentilscope", description: "Une lentille qui augmente le taux de critiques du porteur." }, + "LEEK": { name: "Poireau", description: "Objet à faire tenir à Canarticho. Un poireau très long et solide qui augmente son taux de critiques." }, + "EVIOLITE": { name: "Évoluroc", description: "Un étrange concentré d’évolution qui augmente la Défense et la Défense Spéciale d’un Pokémon pouvant évoluer." }, "SOUL_DEW": { name: "Rosée Âme", description: "Augmente de 10% l’influence de la nature d’un Pokémon sur ses statistiques (cumulatif)." }, diff --git a/src/locales/fr/move.ts b/src/locales/fr/move.ts index 3fea8995694..425d9226d57 100644 --- a/src/locales/fr/move.ts +++ b/src/locales/fr/move.ts @@ -2975,7 +2975,7 @@ export const move: MoveTranslationEntries = { }, "dynamaxCannon": { name: "Canon Dynamax", - effect: "Le lanceur attaque en émettant un laser depuis son noyau. Cette capacité inflige deux fois plus de dégâts si l’adversaire est level 200." + effect: "Le lanceur attaque en libérant l’énergie concentrée dans son noyau. Inflige jusqu’à deux fois plus de dégâts si l’adversaire a un niveau très élevé." }, "snipeShot": { name: "Tir de Précision", diff --git a/src/locales/fr/party-ui-handler.ts b/src/locales/fr/party-ui-handler.ts index b1324f52398..158a6e8416a 100644 --- a/src/locales/fr/party-ui-handler.ts +++ b/src/locales/fr/party-ui-handler.ts @@ -16,6 +16,7 @@ export const partyUiHandler: SimpleTranslationEntries = { "PASS_BATON": "Relais", "UNPAUSE_EVOLUTION": "Réactiver Évolution", "REVIVE": "Ranimer", + "RENAME": "Renommer", "choosePokemon": "Sélectionnez un Pokémon.", "doWhatWithThisPokemon": "Que faire avec ce Pokémon ?", diff --git a/src/locales/fr/pokemon-summary.ts b/src/locales/fr/pokemon-summary.ts new file mode 100644 index 00000000000..8f21a942c36 --- /dev/null +++ b/src/locales/fr/pokemon-summary.ts @@ -0,0 +1,20 @@ +import { TranslationEntries } from "#app/interfaces/locales"; + +export const pokemonSummary: TranslationEntries = { + "pokemonInfo": "Info Pokémon", + "status": "Statut", + "powerAccuracyCategory": "Puissance\nPrécision\nCatégorie", + "type": "Type", + "unknownTrainer": "Inconnu", + "ot": "D.O.", + "nature": "de nature", + "expPoints": "Points Exp.", + "nextLv": "N. suivant", + "cancel": "Annuler", + + "memoString": "{{natureFragment}} de nature,\n{{metFragment}}", + "metFragment": { + "normal": "rencontré au N.{{level}},\n{{biome}}.", + "apparently": "apparemment rencontré au N.{{level}},\n{{biome}}.", + }, +} as const; diff --git a/src/locales/fr/settings.ts b/src/locales/fr/settings.ts index cd85b0f8cb9..9e3bd04923a 100644 --- a/src/locales/fr/settings.ts +++ b/src/locales/fr/settings.ts @@ -95,5 +95,6 @@ export const settings: SimpleTranslationEntries = { "mute": "Muet", "controller": "Controller", "gamepadSupport": "Gamepad Support", - "showBgmBar": "Montrer titre de la musique", + "showBgmBar": "Titre de la musique", + "shopOverlayOpacity": "Opacité boutique" } as const; diff --git a/src/locales/fr/splash-messages.ts b/src/locales/fr/splash-messages.ts index 13de7f28116..1ee76ab9a13 100644 --- a/src/locales/fr/splash-messages.ts +++ b/src/locales/fr/splash-messages.ts @@ -34,4 +34,5 @@ export const splashMessages: SimpleTranslationEntries = { "alsoTryRadicalRed": "Essaye aussi Radical Red !", "eeveeExpo": "Eevee Expo !", "ynoproject": "YNOproject !", + "breedersInSpace": "Des Éleveurs dans l’espace !", } as const; diff --git a/src/locales/it/ability-trigger.ts b/src/locales/it/ability-trigger.ts index fd18147ac5a..4e965eacf32 100644 --- a/src/locales/it/ability-trigger.ts +++ b/src/locales/it/ability-trigger.ts @@ -5,7 +5,58 @@ export const abilityTriggers: SimpleTranslationEntries = { "badDreams": "{{pokemonName}} è tormentato dagli incubi!", "costar": "{{pokemonName}} ha copiato le modifiche alle statistiche\ndel suo alleato {{allyName}}!", "iceFaceAvoidedDamage": "{{pokemonName}} ha evitato\ni danni grazie a {{abilityName}}!", + "perishBody": "{{abilityName}} di {{pokemonName}}\nmanderà KO entrambi i Pokémon dopo 3 turni!", + "poisonHeal": "{{pokemonName}} recupera alcuni PS\ncon {{abilityName}}!", "trace": "L'abilità {{abilityName}} di {{targetName}}\nviene copiata da {{pokemonName}} con Traccia!", "windPowerCharged": "Venire colpito da {{moveName}} ha caricato {{pokemonName}}!", "quickDraw":"{{pokemonName}} agisce più rapidamente del normale grazie a Colpolesto!", + "blockItemTheft": "{{abilityName}} di {{pokemonNameWithAffix}}\nlo rende immune ai furti!", + "typeImmunityHeal": "{{pokemonName}} recupera alcuni PS\ncon {{abilityName}}!", + "nonSuperEffectiveImmunity": "{{pokemonNameWithAffix}} evita il colpo\ncon {{abilityName}}!", + "postDefendDisguise": "{{pokemonNameWithAffix}} è stato smascherato!", + "moveImmunity": "Non ha effetto su {{pokemonNameWithAffix}}!", + "reverseDrain": "{{pokemonNameWithAffix}} ha assorbito la melma!", + "postDefendTypeChange": "{{abilityName}} di {{pokemonNameWithAffix}}\nlo ha reso di tipo {{typeName}}!", + "postDefendContactDamage": "{{abilityName}} di {{pokemonNameWithAffix}} ha\ndanneggiato il Pokémon che l'ha attaccato!", + "postDefendAbilitySwap": "{{pokemonNameWithAffix}} scambia\nla sua abilità con il bersaglio", + "postDefendAbilityGive": "{{abilityName}} di {{pokemonNameWithAffix}}\nviene ceduta al bersaglio!", + "postDefendMoveDisable": "La mossa {{moveName}} di {{pokemonNameWithAffix}}\nè stata bloccata!", + "pokemonTypeChange": "{{pokemonNameWithAffix}} è diventato di tipo {{moveType}}!", + "postAttackStealHeldItem": "{{pokemonNameWithAffix}} ruba\n{{stolenItemType}} di {{defenderName}}!", + "postDefendStealHeldItem": "{{pokemonNameWithAffix}} ruba\n{{stolenItemType}} di {{attackerName}}!", + "copyFaintedAllyAbility": "L'abilità {{abilityName}} di {{pokemonNameWithAffix}} è passata all'alleato!", + "intimidateImmunity": "{{pokemonNameWithAffix}}'s {{abilityName}} prevented it from being Intimidated!", + "postSummonAllyHeal": "{{pokemonNameWithAffix}} drank down all the\nmatcha that {{pokemonName}} made!", + "postSummonClearAllyStats": "{{pokemonNameWithAffix}}'s stat changes\nwere removed!", + "postSummonTransform": "{{pokemonNameWithAffix}} transformed\ninto {{targetName}}!", + "protectStat": "{{pokemonNameWithAffix}}'s {{abilityName}}\nprevents lowering its {{statName}}!", + "statusEffectImmunityWithName": "{{pokemonNameWithAffix}}'s {{abilityName}}\nprevents {{statusEffectName}}!", + "statusEffectImmunity": "{{pokemonNameWithAffix}}'s {{abilityName}}\nprevents status problems!", + "battlerTagImmunity": "{{pokemonNameWithAffix}}'s {{abilityName}}\nprevents {{battlerTagName}}!", + "forewarn": "{{pokemonNameWithAffix}} was forewarned about {{moveName}}!", + "frisk": "{{pokemonNameWithAffix}} frisked {{opponentName}}'s {{opponentAbilityName}}!", + "postWeatherLapseHeal": "{{pokemonNameWithAffix}}'s {{abilityName}}\nrestored its HP a little!", + "postWeatherLapseDamage": "{{pokemonNameWithAffix}} is hurt\nby its {{abilityName}}!", + "postTurnLootCreateEatenBerry": "{{pokemonNameWithAffix}} harvested one {{berryName}}!", + "postTurnHeal": "{{pokemonNameWithAffix}}'s {{abilityName}}\nrestored its HP a little!", + "fetchBall": "{{pokemonNameWithAffix}} found a\n{{pokeballName}}!", + "healFromBerryUse": "{{pokemonNameWithAffix}}'s {{abilityName}}\nrestored its HP!", + "arenaTrap": "{{pokemonNameWithAffix}}'s {{abilityName}}\nprevents switching!", + "postBattleLoot": "{{pokemonNameWithAffix}} picked up\n{{itemName}}!", + "postFaintContactDamage": "{{pokemonNameWithAffix}}'s {{abilityName}}\nhurt its attacker!", + "postFaintHpDamage": "{{pokemonNameWithAffix}}'s {{abilityName}}\nhurt its attacker!", + "postSummonPressure": "{{pokemonNameWithAffix}} is exerting its Pressure!", + "postSummonMoldBreaker": "{{pokemonNameWithAffix}} breaks the mold!", + "postSummonAnticipation": "{{pokemonNameWithAffix}} shuddered!", + "postSummonTurboblaze": "{{pokemonNameWithAffix}} is radiating a blazing aura!", + "postSummonTeravolt": "{{pokemonNameWithAffix}} is radiating a bursting aura!", + "postSummonDarkAura": "{{pokemonNameWithAffix}} is radiating a Dark Aura!", + "postSummonFairyAura": "{{pokemonNameWithAffix}} is radiating a Fairy Aura!", + "postSummonNeutralizingGas": "{{pokemonNameWithAffix}}'s Neutralizing Gas filled the area!", + "postSummonAsOneGlastrier": "{{pokemonNameWithAffix}} has two Abilities!", + "postSummonAsOneSpectrier": "{{pokemonNameWithAffix}} has two Abilities!", + "postSummonVesselOfRuin": "{{pokemonNameWithAffix}}'s Vessel of Ruin lowered the {{statName}}\nof all surrounding Pokémon!", + "postSummonSwordOfRuin": "{{pokemonNameWithAffix}}'s Sword of Ruin lowered the {{statName}}\nof all surrounding Pokémon!", + "postSummonTabletsOfRuin": "{{pokemonNameWithAffix}}'s Tablets of Ruin lowered the {{statName}}\nof all surrounding Pokémon!", + "postSummonBeadsOfRuin": "{{pokemonNameWithAffix}}'s Beads of Ruin lowered the {{statName}}\nof all surrounding Pokémon!", } as const; diff --git a/src/locales/it/arena-flyout.ts b/src/locales/it/arena-flyout.ts new file mode 100644 index 00000000000..9e1e55226ea --- /dev/null +++ b/src/locales/it/arena-flyout.ts @@ -0,0 +1,49 @@ +import { SimpleTranslationEntries } from "#app/interfaces/locales"; + +export const arenaFlyout: SimpleTranslationEntries = { + // Title + "activeBattleEffects": "Effetti attivi in campo", + "player": "Giocatore", + "neutral": "Neutrali", + "enemy": "Nemico", + + // WeatherType + "sunny": "Sole", + "rain": "Pioggia", + "sandstorm": "Tempesta di sabbia", + "hail": "Grandine", + "snow": "Neve", + "fog": "Nebbia", + "heavyRain": "Acquazzone", + "harshSun": "Luce accecante", + "strongWinds": "Corrente d'aria misteriosa", + + // TerrainType + "misty": "Campo Nebbioso", + "electric": "Campo Elettrico", + "grassy": "Campo Erboso", + "psychic": "Campo Psichico", + + // ArenaTagType + "mudSport": "Fangata", + "waterSport": "Docciascudo", + "spikes": "Punte", + "toxicSpikes": "Fielepunte", + "mist": "Nebbia", + "futureSight": "Divinazione", + "doomDesire": "Desiderio Fatale", + "wish": "Desiderio", + "stealthRock": "Levitoroccia", + "stickyWeb": "Rete Vischiosa", + "trickRoom": "Distortozona", + "gravity": "Gravità", + "reflect": "Riflesso", + "lightScreen": "Schermoluce", + "auroraVeil": "Velaurora", + "quickGuard": "Anticipo", + "wideGuard": "Bodyguard", + "matBlock": "Ribaltappeto", + "craftyShield": "Truccodifesa", + "tailwind": "Ventoincoda", + "happyHour": "Cuccagna", +}; diff --git a/src/locales/it/battle-info.ts b/src/locales/it/battle-info.ts new file mode 100644 index 00000000000..195ad0616e0 --- /dev/null +++ b/src/locales/it/battle-info.ts @@ -0,0 +1,5 @@ +import { SimpleTranslationEntries } from "#app/interfaces/locales"; + +export const battleInfo: SimpleTranslationEntries = { + "generation": "Generazione {{generation}}", +} as const; diff --git a/src/locales/it/battle.ts b/src/locales/it/battle.ts index 787888e333b..7ae8ec9f397 100644 --- a/src/locales/it/battle.ts +++ b/src/locales/it/battle.ts @@ -57,27 +57,44 @@ export const battle: SimpleTranslationEntries = { "escapeVerbSwitch": "cambiando", "escapeVerbFlee": "fuggendo", "notDisabled": "{{moveName}} di {{pokemonName}} non è più\ndisabilitata!", - "turnEndHpRestore": "{{pokemonName}}'s HP was restored.", - "hpIsFull": "{{pokemonName}}'s\nHP is full!", + "turnEndHpRestore": "{{pokemonName}} ha recuperato dei PS.", + "hpIsFull": "{{pokemonName}} ha già\ntutti i PS!", "skipItemQuestion": "Sei sicuro di non voler prendere nessun oggetto?", "eggHatching": "Oh?", "ivScannerUseQuestion": "Vuoi usare lo scanner di IV su {{pokemonName}}?", - "stealEatBerry": "{{pokemonName}} stole and ate\n{{targetName}}'s {{berryName}}!", + "stealEatBerry": "{{pokemonName}} ha rubato e mangiato\nla {{berryName}} di {{targetName}}!", + "ppHealBerry": "{{pokemonNameWithAffix}} recupera i PP della mossa {{moveName}}\ncon la sua {{berryName}}!", + "hpHealBerry": "{{pokemonNameWithAffix}} ristabilisce la sua salute\ncon la sua {{berryName}}!", "wildPokemonWithAffix": "{{pokemonName}} selvatico", "foePokemonWithAffix": "{{pokemonName}} avversario", "useMove": "{{pokemonNameWithAffix}} usa {{moveName}}!", "drainMessage": "Viene prelevata energia\n da{{pokemonName}}!", "regainHealth": "{{pokemonName}} ha rigenerato\npunti salute!", "fainted": "{{pokemonNameWithAffix}} non è più in\ngrado di combattere!", - "statRose": "{{pokemonNameWithAffix}}'s {{stats}} è aumentato/a!", - "statSharplyRose": "{{pokemonNameWithAffix}}'s {{stats}} è aumentato/a molto!", - "statRoseDrastically": "{{pokemonNameWithAffix}}'s {{stats}} è aumentato/a drasticamente!", - "statWontGoAnyHigher": "{{pokemonNameWithAffix}}'s {{stats}} non può aumentare più di così!", - "statFell": "{{pokemonNameWithAffix}}'s {{stats}} è diminuito/a!", - "statHarshlyFell": "{{pokemonNameWithAffix}}'s {{stats}} è diminuito/a molto!", - "statSeverelyFell": "{{pokemonNameWithAffix}}'s {{stats}} è diminuito/a drasticamente!", - "statWontGoAnyLower": "{{pokemonNameWithAffix}}'s {{stats}} non può diminuire più di così!", - "ppReduced": "It reduced the PP of {{targetName}}'s\n{{moveName}} by {{reduction}}!", + "statsAnd": "and", + "stats": "Stats", + "statRose_one": "{{pokemonNameWithAffix}}'s {{stats}} è aumentato/a!", + "statRose_other": "{{pokemonNameWithAffix}}'s {{stats}} rose!", + "statSharplyRose_one": "{{pokemonNameWithAffix}}'s {{stats}} è aumentato/a molto!", + "statSharplyRose_other": "{{pokemonNameWithAffix}}'s {{stats}} sharply rose!", + "statRoseDrastically_one": "{{pokemonNameWithAffix}}'s {{stats}} è aumentato/a drasticamente!", + "statRoseDrastically_other": "{{pokemonNameWithAffix}}'s {{stats}} rose drastically!", + "statWontGoAnyHigher_one": "{{pokemonNameWithAffix}}'s {{stats}} non può aumentare più di così!", + "statWontGoAnyHigher_other": "{{pokemonNameWithAffix}}'s {{stats}} won't go any higher!", + "statFell_one": "{{pokemonNameWithAffix}}'s {{stats}} è diminuito/a!", + "statFell_other": "{{pokemonNameWithAffix}}'s {{stats}} fell!", + "statHarshlyFell_one": "{{pokemonNameWithAffix}}'s {{stats}} è diminuito/a molto!", + "statHarshlyFell_other": "{{pokemonNameWithAffix}}'s {{stats}} harshly fell!", + "statSeverelyFell_one": "{{pokemonNameWithAffix}}'s {{stats}} è diminuito/a drasticamente!", + "statSeverelyFell_other": "{{pokemonNameWithAffix}}'s {{stats}} severely fell!", + "statWontGoAnyLower_one": "{{pokemonNameWithAffix}}'s {{stats}} non può diminuire più di così!", + "statWontGoAnyLower_other": "{{pokemonNameWithAffix}}'s {{stats}} won't go any lower!", + "transformedIntoType": "{{pokemonName}} transformed\ninto the {{type}} type!", + "retryBattle": "Vuoi riprovare dall'inizio della lotta?", + "unlockedSomething": "{{unlockedThing}}\nè stato/a sbloccato/a.", + "congratulations": "Congratulazioni!", + "beatModeFirstTime": "{{speciesName}} ha completato la modalità {{gameMode}} per la prima volta!\nHai ricevuto {{newModifier}}!", + "ppReduced": "I PP della mossa {{moveName}} di\n{{targetName}} sono stati ridotti di {{reduction}}!", "battlerTagsRechargingLapse": "{{pokemonNameWithAffix}} deve\nricaricarsi!", "battlerTagsTrappedOnAdd": "{{pokemonNameWithAffix}} non può\npiù fuggire!", "battlerTagsTrappedOnRemove": "{{pokemonNameWithAffix}} è stato liberato\nda {{moveName}}", @@ -124,11 +141,14 @@ export const battle: SimpleTranslationEntries = { "battlerTagsEnduringLapse": "{{pokemonNameWithAffix}} resiste\nal colpo!", "battlerTagsSturdyLapse": "{{pokemonNameWithAffix}} ha resistito\ngrazie a Vigore!", "battlerTagsPerishSongLapse": "Il conto alla rovescia di Ultimocanto per {{pokemonNameWithAffix}} scende a {{turnCount}}.", + "battlerTagsCenterOfAttentionOnAdd": "{{pokemonNameWithAffix}} became the center\nof attention!", "battlerTagsTruantLapse": "{{pokemonNameWithAffix}} sta\nciondolando!", "battlerTagsSlowStartOnAdd": "{{pokemonNameWithAffix}} non\ningrana!", "battlerTagsSlowStartOnRemove": "{{pokemonNameWithAffix}} ritrova\nlo slancio!", "battlerTagsHighestStatBoostOnAdd": "{{statName}} di {{pokemonNameWithAffix}}\nviene aumentato/a!", "battlerTagsHighestStatBoostOnRemove": "Gli effetti di {{abilityName}}\ndi {{pokemonNameWithAffix}} sono cessati!", + "battlerTagsMagnetRisenOnAdd": "{{pokemonNameWithAffix}} levitated with electromagnetism!", + "battlerTagsMagnetRisenOnRemove": "{{pokemonNameWithAffix}}'s electromagnetism wore off!", "battlerTagsCritBoostOnAdd": "{{pokemonNameWithAffix}} si prepara\nalla lotta!", "battlerTagsCritBoostOnRemove": "{{pokemonNameWithAffix}} si è rilassato.", "battlerTagsSaltCuredOnAdd": "{{pokemonNameWithAffix}} è stato messo sotto sale!", diff --git a/src/locales/it/battler-tags.ts b/src/locales/it/battler-tags.ts new file mode 100644 index 00000000000..1d897c70f3d --- /dev/null +++ b/src/locales/it/battler-tags.ts @@ -0,0 +1,12 @@ +import { SimpleTranslationEntries } from "#app/interfaces/locales"; + +export const battlerTags: SimpleTranslationEntries = { + "trappedDesc": "trapping", + "flinchedDesc": "flinching", + "confusedDesc": "confusion", + "infatuatedDesc": "infatuation", + "seedDesc": "seeding", + "nightmareDesc": "nightmares", + "ingrainDesc": "roots", + "drowsyDesc": "drowsiness", +} as const; diff --git a/src/locales/it/bgm-name.ts b/src/locales/it/bgm-name.ts index 87d90dabc9d..01fb86b281d 100644 --- a/src/locales/it/bgm-name.ts +++ b/src/locales/it/bgm-name.ts @@ -110,9 +110,9 @@ export const bgmName: SimpleTranslationEntries = { "plains": "PMD EoS Sky Peak Prairie", "power_plant": "PMD EoS Far Amp Plains", "ruins": "PMD EoS Deep Sealed Ruin", - "sea": "PMD EoS Brine Cave", + "sea": "Andr06 - Marine Mystique", // Name defined by the composer "seabed": "Firel - Seabed", // The composer thinks about a more creative name - "slum": "PMD EoS Sky Peak Coast", + "slum": "Andr06 - Sneaky Snom", // Name defined by the composer "snowy_forest": "PMD EoS Sky Peak Snowfield", "space": "Firel - Aether", "swamp": "PMD EoS Surrounded Sea", diff --git a/src/locales/it/config.ts b/src/locales/it/config.ts index 5b370b00e4b..49ebe6225a4 100644 --- a/src/locales/it/config.ts +++ b/src/locales/it/config.ts @@ -1,8 +1,11 @@ import { ability } from "./ability"; import { abilityTriggers } from "./ability-trigger"; +import { arenaFlyout } from "./arena-flyout"; import { PGFachv, PGMachv } from "./achv"; import { battle } from "./battle"; +import { battleInfo } from "./battle-info"; import { battleMessageUiHandler } from "./battle-message-ui-handler"; +import { battlerTags } from "./battler-tags"; import { berry } from "./berry"; import { bgmName } from "./bgm-name"; import { biome } from "./biome"; @@ -33,6 +36,7 @@ import { pokeball } from "./pokeball"; import { pokemon } from "./pokemon"; import { pokemonInfo } from "./pokemon-info"; import { pokemonInfoContainer } from "./pokemon-info-container"; +import { pokemonSummary } from "./pokemon-summary"; import { saveSlotSelectUiHandler } from "./save-slot-select-ui-handler"; import { splashMessages } from "./splash-messages"; import { starterSelectUiHandler } from "./starter-select-ui-handler"; @@ -49,8 +53,11 @@ import { modifierSelectUiHandler } from "./modifier-select-ui-handler"; export const itConfig = { ability: ability, abilityTriggers: abilityTriggers, + arenaFlyout: arenaFlyout, battle: battle, + battleInfo: battleInfo, battleMessageUiHandler: battleMessageUiHandler, + battlerTags: battlerTags, berry: berry, bgmName: bgmName, biome: biome, @@ -82,6 +89,7 @@ export const itConfig = { pokemon: pokemon, pokemonInfo: pokemonInfo, pokemonInfoContainer: pokemonInfoContainer, + pokemonSummary: pokemonSummary, saveSlotSelectUiHandler: saveSlotSelectUiHandler, settings: settings, splashMessages: splashMessages, diff --git a/src/locales/it/egg.ts b/src/locales/it/egg.ts index c51f12065a1..5e5ddee2e2f 100644 --- a/src/locales/it/egg.ts +++ b/src/locales/it/egg.ts @@ -16,13 +16,13 @@ export const egg: SimpleTranslationEntries = { "selectMachine": "Seleziona un macchinario.", "notEnoughVouchers": "Non hai abbastanza biglietti!", "tooManyEggs": "Hai troppe uova!", - "pull": "Estrazione", - "pulls": "Estrazioni", - "sameSpeciesEgg": "{{species}} will hatch from this egg!", + "pull": "tiro", + "pulls": "tiri", + "sameSpeciesEgg": "{{species}} si schiuderà da quest'uovo!", "hatchFromTheEgg": "Dall’Uovo è nato {{pokemonName}}!", - "eggMoveUnlock": "Egg Move unlocked: {{moveName}}", - "rareEggMoveUnlock": "Rare Egg Move unlocked: {{moveName}}", - "moveUPGacha": "Move UP!", - "shinyUPGacha": "Shiny UP!", - "legendaryUPGacha": "UP!", + "eggMoveUnlock": "Mossa da uovo sbloccata: {{moveName}}", + "rareEggMoveUnlock": "Mossa da uovo rara sbloccata: {{moveName}}", + "moveUPGacha": "Mossa +", + "shinyUPGacha": "Shiny +", + "legendaryUPGacha": "+", } as const; diff --git a/src/locales/it/game-stats-ui-handler.ts b/src/locales/it/game-stats-ui-handler.ts index f4b5f80e23b..904acbf610d 100644 --- a/src/locales/it/game-stats-ui-handler.ts +++ b/src/locales/it/game-stats-ui-handler.ts @@ -9,13 +9,13 @@ export const gameStatsUiHandler: SimpleTranslationEntries = { "speciesSeen": "Specie viste", "speciesCaught": "Specie catturate", "ribbonsOwned": "Fiocchi ottenuti", - "classicRuns": "Run in modalità classica", - "classicWins": "Vittorie in modalità classica", + "classicRuns": "Totale run (classica)", + "classicWins": "Totale Vittorie (classica)", "dailyRunAttempts": "Tentativi di run giornaliere", "dailyRunWins": "Run giornaliere vinte", "endlessRuns": "Run in modalità infinita", - "highestWaveEndless": "Orda più alta raggiunta (Infinita)", - "highestMoney": "Patrimonio maggiore posseduto", + "highestWaveEndless": "Orda più alta (Infinita)", + "highestMoney": "Miglior patrimonio", "highestDamage": "Danni maggiori inflitti", "highestHPHealed": "PS maggiori rigenerati", "pokemonEncountered": "Pokémon incontrati", diff --git a/src/locales/it/menu-ui-handler.ts b/src/locales/it/menu-ui-handler.ts index 5bd845448aa..58e48574476 100644 --- a/src/locales/it/menu-ui-handler.ts +++ b/src/locales/it/menu-ui-handler.ts @@ -16,6 +16,10 @@ export const menuUiHandler: SimpleTranslationEntries = { "importSlotSelect": "Seleziona uno slot in cui importare.", "exportSession": "Esporta sessione", "exportSlotSelect": "Seleziona uno slot da cui esportare.", + "linkDiscord": "Link Discord", + "unlinkDiscord": "Unlink Discord", + "linkGoogle": "Link Google", + "unlinkGoogle": "Unlink Google", "importData": "Importa dati", "exportData": "Esporta dati", "cancel": "Annulla", diff --git a/src/locales/it/menu.ts b/src/locales/it/menu.ts index 3e083d3d374..9766708f7ae 100644 --- a/src/locales/it/menu.ts +++ b/src/locales/it/menu.ts @@ -17,6 +17,7 @@ export const menu: SimpleTranslationEntries = { "username": "Nome utente", "password": "Password", "login": "Accedi", + "orUse": "Or use", "register": "Registrati", "emptyUsername": "Nome utente mancante!", "invalidLoginUsername": "Nome utente non valido!", @@ -53,5 +54,9 @@ export const menu: SimpleTranslationEntries = { "no":"No", "disclaimer": "DISCLAIMER", "disclaimerDescription": "Questo gioco è un prodotto incompleto; si potrebbero riscontrare errori (inclusa la perdita dei dati di salvataggio),\ncambiamenti impercettibili, e non è detto che venga aggiornato nel tempo o mai completato del tutto.", - "errorServerDown": "Oops! There was an issue contacting the server.\n\nYou may leave this window open,\nthe game will automatically reconnect.", + "choosePokemon": "Scegli un Pokémon.", + "renamePokemon": "Rinomina un Pokémon", + "rename": "Rinomina", + "nickname": "Nickname", + "errorServerDown": "Poffarbacco! C'è stato un errore nella comunicazione col server.\n\nPuoi lasciare questa finestra aperta,\nil gioco si riconnetterà automaticamente.", } as const; diff --git a/src/locales/it/modifier-type.ts b/src/locales/it/modifier-type.ts index 1d8b0232e70..54ff0ba0e45 100644 --- a/src/locales/it/modifier-type.ts +++ b/src/locales/it/modifier-type.ts @@ -58,10 +58,10 @@ export const modifierType: ModifierTypeTranslationEntries = { description: "Aumenta la potenza delle mosse di tipo {{moveType}} del 20% per un Pokémon.", }, "PokemonLevelIncrementModifierType": { - description: "Fa salire un Pokémon di un livello.", + description: "Aumenta il livello di un Pokémon di {{levels}}.", }, "AllPokemonLevelIncrementModifierType": { - description: "Aumenta il livello di tutti i Pokémon nel gruppo di 1.", + description: "Aumenta i livell di tutti i Pokémon della squadra di {{levels}}.", }, "PokemonBaseStatBoosterModifierType": { description: "Aumenta {{statName}} di base del possessore del 10%.", @@ -181,6 +181,10 @@ export const modifierType: ModifierTypeTranslationEntries = { "GOLDEN_EGG": { name: "Uovo dorato" }, "SOOTHE_BELL": { name: "Calmanella" }, + + "SCOPE_LENS": { name: "Mirino", description: "Lente che aumenta la probabilità di sferrare brutti colpi." }, + "LEEK": { name: "Porro", description: "Strumento da dare a Farfetch'd. Lungo gambo di porro che aumenta la probabilità di sferrare brutti colpi." }, + "EVIOLITE": { name: "Evolcondensa", description: "Misteriosa materia evolutiva. Aumenta la Difesa e la Difesa Speciale di un Pokémon che può ancora evolversi." }, "SOUL_DEW": { name: "Cuorugiada", description: "Aumenta del 10% l'influenza della natura di un Pokémon sulle sue statistiche (cumulativo)." }, diff --git a/src/locales/it/move.ts b/src/locales/it/move.ts index a7ebd605f18..a2c99218cec 100644 --- a/src/locales/it/move.ts +++ b/src/locales/it/move.ts @@ -2975,7 +2975,7 @@ export const move: MoveTranslationEntries = { }, dynamaxCannon: { name: "Cannone Dynamax", - effect: "Il Pokémon attacca emettendo dal suo nucleo l'energia concentrata nel corpo.", + effect: "Il Pokémon attacca emettendo dal suo nucleo l'energia concentrata nel corpo. Se il bersaglio è overlivellato, i danni inflitti aumentano.", }, snipeShot: { name: "Tiromirato", diff --git a/src/locales/it/party-ui-handler.ts b/src/locales/it/party-ui-handler.ts index 86966a6e7f9..979e04f3ea1 100644 --- a/src/locales/it/party-ui-handler.ts +++ b/src/locales/it/party-ui-handler.ts @@ -16,6 +16,7 @@ export const partyUiHandler: SimpleTranslationEntries = { "PASS_BATON": "Pass Baton", "UNPAUSE_EVOLUTION": "Unpause Evolution", "REVIVE": "Revive", + "RENAME": "Rinomina", "choosePokemon": "Choose a Pokémon.", "doWhatWithThisPokemon": "Do what with this Pokémon?", diff --git a/src/locales/it/pokemon-summary.ts b/src/locales/it/pokemon-summary.ts new file mode 100644 index 00000000000..7f17440b16c --- /dev/null +++ b/src/locales/it/pokemon-summary.ts @@ -0,0 +1,20 @@ +import { TranslationEntries } from "#app/interfaces/locales"; + +export const pokemonSummary: TranslationEntries = { + "pokemonInfo": "Info Pokémon", + "status": "Stato", + "powerAccuracyCategory": "Potenza\nPrecisione\nCategoria", + "type": "Tipo", + "unknownTrainer": "Sconosciuto", + "ot": "AO", + "nature": "natura", + "expPoints": "Punti Esp.", + "nextLv": "Prossimo Lv.", + "cancel": "Annulla", + + "memoString": "Natura {{natureFragment}},\n{{metFragment}}", + "metFragment": { + "normal": "incontrato al Lv.{{level}},\n{{biome}}.", + "apparently": "apparentemente incontrato al Lv.{{level}},\n{{biome}}.", + }, +} as const; diff --git a/src/locales/it/settings.ts b/src/locales/it/settings.ts index af48368aeeb..07cbe6b7f46 100644 --- a/src/locales/it/settings.ts +++ b/src/locales/it/settings.ts @@ -3,7 +3,7 @@ import { SimpleTranslationEntries } from "#app/interfaces/locales.js"; export const settings: SimpleTranslationEntries = { "boy": "Ragazzo", "girl": "Ragazza", - "general": "General", + "general": "Generale", "display": "Display", "audio": "Audio", "gamepad": "Gamepad", @@ -94,6 +94,7 @@ export const settings: SimpleTranslationEntries = { "alt": " (Alt)", "mute": "Mute", "controller": "Controller", - "gamepadSupport": "Gamepad Support", - "showBgmBar": "Show Music Names", + "gamepadSupport": "Supporto Gamepad", + "showBgmBar": "Mostra Nomi Musica", + "shopOverlayOpacity": "Opacità Finestra Negozio" } as const; diff --git a/src/locales/it/splash-messages.ts b/src/locales/it/splash-messages.ts index eeb71842094..dbbb0a5bcea 100644 --- a/src/locales/it/splash-messages.ts +++ b/src/locales/it/splash-messages.ts @@ -34,4 +34,5 @@ export const splashMessages: SimpleTranslationEntries = { "alsoTryRadicalRed": "Prova anche Radical Red!", "eeveeExpo": "Eevee Expo!", "ynoproject": "YNOproject!", + "breedersInSpace": "Allevapokémon nello spazio!", } as const; diff --git a/src/locales/ko/ability-trigger.ts b/src/locales/ko/ability-trigger.ts index 58ba7bf9aa6..2c28704fc24 100644 --- a/src/locales/ko/ability-trigger.ts +++ b/src/locales/ko/ability-trigger.ts @@ -3,11 +3,60 @@ import { SimpleTranslationEntries } from "#app/interfaces/locales"; export const abilityTriggers: SimpleTranslationEntries = { "blockRecoilDamage" : "{{pokemonName}}[[는]] {{abilityName}} 때문에\n반동 데미지를 받지 않는다!", "badDreams": "{{pokemonName}}[[는]]\n나이트메어 때문에 시달리고 있다!", - "costar": "{{pokemonName}} copied {{allyName}}'s stat changes!", + "costar": "{{pokemonName}}[[는]] {{allyName}}의\n능력 변화를 복사했다!", "iceFaceAvoidedDamage": "{{pokemonName}}[[는]] {{abilityName}} 때문에\n데미지를 받지 않는다!", "perishBody": "{{pokemonName}}의 {{abilityName}} 때문에\n양쪽 포켓몬 모두는 3턴 후에 쓰러져 버린다!", "poisonHeal": "{{pokemonName}}[[는]] {{abilityName}}[[로]]인해\n조금 회복했다.", - "trace": "{{pokemonName}} copied {{targetName}}'s\n{{abilityName}}!", + "trace": "{{pokemonName}}[[는]] 상대 {{targetName}}의 \n{{abilityName}}[[를]] 트레이스했다!", "windPowerCharged": "{{pokemonName}}[[는]]\n{{moveName}}에 맞아 충전되었다!", "quickDraw": "{{pokemonName}}[[는]]\n퀵드로에 의해 행동이 빨라졌다!", + "blockItemTheft": "{{pokemonNameWithAffix}}의 {{abilityName}}에 의해\n도구를 빼앗기지 않는다!", + "typeImmunityHeal": "{{pokemonNameWithAffix}}[[는]]\n{{abilityName}}[[로]] 체력이 회복되었다!", + "nonSuperEffectiveImmunity": "{{pokemonNameWithAffix}}[[는]] {{abilityName}} 때문에\n데미지를 입지 않는다!", + "postDefendDisguise": "{{pokemonNameWithAffix}}의\n정체가 드러났다!", + "moveImmunity": "{{pokemonNameWithAffix}}에게는\n효과가 없는 것 같다...", + "reverseDrain": "{{pokemonNameWithAffix}}[[는]]\n해감액을 흡수했다!", + "postDefendTypeChange": "{{pokemonNameWithAffix}}[[는]] {{abilityName}}[[로]] 인해\n{{typeName}}타입이 됐다!", + "postDefendContactDamage": "{{pokemonNameWithAffix}}[[는]] {{abilityName}}[[로]]\n상대를 상처입혔다!", + "postDefendAbilitySwap": "{{pokemonNameWithAffix}}[[는]]\n서로의 특성을 교체했다!", + "postDefendAbilityGive": "{{pokemonNameWithAffix}}[[는]]\n특성이 {{abilityName}}[[가]] 되어 버렸다!", + "postDefendMoveDisable": "{{pokemonNameWithAffix}}의\n{{moveName}}[[를]] 봉인했다!", + "pokemonTypeChange": "{{pokemonNameWithAffix}}[[는]]\n{{moveType}}타입이 됐다!", + "postAttackStealHeldItem": "{{pokemonNameWithAffix}}[[는]] {{defenderName}}[[로]]부터\n{{stolenItemType}}[[를]] 빼앗았다!", + "postDefendStealHeldItem": "{{pokemonNameWithAffix}}[[는]] {{attackerName}}[[로]]부터\n{{stolenItemType}}[[를]] 빼앗았다!", + "copyFaintedAllyAbility": "{{pokemonNameWithAffix}}의\n{{abilityName}}[[를]] 이어받았다!", + "intimidateImmunity": "{{pokemonNameWithAffix}}[[는]]\n{{abilityName}}의 효과로 능력이 떨어지지 않는다!", + "postSummonAllyHeal": "{{pokemonNameWithAffix}}[[가]] 내온 차를\n{{pokemonName}}[[가]] 모두 비웠다!", + "postSummonClearAllyStats": "{{pokemonNameWithAffix}}의\n능력 변화가 원래대로 되돌아왔다!", + "postSummonTransform": "{{pokemonNameWithAffix}}[[는]]\n{{targetName}}[[로]] 변신했다!!", + "protectStat": "{{pokemonNameWithAffix}}[[는]] {{abilityName}}의 효과로\n{{statName}}[[가]] 떨어지지 않는다!", + "statusEffectImmunityWithName": "{{pokemonNameWithAffix}}[[는]] {{abilityName}} 때문에\{{statusEffectName}}에 걸리지 않는다!", + "statusEffectImmunity": "{{pokemonNameWithAffix}}[[는]] {{abilityName}} 때문에\n상태 이상이 되지 않는다!", + "battlerTagImmunity": "{{pokemonNameWithAffix}}[[는]] {{abilityName}}[[로]]\n{{battlerTagName}}[[를]] 무시했다!", + "forewarn": "{{pokemonNameWithAffix}}의\n{{moveName}}[[를]] 간파했다!", + "frisk": "{{pokemonNameWithAffix}}[[는]] {{opponentName}}의\n{{opponentAbilityName}}[[를]] 통찰했다!", + "postWeatherLapseHeal": "{{pokemonNameWithAffix}}[[는]]\n{{abilityName}}[[로]] 체력이 회복되었다!", + "postWeatherLapseDamage": "{{pokemonNameWithAffix}}[[는]]\n{{abilityName}}에 의한 데미지를 입었다!", + "postTurnLootCreateEatenBerry": "{{pokemonNameWithAffix}}[[는]]\n{{berryName}}[[를]] 수확했다!", + "postTurnHeal": "{{pokemonNameWithAffix}}[[는]]\n{{abilityName}}[[로]] 체력이 회복되었다!", + "fetchBall": "{{pokemonNameWithAffix}}[[는]]\n{{pokeballName}}[[를]] 주워 왔다!", + "healFromBerryUse": "{{pokemonNameWithAffix}}[[는]]\n{{abilityName}}[[로]] 체력이 회복되었다!", + "arenaTrap": "{{pokemonNameWithAffix}}의 {{abilityName}} 때문에\n바꿀 수 없다!", + "postBattleLoot": "{{pokemonNameWithAffix}}[[는]]\n{{itemName}}[[를]] 주웠다!", + "postFaintContactDamage": "{{pokemonNameWithAffix}}[[는]] {{abilityName}}[[로]]\n상대에게 데미지를 입혔다!", + "postFaintHpDamage": "{{pokemonNameWithAffix}}[[는]] {{abilityName}}[[로]]\n상대에게 데미지를 입혔다!", + "postSummonPressure": "{{pokemonNameWithAffix}}[[는]]\n프레셔를 발산하고 있다!", + "postSummonMoldBreaker": "{{pokemonNameWithAffix}}의\n틀깨기!", + "postSummonAnticipation": "{{pokemonNameWithAffix}}[[는]]\n몸을 떨었다!", + "postSummonTurboblaze": "{{pokemonNameWithAffix}}[[는]]\n활활 타오르는 오라를 발산하고 있다!", + "postSummonTeravolt": "{{pokemonNameWithAffix}}[[는]]\n세차게 튀는 오라를 발산하고 있다!", + "postSummonDarkAura": "{{pokemonNameWithAffix}}[[는]]\n다크오라를 발산하고 있다!", + "postSummonFairyAura": "{{pokemonNameWithAffix}}[[는]]\n페어리오라를 발산하고 있다!", + "postSummonNeutralizingGas": "주위가 화학변화가스로 가득 찼다!", + "postSummonAsOneGlastrier": "{{pokemonNameWithAffix}}[[는]]\n두 가지 특성을 겸비한다!", + "postSummonAsOneSpectrier": "{{pokemonNameWithAffix}}[[는]]\n두 가지 특성을 겸비한다!", + "postSummonVesselOfRuin": "{{pokemonNameWithAffix}}의 재앙의그릇에 의해\n주위의 {{statName}}[[가]] 약해졌다!", + "postSummonSwordOfRuin": "{{pokemonNameWithAffix}}의 재앙의검에 의해\n주위의 {{statName}}[[가]] 약해졌다!", + "postSummonTabletsOfRuin": "{{pokemonNameWithAffix}}의 재앙의목간에 의해\n주위의 {{statName}}[[가]] 약해졌다!", + "postSummonBeadsOfRuin": "{{pokemonNameWithAffix}}의 재앙의구슬에 의해\n주위의 {{statName}}[[가]] 약해졌다!", } as const; diff --git a/src/locales/ko/arena-flyout.ts b/src/locales/ko/arena-flyout.ts new file mode 100644 index 00000000000..33d9596af2c --- /dev/null +++ b/src/locales/ko/arena-flyout.ts @@ -0,0 +1,49 @@ +import { SimpleTranslationEntries } from "#app/interfaces/locales"; + +export const arenaFlyout: SimpleTranslationEntries = { + // Title + "activeBattleEffects": "배틀 효과 상태", + "player": "플레이어", + "neutral": "공통", + "enemy": "상대", + + // WeatherType + "sunny": "쾌청", + "rain": "비", + "sandstorm": "모래바람", + "hail": "싸라기눈", + "snow": "눈", + "fog": "안개", + "heavyRain": "강한 비", + "harshSun": "강한 쾌청", + "strongWinds": "난기류", + + // TerrainType + "misty": "미스트필드", + "electric": "일렉트릭필드", + "grassy": "그래스필드", + "psychic": "사이코필드", + + // ArenaTagType + "mudSport": "흙놀이", + "waterSport": "물놀이", + "spikes": "압정", + "toxicSpikes": "독압정", + "mist": "흰안개", + "futureSight": "미래예지", + "doomDesire": "파멸의소원", + "wish": "희망사항", + "stealthRock": "스텔스록", + "stickyWeb": "끈적끈적네트", + "trickRoom": "트릭룸", + "gravity": "중력", + "reflect": "리플렉터", + "lightScreen": "빛의장막", + "auroraVeil": "오로라베일", + "quickGuard": "패스트가드", + "wideGuard": "와이드가드", + "matBlock": "마룻바닥세워막기", + "craftyShield": "트릭가드", + "tailwind": "순풍", + "happyHour": "해피타임", +}; diff --git a/src/locales/ko/battle-info.ts b/src/locales/ko/battle-info.ts new file mode 100644 index 00000000000..4386f7814b4 --- /dev/null +++ b/src/locales/ko/battle-info.ts @@ -0,0 +1,5 @@ +import { SimpleTranslationEntries } from "#app/interfaces/locales"; + +export const battleInfo: SimpleTranslationEntries = { + "generation": "{{generation}}세대", +} as const; diff --git a/src/locales/ko/battle.ts b/src/locales/ko/battle.ts index dbb425da63f..60bbc067062 100644 --- a/src/locales/ko/battle.ts +++ b/src/locales/ko/battle.ts @@ -67,16 +67,33 @@ export const battle: SimpleTranslationEntries = { "useMove": "{{pokemonNameWithAffix}}의 {{moveName}}!", "drainMessage": "{{pokemonName}}[[로]]부터\n체력을 흡수했다!", "stealEatBerry": "{{pokemonName}}[[가]]\n{{targetName}}의 {{berryName}}[[를]] 빼앗아 먹었다!", + "ppHealBerry": "{{pokemonNameWithAffix}}[[는]] {{berryName}}[[로]]\n{{moveName}}의 PP를 회복했다!", + "hpHealBerry": "{{pokemonNameWithAffix}}[[는]] {{berryName}}[[로]]\n체력을 회복했다!", "regainHealth": "{{pokemonName}}[[는]]\n체력을 회복했다!", "fainted": "{{pokemonNameWithAffix}}[[는]] 쓰러졌다!", - "statRose": "{{pokemonNameWithAffix}}의\n{{stats}}[[가]] 올라갔다!", - "statSharplyRose": "{{pokemonNameWithAffix}}의\n{{stats}}[[가]] 크게 올라갔다!", - "statRoseDrastically": "{{pokemonNameWithAffix}}의\n{{stats}}[[가]] 매우 크게 올라갔다!", - "statWontGoAnyHigher": "{{pokemonNameWithAffix}}의\n{{stats}}[[는]] 더 올라가지 않는다!", - "statFell": "{{pokemonNameWithAffix}}의\n{{stats}}[[가]] 떨어졌다!", - "statHarshlyFell": "{{pokemonNameWithAffix}}의\n{{stats}}[[가]] 크게 떨어졌다!", - "statSeverelyFell": "{{pokemonNameWithAffix}}의\n{{stats}}[[가]] 매우 크게 떨어졌다!", - "statWontGoAnyLower": "{{pokemonNameWithAffix}}의\n{{stats}}[[는]] 더 떨어지지 않는다!", + "statsAnd": "그리고", + "stats": "스테이터스", + "statRose_one": "{{pokemonNameWithAffix}}의\n{{stats}}[[가]] 올라갔다!", + "statRose_other": "{{pokemonNameWithAffix}}의\n{{stats}}[[가]] 올라갔다!", + "statSharplyRose_one": "{{pokemonNameWithAffix}}의\n{{stats}}[[가]] 크게 올라갔다!", + "statSharplyRose_other": "{{pokemonNameWithAffix}}의\n{{stats}}[[가]] 크게 올라갔다!", + "statRoseDrastically_one": "{{pokemonNameWithAffix}}의\n{{stats}}[[가]] 매우 크게 올라갔다!", + "statRoseDrastically_other": "{{pokemonNameWithAffix}}의\n{{stats}}[[가]] 매우 크게 올라갔다!", + "statWontGoAnyHigher_one": "{{pokemonNameWithAffix}}의\n{{stats}}[[는]] 더 올라가지 않는다!", + "statWontGoAnyHigher_other": "{{pokemonNameWithAffix}}의\n{{stats}}[[는]] 더 올라가지 않는다!", + "statFell_one": "{{pokemonNameWithAffix}}의\n{{stats}}[[가]] 떨어졌다!", + "statFell_other": "{{pokemonNameWithAffix}}의\n{{stats}}[[가]] 떨어졌다!", + "statHarshlyFell_one": "{{pokemonNameWithAffix}}의\n{{stats}}[[가]] 크게 떨어졌다!", + "statHarshlyFell_other": "{{pokemonNameWithAffix}}의\n{{stats}}[[가]] 크게 떨어졌다!", + "statSeverelyFell_one": "{{pokemonNameWithAffix}}의\n{{stats}}[[가]] 매우 크게 떨어졌다!", + "statSeverelyFell_other": "{{pokemonNameWithAffix}}의\n{{stats}}[[가]] 매우 크게 떨어졌다!", + "statWontGoAnyLower_one": "{{pokemonNameWithAffix}}의\n{{stats}}[[는]] 더 떨어지지 않는다!", + "statWontGoAnyLower_other": "{{pokemonNameWithAffix}}의\n{{stats}}[[는]] 더 떨어지지 않는다!", + "transformedIntoType": "{{pokemonName}} transformed\ninto the {{type}} type!", + "retryBattle": "이 배틀의 처음부터 재도전하시겠습니까?", + "unlockedSomething": "{{unlockedThing}}[[가]]\n해금되었다.", + "congratulations": "축하합니다!", + "beatModeFirstTime": "{{speciesName}}[[가]] {{gameMode}} 모드를 처음으로 클리어했다!\n{{newModifier}}[[를]] 손에 넣었다!", "ppReduced": "{{targetName}}의\n{{moveName}}[[를]] {{reduction}} 깎았다!", "battlerTagsRechargingLapse": "공격의 반동으로\n{{pokemonNameWithAffix}}[[는]] 움직일 수 없다!", "battlerTagsTrappedOnAdd": "{{pokemonNameWithAffix}}[[는]]\n이제 도망칠 수 없다!", @@ -106,7 +123,7 @@ export const battle: SimpleTranslationEntries = { "battlerTagsIngrainLapse": "{{pokemonNameWithAffix}}[[는]] 뿌리로부터\n양분을 흡수했다!", "battlerTagsIngrainOnTrap": "{{pokemonNameWithAffix}}[[는]] 뿌리를 뻗었다!", "battlerTagsAquaRingOnAdd": "{{pokemonNameWithAffix}}[[는]]\n물의 베일을 둘러썼다!", - "battlerTagsAquaRingLapse": "{{moveName}} 효과로 \n{{pokemonName}}[[는]] HP를 회복했다!", + "battlerTagsAquaRingLapse": "{{moveName}} 효과로\n{{pokemonName}}[[는]] HP를 회복했다!", "battlerTagsDrowsyOnAdd": "{{pokemonNameWithAffix}}의\n졸음을 유도했다!", "battlerTagsDamagingTrapLapse": "{{pokemonNameWithAffix}}[[는]] {{moveName}}의\n데미지를 입고 있다!", "battlerTagsBindOnTrap": "{{pokemonNameWithAffix}}[[는]] {{sourcePokemonName}}에게\n{{moveName}}[[를]] 당했다!", @@ -124,15 +141,18 @@ export const battle: SimpleTranslationEntries = { "battlerTagsEnduringLapse": "{{pokemonNameWithAffix}}[[는]]\n공격을 버텼다!", "battlerTagsSturdyLapse": "{{pokemonNameWithAffix}}[[는]]\n공격을 버텼다!", "battlerTagsPerishSongLapse": "{{pokemonNameWithAffix}}의 멸망의\n카운트가 {{turnCount}}[[가]] 되었다!", + "battlerTagsCenterOfAttentionOnAdd": "{{pokemonNameWithAffix}}[[는]]\n주목의 대상이 되었다!", "battlerTagsTruantLapse": "{{pokemonNameWithAffix}}[[는]] 게으름을 피우고 있다!", "battlerTagsSlowStartOnAdd": "{{pokemonNameWithAffix}}[[는]] 컨디션이\n좋아지지 않는다!", "battlerTagsSlowStartOnRemove": "{{pokemonNameWithAffix}} 는 마침내\n컨디션을 회복했다!", "battlerTagsHighestStatBoostOnAdd": "{{pokemonNameWithAffix}}의\n{{statName}}[[가]] 올라갔다!", - "battlerTagsHighestStatBoostOnRemove": "The effects of {{pokemonNameWithAffix}}'s\n{{abilityName}} wore off!", + "battlerTagsHighestStatBoostOnRemove": "{{pokemonNameWithAffix}}의\n{{abilityName}} 효과가 사라졌다!", + "battlerTagsMagnetRisenOnAdd": "{{pokemonNameWithAffix}}[[는]]\n전자력으로 떠올랐다!", + "battlerTagsMagnetRisenOnRemove": "{{pokemonNameWithAffix}}의\n전자력이 없어졌다!", "battlerTagsCritBoostOnAdd": "{{pokemonNameWithAffix}}[[는]]\n의욕이 넘치고 있다!", "battlerTagsCritBoostOnRemove": "{{pokemonNameWithAffix}}[[는]] 평소로 돌아왔다.", "battlerTagsSaltCuredOnAdd": "{{pokemonNameWithAffix}}[[는]]\n소금에 절여졌다!", "battlerTagsSaltCuredLapse": "{{pokemonNameWithAffix}}[[는]] 소금절이의\n데미지를 입고 있다.", - "battlerTagsCursedOnAdd": "{{pokemonNameWithAffix}}[[는]]\n자신의 체력을 깎아서\n{{pokemonName}}에게 저주를 걸었다!", + "battlerTagsCursedOnAdd": "{{pokemonNameWithAffix}}[[는]] 자신의 체력을 깎아서\n{{pokemonName}}에게 저주를 걸었다!", "battlerTagsCursedLapse": "{{pokemonNameWithAffix}}[[는]]\n저주받고 있다!", } as const; diff --git a/src/locales/ko/battler-tags.ts b/src/locales/ko/battler-tags.ts new file mode 100644 index 00000000000..93a9106a8ce --- /dev/null +++ b/src/locales/ko/battler-tags.ts @@ -0,0 +1,12 @@ +import { SimpleTranslationEntries } from "#app/interfaces/locales"; + +export const battlerTags: SimpleTranslationEntries = { + "trappedDesc": "함정", + "flinchedDesc": "풀죽음", + "confusedDesc": "혼란", + "infatuatedDesc": "헤롱헤롱", + "seedDesc": "씨뿌리기", + "nightmareDesc": "악몽", + "ingrainDesc": "뿌리", + "drowsyDesc": "졸음", +} as const; diff --git a/src/locales/ko/bgm-name.ts b/src/locales/ko/bgm-name.ts index 235d6a3320e..69697b07774 100644 --- a/src/locales/ko/bgm-name.ts +++ b/src/locales/ko/bgm-name.ts @@ -110,9 +110,9 @@ export const bgmName: SimpleTranslationEntries = { "plains": "불가사의 던전 하늘의 탐험대 하늘 꼭대기 초원", "power_plant": "불가사의 던전 하늘의 탐험대 일렉트릭 평원", "ruins": "불가사의 던전 하늘의 탐험대 봉인의 암반", - "sea": "불가사의 던전 하늘의 탐험대 바닷가 동굴", + "sea": "Andr06 - Marine Mystique", // Name defined by the composer "seabed": "Firel - Seabed", // The composer thinks about a more creative name - "slum": "불가사의 던전 하늘의 탐험대 하늘 꼭대기 해변", + "slum": "Andr06 - Sneaky Snom", // Name defined by the composer "snowy_forest": "불가사의 던전 하늘의 탐험대 하늘 꼭대기 설원", "space": "Firel - Aether", "swamp": "불가사의 던전 하늘의 탐험대 폐쇄되어진 바다", diff --git a/src/locales/ko/config.ts b/src/locales/ko/config.ts index 5b29a46c044..a3cbbeeb239 100644 --- a/src/locales/ko/config.ts +++ b/src/locales/ko/config.ts @@ -1,8 +1,11 @@ import { ability } from "./ability"; import { abilityTriggers } from "./ability-trigger"; +import { arenaFlyout } from "./arena-flyout"; import { PGFachv, PGMachv } from "./achv"; import { battle } from "./battle"; +import { battleInfo } from "./battle-info"; import { battleMessageUiHandler } from "./battle-message-ui-handler"; +import { battlerTags } from "./battler-tags"; import { berry } from "./berry"; import { bgmName } from "./bgm-name"; import { biome } from "./biome"; @@ -33,6 +36,7 @@ import { pokeball } from "./pokeball"; import { pokemon } from "./pokemon"; import { pokemonInfo } from "./pokemon-info"; import { pokemonInfoContainer } from "./pokemon-info-container"; +import { pokemonSummary } from "./pokemon-summary"; import { saveSlotSelectUiHandler } from "./save-slot-select-ui-handler"; import { splashMessages } from "./splash-messages"; import { starterSelectUiHandler } from "./starter-select-ui-handler"; @@ -49,8 +53,11 @@ import { modifierSelectUiHandler } from "./modifier-select-ui-handler"; export const koConfig = { ability: ability, abilityTriggers: abilityTriggers, + arenaFlyout: arenaFlyout, battle: battle, + battleInfo: battleInfo, battleMessageUiHandler: battleMessageUiHandler, + battlerTags: battlerTags, berry: berry, bgmName: bgmName, biome: biome, @@ -82,6 +89,7 @@ export const koConfig = { pokemon: pokemon, pokemonInfo: pokemonInfo, pokemonInfoContainer: pokemonInfoContainer, + pokemonSummary: pokemonSummary, saveSlotSelectUiHandler: saveSlotSelectUiHandler, settings: settings, splashMessages: splashMessages, diff --git a/src/locales/ko/dialogue.ts b/src/locales/ko/dialogue.ts index a98b31a7c61..719b738778d 100644 --- a/src/locales/ko/dialogue.ts +++ b/src/locales/ko/dialogue.ts @@ -1433,7 +1433,7 @@ export const PGMdialogue: DialogueTranslationEntries = { }, "victory": { 1: `좋아! 꼬마야, 정말로, 인상적이었단다. - $Y네 포켓몬은 너를 믿고 승리를 위해 최선을 다했구나. + $네 포켓몬은 너를 믿고 승리를 위해 최선을 다했구나. $비록 내가 졌지만, 좋아서 바보같이 웃음이 나오는구나!`, }, "defeat": { diff --git a/src/locales/ko/menu-ui-handler.ts b/src/locales/ko/menu-ui-handler.ts index 3bd412bc5ea..2e036f49b4d 100644 --- a/src/locales/ko/menu-ui-handler.ts +++ b/src/locales/ko/menu-ui-handler.ts @@ -18,6 +18,10 @@ export const menuUiHandler: SimpleTranslationEntries = { "exportSlotSelect": "내보낼 슬롯을 골라주세요.", "importData": "데이터 불러오기", "exportData": "데이터 내보내기", + "linkDiscord": "디스코드 연동", + "unlinkDiscord": "디스코드 연동해제", + "linkGoogle": "구글 연동", + "unlinkGoogle": "구글 연동해제", "cancel": "취소", "losingProgressionWarning": "전투 시작으로부터의 진행 상황을 잃게 됩니다. 계속하시겠습니까?", "noEggs": "부화중인 알이 없습니다!" diff --git a/src/locales/ko/menu.ts b/src/locales/ko/menu.ts index 0e12b3bd15e..368627b0d5d 100644 --- a/src/locales/ko/menu.ts +++ b/src/locales/ko/menu.ts @@ -17,6 +17,7 @@ export const menu: SimpleTranslationEntries = { "username": "이름", "password": "비밀번호", "login": "로그인", + "orUse": "혹은", "register": "등록", "emptyUsername": "이름은 비워둘 수 없습니다", "invalidLoginUsername": "사용할 수 없는 이름입니다", @@ -53,5 +54,9 @@ export const menu: SimpleTranslationEntries = { "no":"아니오", "disclaimer": "면책 조항", "disclaimerDescription": "이 게임은 완전히 개발되지 않았습니다- (세이브 데이터 소실을 포함) 플레이에 지장을 주는 문제가 생길 수 있으며,\n공지 없이 업데이트가 진행 혹은 중지될 수 있습니다.", + "choosePokemon": "포켓몬을 선택하세요.", + "renamePokemon": "포켓몬의 닉네임은?", + "rename": "닉네임 바꾸기", + "nickname": "닉네임", "errorServerDown": "서버 연결 중 문제가 발생했습니다.\n\n이 창을 종료하지 않고 두면,\n게임은 자동으로 재접속됩니다.", } as const; diff --git a/src/locales/ko/modifier-type.ts b/src/locales/ko/modifier-type.ts index 4df6a397fa0..cc09d7763a9 100644 --- a/src/locales/ko/modifier-type.ts +++ b/src/locales/ko/modifier-type.ts @@ -58,10 +58,10 @@ export const modifierType: ModifierTypeTranslationEntries = { description: "지니게 하면 {{moveType}}타입 기술의 위력이 20% 상승한다.", }, "PokemonLevelIncrementModifierType": { - description: "포켓몬 1마리의 레벨이 1만큼 상승한다.", + description: "포켓몬 1마리의 레벨이 기본 1만큼, 사탕단지의 개수에 따라 최대 {{levels}}까지 상승한다.", }, "AllPokemonLevelIncrementModifierType": { - description: "자신의 모든 포켓몬의 레벨이 1씩 상승한다.", + description: "자신의 모든 포켓몬의 레벨이 기본 1씩, 사탕단지의 개수에 따라 최대 {{levels}}까지 상승한다.", }, "PokemonBaseStatBoosterModifierType": { description: "지니게 하면 {{statName}} 종족값을 10% 올려준다. 개체값이 높을수록 더 많이 누적시킬 수 있다.", @@ -182,6 +182,9 @@ export const modifierType: ModifierTypeTranslationEntries = { "SOOTHE_BELL": { name: "평온의방울" }, + "SCOPE_LENS": { name: "초점렌즈", description: "약점이 보이는 렌즈. 지니게 한 포켓몬의 기술이 급소에 맞기 쉬워진다." }, + "LEEK": { name: "대파", description: "매우 길고 단단한 줄기. 파오리에게 지니게 하면 기술이 급소에 맞기 쉬워진다." }, + "EVIOLITE": { name: "진화의휘석", description: "진화의 이상한 덩어리. 지니게 하면 진화 전 포켓몬의 방어와 특수방어가 올라간다." }, "SOUL_DEW": { name: "마음의물방울", description: "지닌 포켓몬의 성격의 효과가 10% 증가한다. (합연산)" }, diff --git a/src/locales/ko/move.ts b/src/locales/ko/move.ts index 3781725bc6f..bb9d4515ba8 100644 --- a/src/locales/ko/move.ts +++ b/src/locales/ko/move.ts @@ -2981,8 +2981,7 @@ export const move: MoveTranslationEntries = { }, dynamaxCannon: { name: "다이맥스포", - /* 다이맥스에서 200레벨로 조건 변경 */ - effect: "코어에서 빔을 발사해서 공격한다. 상대의 레벨이 200보다 크면 데미지가 2배가 된다." + effect: "코어에서 빔을 발사해서 공격한다. 상대가 웨이브 레벨 최대치를 초과했다면, 초과한 정도에 비례하여 데미지가 최대 2배가 된다." }, snipeShot: { name: "노려맞히기", diff --git a/src/locales/ko/party-ui-handler.ts b/src/locales/ko/party-ui-handler.ts index f0075809345..ff5d81eeb52 100644 --- a/src/locales/ko/party-ui-handler.ts +++ b/src/locales/ko/party-ui-handler.ts @@ -16,6 +16,7 @@ export const partyUiHandler: SimpleTranslationEntries = { "PASS_BATON": "배턴터치한다", "UNPAUSE_EVOLUTION": "진화 재개", "REVIVE": "되살린다", + "RENAME": "닉네임 바꾸기", "choosePokemon": "포켓몬을 선택하세요.", "doWhatWithThisPokemon": "포켓몬을 어떻게 하겠습니까?", diff --git a/src/locales/ko/pokemon-summary.ts b/src/locales/ko/pokemon-summary.ts new file mode 100644 index 00000000000..029588a7cf2 --- /dev/null +++ b/src/locales/ko/pokemon-summary.ts @@ -0,0 +1,47 @@ +import { TranslationEntries } from "#app/interfaces/locales"; + +export const pokemonSummary: TranslationEntries = { + "pokemonInfo": "스테이터스", + "status": "상태 이상", + "powerAccuracyCategory": "위력\n명중\n분류", + "type": "타입", + "unknownTrainer": "알수없음", + "ot": "어버이", + "nature": "성격", + "expPoints": "현재 경험치", + "nextLv": "다음 레벨까지", + "cancel": "그만둔다", + + "memoString": "{{natureFragment}}.\n{{metFragment}}", + "metFragment": { + "normal": "{{biome}}에서\nLv{{level}}일 때 만났다.", + "apparently": "{{biome}}에서\nLv{{level}}일 때 만난 것 같다.", + }, + "natureFragment": { + "Hardy": "{{nature}}하는 성격", + "Lonely": "{{nature}}을 타는 성격", + "Brave": "{{nature}}한 성격", + "Adamant": "{{nature}}스러운 성격", + "Naughty" : "{{nature}}같은 성격", + "Bold" : "{{nature}}한 성격", + "Docile" : "{{nature}}한 성격", + "Relaxed" : "{{nature}}한 성격", + "Impish" : "{{nature}}같은 성격", + "Lax" : "{{nature}}거리는 성격", + "Timid" : "{{nature}}같은 성격", + "Hasty" : "{{nature}}한 성격", + "Serious" : "{{nature}}한 성격", + "Jolly" : "{{nature}}한 성격", + "Naive" : "{{nature}}한 성격", + "Modest" : "{{nature}}스러운 성격", + "Mild" : "{{nature}}한 성격", + "Quiet" : "{{nature}}한 성격", + "Bashful" : "{{nature}}을 타는 성격", + "Rash" : "{{nature}}거리는 성격", + "Calm" : "{{nature}}한 성격", + "Gentle" : "{{nature}}한 성격", + "Sassy" : "{{nature}}진 성격", + "Careful" : "{{nature}}한 성격", + "Quirky": "{{nature}}스러운 성격", + }, +} as const; diff --git a/src/locales/ko/settings.ts b/src/locales/ko/settings.ts index 6514683cd94..40e9676b6da 100644 --- a/src/locales/ko/settings.ts +++ b/src/locales/ko/settings.ts @@ -96,4 +96,5 @@ export const settings: SimpleTranslationEntries = { "controller": "컨트롤러", "gamepadSupport": "게임패드 지원", "showBgmBar": "BGM 제목 보여주기", + "shopOverlayOpacity": "상점 오버레이 투명도" } as const; diff --git a/src/locales/ko/splash-messages.ts b/src/locales/ko/splash-messages.ts index b875e7b282f..1e364f9c098 100644 --- a/src/locales/ko/splash-messages.ts +++ b/src/locales/ko/splash-messages.ts @@ -34,4 +34,5 @@ export const splashMessages: SimpleTranslationEntries = { "alsoTryRadicalRed": "Radical Red도 해봐요!", "eeveeExpo": "Eevee Expo!", "ynoproject": "YNOproject!", + "breedersInSpace": "충격!우주에 브리더 진짜 계심ㄷㄷ", } as const; diff --git a/src/locales/pt_BR/ability-trigger.ts b/src/locales/pt_BR/ability-trigger.ts index 11cbaed182d..ab845a23d4a 100644 --- a/src/locales/pt_BR/ability-trigger.ts +++ b/src/locales/pt_BR/ability-trigger.ts @@ -10,4 +10,53 @@ export const abilityTriggers: SimpleTranslationEntries = { "trace": "{{pokemonName}} copiou {{abilityName}}\nde {{targetName}}!", "windPowerCharged": "Ser atingido por {{moveName}} carregou {{pokemonName}} com poder!", "quickDraw": "{{pokemonName}} pode agir mais rápido que o normal\ngraças ao seu Quick Draw!", + "blockItemTheft": "{{abilityName}} de {{pokemonNameWithAffix}}\nprevine o roubo de itens!", + "typeImmunityHeal": "{{abilityName}} de {{pokemonNameWithAffix}}\nrestaurou um pouco de PS!", + "nonSuperEffectiveImmunity": "{{pokemonNameWithAffix}} evitou dano\ncom {{abilityName}}!", + "postDefendDisguise": "O disfarce de {{pokemonNameWithAffix}} foi descoberto!", + "moveImmunity": "Isso não afeta {{pokemonNameWithAffix}}!", + "reverseDrain": "{{pokemonNameWithAffix}} absorveu a gosma líquida!", + "postDefendTypeChange": "{{abilityName}} de {{pokemonNameWithAffix}}\ntransformou-o no tipo {{typeName}}!", + "postDefendContactDamage": "{{abilityName}} de {{pokemonNameWithAffix}}\feriu seu adversário!", + "postDefendAbilitySwap": "{{pokemonNameWithAffix}} trocou\nde habilidades com seu alvo!", + "postDefendAbilityGive": "{{pokemonNameWithAffix}} deu a seu alvo\na habilidade {{abilityName}}!", + "postDefendMoveDisable": "{{moveName}} de {{pokemonNameWithAffix}}\nfoi desabilitado!", + "pokemonTypeChange": "{{pokemonNameWithAffix}} se transformou no tipo {{moveType}}!", + "postAttackStealHeldItem": "{{pokemonNameWithAffix}} roubou\n{{stolenItemType}} de {defenderName}}!", + "postDefendStealHeldItem": "{{pokemonNameWithAffix}} roubou\n{{stolenItemType}} de {{attackerName}}!", + "copyFaintedAllyAbility": "A habilidade {{abilityName}} de {{pokemonNameWithAffix}} foi tomada!", + "intimidateImmunity": "{{abilityName}} de {{pokemonNameWithAffix}} previniu-o(a) de ser intimidado(a)!", + "postSummonAllyHeal": "{{pokemonNameWithAffix}} bebeu todo o\nchá mate que {{pokemonName}} fez!", + "postSummonClearAllyStats": "As mudanças de atributo de {{pokemonNameWithAffix}}\nforam removidas!", + "postSummonTransform": "{{pokemonNameWithAffix}} se transformou\nem {{targetName}}!", + "protectStat": "{{abilityName}} de {{pokemonNameWithAffix}}\nprevine-o(a) de diminuir seu(sua) {{statName}}!", + "statusEffectImmunityWithName": "{{pokemonNameWithAffix}} de {{abilityName}}\nprevine {{statusEffectName}}!", + "statusEffectImmunity": "{{abilityName}} de {{pokemonNameWithAffix}}\nprevine condições de estado!", + "battlerTagImmunity": "{{abilityName}} de {{pokemonNameWithAffix}}\nprevine {{battlerTagName}}!", + "forewarn": "{{pokemonNameWithAffix}} foi avisado sobre {{moveName}}!", + "frisk": "{{pokemonNameWithAffix}} inspecionou a habilidade {{opponentAbilityName}} de {{opponentName}}!", + "postWeatherLapseHeal": "{{abilityName}} de {{pokemonNameWithAffix}}\nrestaurou um pouco de PS!", + "postWeatherLapseDamage": "{{pokemonNameWithAffix}} foi ferido\npor seu(sua) {{abilityName}}!", + "postTurnLootCreateEatenBerry": "{{pokemonNameWithAffix}} colheu uma {{berryName}}!", + "postTurnHeal": "{{abilityName}} de {{pokemonNameWithAffix}}\nrestaurou um pouco de PS!", + "fetchBall": "{{pokemonNameWithAffix}} encontrou uma\n{{pokeballName}}!", + "healFromBerryUse": "{{abilityName}} de {{pokemonNameWithAffix}}\nrestaurou PS!", + "arenaTrap": "{{abilityName}} de {{pokemonNameWithAffix}}\nprevine trocas!", + "postBattleLoot": "{{pokemonNameWithAffix}} pegou um(a)\n{{itemName}}!", + "postFaintContactDamage": "{{abilityName}} de {{pokemonNameWithAffix}}\nferiu seu adversário!", + "postFaintHpDamage": "{{abilityName}} de {{pokemonNameWithAffix}}\nferiu seu adversário!", + "postSummonPressure": "{{pokemonNameWithAffix}} está exercendo sua pressão!", + "postSummonMoldBreaker": "{{pokemonNameWithAffix}} quebra o molde!", + "postSummonAnticipation": "{{pokemonNameWithAffix}} se arrepiou!", + "postSummonTurboblaze": "{{pokemonNameWithAffix}} está irradiando uma aura ardente!", + "postSummonTeravolt": "{{pokemonNameWithAffix}} está irradiando uma aura explosiva!", + "postSummonDarkAura": "{{pokemonNameWithAffix}} está irradiando uma aura sombria!", + "postSummonFairyAura": "{{pokemonNameWithAffix}} está irradiando uma aura de fada!!", + "postSummonNeutralizingGas": "O Neutralizing Gas de {{pokemonNameWithAffix}} se espalhou pelo campo de batalha!", + "postSummonAsOneGlastrier": "{{pokemonNameWithAffix}} tem duas Habilidades!", + "postSummonAsOneSpectrier": "{{pokemonNameWithAffix}} tem duas Habilidades!", + "postSummonVesselOfRuin": "Vessel of Ruin de {{pokemonNameWithAffix}} reduziu o {{statName}}\nde todos os Pokémon em volta!", + "postSummonSwordOfRuin": "Sword of Ruin de {{pokemonNameWithAffix}} reduziu a {{statName}}\nde todos os Pokémon em volta!", + "postSummonTabletsOfRuin": "Tablets of Ruin de {{pokemonNameWithAffix}} reduziu o {{statName}}\nde todos os Pokémon em volta!", + "postSummonBeadsOfRuin": "Beads of Ruin de {{pokemonNameWithAffix}} reduziu a {{statName}}\nde todos os Pokémon em volta!", } as const; diff --git a/src/locales/pt_BR/arena-flyout.ts b/src/locales/pt_BR/arena-flyout.ts new file mode 100644 index 00000000000..97382aa2b2f --- /dev/null +++ b/src/locales/pt_BR/arena-flyout.ts @@ -0,0 +1,49 @@ +import { SimpleTranslationEntries } from "#app/interfaces/locales"; + +export const arenaFlyout: SimpleTranslationEntries = { + // Title + "activeBattleEffects": "Efeitos de Batalha Ativos", + "player": "Jogador", + "neutral": "Neutro", + "enemy": "Inimigo", + + // WeatherType + "sunny": "Ensolarado", + "rain": "Chuva", + "sandstorm": "Tempestade de Areia", + "hail": "Granizo", + "snow": "Neve", + "fog": "Névoa", + "heavyRain": "Chuva Forte", + "harshSun": "Sol Forte", + "strongWinds": "Ventos Fortes", + + // TerrainType + "misty": "Terreno Enevoado", + "electric": "Terreno Elétrico", + "grassy": "Terreno de Planta", + "psychic": "Terreno Psíquico", + + // ArenaTagType + "mudSport": "Mud Sport", + "waterSport": "Water Sport", + "spikes": "Spikes", + "toxicSpikes": "Toxic Spikes", + "mist": "Mist", + "futureSight": "Future Sight", + "doomDesire": "Doom Desire", + "wish": "Wish", + "stealthRock": "Stealth Rock", + "stickyWeb": "Sticky Web", + "trickRoom": "Trick Room", + "gravity": "Gravity", + "reflect": "Reflect", + "lightScreen": "Light Screen", + "auroraVeil": "Aurora Veil", + "quickGuard": "Quick Guard", + "wideGuard": "Wide Guard", + "matBlock": "Mat Block", + "craftyShield": "Crafty Shield", + "tailwind": "Tailwind", + "happyHour": "Happy Hour", +}; diff --git a/src/locales/pt_BR/battle-info.ts b/src/locales/pt_BR/battle-info.ts new file mode 100644 index 00000000000..37cb7cb1aeb --- /dev/null +++ b/src/locales/pt_BR/battle-info.ts @@ -0,0 +1,5 @@ +import { SimpleTranslationEntries } from "#app/interfaces/locales"; + +export const battleInfo: SimpleTranslationEntries = { + "generation": "Geração {{generation}}", +} as const; diff --git a/src/locales/pt_BR/battle.ts b/src/locales/pt_BR/battle.ts index 8c97d2be6de..081e91d2306 100644 --- a/src/locales/pt_BR/battle.ts +++ b/src/locales/pt_BR/battle.ts @@ -68,16 +68,33 @@ export const battle: SimpleTranslationEntries = { "drainMessage": "{{pokemonName}} teve sua\nenergia drenada!", "regainHealth": "{{pokemonName}} recuperou\npontos de saúde!", "stealEatBerry": "{{pokemonName}} stole and ate\n{{targetName}}'s {{berryName}}!", + "ppHealBerry": "{{pokemonNameWithAffix}} restaurou PP do movimento {{moveName}}\nusando sua {{berryName}}!", + "hpHealBerry": "{{pokemonNameWithAffix}} restarou sua saúde usando\nsua {{berryName}}!", "fainted": "{{pokemonNameWithAffix}} desmaiou!", - "statRose": "{{stats}} de {{pokemonNameWithAffix}} aumentou!", - "statSharplyRose": "{{stats}} de {{pokemonNameWithAffix}} aumentou bruscamente!", - "statRoseDrastically": "{{stats}} de {{pokemonNameWithAffix}} aumentou drasticamente!", - "statWontGoAnyHigher": "{{stats}} de {{pokemonNameWithAffix}} não vai mais aumentar!", - "statFell": "{{stats}} de {{pokemonNameWithAffix}} diminuiu!", - "statHarshlyFell": "{{stats}} de {{pokemonNameWithAffix}} diminuiu duramente!", - "statSeverelyFell": "{{stats}} de {{pokemonNameWithAffix}} diminuiu severamente!", - "statWontGoAnyLower": "{{stats}} de {{pokemonNameWithAffix}} não vai mais diminuir!", + "statsAnd": "e", + "stats": "Os atributos", + "statRose_one": "{{stats}} de {{pokemonNameWithAffix}} aumentou!", + "statRose_other": "{{stats}} de {{pokemonNameWithAffix}} aumentaram!", + "statSharplyRose_one": "{{stats}} de {{pokemonNameWithAffix}} aumentou bruscamente!", + "statSharplyRose_other": "{{stats}} de {{pokemonNameWithAffix}} aumentaram bruscamente!", + "statRoseDrastically_one": "{{stats}} de {{pokemonNameWithAffix}} aumentou drasticamente!", + "statRoseDrastically_other": "{{stats}} de {{pokemonNameWithAffix}} aumentaram drasticamente!", + "statWontGoAnyHigher_one": "{{stats}} de {{pokemonNameWithAffix}} não vai mais aumentar!", + "statWontGoAnyHigher_other": "{{stats}} de {{pokemonNameWithAffix}} não vão mais aumentar!", + "statFell_one": "{{stats}} de {{pokemonNameWithAffix}} diminuiu!", + "statFell_other": "{{stats}} de {{pokemonNameWithAffix}} diminuíram!", + "statHarshlyFell_one": "{{stats}} de {{pokemonNameWithAffix}} diminuiu duramente!", + "statHarshlyFell_other": "{{stats}} de {{pokemonNameWithAffix}} diminuíram duramente!", + "statSeverelyFell_one": "{{stats}} de {{pokemonNameWithAffix}} diminuiu severamente!", + "statSeverelyFell_other": "{{stats}} de {{pokemonNameWithAffix}} diminuíram severamente!", + "statWontGoAnyLower_one": "{{stats}} de {{pokemonNameWithAffix}} não vai mais diminuir!", + "statWontGoAnyLower_other": "{{stats}} de {{pokemonNameWithAffix}} não vão mais diminuir!", + "transformedIntoType": "{{pokemonName}} transformed\ninto the {{type}} type!", "ppReduced": "O PP do movimento {{moveName}} de\n{{targetName}} foi reduzido em {{reduction}}!", + "retryBattle": "Você gostaria de tentar novamente desde o início da batalha?", + "unlockedSomething": "{{unlockedThing}}\nfoi desbloqueado.", + "congratulations": "Parabéns!", + "beatModeFirstTime": "{{speciesName}} venceu o Modo {{gameMode}} pela primeira vez!\nVocê recebeu {{newModifier}}!", "battlerTagsRechargingLapse": "{{pokemonNameWithAffix}} precisa\nrecarregar!", "battlerTagsTrappedOnAdd": "{{pokemonNameWithAffix}} não pode\nmais escapar!", "battlerTagsTrappedOnRemove": "{{pokemonNameWithAffix}} foi liberto\nde {{moveName}}!", @@ -124,15 +141,18 @@ export const battle: SimpleTranslationEntries = { "battlerTagsEnduringLapse": "{{pokemonNameWithAffix}} suportou\no golpe!", "battlerTagsSturdyLapse": "{{pokemonNameWithAffix}} suportou\no golpe!", "battlerTagsPerishSongLapse": "O tempo restante de {{pokemonNameWithAffix}} diminuiu para {{turnCount}}.", + "battlerTagsCenterOfAttentionOnAdd": "{{pokemonNameWithAffix}} virou o centro\ndas atenções!", "battlerTagsTruantLapse": "{{pokemonNameWithAffix}} está\nviajando na maionese!", "battlerTagsSlowStartOnAdd": "{{pokemonNameWithAffix}} não\nestá preparado!", "battlerTagsSlowStartOnRemove": "{{pokemonNameWithAffix}} finalmente\nconseguiu se recompor!", "battlerTagsHighestStatBoostOnAdd": "O atributo de {{statName}} de\n{{pokemonNameWithAffix}} aumentou!", "battlerTagsHighestStatBoostOnRemove": "Os efeitos do {{abilityName}} de\n{{pokemonNameWithAffix}} acabaram!", + "battlerTagsMagnetRisenOnAdd": "{{pokemonNameWithAffix}} levitou com eletromagnetismo!", + "battlerTagsMagnetRisenOnRemove": "O eletromagnetismo de {{pokemonNameWithAffix}} sumiu!", "battlerTagsCritBoostOnAdd": "{{pokemonNameWithAffix}} está ficando\nbombado!", "battlerTagsCritBoostOnRemove": "{{pokemonNameWithAffix}} relaxou.", "battlerTagsSaltCuredOnAdd": "{{pokemonNameWithAffix}} está sendo curado com sal!", "battlerTagsSaltCuredLapse": "{{pokemonNameWithAffix}} foi ferido pelo {{moveName}}!", "battlerTagsCursedOnAdd": "{{pokemonNameWithAffix}} cortou seus PS pela metade e amaldiçoou {{pokemonName}}!", - "battlerTagsCursedLapse": "{{pokemonNameWithAffix}} foi ferido pelo Curse!" + "battlerTagsCursedLapse": "{{pokemonNameWithAffix}} foi ferido pelo Curse!", } as const; diff --git a/src/locales/pt_BR/battler-tags.ts b/src/locales/pt_BR/battler-tags.ts new file mode 100644 index 00000000000..de8be35f1aa --- /dev/null +++ b/src/locales/pt_BR/battler-tags.ts @@ -0,0 +1,12 @@ +import { SimpleTranslationEntries } from "#app/interfaces/locales"; + +export const battlerTags: SimpleTranslationEntries = { + "trappedDesc": "o aprisionamento", + "flinchedDesc": "a hesitação", + "confusedDesc": "a confusão", + "infatuatedDesc": "a paixão", + "seedDesc": "sementes", + "nightmareDesc": "os pesadelos", + "ingrainDesc": "o enraizamento", + "drowsyDesc": "a sonolência", +} as const; diff --git a/src/locales/pt_BR/bgm-name.ts b/src/locales/pt_BR/bgm-name.ts index 87d90dabc9d..ae2756e74be 100644 --- a/src/locales/pt_BR/bgm-name.ts +++ b/src/locales/pt_BR/bgm-name.ts @@ -1,89 +1,89 @@ import { SimpleTranslationEntries } from "#app/interfaces/locales"; export const bgmName: SimpleTranslationEntries = { - "music": "Music: ", - "missing_entries" : "{{name}}", - "battle_kanto_champion": "B2W2 Kanto Champion Battle", - "battle_johto_champion": "B2W2 Johto Champion Battle", - "battle_hoenn_champion": "B2W2 Hoenn Champion Battle", - "battle_sinnoh_champion": "B2W2 Sinnoh Champion Battle", - "battle_champion_alder": "BW Unova Champion Battle", - "battle_champion_iris": "B2W2 Unova Champion Battle", - "battle_kalos_champion": "XY Kalos Champion Battle", - "battle_alola_champion": "USUM Alola Champion Battle", - "battle_galar_champion": "SWSH Galar Champion Battle", - "battle_champion_geeta": "SV Champion Geeta Battle", - "battle_champion_nemona": "SV Champion Nemona Battle", - "battle_champion_kieran": "SV Champion Kieran Battle", - "battle_hoenn_elite": "ORAS Elite Four Battle", - "battle_unova_elite": "BW Elite Four Battle", - "battle_kalos_elite": "XY Elite Four Battle", - "battle_alola_elite": "SM Elite Four Battle", - "battle_galar_elite": "SWSH League Tournament Battle", - "battle_paldea_elite": "SV Elite Four Battle", - "battle_bb_elite": "SV BB League Elite Four Battle", - "battle_final_encounter": "PMD RTDX Rayquaza's Domain", - "battle_final": "BW Ghetsis Battle", - "battle_kanto_gym": "B2W2 Kanto Gym Battle", - "battle_johto_gym": "B2W2 Johto Gym Battle", - "battle_hoenn_gym": "B2W2 Hoenn Gym Battle", - "battle_sinnoh_gym": "B2W2 Sinnoh Gym Battle", - "battle_unova_gym": "BW Unova Gym Battle", - "battle_kalos_gym": "XY Kalos Gym Battle", - "battle_galar_gym": "SWSH Galar Gym Battle", - "battle_paldea_gym": "SV Paldea Gym Battle", - "battle_legendary_kanto": "XY Kanto Legendary Battle", - "battle_legendary_raikou": "HGSS Raikou Battle", - "battle_legendary_entei": "HGSS Entei Battle", - "battle_legendary_suicune": "HGSS Suicune Battle", - "battle_legendary_lugia": "HGSS Lugia Battle", - "battle_legendary_ho_oh": "HGSS Ho-oh Battle", - "battle_legendary_regis_g5": "B2W2 Legendary Titan Battle", - "battle_legendary_regis_g6": "ORAS Legendary Titan Battle", - "battle_legendary_gro_kyo": "ORAS Groudon & Kyogre Battle", - "battle_legendary_rayquaza": "ORAS Rayquaza Battle", - "battle_legendary_deoxys": "ORAS Deoxys Battle", - "battle_legendary_lake_trio": "ORAS Lake Guardians Battle", - "battle_legendary_sinnoh": "ORAS Sinnoh Legendary Battle", - "battle_legendary_dia_pal": "ORAS Dialga & Palkia Battle", - "battle_legendary_giratina": "ORAS Giratina Battle", - "battle_legendary_arceus": "HGSS Arceus Battle", - "battle_legendary_unova": "BW Unova Legendary Battle", - "battle_legendary_kyurem": "BW Kyurem Battle", - "battle_legendary_res_zek": "BW Reshiram & Zekrom Battle", - "battle_legendary_xern_yvel": "XY Xerneas & Yveltal Battle", - "battle_legendary_tapu": "SM Tapu Battle", - "battle_legendary_sol_lun": "SM Solgaleo & Lunala Battle", - "battle_legendary_ub": "SM Ultra Beast Battle", - "battle_legendary_dusk_dawn": "USUM Dusk Mane & Dawn Wings Necrozma Battle", - "battle_legendary_ultra_nec": "USUM Ultra Necrozma Battle", - "battle_legendary_zac_zam": "SWSH Zacian & Zamazenta Battle", - "battle_legendary_glas_spec": "SWSH Glastrier & Spectrier Battle", - "battle_legendary_calyrex": "SWSH Calyrex Battle", - "battle_legendary_birds_galar": "SWSH Galarian Legendary Birds Battle", - "battle_legendary_ruinous": "SV Treasures of Ruin Battle", - "battle_legendary_kor_mir": "SV Depths of Area Zero Battle", - "battle_legendary_loyal_three": "SV Loyal Three Battle", - "battle_legendary_ogerpon": "SV Ogerpon Battle", - "battle_legendary_terapagos": "SV Terapagos Battle", - "battle_legendary_pecharunt": "SV Pecharunt Battle", - "battle_rival": "BW Rival Battle", - "battle_rival_2": "BW N Battle", - "battle_rival_3": "BW Final N Battle", - "battle_trainer": "BW Trainer Battle", - "battle_wild": "BW Wild Battle", - "battle_wild_strong": "BW Strong Wild Battle", - "end_summit": "PMD RTDX Sky Tower Summit", - "battle_rocket_grunt": "HGSS Team Rocket Battle", - "battle_aqua_magma_grunt": "ORAS Team Aqua & Magma Battle", - "battle_galactic_grunt": "BDSP Team Galactic Battle", - "battle_plasma_grunt": "BW Team Plasma Battle", - "battle_flare_grunt": "XY Team Flare Battle", - "battle_rocket_boss": "USUM Giovanni Battle", - "battle_aqua_magma_boss": "ORAS Archie & Maxie Battle", - "battle_galactic_boss": "BDSP Cyrus Battle", - "battle_plasma_boss": "B2W2 Ghetsis Battle", - "battle_flare_boss": "XY Lysandre Battle", + "music": "Música: ", + "missing_entries": "{{name}}", + "battle_kanto_champion": "B2W2 Batalha do Campeão de Kanto", + "battle_johto_champion": "B2W2 Batalha do Campeão de Johto", + "battle_hoenn_champion": "B2W2 Batalha do Campeão de Hoenn", + "battle_sinnoh_champion": "B2W2 Batalha do Campeão de Sinnoh", + "battle_champion_alder": "BW Batalha do Campeão de Unova", + "battle_champion_iris": "B2W2 Batalha do Campeão de Unova", + "battle_kalos_champion": "XY Batalha do Campeão de Kalos", + "battle_alola_champion": "USUM Batalha do Campeão de Alola", + "battle_galar_champion": "SWSH Batalha do Campeão de Galar", + "battle_champion_geeta": "SV Batalha da Campeã Geeta", + "battle_champion_nemona": "SV Batalha da Campeã Nemona", + "battle_champion_kieran": "SV Batalha do Campeão Kieran", + "battle_hoenn_elite": "ORAS Batalha da Elite dos Quatro", + "battle_unova_elite": "BW Batalha da Elite dos Quatro", + "battle_kalos_elite": "XY Batalha da Elite dos Quatro", + "battle_alola_elite": "SM Batalha da Elite dos Quatro", + "battle_galar_elite": "SWSH Batalha da Liga Pokémon", + "battle_paldea_elite": "SV Batalha da Elite dos Quatro", + "battle_bb_elite": "SV Liga BB Batalha da Elite dos Quatro", + "battle_final_encounter": "PMD RTDX Domínio do Rayquaza", + "battle_final": "BW Batalha do Ghetsis", + "battle_kanto_gym": "B2W2 Batalha de Ginásio de Kanto", + "battle_johto_gym": "B2W2 Batalha de Ginásio de Johto", + "battle_hoenn_gym": "B2W2 Batalha de Ginásio de Hoenn", + "battle_sinnoh_gym": "B2W2 Batalha de Ginásio de Sinnoh", + "battle_unova_gym": "BW Batalha de Ginásio de Unova", + "battle_kalos_gym": "XY Batalha de Ginásio de Kalos", + "battle_galar_gym": "SWSH Batalha de Ginásio de Galar", + "battle_paldea_gym": "SV Batalha de Ginásio de Paldea", + "battle_legendary_kanto": "XY Batalha dos Lendários de Kanto", + "battle_legendary_raikou": "HGSS Batalha do Raikou", + "battle_legendary_entei": "HGSS Batalha do Entei", + "battle_legendary_suicune": "HGSS Batalha do Suicune", + "battle_legendary_lugia": "HGSS Batalha do Lugia", + "battle_legendary_ho_oh": "HGSS Batalha do Ho-Oh", + "battle_legendary_regis_g5": "B2W2 Batalha dos Titãs Lendários", + "battle_legendary_regis_g6": "ORAS Batalha dos Titãs Lendários", + "battle_legendary_gro_kyo": "ORAS Batalha do Groudon & Kyogre", + "battle_legendary_rayquaza": "ORAS Batalha do Rayquaza", + "battle_legendary_deoxys": "ORAS Batalha do Deoxys", + "battle_legendary_lake_trio": "ORAS Batalha do Trio dos Lagos", + "battle_legendary_sinnoh": "ORAS Batalha dos Lendários de Sinnoh", + "battle_legendary_dia_pal": "ORAS Batalha do Dialga & Palkia", + "battle_legendary_giratina": "ORAS Batalha do Giratina", + "battle_legendary_arceus": "HGSS Batalha do Arceus", + "battle_legendary_unova": "BW Batalha dos Lendários de Unova", + "battle_legendary_kyurem": "BW Batalha do Kyurem", + "battle_legendary_res_zek": "BW Batalha do Reshiram & Zekrom", + "battle_legendary_xern_yvel": "XY Batalha do Xerneas & Yveltal", + "battle_legendary_tapu": "SM Batalha dos Guardiões de Alola", + "battle_legendary_sol_lun": "SM Batalha do Solgaleo & Lunala", + "battle_legendary_ub": "SM Batalha das Ultracriaturas", + "battle_legendary_dusk_dawn": "USUM Batalha do Necrozma Crepúsculo & Alvorada", + "battle_legendary_ultra_nec": "USUM Batalha do Necrozma Ultra", + "battle_legendary_zac_zam": "SWSH Batalha do Zacian & Zamazenta", + "battle_legendary_glas_spec": "SWSH Batalha do Glastrier & Spectrier", + "battle_legendary_calyrex": "SWSH Batalha do Calyrex", + "battle_legendary_birds_galar": "SWSH Batalha dos Pássaros Lendários de Galar", + "battle_legendary_ruinous": "SV Batalha dos Lendários Ruinosos", + "battle_legendary_kor_mir": "SV Batalha das Cavernas da Área Zero", + "battle_legendary_loyal_three": "SV Batalha dos Três Leais", + "battle_legendary_ogerpon": "SV Batalha do Ogerpon", + "battle_legendary_terapagos": "SV Batalha do Terapagos", + "battle_legendary_pecharunt": "SV Batalha do Pecharunt", + "battle_rival": "BW Batalha do Rival", + "battle_rival_2": "BW Batalha do N", + "battle_rival_3": "BW Batalha Final do N", + "battle_trainer": "BW Batalha de Treinador", + "battle_wild": "BW Batalha de Pokémon Selvagem", + "battle_wild_strong": "BW Batalha de Pokémon Selvagem Forte", + "end_summit": "PMD RTDX Cume da Torre do Céu", + "battle_rocket_grunt": "HGSS Batalha da Equipe Rocket", + "battle_aqua_magma_grunt": "ORAS Batalha da Equipe Aqua & Magma", + "battle_galactic_grunt": "BDSP Batalha da Equipe Galáctica", + "battle_plasma_grunt": "BW Batalha da Equipe Plasma", + "battle_flare_grunt": "XY Batalha da Equipe Flare", + "battle_rocket_boss": "USUM Batalha do Giovanni", + "battle_aqua_magma_boss": "ORAS Batalha do Maxie & Archie", + "battle_galactic_boss": "BDSP Batalha do Cyrus", + "battle_plasma_boss": "B2W2 Batalha do Ghetsis", + "battle_flare_boss": "XY Batalha do Lysandre", // Biome Music "abyss": "PMD EoS Dark Crater", @@ -110,9 +110,9 @@ export const bgmName: SimpleTranslationEntries = { "plains": "PMD EoS Sky Peak Prairie", "power_plant": "PMD EoS Far Amp Plains", "ruins": "PMD EoS Deep Sealed Ruin", - "sea": "PMD EoS Brine Cave", + "sea": "Andr06 - Marine Mystique", // Name defined by the composer "seabed": "Firel - Seabed", // The composer thinks about a more creative name - "slum": "PMD EoS Sky Peak Coast", + "slum": "Andr06 - Sneaky Snom", // Name defined by the composer "snowy_forest": "PMD EoS Sky Peak Snowfield", "space": "Firel - Aether", "swamp": "PMD EoS Surrounded Sea", @@ -123,23 +123,23 @@ export const bgmName: SimpleTranslationEntries = { "wasteland": "PMD EoS Hidden Highland", // Encounter - "encounter_ace_trainer": "BW Trainers' Eyes Meet (Ace Trainer)", - "encounter_backpacker": "BW Trainers' Eyes Meet (Backpacker)", - "encounter_clerk": "BW Trainers' Eyes Meet (Clerk)", - "encounter_cyclist": "BW Trainers' Eyes Meet (Cyclist)", - "encounter_lass": "BW Trainers' Eyes Meet (Lass)", - "encounter_parasol_lady": "BW Trainers' Eyes Meet (Parasol Lady)", - "encounter_pokefan": "BW Trainers' Eyes Meet (Poke Fan)", - "encounter_psychic": "BW Trainers' Eyes Meet (Psychic)", - "encounter_rich": "BW Trainers' Eyes Meet (Gentleman)", + "encounter_ace_trainer": "BW Encontro com Treinador (Treinador Ás)", + "encounter_backpacker": "BW Encontro com Treinador (Mochileiro)", + "encounter_clerk": "BW Encontro com Treinador (Funcionário)", + "encounter_cyclist": "BW Encontro com Treinador (Ciclista)", + "encounter_lass": "BW Encontro com Treinador (Senhorita)", + "encounter_parasol_lady": "BW Encontro com Treinador (Moça de Sombrinha)", + "encounter_pokefan": "BW Encontro com Treinador (Pokéfã)", + "encounter_psychic": "BW Encontro com Treinador (Médium)", + "encounter_rich": "BW Encontro com Treinador (Cavalheiro)", "encounter_rival": "BW Cheren", - "encounter_roughneck": "BW Trainers' Eyes Meet (Roughneck)", - "encounter_scientist": "BW Trainers' Eyes Meet (Scientist)", - "encounter_twins": "BW Trainers' Eyes Meet (Twins)", - "encounter_youngster": "BW Trainers' Eyes Meet (Youngster)", + "encounter_roughneck": "BW Encontro com Treinador (Arruaceiro)", + "encounter_scientist": "BW Encontro com Treinador (Cientista)", + "encounter_twins": "BW Encontro com Treinador (Gêmeos)", + "encounter_youngster": "BW Encontro com Treinador (Jovem)", // Other - "heal": "BW Pokémon Heal", - "menu": "PMD EoS Welcome to the World of Pokémon!", - "title": "PMD EoS Top Menu Theme", + "heal": "BW Centro Pokémon", + "menu": "PMD EoS Bem-vindo ao Mundo dos Pokémon!", + "title": "PMD EoS Menu Principal", } as const; diff --git a/src/locales/pt_BR/config.ts b/src/locales/pt_BR/config.ts index c02da112770..2f5c28dbad3 100644 --- a/src/locales/pt_BR/config.ts +++ b/src/locales/pt_BR/config.ts @@ -1,8 +1,11 @@ import { ability } from "./ability"; import { abilityTriggers } from "./ability-trigger"; +import { arenaFlyout } from "./arena-flyout"; import { PGFachv, PGMachv } from "./achv"; import { battle } from "./battle"; +import { battleInfo } from "./battle-info"; import { battleMessageUiHandler } from "./battle-message-ui-handler"; +import { battlerTags } from "./battler-tags"; import { berry } from "./berry"; import { bgmName } from "./bgm-name"; import { biome } from "./biome"; @@ -33,6 +36,7 @@ import { pokeball } from "./pokeball"; import { pokemon } from "./pokemon"; import { pokemonInfo } from "./pokemon-info"; import { pokemonInfoContainer } from "./pokemon-info-container"; +import { pokemonSummary } from "./pokemon-summary"; import { saveSlotSelectUiHandler } from "./save-slot-select-ui-handler"; import { splashMessages } from "./splash-messages"; import { starterSelectUiHandler } from "./starter-select-ui-handler"; @@ -49,8 +53,11 @@ import { modifierSelectUiHandler } from "./modifier-select-ui-handler"; export const ptBrConfig = { ability: ability, abilityTriggers: abilityTriggers, + arenaFlyout: arenaFlyout, battle: battle, + battleInfo: battleInfo, battleMessageUiHandler: battleMessageUiHandler, + battlerTags: battlerTags, berry: berry, bgmName: bgmName, biome: biome, @@ -82,6 +89,7 @@ export const ptBrConfig = { pokemon: pokemon, pokemonInfo: pokemonInfo, pokemonInfoContainer: pokemonInfoContainer, + pokemonSummary: pokemonSummary, saveSlotSelectUiHandler: saveSlotSelectUiHandler, statusEffect: statusEffect, terrain: terrain, diff --git a/src/locales/pt_BR/menu-ui-handler.ts b/src/locales/pt_BR/menu-ui-handler.ts index 75e5adcfd87..b874df7e23b 100644 --- a/src/locales/pt_BR/menu-ui-handler.ts +++ b/src/locales/pt_BR/menu-ui-handler.ts @@ -18,6 +18,10 @@ export const menuUiHandler: SimpleTranslationEntries = { "exportSlotSelect": "Selecione um slot para exportar.", "importData": "Importar dados", "exportData": "Exportar dados", + "linkDiscord": "Conectar Discord", + "unlinkDiscord": "Desconectar Discord", + "linkGoogle": "Conectar Google", + "unlinkGoogle": "Desconectar Google", "cancel": "Cancelar", "losingProgressionWarning": "Você vai perder todo o progresso desde o início da batalha. Confirmar?", "noEggs": "Você não está chocando\nnenhum ovo no momento!" diff --git a/src/locales/pt_BR/menu.ts b/src/locales/pt_BR/menu.ts index 1e097737b69..927ccce518b 100644 --- a/src/locales/pt_BR/menu.ts +++ b/src/locales/pt_BR/menu.ts @@ -17,6 +17,7 @@ export const menu: SimpleTranslationEntries = { "username": "Nome de Usuário", "password": "Senha", "login": "Iniciar sessão", + "orUse": "Ou use", "register": "Registrar-se", "emptyUsername": "Nome de usuário vazio", "invalidLoginUsername": "Nome de usuário inválido", @@ -53,5 +54,9 @@ export const menu: SimpleTranslationEntries = { "no": "Não", "disclaimer": "AVISO", "disclaimerDescription": "Este jogo é um produto inacabado; ele pode ter problemas de jogabilidade (incluindo possíveis\n perdas de dados salvos), sofrer alterações sem aviso prévio e pode ou não ser atualizado ou concluído.", + "choosePokemon": "Escolha um Pokémon.", + "renamePokemon": "Renomear Pokémon", + "rename": "Renomear", + "nickname": "Apelido", "errorServerDown": "Opa! Não foi possível conectar-se ao servidor.\n\nVocê pode deixar essa janela aberta,\npois o jogo irá se reconectar automaticamente.", } as const; diff --git a/src/locales/pt_BR/modifier-type.ts b/src/locales/pt_BR/modifier-type.ts index 408d2757f9b..db46ad3f567 100644 --- a/src/locales/pt_BR/modifier-type.ts +++ b/src/locales/pt_BR/modifier-type.ts @@ -58,10 +58,10 @@ export const modifierType: ModifierTypeTranslationEntries = { description: "Aumenta o poder dos ataques do tipo {{moveType}} de um Pokémon em 20%.", }, "PokemonLevelIncrementModifierType": { - description: "Aumenta em 1 o nível de um Pokémon.", + description: "Aumenta em {{levels}} o nível de um Pokémon.", }, "AllPokemonLevelIncrementModifierType": { - description: "Aumenta em 1 os níveis de todos os Pokémon.", + description: "Aumenta em {{levels}} o nível de todos os membros da equipe.", }, "PokemonBaseStatBoosterModifierType": { description: "Aumenta o atributo base de {{statName}} em 10%. Quanto maior os IVs, maior o limite de aumento.", @@ -182,6 +182,9 @@ export const modifierType: ModifierTypeTranslationEntries = { "SOOTHE_BELL": { name: "Guizo" }, + "SCOPE_LENS": { name: "Lentes de Mira", description: "Estas lentes facilitam o foco em pontos fracos. Aumenta a chance de acerto crítico de quem a segurar."}, + "LEEK": { name: "Alho-poró", description: "Esse talo de alho-poró muito longo e rígido aumenta a taxa de acerto crítico dos movimentos do Farfetch'd."}, + "EVIOLITE": { name: "Eviolita", description: "Esse misterioso caroço evolutivo aumenta os atributos de Defesa e Def. Esp. quando segurado por um Pokémon que ainda pode evoluir." }, "SOUL_DEW": { name: "Joia da Alma", description: "Aumenta a influência da natureza de um Pokémon em seus atributos em 10% (cumulativo)." }, diff --git a/src/locales/pt_BR/move.ts b/src/locales/pt_BR/move.ts index 0008cc55416..97e14cb81c2 100644 --- a/src/locales/pt_BR/move.ts +++ b/src/locales/pt_BR/move.ts @@ -2975,7 +2975,7 @@ export const move: MoveTranslationEntries = { }, dynamaxCannon: { name: "Dynamax Cannon", - effect: "O usuário libera um forte feixe de seu núcleo. Este movimento causa o dobro do dano se o alvo estiver acima do nível 200." + effect: "O usuário libera um forte feixe de seu núcleo. Este movimento causa até o dobro do dano se o alvo estiver com seu nível acima do limite." }, snipeShot: { name: "Snipe Shot", diff --git a/src/locales/pt_BR/party-ui-handler.ts b/src/locales/pt_BR/party-ui-handler.ts index aac9e56aefa..08132b4bfc0 100644 --- a/src/locales/pt_BR/party-ui-handler.ts +++ b/src/locales/pt_BR/party-ui-handler.ts @@ -16,6 +16,7 @@ export const partyUiHandler: SimpleTranslationEntries = { "PASS_BATON": "Passar Bastão", "UNPAUSE_EVOLUTION": "Ativar Evolução", "REVIVE": "Reviver", + "RENAME": "Renomear", "choosePokemon": "Escolha um Pokémon.", "doWhatWithThisPokemon": "O que você deseja fazer?", diff --git a/src/locales/pt_BR/pokemon-summary.ts b/src/locales/pt_BR/pokemon-summary.ts new file mode 100644 index 00000000000..a492e701c94 --- /dev/null +++ b/src/locales/pt_BR/pokemon-summary.ts @@ -0,0 +1,20 @@ +import { TranslationEntries } from "#app/interfaces/locales"; + +export const pokemonSummary: TranslationEntries = { + "pokemonInfo": "Info. Pokémon", + "status": "Status", + "powerAccuracyCategory": "Poder\nPrecisão\nCategoria", + "type": "Tipo", + "unknownTrainer": "Desconhecido", + "ot": "TO", + "nature": "natureza", + "expPoints": "Pontos EXP.", + "nextLv": "Próx. Nv.", + "cancel": "Cancelar", + + "memoString": "Natureza {{natureFragment}},\n{{metFragment}}", + "metFragment": { + "normal": "encontrado no Nv.{{level}},\n{{biome}}.", + "apparently": "aparentemente encontrado no Nv.{{level}},\n{{biome}}.", + }, +} as const; diff --git a/src/locales/pt_BR/settings.ts b/src/locales/pt_BR/settings.ts index 9d336cf0757..b6a48143435 100644 --- a/src/locales/pt_BR/settings.ts +++ b/src/locales/pt_BR/settings.ts @@ -96,4 +96,5 @@ export const settings: SimpleTranslationEntries = { "controller": "Controle", "gamepadSupport": "Suporte para Controle", "showBgmBar": "Show Music Names", + "shopOverlayOpacity": "Opacidade da Loja" } as const; diff --git a/src/locales/pt_BR/splash-messages.ts b/src/locales/pt_BR/splash-messages.ts index d21945943a0..b621456a9ec 100644 --- a/src/locales/pt_BR/splash-messages.ts +++ b/src/locales/pt_BR/splash-messages.ts @@ -34,4 +34,5 @@ export const splashMessages: SimpleTranslationEntries = { "alsoTryRadicalRed": "Também Jogue Radical Red!", "eeveeExpo": "Eevee Expo!", "ynoproject": "YNOproject!", + "breedersInSpace": "Criadores Pokémon no Espaço!", } as const; diff --git a/src/locales/zh_CN/ability-trigger.ts b/src/locales/zh_CN/ability-trigger.ts index a9d7fa5b202..9cc1d94847b 100644 --- a/src/locales/zh_CN/ability-trigger.ts +++ b/src/locales/zh_CN/ability-trigger.ts @@ -5,7 +5,58 @@ export const abilityTriggers: SimpleTranslationEntries = { "badDreams": "{{pokemonName}}被折磨着!", "costar": "{{pokemonName}}复制了{{allyName}}的能力变化!", "iceFaceAvoidedDamage": "{{pokemonName}}因为{{abilityName}}\n避免了伤害!", + "perishBody": "因为{{pokemonName}}的{{abilityName}}\n双方将在3回合后灭亡!", + "poisonHeal": "{{pokemonName}}因{{abilityName}}\n回复了少许HP!", "trace": "{{pokemonName}}复制了{{targetName}}的\n{{abilityName}}!", "windPowerCharged": "受{{moveName}}的影响,{{pokemonName}}提升了能力!", "quickDraw":"因为速击效果发动,\n{{pokemonName}}比平常出招更快了!", + "blockItemTheft": "{{pokemonNameWithAffix}}的{{abilityName}}\n阻止了对方夺取道具!", + "typeImmunityHeal": "{{pokemonNameWithAffix}}因{{abilityName}}\n回复了少许HP!", + "nonSuperEffectiveImmunity": "{{pokemonNameWithAffix}}因{{abilityName}}\n避免了伤害!", + "postDefendDisguise": "{{pokemonNameWithAffix}}的\n画皮脱落了", + "moveImmunity": "对{{pokemonNameWithAffix}}没有效果!", + "reverseDrain": "{{pokemonNameWithAffix}}\n吸到了污泥浆!", + "postDefendTypeChange": "{{pokemonNameWithAffix}}因{{abilityName}}\n变成了{{typeName}}属性!", + "postDefendContactDamage": "{{pokemonNameWithAffix}}的{{abilityName}}\n使对方受到了伤害!", + "postDefendAbilitySwap": "{{pokemonNameWithAffix}}\n互换了各自的特性!", + "postDefendAbilityGive": "因为{{pokemonNameWithAffix}}\n对方的特性变成了{{abilityName}}!", + "postDefendMoveDisable": "封住了{{pokemonNameWithAffix}}的\n{{moveName}}!", + "pokemonTypeChange": "{{pokemonNameWithAffix}}\n变成了{{moveType}}属性!", + "postAttackStealHeldItem": "{{pokemonNameWithAffix}}从{{defenderName}}那里\n夺取了{{stolenItemType}}!", + "postDefendStealHeldItem": "{{pokemonNameWithAffix}}从{{attackerName}}那里\n夺取了{{stolenItemType}}!", + "copyFaintedAllyAbility": "继承了{{pokemonNameWithAffix}}的\n{{abilityName}}!", + "intimidateImmunity": "{{pokemonNameWithAffix}}因{{abilityName}}没有受到威吓!", + "postSummonAllyHeal": "{{pokemonNameWithAffix}}喝光了\n{{pokemonName}}泡的茶!", + "postSummonClearAllyStats": "{{pokemonNameWithAffix}}的\n能力变化消失了!", + "postSummonTransform": "{{pokemonNameWithAffix}}\n变身成了{{targetName}}!", + "protectStat": "因{{pokemonNameWithAffix}}的{{abilityName}}\n{{statName}}不会降低!", + "statusEffectImmunityWithName": "{{pokemonNameWithAffix}}因{{abilityName}}\n{{statusEffectName}}没有效果!", + "statusEffectImmunity": "{{pokemonNameWithAffix}}因{{abilityName}}\n异常状态没有效果!", + "battlerTagImmunity": "{{pokemonNameWithAffix}}因{{abilityName}}\n而不会{{battlerTagName}}!", + "forewarn": "{{pokemonNameWithAffix}}读取了\n{{moveName}}!", + "frisk": "{{pokemonNameWithAffix}}察觉到了\n{{opponentName}}的{{opponentAbilityName}}!", + "postWeatherLapseHeal": "{{pokemonNameWithAffix}}因{{abilityName}}\n回复了少许HP!", + "postWeatherLapseDamage": "{{pokemonNameWithAffix}}\n因{abilityName}}而受到了伤害!", + "postTurnLootCreateEatenBerry": "{{pokemonNameWithAffix}}\n收获了{{berryName}}!", + "postTurnHeal": "{{pokemonNameWithAffix}}因{{abilityName}}\n回复了少许HP!", + "fetchBall": "{{pokemonNameWithAffix}}\n捡回了{{pokeballName}}!", + "healFromBerryUse": "{{pokemonNameWithAffix}}因{{abilityName}}\n回复了HP!", + "arenaTrap": "因{{pokemonNameWithAffix}}的{{abilityName}}\n而无法进行替换!", + "postBattleLoot": "{{pokemonNameWithAffix}}捡到了\n{{itemName}}!", + "postFaintContactDamage": "{{pokemonNameWithAffix}}的{{abilityName}}\n使对方受到了伤害!", + "postFaintHpDamage": "{{pokemonNameWithAffix}}的{{abilityName}}\n使对方受到了伤害!", + "postSummonPressure": "从{{pokemonNameWithAffix}}的身上\n感到了一种压迫感!", + "postSummonMoldBreaker": "{{pokemonNameWithAffix}}\n打破了常规!", + "postSummonAnticipation": "{{pokemonNameWithAffix}}\n发抖了!", + "postSummonTurboblaze": "{{pokemonNameWithAffix}}\n正在释放炽焰气场!", + "postSummonTeravolt": "{{pokemonNameWithAffix}}\n正在释放溅射气场!", + "postSummonDarkAura": "{{pokemonNameWithAffix}}\n正在释放暗黑气场!", + "postSummonFairyAura": "{{pokemonNameWithAffix}}\n正在释放妖精气场!", + "postSummonNeutralizingGas": "周围充满了\n{{pokemonNameWithAffix}}的化学变化气体!", + "postSummonAsOneGlastrier": "{{pokemonNameWithAffix}}\n同时拥有了两种特性!", + "postSummonAsOneSpectrier": "{{pokemonNameWithAffix}}\n同时拥有了两种特性!", + "postSummonVesselOfRuin": "{{pokemonNameWithAffix}}的灾祸之鼎\n令周围的宝可梦的{{statName}}减弱了!", + "postSummonSwordOfRuin": "{{pokemonNameWithAffix}}的灾祸之剑\n令周围的宝可梦的{{statName}}减弱了!", + "postSummonTabletsOfRuin": "{{pokemonNameWithAffix}}的灾祸之简\n令周围的宝可梦的{{statName}}减弱了!", + "postSummonBeadsOfRuin": "{{pokemonNameWithAffix}}的灾祸之玉\n令周围的宝可梦的{{statName}}减弱了!", } as const; diff --git a/src/locales/zh_CN/arena-flyout.ts b/src/locales/zh_CN/arena-flyout.ts new file mode 100644 index 00000000000..e30642e7d21 --- /dev/null +++ b/src/locales/zh_CN/arena-flyout.ts @@ -0,0 +1,49 @@ +import { SimpleTranslationEntries } from "#app/interfaces/locales"; + +export const arenaFlyout: SimpleTranslationEntries = { + // Title + "activeBattleEffects": "当前战斗效果", + "player": "我方", + "neutral": "全局", + "enemy": "敌方", + + // WeatherType + "sunny": "大晴天", + "rain": "下雨", + "sandstorm": "沙暴", + "hail": "冰雹", + "snow": "下雪", + "fog": "起雾", + "heavyRain": "大雨", + "harshSun": "大日照", + "strongWinds": "乱流", + + // TerrainType + "misty": "薄雾场地", + "electric": "电气场地", + "grassy": "青草场地", + "psychic": "精神场地", + + // ArenaTagType + "mudSport": "玩泥巴", + "waterSport": "玩水", + "spikes": "撒菱", + "toxicSpikes": "毒菱", + "mist": "白雾", + "futureSight": "预知未来", + "doomDesire": "破灭之愿", + "wish": "祈愿", + "stealthRock": "隐形岩", + "stickyWeb": "黏黏网", + "trickRoom": "戏法空间", + "gravity": "重力", + "reflect": "反射壁", + "lightScreen": "光墙", + "auroraVeil": "极光幕", + "quickGuard": "快速防守", + "wideGuard": "广域防守", + "matBlock": "掀榻榻米", + "craftyShield": "戏法防守", + "tailwind": "顺风", + "happyHour": "快乐时光", +}; diff --git a/src/locales/zh_CN/battle-info.ts b/src/locales/zh_CN/battle-info.ts new file mode 100644 index 00000000000..684ce4bc26a --- /dev/null +++ b/src/locales/zh_CN/battle-info.ts @@ -0,0 +1,5 @@ +import { SimpleTranslationEntries } from "#app/interfaces/locales"; + +export const battleInfo: SimpleTranslationEntries = { + "generation": "第{{generation}}世代", +} as const; diff --git a/src/locales/zh_CN/battle.ts b/src/locales/zh_CN/battle.ts index ff2e90a2c59..af9f7ac6cbb 100644 --- a/src/locales/zh_CN/battle.ts +++ b/src/locales/zh_CN/battle.ts @@ -62,6 +62,8 @@ export const battle: SimpleTranslationEntries = { "skipItemQuestion": "你确定要跳过拾取道具吗?", "eggHatching": "咦?", "stealEatBerry": "{{pokemonName}} stole and ate\n{{targetName}}'s {{berryName}}!", + "ppHealBerry": "{{pokemonNameWithAffix}}用{{berryName}}\n回复了{{moveName}}的PP!", + "hpHealBerry": "{{pokemonNameWithAffix}}用{{berryName}}\n回复了体力!", "ivScannerUseQuestion": "对{{pokemonName}}使用个体值扫描仪?", "wildPokemonWithAffix": "野生的{{pokemonName}}", "foePokemonWithAffix": "对手 {{pokemonName}}", @@ -69,15 +71,22 @@ export const battle: SimpleTranslationEntries = { "drainMessage": "{{pokemonName}}\n吸取了体力!", "regainHealth": "{{pokemonName}}\n回复了体力!", "fainted": "{{pokemonNameWithAffix}}\n倒下了!", - "statRose": "{{pokemonNameWithAffix}}\n的{{stats}}提高了!", - "statSharplyRose": "{{pokemonNameWithAffix}}\n的{{stats}}大幅提高了!", - "statRoseDrastically": "{{pokemonNameWithAffix}}\n的{{stats}}极大幅提高了!", - "statWontGoAnyHigher": "{{pokemonNameWithAffix}}\n的{{stats}}已经无法再提高了!", - "statFell": "{{pokemonNameWithAffix}}\n的{{stats}}降低了!", - "statHarshlyFell": "{{pokemonNameWithAffix}}\n的{{stats}}大幅降低了!", - "statSeverelyFell": "{{pokemonNameWithAffix}}\n的{{stats}}极大幅降低了!", - "statWontGoAnyLower": "{{pokemonNameWithAffix}}\n的{{stats}}已经无法再降低了!", + "statsAnd": "and", + "stats": "Stats", + "statRose_other": "{{pokemonNameWithAffix}}的 {{stats}}提高了!", + "statSharplyRose_other": "{{pokemonNameWithAffix}}的 {{stats}}大幅提高了!", + "statRoseDrastically_other": "{{pokemonNameWithAffix}}的 {{stats}}极大幅提高了!", + "statWontGoAnyHigher_other": "{{pokemonNameWithAffix}}的 {{stats}}已经无法再提高了!", + "statFell_other": "{{pokemonNameWithAffix}}的 {{stats}}降低了!", + "statHarshlyFell_other": "{{pokemonNameWithAffix}}的 {{stats}}大幅降低了!", + "statSeverelyFell_other": "{{pokemonNameWithAffix}}的 {{stats}}极大幅降低了!", + "statWontGoAnyLower_other": "{{pokemonNameWithAffix}}的 {{stats}}已经无法再降低了!", + "transformedIntoType": "{{pokemonName}} transformed\ninto the {{type}} type!", "ppReduced": "降低了{{targetName}}的\n{{moveName}}的PP{{reduction}}点!", + "retryBattle": "你要从对战开始时重试么?", + "unlockedSomething": "{{unlockedThing}}\n已解锁。", + "congratulations": "恭喜!", + "beatModeFirstTime": "{{speciesName}}首次击败了{{gameMode}}!\n你获得了{{newModifier}}!", "battlerTagsRechargingLapse": "{{pokemonNameWithAffix}}\n因攻击的反作用力而无法动弹!", "battlerTagsTrappedOnAdd": "{{pokemonNameWithAffix}}不能逃跑!", "battlerTagsTrappedOnRemove": "{{pokemonNameWithAffix}}\n摆脱了{{moveName}}!", @@ -124,11 +133,14 @@ export const battle: SimpleTranslationEntries = { "battlerTagsEnduringLapse": "{{pokemonNameWithAffix}}\n挺住了攻击!", "battlerTagsSturdyLapse": "{{pokemonNameWithAffix}}\n挺住了攻击!", "battlerTagsPerishSongLapse": "{{pokemonNameWithAffix}}\n的灭亡计时变成{{turnCount}}了!", + "battlerTagsCenterOfAttentionOnAdd": "{{pokemonNameWithAffix}}\n变得万众瞩目了!", "battlerTagsTruantLapse": "{{pokemonNameWithAffix}}\n正在偷懒!", "battlerTagsSlowStartOnAdd": "{{pokemonNameWithAffix}}\n无法拿出平时的水平!", "battlerTagsSlowStartOnRemove": "{{pokemonNameWithAffix}}\n恢复了平时的水平!", "battlerTagsHighestStatBoostOnAdd": "{{pokemonNameWithAffix}}的\n{{statName}}提高了!", "battlerTagsHighestStatBoostOnRemove": "{{pokemonNameWithAffix}}的\n{{abilityName}}效果解除了!", + "battlerTagsMagnetRisenOnAdd": "{{pokemonNameWithAffix}}\n因电磁力浮了起来!", + "battlerTagsMagnetRisenOnRemove": "{{pokemonNameWithAffix}}的\n电磁力消失了!", "battlerTagsCritBoostOnAdd": "{{pokemonNameWithAffix}}\n现在干劲十足!", "battlerTagsCritBoostOnRemove": "{{pokemonNameWithAffix}}\n如释重负似地放松了下来。", "battlerTagsSaltCuredOnAdd": "{{pokemonNameWithAffix}}\n陷入了盐腌状态!", diff --git a/src/locales/zh_CN/battler-tags.ts b/src/locales/zh_CN/battler-tags.ts new file mode 100644 index 00000000000..2a945809282 --- /dev/null +++ b/src/locales/zh_CN/battler-tags.ts @@ -0,0 +1,12 @@ +import { SimpleTranslationEntries } from "#app/interfaces/locales"; + +export const battlerTags: SimpleTranslationEntries = { + "trappedDesc": "束缚", + "flinchedDesc": "畏缩", + "confusedDesc": "混乱", + "infatuatedDesc": "着迷", + "seedDesc": "寄生种子", + "nightmareDesc": "恶梦", + "ingrainDesc": "扎根", + "drowsyDesc": "瞌睡", +} as const; diff --git a/src/locales/zh_CN/bgm-name.ts b/src/locales/zh_CN/bgm-name.ts index b582bc6a2d0..71db565eb05 100644 --- a/src/locales/zh_CN/bgm-name.ts +++ b/src/locales/zh_CN/bgm-name.ts @@ -110,9 +110,9 @@ export const bgmName: SimpleTranslationEntries = { "plains": "空之探险队「天空顶端(草原)」", "power_plant": "空之探险队「电气平原 深处」", "ruins": "空之探险队「封印岩地 深处」", - "sea": "空之探险队「石滩洞窟」", + "sea": "Andr06 - Marine Mystique", // Name defined by the composer "seabed": "Firel - 海底", // The composer thinks about a more creative name - "slum": "空之探险队「天空顶端(岩场)」", + "slum": "Andr06 - Sneaky Snom", // Name defined by the composer "snowy_forest": "空之探险队「天空顶端(雪山)」", "space": "Firel - 太空", "swamp": "空之探险队「封闭之海」", diff --git a/src/locales/zh_CN/config.ts b/src/locales/zh_CN/config.ts index eaf7ba4cc09..de90e49816e 100644 --- a/src/locales/zh_CN/config.ts +++ b/src/locales/zh_CN/config.ts @@ -1,8 +1,11 @@ import { ability } from "./ability"; import { abilityTriggers } from "./ability-trigger"; +import { arenaFlyout } from "./arena-flyout"; import { PGFachv, PGMachv } from "./achv"; import { battle } from "./battle"; +import { battleInfo } from "./battle-info"; import { battleMessageUiHandler } from "./battle-message-ui-handler"; +import { battlerTags } from "./battler-tags"; import { berry } from "./berry"; import { bgmName } from "./bgm-name"; import { biome } from "./biome"; @@ -33,6 +36,7 @@ import { pokeball } from "./pokeball"; import { pokemon } from "./pokemon"; import { pokemonInfo } from "./pokemon-info"; import { pokemonInfoContainer } from "./pokemon-info-container"; +import { pokemonSummary } from "./pokemon-summary"; import { saveSlotSelectUiHandler } from "./save-slot-select-ui-handler"; import { splashMessages } from "./splash-messages"; import { starterSelectUiHandler } from "./starter-select-ui-handler"; @@ -49,8 +53,11 @@ import { modifierSelectUiHandler } from "./modifier-select-ui-handler"; export const zhCnConfig = { ability: ability, abilityTriggers: abilityTriggers, + arenaFlyout: arenaFlyout, battle: battle, + battleInfo: battleInfo, battleMessageUiHandler: battleMessageUiHandler, + battlerTags: battlerTags, berry: berry, bgmName: bgmName, biome: biome, @@ -82,6 +89,7 @@ export const zhCnConfig = { pokemon: pokemon, pokemonInfo: pokemonInfo, pokemonInfoContainer: pokemonInfoContainer, + pokemonSummary: pokemonSummary, saveSlotSelectUiHandler: saveSlotSelectUiHandler, settings: settings, splashMessages: splashMessages, diff --git a/src/locales/zh_CN/menu-ui-handler.ts b/src/locales/zh_CN/menu-ui-handler.ts index 71d79472a45..461f5bb9956 100644 --- a/src/locales/zh_CN/menu-ui-handler.ts +++ b/src/locales/zh_CN/menu-ui-handler.ts @@ -18,6 +18,10 @@ export const menuUiHandler: SimpleTranslationEntries = { "exportSlotSelect": "选择要导出的存档位。", "importData": "导入数据", "exportData": "导出数据", + "linkDiscord": "Link Discord", + "unlinkDiscord": "Unlink Discord", + "linkGoogle": "Link Google", + "unlinkGoogle": "Unlink Google", "cancel": "取消", "losingProgressionWarning": "你将失去自战斗开始以来的所有进度。\n是否继续?", "noEggs": "当前没有任何蛋\n正在孵化中!" diff --git a/src/locales/zh_CN/menu.ts b/src/locales/zh_CN/menu.ts index 92a9d1bfbf4..4ff4ffc3128 100644 --- a/src/locales/zh_CN/menu.ts +++ b/src/locales/zh_CN/menu.ts @@ -17,6 +17,7 @@ export const menu: SimpleTranslationEntries = { "username": "用户名", "password": "密码", "login": "登录", + "Or use": "Or use", "register": "注册", "emptyUsername": "用户名不能为空", "invalidLoginUsername": "输入的用户名无效", @@ -53,5 +54,9 @@ export const menu: SimpleTranslationEntries = { "no": "否", "disclaimer": "免责声明", "disclaimerDescription": "这个游戏尚未完成; 可能存在游戏性问题(包括潜在的丢档风险)、\n 不经通知的调整、 未来可能会更新或完成更多内容", + "choosePokemon": "选择一只宝可梦。", + "renamePokemon": "给宝可梦起名", + "rename": "起名", + "nickname": "昵称", "errorServerDown": "糟糕!访问服务器时发生了错误。\n\n你可以保持页面开启,\n游戏会自动重新连接。", } as const; diff --git a/src/locales/zh_CN/modifier-type.ts b/src/locales/zh_CN/modifier-type.ts index 539062875f1..8d37e7336dc 100644 --- a/src/locales/zh_CN/modifier-type.ts +++ b/src/locales/zh_CN/modifier-type.ts @@ -58,10 +58,10 @@ export const modifierType: ModifierTypeTranslationEntries = { description: "一只宝可梦的{{moveType}}系招式威力提升20%。", }, "PokemonLevelIncrementModifierType": { - description: "一只宝可梦等级提升1级。", + description: "使一只宝可梦的等级提升{{levels}}级。", }, "AllPokemonLevelIncrementModifierType": { - description: "所有成员宝可梦等级提升1级。", + description: "使一只寶可夢的等級提升{{levels}}級。", }, "PokemonBaseStatBoosterModifierType": { description: "增加10%持有者的{{statName}},\n个体值越高堆叠上限越高。", @@ -182,6 +182,9 @@ export const modifierType: ModifierTypeTranslationEntries = { "SOOTHE_BELL": { name: "安抚之铃" }, + "SCOPE_LENS": { name: "焦点镜", description: "能看见弱点的镜片。携带它的宝可梦的招式 会变得容易击中要害。" }, + "LEEK": { name: "大葱", description: "非常长且坚硬的茎。让大葱鸭携带后,\n招式会变得容易击中要害。" }, + "EVIOLITE": { name: "进化奇石", description: "携带后,还能进化的宝可梦的\n防御和特防就会提高。" }, "SOUL_DEW": { name: "心之水滴", description: "增加10%宝可梦性格对数值的影响 (加算)。" }, diff --git a/src/locales/zh_CN/move.ts b/src/locales/zh_CN/move.ts index 6513f3bcfc7..0c022559329 100644 --- a/src/locales/zh_CN/move.ts +++ b/src/locales/zh_CN/move.ts @@ -2975,7 +2975,7 @@ export const move: MoveTranslationEntries = { }, "dynamaxCannon": { name: "极巨炮", - effect: "将凝缩在体内的能量从核心放出进行攻击", + effect: "将凝缩在体内的能量从核心放出进行攻击,\n对手等级比当前波次的等级上限越高,造成的伤害越高,最多两倍。", }, "snipeShot": { name: "狙击", diff --git a/src/locales/zh_CN/party-ui-handler.ts b/src/locales/zh_CN/party-ui-handler.ts index 4cb2f816b2e..7d70ddd1503 100644 --- a/src/locales/zh_CN/party-ui-handler.ts +++ b/src/locales/zh_CN/party-ui-handler.ts @@ -16,6 +16,7 @@ export const partyUiHandler: SimpleTranslationEntries = { "PASS_BATON": "接棒", "UNPAUSE_EVOLUTION": "解除进化暂停", "REVIVE": "复活", + "RENAME": "起名", "choosePokemon": "选择一只宝可梦。", "doWhatWithThisPokemon": "要对宝可梦做什么?", diff --git a/src/locales/zh_CN/pokemon-summary.ts b/src/locales/zh_CN/pokemon-summary.ts new file mode 100644 index 00000000000..24f0fbeed97 --- /dev/null +++ b/src/locales/zh_CN/pokemon-summary.ts @@ -0,0 +1,19 @@ +import { TranslationEntries } from "#app/interfaces/locales"; + +export const pokemonSummary: TranslationEntries = { + "pokemonInfo": "宝可梦信息", + "status": "状态", + "powerAccuracyCategory": "威力\n命中率\n类别", + "type": "属性", + "unknownTrainer": "未知", + "ot": "训练师", + "nature": "性格", + "expPoints": "经验值", + "nextLv": "下一级", + "cancel": "取消", + + "memoString": "{{natureFragment}} 性格,\n{{metFragment}}", + "metFragment": { + "apparently": "命中注定般地相遇于Lv.{{level}},\n{{biome}}。", + }, +} as const; diff --git a/src/locales/zh_CN/settings.ts b/src/locales/zh_CN/settings.ts index 3ca6cb435c6..92372deec42 100644 --- a/src/locales/zh_CN/settings.ts +++ b/src/locales/zh_CN/settings.ts @@ -96,4 +96,5 @@ export const settings: SimpleTranslationEntries = { "controller": "控制器", "gamepadSupport": "手柄支持", "showBgmBar": "显示音乐名称", + "shopOverlayOpacity": "商店显示不透明度" } as const; diff --git a/src/locales/zh_CN/splash-messages.ts b/src/locales/zh_CN/splash-messages.ts index 35551cf1163..01efb45cd5a 100644 --- a/src/locales/zh_CN/splash-messages.ts +++ b/src/locales/zh_CN/splash-messages.ts @@ -34,4 +34,5 @@ export const splashMessages: SimpleTranslationEntries = { "alsoTryRadicalRed": "也玩玩看激进红!", "eeveeExpo": "伊布博览会!", "ynoproject": "Yume Nikki 页游项目!", + "breedersInSpace": "饲养员也能上太空?", } as const; diff --git a/src/locales/zh_TW/ability-trigger.ts b/src/locales/zh_TW/ability-trigger.ts index c436e5021f7..c0b253933ca 100644 --- a/src/locales/zh_TW/ability-trigger.ts +++ b/src/locales/zh_TW/ability-trigger.ts @@ -5,7 +5,58 @@ export const abilityTriggers: SimpleTranslationEntries = { "badDreams": "{{pokemonName}} 被折磨着!", "costar": "{{pokemonName}} 複製了 {{allyName}} 的\n能力變化!", "iceFaceAvoidedDamage": "{{pokemonName}} 因爲 {{abilityName}}\n避免了傷害!", + "perishBody": "{{pokemonName}}'s {{abilityName}}\nwill faint both pokemon in 3 turns!", + "poisonHeal": "{{pokemonName}}'s {{abilityName}}\nrestored its HP a little!", "trace": "{{pokemonName}} 複製了 {{targetName}} 的\n{{abilityName}}!", "windPowerCharged": "受 {{moveName}} 的影響, {{pokemonName}} 提升了能力!", "quickDraw":"{{pokemonName}} can act faster than normal, thanks to its Quick Draw!", + "blockItemTheft": "{{pokemonNameWithAffix}}'s {{abilityName}}\nprevents item theft!", + "typeImmunityHeal": "{{pokemonNameWithAffix}}'s {{abilityName}}\nrestored its HP a little!", + "nonSuperEffectiveImmunity": "{{pokemonNameWithAffix}} avoided damage\nwith {{abilityName}}!", + "postDefendDisguise": "{{pokemonNameWithAffix}}'s disguise was busted!", + "moveImmunity": "It doesn't affect {{pokemonNameWithAffix}}!", + "reverseDrain": "{{pokemonNameWithAffix}} sucked up the liquid ooze!", + "postDefendTypeChange": "{{pokemonNameWithAffix}}'s {{abilityName}}\nmade it the {{typeName}} type!", + "postDefendContactDamage": "{{pokemonNameWithAffix}}'s {{abilityName}}\nhurt its attacker!", + "postDefendAbilitySwap": "{{pokemonNameWithAffix}} swapped\nabilities with its target!", + "postDefendAbilityGive": "{{pokemonNameWithAffix}} gave its target\n{{abilityName}}!", + "postDefendMoveDisable": "{{pokemonNameWithAffix}}'s {{moveName}}\nwas disabled!", + "pokemonTypeChange": "{{pokemonNameWithAffix}} transformed into the {{moveType}} type!", + "postAttackStealHeldItem": "{{pokemonNameWithAffix}} stole\n{{defenderName}}'s {{stolenItemType}}!", + "postDefendStealHeldItem": "{{pokemonNameWithAffix}} stole\n{{attackerName}}'s {{stolenItemType}}!", + "copyFaintedAllyAbility": "{{pokemonNameWithAffix}}'s {{abilityName}} was taken over!", + "intimidateImmunity": "{{pokemonNameWithAffix}}'s {{abilityName}} prevented it from being Intimidated!", + "postSummonAllyHeal": "{{pokemonNameWithAffix}} drank down all the\nmatcha that {{pokemonName}} made!", + "postSummonClearAllyStats": "{{pokemonNameWithAffix}}'s stat changes\nwere removed!", + "postSummonTransform": "{{pokemonNameWithAffix}} transformed\ninto {{targetName}}!", + "protectStat": "{{pokemonNameWithAffix}}'s {{abilityName}}\nprevents lowering its {{statName}}!", + "statusEffectImmunityWithName": "{{pokemonNameWithAffix}}'s {{abilityName}}\nprevents {{statusEffectName}}!", + "statusEffectImmunity": "{{pokemonNameWithAffix}}'s {{abilityName}}\nprevents status problems!", + "battlerTagImmunity": "{{pokemonNameWithAffix}}'s {{abilityName}}\nprevents {{battlerTagName}}!", + "forewarn": "{{pokemonNameWithAffix}} was forewarned about {{moveName}}!", + "frisk": "{{pokemonNameWithAffix}} frisked {{opponentName}}'s {{opponentAbilityName}}!", + "postWeatherLapseHeal": "{{pokemonNameWithAffix}}'s {{abilityName}}\nrestored its HP a little!", + "postWeatherLapseDamage": "{{pokemonNameWithAffix}} is hurt\nby its {{abilityName}}!", + "postTurnLootCreateEatenBerry": "{{pokemonNameWithAffix}} harvested one {{berryName}}!", + "postTurnHeal": "{{pokemonNameWithAffix}}'s {{abilityName}}\nrestored its HP a little!", + "fetchBall": "{{pokemonNameWithAffix}} found a\n{{pokeballName}}!", + "healFromBerryUse": "{{pokemonNameWithAffix}}'s {{abilityName}}\nrestored its HP!", + "arenaTrap": "{{pokemonNameWithAffix}}'s {{abilityName}}\nprevents switching!", + "postBattleLoot": "{{pokemonNameWithAffix}} picked up\n{{itemName}}!", + "postFaintContactDamage": "{{pokemonNameWithAffix}}'s {{abilityName}}\nhurt its attacker!", + "postFaintHpDamage": "{{pokemonNameWithAffix}}'s {{abilityName}}\nhurt its attacker!", + "postSummonPressure": "{{pokemonNameWithAffix}} is exerting its Pressure!", + "postSummonMoldBreaker": "{{pokemonNameWithAffix}} breaks the mold!", + "postSummonAnticipation": "{{pokemonNameWithAffix}} shuddered!", + "postSummonTurboblaze": "{{pokemonNameWithAffix}} is radiating a blazing aura!", + "postSummonTeravolt": "{{pokemonNameWithAffix}} is radiating a bursting aura!", + "postSummonDarkAura": "{{pokemonNameWithAffix}} is radiating a Dark Aura!", + "postSummonFairyAura": "{{pokemonNameWithAffix}} is radiating a Fairy Aura!", + "postSummonNeutralizingGas": "{{pokemonNameWithAffix}}'s Neutralizing Gas filled the area!", + "postSummonAsOneGlastrier": "{{pokemonNameWithAffix}} has two Abilities!", + "postSummonAsOneSpectrier": "{{pokemonNameWithAffix}} has two Abilities!", + "postSummonVesselOfRuin": "{{pokemonNameWithAffix}}'s Vessel of Ruin lowered the {{statName}}\nof all surrounding Pokémon!", + "postSummonSwordOfRuin": "{{pokemonNameWithAffix}}'s Sword of Ruin lowered the {{statName}}\nof all surrounding Pokémon!", + "postSummonTabletsOfRuin": "{{pokemonNameWithAffix}}'s Tablets of Ruin lowered the {{statName}}\nof all surrounding Pokémon!", + "postSummonBeadsOfRuin": "{{pokemonNameWithAffix}}'s Beads of Ruin lowered the {{statName}}\nof all surrounding Pokémon!", } as const; diff --git a/src/locales/zh_TW/arena-flyout.ts b/src/locales/zh_TW/arena-flyout.ts new file mode 100644 index 00000000000..8a31d37b10c --- /dev/null +++ b/src/locales/zh_TW/arena-flyout.ts @@ -0,0 +1,49 @@ +import { SimpleTranslationEntries } from "#app/interfaces/locales"; + +export const arenaFlyout: SimpleTranslationEntries = { + // Title + "activeBattleEffects": "Active Battle Effects", + "player": "Player", + "neutral": "Neutral", + "enemy": "Enemy", + + // WeatherType + "sunny": "Sunny", + "rain": "Rain", + "sandstorm": "Sandstorm", + "hail": "Hail", + "snow": "Snow", + "fog": "Fog", + "heavyRain": "Heavy Rain", + "harshSun": "Harsh Sun", + "strongWinds": "Strong Winds", + + // TerrainType + "misty": "Misty Terrain", + "electric": "Electric Terrain", + "grassy": "Grassy Terrain", + "psychic": "Psychic Terrain", + + // ArenaTagType + "mudSport": "Mud Sport", + "waterSport": "Water Sport", + "spikes": "Spikes", + "toxicSpikes": "Toxic Spikes", + "mist": "Mist", + "futureSight": "Future Sight", + "doomDesire": "Doom Desire", + "wish": "Wish", + "stealthRock": "Stealth Rock", + "stickyWeb": "Sticky Web", + "trickRoom": "Trick Room", + "gravity": "Gravity", + "reflect": "Reflect", + "lightScreen": "Light Screen", + "auroraVeil": "Aurora Veil", + "quickGuard": "Quick Guard", + "wideGuard": "Wide Guard", + "matBlock": "Mat Block", + "craftyShield": "Crafty Shield", + "tailwind": "Tailwind", + "happyHour": "Happy Hour", +}; diff --git a/src/locales/zh_TW/battle-info.ts b/src/locales/zh_TW/battle-info.ts new file mode 100644 index 00000000000..684ce4bc26a --- /dev/null +++ b/src/locales/zh_TW/battle-info.ts @@ -0,0 +1,5 @@ +import { SimpleTranslationEntries } from "#app/interfaces/locales"; + +export const battleInfo: SimpleTranslationEntries = { + "generation": "第{{generation}}世代", +} as const; diff --git a/src/locales/zh_TW/battle.ts b/src/locales/zh_TW/battle.ts index bc7b712185a..75457b34c07 100644 --- a/src/locales/zh_TW/battle.ts +++ b/src/locales/zh_TW/battle.ts @@ -54,6 +54,8 @@ export const battle: SimpleTranslationEntries = { "escapeVerbSwitch": "切換", "escapeVerbFlee": "逃跑", "stealEatBerry": "{{pokemonName}} stole and ate\n{{targetName}}'s {{berryName}}!", + "ppHealBerry": "{{pokemonNameWithAffix}}用{{berryName}}\n回復了{{moveName}}的PP!", + "hpHealBerry": "{{pokemonNameWithAffix}}用{{berryName}}\n回復了體力!", "notDisabled": "{{moveName}} 不再被禁用!", "turnEndHpRestore": "{{pokemonName}}'s HP was restored.", "hpIsFull": "{{pokemonName}}'s\nHP is full!", @@ -66,15 +68,22 @@ export const battle: SimpleTranslationEntries = { "drainMessage": "{{pokemonName}} 吸取了體力!", "regainHealth": "{{pokemonName}} 回復了體力!", "fainted": "{{pokemonNameWithAffix}} 倒下了!", - "statRose": "{{pokemonNameWithAffix}} 的 {{stats}} 提高了!", - "statSharplyRose": "{{pokemonNameWithAffix}} 的 {{stats}} 大幅提高了!", - "statRoseDrastically": "{{pokemonNameWithAffix}} 的 {{stats}} 極大幅提高了!", - "statWontGoAnyHigher": "{{pokemonNameWithAffix}} 的 {{stats}} 已經無法再提高了!", - "statFell": "{{pokemonNameWithAffix}} 的 {{stats}} 降低了!", - "statHarshlyFell": "{{pokemonNameWithAffix}} 的 {{stats}} 大幅降低了!", - "statSeverelyFell": "{{pokemonNameWithAffix}} 的 {{stats}} 極大幅降低了!", - "statWontGoAnyLower": "{{pokemonNameWithAffix}} 的 {{stats}} 已經無法再降低了!", + "statsAnd": "and", + "stats": "Stats", + "statRose_other": "{{pokemonNameWithAffix}}'s {{stats}} rose!", + "statSharplyRose_other": "{{pokemonNameWithAffix}}'s {{stats}} sharply rose!", + "statRoseDrastically_other": "{{pokemonNameWithAffix}}'s {{stats}} rose drastically!", + "statWontGoAnyHigher_other": "{{pokemonNameWithAffix}}'s {{stats}} won't go any higher!", + "statFell_other": "{{pokemonNameWithAffix}}'s {{stats}} fell!", + "statHarshlyFell_other": "{{pokemonNameWithAffix}}'s {{stats}} harshly fell!", + "statSeverelyFell_other": "{{pokemonNameWithAffix}}'s {{stats}} severely fell!", + "statWontGoAnyLower_other": "{{pokemonNameWithAffix}}'s {{stats}} won't go any lower!", + "transformedIntoType": "{{pokemonName}} transformed\ninto the {{type}} type!", "ppReduced": "降低了 {{targetName}} 的\n{{moveName}} 的PP{{reduction}}點!", + "retryBattle": "Would you like to retry from the start of the battle?", + "unlockedSomething": "{{unlockedThing}}\nhas been unlocked.", + "congratulations": "Congratulations!", + "beatModeFirstTime": "{{speciesName}} beat {{gameMode}} Mode for the first time!\nYou received {{newModifier}}!", "battlerTagsRechargingLapse": "{{pokemonNameWithAffix}}因攻擊的反作用力而無法動彈!", "battlerTagsTrappedOnAdd": "{{pokemonNameWithAffix}}不能逃跑!", "battlerTagsTrappedOnRemove": "{{pokemonNameWithAffix}}擺脫了{{moveName}}!", @@ -121,11 +130,14 @@ export const battle: SimpleTranslationEntries = { "battlerTagsEnduringLapse": "{{pokemonNameWithAffix}}挺住了攻擊!", "battlerTagsSturdyLapse": "{{pokemonNameWithAffix}}挺住了攻擊!", "battlerTagsPerishSongLapse": "{{pokemonNameWithAffix}} 的滅亡計時變成{{turnCount}}了!", + "battlerTagsCenterOfAttentionOnAdd": "{{pokemonNameWithAffix}}\n變得萬眾矚目了!", "battlerTagsTruantLapse": "{{pokemonNameWithAffix}}正在偷懶!", "battlerTagsSlowStartOnAdd": "{{pokemonNameWithAffix}}無法拿出平時的水平!", "battlerTagsSlowStartOnRemove": "{{pokemonNameWithAffix}}恢復了平時的水平!", "battlerTagsHighestStatBoostOnAdd": "{{pokemonNameWithAffix}}的{{statName}}升高了!", "battlerTagsHighestStatBoostOnRemove": "{{pokemonNameWithAffix}}的{{abilityName}}效果解除了!", + "battlerTagsMagnetRisenOnAdd": "{{pokemonNameWithAffix}}\n因電磁力浮了起來!", + "battlerTagsMagnetRisenOnRemove": "{{pokemonNameWithAffix}}的\n電磁力消失了!", "battlerTagsCritBoostOnAdd": "{{pokemonNameWithAffix}}現在幹勁十足!", "battlerTagsCritBoostOnRemove": "{{pokemonNameWithAffix}}如釋重負似地放鬆了下來。", "battlerTagsSaltCuredOnAdd": "{{pokemonNameWithAffix}} 陷入了鹽腌狀態!", diff --git a/src/locales/zh_TW/battler-tags.ts b/src/locales/zh_TW/battler-tags.ts new file mode 100644 index 00000000000..73747e51f61 --- /dev/null +++ b/src/locales/zh_TW/battler-tags.ts @@ -0,0 +1,12 @@ +import { SimpleTranslationEntries } from "#app/interfaces/locales"; + +export const battlerTags: SimpleTranslationEntries = { + "trappedDesc": "束縛", + "flinchedDesc": "畏縮", + "confusedDesc": "混亂", + "infatuatedDesc": "著迷", + "seedDesc": "寄生種子", + "nightmareDesc": "惡夢", + "ingrainDesc": "扎根", + "drowsyDesc": "瞌睡", +} as const; diff --git a/src/locales/zh_TW/bgm-name.ts b/src/locales/zh_TW/bgm-name.ts index 87d90dabc9d..01fb86b281d 100644 --- a/src/locales/zh_TW/bgm-name.ts +++ b/src/locales/zh_TW/bgm-name.ts @@ -110,9 +110,9 @@ export const bgmName: SimpleTranslationEntries = { "plains": "PMD EoS Sky Peak Prairie", "power_plant": "PMD EoS Far Amp Plains", "ruins": "PMD EoS Deep Sealed Ruin", - "sea": "PMD EoS Brine Cave", + "sea": "Andr06 - Marine Mystique", // Name defined by the composer "seabed": "Firel - Seabed", // The composer thinks about a more creative name - "slum": "PMD EoS Sky Peak Coast", + "slum": "Andr06 - Sneaky Snom", // Name defined by the composer "snowy_forest": "PMD EoS Sky Peak Snowfield", "space": "Firel - Aether", "swamp": "PMD EoS Surrounded Sea", diff --git a/src/locales/zh_TW/config.ts b/src/locales/zh_TW/config.ts index f19a6941a88..6f7c4e51671 100644 --- a/src/locales/zh_TW/config.ts +++ b/src/locales/zh_TW/config.ts @@ -1,8 +1,11 @@ import { ability } from "./ability"; import { abilityTriggers } from "./ability-trigger"; +import { arenaFlyout } from "./arena-flyout"; import { PGFachv, PGMachv } from "./achv"; import { battle } from "./battle"; +import { battleInfo } from "./battle-info"; import { battleMessageUiHandler } from "./battle-message-ui-handler"; +import { battlerTags } from "./battler-tags"; import { berry } from "./berry"; import { bgmName } from "./bgm-name"; import { biome } from "./biome"; @@ -33,6 +36,7 @@ import { pokeball } from "./pokeball"; import { pokemon } from "./pokemon"; import { pokemonInfo } from "./pokemon-info"; import { pokemonInfoContainer } from "./pokemon-info-container"; +import { pokemonSummary } from "./pokemon-summary"; import { saveSlotSelectUiHandler } from "./save-slot-select-ui-handler"; import { splashMessages } from "./splash-messages"; import { starterSelectUiHandler } from "./starter-select-ui-handler"; @@ -49,8 +53,11 @@ import { modifierSelectUiHandler } from "./modifier-select-ui-handler"; export const zhTwConfig = { ability: ability, abilityTriggers: abilityTriggers, + arenaFlyout: arenaFlyout, battle: battle, + battleInfo: battleInfo, battleMessageUiHandler: battleMessageUiHandler, + battlerTags: battlerTags, berry: berry, bgmName: bgmName, biome: biome, @@ -82,6 +89,7 @@ export const zhTwConfig = { pokemon: pokemon, pokemonInfo: pokemonInfo, pokemonInfoContainer: pokemonInfoContainer, + pokemonSummary: pokemonSummary, saveSlotSelectUiHandler: saveSlotSelectUiHandler, settings: settings, splashMessages: splashMessages, diff --git a/src/locales/zh_TW/menu-ui-handler.ts b/src/locales/zh_TW/menu-ui-handler.ts index 21ba10ba30e..e3675b0571e 100644 --- a/src/locales/zh_TW/menu-ui-handler.ts +++ b/src/locales/zh_TW/menu-ui-handler.ts @@ -18,6 +18,10 @@ export const menuUiHandler: SimpleTranslationEntries = { "exportSlotSelect": "選擇要導出的存檔位。", "importData": "導入數據", "exportData": "導出數據", + "linkDiscord": "Link Discord", + "unlinkDiscord": "Unlink Discord", + "linkGoogle": "Link Google", + "unlinkGoogle": "Unlink Google", "cancel": "取消", "losingProgressionWarning": "你將失去自戰鬥開始以來的所有進度。是否\n繼續?", "noEggs": "You are not hatching\nany eggs at the moment!" diff --git a/src/locales/zh_TW/menu.ts b/src/locales/zh_TW/menu.ts index 564c20d5791..d46f3f172de 100644 --- a/src/locales/zh_TW/menu.ts +++ b/src/locales/zh_TW/menu.ts @@ -17,6 +17,7 @@ export const menu: SimpleTranslationEntries = { "username": "用戶名", "password": "密碼", "login": "登入", + "orUse": "Or use", "register": "注冊", "emptyUsername": "用戶名不能為空", "invalidLoginUsername": "提供的用戶名無效", @@ -53,5 +54,9 @@ export const menu: SimpleTranslationEntries = { "no":"否", "disclaimer": "DISCLAIMER", "disclaimerDescription": "This game is an unfinished product; it might have playability issues (including the potential loss of save data),\n change without notice, and may or may not be updated further or completed.", + "choosePokemon": "Choose a Pokémon.", + "renamePokemon": "Rename Pokémon", + "rename": "Rename", + "nickname": "Nickname", "errorServerDown": "Oops! There was an issue contacting the server.\n\nYou may leave this window open,\nthe game will automatically reconnect.", } as const; diff --git a/src/locales/zh_TW/modifier-type.ts b/src/locales/zh_TW/modifier-type.ts index bf2032a7feb..5e8a32161ce 100644 --- a/src/locales/zh_TW/modifier-type.ts +++ b/src/locales/zh_TW/modifier-type.ts @@ -59,10 +59,10 @@ export const modifierType: ModifierTypeTranslationEntries = { description: "一隻寶可夢的{{moveType}}系招式威力提升20%。", }, PokemonLevelIncrementModifierType: { - description: "一隻寶可夢等級提升1級。", + description: "Increases a Pokémon's level by {{levels}}.", }, AllPokemonLevelIncrementModifierType: { - description: "所有成員寶可夢等級提升1級。", + description: "Increases all party members' level by {{levels}}.", }, PokemonBaseStatBoosterModifierType: { description: @@ -187,6 +187,14 @@ export const modifierType: ModifierTypeTranslationEntries = { LUCKY_EGG: { name: "幸運蛋" }, GOLDEN_EGG: { name: "金蛋" }, SOOTHE_BELL: { name: "安撫之鈴" }, + SCOPE_LENS: { + name: "焦點鏡", + description: "能看見弱點的鏡片。攜帶它的寶可夢的招式 會變得容易擊中要害。" + }, + LEEK: { + name: "大蔥", + description: "非常長且堅硬的莖。讓大蔥鴨攜帶後,招式會 變得容易擊中要害。" + }, EVIOLITE: { name: "進化奇石", description: "進化的神奇石塊。攜帶後,還能進化的寶可夢的 防禦和特防就會提高。" diff --git a/src/locales/zh_TW/move.ts b/src/locales/zh_TW/move.ts index 0a6321850db..92b70429cfd 100644 --- a/src/locales/zh_TW/move.ts +++ b/src/locales/zh_TW/move.ts @@ -2861,7 +2861,7 @@ export const move: MoveTranslationEntries = { }, dynamaxCannon: { name: "極巨炮", - effect: "將凝縮在體內的能量從核心\n放出進行攻擊", + effect: "將凝縮在體內的能量從核心放出進行攻擊,\n對手等級比當前波次的等級上限越高,造成的傷害越高,最多兩倍。", }, snipeShot: { name: "狙擊", diff --git a/src/locales/zh_TW/party-ui-handler.ts b/src/locales/zh_TW/party-ui-handler.ts index efa9b2c8dab..c981e41af0e 100644 --- a/src/locales/zh_TW/party-ui-handler.ts +++ b/src/locales/zh_TW/party-ui-handler.ts @@ -16,6 +16,7 @@ export const partyUiHandler: SimpleTranslationEntries = { "PASS_BATON": "Pass Baton", "UNPAUSE_EVOLUTION": "Unpause Evolution", "REVIVE": "Revive", + "RENAME": "Rename", "choosePokemon": "Choose a Pokémon.", "doWhatWithThisPokemon": "Do what with this Pokémon?", diff --git a/src/locales/zh_TW/pokemon-summary.ts b/src/locales/zh_TW/pokemon-summary.ts new file mode 100644 index 00000000000..484ea2a9d67 --- /dev/null +++ b/src/locales/zh_TW/pokemon-summary.ts @@ -0,0 +1,20 @@ +import { TranslationEntries } from "#app/interfaces/locales"; + +export const pokemonSummary: TranslationEntries = { + "pokemonInfo": "Pokémon Info", + "status": "Status", + "powerAccuracyCategory": "Power\nAccuracy\nCategory", + "type": "Type", + "unknownTrainer": "Unknown", + "ot": "OT", + "nature": "nature", + "expPoints": "Exp. Points", + "nextLv": "Next Lv.", + "cancel": "Cancel", + + "memoString": "{{natureFragment}} nature,\n{{metFragment}}", + "metFragment": { + "normal": "met at Lv{{level}},\n{{biome}}.", + "apparently": "apparently met at Lv{{level}},\n{{biome}}.", + }, +} as const; diff --git a/src/locales/zh_TW/settings.ts b/src/locales/zh_TW/settings.ts index dcb87fafe35..c6c055ed4d2 100644 --- a/src/locales/zh_TW/settings.ts +++ b/src/locales/zh_TW/settings.ts @@ -96,4 +96,5 @@ export const settings: SimpleTranslationEntries = { "controller": "控制器", "gamepadSupport": "手柄支持", "showBgmBar": "Show Music Names", + "shopOverlayOpacity": "Shop Overlay Opacity" } as const; diff --git a/src/locales/zh_TW/splash-messages.ts b/src/locales/zh_TW/splash-messages.ts index 3fbbea71564..734b7a16064 100644 --- a/src/locales/zh_TW/splash-messages.ts +++ b/src/locales/zh_TW/splash-messages.ts @@ -33,5 +33,6 @@ export const splashMessages: SimpleTranslationEntries = { "alsoTryEmeraldRogue": "也試試翡翠流氓!", "alsoTryRadicalRed": "也試試激進紅!", "eeveeExpo": "伊布博覽會!", - "ynoproject": "YNO專案!" + "ynoproject": "YNO專案!", + "breedersInSpace": "Breeders in space!", } as const; diff --git a/src/messages.ts b/src/messages.ts index 5c465cc08e9..2259e78abfc 100644 --- a/src/messages.ts +++ b/src/messages.ts @@ -24,17 +24,17 @@ export function getPokemonNameWithAffix(pokemon: Pokemon): string { return !pokemon.isPlayer() ? pokemon.hasTrainer() ? i18next.t("battle:foePokemonWithAffix", { - pokemonName: pokemon.name, + pokemonName: pokemon.getNameToRender(), }) : i18next.t("battle:wildPokemonWithAffix", { - pokemonName: pokemon.name, + pokemonName: pokemon.getNameToRender(), }) - : pokemon.name; + : pokemon.getNameToRender(); case BattleSpec.FINAL_BOSS: return !pokemon.isPlayer() - ? i18next.t("battle:foePokemonWithAffix", { pokemonName: pokemon.name }) - : pokemon.name; + ? i18next.t("battle:foePokemonWithAffix", { pokemonName: pokemon.getNameToRender() }) + : pokemon.getNameToRender(); default: - return pokemon.name; + return pokemon.getNameToRender(); } } diff --git a/src/modifier/modifier-type.ts b/src/modifier/modifier-type.ts index d8ec0072bd4..2c69c13a11b 100644 --- a/src/modifier/modifier-type.ts +++ b/src/modifier/modifier-type.ts @@ -20,13 +20,14 @@ import { ModifierTier } from "./modifier-tier"; import { Nature, getNatureName, getNatureStatMultiplier } from "#app/data/nature"; import i18next from "i18next"; import { getModifierTierTextTint } from "#app/ui/text"; -import * as Overrides from "../overrides"; +import Overrides from "#app/overrides"; import { MoneyMultiplierModifier } from "./modifier"; import { Abilities } from "#enums/abilities"; import { BattlerTagType } from "#enums/battler-tag-type"; import { BerryType } from "#enums/berry-type"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; +import { getPokemonNameWithAffix } from "#app/messages.js"; const outputModifierData = false; const useMaxWeightForOutput = false; @@ -212,10 +213,10 @@ export class PokemonHeldItemModifierType extends PokemonModifierType { const matchingModifier = pokemon.scene.findModifier(m => m instanceof Modifiers.PokemonHeldItemModifier && m.pokemonId === pokemon.id && m.matchType(dummyModifier)) as Modifiers.PokemonHeldItemModifier; const maxStackCount = dummyModifier.getMaxStackCount(pokemon.scene); if (!maxStackCount) { - return i18next.t("modifierType:ModifierType.PokemonHeldItemModifierType.extra.inoperable", { "pokemonName": pokemon.name }); + return i18next.t("modifierType:ModifierType.PokemonHeldItemModifierType.extra.inoperable", { "pokemonName": getPokemonNameWithAffix(pokemon) }); } if (matchingModifier && matchingModifier.stackCount === maxStackCount) { - return i18next.t("modifierType:ModifierType.PokemonHeldItemModifierType.extra.tooMany", { "pokemonName": pokemon.name }); + return i18next.t("modifierType:ModifierType.PokemonHeldItemModifierType.extra.tooMany", { "pokemonName": getPokemonNameWithAffix(pokemon) }); } return null; }, group, soundName); @@ -566,7 +567,12 @@ export class PokemonLevelIncrementModifierType extends PokemonModifierType { } getDescription(scene: BattleScene): string { - return i18next.t("modifierType:ModifierType.PokemonLevelIncrementModifierType.description"); + let levels = 1; + const hasCandyJar = scene.modifiers.find(modifier => modifier instanceof Modifiers.LevelIncrementBoosterModifier); + if (hasCandyJar) { + levels += hasCandyJar.stackCount; + } + return i18next.t("modifierType:ModifierType.PokemonLevelIncrementModifierType.description", {levels }); } } @@ -576,7 +582,12 @@ export class AllPokemonLevelIncrementModifierType extends ModifierType { } getDescription(scene: BattleScene): string { - return i18next.t("modifierType:ModifierType.AllPokemonLevelIncrementModifierType.description"); + let levels = 1; + const hasCandyJar = scene.modifiers.find(modifier => modifier instanceof Modifiers.LevelIncrementBoosterModifier); + if (hasCandyJar) { + levels += hasCandyJar.stackCount; + } + return i18next.t("modifierType:ModifierType.AllPokemonLevelIncrementModifierType.description", { levels }); } } @@ -1154,6 +1165,58 @@ class WeightedModifierType { } } +type BaseModifierOverride = { + name: Exclude; + count?: number; +}; + +/** Type for modifiers and held items that are constructed via {@linkcode ModifierTypeGenerator}. */ +export type GeneratorModifierOverride = { + count?: number; +} & ( + | { + name: keyof Pick; + type?: SpeciesStatBoosterItem; + } + | { + name: keyof Pick; + type?: TempBattleStat; + } + | { + name: keyof Pick; + type?: Stat; + } + | { + name: keyof Pick; + type?: Nature; + } + | { + name: keyof Pick; + type?: Type; + } + | { + name: keyof Pick; + type?: BerryType; + } + | { + name: keyof Pick; + type?: EvolutionItem; + } + | { + name: keyof Pick; + type?: FormChangeItem; + } + | { + name: keyof Pick; + type?: Moves; + } +); + +/** Type used to construct modifiers and held items for overriding purposes. */ +export type ModifierOverride = GeneratorModifierOverride | BaseModifierOverride; + +export type ModifierTypeKeys = keyof typeof modifierTypes; + export const modifierTypes = { POKEBALL: () => new AddPokeballModifierType("pb", PokeballType.POKEBALL, 5), GREAT_BALL: () => new AddPokeballModifierType("gb", PokeballType.GREAT_BALL, 5), @@ -1291,6 +1354,9 @@ export const modifierTypes = { SOOTHE_BELL: () => new PokemonFriendshipBoosterModifierType("modifierType:ModifierType.SOOTHE_BELL", "soothe_bell"), + SCOPE_LENS: () => new PokemonHeldItemModifierType("modifierType:ModifierType.SCOPE_LENS", "scope_lens", (type, args) => new Modifiers.CritBoosterModifier(type, (args[0] as Pokemon).id, 1)), + LEEK: () => new PokemonHeldItemModifierType("modifierType:ModifierType.LEEK", "leek", (type, args) => new Modifiers.SpeciesCritBoosterModifier(type, (args[0] as Pokemon).id, 2, [Species.FARFETCHD, Species.GALAR_FARFETCHD, Species.SIRFETCHD])), + EVIOLITE: () => new PokemonHeldItemModifierType("modifierType:ModifierType.EVIOLITE", "eviolite", (type, args) => new Modifiers.EvolutionStatBoosterModifier(type, (args[0] as Pokemon).id, [Stat.DEF, Stat.SPDEF], 1.5)), SOUL_DEW: () => new PokemonHeldItemModifierType("modifierType:ModifierType.SOUL_DEW", "soul_dew", (type, args) => new Modifiers.PokemonNatureWeightModifier(type, (args[0] as Pokemon).id)), @@ -1327,7 +1393,7 @@ export const modifierTypes = { TOXIC_ORB: () => new PokemonHeldItemModifierType("modifierType:ModifierType.TOXIC_ORB", "toxic_orb", (type, args) => new Modifiers.TurnStatusEffectModifier(type, (args[0] as Pokemon).id)), FLAME_ORB: () => new PokemonHeldItemModifierType("modifierType:ModifierType.FLAME_ORB", "flame_orb", (type, args) => new Modifiers.TurnStatusEffectModifier(type, (args[0] as Pokemon).id)), - BATON: () => new PokemonHeldItemModifierType("modifierType:ModifierType.BATON", "stick", (type, args) => new Modifiers.SwitchEffectTransferModifier(type, (args[0] as Pokemon).id)), + BATON: () => new PokemonHeldItemModifierType("modifierType:ModifierType.BATON", "baton", (type, args) => new Modifiers.SwitchEffectTransferModifier(type, (args[0] as Pokemon).id)), SHINY_CHARM: () => new ModifierType("modifierType:ModifierType.SHINY_CHARM", "shiny_charm", (type, _args) => new Modifiers.ShinyRateBoosterModifier(type)), ABILITY_CHARM: () => new ModifierType("modifierType:ModifierType.ABILITY_CHARM", "ability_charm", (type, _args) => new Modifiers.HiddenAbilityRateBoosterModifier(type)), @@ -1478,6 +1544,11 @@ const modifierPool: ModifierPool = { new WeightedModifierType(modifierTypes.AMULET_COIN, skipInLastClassicWaveOrDefault(3)), //new WeightedModifierType(modifierTypes.EVIOLITE, (party: Pokemon[]) => party.some(p => ((p.getSpeciesForm(true).speciesId in pokemonEvolutions) || (p.isFusion() && (p.getFusionSpeciesForm(true).speciesId in pokemonEvolutions))) && !p.getHeldItems().some(i => i instanceof Modifiers.EvolutionStatBoosterModifier)) ? 10 : 0), new WeightedModifierType(modifierTypes.SPECIES_STAT_BOOSTER, 12), + new WeightedModifierType(modifierTypes.LEEK, (party: Pokemon[]) => { + const checkedSpecies = [ Species.FARFETCHD, Species.GALAR_FARFETCHD, Species.SIRFETCHD ]; + // If a party member doesn't already have a Leek and is one of the relevant species, Leek can appear + return party.some(p => !p.getHeldItems().some(i => i instanceof Modifiers.SpeciesCritBoosterModifier) && (checkedSpecies.includes(p.getSpeciesForm(true).speciesId) || (p.isFusion() && checkedSpecies.includes(p.getFusionSpeciesForm(true).speciesId)))) ? 12 : 0; + }, 12), new WeightedModifierType(modifierTypes.TOXIC_ORB, (party: Pokemon[]) => { const checkedAbilities = [Abilities.QUICK_FEET, Abilities.GUTS, Abilities.MARVEL_SCALE, Abilities.TOXIC_BOOST, Abilities.POISON_HEAL, Abilities.MAGIC_GUARD]; const checkedMoves = [Moves.FACADE, Moves.TRICK, Moves.FLING, Moves.SWITCHEROO, Moves.PSYCHO_SHIFT]; @@ -1513,6 +1584,7 @@ const modifierPool: ModifierPool = { new WeightedModifierType(modifierTypes.SHELL_BELL, 3), new WeightedModifierType(modifierTypes.BERRY_POUCH, 4), new WeightedModifierType(modifierTypes.GRIP_CLAW, 5), + new WeightedModifierType(modifierTypes.SCOPE_LENS, 4), new WeightedModifierType(modifierTypes.BATON, 2), new WeightedModifierType(modifierTypes.SOUL_DEW, 7), //new WeightedModifierType(modifierTypes.OVAL_CHARM, 6), @@ -1816,14 +1888,13 @@ export function getPlayerModifierTypeOptions(count: integer, party: PlayerPokemo } options.push(candidate); }); + // OVERRIDE IF NECESSARY - if (Overrides.ITEM_REWARD_OVERRIDE?.length) { - options.forEach((mod, i) => { - // @ts-ignore: keeps throwing don't use string as index error in typedoc run - const override = modifierTypes[Overrides.ITEM_REWARD_OVERRIDE[i]]?.(); - mod.type = (override instanceof ModifierTypeGenerator ? override.generateType(party) : override) || mod.type; - }); - } + Overrides.ITEM_REWARD_OVERRIDE.forEach((item, i) => { + const override = modifierTypes[item](); + options[i].type = override instanceof ModifierTypeGenerator ? override.generateType(party) : override; + }); + return options; } diff --git a/src/modifier/modifier.ts b/src/modifier/modifier.ts index 6f098ade124..f826093348b 100644 --- a/src/modifier/modifier.ts +++ b/src/modifier/modifier.ts @@ -20,7 +20,7 @@ import { achvs } from "../system/achv"; import { VoucherType } from "../system/voucher"; import { FormChangeItem, SpeciesFormChangeItemTrigger } from "../data/pokemon-forms"; import { Nature } from "#app/data/nature"; -import * as Overrides from "../overrides"; +import Overrides from "../overrides"; import { ModifierType, modifierTypes } from "./modifier-type"; import { Command } from "#app/ui/command-ui-handler.js"; import { Species } from "#enums/species"; @@ -470,6 +470,7 @@ export class TerastallizeAccessModifier extends PersistentModifier { export abstract class PokemonHeldItemModifier extends PersistentModifier { public pokemonId: integer; + readonly isTransferrable: boolean = true; constructor(type: ModifierType, pokemonId: integer, stackCount: integer) { super(type, stackCount); @@ -491,10 +492,6 @@ export abstract class PokemonHeldItemModifier extends PersistentModifier { return super.shouldApply(args) && args.length && args[0] instanceof Pokemon && (this.pokemonId === -1 || (args[0] as Pokemon).id === this.pokemonId); } - getTransferrable(withinParty: boolean) { - return true; - } - isIconVisible(scene: BattleScene): boolean { return this.getPokemon(scene).isOnField(); } @@ -570,6 +567,7 @@ export abstract class PokemonHeldItemModifier extends PersistentModifier { export abstract class LapsingPokemonHeldItemModifier extends PokemonHeldItemModifier { protected battlesLeft: integer; + readonly isTransferrable: boolean = false; constructor(type: ModifierTypes.ModifierType, pokemonId: integer, battlesLeft?: integer, stackCount?: integer) { super(type, pokemonId, stackCount); @@ -606,6 +604,7 @@ export abstract class LapsingPokemonHeldItemModifier extends PokemonHeldItemModi export class TerastallizeModifier extends LapsingPokemonHeldItemModifier { public teraType: Type; + readonly isTransferrable: boolean = false; constructor(type: ModifierTypes.TerastallizeModifierType, pokemonId: integer, teraType: Type, battlesLeft?: integer, stackCount?: integer) { super(type, pokemonId, battlesLeft || 10, stackCount); @@ -649,10 +648,6 @@ export class TerastallizeModifier extends LapsingPokemonHeldItemModifier { return ret; } - getTransferrable(withinParty: boolean): boolean { - return false; - } - getScoreMultiplier(): number { return 1.25; } @@ -664,6 +659,7 @@ export class TerastallizeModifier extends LapsingPokemonHeldItemModifier { export class PokemonBaseStatModifier extends PokemonHeldItemModifier { protected stat: Stat; + readonly isTransferrable: boolean = false; constructor(type: ModifierTypes.PokemonBaseStatBoosterModifierType, pokemonId: integer, stat: Stat, stackCount?: integer) { super(type, pokemonId, stackCount); @@ -695,10 +691,6 @@ export class PokemonBaseStatModifier extends PokemonHeldItemModifier { return true; } - getTransferrable(_withinParty: boolean): boolean { - return false; - } - getScoreMultiplier(): number { return 1.1; } @@ -882,6 +874,97 @@ export class SpeciesStatBoosterModifier extends StatBoosterModifier { } } +/** + * Modifier used for held items that apply critical-hit stage boost(s). + * @extends PokemonHeldItemModifier + * @see {@linkcode apply} + */ +export class CritBoosterModifier extends PokemonHeldItemModifier { + /** The amount of stages by which the held item increases the current critical-hit stage value */ + protected stageIncrement: number; + + constructor(type: ModifierType, pokemonId: integer, stageIncrement: number, stackCount?: integer) { + super(type, pokemonId, stackCount); + + this.stageIncrement = stageIncrement; + } + + clone() { + return new CritBoosterModifier(this.type, this.pokemonId, this.stageIncrement, this.stackCount); + } + + getArgs(): any[] { + return super.getArgs().concat(this.stageIncrement); + } + + matchType(modifier: Modifier): boolean { + if (modifier instanceof CritBoosterModifier) { + return (modifier as CritBoosterModifier).stageIncrement === this.stageIncrement; + } + + return false; + } + + /** + * Increases the current critical-hit stage value by {@linkcode stageIncrement}. + * @param args [0] {@linkcode Pokemon} N/A + * [1] {@linkcode Utils.IntegerHolder} that holds the resulting critical-hit level + * @returns true if the critical-hit stage boost applies successfully, false otherwise + */ + apply(args: any[]): boolean { + const critStage = args[1] as Utils.NumberHolder; + + critStage.value += this.stageIncrement; + return true; + } + + getMaxHeldItemCount(_pokemon: Pokemon): number { + return 1; + } +} + +/** + * Modifier used for held items that apply critical-hit stage boost(s) + * if the holder is of a specific {@linkcode Species}. + * @extends CritBoosterModifier + * @see {@linkcode shouldApply} + */ +export class SpeciesCritBoosterModifier extends CritBoosterModifier { + /** The species that the held item's critical-hit stage boost applies to */ + private species: Species[]; + + constructor(type: ModifierType, pokemonId: integer, stageIncrement: number, species: Species[], stackCount?: integer) { + super(type, pokemonId, stageIncrement, stackCount); + + this.species = species; + } + + clone() { + return new SpeciesCritBoosterModifier(this.type, this.pokemonId, this.stageIncrement, this.species, this.stackCount); + } + + getArgs(): any[] { + return [ ...super.getArgs(), this.species ]; + } + + matchType(modifier: Modifier): boolean { + return modifier instanceof SpeciesCritBoosterModifier; + } + + /** + * Checks if the holder's {@linkcode Species} (or its fused species) is listed + * in {@linkcode species}. + * @param args [0] {@linkcode Pokemon} that holds the held item + * [1] {@linkcode Utils.IntegerHolder} N/A + * @returns true if the critical-hit level can be incremented, false otherwise + */ + shouldApply(args: any[]) { + const holder = args[0] as Pokemon; + + return super.shouldApply(args) && (this.species.includes(holder.getSpeciesForm(true).speciesId) || (holder.isFusion() && this.species.includes(holder.getFusionSpeciesForm(true).speciesId))); + } +} + /** * Applies Specific Type item boosts (e.g., Magnet) */ @@ -1691,7 +1774,7 @@ export class PokemonExpBoosterModifier extends PokemonHeldItemModifier { } apply(args: any[]): boolean { - (args[1] as Utils.NumberHolder).value = Math.floor((args[1] as Utils.NumberHolder).value * (1 + (this.getStackCount() * this.boostMultiplier))); + (args[1] as Utils.NumberHolder).value += (this.getStackCount() * this.boostMultiplier); return true; } @@ -1878,6 +1961,7 @@ export class PokemonMultiHitModifier extends PokemonHeldItemModifier { export class PokemonFormChangeItemModifier extends PokemonHeldItemModifier { public formChangeItem: FormChangeItem; public active: boolean; + readonly isTransferrable: boolean = false; constructor(type: ModifierTypes.FormChangeItemModifierType, pokemonId: integer, formChangeItem: FormChangeItem, active: boolean, stackCount?: integer) { super(type, pokemonId, stackCount); @@ -1916,10 +2000,6 @@ export class PokemonFormChangeItemModifier extends PokemonHeldItemModifier { return ret; } - getTransferrable(withinParty: boolean) { - return withinParty; - } - getMaxHeldItemCount(pokemon: Pokemon): integer { return 1; } @@ -2164,12 +2244,11 @@ export abstract class HeldItemTransferModifier extends PokemonHeldItemModifier { return false; } - const withinParty = pokemon.isPlayer() === targetPokemon.isPlayer(); const poolType = pokemon.isPlayer() ? ModifierTypes.ModifierPoolType.PLAYER : pokemon.hasTrainer() ? ModifierTypes.ModifierPoolType.TRAINER : ModifierTypes.ModifierPoolType.WILD; const transferredModifierTypes: ModifierTypes.ModifierType[] = []; const itemModifiers = pokemon.scene.findModifiers(m => m instanceof PokemonHeldItemModifier - && (m as PokemonHeldItemModifier).pokemonId === targetPokemon.id && m.getTransferrable(withinParty), targetPokemon.isPlayer()) as PokemonHeldItemModifier[]; + && m.pokemonId === targetPokemon.id && m.isTransferrable, targetPokemon.isPlayer()) as PokemonHeldItemModifier[]; let highestItemTier = itemModifiers.map(m => m.type.getOrInferTier(poolType)).reduce((highestTier, tier) => Math.max(tier, highestTier), 0); let tierItemModifiers = itemModifiers.filter(m => m.type.getOrInferTier(poolType) === highestItemTier); @@ -2214,6 +2293,7 @@ export abstract class HeldItemTransferModifier extends PokemonHeldItemModifier { * @see {@linkcode modifierTypes[MINI_BLACK_HOLE]} */ export class TurnHeldItemTransferModifier extends HeldItemTransferModifier { + readonly isTransferrable: boolean = false; constructor(type: ModifierType, pokemonId: integer, stackCount?: integer) { super(type, pokemonId, stackCount); } @@ -2226,10 +2306,6 @@ export class TurnHeldItemTransferModifier extends HeldItemTransferModifier { return new TurnHeldItemTransferModifier(this.type, this.pokemonId, this.stackCount); } - getTransferrable(withinParty: boolean) { - return withinParty; - } - getTransferredItemCount(): integer { return this.getStackCount(); } @@ -2665,7 +2741,8 @@ export function overrideHeldItems(scene: BattleScene, pokemon: Pokemon, player: const modifierType: ModifierType = modifierTypes[itemName](); // we retrieve the item in the list let itemModifier: PokemonHeldItemModifier; if (modifierType instanceof ModifierTypes.ModifierTypeGenerator) { - itemModifier = modifierType.generateType(null, [item.type]).withIdFromFunc(modifierTypes[itemName]).newModifier(pokemon) as PokemonHeldItemModifier; + const pregenArgs = "type" in item ? [item.type] : null; + itemModifier = modifierType.generateType(null, pregenArgs).withIdFromFunc(modifierTypes[itemName]).newModifier(pokemon) as PokemonHeldItemModifier; } else { itemModifier = modifierType.withIdFromFunc(modifierTypes[itemName]).newModifier(pokemon) as PokemonHeldItemModifier; } diff --git a/src/overrides.ts b/src/overrides.ts index 3e894967893..87693840556 100644 --- a/src/overrides.ts +++ b/src/overrides.ts @@ -1,148 +1,176 @@ -import { WeatherType } from "./data/weather"; -import { Variant } from "./data/variant"; -import { TempBattleStat } from "./data/temp-battle-stat"; -import { Nature } from "./data/nature"; -import { Type } from "./data/type"; -import { Stat } from "./data/pokemon-stat"; -import { PokeballCounts } from "./battle-scene"; -import { PokeballType } from "./data/pokeball"; -import { Gender } from "./data/gender"; -import { StatusEffect } from "./data/status-effect"; -import { SpeciesStatBoosterItem, modifierTypes } from "./modifier/modifier-type"; -import { VariantTier } from "./enums/variant-tiers"; -import { EggTier } from "#enums/egg-type"; -import { allSpecies } from "./data/pokemon-species"; // eslint-disable-line @typescript-eslint/no-unused-vars import { Abilities } from "#enums/abilities"; -import { BerryType } from "#enums/berry-type"; import { Biome } from "#enums/biome"; +import { EggTier } from "#enums/egg-type"; import { Moves } from "#enums/moves"; +import { PokeballType } from "#enums/pokeball"; import { Species } from "#enums/species"; +import { StatusEffect } from "#enums/status-effect"; import { TimeOfDay } from "#enums/time-of-day"; +import { VariantTier } from "#enums/variant-tiers"; +import { WeatherType } from "#enums/weather-type"; +import { type PokeballCounts } from "./battle-scene"; +import { Gender } from "./data/gender"; +import { allSpecies } from "./data/pokemon-species"; // eslint-disable-line @typescript-eslint/no-unused-vars +import { Variant } from "./data/variant"; +import { type ModifierOverride, type ModifierTypeKeys } from "./modifier/modifier-type"; /** - * Overrides for testing different in game situations - * if an override name starts with "STARTING", it will apply when a new run begins - */ - -/** - * OVERALL OVERRIDES - */ - -// a specific seed (default: a random string of 24 characters) -export const SEED_OVERRIDE: string = ""; -export const WEATHER_OVERRIDE: WeatherType = WeatherType.NONE; -export const DOUBLE_BATTLE_OVERRIDE: boolean = false; -export const SINGLE_BATTLE_OVERRIDE: boolean = false; -export const STARTING_WAVE_OVERRIDE: integer = 0; -export const STARTING_BIOME_OVERRIDE: Biome = Biome.TOWN; -export const ARENA_TINT_OVERRIDE: TimeOfDay = null; -// Multiplies XP gained by this value including 0. Set to null to ignore the override -export const XP_MULTIPLIER_OVERRIDE: number = null; -// default 1000 -export const STARTING_MONEY_OVERRIDE: integer = 0; -export const FREE_CANDY_UPGRADE_OVERRIDE: boolean = false; -export const POKEBALL_OVERRIDE: { active: boolean, pokeballs: PokeballCounts } = { - active: false, - pokeballs: { - [PokeballType.POKEBALL]: 5, - [PokeballType.GREAT_BALL]: 0, - [PokeballType.ULTRA_BALL]: 0, - [PokeballType.ROGUE_BALL]: 0, - [PokeballType.MASTER_BALL]: 0, - } -}; - -/** - * PLAYER OVERRIDES - */ - -/** - * Set the form index of any starter in the party whose `speciesId` is inside this override - * @see {@link allSpecies} in `src/data/pokemon-species.ts` for form indexes + * Overrides that are using when testing different in game situations + * + * 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 + * * @example * ``` - * const STARTER_FORM_OVERRIDES = { - * [Species.DARMANITAN]: 1 + * const overrides = { + * ABILITY_OVERRIDE: Abilities.PROTEAN, + * PASSIVE_ABILITY_OVERRIDE: Abilities.PIXILATE, * } * ``` */ -export const STARTER_FORM_OVERRIDES: Partial> = {}; - -// default 5 or 20 for Daily -export const STARTING_LEVEL_OVERRIDE: integer = 0; -/** - * SPECIES OVERRIDE - * will only apply to the first starter in your party or each enemy pokemon - * default is 0 to not override - * @example SPECIES_OVERRIDE = Species.Bulbasaur; - */ -export const STARTER_SPECIES_OVERRIDE: Species | integer = 0; -export const ABILITY_OVERRIDE: Abilities = Abilities.NONE; -export const PASSIVE_ABILITY_OVERRIDE: Abilities = Abilities.NONE; -export const STATUS_OVERRIDE: StatusEffect = StatusEffect.NONE; -export const GENDER_OVERRIDE: Gender = null; -export const MOVESET_OVERRIDE: Array = []; -export const SHINY_OVERRIDE: boolean = false; -export const VARIANT_OVERRIDE: Variant = 0; +const overrides = {} satisfies Partial>; /** - * OPPONENT / ENEMY OVERRIDES - */ - -export const OPP_SPECIES_OVERRIDE: Species | integer = 0; -export const OPP_LEVEL_OVERRIDE: number = 0; -export const OPP_ABILITY_OVERRIDE: Abilities = Abilities.NONE; -export const OPP_PASSIVE_ABILITY_OVERRIDE: Abilities = Abilities.NONE; -export const OPP_STATUS_OVERRIDE: StatusEffect = StatusEffect.NONE; -export const OPP_GENDER_OVERRIDE: Gender = null; -export const OPP_MOVESET_OVERRIDE: Array = []; -export const OPP_SHINY_OVERRIDE: boolean = false; -export const OPP_VARIANT_OVERRIDE: Variant = 0; -export const OPP_IVS_OVERRIDE: integer | integer[] = []; - -/** - * EGG OVERRIDES - */ - -export const EGG_IMMEDIATE_HATCH_OVERRIDE: boolean = false; -export const EGG_TIER_OVERRIDE: EggTier = null; -export const EGG_SHINY_OVERRIDE: boolean = false; -export const EGG_VARIANT_OVERRIDE: VariantTier = null; -export const EGG_FREE_GACHA_PULLS_OVERRIDE: boolean = false; -export const EGG_GACHA_PULL_COUNT_OVERRIDE: number = 0; - -/** - * MODIFIER / ITEM OVERRIDES - * if count is not provided, it will default to 1 - * @example Modifier Override [{name: "EXP_SHARE", count: 2}] - * @example Held Item Override [{name: "LUCKY_EGG"}] + * If you need to add Overrides values for local testing do that inside {@linkcode overrides} + * --- + * Defaults for Overrides that are used when testing different in game situations * - * Some items are generated based on a sub-type (i.e. berries), to override those: - * @example [{name: "BERRY", count: 5, type: BerryType.SITRUS}] - * types are listed in interface below - * - TempBattleStat is for TEMP_STAT_BOOSTER / X Items (Dire hit is separate) - * - Stat is for BASE_STAT_BOOSTER / Vitamin - * - Nature is for MINT - * - Type is for TERA_SHARD or ATTACK_TYPE_BOOSTER (type boosting items i.e Silk Scarf) - * - BerryType is for BERRY - * - SpeciesStatBoosterItem is for SPECIES_STAT_BOOSTER + * If an override name starts with "STARTING", it will apply when a new run begins */ -interface ModifierOverride { - name: keyof typeof modifierTypes & string, - count?: integer - type?: TempBattleStat|Stat|Nature|Type|BerryType|SpeciesStatBoosterItem +class DefaultOverrides { + // ----------------- + // OVERALL OVERRIDES + // ----------------- + /** a specific seed (default: a random string of 24 characters) */ + readonly SEED_OVERRIDE: string = ""; + readonly WEATHER_OVERRIDE: WeatherType = WeatherType.NONE; + readonly DOUBLE_BATTLE_OVERRIDE: boolean = false; + readonly SINGLE_BATTLE_OVERRIDE: boolean = false; + readonly STARTING_WAVE_OVERRIDE: integer = 0; + readonly STARTING_BIOME_OVERRIDE: Biome = Biome.TOWN; + readonly ARENA_TINT_OVERRIDE: TimeOfDay = null; + /** Multiplies XP gained by this value including 0. Set to null to ignore the override */ + readonly XP_MULTIPLIER_OVERRIDE: number = null; + /** default 1000 */ + readonly STARTING_MONEY_OVERRIDE: integer = 0; + readonly FREE_CANDY_UPGRADE_OVERRIDE: boolean = false; + readonly POKEBALL_OVERRIDE: { active: boolean; pokeballs: PokeballCounts } = { + active: false, + pokeballs: { + [PokeballType.POKEBALL]: 5, + [PokeballType.GREAT_BALL]: 0, + [PokeballType.ULTRA_BALL]: 0, + [PokeballType.ROGUE_BALL]: 0, + [PokeballType.MASTER_BALL]: 0, + }, + }; + + // ---------------- + // PLAYER OVERRIDES + // ---------------- + /** + * Set the form index of any starter in the party whose `speciesId` is inside this override + * @see {@link allSpecies} in `src/data/pokemon-species.ts` for form indexes + * @example + * ``` + * const STARTER_FORM_OVERRIDES = { + * [Species.DARMANITAN]: 1 + * } + * ``` + */ + readonly STARTER_FORM_OVERRIDES: Partial> = {}; + + /** default 5 or 20 for Daily */ + readonly STARTING_LEVEL_OVERRIDE: integer = 0; + /** + * SPECIES OVERRIDE + * will only apply to the first starter in your party or each enemy pokemon + * default is 0 to not override + * @example SPECIES_OVERRIDE = Species.Bulbasaur; + */ + readonly STARTER_SPECIES_OVERRIDE: Species | integer = 0; + readonly ABILITY_OVERRIDE: Abilities = Abilities.NONE; + readonly PASSIVE_ABILITY_OVERRIDE: Abilities = Abilities.NONE; + readonly STATUS_OVERRIDE: StatusEffect = StatusEffect.NONE; + readonly GENDER_OVERRIDE: Gender = null; + readonly MOVESET_OVERRIDE: Array = []; + readonly SHINY_OVERRIDE: boolean = false; + readonly VARIANT_OVERRIDE: Variant = 0; + + // -------------------------- + // OPPONENT / ENEMY OVERRIDES + // -------------------------- + readonly OPP_SPECIES_OVERRIDE: Species | integer = 0; + readonly OPP_LEVEL_OVERRIDE: number = 0; + readonly OPP_ABILITY_OVERRIDE: Abilities = Abilities.NONE; + readonly OPP_PASSIVE_ABILITY_OVERRIDE: Abilities = Abilities.NONE; + readonly OPP_STATUS_OVERRIDE: StatusEffect = StatusEffect.NONE; + readonly OPP_GENDER_OVERRIDE: Gender = null; + readonly OPP_MOVESET_OVERRIDE: Array = []; + readonly OPP_SHINY_OVERRIDE: boolean = false; + readonly OPP_VARIANT_OVERRIDE: Variant = 0; + readonly OPP_IVS_OVERRIDE: integer | integer[] = []; + + // ------------- + // EGG OVERRIDES + // ------------- + readonly EGG_IMMEDIATE_HATCH_OVERRIDE: boolean = false; + readonly EGG_TIER_OVERRIDE: EggTier = null; + readonly EGG_SHINY_OVERRIDE: boolean = false; + readonly EGG_VARIANT_OVERRIDE: VariantTier = null; + readonly EGG_FREE_GACHA_PULLS_OVERRIDE: boolean = false; + readonly EGG_GACHA_PULL_COUNT_OVERRIDE: number = 0; + + // ------------------------- + // MODIFIER / ITEM OVERRIDES + // ------------------------- + /** + * Overrides labeled `MODIFIER` deal with any modifier so long as it doesn't require a party + * member to hold it (typically this is, extends, or generates a {@linkcode ModifierType}), + * like `EXP_SHARE`, `CANDY_JAR`, etc. + * + * Overrides labeled `HELD_ITEM` specifically pertain to any entry in {@linkcode modifierTypes} that + * extends, or generates a {@linkcode PokemonHeldItemModifierType}, like `SOUL_DEW`, `TOXIC_ORB`, etc. + * + * Note that, if count is not provided, it will default to 1. + * + * Additionally, note that some held items and modifiers are grouped together via + * a {@linkcode ModifierTypeGenerator} and require pre-generation arguments to get + * a specific item from that group. If a type is not set, the generator will either + * use the party to weight item choice or randomly pick an item. + * + * @example + * ``` + * // Will have a quantity of 2 in-game + * STARTING_MODIFIER_OVERRIDE = [{name: "EXP_SHARE", count: 2}] + * // Will have a quantity of 1 in-game + * STARTING_HELD_ITEM_OVERRIDE = [{name: "LUCKY_EGG"}] + * // Type must be given to get a specific berry + * STARTING_HELD_ITEM_OVERRIDE = [{name: "BERRY", type: BerryType.SITRUS}] + * // A random berry will be generated at runtime + * STARTING_HELD_ITEM_OVERRIDE = [{name: "BERRY"}] + * ``` + */ + readonly STARTING_MODIFIER_OVERRIDE: Array = []; + readonly OPP_MODIFIER_OVERRIDE: Array = []; + + readonly STARTING_HELD_ITEMS_OVERRIDE: Array = []; + readonly OPP_HELD_ITEMS_OVERRIDE: Array = []; + readonly NEVER_CRIT_OVERRIDE: boolean = false; + + /** + * An array of items by keys as defined in the "modifierTypes" object in the "modifier/modifier-type.ts" file. + * Items listed will replace the normal rolls. + * If less items are listed than rolled, only some items will be replaced + * If more items are listed than rolled, only the first X items will be shown, where X is the number of items rolled. + */ + readonly ITEM_REWARD_OVERRIDE: Array = []; } -export const STARTING_MODIFIER_OVERRIDE: Array = []; -export const OPP_MODIFIER_OVERRIDE: Array = []; -export const STARTING_HELD_ITEMS_OVERRIDE: Array = []; -export const OPP_HELD_ITEMS_OVERRIDE: Array = []; -export const NEVER_CRIT_OVERRIDE: boolean = false; +export const defaultOverrides = new DefaultOverrides(); -/** - * An array of items by keys as defined in the "modifierTypes" object in the "modifier/modifier-type.ts" file. - * Items listed will replace the normal rolls. - * If less items are listed than rolled, only some items will be replaced - * If more items are listed than rolled, only the first X items will be shown, where X is the number of items rolled. - */ -export const ITEM_REWARD_OVERRIDE: Array = []; +export default { + ...defaultOverrides, + ...overrides +} satisfies InstanceType; diff --git a/src/phases.ts b/src/phases.ts index 51391971308..308750cc196 100644 --- a/src/phases.ts +++ b/src/phases.ts @@ -1,11 +1,11 @@ import BattleScene, { bypassLogin } from "./battle-scene"; import { default as Pokemon, PlayerPokemon, EnemyPokemon, PokemonMove, MoveResult, DamageResult, FieldPosition, HitResult, TurnMove } from "./field/pokemon"; import * as Utils from "./utils"; -import { allMoves, applyMoveAttrs, BypassSleepAttr, ChargeAttr, applyFilteredMoveAttrs, HitsTagAttr, MissEffectAttr, MoveAttr, MoveEffectAttr, MoveFlags, MultiHitAttr, OverrideMoveEffectAttr, VariableAccuracyAttr, MoveTarget, getMoveTargets, MoveTargetSet, MoveEffectTrigger, CopyMoveAttr, AttackMove, SelfStatusMove, PreMoveMessageAttr, HealStatusEffectAttr, IgnoreOpponentStatChangesAttr, NoEffectAttr, BypassRedirectAttr, FixedDamageAttr, PostVictoryStatChangeAttr, OneHitKOAccuracyAttr, ForceSwitchOutAttr, VariableTargetAttr, IncrementMovePriorityAttr } from "./data/move"; +import { allMoves, applyMoveAttrs, BypassSleepAttr, ChargeAttr, applyFilteredMoveAttrs, HitsTagAttr, MissEffectAttr, MoveAttr, MoveEffectAttr, MoveFlags, MultiHitAttr, OverrideMoveEffectAttr, MoveTarget, getMoveTargets, MoveTargetSet, MoveEffectTrigger, CopyMoveAttr, AttackMove, SelfStatusMove, PreMoveMessageAttr, HealStatusEffectAttr, NoEffectAttr, BypassRedirectAttr, FixedDamageAttr, PostVictoryStatChangeAttr, ForceSwitchOutAttr, VariableTargetAttr, IncrementMovePriorityAttr } from "./data/move"; import { Mode } from "./ui/ui"; import { Command } from "./ui/command-ui-handler"; import { Stat } from "./data/pokemon-stat"; -import { BerryModifier, ContactHeldItemTransferChanceModifier, EnemyAttackStatusEffectChanceModifier, EnemyPersistentModifier, EnemyStatusEffectHealChanceModifier, EnemyTurnHealModifier, ExpBalanceModifier, ExpBoosterModifier, ExpShareModifier, ExtraModifierModifier, FlinchChanceModifier, HealingBoosterModifier, HitHealModifier, LapsingPersistentModifier, MapModifier, Modifier, MultipleParticipantExpBonusModifier, PersistentModifier, PokemonExpBoosterModifier, PokemonHeldItemModifier, PokemonInstantReviveModifier, SwitchEffectTransferModifier, TempBattleStatBoosterModifier, TurnHealModifier, TurnHeldItemTransferModifier, MoneyMultiplierModifier, MoneyInterestModifier, IvScannerModifier, LapsingPokemonHeldItemModifier, PokemonMultiHitModifier, PokemonMoveAccuracyBoosterModifier, overrideModifiers, overrideHeldItems, BypassSpeedChanceModifier, TurnStatusEffectModifier } from "./modifier/modifier"; +import { BerryModifier, ContactHeldItemTransferChanceModifier, EnemyAttackStatusEffectChanceModifier, EnemyPersistentModifier, EnemyStatusEffectHealChanceModifier, EnemyTurnHealModifier, ExpBalanceModifier, ExpBoosterModifier, ExpShareModifier, ExtraModifierModifier, FlinchChanceModifier, HealingBoosterModifier, HitHealModifier, LapsingPersistentModifier, MapModifier, Modifier, MultipleParticipantExpBonusModifier, PersistentModifier, PokemonExpBoosterModifier, PokemonHeldItemModifier, PokemonInstantReviveModifier, SwitchEffectTransferModifier, TurnHealModifier, TurnHeldItemTransferModifier, MoneyMultiplierModifier, MoneyInterestModifier, IvScannerModifier, LapsingPokemonHeldItemModifier, PokemonMultiHitModifier, overrideModifiers, overrideHeldItems, BypassSpeedChanceModifier, TurnStatusEffectModifier } from "./modifier/modifier"; import PartyUiHandler, { PartyOption, PartyUiMode } from "./ui/party-ui-handler"; import { doPokeballBounceAnim, getPokeballAtlasKey, getPokeballCatchMultiplier, getPokeballTintColor, PokeballType } from "./data/pokeball"; import { CommonAnim, CommonBattleAnim, MoveAnim, initMoveAnim, loadMoveAnimAssets } from "./data/battle-anims"; @@ -24,9 +24,8 @@ import { getPokemonMessage, getPokemonNameWithAffix } from "./messages"; import { Starter } from "./ui/starter-select-ui-handler"; import { Gender } from "./data/gender"; import { Weather, WeatherType, getRandomWeatherType, getTerrainBlockMessage, getWeatherDamageMessage, getWeatherLapseMessage } from "./data/weather"; -import { TempBattleStat } from "./data/temp-battle-stat"; import { ArenaTagSide, ArenaTrapTag, MistTag, TrickRoomTag } from "./data/arena-tag"; -import { CheckTrappedAbAttr, IgnoreOpponentStatChangesAbAttr, IgnoreOpponentEvasionAbAttr, PostAttackAbAttr, PostBattleAbAttr, PostDefendAbAttr, PostSummonAbAttr, PostTurnAbAttr, PostWeatherLapseAbAttr, PreSwitchOutAbAttr, PreWeatherDamageAbAttr, ProtectStatAbAttr, RedirectMoveAbAttr, BlockRedirectAbAttr, RunSuccessAbAttr, StatChangeMultiplierAbAttr, SuppressWeatherEffectAbAttr, SyncEncounterNatureAbAttr, applyAbAttrs, applyCheckTrappedAbAttrs, applyPostAttackAbAttrs, applyPostBattleAbAttrs, applyPostDefendAbAttrs, applyPostSummonAbAttrs, applyPostTurnAbAttrs, applyPostWeatherLapseAbAttrs, applyPreStatChangeAbAttrs, applyPreSwitchOutAbAttrs, applyPreWeatherEffectAbAttrs, BattleStatMultiplierAbAttr, applyBattleStatMultiplierAbAttrs, IncrementMovePriorityAbAttr, applyPostVictoryAbAttrs, PostVictoryAbAttr, BlockNonDirectDamageAbAttr as BlockNonDirectDamageAbAttr, applyPostKnockOutAbAttrs, PostKnockOutAbAttr, PostBiomeChangeAbAttr, applyPostFaintAbAttrs, PostFaintAbAttr, IncreasePpAbAttr, PostStatChangeAbAttr, applyPostStatChangeAbAttrs, AlwaysHitAbAttr, PreventBerryUseAbAttr, StatChangeCopyAbAttr, PokemonTypeChangeAbAttr, applyPreAttackAbAttrs, applyPostMoveUsedAbAttrs, PostMoveUsedAbAttr, MaxMultiHitAbAttr, HealFromBerryUseAbAttr, WonderSkinAbAttr, applyPreDefendAbAttrs, IgnoreMoveEffectsAbAttr, BlockStatusDamageAbAttr, BypassSpeedChanceAbAttr, AddSecondStrikeAbAttr } from "./data/ability"; +import { CheckTrappedAbAttr, PostAttackAbAttr, PostBattleAbAttr, PostDefendAbAttr, PostSummonAbAttr, PostTurnAbAttr, PostWeatherLapseAbAttr, PreSwitchOutAbAttr, PreWeatherDamageAbAttr, ProtectStatAbAttr, RedirectMoveAbAttr, BlockRedirectAbAttr, RunSuccessAbAttr, StatChangeMultiplierAbAttr, SuppressWeatherEffectAbAttr, SyncEncounterNatureAbAttr, applyAbAttrs, applyCheckTrappedAbAttrs, applyPostAttackAbAttrs, applyPostBattleAbAttrs, applyPostDefendAbAttrs, applyPostSummonAbAttrs, applyPostTurnAbAttrs, applyPostWeatherLapseAbAttrs, applyPreStatChangeAbAttrs, applyPreSwitchOutAbAttrs, applyPreWeatherEffectAbAttrs, IncrementMovePriorityAbAttr, applyPostVictoryAbAttrs, PostVictoryAbAttr, BlockNonDirectDamageAbAttr as BlockNonDirectDamageAbAttr, applyPostKnockOutAbAttrs, PostKnockOutAbAttr, PostBiomeChangeAbAttr, applyPostFaintAbAttrs, PostFaintAbAttr, IncreasePpAbAttr, PostStatChangeAbAttr, applyPostStatChangeAbAttrs, AlwaysHitAbAttr, PreventBerryUseAbAttr, StatChangeCopyAbAttr, PokemonTypeChangeAbAttr, applyPreAttackAbAttrs, applyPostMoveUsedAbAttrs, PostMoveUsedAbAttr, MaxMultiHitAbAttr, HealFromBerryUseAbAttr, IgnoreMoveEffectsAbAttr, BlockStatusDamageAbAttr, BypassSpeedChanceAbAttr, AddSecondStrikeAbAttr } from "./data/ability"; import { Unlockables, getUnlockableName } from "./system/unlockables"; import { getBiomeKey } from "./field/arena"; import { BattleType, BattlerIndex, TurnCommand } from "./battle"; @@ -50,7 +49,7 @@ import { fetchDailyRunSeed, getDailyRunStarters } from "./data/daily-run"; import { GameMode, GameModes, getGameMode } from "./game-mode"; import PokemonSpecies, { getPokemonSpecies, speciesStarters } from "./data/pokemon-species"; import i18next from "./plugins/i18n"; -import * as Overrides from "./overrides"; +import Overrides from "./overrides"; import { TextStyle, addTextObject } from "./ui/text"; import { Type } from "./data/type"; import { BerryUsedEvent, EncounterPhaseEvent, MoveUsedEvent, TurnEndEvent, TurnInitEvent } from "./events/battle-scene"; @@ -65,6 +64,7 @@ import { Moves } from "#enums/moves"; import { PlayerGender } from "#enums/player-gender"; import { Species } from "#enums/species"; import { TrainerType } from "#enums/trainer-type"; +import { applyChallenges, ChallengeType } from "./data/challenge"; const { t } = i18next; @@ -97,7 +97,7 @@ export class LoginPhase extends Phase { const loadData = () => { updateUserInfo().then(success => { if (!success[0]) { - Utils.setCookie(Utils.sessionIdKey, ""); + Utils.removeCookie(Utils.sessionIdKey); this.scene.reset(true, true); return; } @@ -118,7 +118,7 @@ export class LoginPhase extends Phase { this.scene.ui.playSelect(); updateUserInfo().then(success => { if (!success[0]) { - Utils.setCookie(Utils.sessionIdKey, ""); + Utils.removeCookie(Utils.sessionIdKey); this.scene.reset(true, true); return; } @@ -130,11 +130,21 @@ export class LoginPhase extends Phase { } ] }); + }, () => { + const redirectUri = encodeURIComponent(`${import.meta.env.VITE_SERVER_URL}/auth/discord/callback`); + const discordId = import.meta.env.VITE_DISCORD_CLIENT_ID; + const discordUrl = `https://discord.com/api/oauth2/authorize?client_id=${discordId}&redirect_uri=${redirectUri}&response_type=code&scope=identify&prompt=none`; + window.open(discordUrl, "_self"); + }, () => { + const redirectUri = encodeURIComponent(`${import.meta.env.VITE_SERVER_URL}/auth/google/callback`); + const googleId = import.meta.env.VITE_GOOGLE_CLIENT_ID; + const googleUrl = `https://accounts.google.com/o/oauth2/auth?client_id=${googleId}&redirect_uri=${redirectUri}&response_type=code&scope=openid`; + window.open(googleUrl, "_self"); } ] }); } else if (statusCode === 401) { - Utils.setCookie(Utils.sessionIdKey, ""); + Utils.removeCookie(Utils.sessionIdKey); this.scene.reset(true, true); } else { this.scene.unshiftPhase(new UnavailablePhase(this.scene)); @@ -614,6 +624,7 @@ export class SelectStarterPhase extends Phase { starterPokemon.generateFusionSpecies(true); } starterPokemon.setVisible(false); + applyChallenges(this.scene.gameMode, ChallengeType.STARTER_MODIFY, starterPokemon); party.push(starterPokemon); loadPokemonAssets.push(starterPokemon.loadAssets()); }); @@ -858,7 +869,7 @@ export class EncounterPhase extends BattlePhase { loadEnemyAssets.push(enemyPokemon.loadAssets()); - console.log(enemyPokemon.name, enemyPokemon.species.speciesId, enemyPokemon.stats); + console.log(getPokemonNameWithAffix(enemyPokemon), enemyPokemon.species.speciesId, enemyPokemon.stats); }); if (this.scene.getParty().filter(p => p.isShiny()).length === 6) { @@ -960,7 +971,7 @@ export class EncounterPhase extends BattlePhase { const enemyField = this.scene.getEnemyField(); if (this.scene.currentBattle.battleSpec === BattleSpec.FINAL_BOSS) { - return i18next.t("battle:bossAppeared", { bossName: enemyField[0].name }); + return i18next.t("battle:bossAppeared", { bossName: getPokemonNameWithAffix(enemyField[0])}); } if (this.scene.currentBattle.battleType === BattleType.TRAINER) { @@ -973,8 +984,8 @@ export class EncounterPhase extends BattlePhase { } return enemyField.length === 1 - ? i18next.t("battle:singleWildAppeared", { pokemonName: enemyField[0].name }) - : i18next.t("battle:multiWildAppeared", { pokemonName1: enemyField[0].name, pokemonName2: enemyField[1].name }); + ? i18next.t("battle:singleWildAppeared", { pokemonName: enemyField[0].getNameToRender() }) + : i18next.t("battle:multiWildAppeared", { pokemonName1: enemyField[0].getNameToRender(), pokemonName2: enemyField[1].getNameToRender() }); } doEncounterCommon(showEncounterMessage: boolean = true) { @@ -1402,11 +1413,11 @@ export class SummonPhase extends PartyMemberPokemonPhase { // Swaps the fainted Pokemon and the first non-fainted legal Pokemon in the party [party[this.partyMemberIndex], party[legalIndex]] = [party[legalIndex], party[this.partyMemberIndex]]; - console.warn("Swapped %s %O with %s %O", partyMember?.name, partyMember, party[0]?.name, party[0]); + console.warn("Swapped %s %O with %s %O", getPokemonNameWithAffix(partyMember), partyMember, getPokemonNameWithAffix(party[0]), party[0]); } if (this.player) { - this.scene.ui.showText(i18next.t("battle:playerGo", { pokemonName: this.getPokemon().name })); + this.scene.ui.showText(i18next.t("battle:playerGo", { pokemonName: getPokemonNameWithAffix(this.getPokemon()) })); if (this.player) { this.scene.pbTray.hide(); } @@ -1426,7 +1437,7 @@ export class SummonPhase extends PartyMemberPokemonPhase { this.scene.time.delayedCall(750, () => this.summon()); } else { const trainerName = this.scene.currentBattle.trainer.getName(!(this.fieldIndex % 2) ? TrainerSlot.TRAINER : TrainerSlot.TRAINER_PARTNER); - const pokemonName = this.getPokemon().name; + const pokemonName = getPokemonNameWithAffix(this.getPokemon()); const message = i18next.t("battle:trainerSendOut", { trainerName, pokemonName }); this.scene.pbTrayEnemy.hide(); @@ -1545,6 +1556,15 @@ export class SwitchSummonPhase extends SummonPhase { private lastPokemon: Pokemon; + /** + * Constructor for creating a new SwitchSummonPhase + * @param scene {@linkcode BattleScene} the scene the phase is associated with + * @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 batonPass boolean if the switch is from baton pass + * @param player boolean if the switch is from the player + */ constructor(scene: BattleScene, fieldIndex: integer, slotIndex: integer, doReturn: boolean, batonPass: boolean, player?: boolean) { super(scene, fieldIndex, player !== undefined ? player : true); @@ -1568,6 +1588,8 @@ export class SwitchSummonPhase extends SummonPhase { } } + // if doReturn === False OR slotIndex !== -1 (slotIndex is valid) and the pokemon doesn't exist/is false + // then switchAndSummon(), manually pick pokemon to switch into if (!this.doReturn || (this.slotIndex !== -1 && !(this.player ? this.scene.getParty() : this.scene.getEnemyParty())[this.slotIndex])) { if (this.player) { return this.switchAndSummon(); @@ -1584,10 +1606,10 @@ export class SwitchSummonPhase extends SummonPhase { } this.scene.ui.showText(this.player ? - i18next.t("battle:playerComeBack", { pokemonName: pokemon.name }) : + 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), - pokemonName: pokemon.name + pokemonName: getPokemonNameWithAffix(pokemon) }) ); this.scene.playSound("pb_rel"); @@ -1627,10 +1649,10 @@ export class SwitchSummonPhase extends SummonPhase { party[this.fieldIndex] = switchedPokemon; const showTextAndSummon = () => { this.scene.ui.showText(this.player ? - i18next.t("battle:playerGo", { pokemonName: switchedPokemon.name }) : + i18next.t("battle:playerGo", { pokemonName: getPokemonNameWithAffix(switchedPokemon) }) : i18next.t("battle:trainerGo", { trainerName: this.scene.currentBattle.trainer.getName(!(this.fieldIndex % 2) ? TrainerSlot.TRAINER : TrainerSlot.TRAINER_PARTNER), - pokemonName: this.getPokemon().name + pokemonName: getPokemonNameWithAffix(this.getPokemon()) }) ); this.summon(); @@ -1789,7 +1811,7 @@ export class CheckSwitchPhase extends BattlePhase { return; } - this.scene.ui.showText(i18next.t("battle:switchQuestion", { pokemonName: this.useName ? pokemon.name : i18next.t("battle:pokemon") }), null, () => { + 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.tryRemovePhase(p => p instanceof PostSummonPhase && p.player && p.fieldIndex === this.fieldIndex); @@ -1809,7 +1831,7 @@ export class SummonMissingPhase extends SummonPhase { } preSummon(): void { - this.scene.ui.showText(i18next.t("battle:sendOutPokemon", { pokemonName: this.getPokemon().name })); + this.scene.ui.showText(i18next.t("battle:sendOutPokemon", { pokemonName: getPokemonNameWithAffix(this.getPokemon()) })); this.scene.time.delayedCall(250, () => this.summon()); } } @@ -1960,7 +1982,10 @@ export class CommandPhase extends FieldPhase { if (!moveId) { turnCommand.targets = [this.fieldIndex]; } - console.log(moveTargets, playerPokemon.name); + console.log(moveTargets, getPokemonNameWithAffix(playerPokemon)); + if (moveTargets.targets.length > 1 && moveTargets.multiple) { + this.scene.unshiftPhase(new SelectTargetPhase(this.scene, this.fieldIndex)); + } if (moveTargets.targets.length <= 1 || moveTargets.multiple) { turnCommand.move.targets = moveTargets.targets; } else if (playerPokemon.getTag(BattlerTagType.CHARGING) && playerPokemon.getMoveQueue().length >= 1) { @@ -2076,7 +2101,7 @@ export class CommandPhase extends FieldPhase { } this.scene.ui.showText( i18next.t("battle:noEscapePokemon", { - pokemonName: this.scene.getPokemonById(trapTag.sourceId).name, + pokemonName: getPokemonNameWithAffix(this.scene.getPokemonById(trapTag.sourceId)), moveName: trapTag.getMoveName(), escapeVerb: isSwitch ? i18next.t("battle:escapeVerbSwitch") : i18next.t("battle:escapeVerbFlee") }), @@ -2210,13 +2235,13 @@ export class SelectTargetPhase extends PokemonPhase { const turnCommand = this.scene.currentBattle.turnCommands[this.fieldIndex]; const move = turnCommand.move?.move; - this.scene.ui.setMode(Mode.TARGET_SELECT, this.fieldIndex, move, (cursor: integer) => { + this.scene.ui.setMode(Mode.TARGET_SELECT, this.fieldIndex, move, (targets: BattlerIndex[]) => { this.scene.ui.setMode(Mode.MESSAGE); - if (cursor === -1) { + if (targets.length < 1) { this.scene.currentBattle.turnCommands[this.fieldIndex] = null; this.scene.unshiftPhase(new CommandPhase(this.scene, this.fieldIndex)); } else { - turnCommand.targets = [cursor]; + turnCommand.targets = targets; } if (turnCommand.command === Command.BALL && this.fieldIndex) { this.scene.currentBattle.turnCommands[this.fieldIndex - 1].skip = true; @@ -2916,6 +2941,7 @@ export class MoveEffectPhase extends PokemonPhase { if (moveHistoryEntry.result === MoveResult.PENDING) { moveHistoryEntry.result = MoveResult.MISS; } + user.pushMoveHistory(moveHistoryEntry); applyMoveAttrs(MissEffectAttr, user, null, move); continue; } @@ -3043,7 +3069,11 @@ export class MoveEffectPhase extends PokemonPhase { } // 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().slice(1).find(() => true)?.targets || []).indexOf(target.getBattlerIndex()) !== -1) { + if (user.getTag(BattlerTagType.IGNORE_ACCURACY) && (user.getLastXMoves().find(() => true)?.targets || []).indexOf(target.getBattlerIndex()) !== -1) { + return true; + } + + if (target.getTag(BattlerTagType.ALWAYS_GET_HIT)) { return true; } @@ -3052,54 +3082,16 @@ export class MoveEffectPhase extends PokemonPhase { return false; } - const moveAccuracy = new Utils.NumberHolder(this.move.getMove().accuracy); + const moveAccuracy = this.move.getMove().calculateBattleAccuracy(user, target); - applyMoveAttrs(VariableAccuracyAttr, user, target, this.move.getMove(), moveAccuracy); - applyPreDefendAbAttrs(WonderSkinAbAttr, target, user, this.move.getMove(), { value: false }, moveAccuracy); - - if (moveAccuracy.value === -1) { + if (moveAccuracy === -1) { return true; } - const isOhko = this.move.getMove().hasAttr(OneHitKOAccuracyAttr); - - if (!isOhko) { - user.scene.applyModifiers(PokemonMoveAccuracyBoosterModifier, user.isPlayer(), user, moveAccuracy); - } - - if (this.scene.arena.weather?.weatherType === WeatherType.FOG) { - moveAccuracy.value = Math.floor(moveAccuracy.value * 0.9); - } - - if (!isOhko && this.scene.arena.getTag(ArenaTagType.GRAVITY)) { - moveAccuracy.value = Math.floor(moveAccuracy.value * 1.67); - } - - const userAccuracyLevel = new Utils.IntegerHolder(user.summonData.battleStats[BattleStat.ACC]); - const targetEvasionLevel = new Utils.IntegerHolder(target.summonData.battleStats[BattleStat.EVA]); - applyAbAttrs(IgnoreOpponentStatChangesAbAttr, target, null, userAccuracyLevel); - applyAbAttrs(IgnoreOpponentStatChangesAbAttr, user, null, targetEvasionLevel); - applyAbAttrs(IgnoreOpponentEvasionAbAttr, user, null, targetEvasionLevel); - applyMoveAttrs(IgnoreOpponentStatChangesAttr, user, target, this.move.getMove(), targetEvasionLevel); - this.scene.applyModifiers(TempBattleStatBoosterModifier, this.player, TempBattleStat.ACC, userAccuracyLevel); - + const accuracyMultiplier = user.getAccuracyMultiplier(target, this.move.getMove()); const rand = user.randSeedInt(100, 1); - const accuracyMultiplier = new Utils.NumberHolder(1); - if (userAccuracyLevel.value !== targetEvasionLevel.value) { - accuracyMultiplier.value = userAccuracyLevel.value > targetEvasionLevel.value - ? (3 + Math.min(userAccuracyLevel.value - targetEvasionLevel.value, 6)) / 3 - : 3 / (3 + Math.min(targetEvasionLevel.value - userAccuracyLevel.value, 6)); - } - - applyBattleStatMultiplierAbAttrs(BattleStatMultiplierAbAttr, user, BattleStat.ACC, accuracyMultiplier, this.move.getMove()); - - const evasionMultiplier = new Utils.NumberHolder(1); - applyBattleStatMultiplierAbAttrs(BattleStatMultiplierAbAttr, target, BattleStat.EVA, evasionMultiplier); - - accuracyMultiplier.value /= evasionMultiplier.value; - - return rand <= moveAccuracy.value * accuracyMultiplier.value; + return rand <= moveAccuracy * accuracyMultiplier; } getUserPokemon(): Pokemon { @@ -3411,12 +3403,13 @@ export class StatChangePhase extends PokemonPhase { if (relLevelStats.length > 1) { statsFragment = relLevelStats.length >= 5 - ? "stats" - : `${relLevelStats.slice(0, -1).map(s => getBattleStatName(s)).join(", ")}${relLevelStats.length > 2 ? "," : ""} and ${getBattleStatName(relLevelStats[relLevelStats.length - 1])}`; + ? i18next.t("battle:stats") + : `${relLevelStats.slice(0, -1).map(s => getBattleStatName(s)).join(", ")}${relLevelStats.length > 2 ? "," : ""} ${i18next.t("battle:statsAnd")} ${getBattleStatName(relLevelStats[relLevelStats.length - 1])}`; + messages.push(getBattleStatLevelChangeDescription(getPokemonNameWithAffix(this.getPokemon()), statsFragment, Math.abs(parseInt(rl)), levels >= 1,relLevelStats.length)); } else { statsFragment = getBattleStatName(relLevelStats[0]); + messages.push(getBattleStatLevelChangeDescription(getPokemonNameWithAffix(this.getPokemon()), statsFragment, Math.abs(parseInt(rl)), levels >= 1,relLevelStats.length)); } - messages.push(getBattleStatLevelChangeDescription(getPokemonNameWithAffix(this.getPokemon()), statsFragment, Math.abs(parseInt(rl)), levels >= 1)); }); return messages; @@ -3900,7 +3893,9 @@ export class VictoryPhase extends PokemonPhase { expMultiplier = Overrides.XP_MULTIPLIER_OVERRIDE; } const pokemonExp = new Utils.NumberHolder(expValue * expMultiplier); - this.scene.applyModifiers(PokemonExpBoosterModifier, true, partyMember, pokemonExp); + const modifierBonusExp = new Utils.NumberHolder(1); + this.scene.applyModifiers(PokemonExpBoosterModifier, true, partyMember, modifierBonusExp); + pokemonExp.value *= modifierBonusExp.value; partyMemberExp.push(Math.floor(pokemonExp.value)); } @@ -4125,7 +4120,11 @@ export class RibbonModifierRewardPhase extends ModifierRewardPhase { this.scene.addModifier(newModifier).then(() => { this.scene.playSound("level_up_fanfare"); this.scene.ui.setMode(Mode.MESSAGE); - this.scene.ui.showText(`${this.species.name} beat ${this.scene.gameMode.getName()} Mode for the first time!\nYou received ${newModifier.type.name}!`, null, () => { + 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); }); @@ -4156,7 +4155,7 @@ export class GameOverPhase extends BattlePhase { } else if (this.victory || !this.scene.enableRetries) { this.handleGameOver(); } else { - this.scene.ui.showText("Would you like to retry from the start of the battle?", null, () => { + this.scene.ui.showText(i18next.t("battle:retryBattle"), null, () => { this.scene.ui.setMode(Mode.CONFIRM, () => { this.scene.ui.fadeOut(1250).then(() => { this.scene.reset(); @@ -4326,7 +4325,7 @@ export class EndCardPhase extends Phase { this.endCard.setScale(0.5); this.scene.field.add(this.endCard); - this.text = addTextObject(this.scene, this.scene.game.canvas.width / 12, (this.scene.game.canvas.height / 6) - 16, "Congratulations!", TextStyle.SUMMARY, { fontSize: "128px" }); + 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.setOrigin(0.5); this.scene.field.add(this.text); @@ -4356,7 +4355,7 @@ export class UnlockPhase extends Phase { this.scene.gameData.unlocks[this.unlockable] = true; this.scene.playSound("level_up_fanfare"); this.scene.ui.setMode(Mode.MESSAGE); - this.scene.ui.showText(`${getUnlockableName(this.unlockable)}\nhas been unlocked.`, null, () => { + this.scene.ui.showText(i18next.t("battle:unlockedSomething", { unlockedThing: getUnlockableName(this.unlockable) }), null, () => { this.scene.time.delayedCall(1500, () => this.scene.arenaBg.setVisible(true)); this.end(); }, null, true, 1500); @@ -4460,7 +4459,7 @@ export class ExpPhase extends PlayerPartyMemberPokemonPhase { const exp = new Utils.NumberHolder(this.expValue); this.scene.applyModifiers(ExpBoosterModifier, true, exp); exp.value = Math.floor(exp.value); - this.scene.ui.showText(i18next.t("battle:expGain", { pokemonName: pokemon.name, exp: exp.value }), null, () => { + this.scene.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; @@ -4560,14 +4559,14 @@ export class LevelUpPhase extends PlayerPartyMemberPokemonPhase { pokemon.updateInfo(); if (this.scene.expParty === ExpNotification.DEFAULT) { this.scene.playSound("level_up_fanfare"); - this.scene.ui.showText(i18next.t("battle:levelUp", { pokemonName: this.getPokemon().name, level: this.level }), null, () => this.scene.ui.getMessageHandler().promptLevelUpStats(this.partyMemberIndex, prevStats, false).then(() => this.end()), null, true); + this.scene.ui.showText(i18next.t("battle:levelUp", { pokemonName: getPokemonNameWithAffix(this.getPokemon()), level: this.level }), null, () => this.scene.ui.getMessageHandler().promptLevelUpStats(this.partyMemberIndex, prevStats, false).then(() => this.end()), null, true); } else if (this.scene.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()); } - if (this.level <= 100) { + 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])); @@ -4618,7 +4617,7 @@ export class LearnMovePhase extends PlayerPartyMemberPokemonPhase { .then(() => { this.scene.ui.setMode(messageMode).then(() => { this.scene.playSound("level_up_fanfare"); - this.scene.ui.showText(i18next.t("battle:learnMove", { pokemonName: pokemon.name, moveName: move.name }), null, () => { + this.scene.ui.showText(i18next.t("battle:learnMove", { pokemonName: getPokemonNameWithAffix(pokemon), moveName: move.name }), null, () => { this.scene.triggerPokemonFormChange(pokemon, SpeciesFormChangeMoveLearnedTrigger, true); this.end(); }, messageMode === Mode.EVOLUTION_SCENE ? 1000 : null, true); @@ -4627,15 +4626,15 @@ export class LearnMovePhase extends PlayerPartyMemberPokemonPhase { }); } else { this.scene.ui.setMode(messageMode).then(() => { - this.scene.ui.showText(i18next.t("battle:learnMovePrompt", { pokemonName: pokemon.name, moveName: move.name }), null, () => { - this.scene.ui.showText(i18next.t("battle:learnMoveLimitReached", { pokemonName: pokemon.name }), null, () => { + this.scene.ui.showText(i18next.t("battle:learnMovePrompt", { pokemonName: getPokemonNameWithAffix(pokemon), moveName: move.name }), null, () => { + this.scene.ui.showText(i18next.t("battle:learnMoveLimitReached", { pokemonName: getPokemonNameWithAffix(pokemon) }), null, () => { this.scene.ui.showText(i18next.t("battle:learnMoveReplaceQuestion", { moveName: move.name }), null, () => { const noHandler = () => { this.scene.ui.setMode(messageMode).then(() => { this.scene.ui.showText(i18next.t("battle:learnMoveStopTeaching", { moveName: move.name }), null, () => { this.scene.ui.setModeWithoutClear(Mode.CONFIRM, () => { this.scene.ui.setMode(messageMode); - this.scene.ui.showText(i18next.t("battle:learnMoveNotLearned", { pokemonName: pokemon.name, moveName: move.name }), null, () => this.end(), null, true); + this.scene.ui.showText(i18next.t("battle:learnMoveNotLearned", { pokemonName: getPokemonNameWithAffix(pokemon), moveName: move.name }), null, () => this.end(), null, true); }, () => { this.scene.ui.setMode(messageMode); this.scene.unshiftPhase(new LearnMovePhase(this.scene, this.partyMemberIndex, this.moveId)); @@ -4654,7 +4653,7 @@ export class LearnMovePhase extends PlayerPartyMemberPokemonPhase { } this.scene.ui.setMode(messageMode).then(() => { this.scene.ui.showText(i18next.t("battle:countdownPoof"), null, () => { - this.scene.ui.showText(i18next.t("battle:learnMoveForgetSuccess", { pokemonName: pokemon.name, moveName: pokemon.moveset[moveIndex].getName() }), null, () => { + this.scene.ui.showText(i18next.t("battle:learnMoveForgetSuccess", { pokemonName: getPokemonNameWithAffix(pokemon), moveName: pokemon.moveset[moveIndex].getName() }), null, () => { this.scene.ui.showText(i18next.t("battle:learnMoveAnd"), null, () => { pokemon.setMove(moveIndex, Moves.NONE); this.scene.unshiftPhase(new LearnMovePhase(this.scene, this.partyMemberIndex, this.moveId)); @@ -4957,7 +4956,7 @@ export class AttemptCapturePhase extends PokemonPhase { this.scene.gameData.updateSpeciesDexIvs(pokemon.species.getRootSpeciesId(true), pokemon.ivs); - this.scene.ui.showText(i18next.t("battle:pokemonCaught", { pokemonName: pokemon.name }), null, () => { + this.scene.ui.showText(i18next.t("battle:pokemonCaught", { pokemonName: getPokemonNameWithAffix(pokemon) }), null, () => { const end = () => { this.scene.pokemonInfoContainer.hide(); this.removePb(); @@ -4990,7 +4989,7 @@ export class AttemptCapturePhase extends PokemonPhase { Promise.all([pokemon.hideInfo(), this.scene.gameData.setPokemonCaught(pokemon)]).then(() => { if (this.scene.getParty().length === 6) { const promptRelease = () => { - this.scene.ui.showText(i18next.t("battle:partyFull", { pokemonName: pokemon.name }), null, () => { + this.scene.ui.showText(i18next.t("battle:partyFull", { pokemonName: getPokemonNameWithAffix(pokemon) }), null, () => { this.scene.pokemonInfoContainer.makeRoomForConfirmUi(); this.scene.ui.setMode(Mode.CONFIRM, () => { this.scene.ui.setMode(Mode.PARTY, PartyUiMode.RELEASE, this.fieldIndex, (slotIndex: integer, _option: PartyOption) => { @@ -5140,7 +5139,7 @@ export class SelectModifierPhase extends BattlePhase { this.scene.ui.setModeWithoutClear(Mode.PARTY, PartyUiMode.MODIFIER_TRANSFER, -1, (fromSlotIndex: integer, itemIndex: integer, itemQuantity: integer, toSlotIndex: integer) => { if (toSlotIndex !== undefined && fromSlotIndex < 6 && toSlotIndex < 6 && fromSlotIndex !== toSlotIndex && itemIndex > -1) { const itemModifiers = this.scene.findModifiers(m => m instanceof PokemonHeldItemModifier - && (m as PokemonHeldItemModifier).getTransferrable(true) && (m as PokemonHeldItemModifier).pokemonId === party[fromSlotIndex].id) as PokemonHeldItemModifier[]; + && m.isTransferrable && m.pokemonId === party[fromSlotIndex].id) as PokemonHeldItemModifier[]; const itemModifier = itemModifiers[itemIndex]; this.scene.tryTransferHeldItemModifier(itemModifier, party[toSlotIndex], true, itemQuantity); } else { @@ -5450,7 +5449,7 @@ export class ScanIvsPhase extends PokemonPhase { const pokemon = this.getPokemon(); - this.scene.ui.showText(i18next.t("battle:ivScannerUseQuestion", { pokemonName: pokemon.name }), null, () => { + 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(); diff --git a/src/plugins/i18n.ts b/src/plugins/i18n.ts index 3bcac101465..b6f242f3e89 100644 --- a/src/plugins/i18n.ts +++ b/src/plugins/i18n.ts @@ -100,7 +100,7 @@ export async function initI18n(): Promise { detection: { lookupLocalStorage: "prLang" }, - debug: true, + debug: Number(import.meta.env.VITE_I18N_DEBUG) === 1, interpolation: { escapeValue: false, }, diff --git a/src/system/achv.ts b/src/system/achv.ts index 714b8a14011..7bce46bebe6 100644 --- a/src/system/achv.ts +++ b/src/system/achv.ts @@ -5,7 +5,7 @@ import i18next from "i18next"; import * as Utils from "../utils"; import { PlayerGender } from "#enums/player-gender"; import { ParseKeys } from "i18next"; -import { Challenge, SingleGenerationChallenge, SingleTypeChallenge } from "#app/data/challenge.js"; +import { Challenge, FreshStartChallenge, SingleGenerationChallenge, SingleTypeChallenge } from "#app/data/challenge.js"; export enum AchvTier { COMMON, @@ -276,6 +276,8 @@ export function getAchievementDescription(localizationKey: string): string { case "MONO_DARK": case "MONO_FAIRY": return i18next.t(`${genderPrefix}achv:MonoType.description` as ParseKeys, {"type": i18next.t(`pokemonInfo:Type.${localizationKey.slice(5)}`)}); + case "FRESH_START": + return i18next.t(`${genderPrefix}achv:FRESH_START.description` as ParseKeys); default: return ""; } @@ -350,6 +352,7 @@ export const achvs = { MONO_DRAGON: new ChallengeAchv("MONO_DRAGON","", "MONO_DRAGON.description", "dragon_fang", 100, c => c instanceof SingleTypeChallenge && c.value === 16), MONO_DARK: new ChallengeAchv("MONO_DARK","", "MONO_DARK.description", "black_glasses", 100, c => c instanceof SingleTypeChallenge && c.value === 17), MONO_FAIRY: new ChallengeAchv("MONO_FAIRY","", "MONO_FAIRY.description", "fairy_feather", 100, c => c instanceof SingleTypeChallenge && c.value === 18), + FRESH_START: new ChallengeAchv("FRESH_START","", "FRESH_START.description", "mystic_ticket", 100, c => c instanceof FreshStartChallenge && c.value === 1), }; export function initAchievements() { diff --git a/src/system/game-data.ts b/src/system/game-data.ts index ac54c942fc7..9559efd0117 100644 --- a/src/system/game-data.ts +++ b/src/system/game-data.ts @@ -4,7 +4,7 @@ import Pokemon, { EnemyPokemon, PlayerPokemon } from "../field/pokemon"; import { pokemonEvolutions, pokemonPrevolutions } from "../data/pokemon-evolutions"; import PokemonSpecies, { allSpecies, getPokemonSpecies, noStarterFormKeys, speciesStarters } from "../data/pokemon-species"; import * as Utils from "../utils"; -import * as Overrides from "../overrides"; +import Overrides from "../overrides"; import PokemonData from "./pokemon-data"; import PersistentModifierData from "./modifier-data"; import ArenaData from "./arena-data"; @@ -40,6 +40,7 @@ import { GameDataType } from "#enums/game-data-type"; import { Moves } from "#enums/moves"; import { PlayerGender } from "#enums/player-gender"; import { Species } from "#enums/species"; +import { applyChallenges, ChallengeType } from "#app/data/challenge.js"; export const defaultStarterSpecies: Species[] = [ Species.BULBASAUR, Species.CHARMANDER, Species.SQUIRTLE, @@ -572,6 +573,8 @@ export class GameData { // Account for past key oversight dataStr = dataStr.replace(/\$pAttr/g, "$pa"); } + dataStr = dataStr.replace(/"trainerId":\d+/g, `"trainerId":${this.trainerId}`); + dataStr = dataStr.replace(/"secretId":\d+/g, `"secretId":${this.secretId}`); const fromKeys = shorten ? Object.keys(systemShortKeys) : Object.values(systemShortKeys); const toKeys = shorten ? Object.values(systemShortKeys) : Object.keys(systemShortKeys); for (const k in fromKeys) { @@ -1676,7 +1679,10 @@ export class GameData { value = decrementValue(value); } - return value; + const cost = new Utils.NumberHolder(value); + applyChallenges(this.scene.gameMode, ChallengeType.STARTER_COST, speciesId, cost); + + return cost.value; } getFormIndex(attr: bigint): integer { diff --git a/src/system/pokemon-data.ts b/src/system/pokemon-data.ts index 57f4c0aea93..7e8f1e21c07 100644 --- a/src/system/pokemon-data.ts +++ b/src/system/pokemon-data.ts @@ -17,6 +17,7 @@ export default class PokemonData { public id: integer; public player: boolean; public species: Species; + public nickname: string; public formIndex: integer; public abilityIndex: integer; public passive: boolean; @@ -59,6 +60,7 @@ export default class PokemonData { this.id = source.id; this.player = sourcePokemon ? sourcePokemon.isPlayer() : source.player; this.species = sourcePokemon ? sourcePokemon.species.speciesId : source.species; + this.nickname = sourcePokemon ? sourcePokemon.nickname : source.nickname; this.formIndex = Math.max(Math.min(source.formIndex, getPokemonSpecies(this.species).forms.length - 1), 0); this.abilityIndex = source.abilityIndex; this.passive = source.passive; @@ -141,7 +143,11 @@ export default class PokemonData { toPokemon(scene: BattleScene, battleType?: BattleType, partyMemberIndex: integer = 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) + ? scene.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, this); if (this.summonData) { ret.primeSummonData(this.summonData); diff --git a/src/system/settings/settings.ts b/src/system/settings/settings.ts index b09de095259..af27613136c 100644 --- a/src/system/settings/settings.ts +++ b/src/system/settings/settings.ts @@ -16,6 +16,13 @@ const VOLUME_OPTIONS: SettingOption[] = new Array(11).fill(null).map((_, i) => i value: "Mute", label: i18next.t("settings:mute") }); +const SHOP_OVERLAY_OPACITY_OPTIONS: SettingOption[] = new Array(9).fill(null).map((_, i) => { + const value = ((i + 1) * 10).toString(); + return { + value, + label: value, + }; +}); const OFF_ON: SettingOption[] = [ { value: "Off", @@ -98,6 +105,7 @@ export const SettingKeys = { SE_Volume: "SE_VOLUME", Music_Preference: "MUSIC_PREFERENCE", Show_BGM_Bar: "SHOW_BGM_BAR", + Shop_Overlay_Opacity: "SHOP_OVERLAY_OPACITY" }; /** @@ -493,9 +501,8 @@ export const Setting: Array = [ key: SettingKeys.Show_BGM_Bar, label: i18next.t("settings:showBgmBar"), options: OFF_ON, - default: 0, - type: SettingType.DISPLAY, - requireReload: true + default: 1, + type: SettingType.DISPLAY }, { key: SettingKeys.Master_Volume, @@ -535,7 +542,14 @@ export const Setting: Array = [ type: SettingType.AUDIO, requireReload: true }, - + { + key: SettingKeys.Shop_Overlay_Opacity, + label: i18next.t("settings:shopOverlayOpacity"), + options: SHOP_OVERLAY_OPACITY_OPTIONS, + default: 7, + type: SettingType.DISPLAY, + requireReload: false + }, ]; /** @@ -760,6 +774,9 @@ export function setSetting(scene: BattleScene, setting: string, value: integer): } } break; + case SettingKeys.Shop_Overlay_Opacity: + scene.updateShopOverlayOpacity(parseInt(Setting[index].options[value].value) * .01); + break; } return true; diff --git a/src/test/abilities/aura_break.test.ts b/src/test/abilities/aura_break.test.ts index bfd1fdf59fe..fa7f34edb2f 100644 --- a/src/test/abilities/aura_break.test.ts +++ b/src/test/abilities/aura_break.test.ts @@ -1,21 +1,19 @@ import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; import Phaser from "phaser"; import GameManager from "#app/test/utils/gameManager"; -import * as overrides from "#app/overrides"; +import overrides from "#app/overrides"; import { Species } from "#enums/species"; import { MoveEffectPhase } from "#app/phases"; import { Moves } from "#enums/moves"; import { getMovePosition } from "#app/test/utils/gameManagerUtils"; import { Abilities } from "#enums/abilities"; -import Move, { allMoves } from "#app/data/move.js"; -import Pokemon from "#app/field/pokemon.js"; -import { FieldMoveTypePowerBoostAbAttr } from "#app/data/ability.js"; -import { NumberHolder } from "#app/utils.js"; +import { allMoves } from "#app/data/move.js"; describe("Abilities - Aura Break", () => { let phaserGame: Phaser.Game; let game: GameManager; - const multiplier = 9 / 16; + + const auraBreakMultiplier = 9/16 * 4/3; beforeAll(() => { phaserGame = new Phaser.Game({ @@ -33,63 +31,34 @@ describe("Abilities - Aura Break", () => { vi.spyOn(overrides, "MOVESET_OVERRIDE", "get").mockReturnValue([Moves.MOONBLAST, Moves.DARK_PULSE, Moves.MOONBLAST, Moves.DARK_PULSE]); vi.spyOn(overrides, "OPP_MOVESET_OVERRIDE", "get").mockReturnValue([Moves.SPLASH, Moves.SPLASH, Moves.SPLASH, Moves.SPLASH]); vi.spyOn(overrides, "OPP_ABILITY_OVERRIDE", "get").mockReturnValue(Abilities.AURA_BREAK); + vi.spyOn(overrides, "OPP_SPECIES_OVERRIDE", "get").mockReturnValue(Species.SHUCKLE); }); it("reverses the effect of fairy aura", async () => { + const moveToCheck = allMoves[Moves.MOONBLAST]; + const basePower = moveToCheck.power; + vi.spyOn(overrides, "ABILITY_OVERRIDE", "get").mockReturnValue(Abilities.FAIRY_AURA); - const basePower = allMoves[Moves.MOONBLAST].power; - await game.startBattle([Species.MAGIKARP]); + vi.spyOn(moveToCheck, "calculateBattlePower"); + await game.startBattle([Species.PIKACHU]); game.doAttack(getMovePosition(game.scene, 0, Moves.MOONBLAST)); - - const appliedPower = getMockedMovePower(game.scene.getEnemyField()[0], game.scene.getPlayerField()[0], allMoves[Moves.MOONBLAST]); - await game.phaseInterceptor.to(MoveEffectPhase); - expect(appliedPower).not.toBe(undefined); - expect(appliedPower).not.toBe(basePower); - expect(appliedPower).toBe(basePower * multiplier); - + expect(moveToCheck.calculateBattlePower).toHaveReturnedWith(expect.closeTo(basePower * auraBreakMultiplier)); }); it("reverses the effect of dark aura", async () => { + const moveToCheck = allMoves[Moves.DARK_PULSE]; + const basePower = moveToCheck.power; + vi.spyOn(overrides, "ABILITY_OVERRIDE", "get").mockReturnValue(Abilities.DARK_AURA); - const basePower = allMoves[Moves.DARK_PULSE].power; - await game.startBattle([Species.MAGIKARP]); + vi.spyOn(moveToCheck, "calculateBattlePower"); + await game.startBattle([Species.PIKACHU]); game.doAttack(getMovePosition(game.scene, 0, Moves.DARK_PULSE)); - - const appliedPower = getMockedMovePower(game.scene.getEnemyField()[0], game.scene.getPlayerField()[0], allMoves[Moves.DARK_PULSE]); - await game.phaseInterceptor.to(MoveEffectPhase); - expect(appliedPower).not.toBe(undefined); - expect(appliedPower).not.toBe(basePower); - expect(appliedPower).toBe(basePower * multiplier); + expect(moveToCheck.calculateBattlePower).toHaveReturnedWith(expect.closeTo(basePower * auraBreakMultiplier)); }); }); - -/** - * Calculates the mocked power of a move in a Pokémon battle, taking into account certain abilities. - * - * @param defender - The defending Pokémon. - * @param attacker - The attacking Pokémon. - * @param move - The move being used in the attack. - * @returns The calculated power of the move after applying any relevant ability effects. - * - * @remarks - * This function creates a NumberHolder with the initial power of the move. - * It then checks if the defender has an ability with the FieldMoveTypePowerBoostAbAttr. - * If so, it applies a power modification of 9/16 using an instance of FieldMoveTypePowerBoostAbAttr. - * The final calculated power is then returned. - */ -const getMockedMovePower = (defender: Pokemon, attacker: Pokemon, move: Move): number => { - const powerHolder = new NumberHolder(move.power); - - if (defender.hasAbilityWithAttr(FieldMoveTypePowerBoostAbAttr)) { - const auraBreakInstance = new FieldMoveTypePowerBoostAbAttr(move.type, 9 / 16); - auraBreakInstance.applyPreAttack(attacker, false, defender, move, [powerHolder]); - } - - return powerHolder.value; -}; diff --git a/src/test/abilities/battery.test.ts b/src/test/abilities/battery.test.ts index 53a04732b74..b600772f3c4 100644 --- a/src/test/abilities/battery.test.ts +++ b/src/test/abilities/battery.test.ts @@ -1,19 +1,20 @@ import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; import Phaser from "phaser"; import GameManager from "#app/test/utils/gameManager"; -import * as overrides from "#app/overrides"; +import overrides from "#app/overrides"; import { Species } from "#enums/species"; import { Moves } from "#enums/moves"; import { getMovePosition } from "#app/test/utils/gameManagerUtils"; -import Move, { allMoves, MoveCategory } from "#app/data/move.js"; -import { AllyMoveCategoryPowerBoostAbAttr } from "#app/data/ability.js"; -import { NumberHolder } from "#app/utils.js"; -import Pokemon from "#app/field/pokemon.js"; +import { allMoves } from "#app/data/move.js"; +import { Abilities } from "#app/enums/abilities.js"; +import { MoveEffectPhase, TurnEndPhase } from "#app/phases.js"; describe("Abilities - Battery", () => { let phaserGame: Phaser.Game; let game: GameManager; + const batteryMultiplier = 1.3; + beforeAll(() => { phaserGame = new Phaser.Game({ type: Phaser.HEADLESS, @@ -27,94 +28,54 @@ describe("Abilities - Battery", () => { beforeEach(() => { game = new GameManager(phaserGame); vi.spyOn(overrides, "DOUBLE_BATTLE_OVERRIDE", "get").mockReturnValue(true); - vi.spyOn(overrides, "MOVESET_OVERRIDE", "get").mockReturnValue([Moves.TACKLE, Moves.ROCK_SLIDE, Moves.SPLASH, Moves.HEAT_WAVE]); + vi.spyOn(overrides, "OPP_SPECIES_OVERRIDE", "get").mockReturnValue(Species.SHUCKLE); + vi.spyOn(overrides, "OPP_ABILITY_OVERRIDE", "get").mockReturnValue(Abilities.BALL_FETCH); + vi.spyOn(overrides, "MOVESET_OVERRIDE", "get").mockReturnValue([Moves.TACKLE, Moves.BREAKING_SWIPE, Moves.SPLASH, Moves.DAZZLING_GLEAM]); vi.spyOn(overrides, "OPP_MOVESET_OVERRIDE", "get").mockReturnValue([Moves.SPLASH, Moves.SPLASH, Moves.SPLASH, Moves.SPLASH]); }); it("raises the power of allies' special moves by 30%", async () => { - const moveToBeUsed = Moves.HEAT_WAVE; - const basePower = allMoves[moveToBeUsed].power; + const moveToCheck = allMoves[Moves.DAZZLING_GLEAM]; + const basePower = moveToCheck.power; - await game.startBattle([Species.MAGIKARP, Species.CHARJABUG]); + vi.spyOn(moveToCheck, "calculateBattlePower"); - game.doAttack(getMovePosition(game.scene, 0, moveToBeUsed)); + await game.startBattle([Species.PIKACHU, Species.CHARJABUG]); + + game.doAttack(getMovePosition(game.scene, 0, Moves.DAZZLING_GLEAM)); game.doAttack(getMovePosition(game.scene, 1, Moves.SPLASH)); + await game.phaseInterceptor.to(MoveEffectPhase); - const multiplier = getAttrPowerMultiplier(game.scene.getPlayerField()[1]); - const mockedPower = getMockedMovePower(game.scene.getEnemyField()[0], game.scene.getPlayerField()[0], allMoves[moveToBeUsed]); - - expect(mockedPower).not.toBe(undefined); - expect(mockedPower).not.toBe(basePower); - expect(mockedPower).toBe(basePower * multiplier); + expect(moveToCheck.calculateBattlePower).toHaveReturnedWith(basePower * batteryMultiplier); }); it("does not raise the power of allies' non-special moves", async () => { - const moveToBeUsed = Moves.ROCK_SLIDE; - const basePower = allMoves[moveToBeUsed].power; + const moveToCheck = allMoves[Moves.BREAKING_SWIPE]; + const basePower = moveToCheck.power; - await game.startBattle([Species.MAGIKARP, Species.CHARJABUG]); + vi.spyOn(moveToCheck, "calculateBattlePower"); - game.doAttack(getMovePosition(game.scene, 0, moveToBeUsed)); + await game.startBattle([Species.PIKACHU, Species.CHARJABUG]); + + game.doAttack(getMovePosition(game.scene, 0, Moves.BREAKING_SWIPE)); game.doAttack(getMovePosition(game.scene, 1, Moves.SPLASH)); + await game.phaseInterceptor.to(MoveEffectPhase); - const multiplier = getAttrPowerMultiplier(game.scene.getPlayerField()[1]); - const mockedPower = getMockedMovePower(game.scene.getEnemyField()[0], game.scene.getPlayerField()[0], allMoves[moveToBeUsed]); - - expect(mockedPower).not.toBe(undefined); - expect(mockedPower).toBe(basePower); - expect(mockedPower).not.toBe(basePower * multiplier); + expect(moveToCheck.calculateBattlePower).toHaveReturnedWith(basePower); }); it("does not raise the power of the ability owner's special moves", async () => { - const moveToBeUsed = Moves.HEAT_WAVE; - const basePower = allMoves[moveToBeUsed].power; + const moveToCheck = allMoves[Moves.DAZZLING_GLEAM]; + const basePower = moveToCheck.power; - await game.startBattle([Species.CHARJABUG, Species.MAGIKARP]); + vi.spyOn(moveToCheck, "calculateBattlePower"); - game.doAttack(getMovePosition(game.scene, 0, moveToBeUsed)); + await game.startBattle([Species.CHARJABUG, Species.PIKACHU]); + + game.doAttack(getMovePosition(game.scene, 0, Moves.DAZZLING_GLEAM)); game.doAttack(getMovePosition(game.scene, 1, Moves.SPLASH)); + await game.phaseInterceptor.to(TurnEndPhase); - const multiplier = getAttrPowerMultiplier(game.scene.getPlayerField()[0]); - const mockedPower = getMockedMovePower(game.scene.getEnemyField()[0], game.scene.getPlayerField()[0], allMoves[moveToBeUsed]); - - expect(mockedPower).not.toBe(undefined); - expect(mockedPower).toBe(basePower); - expect(mockedPower).not.toBe(basePower * multiplier); + expect(moveToCheck.calculateBattlePower).toHaveReturnedWith(basePower); }); }); - -/** - * Calculates the mocked power of a move. - * Note this does not consider other damage calculations - * except the power multiplier from Battery. - * - * @param defender - The defending Pokémon. - * @param attacker - The attacking Pokémon. - * @param move - The move being used by the attacker. - * @returns The adjusted power of the move. - */ -const getMockedMovePower = (defender: Pokemon, attacker: Pokemon, move: Move) => { - const powerHolder = new NumberHolder(move.power); - - /** - * @see AllyMoveCategoryPowerBoostAbAttr - */ - if (attacker.getAlly().hasAbilityWithAttr(AllyMoveCategoryPowerBoostAbAttr)) { - const batteryInstance = new AllyMoveCategoryPowerBoostAbAttr([MoveCategory.SPECIAL], 1.3); - batteryInstance.applyPreAttack(attacker, false, defender, move, [ powerHolder ]); - } - - return powerHolder.value; -}; - -/** - * Retrieves the power multiplier from a Pokémon's ability attribute. - * - * @param pokemon - The Pokémon whose ability attributes are being queried. - * @returns The power multiplier of the `AllyMoveCategoryPowerBoostAbAttr` attribute. - */ -const getAttrPowerMultiplier = (pokemon: Pokemon) => { - const attr = pokemon.getAbilityAttrs(AllyMoveCategoryPowerBoostAbAttr); - - return (attr[0] as AllyMoveCategoryPowerBoostAbAttr)["powerMultiplier"]; -}; diff --git a/src/test/abilities/battle_bond.test.ts b/src/test/abilities/battle_bond.test.ts index b2ff73f5b76..a72c1a0fa67 100644 --- a/src/test/abilities/battle_bond.test.ts +++ b/src/test/abilities/battle_bond.test.ts @@ -1,7 +1,7 @@ import { afterEach, beforeAll, beforeEach, describe, expect, test, vi } from "vitest"; import GameManager from "#test/utils/gameManager"; import { getMovePosition } from "#test/utils/gameManagerUtils"; -import * as Overrides from "#app/overrides"; +import Overrides from "#app/overrides"; import { Moves } from "#enums/moves"; import { Abilities } from "#enums/abilities"; import { Species } from "#enums/species"; diff --git a/src/test/abilities/costar.test.ts b/src/test/abilities/costar.test.ts index ecd70088aa2..f677d55e183 100644 --- a/src/test/abilities/costar.test.ts +++ b/src/test/abilities/costar.test.ts @@ -1,7 +1,7 @@ import { afterEach, beforeAll, beforeEach, describe, expect, test, vi } from "vitest"; import GameManager from "../utils/gameManager"; import Phaser from "phaser"; -import * as Overrides from "#app/overrides"; +import Overrides from "#app/overrides"; import { BattleStat } from "#app/data/battle-stat.js"; import { CommandPhase, MessagePhase } from "#app/phases.js"; import { getMovePosition } from "../utils/gameManagerUtils"; diff --git a/src/test/abilities/disguise.test.ts b/src/test/abilities/disguise.test.ts index 297aa33e06c..41650cbd280 100644 --- a/src/test/abilities/disguise.test.ts +++ b/src/test/abilities/disguise.test.ts @@ -1,7 +1,7 @@ import { afterEach, beforeAll, beforeEach, describe, expect, test, vi } from "vitest"; import GameManager from "#test/utils/gameManager"; import { getMovePosition } from "#test/utils/gameManagerUtils"; -import * as Overrides from "#app/overrides"; +import Overrides from "#app/overrides"; import { Moves } from "#enums/moves"; import { Abilities } from "#enums/abilities"; import { Species } from "#enums/species"; diff --git a/src/test/abilities/dry_skin.test.ts b/src/test/abilities/dry_skin.test.ts index bfb8f45a11f..96fcb27f545 100644 --- a/src/test/abilities/dry_skin.test.ts +++ b/src/test/abilities/dry_skin.test.ts @@ -1,7 +1,7 @@ import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; import Phaser from "phaser"; import GameManager from "#app/test/utils/gameManager"; -import * as overrides from "#app/overrides"; +import overrides from "#app/overrides"; import { TurnEndPhase } from "#app/phases"; import { Moves } from "#enums/moves"; import { getMovePosition } from "#app/test/utils/gameManagerUtils"; @@ -25,6 +25,7 @@ describe("Abilities - Dry Skin", () => { beforeEach(() => { game = new GameManager(phaserGame); vi.spyOn(overrides, "SINGLE_BATTLE_OVERRIDE", "get").mockReturnValue(true); + vi.spyOn(overrides, "NEVER_CRIT_OVERRIDE", "get").mockReturnValue(true); vi.spyOn(overrides, "OPP_ABILITY_OVERRIDE", "get").mockReturnValue(Abilities.DRY_SKIN); vi.spyOn(overrides, "OPP_MOVESET_OVERRIDE", "get").mockReturnValue([Moves.SPLASH, Moves.SPLASH, Moves.SPLASH, Moves.SPLASH]); vi.spyOn(overrides, "OPP_SPECIES_OVERRIDE", "get").mockReturnValue(Species.CHARMANDER); @@ -77,30 +78,28 @@ describe("Abilities - Dry Skin", () => { }); it("opposing fire attacks do 25% more damage", async () => { - vi.spyOn(overrides, "MOVESET_OVERRIDE", "get").mockReturnValue([Moves.EMBER]); - - // ensure the enemy doesn't die to this - vi.spyOn(overrides, "OPP_LEVEL_OVERRIDE", "get").mockReturnValue(30); + vi.spyOn(overrides, "MOVESET_OVERRIDE", "get").mockReturnValue([Moves.FLAMETHROWER]); await game.startBattle(); const enemy = game.scene.getEnemyPokemon(); - expect(enemy).not.toBe(undefined); + expect(enemy).toBeDefined(); + const initialHP = 1000; + enemy.hp = initialHP; // first turn - vi.spyOn(game.scene, "randBattleSeedInt").mockReturnValue(0); // this makes moves always deal 85% damage - game.doAttack(getMovePosition(game.scene, 0, Moves.EMBER)); + game.doAttack(getMovePosition(game.scene, 0, Moves.FLAMETHROWER)); await game.phaseInterceptor.to(TurnEndPhase); - const fireDamageTakenWithDrySkin = enemy.getMaxHp() - enemy.hp; + const fireDamageTakenWithDrySkin = initialHP - enemy.hp; expect(enemy.hp > 0); - enemy.hp = enemy.getMaxHp(); + enemy.hp = initialHP; vi.spyOn(overrides, "OPP_ABILITY_OVERRIDE", "get").mockReturnValue(Abilities.NONE); // second turn - game.doAttack(getMovePosition(game.scene, 0, Moves.EMBER)); + game.doAttack(getMovePosition(game.scene, 0, Moves.FLAMETHROWER)); await game.phaseInterceptor.to(TurnEndPhase); - const fireDamageTakenWithoutDrySkin = enemy.getMaxHp() - enemy.hp; + const fireDamageTakenWithoutDrySkin = initialHP - enemy.hp; expect(fireDamageTakenWithDrySkin).toBeGreaterThan(fireDamageTakenWithoutDrySkin); }); diff --git a/src/test/abilities/ice_face.test.ts b/src/test/abilities/ice_face.test.ts index 7d85f5bbc55..74972eabb65 100644 --- a/src/test/abilities/ice_face.test.ts +++ b/src/test/abilities/ice_face.test.ts @@ -1,7 +1,7 @@ import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; import Phaser from "phaser"; import GameManager from "#app/test/utils/gameManager"; -import * as overrides from "#app/overrides"; +import overrides from "#app/overrides"; import { Species } from "#enums/species"; import { MoveEffectPhase, diff --git a/src/test/abilities/intimidate.test.ts b/src/test/abilities/intimidate.test.ts index 4a690e76b56..2dbad662098 100644 --- a/src/test/abilities/intimidate.test.ts +++ b/src/test/abilities/intimidate.test.ts @@ -1,7 +1,7 @@ import {afterEach, beforeAll, beforeEach, describe, expect, it, vi} from "vitest"; import Phaser from "phaser"; import GameManager from "#app/test/utils/gameManager"; -import * as overrides from "#app/overrides"; +import overrides from "#app/overrides"; import { CommandPhase, DamagePhase, EncounterPhase, EnemyCommandPhase, SelectStarterPhase, diff --git a/src/test/abilities/intrepid_sword.test.ts b/src/test/abilities/intrepid_sword.test.ts index 2d51642be70..0845a8beb22 100644 --- a/src/test/abilities/intrepid_sword.test.ts +++ b/src/test/abilities/intrepid_sword.test.ts @@ -1,7 +1,7 @@ import {afterEach, beforeAll, beforeEach, describe, expect, it, vi} from "vitest"; import Phaser from "phaser"; import GameManager from "#app/test/utils/gameManager"; -import * as overrides from "#app/overrides"; +import overrides from "#app/overrides"; import {Abilities} from "#enums/abilities"; import {Species} from "#enums/species"; import { diff --git a/src/test/abilities/libero.test.ts b/src/test/abilities/libero.test.ts index a00239a651b..ef5348dab88 100644 --- a/src/test/abilities/libero.test.ts +++ b/src/test/abilities/libero.test.ts @@ -1,7 +1,7 @@ import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, test, vi } from "vitest"; import GameManager from "../utils/gameManager"; -import * as Overrides from "#app/overrides"; +import Overrides from "#app/overrides"; import { Species } from "#enums/species"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; diff --git a/src/test/abilities/moxie.test.ts b/src/test/abilities/moxie.test.ts index 46fc4e5c34c..6da5561ac1f 100644 --- a/src/test/abilities/moxie.test.ts +++ b/src/test/abilities/moxie.test.ts @@ -1,7 +1,7 @@ import {afterEach, beforeAll, beforeEach, describe, expect, it, vi} from "vitest"; import Phaser from "phaser"; import GameManager from "#app/test/utils/gameManager"; -import * as overrides from "#app/overrides"; +import overrides from "#app/overrides"; import { CommandPhase, EnemyCommandPhase, diff --git a/src/test/abilities/parental_bond.test.ts b/src/test/abilities/parental_bond.test.ts index 4401ee0d40a..1b0362e8120 100644 --- a/src/test/abilities/parental_bond.test.ts +++ b/src/test/abilities/parental_bond.test.ts @@ -1,7 +1,7 @@ import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, test, vi } from "vitest"; import GameManager from "../utils/gameManager"; -import * as Overrides from "#app/overrides"; +import Overrides from "#app/overrides"; import { Species } from "#enums/species"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; @@ -31,6 +31,7 @@ describe("Abilities - Parental Bond", () => { beforeEach(() => { game = new GameManager(phaserGame); vi.spyOn(Overrides, "SINGLE_BATTLE_OVERRIDE", "get").mockReturnValue(true); + vi.spyOn(Overrides, "NEVER_CRIT_OVERRIDE", "get").mockReturnValue(true); vi.spyOn(Overrides, "ABILITY_OVERRIDE", "get").mockReturnValue(Abilities.PARENTAL_BOND); vi.spyOn(Overrides, "OPP_SPECIES_OVERRIDE", "get").mockReturnValue(Species.SNORLAX); vi.spyOn(Overrides, "OPP_ABILITY_OVERRIDE", "get").mockReturnValue(Abilities.INSOMNIA); @@ -57,7 +58,6 @@ describe("Abilities - Parental Bond", () => { game.doAttack(getMovePosition(game.scene, 0, Moves.TACKLE)); await game.phaseInterceptor.to(MoveEffectPhase, false); - vi.spyOn(game.scene, "randBattleSeedInt").mockReturnValue(15); await game.phaseInterceptor.to(DamagePhase); const firstStrikeDamage = enemyStartingHp - enemyPokemon.hp; @@ -449,7 +449,7 @@ describe("Abilities - Parental Bond", () => { ); /** TODO: Fix TRAPPED tag lapsing incorrectly, then run this test */ - test.skip( + test( "Anchor Shot boosted by this ability should only trap the target after the second hit", async () => { vi.spyOn(Overrides, "MOVESET_OVERRIDE", "get").mockReturnValue([Moves.ANCHOR_SHOT]); @@ -636,7 +636,6 @@ describe("Abilities - Parental Bond", () => { game.doAttack(getMovePosition(game.scene, 1, Moves.SPLASH)); await game.phaseInterceptor.to(MoveEffectPhase, false); - vi.spyOn(game.scene, "randBattleSeedInt").mockReturnValue(15); await game.phaseInterceptor.to(DamagePhase); const enemyFirstHitDamage = enemyStartingHp.map((hp, i) => hp - enemyPokemon[i].hp); diff --git a/src/test/abilities/power_construct.test.ts b/src/test/abilities/power_construct.test.ts index 68a360a60a2..c9d0e4ba755 100644 --- a/src/test/abilities/power_construct.test.ts +++ b/src/test/abilities/power_construct.test.ts @@ -1,7 +1,7 @@ import { afterEach, beforeAll, beforeEach, describe, expect, test, vi } from "vitest"; import GameManager from "#test/utils/gameManager"; import { getMovePosition } from "#test/utils/gameManagerUtils"; -import * as Overrides from "#app/overrides"; +import Overrides from "#app/overrides"; import { Moves } from "#enums/moves"; import { Abilities } from "#enums/abilities"; import { Species } from "#enums/species"; diff --git a/src/test/abilities/power_spot.test.ts b/src/test/abilities/power_spot.test.ts index 0ed2b10f4be..577c9f87ec5 100644 --- a/src/test/abilities/power_spot.test.ts +++ b/src/test/abilities/power_spot.test.ts @@ -1,19 +1,20 @@ import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; import Phaser from "phaser"; import GameManager from "#app/test/utils/gameManager"; -import * as overrides from "#app/overrides"; +import overrides from "#app/overrides"; import { Species } from "#enums/species"; import { Moves } from "#enums/moves"; import { getMovePosition } from "#app/test/utils/gameManagerUtils"; -import Move, { allMoves, MoveCategory } from "#app/data/move.js"; -import { AllyMoveCategoryPowerBoostAbAttr } from "#app/data/ability.js"; -import { NumberHolder } from "#app/utils.js"; -import Pokemon from "#app/field/pokemon.js"; +import { allMoves } from "#app/data/move.js"; +import { MoveEffectPhase, TurnEndPhase } from "#app/phases.js"; +import { Abilities } from "#app/enums/abilities.js"; describe("Abilities - Power Spot", () => { let phaserGame: Phaser.Game; let game: GameManager; + const powerSpotMultiplier = 1.3; + beforeAll(() => { phaserGame = new Phaser.Game({ type: Phaser.HEADLESS, @@ -27,94 +28,51 @@ describe("Abilities - Power Spot", () => { beforeEach(() => { game = new GameManager(phaserGame); vi.spyOn(overrides, "DOUBLE_BATTLE_OVERRIDE", "get").mockReturnValue(true); - vi.spyOn(overrides, "MOVESET_OVERRIDE", "get").mockReturnValue([Moves.TACKLE, Moves.ROCK_SLIDE, Moves.SPLASH, Moves.HEAT_WAVE]); + vi.spyOn(overrides, "MOVESET_OVERRIDE", "get").mockReturnValue([Moves.TACKLE, Moves.BREAKING_SWIPE, Moves.SPLASH, Moves.DAZZLING_GLEAM]); vi.spyOn(overrides, "OPP_MOVESET_OVERRIDE", "get").mockReturnValue([Moves.SPLASH, Moves.SPLASH, Moves.SPLASH, Moves.SPLASH]); + vi.spyOn(overrides, "OPP_SPECIES_OVERRIDE", "get").mockReturnValue(Species.SHUCKLE); + vi.spyOn(overrides, "OPP_ABILITY_OVERRIDE", "get").mockReturnValue(Abilities.BALL_FETCH); }); it("raises the power of allies' special moves by 30%", async () => { - const moveToBeUsed = Moves.HEAT_WAVE; - const basePower = allMoves[moveToBeUsed].power; + const moveToCheck = allMoves[Moves.DAZZLING_GLEAM]; + const basePower = moveToCheck.power; - await game.startBattle([Species.MAGIKARP, Species.STONJOURNER]); + vi.spyOn(moveToCheck, "calculateBattlePower"); - game.doAttack(getMovePosition(game.scene, 0, moveToBeUsed)); + await game.startBattle([Species.PIKACHU, Species.STONJOURNER]); + game.doAttack(getMovePosition(game.scene, 0, Moves.DAZZLING_GLEAM)); game.doAttack(getMovePosition(game.scene, 1, Moves.SPLASH)); + await game.phaseInterceptor.to(MoveEffectPhase); - const multiplier = getAttrPowerMultiplier(game.scene.getPlayerField()[1]); - const mockedPower = getMockedMovePower(game.scene.getEnemyField()[0], game.scene.getPlayerField()[0], allMoves[moveToBeUsed]); - - expect(mockedPower).not.toBe(undefined); - expect(mockedPower).not.toBe(basePower); - expect(mockedPower).toBe(basePower * multiplier); + expect(moveToCheck.calculateBattlePower).toHaveReturnedWith(basePower * powerSpotMultiplier); }); it("raises the power of allies' physical moves by 30%", async () => { - const moveToBeUsed = Moves.ROCK_SLIDE; - const basePower = allMoves[moveToBeUsed].power; + const moveToCheck = allMoves[Moves.BREAKING_SWIPE]; + const basePower = moveToCheck.power; - await game.startBattle([Species.MAGIKARP, Species.STONJOURNER]); + vi.spyOn(moveToCheck, "calculateBattlePower"); - game.doAttack(getMovePosition(game.scene, 0, moveToBeUsed)); + await game.startBattle([Species.PIKACHU, Species.STONJOURNER]); + game.doAttack(getMovePosition(game.scene, 0, Moves.BREAKING_SWIPE)); game.doAttack(getMovePosition(game.scene, 1, Moves.SPLASH)); + await game.phaseInterceptor.to(MoveEffectPhase); - const multiplier = getAttrPowerMultiplier(game.scene.getPlayerField()[1]); - const mockedPower = getMockedMovePower(game.scene.getEnemyField()[0], game.scene.getPlayerField()[0], allMoves[moveToBeUsed]); - - expect(mockedPower).not.toBe(undefined); - expect(mockedPower).not.toBe(basePower); - expect(mockedPower).toBe(basePower * multiplier); + expect(moveToCheck.calculateBattlePower).toHaveReturnedWith(basePower * powerSpotMultiplier); }); it("does not raise the power of the ability owner's moves", async () => { - const moveToBeUsed = Moves.HEAT_WAVE; - const basePower = allMoves[moveToBeUsed].power; + const moveToCheck = allMoves[Moves.BREAKING_SWIPE]; + const basePower = moveToCheck.power; - await game.startBattle([Species.STONJOURNER, Species.MAGIKARP]); + vi.spyOn(moveToCheck, "calculateBattlePower"); - game.doAttack(getMovePosition(game.scene, 0, moveToBeUsed)); + await game.startBattle([Species.STONJOURNER, Species.PIKACHU]); + game.doAttack(getMovePosition(game.scene, 0, Moves.BREAKING_SWIPE)); game.doAttack(getMovePosition(game.scene, 1, Moves.SPLASH)); + await game.phaseInterceptor.to(TurnEndPhase); - const multiplier = getAttrPowerMultiplier(game.scene.getPlayerField()[0]); - const mockedPower = getMockedMovePower(game.scene.getEnemyField()[0], game.scene.getPlayerField()[0], allMoves[moveToBeUsed]); - - expect(mockedPower).not.toBe(undefined); - expect(mockedPower).toBe(basePower); - expect(mockedPower).not.toBe(basePower * multiplier); + expect(moveToCheck.calculateBattlePower).toHaveReturnedWith(basePower); }); }); - -/** - * Calculates the mocked power of a move. - * Note this does not consider other damage calculations - * except the power multiplier from Power Spot. - * - * @param defender - The defending Pokémon. - * @param attacker - The attacking Pokémon. - * @param move - The move being used by the attacker. - * @returns The adjusted power of the move. - */ -const getMockedMovePower = (defender: Pokemon, attacker: Pokemon, move: Move) => { - const powerHolder = new NumberHolder(move.power); - - /** - * @see AllyMoveCategoryPowerBoostAbAttr - */ - if (attacker.getAlly().hasAbilityWithAttr(AllyMoveCategoryPowerBoostAbAttr)) { - const powerSpotInstance = new AllyMoveCategoryPowerBoostAbAttr([MoveCategory.SPECIAL, MoveCategory.PHYSICAL], 1.3); - powerSpotInstance.applyPreAttack(attacker, false, defender, move, [ powerHolder ]); - } - - return powerHolder.value; -}; - -/** - * Retrieves the power multiplier from a Pokémon's ability attribute. - * - * @param pokemon - The Pokémon whose ability attributes are being queried. - * @returns The power multiplier of the `AllyMoveCategoryPowerBoostAbAttr` attribute. - */ -const getAttrPowerMultiplier = (pokemon: Pokemon) => { - const attr = pokemon.getAbilityAttrs(AllyMoveCategoryPowerBoostAbAttr); - - return (attr[0] as AllyMoveCategoryPowerBoostAbAttr)["powerMultiplier"]; -}; diff --git a/src/test/abilities/protean.test.ts b/src/test/abilities/protean.test.ts index 125c03eb39c..4d8faae1cd3 100644 --- a/src/test/abilities/protean.test.ts +++ b/src/test/abilities/protean.test.ts @@ -1,7 +1,7 @@ import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, test, vi } from "vitest"; import GameManager from "../utils/gameManager"; -import * as Overrides from "#app/overrides"; +import Overrides from "#app/overrides"; import { Species } from "#enums/species"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; diff --git a/src/test/abilities/quick_draw.test.ts b/src/test/abilities/quick_draw.test.ts index 884b108381d..12f2525f660 100644 --- a/src/test/abilities/quick_draw.test.ts +++ b/src/test/abilities/quick_draw.test.ts @@ -1,6 +1,6 @@ import Phaser from "phaser"; import GameManager from "#app/test/utils/gameManager"; -import * as Overrides from "#app/overrides"; +import Overrides from "#app/overrides"; import { Abilities } from "#enums/abilities"; import { Species } from "#enums/species"; import { FaintPhase } from "#app/phases"; @@ -26,17 +26,21 @@ describe("Abilities - Quick Draw", () => { beforeEach(() => { game = new GameManager(phaserGame); vi.spyOn(Overrides, "SINGLE_BATTLE_OVERRIDE", "get").mockReturnValue(true); + + vi.spyOn(Overrides, "STARTER_SPECIES_OVERRIDE", "get").mockReturnValue(Species.MAGIKARP); vi.spyOn(Overrides, "ABILITY_OVERRIDE", "get").mockReturnValue(Abilities.QUICK_DRAW); vi.spyOn(Overrides, "MOVESET_OVERRIDE", "get").mockReturnValue([Moves.TACKLE, Moves.TAIL_WHIP]); + vi.spyOn(Overrides, "OPP_LEVEL_OVERRIDE", "get").mockReturnValue(100); - vi.spyOn(Overrides, "OPP_SPECIES_OVERRIDE", "get").mockReturnValue(Species.RATTATA); - vi.spyOn(Overrides, "OPP_MOVESET_OVERRIDE", "get").mockReturnValue([Moves.TACKLE, Moves.TACKLE, Moves.TACKLE, Moves.TACKLE]); + vi.spyOn(Overrides, "OPP_SPECIES_OVERRIDE", "get").mockReturnValue(Species.MAGIKARP); + vi.spyOn(Overrides, "OPP_ABILITY_OVERRIDE", "get").mockReturnValue(Abilities.BALL_FETCH); + vi.spyOn(Overrides, "OPP_MOVESET_OVERRIDE", "get").mockReturnValue(Array(4).fill(Moves.TACKLE)); vi.spyOn(allAbilities[Abilities.QUICK_DRAW].getAttrs(BypassSpeedChanceAbAttr)[0], "chance", "get").mockReturnValue(100); }); test("makes pokemon going first in its priority bracket", async () => { - await game.startBattle([Species.SLOWBRO]); + await game.startBattle(); const pokemon = game.scene.getPlayerPokemon(); const enemy = game.scene.getEnemyPokemon(); @@ -52,8 +56,11 @@ describe("Abilities - Quick Draw", () => { expect(pokemon.battleData.abilitiesApplied).contain(Abilities.QUICK_DRAW); }, 20000); - test("does not triggered by non damage moves", async () => { - await game.startBattle([Species.SLOWBRO]); + test("does not triggered by non damage moves", { + timeout: 20000, + retry: 5 + }, async () => { + await game.startBattle(); const pokemon = game.scene.getPlayerPokemon(); const enemy = game.scene.getEnemyPokemon(); @@ -67,12 +74,13 @@ describe("Abilities - Quick Draw", () => { expect(pokemon.isFainted()).toBe(true); expect(enemy.isFainted()).toBe(false); expect(pokemon.battleData.abilitiesApplied).not.contain(Abilities.QUICK_DRAW); - }, 20000); + } + ); test("does not increase priority", async () => { vi.spyOn(Overrides, "OPP_MOVESET_OVERRIDE", "get").mockReturnValue(Array(4).fill(Moves.EXTREME_SPEED)); - await game.startBattle([Species.SLOWBRO]); + await game.startBattle(); const pokemon = game.scene.getPlayerPokemon(); const enemy = game.scene.getEnemyPokemon(); diff --git a/src/test/abilities/sand_veil.test.ts b/src/test/abilities/sand_veil.test.ts index 221d48d3ca1..615c778ed3f 100644 --- a/src/test/abilities/sand_veil.test.ts +++ b/src/test/abilities/sand_veil.test.ts @@ -1,7 +1,7 @@ import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, test, vi } from "vitest"; import GameManager from "../utils/gameManager"; -import * as Overrides from "#app/overrides"; +import Overrides from "#app/overrides"; import { Species } from "#enums/species"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; diff --git a/src/test/abilities/sap_sipper.test.ts b/src/test/abilities/sap_sipper.test.ts index 403ac1bf4ff..87a07eeff66 100644 --- a/src/test/abilities/sap_sipper.test.ts +++ b/src/test/abilities/sap_sipper.test.ts @@ -1,7 +1,7 @@ import {afterEach, beforeAll, beforeEach, describe, expect, it, vi} from "vitest"; import Phaser from "phaser"; import GameManager from "#app/test/utils/gameManager"; -import * as overrides from "#app/overrides"; +import overrides from "#app/overrides"; import { MoveEndPhase, TurnEndPhase, } from "#app/phases"; @@ -139,10 +139,9 @@ describe("Abilities - Sap Sipper", () => { expect(game.phaseInterceptor.log).not.toContain("ShowAbilityPhase"); }); - /* // TODO Add METRONOME outcome override // To run this testcase, manually modify the METRONOME move to always give SAP_SIPPER, then uncomment - it("activate once against multi-hit grass attacks (metronome)", async() => { + it.todo("activate once against multi-hit grass attacks (metronome)", async() => { const moveToUse = Moves.METRONOME; const enemyAbility = Abilities.SAP_SIPPER; @@ -162,5 +161,4 @@ describe("Abilities - Sap Sipper", () => { expect(startingOppHp - game.scene.getEnemyParty()[0].hp).toBe(0); expect(game.scene.getEnemyParty()[0].summonData.battleStats[BattleStat.ATK]).toBe(1); }); - */ }); diff --git a/src/test/abilities/schooling.test.ts b/src/test/abilities/schooling.test.ts index 4fd64b97246..41829e5753c 100644 --- a/src/test/abilities/schooling.test.ts +++ b/src/test/abilities/schooling.test.ts @@ -1,7 +1,7 @@ import { afterEach, beforeAll, beforeEach, describe, expect, test, vi } from "vitest"; import GameManager from "#test/utils/gameManager"; import { getMovePosition } from "#test/utils/gameManagerUtils"; -import * as Overrides from "#app/overrides"; +import Overrides from "#app/overrides"; import { Moves } from "#enums/moves"; import { Abilities } from "#enums/abilities"; import { Species } from "#enums/species"; diff --git a/src/test/abilities/screen_cleaner.test.ts b/src/test/abilities/screen_cleaner.test.ts index d790469e952..6eb9de07dff 100644 --- a/src/test/abilities/screen_cleaner.test.ts +++ b/src/test/abilities/screen_cleaner.test.ts @@ -1,7 +1,7 @@ import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; import Phaser from "phaser"; import GameManager from "#app/test/utils/gameManager"; -import * as overrides from "#app/overrides"; +import overrides from "#app/overrides"; import { Species } from "#enums/species"; import { PostSummonPhase, TurnEndPhase, } from "#app/phases"; import { Moves } from "#enums/moves"; diff --git a/src/test/abilities/serene_grace.test.ts b/src/test/abilities/serene_grace.test.ts index cf283ea92a8..2229794f16f 100644 --- a/src/test/abilities/serene_grace.test.ts +++ b/src/test/abilities/serene_grace.test.ts @@ -1,7 +1,7 @@ import {afterEach, beforeAll, beforeEach, describe, expect, it, vi} from "vitest"; import Phaser from "phaser"; import GameManager from "#app/test/utils/gameManager"; -import * as overrides from "#app/overrides"; +import overrides from "#app/overrides"; import {Abilities} from "#enums/abilities"; import {applyAbAttrs ,MoveEffectChanceMultiplierAbAttr} from "#app/data/ability"; import {Species} from "#enums/species"; diff --git a/src/test/abilities/sheer_force.test.ts b/src/test/abilities/sheer_force.test.ts index c01ec176f4d..b94ac33ea36 100644 --- a/src/test/abilities/sheer_force.test.ts +++ b/src/test/abilities/sheer_force.test.ts @@ -1,7 +1,7 @@ import {afterEach, beforeAll, beforeEach, describe, expect, it, vi} from "vitest"; import Phaser from "phaser"; import GameManager from "#app/test/utils/gameManager"; -import * as overrides from "#app/overrides"; +import overrides from "#app/overrides"; import {Abilities} from "#enums/abilities"; import {applyAbAttrs ,applyPreAttackAbAttrs,applyPostDefendAbAttrs, MoveEffectChanceMultiplierAbAttr, MovePowerBoostAbAttr, PostDefendTypeChangeAbAttr} from "#app/data/ability"; import {Species} from "#enums/species"; diff --git a/src/test/abilities/shield_dust.test.ts b/src/test/abilities/shield_dust.test.ts index f52a1d6c7d4..f6014c02fb0 100644 --- a/src/test/abilities/shield_dust.test.ts +++ b/src/test/abilities/shield_dust.test.ts @@ -1,7 +1,7 @@ import {afterEach, beforeAll, beforeEach, describe, expect, it, vi} from "vitest"; import Phaser from "phaser"; import GameManager from "#app/test/utils/gameManager"; -import * as overrides from "#app/overrides"; +import overrides from "#app/overrides"; import { Abilities } from "#enums/abilities"; import {applyAbAttrs ,applyPreDefendAbAttrs,IgnoreMoveEffectsAbAttr,MoveEffectChanceMultiplierAbAttr} from "#app/data/ability"; import {Species} from "#enums/species"; diff --git a/src/test/abilities/shields_down.test.ts b/src/test/abilities/shields_down.test.ts index f35fdd9ed79..b25a5cd7a40 100644 --- a/src/test/abilities/shields_down.test.ts +++ b/src/test/abilities/shields_down.test.ts @@ -1,7 +1,7 @@ import { afterEach, beforeAll, beforeEach, describe, expect, test, vi } from "vitest"; import GameManager from "#test/utils/gameManager"; import { getMovePosition } from "#test/utils/gameManagerUtils"; -import * as Overrides from "#app/overrides"; +import Overrides from "#app/overrides"; import { Moves } from "#enums/moves"; import { Abilities } from "#enums/abilities"; import { Species } from "#enums/species"; diff --git a/src/test/abilities/steely_spirit.test.ts b/src/test/abilities/steely_spirit.test.ts index e9c673a102a..403024c7277 100644 --- a/src/test/abilities/steely_spirit.test.ts +++ b/src/test/abilities/steely_spirit.test.ts @@ -1,21 +1,21 @@ import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; import Phaser from "phaser"; import GameManager from "#app/test/utils/gameManager"; -import * as overrides from "#app/overrides"; +import overrides from "#app/overrides"; import { Species } from "#enums/species"; import { Moves } from "#enums/moves"; import { getMovePosition } from "#app/test/utils/gameManagerUtils"; -import Pokemon, { PlayerPokemon } from "#app/field/pokemon.js"; -import Move, { allMoves } from "#app/data/move.js"; -import { NumberHolder } from "#app/utils.js"; -import { allAbilities, applyPreAttackAbAttrs, UserFieldMoveTypePowerBoostAbAttr } from "#app/data/ability.js"; +import { allMoves } from "#app/data/move.js"; +import { allAbilities } from "#app/data/ability.js"; import { Abilities } from "#app/enums/abilities.js"; +import { MoveEffectPhase, SelectTargetPhase } from "#app/phases.js"; describe("Abilities - Steely Spirit", () => { let phaserGame: Phaser.Game; let game: GameManager; const steelySpiritMultiplier = 1.5; const moveToCheck = Moves.IRON_HEAD; + const ironHeadPower = allMoves[moveToCheck].power; beforeAll(() => { phaserGame = new Phaser.Game({ @@ -30,29 +30,34 @@ describe("Abilities - Steely Spirit", () => { beforeEach(() => { game = new GameManager(phaserGame); vi.spyOn(overrides, "DOUBLE_BATTLE_OVERRIDE", "get").mockReturnValue(true); - vi.spyOn(overrides, "OPP_SPECIES_OVERRIDE", "get").mockReturnValue(Species.MAGIKARP); + vi.spyOn(overrides, "OPP_SPECIES_OVERRIDE", "get").mockReturnValue(Species.SHUCKLE); + vi.spyOn(overrides, "OPP_ABILITY_OVERRIDE", "get").mockReturnValue(Abilities.BALL_FETCH); vi.spyOn(overrides, "MOVESET_OVERRIDE", "get").mockReturnValue([Moves.IRON_HEAD, Moves.SPLASH]); vi.spyOn(overrides, "OPP_MOVESET_OVERRIDE", "get").mockReturnValue([Moves.SPLASH, Moves.SPLASH, Moves.SPLASH, Moves.SPLASH]); + vi.spyOn(allMoves[moveToCheck], "calculateBattlePower"); }); - it("increases Steel-type moves used by the user and its allies", async () => { - await game.startBattle([Species.MAGIKARP, Species.PERRSERKER]); - const perserrker = game.scene.getPlayerField()[1]; + it("increases Steel-type moves' power used by the user and its allies by 50%", async () => { + await game.startBattle([Species.PIKACHU, Species.SHUCKLE]); + const boostSource = game.scene.getPlayerField()[1]; + const enemyToCheck = game.scene.getEnemyPokemon(); - vi.spyOn(perserrker, "getAbility").mockReturnValue(allAbilities[Abilities.STEELY_SPIRIT]); + vi.spyOn(boostSource, "getAbility").mockReturnValue(allAbilities[Abilities.STEELY_SPIRIT]); - expect(perserrker.hasAbility(Abilities.STEELY_SPIRIT)).toBe(true); + expect(boostSource.hasAbility(Abilities.STEELY_SPIRIT)).toBe(true); game.doAttack(getMovePosition(game.scene, 0, moveToCheck)); + await game.phaseInterceptor.to(SelectTargetPhase, false); + game.doSelectTarget(enemyToCheck.getBattlerIndex()); game.doAttack(getMovePosition(game.scene, 1, Moves.SPLASH)); + await game.phaseInterceptor.to(MoveEffectPhase); - const mockedMovePower = getMockedMovePower(game.scene.getEnemyPokemon(), perserrker, allMoves[moveToCheck]); - - expect(mockedMovePower).toBe(allMoves[moveToCheck].power * steelySpiritMultiplier); + expect(allMoves[moveToCheck].calculateBattlePower).toHaveReturnedWith(ironHeadPower * steelySpiritMultiplier); }); it("stacks if multiple users with this ability are on the field.", async () => { - await game.startBattle([Species.PERRSERKER, Species.PERRSERKER]); + await game.startBattle([Species.PIKACHU, Species.PIKACHU]); + const enemyToCheck = game.scene.getEnemyPokemon(); game.scene.getPlayerField().forEach(p => { vi.spyOn(p, "getAbility").mockReturnValue(allAbilities[Abilities.STEELY_SPIRIT]); @@ -61,55 +66,35 @@ describe("Abilities - Steely Spirit", () => { expect(game.scene.getPlayerField().every(p => p.hasAbility(Abilities.STEELY_SPIRIT))).toBe(true); game.doAttack(getMovePosition(game.scene, 0, moveToCheck)); - game.doAttack(getMovePosition(game.scene, 1, Moves.SPLASH)); + await game.phaseInterceptor.to(SelectTargetPhase, false); + game.doSelectTarget(enemyToCheck.getBattlerIndex()); + game.doAttack(getMovePosition(game.scene, 1, moveToCheck)); + await game.phaseInterceptor.to(SelectTargetPhase, false); + game.doSelectTarget(enemyToCheck.getBattlerIndex()); + await game.phaseInterceptor.to(MoveEffectPhase); - const mockedMovePower = getMockedMovePower(game.scene.getEnemyPokemon(), game.scene.getPlayerPokemon(), allMoves[moveToCheck]); - - expect(mockedMovePower).toBe(allMoves[moveToCheck].power * Math.pow(steelySpiritMultiplier, 2)); + expect(allMoves[moveToCheck].calculateBattlePower).toHaveReturnedWith(ironHeadPower * Math.pow(steelySpiritMultiplier, 2)); }); it("does not take effect when suppressed", async () => { - await game.startBattle([Species.MAGIKARP, Species.PERRSERKER]); - const perserrker = game.scene.getPlayerField()[1]; + await game.startBattle([Species.PIKACHU, Species.SHUCKLE]); + const boostSource = game.scene.getPlayerField()[1]; + const enemyToCheck = game.scene.getEnemyPokemon(); - vi.spyOn(perserrker, "getAbility").mockReturnValue(allAbilities[Abilities.STEELY_SPIRIT]); - expect(perserrker.hasAbility(Abilities.STEELY_SPIRIT)).toBe(true); + vi.spyOn(boostSource, "getAbility").mockReturnValue(allAbilities[Abilities.STEELY_SPIRIT]); + expect(boostSource.hasAbility(Abilities.STEELY_SPIRIT)).toBe(true); - perserrker.summonData.abilitySuppressed = true; + boostSource.summonData.abilitySuppressed = true; - expect(perserrker.hasAbility(Abilities.STEELY_SPIRIT)).toBe(false); - expect(perserrker.summonData.abilitySuppressed).toBe(true); + expect(boostSource.hasAbility(Abilities.STEELY_SPIRIT)).toBe(false); + expect(boostSource.summonData.abilitySuppressed).toBe(true); game.doAttack(getMovePosition(game.scene, 0, moveToCheck)); + await game.phaseInterceptor.to(SelectTargetPhase, false); + game.doSelectTarget(enemyToCheck.getBattlerIndex()); game.doAttack(getMovePosition(game.scene, 1, Moves.SPLASH)); + await game.phaseInterceptor.to(MoveEffectPhase); - const mockedMovePower = getMockedMovePower(game.scene.getEnemyPokemon(), perserrker, allMoves[moveToCheck]); - - expect(mockedMovePower).toBe(allMoves[moveToCheck].power); + expect(allMoves[moveToCheck].calculateBattlePower).toHaveReturnedWith(ironHeadPower); }); }); - -/** - * Calculates the mocked power of a move. - * Note this does not consider other damage calculations - * except the power multiplier from Steely Spirit. - * - * @param defender - The defending Pokémon. - * @param attacker - The attacking Pokémon. - * @param move - The move being used by the attacker. - * @returns The adjusted power of the move. - */ -const getMockedMovePower = (defender: Pokemon, attacker: Pokemon, move: Move) => { - const powerHolder = new NumberHolder(move.power); - - /** - * Check if pokemon has the specified ability and is in effect. - * See Pokemon.hasAbility {@linkcode Pokemon.hasAbility} - */ - if (attacker.hasAbility(Abilities.STEELY_SPIRIT)) { - const alliedField: Pokemon[] = attacker instanceof PlayerPokemon ? attacker.scene.getPlayerField() : attacker.scene.getEnemyField(); - alliedField.forEach(p => applyPreAttackAbAttrs(UserFieldMoveTypePowerBoostAbAttr, p, this, move, powerHolder)); - } - - return powerHolder.value; -}; diff --git a/src/test/abilities/sturdy.test.ts b/src/test/abilities/sturdy.test.ts index b9d764971f0..f97cda3e08c 100644 --- a/src/test/abilities/sturdy.test.ts +++ b/src/test/abilities/sturdy.test.ts @@ -1,7 +1,7 @@ import {afterEach, beforeAll, beforeEach, describe, expect, test, vi} from "vitest"; import Phaser from "phaser"; import GameManager from "#app/test/utils/gameManager"; -import * as overrides from "#app/overrides"; +import overrides from "#app/overrides"; import { DamagePhase, MoveEndPhase, diff --git a/src/test/abilities/unseen_fist.test.ts b/src/test/abilities/unseen_fist.test.ts index c53be8c82a4..efea425a661 100644 --- a/src/test/abilities/unseen_fist.test.ts +++ b/src/test/abilities/unseen_fist.test.ts @@ -1,7 +1,7 @@ import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, test, vi } from "vitest"; import GameManager from "../utils/gameManager"; -import * as Overrides from "#app/overrides"; +import Overrides from "#app/overrides"; import { Species } from "#enums/species"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; diff --git a/src/test/abilities/volt_absorb.test.ts b/src/test/abilities/volt_absorb.test.ts index 86efd1a9d93..3e199495fb6 100644 --- a/src/test/abilities/volt_absorb.test.ts +++ b/src/test/abilities/volt_absorb.test.ts @@ -1,7 +1,7 @@ import {afterEach, beforeAll, beforeEach, describe, expect, it, vi} from "vitest"; import Phaser from "phaser"; import GameManager from "#app/test/utils/gameManager"; -import * as overrides from "#app/overrides"; +import overrides from "#app/overrides"; import { TurnEndPhase, } from "#app/phases"; diff --git a/src/test/abilities/wind_power.test.ts b/src/test/abilities/wind_power.test.ts index 89957362268..5f54fd8c754 100644 --- a/src/test/abilities/wind_power.test.ts +++ b/src/test/abilities/wind_power.test.ts @@ -1,7 +1,7 @@ import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; import Phaser from "phaser"; import GameManager from "#app/test/utils/gameManager"; -import * as overrides from "#app/overrides"; +import overrides from "#app/overrides"; import { Species } from "#enums/species"; import { TurnEndPhase, diff --git a/src/test/abilities/wind_rider.test.ts b/src/test/abilities/wind_rider.test.ts index 2b9361f5839..ffe421e29e7 100644 --- a/src/test/abilities/wind_rider.test.ts +++ b/src/test/abilities/wind_rider.test.ts @@ -1,7 +1,7 @@ import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; import Phaser from "phaser"; import GameManager from "#app/test/utils/gameManager"; -import * as overrides from "#app/overrides"; +import overrides from "#app/overrides"; import { Species } from "#enums/species"; import { TurnEndPhase, diff --git a/src/test/abilities/wonder_skin.test.ts b/src/test/abilities/wonder_skin.test.ts index 4dc4b1d4282..25e215db484 100644 --- a/src/test/abilities/wonder_skin.test.ts +++ b/src/test/abilities/wonder_skin.test.ts @@ -1,16 +1,14 @@ import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; import Phaser from "phaser"; import GameManager from "#app/test/utils/gameManager"; -import * as overrides from "#app/overrides"; +import overrides from "#app/overrides"; import { Species } from "#enums/species"; -import { TurnEndPhase, } from "#app/phases"; +import { MoveEffectPhase } from "#app/phases"; import { Moves } from "#enums/moves"; import { getMovePosition } from "#app/test/utils/gameManagerUtils"; import { Abilities } from "#enums/abilities"; -import Move, { allMoves } from "#app/data/move.js"; -import { MoveAbilityBypassAbAttr, WonderSkinAbAttr } from "#app/data/ability.js"; -import { NumberHolder } from "#app/utils.js"; -import Pokemon from "#app/field/pokemon.js"; +import { allMoves } from "#app/data/move.js"; +import { allAbilities } from "#app/data/ability.js"; describe("Abilities - Wonder Skin", () => { let phaserGame: Phaser.Game; @@ -29,113 +27,51 @@ describe("Abilities - Wonder Skin", () => { beforeEach(() => { game = new GameManager(phaserGame); vi.spyOn(overrides, "SINGLE_BATTLE_OVERRIDE", "get").mockReturnValue(true); - vi.spyOn(overrides, "OPP_ABILITY_OVERRIDE", "get").mockReturnValue(Abilities.WONDER_SKIN); vi.spyOn(overrides, "MOVESET_OVERRIDE", "get").mockReturnValue([Moves.TACKLE, Moves.CHARM]); + vi.spyOn(overrides, "ABILITY_OVERRIDE", "get").mockReturnValue(Abilities.BALL_FETCH); + vi.spyOn(overrides, "OPP_SPECIES_OVERRIDE", "get").mockReturnValue(Species.SHUCKLE); + vi.spyOn(overrides, "OPP_ABILITY_OVERRIDE", "get").mockReturnValue(Abilities.WONDER_SKIN); vi.spyOn(overrides, "OPP_MOVESET_OVERRIDE", "get").mockReturnValue([Moves.SPLASH, Moves.SPLASH, Moves.SPLASH, Moves.SPLASH]); }); it("lowers accuracy of status moves to 50%", async () => { - await game.startBattle([Species.MAGIKARP]); + const moveToCheck = allMoves[Moves.CHARM]; + vi.spyOn(moveToCheck, "calculateBattleAccuracy"); + + await game.startBattle([Species.PIKACHU]); game.doAttack(getMovePosition(game.scene, 0, Moves.CHARM)); + await game.phaseInterceptor.to(MoveEffectPhase); - const mockedAccuracy = getMockedMoveAccuracy(game.scene.getEnemyPokemon(), game.scene.getPlayerPokemon(), allMoves[Moves.CHARM]); - - await game.phaseInterceptor.to(TurnEndPhase); - - expect(mockedAccuracy).not.toBe(undefined); - expect(mockedAccuracy).not.toBe(100); - expect(mockedAccuracy).toBe(50); + expect(moveToCheck.calculateBattleAccuracy).toHaveReturnedWith(50); }); it("does not lower accuracy of non-status moves", async () => { - await game.startBattle([Species.MAGIKARP]); + const moveToCheck = allMoves[Moves.TACKLE]; + vi.spyOn(moveToCheck, "calculateBattleAccuracy"); + + await game.startBattle([Species.PIKACHU]); game.doAttack(getMovePosition(game.scene, 0, Moves.TACKLE)); + await game.phaseInterceptor.to(MoveEffectPhase); - const mockedAccuracy = getMockedMoveAccuracy(game.scene.getEnemyPokemon(), game.scene.getPlayerPokemon(), allMoves[Moves.TACKLE]); - - await game.phaseInterceptor.to(TurnEndPhase); - - expect(mockedAccuracy).not.toBe(undefined); - expect(mockedAccuracy).toBe(100); - expect(mockedAccuracy).not.toBe(50); + expect(moveToCheck.calculateBattleAccuracy).toHaveReturnedWith(100); }); - it("does not affect pokemon with Mold Breaker", async () => { - vi.spyOn(overrides, "ABILITY_OVERRIDE", "get").mockReturnValue(Abilities.MOLD_BREAKER); + const bypassAbilities = [Abilities.MOLD_BREAKER, Abilities.TERAVOLT, Abilities.TURBOBLAZE]; - await game.startBattle([Species.MAGIKARP]); + bypassAbilities.forEach(ability => { + it(`does not affect pokemon with ${allAbilities[ability].name}`, async () => { + const moveToCheck = allMoves[Moves.CHARM]; - game.doAttack(getMovePosition(game.scene, 0, Moves.CHARM)); + vi.spyOn(overrides, "ABILITY_OVERRIDE", "get").mockReturnValue(ability); + vi.spyOn(moveToCheck, "calculateBattleAccuracy"); - const mockedAccuracy = getMockedMoveAccuracy(game.scene.getEnemyPokemon(), game.scene.getPlayerPokemon(), allMoves[Moves.CHARM]); + await game.startBattle([Species.PIKACHU]); + game.doAttack(getMovePosition(game.scene, 0, Moves.CHARM)); + await game.phaseInterceptor.to(MoveEffectPhase); - await game.phaseInterceptor.to(TurnEndPhase); - - expect(mockedAccuracy).not.toBe(undefined); - expect(mockedAccuracy).toBe(100); - expect(mockedAccuracy).not.toBe(50); - }); - - it("does not affect pokemon with Teravolt", async () => { - vi.spyOn(overrides, "ABILITY_OVERRIDE", "get").mockReturnValue(Abilities.TERAVOLT); - - await game.startBattle([Species.MAGIKARP]); - - game.doAttack(getMovePosition(game.scene, 0, Moves.CHARM)); - - const mockedAccuracy = getMockedMoveAccuracy(game.scene.getEnemyPokemon(), game.scene.getPlayerPokemon(), allMoves[Moves.CHARM]); - - await game.phaseInterceptor.to(TurnEndPhase); - - expect(mockedAccuracy).not.toBe(undefined); - expect(mockedAccuracy).toBe(100); - expect(mockedAccuracy).not.toBe(50); - }); - - it("does not affect pokemon with Turboblaze", async () => { - vi.spyOn(overrides, "ABILITY_OVERRIDE", "get").mockReturnValue(Abilities.TURBOBLAZE); - - await game.startBattle([Species.MAGIKARP]); - - game.doAttack(getMovePosition(game.scene, 0, Moves.CHARM)); - - const mockedAccuracy = getMockedMoveAccuracy(game.scene.getEnemyPokemon(), game.scene.getPlayerPokemon(), allMoves[Moves.CHARM]); - - await game.phaseInterceptor.to(TurnEndPhase); - - expect(mockedAccuracy).not.toBe(undefined); - expect(mockedAccuracy).toBe(100); - expect(mockedAccuracy).not.toBe(50); + expect(moveToCheck.calculateBattleAccuracy).toHaveReturnedWith(100); + }); }); }); - -/** - * Calculates the mocked accuracy of a move. - * Note this does not consider other accuracy calculations - * except the power multiplier from Wonder Skin. - * Bypassed by MoveAbilityBypassAbAttr {@linkcode MoveAbilityBypassAbAttr} - * - * @param defender - The defending Pokémon. - * @param attacker - The attacking Pokémon. - * @param move - The move being used by the attacker. - * @returns The adjusted accuracy of the move. - */ -const getMockedMoveAccuracy = (defender: Pokemon, attacker: Pokemon, move: Move) => { - const accuracyHolder = new NumberHolder(move.accuracy); - - /** - * Simulate ignoring ability - * @see MoveAbilityBypassAbAttr - */ - if (attacker.hasAbilityWithAttr(MoveAbilityBypassAbAttr)) { - return accuracyHolder.value; - } - - const wonderSkinInstance = new WonderSkinAbAttr(); - - wonderSkinInstance.applyPreDefend(defender, false, attacker, move, { value: false }, [ accuracyHolder ]); - - return accuracyHolder.value; -}; diff --git a/src/test/abilities/zen_mode.test.ts b/src/test/abilities/zen_mode.test.ts index 4a3caaaa157..34d604b4d75 100644 --- a/src/test/abilities/zen_mode.test.ts +++ b/src/test/abilities/zen_mode.test.ts @@ -1,7 +1,7 @@ import { afterEach, beforeAll, beforeEach, describe, expect, test, vi } from "vitest"; import Phaser from "phaser"; import GameManager from "#app/test/utils/gameManager"; -import * as Overrides from "#app/overrides"; +import Overrides from "#app/overrides"; import { CommandPhase, DamagePhase, diff --git a/src/test/abilities/zero_to_hero.test.ts b/src/test/abilities/zero_to_hero.test.ts index e0264729125..c9eff87362e 100644 --- a/src/test/abilities/zero_to_hero.test.ts +++ b/src/test/abilities/zero_to_hero.test.ts @@ -1,7 +1,7 @@ import { afterEach, beforeAll, beforeEach, describe, expect, test, vi } from "vitest"; import GameManager from "#test/utils/gameManager"; import { getMovePosition } from "#test/utils/gameManagerUtils"; -import * as Overrides from "#app/overrides"; +import Overrides from "#app/overrides"; import { Moves } from "#enums/moves"; import { Abilities } from "#enums/abilities"; import { Species } from "#enums/species"; diff --git a/src/test/achievements/achievement.test.ts b/src/test/achievements/achievement.test.ts index f24529187c6..bfcc77337ac 100644 --- a/src/test/achievements/achievement.test.ts +++ b/src/test/achievements/achievement.test.ts @@ -5,7 +5,7 @@ import { IntegerHolder, NumberHolder } from "#app/utils.js"; import { TurnHeldItemTransferModifier } from "#app/modifier/modifier.js"; import Phaser from "phaser"; import GameManager from "#app/test/utils/gameManager"; -import * as overrides from "#app/overrides"; +import overrides from "#app/overrides"; describe("check some Achievement related stuff", () => { it ("should check Achievement creation", () => { diff --git a/src/test/arena/arena_gravity.test.ts b/src/test/arena/arena_gravity.test.ts new file mode 100644 index 00000000000..27ed2fcba6c --- /dev/null +++ b/src/test/arena/arena_gravity.test.ts @@ -0,0 +1,83 @@ +import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; +import Phaser from "phaser"; +import GameManager from "#app/test/utils/gameManager"; +import overrides from "#app/overrides"; +import { Species } from "#enums/species"; +import { + MoveEffectPhase, + TurnEndPhase, +} from "#app/phases"; +import { Moves } from "#enums/moves"; +import { getMovePosition } from "#app/test/utils/gameManagerUtils"; +import { allMoves } from "#app/data/move.js"; +import { ArenaTagType } from "#app/enums/arena-tag-type.js"; +import { Abilities } from "#app/enums/abilities.js"; + +describe("Arena - Gravity", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + + beforeAll(() => { + phaserGame = new Phaser.Game({ + type: Phaser.HEADLESS, + }); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); + + beforeEach(() => { + game = new GameManager(phaserGame); + vi.spyOn(overrides, "SINGLE_BATTLE_OVERRIDE", "get").mockReturnValue(true); + vi.spyOn(overrides, "MOVESET_OVERRIDE", "get").mockReturnValue([Moves.TACKLE, Moves.GRAVITY, Moves.FISSURE]); + vi.spyOn(overrides, "ABILITY_OVERRIDE", "get").mockReturnValue(Abilities.UNNERVE); + vi.spyOn(overrides, "OPP_ABILITY_OVERRIDE", "get").mockReturnValue(Abilities.BALL_FETCH); + vi.spyOn(overrides, "OPP_SPECIES_OVERRIDE", "get").mockReturnValue(Species.SHUCKLE); + vi.spyOn(overrides, "OPP_MOVESET_OVERRIDE", "get").mockReturnValue(new Array(4).fill(Moves.SPLASH)); + }); + + it("non-OHKO move accuracy is multiplied by 1.67", async () => { + const moveToCheck = allMoves[Moves.TACKLE]; + + vi.spyOn(moveToCheck, "calculateBattleAccuracy"); + + // Setup Gravity on first turn + await game.startBattle([Species.PIKACHU]); + game.doAttack(getMovePosition(game.scene, 0, Moves.GRAVITY)); + await game.phaseInterceptor.to(TurnEndPhase); + + expect(game.scene.arena.getTag(ArenaTagType.GRAVITY)).toBeDefined(); + + // Use non-OHKO move on second turn + await game.toNextTurn(); + game.doAttack(getMovePosition(game.scene, 0, Moves.TACKLE)); + await game.phaseInterceptor.to(MoveEffectPhase); + + expect(moveToCheck.calculateBattleAccuracy).toHaveReturnedWith(100 * 1.67); + }); + + it("OHKO move accuracy is not affected", async () => { + vi.spyOn(overrides, "STARTING_LEVEL_OVERRIDE", "get").mockReturnValue(5); + vi.spyOn(overrides, "OPP_LEVEL_OVERRIDE", "get").mockReturnValue(5); + + /** See Fissure {@link https://bulbapedia.bulbagarden.net/wiki/Fissure_(move)} */ + const moveToCheck = allMoves[Moves.FISSURE]; + + vi.spyOn(moveToCheck, "calculateBattleAccuracy"); + + // Setup Gravity on first turn + await game.startBattle([Species.PIKACHU]); + game.doAttack(getMovePosition(game.scene, 0, Moves.GRAVITY)); + await game.phaseInterceptor.to(TurnEndPhase); + + expect(game.scene.arena.getTag(ArenaTagType.GRAVITY)).toBeDefined(); + + // Use OHKO move on second turn + await game.toNextTurn(); + game.doAttack(getMovePosition(game.scene, 0, Moves.FISSURE)); + await game.phaseInterceptor.to(MoveEffectPhase); + + expect(moveToCheck.calculateBattleAccuracy).toHaveReturnedWith(30); + }); +}); diff --git a/src/test/arena/weather_fog.test.ts b/src/test/arena/weather_fog.test.ts new file mode 100644 index 00000000000..ef11d5a8c72 --- /dev/null +++ b/src/test/arena/weather_fog.test.ts @@ -0,0 +1,51 @@ +import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; +import Phaser from "phaser"; +import GameManager from "#app/test/utils/gameManager"; +import overrides from "#app/overrides"; +import { Species } from "#enums/species"; +import { + MoveEffectPhase, +} from "#app/phases"; +import { Moves } from "#enums/moves"; +import { getMovePosition } from "#app/test/utils/gameManagerUtils"; +import { allMoves } from "#app/data/move.js"; +import { WeatherType } from "#app/data/weather.js"; +import { Abilities } from "#app/enums/abilities.js"; + +describe("Weather - Fog", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + + beforeAll(() => { + phaserGame = new Phaser.Game({ + type: Phaser.HEADLESS, + }); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); + + beforeEach(() => { + game = new GameManager(phaserGame); + vi.spyOn(overrides, "WEATHER_OVERRIDE", "get").mockReturnValue(WeatherType.FOG); + vi.spyOn(overrides, "SINGLE_BATTLE_OVERRIDE", "get").mockReturnValue(true); + vi.spyOn(overrides, "MOVESET_OVERRIDE", "get").mockReturnValue([Moves.TACKLE]); + vi.spyOn(overrides, "ABILITY_OVERRIDE", "get").mockReturnValue(Abilities.BALL_FETCH); + vi.spyOn(overrides, "OPP_ABILITY_OVERRIDE", "get").mockReturnValue(Abilities.BALL_FETCH); + vi.spyOn(overrides, "OPP_SPECIES_OVERRIDE", "get").mockReturnValue(Species.MAGIKARP); + vi.spyOn(overrides, "OPP_MOVESET_OVERRIDE", "get").mockReturnValue(new Array(4).fill(Moves.SPLASH)); + }); + + it("move accuracy is multiplied by 90%", async () => { + const moveToCheck = allMoves[Moves.TACKLE]; + + vi.spyOn(moveToCheck, "calculateBattleAccuracy"); + + await game.startBattle([Species.MAGIKARP]); + game.doAttack(getMovePosition(game.scene, 0, Moves.TACKLE)); + await game.phaseInterceptor.to(MoveEffectPhase); + + expect(moveToCheck.calculateBattleAccuracy).toHaveReturnedWith(100 * 0.9); + }); +}); diff --git a/src/test/arena/weather_strong_winds.test.ts b/src/test/arena/weather_strong_winds.test.ts index d022d69a772..0cac700fb3b 100644 --- a/src/test/arena/weather_strong_winds.test.ts +++ b/src/test/arena/weather_strong_winds.test.ts @@ -1,7 +1,7 @@ import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; import Phaser from "phaser"; import GameManager from "#app/test/utils/gameManager"; -import * as overrides from "#app/overrides"; +import overrides from "#app/overrides"; import { Species } from "#enums/species"; import { TurnStartPhase, diff --git a/src/test/battle/battle-order.test.ts b/src/test/battle/battle-order.test.ts index 5d8f9d2c98f..bf06c661141 100644 --- a/src/test/battle/battle-order.test.ts +++ b/src/test/battle/battle-order.test.ts @@ -1,7 +1,7 @@ import {afterEach, beforeAll, beforeEach, describe, expect, it, vi} from "vitest"; import Phaser from "phaser"; import GameManager from "#app/test/utils/gameManager"; -import * as overrides from "#app/overrides"; +import overrides from "#app/overrides"; import { CommandPhase, EnemyCommandPhase, SelectTargetPhase, TurnStartPhase diff --git a/src/test/battle/battle.test.ts b/src/test/battle/battle.test.ts index 87949be70a8..9b0e71c080d 100644 --- a/src/test/battle/battle.test.ts +++ b/src/test/battle/battle.test.ts @@ -2,7 +2,7 @@ import {afterEach, beforeAll, beforeEach, describe, expect, it, vi} from "vitest import {generateStarter, getMovePosition,} from "#app/test/utils/gameManagerUtils"; import {Mode} from "#app/ui/ui"; import {GameModes} from "#app/game-mode"; -import * as overrides from "../../overrides"; +import overrides from "../../overrides"; import {Command} from "#app/ui/command-ui-handler"; import { CommandPhase, DamagePhase, @@ -151,8 +151,8 @@ describe("Test Battle Phase", () => { it("test remove random battle seed int", async() => { for (let i=0; i<10; i++) { - const rand = game.scene.randBattleSeedInt(15); - expect(rand).toBe(14); + const rand = game.scene.randBattleSeedInt(16); + expect(rand).toBe(15); } }); diff --git a/src/test/battle/error-handling.test.ts b/src/test/battle/error-handling.test.ts index d46d8bcf7e8..767a26cb013 100644 --- a/src/test/battle/error-handling.test.ts +++ b/src/test/battle/error-handling.test.ts @@ -1,7 +1,7 @@ import {afterEach, beforeAll, beforeEach, describe, expect, it, vi} from "vitest"; import GameManager from "#app/test/utils/gameManager"; import Phaser from "phaser"; -import * as overrides from "#app/overrides"; +import overrides from "#app/overrides"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; diff --git a/src/test/battle/special_battle.test.ts b/src/test/battle/special_battle.test.ts index 01ae7d05359..2147638ad47 100644 --- a/src/test/battle/special_battle.test.ts +++ b/src/test/battle/special_battle.test.ts @@ -1,6 +1,6 @@ import {afterEach, beforeAll, beforeEach, describe, expect, it, vi} from "vitest"; import {Mode} from "#app/ui/ui"; -import * as overrides from "../../overrides"; +import overrides from "../../overrides"; import { CommandPhase, } from "#app/phases"; diff --git a/src/test/battlerTags/octolock.test.ts b/src/test/battlerTags/octolock.test.ts new file mode 100644 index 00000000000..4c1c58d4345 --- /dev/null +++ b/src/test/battlerTags/octolock.test.ts @@ -0,0 +1,62 @@ +import { describe, expect, it, vi } from "vitest"; +import Pokemon from "#app/field/pokemon.js"; +import BattleScene from "#app/battle-scene.js"; +import { BattlerTag, BattlerTagLapseType, OctolockTag, TrappedTag } from "#app/data/battler-tags.js"; +import { StatChangePhase } from "#app/phases.js"; +import { BattleStat } from "#app/data/battle-stat.js"; +import { BattlerTagType } from "#app/enums/battler-tag-type.js"; + +jest.mock("#app/battle-scene.js"); + +describe("BattlerTag - OctolockTag", () => { + describe("lapse behavior", () => { + it("unshifts a StatChangePhase with expected stat changes", { timeout: 10000 }, async () => { + const mockPokemon = { + scene: new BattleScene(), + getBattlerIndex: () => 0, + } as Pokemon; + + const subject = new OctolockTag(1); + + vi.spyOn(mockPokemon.scene, "unshiftPhase").mockImplementation(phase => { + expect(phase).toBeInstanceOf(StatChangePhase); + expect((phase as StatChangePhase)["levels"]).toEqual(-1); + expect((phase as StatChangePhase)["stats"]).toEqual([BattleStat.DEF, BattleStat.SPDEF]); + }); + + subject.lapse(mockPokemon, BattlerTagLapseType.TURN_END); + + expect(mockPokemon.scene.unshiftPhase).toBeCalledTimes(1); + }); + }); + + it ("traps its target (extends TrappedTag)", { timeout: 2000 }, async () => { + expect(new OctolockTag(1)).toBeInstanceOf(TrappedTag); + }); + + it("can be added to pokemon who are not octolocked", { timeout: 2000 }, async => { + const mockPokemon = { + getTag: vi.fn().mockReturnValue(undefined) as Pokemon["getTag"], + } as Pokemon; + + const subject = new OctolockTag(1); + + expect(subject.canAdd(mockPokemon)).toBeTruthy(); + + expect(mockPokemon.getTag).toHaveBeenCalledTimes(1); + expect(mockPokemon.getTag).toHaveBeenCalledWith(BattlerTagType.OCTOLOCK); + }); + + it("cannot be added to pokemon who are octolocked", { timeout: 2000 }, async => { + const mockPokemon = { + getTag: vi.fn().mockReturnValue(new BattlerTag(null, null, null, null)) as Pokemon["getTag"], + } as Pokemon; + + const subject = new OctolockTag(1); + + expect(subject.canAdd(mockPokemon)).toBeFalsy(); + + expect(mockPokemon.getTag).toHaveBeenCalledTimes(1); + expect(mockPokemon.getTag).toHaveBeenCalledWith(BattlerTagType.OCTOLOCK); + }); +}); diff --git a/src/test/items/eviolite.test.ts b/src/test/items/eviolite.test.ts index 5b4561d4877..983a3ebd1f9 100644 --- a/src/test/items/eviolite.test.ts +++ b/src/test/items/eviolite.test.ts @@ -1,7 +1,7 @@ import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; import Phase from "phaser"; import GameManager from "#app/test/utils/gameManager"; -import * as overrides from "#app/overrides"; +import overrides from "#app/overrides"; import { Stat } from "#app/data/pokemon-stat"; import { EvolutionStatBoosterModifier } from "#app/modifier/modifier"; import { modifierTypes } from "#app/modifier/modifier-type"; diff --git a/src/test/items/exp_booster.test.ts b/src/test/items/exp_booster.test.ts new file mode 100644 index 00000000000..c2d357056d0 --- /dev/null +++ b/src/test/items/exp_booster.test.ts @@ -0,0 +1,40 @@ +import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; +import Phase from "phaser"; +import GameManager from "#app/test/utils/gameManager"; +import overrides from "#app/overrides"; +import { Abilities } from "#app/enums/abilities.js"; +import { PokemonExpBoosterModifier } from "#app/modifier/modifier.js"; +import * as Utils from "#app/utils"; + +describe("EXP Modifier Items", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + + beforeAll(() => { + phaserGame = new Phase.Game({ + type: Phaser.HEADLESS, + }); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); + + beforeEach(() => { + game = new GameManager(phaserGame); + + vi.spyOn(overrides, "OPP_ABILITY_OVERRIDE", "get").mockReturnValue(Abilities.BALL_FETCH); + vi.spyOn(overrides, "ABILITY_OVERRIDE", "get").mockReturnValue(Abilities.BALL_FETCH); + vi.spyOn(overrides, "SINGLE_BATTLE_OVERRIDE", "get").mockReturnValue(true); + }); + + it("EXP booster items stack additively", async() => { + vi.spyOn(overrides, "STARTING_HELD_ITEMS_OVERRIDE", "get").mockReturnValue([{name: "LUCKY_EGG"}, {name: "GOLDEN_EGG"}]); + await game.startBattle(); + + const partyMember = game.scene.getPlayerPokemon(); + const modifierBonusExp = new Utils.NumberHolder(1); + partyMember.scene.applyModifiers(PokemonExpBoosterModifier, true, partyMember, modifierBonusExp); + expect(modifierBonusExp.value).toBe(2.4); + }, 20000); +}); diff --git a/src/test/items/grip_claw.test.ts b/src/test/items/grip_claw.test.ts index ae621770da6..0247ccb2076 100644 --- a/src/test/items/grip_claw.test.ts +++ b/src/test/items/grip_claw.test.ts @@ -1,7 +1,7 @@ import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; import Phase from "phaser"; import GameManager from "#app/test/utils/gameManager"; -import * as overrides from "#app/overrides"; +import overrides from "#app/overrides"; import { Moves } from "#app/enums/moves.js"; import { Species } from "#app/enums/species.js"; import { BerryType } from "#app/enums/berry-type.js"; diff --git a/src/test/items/leek.test.ts b/src/test/items/leek.test.ts new file mode 100644 index 00000000000..d81b6b8541f --- /dev/null +++ b/src/test/items/leek.test.ts @@ -0,0 +1,205 @@ +import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; +import Phase from "phaser"; +import GameManager from "#app/test/utils/gameManager"; +import overrides from "#app/overrides"; +import { Species } from "#enums/species"; +import { Moves } from "#enums/moves"; +import { CritBoosterModifier } from "#app/modifier/modifier"; +import { modifierTypes } from "#app/modifier/modifier-type"; +import * as Utils from "#app/utils"; +import { MoveEffectPhase, TurnStartPhase } from "#app/phases"; +import { BattlerIndex } from "#app/battle"; + +describe("Items - Leek", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + + beforeAll(() => { + phaserGame = new Phase.Game({ + type: Phaser.HEADLESS, + }); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); + + beforeEach(() => { + game = new GameManager(phaserGame); + + vi.spyOn(overrides, "OPP_SPECIES_OVERRIDE", "get").mockReturnValue(Species.MAGIKARP); + vi.spyOn(overrides, "OPP_MOVESET_OVERRIDE", "get").mockReturnValue([ Moves.SPLASH, Moves.SPLASH, Moves.SPLASH, Moves.SPLASH ]); + vi.spyOn(overrides, "NEVER_CRIT_OVERRIDE", "get").mockReturnValue(true); + + vi.spyOn(overrides, "SINGLE_BATTLE_OVERRIDE", "get").mockReturnValue(true); + }); + + it("LEEK activates in battle correctly", async() => { + vi.spyOn(overrides, "STARTING_HELD_ITEMS_OVERRIDE", "get").mockReturnValue([{ name: "LEEK" }]); + vi.spyOn(overrides, "MOVESET_OVERRIDE", "get").mockReturnValue([ Moves.POUND ]); + const consoleSpy = vi.spyOn(console, "log"); + await game.startBattle([ + Species.FARFETCHD + ]); + + game.doAttack(0); + + await game.phaseInterceptor.to(TurnStartPhase, false); + + vi.spyOn(game.scene.getCurrentPhase() as TurnStartPhase, "getOrder").mockReturnValue([ BattlerIndex.PLAYER, BattlerIndex.ENEMY ]); + + await game.phaseInterceptor.to(MoveEffectPhase); + + expect(consoleSpy).toHaveBeenCalledWith("Applied", "Leek", ""); + }, 20000); + + it("LEEK held by FARFETCHD", async() => { + await game.startBattle([ + Species.FARFETCHD + ]); + + const partyMember = game.scene.getPlayerPokemon(); + + // Making sure modifier is not applied without holding item + const critLevel = new Utils.IntegerHolder(0); + partyMember.scene.applyModifiers(CritBoosterModifier, true, partyMember, critLevel); + + expect(critLevel.value).toBe(0); + + // Giving Leek to party member and testing if it applies + partyMember.scene.addModifier(modifierTypes.LEEK().newModifier(partyMember), true); + partyMember.scene.applyModifiers(CritBoosterModifier, true, partyMember, critLevel); + + expect(critLevel.value).toBe(2); + }, 20000); + + it("LEEK held by GALAR_FARFETCHD", async() => { + await game.startBattle([ + Species.GALAR_FARFETCHD + ]); + + const partyMember = game.scene.getPlayerPokemon(); + + // Making sure modifier is not applied without holding item + const critLevel = new Utils.IntegerHolder(0); + partyMember.scene.applyModifiers(CritBoosterModifier, true, partyMember, critLevel); + + expect(critLevel.value).toBe(0); + + // Giving Leek to party member and testing if it applies + partyMember.scene.addModifier(modifierTypes.LEEK().newModifier(partyMember), true); + partyMember.scene.applyModifiers(CritBoosterModifier, true, partyMember, critLevel); + + expect(critLevel.value).toBe(2); + }, 20000); + + it("LEEK held by SIRFETCHD", async() => { + await game.startBattle([ + Species.SIRFETCHD + ]); + + const partyMember = game.scene.getPlayerPokemon(); + + // Making sure modifier is not applied without holding item + const critLevel = new Utils.IntegerHolder(0); + partyMember.scene.applyModifiers(CritBoosterModifier, true, partyMember, critLevel); + + expect(critLevel.value).toBe(0); + + // Giving Leek to party member and testing if it applies + partyMember.scene.addModifier(modifierTypes.LEEK().newModifier(partyMember), true); + partyMember.scene.applyModifiers(CritBoosterModifier, true, partyMember, critLevel); + + expect(critLevel.value).toBe(2); + }, 20000); + + it("LEEK held by fused FARFETCHD line (base)", async() => { + // Randomly choose from the Farfetch'd line + const species = [ Species.FARFETCHD, Species.GALAR_FARFETCHD, Species.SIRFETCHD ]; + + await game.startBattle([ + species[Utils.randInt(species.length)], + Species.PIKACHU, + ]); + + const party = game.scene.getParty(); + const partyMember = party[0]; + const ally = party[1]; + + // Fuse party members (taken from PlayerPokemon.fuse(...) function) + partyMember.fusionSpecies = ally.species; + partyMember.fusionFormIndex = ally.formIndex; + partyMember.fusionAbilityIndex = ally.abilityIndex; + partyMember.fusionShiny = ally.shiny; + partyMember.fusionVariant = ally.variant; + partyMember.fusionGender = ally.gender; + partyMember.fusionLuck = ally.luck; + + // Making sure modifier is not applied without holding item + const critLevel = new Utils.IntegerHolder(0); + partyMember.scene.applyModifiers(CritBoosterModifier, true, partyMember, critLevel); + + expect(critLevel.value).toBe(0); + + // Giving Leek to party member and testing if it applies + partyMember.scene.addModifier(modifierTypes.LEEK().newModifier(partyMember), true); + partyMember.scene.applyModifiers(CritBoosterModifier, true, partyMember, critLevel); + + expect(critLevel.value).toBe(2); + }, 20000); + + it("LEEK held by fused FARFETCHD line (part)", async() => { + // Randomly choose from the Farfetch'd line + const species = [ Species.FARFETCHD, Species.GALAR_FARFETCHD, Species.SIRFETCHD ]; + + await game.startBattle([ + Species.PIKACHU, + species[Utils.randInt(species.length)] + ]); + + const party = game.scene.getParty(); + const partyMember = party[0]; + const ally = party[1]; + + // Fuse party members (taken from PlayerPokemon.fuse(...) function) + partyMember.fusionSpecies = ally.species; + partyMember.fusionFormIndex = ally.formIndex; + partyMember.fusionAbilityIndex = ally.abilityIndex; + partyMember.fusionShiny = ally.shiny; + partyMember.fusionVariant = ally.variant; + partyMember.fusionGender = ally.gender; + partyMember.fusionLuck = ally.luck; + + // Making sure modifier is not applied without holding item + const critLevel = new Utils.IntegerHolder(0); + partyMember.scene.applyModifiers(CritBoosterModifier, true, partyMember, critLevel); + + expect(critLevel.value).toBe(0); + + // Giving Leek to party member and testing if it applies + partyMember.scene.addModifier(modifierTypes.LEEK().newModifier(partyMember), true); + partyMember.scene.applyModifiers(CritBoosterModifier, true, partyMember, critLevel); + + expect(critLevel.value).toBe(2); + }, 20000); + + it("LEEK not held by FARFETCHD line", async() => { + await game.startBattle([ + Species.PIKACHU + ]); + + const partyMember = game.scene.getPlayerPokemon(); + + // Making sure modifier is not applied without holding item + const critLevel = new Utils.IntegerHolder(0); + partyMember.scene.applyModifiers(CritBoosterModifier, true, partyMember, critLevel); + + expect(critLevel.value).toBe(0); + + // Giving Leek to party member and testing if it applies + partyMember.scene.addModifier(modifierTypes.LEEK().newModifier(partyMember), true); + partyMember.scene.applyModifiers(CritBoosterModifier, true, partyMember, critLevel); + + expect(critLevel.value).toBe(0); + }, 20000); +}); diff --git a/src/test/items/light_ball.test.ts b/src/test/items/light_ball.test.ts index 52fab7b044a..ef37860e007 100644 --- a/src/test/items/light_ball.test.ts +++ b/src/test/items/light_ball.test.ts @@ -1,7 +1,7 @@ import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; import Phase from "phaser"; import GameManager from "#app/test/utils/gameManager"; -import * as overrides from "#app/overrides"; +import overrides from "#app/overrides"; import { Species } from "#enums/species"; import { Stat } from "#app/data/pokemon-stat"; import { SpeciesStatBoosterModifier } from "#app/modifier/modifier"; diff --git a/src/test/items/metal_powder.test.ts b/src/test/items/metal_powder.test.ts index 5aa2c517ac9..ea13660efaf 100644 --- a/src/test/items/metal_powder.test.ts +++ b/src/test/items/metal_powder.test.ts @@ -1,7 +1,7 @@ import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; import Phase from "phaser"; import GameManager from "#app/test/utils/gameManager"; -import * as overrides from "#app/overrides"; +import overrides from "#app/overrides"; import { Species } from "#enums/species"; import { Stat } from "#app/data/pokemon-stat"; import { SpeciesStatBoosterModifier } from "#app/modifier/modifier"; diff --git a/src/test/items/quick_powder.test.ts b/src/test/items/quick_powder.test.ts index 753f62e36eb..5d858b6dec5 100644 --- a/src/test/items/quick_powder.test.ts +++ b/src/test/items/quick_powder.test.ts @@ -1,7 +1,7 @@ import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; import Phase from "phaser"; import GameManager from "#app/test/utils/gameManager"; -import * as overrides from "#app/overrides"; +import overrides from "#app/overrides"; import { Species } from "#enums/species"; import { Stat } from "#app/data/pokemon-stat"; import { SpeciesStatBoosterModifier } from "#app/modifier/modifier"; diff --git a/src/test/items/scope_lens.test.ts b/src/test/items/scope_lens.test.ts new file mode 100644 index 00000000000..8a90809d64e --- /dev/null +++ b/src/test/items/scope_lens.test.ts @@ -0,0 +1,75 @@ +import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; +import Phase from "phaser"; +import GameManager from "#app/test/utils/gameManager"; +import overrides from "#app/overrides"; +import { Species } from "#enums/species"; +import { Moves } from "#enums/moves"; +import { CritBoosterModifier } from "#app/modifier/modifier"; +import { modifierTypes } from "#app/modifier/modifier-type"; +import * as Utils from "#app/utils"; +import { MoveEffectPhase, TurnStartPhase } from "#app/phases"; +import { BattlerIndex } from "#app/battle"; + +describe("Items - Scope Lens", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + + beforeAll(() => { + phaserGame = new Phase.Game({ + type: Phaser.HEADLESS, + }); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); + + beforeEach(() => { + game = new GameManager(phaserGame); + + vi.spyOn(overrides, "OPP_SPECIES_OVERRIDE", "get").mockReturnValue(Species.MAGIKARP); + vi.spyOn(overrides, "OPP_MOVESET_OVERRIDE", "get").mockReturnValue([ Moves.SPLASH, Moves.SPLASH, Moves.SPLASH, Moves.SPLASH ]); + vi.spyOn(overrides, "NEVER_CRIT_OVERRIDE", "get").mockReturnValue(true); + + vi.spyOn(overrides, "SINGLE_BATTLE_OVERRIDE", "get").mockReturnValue(true); + }, 20000); + + it("SCOPE_LENS activates in battle correctly", async() => { + vi.spyOn(overrides, "STARTING_HELD_ITEMS_OVERRIDE", "get").mockReturnValue([{ name: "SCOPE_LENS" }]); + vi.spyOn(overrides, "MOVESET_OVERRIDE", "get").mockReturnValue([ Moves.POUND ]); + const consoleSpy = vi.spyOn(console, "log"); + await game.startBattle([ + Species.GASTLY + ]); + + game.doAttack(0); + + await game.phaseInterceptor.to(TurnStartPhase, false); + + vi.spyOn(game.scene.getCurrentPhase() as TurnStartPhase, "getOrder").mockReturnValue([ BattlerIndex.PLAYER, BattlerIndex.ENEMY ]); + + await game.phaseInterceptor.to(MoveEffectPhase); + + expect(consoleSpy).toHaveBeenCalledWith("Applied", "Scope Lens", ""); + }, 20000); + + it("SCOPE_LENS held by random pokemon", async() => { + await game.startBattle([ + Species.GASTLY + ]); + + const partyMember = game.scene.getPlayerPokemon(); + + // Making sure modifier is not applied without holding item + const critLevel = new Utils.IntegerHolder(0); + partyMember.scene.applyModifiers(CritBoosterModifier, true, partyMember, critLevel); + + expect(critLevel.value).toBe(0); + + // Giving Scope Lens to party member and testing if it applies + partyMember.scene.addModifier(modifierTypes.SCOPE_LENS().newModifier(partyMember), true); + partyMember.scene.applyModifiers(CritBoosterModifier, true, partyMember, critLevel); + + expect(critLevel.value).toBe(1); + }, 20000); +}); diff --git a/src/test/items/thick_club.test.ts b/src/test/items/thick_club.test.ts index 3356196e8c5..eaa1ed4bf9a 100644 --- a/src/test/items/thick_club.test.ts +++ b/src/test/items/thick_club.test.ts @@ -1,7 +1,7 @@ import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; import Phase from "phaser"; import GameManager from "#app/test/utils/gameManager"; -import * as overrides from "#app/overrides"; +import overrides from "#app/overrides"; import { Species } from "#enums/species"; import { Stat } from "#app/data/pokemon-stat"; import { SpeciesStatBoosterModifier } from "#app/modifier/modifier"; diff --git a/src/test/items/toxic_orb.test.ts b/src/test/items/toxic_orb.test.ts index 64dc3191d88..0861477e88f 100644 --- a/src/test/items/toxic_orb.test.ts +++ b/src/test/items/toxic_orb.test.ts @@ -1,7 +1,7 @@ import {afterEach, beforeAll, beforeEach, describe, expect, it, vi} from "vitest"; import Phaser from "phaser"; import GameManager from "#app/test/utils/gameManager"; -import * as overrides from "#app/overrides"; +import overrides from "#app/overrides"; import { CommandPhase, EnemyCommandPhase, diff --git a/src/test/localization/battle-stat.test.ts b/src/test/localization/battle-stat.test.ts index d894d705947..ea2714b3852 100644 --- a/src/test/localization/battle-stat.test.ts +++ b/src/test/localization/battle-stat.test.ts @@ -1,37 +1,38 @@ import {beforeAll, describe, expect, it} from "vitest"; -import { getBattleStatName, getBattleStatLevelChangeDescription } from "#app/data/battle-stat.js"; -import { BattleStat } from "#app/data/battle-stat.js"; -import { pokemonInfo as enPokemonInfo } from "#app/locales/en/pokemon-info.js"; -import { battle as enBattleStat } from "#app/locales/en/battle.js"; -import { pokemonInfo as dePokemonInfo } from "#app/locales/de/pokemon-info.js"; -import { battle as deBattleStat } from "#app/locales/de/battle.js"; -import { pokemonInfo as esPokemonInfo } from "#app/locales/es/pokemon-info.js"; -import { battle as esBattleStat } from "#app/locales/es/battle.js"; -import { pokemonInfo as frPokemonInfo } from "#app/locales/fr/pokemon-info.js"; -import { battle as frBattleStat } from "#app/locales/fr/battle.js"; -import { pokemonInfo as itPokemonInfo } from "#app/locales/it/pokemon-info.js"; -import { battle as itBattleStat } from "#app/locales/it/battle.js"; -import { pokemonInfo as koPokemonInfo } from "#app/locales/ko/pokemon-info.js"; -import { battle as koBattleStat } from "#app/locales/ko/battle.js"; -import { pokemonInfo as ptBrPokemonInfo } from "#app/locales/pt_BR/pokemon-info.js"; -import { battle as ptBrBattleStat } from "#app/locales/pt_BR/battle.js"; -import { pokemonInfo as zhCnPokemonInfo } from "#app/locales/zh_CN/pokemon-info.js"; -import { battle as zhCnBattleStat } from "#app/locales/zh_CN/battle.js"; -import { pokemonInfo as zhTwPokemonInfo } from "#app/locales/zh_TW/pokemon-info.js"; -import { battle as zhTwBattleStat } from "#app/locales/zh_TW/battle.js"; +import {getBattleStatName, getBattleStatLevelChangeDescription} from "#app/data/battle-stat.js"; +import {BattleStat} from "#app/data/battle-stat.js"; +import {pokemonInfo as enPokemonInfo} from "#app/locales/en/pokemon-info.js"; +import {battle as enBattleStat} from "#app/locales/en/battle.js"; +import {pokemonInfo as dePokemonInfo} from "#app/locales/de/pokemon-info.js"; +import {battle as deBattleStat} from "#app/locales/de/battle.js"; +import {pokemonInfo as esPokemonInfo} from "#app/locales/es/pokemon-info.js"; +import {battle as esBattleStat} from "#app/locales/es/battle.js"; +import {pokemonInfo as frPokemonInfo} from "#app/locales/fr/pokemon-info.js"; +import {battle as frBattleStat} from "#app/locales/fr/battle.js"; +import {pokemonInfo as itPokemonInfo} from "#app/locales/it/pokemon-info.js"; +import {battle as itBattleStat} from "#app/locales/it/battle.js"; +import {pokemonInfo as koPokemonInfo} from "#app/locales/ko/pokemon-info.js"; +import {battle as koBattleStat} from "#app/locales/ko/battle.js"; +import {pokemonInfo as ptBrPokemonInfo} from "#app/locales/pt_BR/pokemon-info.js"; +import {battle as ptBrBattleStat} from "#app/locales/pt_BR/battle.js"; +import {pokemonInfo as zhCnPokemonInfo} from "#app/locales/zh_CN/pokemon-info.js"; +import {battle as zhCnBattleStat} from "#app/locales/zh_CN/battle.js"; +import {pokemonInfo as zhTwPokemonInfo} from "#app/locales/zh_TW/pokemon-info.js"; +import {battle as zhTwBattleStat} from "#app/locales/zh_TW/battle.js"; import i18next, {initI18n} from "#app/plugins/i18n"; -import { KoreanPostpositionProcessor } from "i18next-korean-postposition-processor"; +import {KoreanPostpositionProcessor} from "i18next-korean-postposition-processor"; interface BattleStatTestUnit { - stat: BattleStat, - key: string + stat: BattleStat, + key: string } interface BattleStatLevelTestUnit { - levels: integer, - up: boolean, - key: string + levels: integer, + up: boolean, + key: string + changedStats: integer } function testBattleStatName(stat: BattleStat, expectMessage: string) { @@ -40,8 +41,8 @@ function testBattleStatName(stat: BattleStat, expectMessage: string) { expect(message).toBe(expectMessage); } -function testBattleStatLevelChangeDescription(levels: integer, up: boolean, expectMessage: string) { - const message = getBattleStatLevelChangeDescription("{{pokemonNameWithAffix}}", "{{stats}}", levels, up); +function testBattleStatLevelChangeDescription(levels: integer, up: boolean, expectMessage: string, changedStats: integer) { + const message = getBattleStatLevelChangeDescription("{{pokemonNameWithAffix}}", "{{stats}}", levels, up, changedStats); console.log(`message ${message}, expected ${expectMessage}`); expect(message).toBe(expectMessage); } @@ -53,28 +54,28 @@ describe("Test for BattleStat Localization", () => { beforeAll(() => { initI18n(); - battleStatUnits.push({ stat: BattleStat.ATK, key: "Stat.ATK" }); - battleStatUnits.push({ stat: BattleStat.DEF, key: "Stat.DEF" }); - battleStatUnits.push({ stat: BattleStat.SPATK, key: "Stat.SPATK" }); - battleStatUnits.push({ stat: BattleStat.SPDEF, key: "Stat.SPDEF" }); - battleStatUnits.push({ stat: BattleStat.SPD, key: "Stat.SPD" }); - battleStatUnits.push({ stat: BattleStat.ACC, key: "Stat.ACC" }); - battleStatUnits.push({ stat: BattleStat.EVA, key: "Stat.EVA" }); + battleStatUnits.push({stat: BattleStat.ATK, key: "Stat.ATK"}); + battleStatUnits.push({stat: BattleStat.DEF, key: "Stat.DEF"}); + battleStatUnits.push({stat: BattleStat.SPATK, key: "Stat.SPATK"}); + battleStatUnits.push({stat: BattleStat.SPDEF, key: "Stat.SPDEF"}); + battleStatUnits.push({stat: BattleStat.SPD, key: "Stat.SPD"}); + battleStatUnits.push({stat: BattleStat.ACC, key: "Stat.ACC"}); + battleStatUnits.push({stat: BattleStat.EVA, key: "Stat.EVA"}); - battleStatLevelUnits.push({ levels: 1, up: true, key: "statRose" }); - battleStatLevelUnits.push({ levels: 2, up: true, key: "statSharplyRose" }); - battleStatLevelUnits.push({ levels: 3, up: true, key: "statRoseDrastically" }); - battleStatLevelUnits.push({ levels: 4, up: true, key: "statRoseDrastically" }); - battleStatLevelUnits.push({ levels: 5, up: true, key: "statRoseDrastically" }); - battleStatLevelUnits.push({ levels: 6, up: true, key: "statRoseDrastically" }); - battleStatLevelUnits.push({ levels: 7, up: true, key: "statWontGoAnyHigher" }); - battleStatLevelUnits.push({ levels: 1, up: false, key: "statFell" }); - battleStatLevelUnits.push({ levels: 2, up: false, key: "statHarshlyFell" }); - battleStatLevelUnits.push({ levels: 3, up: false, key: "statSeverelyFell" }); - battleStatLevelUnits.push({ levels: 4, up: false, key: "statSeverelyFell" }); - battleStatLevelUnits.push({ levels: 5, up: false, key: "statSeverelyFell" }); - battleStatLevelUnits.push({ levels: 6, up: false, key: "statSeverelyFell" }); - battleStatLevelUnits.push({ levels: 7, up: false, key: "statWontGoAnyLower" }); + battleStatLevelUnits.push({levels: 1, up: true, key: "statRose_one", changedStats: 1}); + battleStatLevelUnits.push({levels: 2, up: true, key: "statSharplyRose_one", changedStats: 1}); + battleStatLevelUnits.push({levels: 3, up: true, key: "statRoseDrastically_one", changedStats: 1}); + battleStatLevelUnits.push({levels: 4, up: true, key: "statRoseDrastically_one", changedStats: 1}); + battleStatLevelUnits.push({levels: 5, up: true, key: "statRoseDrastically_one", changedStats: 1}); + battleStatLevelUnits.push({levels: 6, up: true, key: "statRoseDrastically_one", changedStats: 1}); + battleStatLevelUnits.push({levels: 7, up: true, key: "statWontGoAnyHigher_one", changedStats: 1}); + battleStatLevelUnits.push({levels: 1, up: false, key: "statFell_one", changedStats: 1}); + battleStatLevelUnits.push({levels: 2, up: false, key: "statHarshlyFell_one", changedStats: 1}); + battleStatLevelUnits.push({levels: 3, up: false, key: "statSeverelyFell_one", changedStats: 1}); + battleStatLevelUnits.push({levels: 4, up: false, key: "statSeverelyFell_one", changedStats: 1}); + battleStatLevelUnits.push({levels: 5, up: false, key: "statSeverelyFell_one", changedStats: 1}); + battleStatLevelUnits.push({levels: 6, up: false, key: "statSeverelyFell_one", changedStats: 1}); + battleStatLevelUnits.push({levels: 7, up: false, key: "statWontGoAnyLower_one", changedStats: 1}); }); it("Test getBattleStatName() in English", async () => { @@ -87,7 +88,7 @@ describe("Test for BattleStat Localization", () => { it("Test getBattleStatLevelChangeDescription() in English", async () => { i18next.changeLanguage("en"); battleStatLevelUnits.forEach(unit => { - testBattleStatLevelChangeDescription(unit.levels, unit.up, enBattleStat[unit.key]); + testBattleStatLevelChangeDescription(unit.levels, unit.up, enBattleStat[unit.key], unit.changedStats); }); }); @@ -101,7 +102,7 @@ describe("Test for BattleStat Localization", () => { it("Test getBattleStatLevelChangeDescription() in Español", async () => { i18next.changeLanguage("es"); battleStatLevelUnits.forEach(unit => { - testBattleStatLevelChangeDescription(unit.levels, unit.up, esBattleStat[unit.key]); + testBattleStatLevelChangeDescription(unit.levels, unit.up, esBattleStat[unit.key], unit.changedStats); }); }); @@ -115,7 +116,7 @@ describe("Test for BattleStat Localization", () => { it("Test getBattleStatLevelChangeDescription() in Italiano", async () => { i18next.changeLanguage("it"); battleStatLevelUnits.forEach(unit => { - testBattleStatLevelChangeDescription(unit.levels, unit.up, itBattleStat[unit.key]); + testBattleStatLevelChangeDescription(unit.levels, unit.up, itBattleStat[unit.key], unit.changedStats); }); }); @@ -129,7 +130,7 @@ describe("Test for BattleStat Localization", () => { it("Test getBattleStatLevelChangeDescription() in Français", async () => { i18next.changeLanguage("fr"); battleStatLevelUnits.forEach(unit => { - testBattleStatLevelChangeDescription(unit.levels, unit.up, frBattleStat[unit.key]); + testBattleStatLevelChangeDescription(unit.levels, unit.up, frBattleStat[unit.key], unit.changedStats); }); }); @@ -143,7 +144,7 @@ describe("Test for BattleStat Localization", () => { it("Test getBattleStatLevelChangeDescription() in Deutsch", async () => { i18next.changeLanguage("de"); battleStatLevelUnits.forEach(unit => { - testBattleStatLevelChangeDescription(unit.levels, unit.up, deBattleStat[unit.key]); + testBattleStatLevelChangeDescription(unit.levels, unit.up, deBattleStat[unit.key], unit.changedStats); }); }); @@ -157,7 +158,7 @@ describe("Test for BattleStat Localization", () => { it("Test getBattleStatLevelChangeDescription() in Português (BR)", async () => { i18next.changeLanguage("pt-BR"); battleStatLevelUnits.forEach(unit => { - testBattleStatLevelChangeDescription(unit.levels, unit.up, ptBrBattleStat[unit.key]); + testBattleStatLevelChangeDescription(unit.levels, unit.up, ptBrBattleStat[unit.key], unit.changedStats); }); }); @@ -171,7 +172,9 @@ describe("Test for BattleStat Localization", () => { it("Test getBattleStatLevelChangeDescription() in 简体中文", async () => { i18next.changeLanguage("zh-CN"); battleStatLevelUnits.forEach(unit => { - testBattleStatLevelChangeDescription(unit.levels, unit.up, zhCnBattleStat[unit.key]); + // In i18next, the pluralization rules are language-specific, and Chinese only supports the _other suffix. + unit.key = unit.key.replace("one", "other"); + testBattleStatLevelChangeDescription(unit.levels, unit.up, zhCnBattleStat[unit.key], unit.changedStats); }); }); @@ -185,7 +188,9 @@ describe("Test for BattleStat Localization", () => { it("Test getBattleStatLevelChangeDescription() in 繁體中文", async () => { i18next.changeLanguage("zh-TW"); battleStatLevelUnits.forEach(unit => { - testBattleStatLevelChangeDescription(unit.levels, unit.up, zhTwBattleStat[unit.key]); + // In i18next, the pluralization rules are language-specific, and Chinese only supports the _other suffix. + unit.key = unit.key.replace("one", "other"); + testBattleStatLevelChangeDescription(unit.levels, unit.up, zhTwBattleStat[unit.key], unit.changedStats); }); }); @@ -201,7 +206,7 @@ describe("Test for BattleStat Localization", () => { battleStatLevelUnits.forEach(unit => { const processor = new KoreanPostpositionProcessor(); const message = processor.process(koBattleStat[unit.key]); - testBattleStatLevelChangeDescription(unit.levels, unit.up, message); + testBattleStatLevelChangeDescription(unit.levels, unit.up, message, unit.changedStats); }); }); }); diff --git a/src/test/localization/terrain.test.ts b/src/test/localization/terrain.test.ts index 89884290e00..526dedf8d24 100644 --- a/src/test/localization/terrain.test.ts +++ b/src/test/localization/terrain.test.ts @@ -1,7 +1,7 @@ import { beforeAll, describe, beforeEach, afterEach, expect, it, vi } from "vitest"; import Phaser from "phaser"; import GameManager from "#app/test/utils/gameManager"; -import * as overrides from "#app/overrides"; +import overrides from "#app/overrides"; import { Species } from "#enums/species"; import { TerrainType, getTerrainName } from "#app/data/terrain"; import { getTerrainStartMessage, getTerrainClearMessage, getTerrainBlockMessage } from "#app/data/weather"; diff --git a/src/test/moves/astonish.test.ts b/src/test/moves/astonish.test.ts new file mode 100644 index 00000000000..bd18d159b65 --- /dev/null +++ b/src/test/moves/astonish.test.ts @@ -0,0 +1,73 @@ +import Phaser from "phaser"; +import { afterEach, beforeAll, beforeEach, describe, expect, test, vi } from "vitest"; +import GameManager from "../utils/gameManager"; +import Overrides from "#app/overrides"; +import { Species } from "#enums/species"; +import { Abilities } from "#enums/abilities"; +import { Moves } from "#enums/moves"; +import { getMovePosition } from "../utils/gameManagerUtils"; +import { BerryPhase, CommandPhase, MoveEndPhase, TurnEndPhase } from "#app/phases.js"; +import { BattlerTagType } from "#app/enums/battler-tag-type.js"; +import { allMoves } from "#app/data/move.js"; + +const TIMEOUT = 20 * 1000; + +describe("Moves - Astonish", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + + beforeAll(() => { + phaserGame = new Phaser.Game({ + type: Phaser.HEADLESS, + }); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); + + beforeEach(() => { + game = new GameManager(phaserGame); + vi.spyOn(Overrides, "SINGLE_BATTLE_OVERRIDE", "get").mockReturnValue(true); + vi.spyOn(Overrides, "MOVESET_OVERRIDE", "get").mockReturnValue([Moves.ASTONISH, Moves.SPLASH]); + vi.spyOn(Overrides, "OPP_SPECIES_OVERRIDE", "get").mockReturnValue(Species.BLASTOISE); + vi.spyOn(Overrides, "OPP_ABILITY_OVERRIDE", "get").mockReturnValue(Abilities.INSOMNIA); + vi.spyOn(Overrides, "OPP_MOVESET_OVERRIDE", "get").mockReturnValue([Moves.TACKLE, Moves.TACKLE, Moves.TACKLE, Moves.TACKLE]); + vi.spyOn(Overrides, "STARTING_LEVEL_OVERRIDE", "get").mockReturnValue(100); + vi.spyOn(Overrides, "OPP_LEVEL_OVERRIDE", "get").mockReturnValue(100); + + vi.spyOn(allMoves[Moves.ASTONISH], "chance", "get").mockReturnValue(100); + }); + + test( + "move effect should cancel the target's move on the turn it applies", + async () => { + await game.startBattle([Species.MEOWSCARADA]); + + const leadPokemon = game.scene.getPlayerPokemon(); + expect(leadPokemon).toBeDefined(); + + const enemyPokemon = game.scene.getEnemyPokemon(); + expect(enemyPokemon).toBeDefined(); + + game.doAttack(getMovePosition(game.scene, 0, Moves.ASTONISH)); + + await game.phaseInterceptor.to(MoveEndPhase, false); + + expect(enemyPokemon.getTag(BattlerTagType.FLINCHED)).toBeDefined(); + + await game.phaseInterceptor.to(TurnEndPhase); + + expect(leadPokemon.hp).toBe(leadPokemon.getMaxHp()); + expect(enemyPokemon.getTag(BattlerTagType.FLINCHED)).toBeUndefined(); + + await game.phaseInterceptor.to(CommandPhase, false); + + game.doAttack(getMovePosition(game.scene, 0, Moves.SPLASH)); + + await game.phaseInterceptor.to(BerryPhase, false); + + expect(leadPokemon.hp).toBeLessThan(leadPokemon.getMaxHp()); + }, TIMEOUT + ); +}); diff --git a/src/test/moves/aurora_veil.test.ts b/src/test/moves/aurora_veil.test.ts index e9c3d920717..258059f9c48 100644 --- a/src/test/moves/aurora_veil.test.ts +++ b/src/test/moves/aurora_veil.test.ts @@ -1,7 +1,7 @@ import {afterEach, beforeAll, beforeEach, describe, expect, it, vi} from "vitest"; import Phaser from "phaser"; import GameManager from "#app/test/utils/gameManager"; -import * as overrides from "#app/overrides"; +import overrides from "#app/overrides"; import { TurnEndPhase, } from "#app/phases"; diff --git a/src/test/moves/ceaseless_edge.test.ts b/src/test/moves/ceaseless_edge.test.ts index 6443e34d8d2..636c9c3e618 100644 --- a/src/test/moves/ceaseless_edge.test.ts +++ b/src/test/moves/ceaseless_edge.test.ts @@ -1,7 +1,7 @@ import {afterEach, beforeAll, beforeEach, describe, expect, test, vi} from "vitest"; import Phaser from "phaser"; import GameManager from "#app/test/utils/gameManager"; -import * as overrides from "#app/overrides"; +import overrides from "#app/overrides"; import { MoveEffectPhase, TurnEndPhase diff --git a/src/test/moves/double_team.test.ts b/src/test/moves/double_team.test.ts new file mode 100644 index 00000000000..ffe918f7232 --- /dev/null +++ b/src/test/moves/double_team.test.ts @@ -0,0 +1,55 @@ +import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; +import Phaser from "phaser"; +import GameManager from "#app/test/utils/gameManager"; +import overrides from "#app/overrides"; +import { Species } from "#enums/species"; +import { + TurnEndPhase, +} from "#app/phases"; +import { Moves } from "#enums/moves"; +import { getMovePosition } from "#app/test/utils/gameManagerUtils"; +import { BattleStat } from "#app/data/battle-stat.js"; +import { Abilities } from "#app/enums/abilities.js"; + +describe("Moves - Double Team", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + + beforeAll(() => { + phaserGame = new Phaser.Game({ + type: Phaser.HEADLESS, + }); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); + + beforeEach(() => { + game = new GameManager(phaserGame); + vi.spyOn(overrides, "SINGLE_BATTLE_OVERRIDE", "get").mockReturnValue(true); + vi.spyOn(overrides, "MOVESET_OVERRIDE", "get").mockReturnValue([Moves.DOUBLE_TEAM]); + vi.spyOn(overrides, "NEVER_CRIT_OVERRIDE", "get").mockReturnValue(true); + vi.spyOn(overrides, "ABILITY_OVERRIDE", "get").mockReturnValue(Abilities.BALL_FETCH); + vi.spyOn(overrides, "OPP_SPECIES_OVERRIDE", "get").mockReturnValue(Species.SHUCKLE); + vi.spyOn(overrides, "OPP_ABILITY_OVERRIDE", "get").mockReturnValue(Abilities.BALL_FETCH); + vi.spyOn(overrides, "OPP_MOVESET_OVERRIDE", "get").mockReturnValue([Moves.TACKLE, Moves.TACKLE, Moves.TACKLE, Moves.TACKLE]); + }); + + it("increases the user's evasion by one stage.", async () => { + await game.startBattle([Species.MAGIKARP]); + + const ally = game.scene.getPlayerPokemon(); + const enemy = game.scene.getEnemyPokemon(); + + vi.spyOn(enemy, "getAccuracyMultiplier"); + expect(ally.summonData.battleStats[BattleStat.EVA]).toBe(0); + + game.doAttack(getMovePosition(game.scene, 0, Moves.DOUBLE_TEAM)); + await game.phaseInterceptor.to(TurnEndPhase); + await game.toNextTurn(); + + expect(ally.summonData.battleStats[BattleStat.EVA]).toBe(1); + expect(enemy.getAccuracyMultiplier).toHaveReturnedWith(.75); + }); +}); diff --git a/src/test/moves/dragon_rage.test.ts b/src/test/moves/dragon_rage.test.ts new file mode 100644 index 00000000000..51ea9a67728 --- /dev/null +++ b/src/test/moves/dragon_rage.test.ts @@ -0,0 +1,132 @@ +import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; +import Phaser from "phaser"; +import GameManager from "#app/test/utils/gameManager"; +import overrides from "#app/overrides"; +import { TurnEndPhase } from "#app/phases"; +import { Moves } from "#enums/moves"; +import { getMovePosition } from "#app/test/utils/gameManagerUtils"; +import { Abilities } from "#enums/abilities"; +import { Species } from "#app/enums/species.js"; +import { Type } from "#app/data/type"; +import { BattleStat } from "#app/data/battle-stat"; +import { BattlerTagType } from "#enums/battler-tag-type"; +import { EnemyPokemon, PlayerPokemon } from "#app/field/pokemon"; +import { modifierTypes } from "#app/modifier/modifier-type"; + +describe("Moves - Dragon Rage", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + let partyPokemon: PlayerPokemon; + let enemyPokemon: EnemyPokemon; + + const dragonRageDamage = 40; + + beforeAll(() => { + phaserGame = new Phaser.Game({ + type: Phaser.HEADLESS, + }); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); + + beforeEach(async () => { + game = new GameManager(phaserGame); + + vi.spyOn(overrides, "SINGLE_BATTLE_OVERRIDE", "get").mockReturnValue(true); + vi.spyOn(overrides, "NEVER_CRIT_OVERRIDE", "get").mockReturnValue(true); + + vi.spyOn(overrides, "STARTER_SPECIES_OVERRIDE", "get").mockReturnValue(Species.SNORLAX); + vi.spyOn(overrides, "MOVESET_OVERRIDE", "get").mockReturnValue([Moves.DRAGON_RAGE]); + vi.spyOn(overrides, "ABILITY_OVERRIDE", "get").mockReturnValue(Abilities.BALL_FETCH); + vi.spyOn(overrides, "PASSIVE_ABILITY_OVERRIDE", "get").mockReturnValue(Abilities.BALL_FETCH); + vi.spyOn(overrides, "STARTING_LEVEL_OVERRIDE", "get").mockReturnValue(100); + + vi.spyOn(overrides, "OPP_SPECIES_OVERRIDE", "get").mockReturnValue(Species.SNORLAX); + vi.spyOn(overrides, "OPP_MOVESET_OVERRIDE", "get").mockReturnValue([Moves.SPLASH, Moves.SPLASH, Moves.SPLASH, Moves.SPLASH]); + vi.spyOn(overrides, "OPP_ABILITY_OVERRIDE", "get").mockReturnValue(Abilities.BALL_FETCH); + vi.spyOn(overrides, "OPP_PASSIVE_ABILITY_OVERRIDE", "get").mockReturnValue(Abilities.BALL_FETCH); + vi.spyOn(overrides, "OPP_LEVEL_OVERRIDE", "get").mockReturnValue(100); + + await game.startBattle(); + + partyPokemon = game.scene.getParty()[0]; + enemyPokemon = game.scene.getEnemyPokemon(); + + // remove berries + game.scene.removePartyMemberModifiers(0); + game.scene.clearEnemyHeldItemModifiers(); + }); + + it("ignores weaknesses", async () => { + vi.spyOn(enemyPokemon, "getTypes").mockReturnValue([Type.DRAGON]); + + game.doAttack(getMovePosition(game.scene, 0, Moves.DRAGON_RAGE)); + await game.phaseInterceptor.to(TurnEndPhase); + const damageDealt = enemyPokemon.getMaxHp() - enemyPokemon.hp; + + expect(damageDealt).toBe(dragonRageDamage); + }); + + it("ignores resistances", async () => { + vi.spyOn(enemyPokemon, "getTypes").mockReturnValue([Type.STEEL]); + + game.doAttack(getMovePosition(game.scene, 0, Moves.DRAGON_RAGE)); + await game.phaseInterceptor.to(TurnEndPhase); + const damageDealt = enemyPokemon.getMaxHp() - enemyPokemon.hp; + + expect(damageDealt).toBe(dragonRageDamage); + }); + + it("ignores stat changes", async () => { + partyPokemon.summonData.battleStats[BattleStat.SPATK] = 2; + + game.doAttack(getMovePosition(game.scene, 0, Moves.DRAGON_RAGE)); + await game.phaseInterceptor.to(TurnEndPhase); + const damageDealt = enemyPokemon.getMaxHp() - enemyPokemon.hp; + + expect(damageDealt).toBe(dragonRageDamage); + }); + + it("ignores stab", async () => { + vi.spyOn(partyPokemon, "getTypes").mockReturnValue([Type.DRAGON]); + + game.doAttack(getMovePosition(game.scene, 0, Moves.DRAGON_RAGE)); + await game.phaseInterceptor.to(TurnEndPhase); + const damageDealt = enemyPokemon.getMaxHp() - enemyPokemon.hp; + + expect(damageDealt).toBe(dragonRageDamage); + }); + + it("ignores criticals", async () => { + partyPokemon.removeTag(BattlerTagType.NO_CRIT); + partyPokemon.addTag(BattlerTagType.ALWAYS_CRIT, 99); + + game.doAttack(getMovePosition(game.scene, 0, Moves.DRAGON_RAGE)); + await game.phaseInterceptor.to(TurnEndPhase); + const damageDealt = enemyPokemon.getMaxHp() - enemyPokemon.hp; + + expect(damageDealt).toBe(dragonRageDamage); + }); + + it("ignores damage modification from abilities such as ice scales", async () => { + vi.spyOn(overrides, "OPP_ABILITY_OVERRIDE", "get").mockReturnValue(Abilities.ICE_SCALES); + + game.doAttack(getMovePosition(game.scene, 0, Moves.DRAGON_RAGE)); + await game.phaseInterceptor.to(TurnEndPhase); + const damageDealt = enemyPokemon.getMaxHp() - enemyPokemon.hp; + + expect(damageDealt).toBe(dragonRageDamage); + }); + + it("ignores multi hit", async () => { + game.scene.addModifier(modifierTypes.MULTI_LENS().newModifier(partyPokemon), false); + + game.doAttack(getMovePosition(game.scene, 0, Moves.DRAGON_RAGE)); + await game.phaseInterceptor.to(TurnEndPhase); + const damageDealt = enemyPokemon.getMaxHp() - enemyPokemon.hp; + + expect(damageDealt).toBe(dragonRageDamage); + }); +}); diff --git a/src/test/moves/dynamax_cannon.test.ts b/src/test/moves/dynamax_cannon.test.ts new file mode 100644 index 00000000000..6535332fbd3 --- /dev/null +++ b/src/test/moves/dynamax_cannon.test.ts @@ -0,0 +1,175 @@ +import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; +import Phaser from "phaser"; +import GameManager from "#app/test/utils/gameManager"; +import overrides from "#app/overrides"; +import { MoveEffectPhase, DamagePhase, TurnStartPhase } from "#app/phases"; +import { getMovePosition } from "#app/test/utils/gameManagerUtils"; +import { allMoves } from "#app/data/move"; +import { Moves } from "#enums/moves"; +import { Species } from "#enums/species"; +import { BattlerIndex } from "#app/battle"; + +describe("Moves - Dynamax Cannon", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + + const dynamaxCannon = allMoves[Moves.DYNAMAX_CANNON]; + + beforeAll(() => { + phaserGame = new Phaser.Game({ + type: Phaser.HEADLESS, + }); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); + + beforeEach(() => { + game = new GameManager(phaserGame); + + vi.spyOn(overrides, "MOVESET_OVERRIDE", "get").mockReturnValue([ dynamaxCannon.id ]); + vi.spyOn(overrides, "STARTING_LEVEL_OVERRIDE", "get").mockReturnValue(200); + + // Note that, for Waves 1-10, the level cap is 10 + vi.spyOn(overrides, "STARTING_WAVE_OVERRIDE", "get").mockReturnValue(1); + vi.spyOn(overrides, "SINGLE_BATTLE_OVERRIDE", "get").mockReturnValue(true); + vi.spyOn(overrides, "NEVER_CRIT_OVERRIDE", "get").mockReturnValue(true); + + vi.spyOn(overrides, "OPP_SPECIES_OVERRIDE", "get").mockReturnValue(Species.MAGIKARP); + vi.spyOn(overrides, "OPP_MOVESET_OVERRIDE", "get").mockReturnValue([ Moves.SPLASH, Moves.SPLASH, Moves.SPLASH, Moves.SPLASH ]); + + vi.spyOn(dynamaxCannon, "calculateBattlePower"); + }); + + it("should return 100 power against an enemy below level cap", async() => { + vi.spyOn(overrides, "OPP_LEVEL_OVERRIDE", "get").mockReturnValue(1); + await game.startBattle([ + Species.ETERNATUS, + ]); + + game.doAttack(getMovePosition(game.scene, 0, dynamaxCannon.id)); + + await game.phaseInterceptor.to(MoveEffectPhase, false); + expect((game.scene.getCurrentPhase() as MoveEffectPhase).move.moveId).toBe(dynamaxCannon.id); + await game.phaseInterceptor.to(DamagePhase, false); + expect(dynamaxCannon.calculateBattlePower).toHaveLastReturnedWith(100); + }, 20000); + + it("should return 100 power against an enemy at level cap", async() => { + vi.spyOn(overrides, "OPP_LEVEL_OVERRIDE", "get").mockReturnValue(10); + await game.startBattle([ + Species.ETERNATUS, + ]); + + game.doAttack(getMovePosition(game.scene, 0, dynamaxCannon.id)); + + await game.phaseInterceptor.to(MoveEffectPhase, false); + expect((game.scene.getCurrentPhase() as MoveEffectPhase).move.moveId).toBe(dynamaxCannon.id); + await game.phaseInterceptor.to(DamagePhase, false); + expect(dynamaxCannon.calculateBattlePower).toHaveLastReturnedWith(100); + }, 20000); + + it("should return 120 power against an enemy 1% above level cap", async() => { + vi.spyOn(overrides, "OPP_LEVEL_OVERRIDE", "get").mockReturnValue(101); + await game.startBattle([ + Species.ETERNATUS, + ]); + + game.doAttack(getMovePosition(game.scene, 0, dynamaxCannon.id)); + + await game.phaseInterceptor.to(MoveEffectPhase, false); + const phase = game.scene.getCurrentPhase() as MoveEffectPhase; + expect(phase.move.moveId).toBe(dynamaxCannon.id); + // Force level cap to be 100 + vi.spyOn(phase.getTarget().scene, "getMaxExpLevel").mockReturnValue(100); + await game.phaseInterceptor.to(DamagePhase, false); + expect(dynamaxCannon.calculateBattlePower).toHaveLastReturnedWith(120); + }, 20000); + + it("should return 140 power against an enemy 2% above level capp", async() => { + vi.spyOn(overrides, "OPP_LEVEL_OVERRIDE", "get").mockReturnValue(102); + await game.startBattle([ + Species.ETERNATUS, + ]); + + game.doAttack(getMovePosition(game.scene, 0, dynamaxCannon.id)); + + await game.phaseInterceptor.to(MoveEffectPhase, false); + const phase = game.scene.getCurrentPhase() as MoveEffectPhase; + expect(phase.move.moveId).toBe(dynamaxCannon.id); + // Force level cap to be 100 + vi.spyOn(phase.getTarget().scene, "getMaxExpLevel").mockReturnValue(100); + await game.phaseInterceptor.to(DamagePhase, false); + expect(dynamaxCannon.calculateBattlePower).toHaveLastReturnedWith(140); + }, 20000); + + it("should return 160 power against an enemy 3% above level cap", async() => { + vi.spyOn(overrides, "OPP_LEVEL_OVERRIDE", "get").mockReturnValue(103); + await game.startBattle([ + Species.ETERNATUS, + ]); + + game.doAttack(getMovePosition(game.scene, 0, dynamaxCannon.id)); + + await game.phaseInterceptor.to(MoveEffectPhase, false); + const phase = game.scene.getCurrentPhase() as MoveEffectPhase; + expect(phase.move.moveId).toBe(dynamaxCannon.id); + // Force level cap to be 100 + vi.spyOn(phase.getTarget().scene, "getMaxExpLevel").mockReturnValue(100); + await game.phaseInterceptor.to(DamagePhase, false); + expect(dynamaxCannon.calculateBattlePower).toHaveLastReturnedWith(160); + }, 20000); + + it("should return 180 power against an enemy 4% above level cap", async() => { + vi.spyOn(overrides, "OPP_LEVEL_OVERRIDE", "get").mockReturnValue(104); + await game.startBattle([ + Species.ETERNATUS, + ]); + + game.doAttack(getMovePosition(game.scene, 0, dynamaxCannon.id)); + + await game.phaseInterceptor.to(MoveEffectPhase, false); + const phase = game.scene.getCurrentPhase() as MoveEffectPhase; + expect(phase.move.moveId).toBe(dynamaxCannon.id); + // Force level cap to be 100 + vi.spyOn(phase.getTarget().scene, "getMaxExpLevel").mockReturnValue(100); + await game.phaseInterceptor.to(DamagePhase, false); + expect(dynamaxCannon.calculateBattlePower).toHaveLastReturnedWith(180); + }, 20000); + + it("should return 200 power against an enemy 5% above level cap", async() => { + vi.spyOn(overrides, "OPP_LEVEL_OVERRIDE", "get").mockReturnValue(105); + await game.startBattle([ + Species.ETERNATUS, + ]); + + game.doAttack(getMovePosition(game.scene, 0, dynamaxCannon.id)); + + await game.phaseInterceptor.to(MoveEffectPhase, false); + const phase = game.scene.getCurrentPhase() as MoveEffectPhase; + expect(phase.move.moveId).toBe(dynamaxCannon.id); + // Force level cap to be 100 + vi.spyOn(phase.getTarget().scene, "getMaxExpLevel").mockReturnValue(100); + await game.phaseInterceptor.to(DamagePhase, false); + expect(dynamaxCannon.calculateBattlePower).toHaveLastReturnedWith(200); + }, 20000); + + it("should return 200 power against an enemy way above level cap", async() => { + vi.spyOn(overrides, "OPP_LEVEL_OVERRIDE", "get").mockReturnValue(999); + await game.startBattle([ + Species.ETERNATUS, + ]); + + game.doAttack(getMovePosition(game.scene, 0, dynamaxCannon.id)); + + await game.phaseInterceptor.to(TurnStartPhase, false); + // Force user to act before enemy + vi.spyOn((game.scene.getCurrentPhase() as TurnStartPhase), "getOrder").mockReturnValue([ BattlerIndex.PLAYER, BattlerIndex. ENEMY]); + + await game.phaseInterceptor.to(MoveEffectPhase, false); + expect((game.scene.getCurrentPhase() as MoveEffectPhase).move.moveId).toBe(dynamaxCannon.id); + await game.phaseInterceptor.to(DamagePhase, false); + expect(dynamaxCannon.calculateBattlePower).toHaveLastReturnedWith(200); + }, 20000); +}); diff --git a/src/test/moves/fissure.test.ts b/src/test/moves/fissure.test.ts new file mode 100644 index 00000000000..6d0dc70fec4 --- /dev/null +++ b/src/test/moves/fissure.test.ts @@ -0,0 +1,63 @@ +import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; +import Phaser from "phaser"; +import GameManager from "#app/test/utils/gameManager"; +import overrides from "#app/overrides"; +import { DamagePhase } from "#app/phases"; +import { Moves } from "#enums/moves"; +import { getMovePosition } from "#app/test/utils/gameManagerUtils"; +import { Abilities } from "#enums/abilities"; +import { Species } from "#app/enums/species.js"; +import { EnemyPokemon } from "#app/field/pokemon"; + +describe("Moves - Fissure", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + //let partyPokemon: PlayerPokemon; + let enemyPokemon: EnemyPokemon; + + beforeAll(() => { + phaserGame = new Phaser.Game({ + type: Phaser.HEADLESS, + }); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); + + beforeEach(async () => { + game = new GameManager(phaserGame); + + vi.spyOn(overrides, "SINGLE_BATTLE_OVERRIDE", "get").mockReturnValue(true); + vi.spyOn(overrides, "NEVER_CRIT_OVERRIDE", "get").mockReturnValue(true); + + vi.spyOn(overrides, "STARTER_SPECIES_OVERRIDE", "get").mockReturnValue(Species.SNORLAX); + vi.spyOn(overrides, "MOVESET_OVERRIDE", "get").mockReturnValue([Moves.FISSURE]); + vi.spyOn(overrides, "PASSIVE_ABILITY_OVERRIDE", "get").mockReturnValue(Abilities.BALL_FETCH); + vi.spyOn(overrides, "STARTING_LEVEL_OVERRIDE", "get").mockReturnValue(100); + + vi.spyOn(overrides, "OPP_SPECIES_OVERRIDE", "get").mockReturnValue(Species.SNORLAX); + vi.spyOn(overrides, "OPP_MOVESET_OVERRIDE", "get").mockReturnValue([Moves.SPLASH, Moves.SPLASH, Moves.SPLASH, Moves.SPLASH]); + vi.spyOn(overrides, "OPP_PASSIVE_ABILITY_OVERRIDE", "get").mockReturnValue(Abilities.BALL_FETCH); + vi.spyOn(overrides, "OPP_LEVEL_OVERRIDE", "get").mockReturnValue(100); + + await game.startBattle(); + + //partyPokemon = game.scene.getParty()[0]; + enemyPokemon = game.scene.getEnemyPokemon(); + + // remove berries + game.scene.removePartyMemberModifiers(0); + game.scene.clearEnemyHeldItemModifiers(); + }); + + it("ignores damage modification from abilities such as fur coat", async () => { + vi.spyOn(overrides, "ABILITY_OVERRIDE", "get").mockReturnValue(Abilities.NO_GUARD); + vi.spyOn(overrides, "OPP_ABILITY_OVERRIDE", "get").mockReturnValue(Abilities.FUR_COAT); + + game.doAttack(getMovePosition(game.scene, 0, Moves.FISSURE)); + await game.phaseInterceptor.to(DamagePhase, true); + + expect(enemyPokemon.isFainted()).toBe(true); + }); +}); diff --git a/src/test/moves/flower_shield.test.ts b/src/test/moves/flower_shield.test.ts index f94af93fc66..b6e196cd9f7 100644 --- a/src/test/moves/flower_shield.test.ts +++ b/src/test/moves/flower_shield.test.ts @@ -1,7 +1,7 @@ import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; import Phaser from "phaser"; import GameManager from "#app/test/utils/gameManager"; -import * as overrides from "#app/overrides"; +import overrides from "#app/overrides"; import { Species } from "#enums/species"; import { TurnEndPhase, diff --git a/src/test/moves/follow_me.test.ts b/src/test/moves/follow_me.test.ts index f0b80ab90c0..c444db77f17 100644 --- a/src/test/moves/follow_me.test.ts +++ b/src/test/moves/follow_me.test.ts @@ -1,7 +1,7 @@ import {afterEach, beforeAll, beforeEach, describe, expect, test, vi} from "vitest"; import Phaser from "phaser"; import GameManager from "#app/test/utils/gameManager"; -import * as overrides from "#app/overrides"; +import overrides from "#app/overrides"; import { CommandPhase, SelectTargetPhase, diff --git a/src/test/moves/gastro_acid.test.ts b/src/test/moves/gastro_acid.test.ts index 063a17aead9..3b446ac4a53 100644 --- a/src/test/moves/gastro_acid.test.ts +++ b/src/test/moves/gastro_acid.test.ts @@ -3,7 +3,7 @@ import GameManager from "../utils/gameManager"; import { Moves } from "#app/enums/moves.js"; -import * as overrides from "#app/overrides"; +import overrides from "#app/overrides"; import { Abilities } from "#app/enums/abilities.js"; import { BattlerIndex } from "#app/battle.js"; import { getMovePosition } from "../utils/gameManagerUtils"; diff --git a/src/test/moves/glaive_rush.test.ts b/src/test/moves/glaive_rush.test.ts new file mode 100644 index 00000000000..4d9f6d332d0 --- /dev/null +++ b/src/test/moves/glaive_rush.test.ts @@ -0,0 +1,132 @@ +import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; +import Phaser from "phaser"; +import GameManager from "#app/test/utils/gameManager"; +import overrides from "#app/overrides"; +import { DamagePhase, TurnEndPhase } from "#app/phases"; +import { getMovePosition } from "#app/test/utils/gameManagerUtils"; +import { Moves } from "#enums/moves"; +import { Species } from "#enums/species"; +import { Abilities } from "#app/enums/abilities.js"; +import { allMoves } from "#app/data/move.js"; + + +describe("Moves - Glaive Rush", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + + beforeAll(() => { + phaserGame = new Phaser.Game({ + type: Phaser.HEADLESS, + }); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); + + beforeEach(() => { + game = new GameManager(phaserGame); + vi.spyOn(overrides, "SINGLE_BATTLE_OVERRIDE", "get").mockReturnValue(true); + vi.spyOn(overrides, "NEVER_CRIT_OVERRIDE", "get").mockReturnValue(true); + vi.spyOn(overrides, "OPP_SPECIES_OVERRIDE", "get").mockReturnValue(Species.MAGIKARP); + vi.spyOn(overrides, "OPP_ABILITY_OVERRIDE", "get").mockReturnValue(Abilities.BALL_FETCH); + vi.spyOn(overrides, "OPP_MOVESET_OVERRIDE", "get").mockReturnValue(Array(4).fill(Moves.GLAIVE_RUSH)); + vi.spyOn(overrides, "STARTER_SPECIES_OVERRIDE", "get").mockReturnValue(Species.KLINK); + vi.spyOn(overrides, "ABILITY_OVERRIDE", "get").mockReturnValue(Abilities.UNNERVE); + vi.spyOn(overrides, "PASSIVE_ABILITY_OVERRIDE", "get").mockReturnValue(Abilities.FUR_COAT); + vi.spyOn(overrides, "MOVESET_OVERRIDE", "get").mockReturnValue([Moves.SHADOW_SNEAK, Moves.AVALANCHE, Moves.SPLASH, Moves.GLAIVE_RUSH]); + }); + + it("takes double damage from attacks", async() => { + await game.startBattle(); + const enemy = game.scene.getEnemyPokemon(); + enemy.hp = 1000; + + vi.spyOn(game.scene, "randBattleSeedInt").mockReturnValue(0); + game.doAttack(getMovePosition(game.scene, 0, Moves.SHADOW_SNEAK)); + await game.phaseInterceptor.to(DamagePhase); + const damageDealt = 1000 - enemy.hp; + await game.phaseInterceptor.to(TurnEndPhase); + game.doAttack(getMovePosition(game.scene, 0, Moves.SHADOW_SNEAK)); + await game.phaseInterceptor.to(DamagePhase); + expect(enemy.hp).toBeLessThanOrEqual(1001 - (damageDealt * 3)); + + }, 20000); + + it("always gets hit by attacks", async() => { + await game.startBattle(); + const enemy = game.scene.getEnemyPokemon(); + enemy.hp = 1000; + + allMoves[Moves.AVALANCHE].accuracy = 0; + game.doAttack(getMovePosition(game.scene, 0, Moves.AVALANCHE)); + await game.phaseInterceptor.to(TurnEndPhase); + expect(enemy.hp).toBeLessThan(1000); + + }, 20000); + + it("interacts properly with multi-lens", async() => { + vi.spyOn(overrides, "STARTING_HELD_ITEMS_OVERRIDE", "get").mockReturnValue([{name: "MULTI_LENS", count: 2}]); + vi.spyOn(overrides, "OPP_MOVESET_OVERRIDE", "get").mockReturnValue(Array(4).fill(Moves.AVALANCHE)); + await game.startBattle(); + const player = game.scene.getPlayerPokemon(); + const enemy = game.scene.getEnemyPokemon(); + enemy.hp = 1000; + player.hp = 1000; + + allMoves[Moves.AVALANCHE].accuracy = 0; + game.doAttack(getMovePosition(game.scene, 0, Moves.GLAIVE_RUSH)); + await game.phaseInterceptor.to(TurnEndPhase); + expect(player.hp).toBeLessThan(1000); + player.hp = 1000; + game.doAttack(getMovePosition(game.scene, 0, Moves.SPLASH)); + await game.phaseInterceptor.to(TurnEndPhase); + expect(player.hp).toBe(1000); + + }, 20000); + + it("secondary effects only last until next move", async() => { + vi.spyOn(overrides, "OPP_MOVESET_OVERRIDE", "get").mockReturnValue(Array(4).fill(Moves.SHADOW_SNEAK)); + await game.startBattle(); + const player = game.scene.getPlayerPokemon(); + const enemy = game.scene.getEnemyPokemon(); + enemy.hp = 1000; + player.hp = 1000; + allMoves[Moves.SHADOW_SNEAK].accuracy = 0; + + game.doAttack(getMovePosition(game.scene, 0, Moves.GLAIVE_RUSH)); + await game.phaseInterceptor.to(TurnEndPhase); + expect(player.hp).toBe(1000); + + game.doAttack(getMovePosition(game.scene, 0, Moves.SPLASH)); + await game.phaseInterceptor.to(TurnEndPhase); + const damagedHp = player.hp; + expect(player.hp).toBeLessThan(1000); + + game.doAttack(getMovePosition(game.scene, 0, Moves.SPLASH)); + await game.phaseInterceptor.to(TurnEndPhase); + expect(player.hp).toBe(damagedHp); + + }, 20000); + + it("secondary effects are removed upon switching", async() => { + vi.spyOn(overrides, "OPP_MOVESET_OVERRIDE", "get").mockReturnValue(Array(4).fill(Moves.SHADOW_SNEAK)); + vi.spyOn(overrides, "STARTER_SPECIES_OVERRIDE", "get").mockReturnValue(0); + await game.startBattle([Species.KLINK, Species.FEEBAS]); + const player = game.scene.getPlayerPokemon(); + const enemy = game.scene.getEnemyPokemon(); + enemy.hp = 1000; + allMoves[Moves.SHADOW_SNEAK].accuracy = 0; + + game.doAttack(getMovePosition(game.scene, 0, Moves.GLAIVE_RUSH)); + await game.phaseInterceptor.to(TurnEndPhase); + expect(player.hp).toBe(player.getMaxHp()); + + game.doSwitchPokemon(1); + await game.phaseInterceptor.to(TurnEndPhase); + game.doSwitchPokemon(1); + await game.phaseInterceptor.to(TurnEndPhase); + expect(player.hp).toBe(player.getMaxHp()); + + }, 20000); +}); diff --git a/src/test/moves/growth.test.ts b/src/test/moves/growth.test.ts index 4e5add26207..ddec4225e9b 100644 --- a/src/test/moves/growth.test.ts +++ b/src/test/moves/growth.test.ts @@ -1,7 +1,7 @@ import {afterEach, beforeAll, beforeEach, describe, expect, it, vi} from "vitest"; import Phaser from "phaser"; import GameManager from "#app/test/utils/gameManager"; -import * as overrides from "#app/overrides"; +import overrides from "#app/overrides"; import { CommandPhase, EnemyCommandPhase, diff --git a/src/test/moves/hard_press.test.ts b/src/test/moves/hard_press.test.ts index c6f071a699f..87d61ecae90 100644 --- a/src/test/moves/hard_press.test.ts +++ b/src/test/moves/hard_press.test.ts @@ -1,23 +1,22 @@ import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; import Phaser from "phaser"; import GameManager from "#app/test/utils/gameManager"; -import * as overrides from "#app/overrides"; +import overrides from "#app/overrides"; import { Species } from "#enums/species"; import { - MoveEffectPhase, + MoveEffectPhase } from "#app/phases"; import { Moves } from "#enums/moves"; import { getMovePosition } from "#app/test/utils/gameManagerUtils"; import { Abilities } from "#enums/abilities"; -import { NumberHolder } from "#app/utils.js"; -import Move from "#app/data/move.js"; -import Pokemon from "#app/field/pokemon.js"; -import { allMoves, OpponentHighHpPowerAttr } from "#app/data/move.js"; +import { allMoves } from "#app/data/move.js"; describe("Moves - Hard Press", () => { let phaserGame: Phaser.Game; let game: GameManager; + const moveToCheck = allMoves[Moves.HARD_PRESS]; + beforeAll(() => { phaserGame = new Phaser.Game({ type: Phaser.HEADLESS, @@ -31,53 +30,59 @@ describe("Moves - Hard Press", () => { beforeEach(() => { game = new GameManager(phaserGame); vi.spyOn(overrides, "SINGLE_BATTLE_OVERRIDE", "get").mockReturnValue(true); - vi.spyOn(overrides, "OPP_SPECIES_OVERRIDE", "get").mockReturnValue(Species.SNORLAX); - vi.spyOn(overrides, "OPP_ABILITY_OVERRIDE", "get").mockReturnValue(Abilities.NONE); + vi.spyOn(overrides, "ABILITY_OVERRIDE", "get").mockReturnValue(Abilities.BALL_FETCH); + vi.spyOn(overrides, "OPP_SPECIES_OVERRIDE", "get").mockReturnValue(Species.MUNCHLAX); + vi.spyOn(overrides, "OPP_ABILITY_OVERRIDE", "get").mockReturnValue(Abilities.BALL_FETCH); + vi.spyOn(overrides, "OPP_MOVESET_OVERRIDE", "get").mockReturnValue([Moves.SPLASH, Moves.SPLASH, Moves.SPLASH, Moves.SPLASH]); vi.spyOn(overrides, "MOVESET_OVERRIDE", "get").mockReturnValue([Moves.HARD_PRESS]); + vi.spyOn(moveToCheck, "calculateBattlePower"); }); - it("power varies between 1 and 100, and is greater the more HP the target has", async () => { - await game.startBattle([Species.GRAVELER]); - const moveToBeUsed = allMoves[Moves.HARD_PRESS]; + it("should return 100 power if target HP ratio is at 100%", async () => { + await game.startBattle([Species.PIKACHU]); - game.doAttack(getMovePosition(game.scene, 0, moveToBeUsed)); + game.doAttack(getMovePosition(game.scene, 0, Moves.HARD_PRESS)); await game.phaseInterceptor.to(MoveEffectPhase); - const enemy = game.scene.getEnemyPokemon(); - const movePower = getMockedMovePower(enemy, game.scene.getPlayerPokemon(), moveToBeUsed); - const moveMaxBasePower = getMoveMaxBasePower(moveToBeUsed); + expect(moveToCheck.calculateBattlePower).toHaveReturnedWith(100); + }); - expect(movePower).toBe(moveMaxBasePower * enemy.getHpRatio()); + it("should return 50 power if target HP ratio is at 50%", async () => { + await game.startBattle([Species.PIKACHU]); + const targetHpRatio = .5; + const enemy = game.scene.getEnemyPokemon(); + + vi.spyOn(enemy, "getHpRatio").mockReturnValue(targetHpRatio); + + game.doAttack(getMovePosition(game.scene, 0, Moves.HARD_PRESS)); + await game.phaseInterceptor.to(MoveEffectPhase); + + expect(moveToCheck.calculateBattlePower).toHaveReturnedWith(50); + }); + + it("should return 1 power if target HP ratio is at 1%", async () => { + await game.startBattle([Species.PIKACHU]); + const targetHpRatio = .01; + const enemy = game.scene.getEnemyPokemon(); + + vi.spyOn(enemy, "getHpRatio").mockReturnValue(targetHpRatio); + + game.doAttack(getMovePosition(game.scene, 0, Moves.HARD_PRESS)); + await game.phaseInterceptor.to(MoveEffectPhase); + + expect(moveToCheck.calculateBattlePower).toHaveReturnedWith(1); + }); + + it("should return 1 power if target HP ratio is less than 1%", async () => { + await game.startBattle([Species.PIKACHU]); + const targetHpRatio = .005; + const enemy = game.scene.getEnemyPokemon(); + + vi.spyOn(enemy, "getHpRatio").mockReturnValue(targetHpRatio); + + game.doAttack(getMovePosition(game.scene, 0, Moves.HARD_PRESS)); + await game.phaseInterceptor.to(MoveEffectPhase); + + expect(moveToCheck.calculateBattlePower).toHaveReturnedWith(1); }); }); - -/** - * Calculates the mocked move power based on the attributes of the move and the opponent's high HP. - * - * @param defender - The defending Pokémon. - * @param attacker - The attacking Pokémon. - * @param move - The move being used. - * @returns The calculated move power. - */ -const getMockedMovePower = (defender: Pokemon, attacker: Pokemon, move: Move) => { - const powerHolder = new NumberHolder(move.power); - - if (move.hasAttr(OpponentHighHpPowerAttr)) { - const attr = move.getAttrs(OpponentHighHpPowerAttr); - attr[0].apply(attacker, defender, move, [ powerHolder ]); - } - - return powerHolder.value; -}; - -/** - * Retrieves the maximum base power of a move based on its attributes. - * - * @param move - The move which maximum base power is being retrieved. - * @returns The maximum base power of the move. - */ -const getMoveMaxBasePower = (move: Move) => { - const attr = move.getAttrs(OpponentHighHpPowerAttr); - - return (attr[0] as OpponentHighHpPowerAttr)["maxBasePower"]; -}; diff --git a/src/test/moves/light_screen.test.ts b/src/test/moves/light_screen.test.ts index 30a27ce4412..077c4b1b1c8 100644 --- a/src/test/moves/light_screen.test.ts +++ b/src/test/moves/light_screen.test.ts @@ -1,7 +1,7 @@ import {afterEach, beforeAll, beforeEach, describe, expect, it, vi} from "vitest"; import Phaser from "phaser"; import GameManager from "#app/test/utils/gameManager"; -import * as overrides from "#app/overrides"; +import overrides from "#app/overrides"; import { TurnEndPhase, } from "#app/phases"; diff --git a/src/test/moves/magnet_rise.test.ts b/src/test/moves/magnet_rise.test.ts index 7ed5b84654c..c30db57c29b 100644 --- a/src/test/moves/magnet_rise.test.ts +++ b/src/test/moves/magnet_rise.test.ts @@ -1,7 +1,7 @@ import {beforeAll, afterEach, beforeEach, describe, vi, it, expect} from "vitest"; import Phaser from "phaser"; import GameManager from "#app/test/utils/gameManager"; -import * as overrides from "#app/overrides"; +import overrides from "#app/overrides"; import {Moves} from "#enums/moves"; import {Species} from "#enums/species"; import {CommandPhase, TurnEndPhase} from "#app/phases.js"; diff --git a/src/test/moves/make_it_rain.test.ts b/src/test/moves/make_it_rain.test.ts index a700ff10aae..3bea38201a0 100644 --- a/src/test/moves/make_it_rain.test.ts +++ b/src/test/moves/make_it_rain.test.ts @@ -1,7 +1,7 @@ import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; import Phaser from "phaser"; import GameManager from "#app/test/utils/gameManager"; -import * as overrides from "#app/overrides"; +import overrides from "#app/overrides"; import { Species } from "#enums/species"; import { CommandPhase, diff --git a/src/test/moves/multi_target.test.ts b/src/test/moves/multi_target.test.ts new file mode 100644 index 00000000000..9159a8354e9 --- /dev/null +++ b/src/test/moves/multi_target.test.ts @@ -0,0 +1,181 @@ +import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; +import Phaser from "phaser"; +import GameManager from "#app/test/utils/gameManager"; +import overrides from "#app/overrides"; +import { Moves } from "#enums/moves"; +import { getMoveTargets } from "#app/data/move.js"; +import { Abilities } from "#app/enums/abilities.js"; +import { Species } from "#app/enums/species.js"; +import { getMovePosition } from "../utils/gameManagerUtils"; +import { TurnEndPhase } from "#app/phases.js"; + +const TIMEOUT = 20 * 1000; + +describe("Moves - Multi target", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + + beforeAll(() => { + phaserGame = new Phaser.Game({ + type: Phaser.HEADLESS, + }); + }); + + afterEach(() => { + afterTrial(game); + }); + + beforeEach(() => { + game = beforeTrial(phaserGame); + }); + + it("2v2 - target all near others - check modifier", () => checkTargetMultiplier(game, Moves.EARTHQUAKE, false, false, true), TIMEOUT); + + it("2v2 - target all near others - damage decrase", () => checkDamageDecrease(game, Moves.EARTHQUAKE, false, false, true), TIMEOUT); + + it("2v1 - target all near others - check modifier", () => checkTargetMultiplier(game, Moves.EARTHQUAKE, false, true, true), TIMEOUT); + + it("2v1 - target all near others - damage decrase", () => checkDamageDecrease(game, Moves.EARTHQUAKE, false, true, true), TIMEOUT); + + it("1v2 - target all near others - check modifier", () => checkTargetMultiplier(game, Moves.EARTHQUAKE, true, false, true), TIMEOUT); + + it("1v2 - target all near others - damage decrase", () => checkDamageDecrease(game, Moves.EARTHQUAKE, true, false, true), TIMEOUT); + + it("1v1 - target all near others - check modifier", () => checkTargetMultiplier(game, Moves.EARTHQUAKE, true, true, false), TIMEOUT); + + it("2v2 (immune) - target all near others - check modifier", () => checkTargetMultiplier(game, Moves.EARTHQUAKE, false, false, true, Abilities.LEVITATE), TIMEOUT); + + it("2v2 (immune) - target all near others - damage decrase", () => checkDamageDecrease(game, Moves.EARTHQUAKE, false, false, true, Abilities.LEVITATE), TIMEOUT); + + it("2v2 - target all near enemies - check modifier", () => checkTargetMultiplier(game, Moves.HYPER_VOICE, false, false, true), TIMEOUT); + + it("2v2 - target all near enemies - damage decrase", () => checkDamageDecrease(game, Moves.HYPER_VOICE, false, false, true), TIMEOUT); + + it("2v1 - target all near enemies - check modifier", () => checkTargetMultiplier(game, Moves.HYPER_VOICE, false, true, false), TIMEOUT); + + it("2v1 - target all near enemies - no damage decrase", () => checkDamageDecrease(game, Moves.HYPER_VOICE, false, true, false), TIMEOUT); + + it("1v2 - target all near enemies - check modifier", () => checkTargetMultiplier(game, Moves.HYPER_VOICE, true, false, true), TIMEOUT); + + it("1v2 - target all near enemies - damage decrase", () => checkDamageDecrease(game, Moves.HYPER_VOICE, true, false, true), TIMEOUT); + + it("1v1 - target all near enemies - check modifier", () => checkTargetMultiplier(game, Moves.HYPER_VOICE, true, true, false), TIMEOUT); + + it("2v2 (immune) - target all near enemies - check modifier", () => checkTargetMultiplier(game, Moves.HYPER_VOICE, false, false, true, Abilities.SOUNDPROOF), TIMEOUT); + + it("2v2 (immune) - target all near enemies - damage decrase", () => checkDamageDecrease(game, Moves.HYPER_VOICE, false, false, true, Abilities.SOUNDPROOF), TIMEOUT); + +}); + +async function checkTargetMultiplier(game: GameManager, attackMove: Moves, killAlly: boolean, killSecondEnemy: boolean, shouldMultiplied: boolean, oppAbility?: Abilities) { + // play an attack and check target count + vi.spyOn(overrides, "OPP_ABILITY_OVERRIDE", "get").mockReturnValue(oppAbility ? oppAbility : Abilities.BALL_FETCH); + await game.startBattle(); + + const playerPokemonRepr = game.scene.getPlayerField(); + expect(playerPokemonRepr).not.toBeUndefined(); + + killAllyAndEnemy(game, killAlly, killSecondEnemy); + + const targetCount = getMoveTargets(playerPokemonRepr[0], attackMove).targets.length; + const targetMultiplier = targetCount > 1 ? 0.75 : 1; + + if (shouldMultiplied) { + expect(targetMultiplier).toBe(0.75); + } else { + expect(targetMultiplier).toBe(1); + } +} + +async function checkDamageDecrease(game: GameManager, attackMove: Moves, killAlly: boolean, killSecondEnemy: boolean, shouldDecreased: boolean, ability?: Abilities) { + // Tested combination on first turn, 1v1 on second turn + await game.runToSummon([Species.EEVEE, Species.EEVEE]); + + if (ability !== undefined) { + game.scene.getPlayerField()[1].abilityIndex = ability; + game.scene.getEnemyField()[1].abilityIndex = ability; + } + + game.doAttack(getMovePosition(game.scene, 0, Moves.SPLASH)); + game.doAttack(getMovePosition(game.scene, 1, Moves.SPLASH)); + + + await game.phaseInterceptor.to(TurnEndPhase); + + killAllyAndEnemy(game, killAlly, killSecondEnemy); + await game.toNextTurn(); + + const initialHp = game.scene.getEnemyField()[0].hp; + game.doAttack(getMovePosition(game.scene, 0, attackMove)); + if (!killAlly) { + game.doAttack(getMovePosition(game.scene, 1, Moves.SPLASH)); + } + + await game.phaseInterceptor.to(TurnEndPhase); + const afterHp = game.scene.getEnemyField()[0].hp; + + killAllyAndEnemy(game, true, true); + await game.toNextTurn(); + + game.scene.getEnemyField()[0].hp = initialHp; + + const initialHp1v1 = game.scene.getEnemyField()[0].hp; + game.doAttack(getMovePosition(game.scene, 0, attackMove)); + + await game.phaseInterceptor.to(TurnEndPhase); + const afterHp1v1 = game.scene.getEnemyField()[0].hp; + + if (shouldDecreased) { + expect(initialHp - afterHp).toBeLessThan(0.75 * (initialHp1v1 - afterHp1v1) + 2); + expect(initialHp - afterHp).toBeGreaterThan(0.75 * (initialHp1v1 - afterHp1v1) - 2); + } else { + expect(initialHp - afterHp).toBeLessThan(initialHp1v1 - afterHp1v1 + 2); + expect(initialHp - afterHp).toBeGreaterThan(initialHp1v1 - afterHp1v1 - 2); + } + +} + +// To simulate the situation where all of the enemies or the player's Pokemons dies except for one. +function killAllyAndEnemy(game: GameManager, killAlly: boolean, killSecondEnemy: boolean) { + if (killAlly) { + leaveOnePlayerPokemon(game); + expect(game.scene.getPlayerField().filter(p => p.isActive()).length).toBe(1); + } + if (killSecondEnemy) { + leaveOneEnemyPokemon(game); + expect(game.scene.getEnemyField().filter(p => p.isActive()).length).toBe(1); + } +} + +function leaveOnePlayerPokemon(game: GameManager) { + const playerPokemons = game.scene.getParty(); + for (let i = 1; i < playerPokemons.length; i++) { + playerPokemons[i].hp = 0; + } + expect(playerPokemons.filter(pokemon => pokemon.hp > 0).length).toBe(1); +} + +function leaveOneEnemyPokemon(game: GameManager) { + const enemyPokemons = game.scene.getEnemyParty(); + for (let i = 1; i < enemyPokemons.length; i++) { + enemyPokemons[i].hp = 0; + } +} + +function beforeTrial(phaserGame: Phaser.Game, single: boolean = false) { + const game = new GameManager(phaserGame); + vi.spyOn(overrides, "SINGLE_BATTLE_OVERRIDE", "get").mockReturnValue(false); + vi.spyOn(overrides, "DOUBLE_BATTLE_OVERRIDE", "get").mockReturnValue(true); + vi.spyOn(overrides, "MOVESET_OVERRIDE", "get").mockReturnValue([Moves.EARTHQUAKE, Moves.HYPER_VOICE, Moves.SURF, Moves.SPLASH]); + vi.spyOn(overrides, "ABILITY_OVERRIDE", "get").mockReturnValue(Abilities.BALL_FETCH); + vi.spyOn(overrides, "OPP_MOVESET_OVERRIDE", "get").mockReturnValue([Moves.SPLASH, Moves.SPLASH, Moves.SPLASH, Moves.SPLASH]); + vi.spyOn(overrides, "NEVER_CRIT_OVERRIDE", "get").mockReturnValue(true); + vi.spyOn(overrides, "STARTING_LEVEL_OVERRIDE", "get").mockReturnValue(50); + vi.spyOn(overrides, "OPP_LEVEL_OVERRIDE", "get").mockReturnValue(40); + vi.spyOn(overrides, "OPP_SPECIES_OVERRIDE", "get").mockReturnValue(Species.EEVEE); + return game; +} + +function afterTrial(game: GameManager) { + game.phaseInterceptor.restoreOg(); +} diff --git a/src/test/moves/octolock.test.ts b/src/test/moves/octolock.test.ts new file mode 100644 index 00000000000..b0f3b4d3ef7 --- /dev/null +++ b/src/test/moves/octolock.test.ts @@ -0,0 +1,78 @@ +import {afterEach, beforeAll, beforeEach, describe, expect, it, vi} from "vitest"; +import Phaser from "phaser"; +import GameManager from "#app/test/utils/gameManager"; +import overrides from "#app/overrides"; +import { CommandPhase, MoveEndPhase, TurnInitPhase } from "#app/phases"; +import {getMovePosition} from "#app/test/utils/gameManagerUtils"; +import {BattleStat} from "#app/data/battle-stat"; +import { Abilities } from "#enums/abilities"; +import { Moves } from "#enums/moves"; +import { Species } from "#enums/species"; +import { TrappedTag } from "#app/data/battler-tags.js"; + +describe("Moves - Octolock", () => { + describe("integration tests", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + + beforeAll(() => { + phaserGame = new Phaser.Game({ + type: Phaser.HEADLESS, + }); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); + + beforeEach(() => { + game = new GameManager(phaserGame); + + vi.spyOn(overrides, "SINGLE_BATTLE_OVERRIDE", "get").mockReturnValue(true); + + vi.spyOn(overrides, "OPP_SPECIES_OVERRIDE", "get").mockReturnValue(Species.RATTATA); + vi.spyOn(overrides, "OPP_MOVESET_OVERRIDE", "get").mockReturnValue([Moves.SPLASH, Moves.SPLASH, Moves.SPLASH, Moves.SPLASH]); + vi.spyOn(overrides, "OPP_ABILITY_OVERRIDE", "get").mockReturnValue(Abilities.NONE); + + vi.spyOn(overrides, "STARTING_LEVEL_OVERRIDE", "get").mockReturnValue(2000); + vi.spyOn(overrides, "MOVESET_OVERRIDE", "get").mockReturnValue([Moves.OCTOLOCK, Moves.SPLASH]); + vi.spyOn(overrides, "ABILITY_OVERRIDE", "get").mockReturnValue(Abilities.NONE); + }); + + it("Reduces DEf and SPDEF by 1 each turn", { timeout: 10000 }, async () => { + await game.startBattle([Species.GRAPPLOCT]); + + const enemyPokemon = game.scene.getEnemyField(); + + // use Octolock and advance to init phase of next turn to check for stat changes + game.doAttack(getMovePosition(game.scene, 0, Moves.OCTOLOCK)); + await game.phaseInterceptor.to(TurnInitPhase); + + expect(enemyPokemon[0].summonData.battleStats[BattleStat.DEF]).toBe(-1); + expect(enemyPokemon[0].summonData.battleStats[BattleStat.SPDEF]).toBe(-1); + + // take a second turn to make sure stat changes occur again + await game.phaseInterceptor.to(CommandPhase); + game.doAttack(getMovePosition(game.scene, 0, Moves.SPLASH)); + + await game.phaseInterceptor.to(TurnInitPhase); + expect(enemyPokemon[0].summonData.battleStats[BattleStat.DEF]).toBe(-2); + expect(enemyPokemon[0].summonData.battleStats[BattleStat.SPDEF]).toBe(-2); + }); + + it("Traps the target pokemon", { timeout: 10000 }, async () => { + await game.startBattle([Species.GRAPPLOCT]); + + const enemyPokemon = game.scene.getEnemyField(); + + // before Octolock - enemy should not be trapped + expect(enemyPokemon[0].findTag(t => t instanceof TrappedTag)).toBeUndefined(); + + game.doAttack(getMovePosition(game.scene, 0, Moves.OCTOLOCK)); + + // after Octolock - enemy should be trapped + await game.phaseInterceptor.to(MoveEndPhase); + expect(enemyPokemon[0].findTag(t => t instanceof TrappedTag)).toBeDefined(); + }); + }); +}); diff --git a/src/test/moves/purify.test.ts b/src/test/moves/purify.test.ts index 21ebb3d5515..4addf54fa34 100644 --- a/src/test/moves/purify.test.ts +++ b/src/test/moves/purify.test.ts @@ -1,7 +1,7 @@ import {afterEach, beforeAll, beforeEach, describe, expect, test, vi} from "vitest"; import Phaser from "phaser"; import GameManager from "#app/test/utils/gameManager"; -import * as overrides from "#app/overrides"; +import overrides from "#app/overrides"; import { MoveEndPhase, } from "#app/phases"; diff --git a/src/test/moves/rage_powder.test.ts b/src/test/moves/rage_powder.test.ts index 1116810f743..10469b8d7a9 100644 --- a/src/test/moves/rage_powder.test.ts +++ b/src/test/moves/rage_powder.test.ts @@ -1,7 +1,7 @@ import {afterEach, beforeAll, beforeEach, describe, expect, test, vi} from "vitest"; import Phaser from "phaser"; import GameManager from "#app/test/utils/gameManager"; -import * as overrides from "#app/overrides"; +import overrides from "#app/overrides"; import { CommandPhase, SelectTargetPhase, diff --git a/src/test/moves/reflect.test.ts b/src/test/moves/reflect.test.ts index 00fb9a69f2f..8e998e2eb44 100644 --- a/src/test/moves/reflect.test.ts +++ b/src/test/moves/reflect.test.ts @@ -1,7 +1,7 @@ import {afterEach, beforeAll, beforeEach, describe, expect, it, vi} from "vitest"; import Phaser from "phaser"; import GameManager from "#app/test/utils/gameManager"; -import * as overrides from "#app/overrides"; +import overrides from "#app/overrides"; import { TurnEndPhase, } from "#app/phases"; diff --git a/src/test/moves/roost.test.ts b/src/test/moves/roost.test.ts index db9363313a1..af64fa0b88f 100644 --- a/src/test/moves/roost.test.ts +++ b/src/test/moves/roost.test.ts @@ -1,7 +1,7 @@ import {afterEach, beforeAll, beforeEach, describe, expect, test, vi} from "vitest"; import Phaser from "phaser"; import GameManager from "#app/test/utils/gameManager"; -import * as overrides from "#app/overrides"; +import overrides from "#app/overrides"; import { Species } from "#app/enums/species.js"; import { Moves } from "#app/enums/moves.js"; import { getMovePosition } from "../utils/gameManagerUtils"; diff --git a/src/test/moves/spikes.test.ts b/src/test/moves/spikes.test.ts index 0544442f31e..cd9d8f88c5d 100644 --- a/src/test/moves/spikes.test.ts +++ b/src/test/moves/spikes.test.ts @@ -1,7 +1,7 @@ import {afterEach, beforeAll, beforeEach, describe, expect, it, vi} from "vitest"; import Phaser from "phaser"; import GameManager from "#app/test/utils/gameManager"; -import * as overrides from "#app/overrides"; +import overrides from "#app/overrides"; import { CommandPhase } from "#app/phases"; diff --git a/src/test/moves/spotlight.test.ts b/src/test/moves/spotlight.test.ts index ec3f4977007..f9fb3016ec1 100644 --- a/src/test/moves/spotlight.test.ts +++ b/src/test/moves/spotlight.test.ts @@ -1,7 +1,7 @@ import {afterEach, beforeAll, beforeEach, describe, expect, test, vi} from "vitest"; import Phaser from "phaser"; import GameManager from "#app/test/utils/gameManager"; -import * as overrides from "#app/overrides"; +import overrides from "#app/overrides"; import { CommandPhase, SelectTargetPhase, diff --git a/src/test/moves/tackle.test.ts b/src/test/moves/tackle.test.ts index dabf7db5f7e..d01c62c3db9 100644 --- a/src/test/moves/tackle.test.ts +++ b/src/test/moves/tackle.test.ts @@ -1,7 +1,7 @@ import {afterEach, beforeAll, beforeEach, describe, expect, it, vi} from "vitest"; import Phaser from "phaser"; import GameManager from "#app/test/utils/gameManager"; -import * as overrides from "#app/overrides"; +import overrides from "#app/overrides"; import { CommandPhase, EnemyCommandPhase, TurnEndPhase, diff --git a/src/test/moves/tail_whip.test.ts b/src/test/moves/tail_whip.test.ts index 3e89e9cb14e..a1c9dba0bab 100644 --- a/src/test/moves/tail_whip.test.ts +++ b/src/test/moves/tail_whip.test.ts @@ -1,7 +1,7 @@ import {afterEach, beforeAll, beforeEach, describe, expect, it, vi} from "vitest"; import Phaser from "phaser"; import GameManager from "#app/test/utils/gameManager"; -import * as overrides from "#app/overrides"; +import overrides from "#app/overrides"; import { CommandPhase, EnemyCommandPhase, diff --git a/src/test/moves/tailwind.test.ts b/src/test/moves/tailwind.test.ts index efba97f8fe1..6f700e76170 100644 --- a/src/test/moves/tailwind.test.ts +++ b/src/test/moves/tailwind.test.ts @@ -1,7 +1,7 @@ import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; import Phaser from "phaser"; import GameManager from "#app/test/utils/gameManager"; -import * as overrides from "#app/overrides"; +import overrides from "#app/overrides"; import { Species } from "#enums/species"; import { TurnEndPhase, diff --git a/src/test/moves/thousand_arrows.test.ts b/src/test/moves/thousand_arrows.test.ts index c641643593e..b46bef9626f 100644 --- a/src/test/moves/thousand_arrows.test.ts +++ b/src/test/moves/thousand_arrows.test.ts @@ -1,7 +1,7 @@ import {afterEach, beforeAll, beforeEach, describe, expect, test, vi} from "vitest"; import Phaser from "phaser"; import GameManager from "#app/test/utils/gameManager"; -import * as overrides from "#app/overrides"; +import overrides from "#app/overrides"; import { MoveEffectPhase, TurnEndPhase diff --git a/src/test/moves/tidy_up.test.ts b/src/test/moves/tidy_up.test.ts index 78b72492e04..2dea945acc6 100644 --- a/src/test/moves/tidy_up.test.ts +++ b/src/test/moves/tidy_up.test.ts @@ -1,7 +1,7 @@ import {afterEach, beforeAll, beforeEach, describe, expect, it, vi} from "vitest"; import Phaser from "phaser"; import GameManager from "#app/test/utils/gameManager"; -import * as overrides from "#app/overrides"; +import overrides from "#app/overrides"; import { MoveEndPhase, TurnEndPhase } from "#app/phases"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; diff --git a/src/test/pre.test.ts b/src/test/pre.test.ts new file mode 100644 index 00000000000..6ed29dce481 --- /dev/null +++ b/src/test/pre.test.ts @@ -0,0 +1,6 @@ +import Overrides, { defaultOverrides } from "#app/overrides"; +import { expect, test } from "vitest"; + +test("Overrides are default values", () => { + expect(Overrides).toEqual(defaultOverrides); +}); diff --git a/src/test/ui/transfer-item.test.ts b/src/test/ui/transfer-item.test.ts index 336e5bccd26..cc39540ae4f 100644 --- a/src/test/ui/transfer-item.test.ts +++ b/src/test/ui/transfer-item.test.ts @@ -2,7 +2,7 @@ import { BerryType } from "#app/enums/berry-type"; import { Moves } from "#app/enums/moves"; import { Species } from "#app/enums/species"; import { Button } from "#app/enums/buttons"; -import * as overrides from "#app/overrides"; +import overrides from "#app/overrides"; import { BattleEndPhase, SelectModifierPhase diff --git a/src/test/utils/gameManager.ts b/src/test/utils/gameManager.ts index 84d39024dc9..ac18daaaada 100644 --- a/src/test/utils/gameManager.ts +++ b/src/test/utils/gameManager.ts @@ -8,7 +8,8 @@ import { LoginPhase, NewBattlePhase, SelectStarterPhase, - TitlePhase, TurnInitPhase, + SelectTargetPhase, + TitlePhase, TurnEndPhase, TurnInitPhase, TurnStartPhase, } from "#app/phases"; import BattleScene from "#app/battle-scene.js"; @@ -170,6 +171,15 @@ export default class GameManager { this.onNextPrompt("CommandPhase", Mode.FIGHT, () => { (this.scene.getCurrentPhase() as CommandPhase).handleCommand(Command.FIGHT, movePosition, false); }); + + // Confirm target selection if move is multi-target + 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(); + if (move.isMultiTarget()) { + handler.processInput(Button.ACTION); + } + }, () => this.isCurrentPhase(CommandPhase) || this.isCurrentPhase(TurnEndPhase)); } /** diff --git a/src/test/utils/gameManagerUtils.ts b/src/test/utils/gameManagerUtils.ts index db9ba7174a9..d83805e59e8 100644 --- a/src/test/utils/gameManagerUtils.ts +++ b/src/test/utils/gameManagerUtils.ts @@ -6,6 +6,8 @@ import {Starter} from "#app/ui/starter-select-ui-handler"; import {GameModes, getGameMode} from "#app/game-mode"; import {getPokemonSpecies, getPokemonSpeciesForm} from "#app/data/pokemon-species"; import {PlayerPokemon} from "#app/field/pokemon"; +import { Moves } from "#app/enums/moves"; +import BattleScene from "#app/battle-scene"; export function blobToString(blob) { return new Promise((resolve, reject) => { @@ -79,9 +81,10 @@ export function waitUntil(truth) { }); } -export function getMovePosition(scene, pokemonIndex, moveIndex) { +/** 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) { const playerPokemon = scene.getPlayerField()[pokemonIndex]; const moveSet = playerPokemon.getMoveset(); - const index = moveSet.findIndex((move) => move.moveId === moveIndex); + const index = moveSet.findIndex((m) => m.moveId === move); return index; } diff --git a/src/test/utils/mocks/mocksContainer/mockText.ts b/src/test/utils/mocks/mocksContainer/mockText.ts index 1dd440fde7c..f4513e20926 100644 --- a/src/test/utils/mocks/mocksContainer/mockText.ts +++ b/src/test/utils/mocks/mocksContainer/mockText.ts @@ -8,6 +8,7 @@ export default class MockText { private textureManager; public list = []; public style; + public text = ""; constructor(textureManager, x, y, content, styleOptions) { this.scene = textureManager.scene; @@ -17,6 +18,8 @@ export default class MockText { // Phaser.GameObjects.Text.prototype.updateText = () => null; // Phaser.Textures.TextureManager.prototype.addCanvas = () => {}; UI.prototype.showText = this.showText; + this.text = ""; + this.phaserText = ""; // super(scene, x, y); // this.phaserText = new Phaser.GameObjects.Text(scene, x, y, content, styleOptions); } @@ -150,7 +153,8 @@ export default class MockText { setText(text) { // Sets the text this Game Object will display. - // return this.phaserText.setText(text); + // return this.phaserText.setText\(text); + this.text = text; } setAngle(angle) { diff --git a/src/test/utils/saves/everything.prsv b/src/test/utils/saves/everything.prsv index 2e4a851eb8f..1985a6649ca 100644 --- a/src/test/utils/saves/everything.prsv +++ b/src/test/utils/saves/everything.prsv @@ -1 +1 @@ -U2FsdGVkX18MDWJUMG1IAj6PNoJ0MdLbA7p5OHjZmOMeI33tI8HYH9aoFDTpEOqldDfq0OGMCqDg0dRHMgB1nCtEIqA9gtWNL82bhIT4uYozaNmWJ4vWm6M1IDKpeWrwjdy5KCb2ufIzrwDYeH/XkbsI6KCh2t1JrYOiCblY+VuUW0Ha0m5xvnq/6Ac13Qo1Iv2C7prgIS0oOrrTQuwvP2KR2h5am9WFCRWtvMYHaYKI8KxXbxxD6DGN7W1yQJj4GDNvZ8WwWbCC8Okj5h6Yp3MuJ7RTj1XFHmWRwSJJ5Fp+asq8ToWmlrE2OszTEA6yYx8ncywOJHns/sW7108rix7NuSe5loyw2ZFL7pCbIKXuuZcrIfyic+TlG9rstkb64tPyAmF4wZEnCmERrPdcmhgqeEU/aJkDsUtQDwLRPeGejGA4Kif3W9o3yDAcTNO8woESyxqUjdbcb71CJ36HHIZMU8WwqcE26P9OTa3UwemxS0kcortUPK+T86NwgoGnZA/4Em1BuhcYFjOlohDJXH0l1QoLKzRZZCNUdqt4qZY30fVMMOpGUbt3NCbtBPazG/g8bYehqsM/9xTUwaoCgS/DtJ/LbKGo4ByBpoNJzlWtSus6BfrXcQSGFJoWhsLEVHFJ6oMbS8ZupTiX5nEfEiJGCY3exRp1bbQ5a2UwEheIyfGk5GhEF8026PQ9011BVBNerOfmvCqEgBFlJVfcUEHUbIRkpOM11QctMAmjTuROfBd+8LFHt/CbsnpEv4sVwZExMDoyaHSDY6sCMrQWPfbUf28NC2MxW6X0dV7ylKwZXrSyGJlro68dqlDI86hjltbocrUuLZykMoNT5iSZzGVYe/7r4Bo4jjF+AeUh0NQUE7Q69/3Klts83oEla9/xn0eR1RToffidW/b8C01DUpv+++zFB7d1Zq5b4MV/HFlhvc/eRya3Mr/vLHvWXk603rs1LxIF/PGY7p8QSgU+50/T2XS1gzbO6m6Pu9N6TzV/lk+MK4XnxdOEtTVBZsK8cQ94KUVjADds6vN1TiGr/QgngXvyQGZgmDhFbDAwQWKlOIItcGw30NHzFU8oxP3B8L/6ERgIJdBhco7cLEKXF3GeiUGxaW//+OCoAVqxt81Nggf9h28MBIO9s7YQl6dWNOm+tkigpxgVcFEBybuzEVmzPIZKnEMq269JCtWZ/b6RyPaa1uPIvP1986txHZs4uIJtqr7Ed7E2542OwpCxITqQNu2M5ffVBEC8RfSVFKdvUfsOM6zvTH0/f8Q12kmYIWU4tzUbkTkf0Bna53uosz0LyDvKRWc5lwEATs4Akp5IUkbGGiIXUaXUXSuSN+Wlmy6any5Ibz+fxoQaCsbapQTzoti1AaCY2VJ8Ih4K5n0Lj2M8aX7GHHplswVDMUSzuL9nml4AJk0fkMUMy66Pjw/zxVqBfE/tLd+zTCpI6YAMbcXo3gxs4tTYMxwwltvmKcl1o2ugTSxKJ64iEV/hqHdgyFu9u7lqKdJ56Wag0NftZO0ba0ruzd1OzXDTlQhFXSckeOFjagiUHiGO4nhs3L7Acoyi84eBgB0StCAC0uQgqUGiIvvOEPMHV9FTHOdewqFRtHOE/iBJ6hqTsJoMaCDwaZV5KHwDpdl/XUTBKXmeWqVa8CbbjTYZd6+zYx5WkJ3EUQ9XulgHHCJQsDEjn9nZt4NEJYVX+iket/PzVtOXAV3+NGa4raiNUFZQChf0q3sgumyj5EVKwLEUkAdht5qpEuOV2I4GFb791iCoXVmODGI70uyukRFiilh3wH+SQFIDdB3F5D9tx+lDDNpLWx4/rSK8VjGqzAFAO/OkErHLtkP/Ao2jgqJVHqI48GhQLsTUx6DQ7PxNtM7KiqH+DKml8UICyWolwTj/di4zXcuFyr86uA6kH9UdL2viouJneaMM8ZtzQVOUqxm3VEMb6wr60ooe86oxKAqYkWtCSRB/kDaDmBAP5LcAgIr1+8QZcm/qNJYJATO7gDWQohT4E/NHQGd3jnF9+zN6Kz3O8VXe96VOscjS4QCLJlOnjqAFuu/t79JFZLgXZCYU2Ybj0DIADYUlj08Me3KeEr+z4GF/8Z2oE2f0PoR1AOs50TIaFmJOy4arR3hDXiY1MKbi2H534rGlbwDg//NOEoawkO5SYzXsZK4oZMWC7FTTMfX7iOkTNkPE///vb3AUexPOkDrp+kfZH/xdD0sNlggyNy2uDu91NjramnjvFIqQ5KKu0AXhGt4NfSbZtODJhZukqt4IadmAjKPIQn2Kq+KzajY22cd+Drw/XCM1oSItIuad/z0+rUOhbKw/3ImKc4XJEgWGixz8A7RptGMZ5qrs9RJgwso+1Jzb+++8D4cMmbqIGrZNDycJbqT8IjFUaydlh8IIijay1K6H5FBC9zzsZs4mRk6W4bvJt0LpvpxwK//BmwDAywi1KtPiUeqgRQ3fYmLNyS1OZTha0ivZ16TPTbuq+UMdL7wLmLkNPvfaNz6er5l6G3mR6ieghxRUjvLTdrGaxaiXjAiSuIrNdBcUHGkypviSwZM+p/t/vtJa0LZqLwKRoo/LiSj8zEvbQtv1aiYpy+0gRBXSt9c9EzGzWGwr/gIrLr87BlK3vvNNy5utM54YG+iCVBmGXyqdBUxpabV9Uxm20ISgtQhKU51jtSmpGByHa+M0IHjeeuouhxAbis/s5sV9po6fILdlo53FZzTJveky/RzMA3POxfG2zNcmv/ZL1L+29oJHC6mhJuttdAccU+lPmdHkKsC2VJcu0c1kR2GZJO1WguqHo5pg84dn5sysi2MCsq+Rfypqme6VAqTMB2Mi3Lg/RLbiDp4vIDLv8OQoLI+yQ6ODx31pQGPt6dPUv8bJWST6VkKi3WMCibYutWnVnVbjSqK5d+Cuvl7pU4knD+gIYFmlvMxFJm2OpCl55XK8VtWboPWsv4ZTWq4CPlZO4mXg0L2x0+ohbPnixqvot0p3f20tIqSHWI3eA38v/9B54heWBCZrsxOxJmF+ys0UbkK9VJs1R5ZpNKJcnZnvQIOp7rFN9Wt8orQ47/wjvOFhTpuiWQMXOAxk0TSk9opPXKU93xdJmmjCrHHitR39E9ZT18qfAHU17aSUc5a8zbLeBvhd80APJQmpgPvLbvvMw72nGp6oeXNthC8rQ4mJapn2ozLVSSA5JVvmUNLRLhP0O0sTvDrXguu0yKWc62bP9/QC2fFae+0oGoT8pHatQeVzjc4jWWwsIuBfjebWf52sJClRoY9iRfID+Hu7emgt8GqSvS/TI7V6YCzwreFXZSt+C0RzHlLntsV0jqeGIs2vLrrZ8rV5LwcynDqlE0S5N9x/j5EyYHf6SJu7OO8pf+vh33qHqfdDmOSHX5fOvxE8snmk6cgR7MQFBbW5JinELdAzoB0uuGoNJGlXqS2xUpmtwYAX8Wh4dm5TW4mhMuo2WFBaWU1ejFquQkkFNXjEwaR87t5nyo45CkWqKmZ6xVNbkoVDqEMc+wCRcsGgp9aQ5o1fFrtKTef91gyrF3b1fhKlhSn3X/r5gOqo9y/i80vT09L9byIN1v1dBqz2zC0Bd8kGeaCZFEezgQeznOZ02TbPBhePJL/qH3ZsEm0CPItb/O16l4UZb/uPgdWLsIvH0VN1i91jwR5v3IEvyHw7t/y1c0/0LjbNoewaX+CQ2iW9E1P6tQd32ctIhGCfj18SBLzZyayxCZtFZjJekT8zRDIN7bLFkVKGQP5/qeTTplV2fQ0CHyAA71WfUYzGgRxtd5DjecBa0JuW15LrY7OaCtifMea1xUMm+MVtA2yY0UQGK4M6UWAuWQfYyOUfFL5bXcmvWANuY7we3CLRxuIlo8OkbGtzQNfMxytMEX39X5tIVhiW9GyqlqaYIT95DwFW9JFiIz9o/JdeOZyN24HXhVlmJLzTGUP1KLnRX7XDLF7n+3p2HZdJHSg7HoUBooYaVOwY9FQW25AH/UlP3/wBwPdBBDtLviRwTfuQSlV1TyujfiQoyeaYRGIwrxYZMLyRNoro+XWn9/s742weUSUqZ+qeviWifpAMHM/mH6sYYTKWzny3gX+PLWOEkHFCAcpPC6QJAiEIFK85eW5KzWVEumhpgljmGazvxYMrrCW6engEzM9U6Cl+Yp4lQaZ+HtOwGxeTiRorihLLpW9LI4gbzG4v+DG7bfSwQY6d380fEs2MYM7bx8c4D6TyDHwu8OBJU9liYsC3CRvCf8zbvgDe0jkrjyhcVJJctKmmSuzJdykJdGvGXOf74q6JXX9Lg3V+ODVc6g7tJhuOYscQyQNM8G+VhT0Ayu+eHCdlNZWUeO3j6ejCCFzDtgtz7FdFRBjJ8zTIvkikf9CoWAxW7NCRgOHE69Hg778o/u6pBcGqQS43SdKOdrGxEzTyuU4HI7a1hd+v91qeKD4MS7rSFQ4K+WhdsTpsxr0M8qEfZa9S8HnPXW9XaZH1hLUWaAosxDGYg/2JDS7nNQn6k2oW5VeaKrogCneFp9waQGGcLGsK5oxUoYAmCJgvJaHNTcr43XukNT+35tyEtiEWhDwl5rHPnoAcgBMkAAugidpGe9h46JrDECU/XHc5B4sV+NAdMF/YiWQXMcomu9nvpAOjzcqFvmK+15+jrBJL4OTVu7ZL/B2pPOC+Dtr7yxAL8XKbtXJTAWBH7wa7/vu54xqWsbNLJCVh65//LPJD7Dz6nKFwnRpXh2D483e8QWPGgR2VQQAXV0mwvrqCLm1njnYPPpQYnYcEgEESUrJpjuFYMx7zL2p+sb7LDSkVgVLvopsvNejRc0T18p78ELQZq9FBpRI5ucKxpZb7C7ZVHskT0qwj98wV8hKN2DjavfHyjAILEFeQpV36NO5CQLRTAbPbm4n21qFqi4PZwB0lcX/N0sNRd5w1z3g/isA5pRh3xwB+HK03uln1VKLTN2pPbCVKc5OEXSD2Y+aigSknYvYbsoex6Wa0JIbyibb8TpktTJp171F7Lg+c+C0CBxcy1s6MQPj4GVLc+/mE+3nEMwbD5OBa9W73sZP/B7ZjisGNevRzaLX1dMn4CiPGRQiLYd+Gf3d4Aa1OF8C7fp1KJVEEvzrjhp4kCpZI2jsw3YppoPLrYhFDLHnEfogJvm3cXotGzRHcX5iCCe5XD79Erno9OXfBpbkDYUyTf6vOu6IU1XKXxjGQoJgus6M8IU0V+pM0fWzDwPLTwDHTstkF01/pyzeGLklHUoRCvd+SIKKULZPZCLOE2tuZnuxJ0tgBszAigEv7YxUwqMqPxcqgQyZ+/tqiHggPyx54n9oYjuDYPQ3nWj/55dOEHzvm2Mv7mjTt5XxOhHvphZWyBPoIcrM9B/te4VOsEXu4axnZkRmA70Ycf7bDUERbKJoPd6mH7Valzwfod6M9NreiRIc4HYijdZRr4Jm//+BB2IgSVPKLVxeJrNBYusJPQKa2eAYPrq0MtrYozJucBVEIcLhCOm80RbYqCyS30uPWINHu3/RIkyzVvNB9DS7sR7b/F8T1REcjJD7YWVZNT77HMSuhcWPzugWcX5BaKb7+eyM6/EzALsgZGGyn2FNKI5YHhLry9g2xbv9/sAAev9FAl6VTlOgEUH4sJDYlUWSia5NyKOu4Dq1cr3ql1PbxopGXyxxCPZOVdn6SFLLDms8S8HZX+hhhFjgT9ngzZL3k6ye7mQ9ICuLRjolCDRHwN6hwfZkvoB1J4smMTl0C48EZ51+3RRlkf0iZUzVugbGYmKEhcgOdxEM03z6XRzmallbxUbet1Nl5Ft4IL4el41vTtMgngtuICDjiaDIA+Ye/12Z+xlTBGGlxC+xbUosYjovTm8doP26jyRneSl+3KVTv2DpCCg0ieux4CESqtqVVXePK0RR4Rq7RGumL7O7i4+UUEPvwHsaBGuqvAS8aVaGYkH2r4dhjvxMHvR4FKGZc8doZgA5dmqLOGv7d7u422kS9XJvWsPpKwV9r1QM/jZ9EZHVh/Wg06f6MbMEb4BShMwYlo5zdtd7/0HSZTBhcJq7rmK6FLm735vQJ49xnbXSUXHEUaTumQK0gkUO9g3HfhqosN/ykUS4Sjx5PfM1jv5PTXGtQMqxLuZE6dhfXO69P88bdbHWHjSwtUmbNzX/06fJFJPaKrTVSnGr3faAx5VeBUDGKkJYHrrNWzFBy//gwgzctOFDBbK/y9P40ztO46txGvEMn2bGzKwdiSSWalesF1A2dR2/UAv/pQ/i6KguKNMqqd53vKcQVFYd3hhHiuBu0GtazAobGiBuX0FRyeK4pR81hDrwmbpyh+e+Ra/jffCDJfwcg/YNXK8vb3W+MZXznHygq05ghOPhv4dbKAya4KNeYHTSfBD+qkXWSbpbDvZwYXictUjpb1gvV0LnlWaY+kl3UH7z4HSojzr2iLgDv/viXcbHPDfgGV1DFft2x5pALwa2EhjovJfItnoaUpqIQ0ub70lzELW2+T+8x6ovJt+jwpNWyl28xj1NBNsX5dwPXKuYMw+O0s9tHSdv70jR0PKKhA0ovSOpqt2FoKCgKahO9FCMBqU8cTzmE1vCbC3GvNHRIaXBbveyGl3LX9/ADyVjt6itgie7ezoovql5/1yCDx7qgukAbaejm2011v3smxDK+Dmqf26wOCWWgtPM+hQM/5VSPJzt0y6BksDKbigm0TOdLinLCGYKCGobQPKArn1ucZBFWj3NzoGWkaI1VZNmhxHQPo7mScJg8fLKXYupiRyWkMGKVObMWQm/17tN7YtVFsMP3oEzopqhOCnwuOr/rQ9qkx5WlbfTeDWiZGR1dHd/K1WQOBd856iNwRYKWxRjBo2pW52FE98SkLwwbcQ25cqflIZHl1Zfqu/C7RYvuMODGZI8vCecaZoai28zko7Y+2INQiLMRks+143WgiPzK2nO/B6ElGzCpEI2bAw+DdcfXSYX4tBoP2SzvzXxFGWd7ComtifENwyUxq3lPwAtpEU0388nDRaCQxeqKCpqAsNNtLE9QPcy4wiRjViGPpQlR40uJXzzfSmsAMCeYXx/76WwULrBSQtY07VJm/W6ZZPJI8hppIgb6zUM/kXC0XeLdilggPqPFHMVPt7eLrbjOsR0vOiomk1oj0QBCSW+hETZDy1MbN5TvJ8N+tnbzTQHZXnUq2jddyear29dplqluZL9G+gUw8NLB1rFDju+vhV4y8y9Hbhu6Kfl6FIC/629i2KkRMYs+f26EuD3O3sXDlAGlKEduxL0J2qpkG+hESZAQqiVtqJBtDya+2RreSDl8ZT7cRtf0SRs+YeJxo1T0miR3Q67eFOayiwlubyvkSkvLuErxuyCOORzjYLmeL5/Jolb7yWT7JKo1aL1Ec2Asdc2pMtMqf2M43eZnVG3Y/LKs0MEnvnIRqDsWa7d1QZrLs7TlSuCSPmkuEC0Z66fWqCTGAwT9po1HuO/I5xiqjp4nBUM4/23abQt4k248YrtBTkH/FbLHZYSGtafFjbk7d5t4lBQYOLJNpeOlyIUDX93/Y9YrbTPhL/dOYzXaJ4YILr/aNxXYgIsjKyt9x32T3MCif3qkRV2jeTqwDa1jfERLpWhZEkH9Rdpm7NvPc7S02truuTokzMzMQCQAdVNq5T8CswvBgZ5u/rew6niJH3a6abvgKvQ97cH3AtnguExrPZvUSdsOCv3e9FHgJnTAYOdh7AfGq7CP5E+BqdZlM0ljFTmoFgtwavNR4RHktbSyMJY8CTsf19TcI6GFcUTKT5mOnsX7+cz33rP43GArSOSI8CrbxHKvmENM/cKlFQkYsejuLvRMIkPFPY+YshcONGu7vCKJL9nXBQwRWE3lAMcq3ds3oqbVEnA0isCmg9VvjnTzJQXkIyM1p1/aw8VVO5ch2unUm1s2WMbnNQ5OnLcSZV+3ZFd9jAUxcilZZ1u07fNz6md6aIzBCO5HJhVsC91ozsNV/0jp7D8gqXZblhoXqUodFs7P1vMJvkxiTrQGLSNbgHNNvsvCYXGHNPrRLWCScYHr50lYTUAhc8bhD+O6EhejD+DGKGGDrfNcyAUatcsj3JJa2fc5M6y3SaHahi/wRMZTqUDnRy0lqfvlaInC9BvTNl5/W1MWrixcTZ2rEPsq+HFQrNkVY+cxIAebL2wSlBE55wKSL8AvYe0inVHsX0mYyJkiDjIo8/oQhNTVRHyKItRbnWosNRey0GNConQHcV/K28v6JZm2f1YaSSvaiv4DjeUt8cXVCfbs2cRCvqdRbEh4WuPbp9icLyrAIl1d8c46IQdmDHBsSUf0m7blWVpykfE+1xqmSFdsSY4dfc+QSZ3j6Bg+9K1iwut0TX1OIbo4K+z/e+3MewkwZ3GBEjG1het3TTc2Jj14eTqRcgfUES927mLXoxL3BTRI0Tf06HTp9dgUG1p8e0d92YVSRufY6D8YUVaF6YhMls5IMNHpEX8GUd2OCC4jni7bJ7/Z8IEmjzEj5dj24q120h1l6EH+/PvzHrRlbdUk8xfLF6vk7Vu1Q3SEfUfQimxCOc/Z53xTSRlnZ84IYnnti0LZYCiYvhG4Zi7iKkZ0jXoeKgYGsolHj254LcTx1jNXkad0DFU4atpDaYDz/Sd+t/8lWAUNikmDN3fKOqEizLQobnWl71He1nHVh+stQ3yLefY9sTIE1Xaczy3EaKKr7RqpdXdh3+d44JJYEHrOZaFj5ygWOMRVN1gMVL5Mc1+Ah21RYzIhb+Bu5utbQCmZdhi9YTUud1PDuRQlrCpeasLB8uXb2/npE4e01o+tm28uz96SHbXICSwO/Pdvf8eLhOR+/P13jlj876wKndWqVm4nBFZ086XYef2L20WyOnQWYlpkCHf9VRPzH5tnW0d24k3sRqi26DCA34K5V6xSWngPDux+HaCGvl6ZujE5lb/g6F4jneDvxCkiQxtHOgucg9SuS3BvT3XX1lCA12nRujcVDBhEvMZice4vM41so3nu7NG1UULeC8G5s41wrmCWJkP70tcV/ngGhLJVvZg5VG3nPviVcw1Ow3mKvsrSnzdUau+yiUqtWjBeQTgRwtHmhIxfggN5BHz3bfFhPO9HZeBGCmid0v/WEcfGsdFRzQQBtKYSLrQIcU6ugMdhmd+f7J6ZI81zc0gEnEx1ilZU8VU7czN9TQS8A1vy/q7c8visEp0lSxHvsxhmwNzwN/lVlRnK3GbODKmMt2lysoK2mTvuhMungErL/4DUThdBnU1l1E4Zec54prSXkTZ8Bs3LSgEU1Pexp32d+vGY69DXXF7RyXGIQ2cJThKjfrEY9Ep2/KgZiW+26zN+NOuHCPyN1z8de9cAKbGMyPE9EdlCYWUJkDuxMLNYFay+nTZcPIrp+opzwSw2/frz218+/i3sXBsVmNewXrWd2xZAxDTlQYa7n9sbZhOVy2xnGPXOgbTlEvEJyQL0IGfPy/9msTSnMsFrN0j5n18hwa9IiiGNr5nKOFgjRgP17Cas0bh/22eK0EIUwlovGE6XYD3GEZ8MYMmtY2elFzVYpd8Kyt2jaTj9IyCEGCy/gnNyK3DqI3oNyGp6Vo2lxnWBAt1aDqh8Iy3BacgMSiEj3PFsN6vOFXYv1ikWRu1RoNv9yBK8BzhLsBi8YcCPx3EZ0FEGf56B3VzAIrG3KkfOFA1uQfkMLcCBBVdJHVyt1IsYzEDHvl/Xdr0v1ffT5r1sloOxTclUGbi5wdA8OVSer5//QpcUzygqSqrE7dhZ7uWFrRp+jcp0yQrgL1fTsTXN8ANErrjXXfJw9EYNqyXnkCmxvqb7R4ydjeAiQpFNc+QCOg0ZalK0C7XBj4rdrj3b0mbNIhug0NNIeisajKXQGer+R2J34wTFvWlPMqo8hv/9e5a5zWLKjX/qLLgzso6637KNdJXHbwvUMd4aSQHX//z/afXlMF3QvR60wakDWBFLOJb6VITnx6HAK9/Ja33WpCnrY7h+iHoOr1CVzc61PyD8SE3E/mAHWXjy1YQVrKJVg3/f9hgGnE4l2iWPj5QxHw+VOpGYd8eThTITE1nHCpx0q9gUhpu5l49wPxmyMZ1RjZslDgy2mOX83XbLwHmOSGOZPs/UkuSAAYkk/+kyH0abK7Z3OvWEH2jCQZLWTzWbc4cdjONErmt+Glc7EB+5ftfgOVK/uEjtahLaCA1gPivhnu95cghW6CSXfnSiD1gk8KPp3iI7ATFFOGfan5Y2YWqjZDR59YU/l6f19L1pVZMg/cXX7ipSfZQ4/95+BJOvb+gj9DcQdZmQkvQx+krKy3+SAPc1QrJiqIfGduvgYwSPvtsLRPX0fr+dmBm/VK1D3aMgPNShUfV0VHTgyRw7+jXQC3EQ6ivyCoEacrRK2qC5zucY/EUPSqoiVlaLwlFoc6gX9AhRu2ufra3IEV9I8zEJsfI+/IWBOmn+07Jdrr4QZNXgNUJn5JfjcmT6J1KQGT2Dq7W4oCffNuwdNtul9N56uhprJrzBG5j9gJEgpbwv6rDQC9GcUlGYTCI79EXPn/K5KjesNkRZtikCD9RIZoJl3IqC87DJlYX9h8GXoZC7cVbswOWiBaI3W/mZeoZKsBKLIqy13YuqsKseW+VwSLWoR3moLf98TLTKtnlRCFDN7ZN2uXonBHTVkwv4twqK1rLpK1X/5RT0QUbDKZOaCgl7Pbne8tOZcWceq2K96A2cFrHsRuLYdo4FbIn1lzw1+8+0QeIbNNi2vYUbf/D+nSx7s2fe1g8rgL93NNyrSpjhcq131jlgpwU8EXGW+eCV5tIZQrihj5biMuGXbYP8xB0VwSsXICU1DyO0Xrr45kCfxkicjm8OxljvtDHuXW/YT2wZ3HbkaAbIHBL+Gchatj5Byz7H8ZQ+RkHcECdlZaH+VHAQhtsroO7ojHrGv1wizF8XxsCHiaEdJ6vfeQ6PtSJpPgs36y5MFXtAWHQnpYCogowhljGQhpLCvk/eRQN5MJcHZap/RPUEPCwIlS2CPcJxQox61if8N48oG3rE6SzAIr9eI6MH2tpVOshzmrMuwQJPlu6FgRaXDoG9qf44+cxQg8S+jWT/RFpyUPbuXUU78z8Px18QKIbBM/wudx8xExwWp2lYXX9s4q99433w6unXJ+4g9lw5ZbH3ocwowxnLUFCR9R48HJRnn4odzrzO9mdyuWpwaZ5N2atYm2qNwMxY3LsfWKtJ2gR73ccJUzjrDnfSThPIDJAf7Bhc2XjA82+1v+30rUmYKa+sZRSl+ysHjzyiYDhqoVI1O7Psv3uuKV08MLpzNRhWp/j+AZkRoAw7rXpgZ/03cri63Kxno/6wN/Xl+w0zCXxbgEhBzbvEi+/IzEd51qz8KcQFmqdTcNvc5j4uqiamuMxEBXUIdxz+IqdxIq09SSNsXIpNiYFKxJ/DywSWmuzj/Nf9+IDB33l/88WhjDi14WmjLbQOK+N7n4bzi85HTkuiC91MrWbCQoyxQbbNQ1waKH995GFpIcugtIJ0uAMrIP5X4CvQ79oy3apJ7+lAbNT9LxIBY6AEjYRfNW4Gt48m+qAB8bYHH2Z4PmS2Wie8syU38vudux8vkJD9ka6pj/TyCduYsgbM3qzk3gU1YtagQPvqTR8xCNHslEXYVorbMm28ul1u7EJ6dKsdBjNmDMVNoP2Xw8MKSGmo7t3my3KH/cfWovX+X1fYoz0sbnb1MRwfqjQEbmZv7XQu3pFYo3n04BK2QuIKXgzkL54skg6H6P+P7wtn9/GqkBh83XIAtnK1fxW2/i5DZlPIEF3XFH75aZAQDSHNEV9/xKLyIo9CYvnQ3ZW5ZIxn/tt6tQzL2bKOOcaDxW5hbpB3UhYZnBZKmPsr3FoO5IwamJWQBsBuOJSUE22XdzwOh4eGsKi8qfBJ4pSp58K4k44GYf7Y4a8606wFUlEX0m70Ghm5kH0pzAhiOwCU3CxmaRzHXe86nYQDXpR/zGdLYUdCyf1/iIvyLEvKdegI+nyOXz5qYQNwlB7H6kyFSe9x674CrvxPzxnlQDPRAg+wqbuFTZbGScfN3Pe2VHa2EQfBaxt1dMXWSfWS+3dJqL+QwB6ddX7DyPcOidJVCI0VaNGIJwwcwx5hcqiZZiIswuXIzr1U/CC2ArUnxQDUku4gvJXggLVW8js5VOxXMEVJa8pejap7GNblHhDTM2MKiUNeS+fHT97oF76aGBHaJR5Jj5uOlrxrWrh5w5YkQRbZ7m8xsc0bH0fjlmFn2trZ/LPELDwqwxLAESP927Hd01znaywRRP6TrN1powwP33LMLTQjySgPIiJ9hA07PtSAkJiv3e+XbpNFMiBtv7kzeFCOi1qmsV099iqnscISCBN31MabV7grViDJntC23ckWwTzzew9X7ZxwCGWSYaSAurBLYnW6LvlaCkS6dmKiW6xQQSVlAQevIU0u180kKb9ETtEpdvylshsIotCqfbyn/bnw4eHxOaCiLxe6WTE6UJMB7yXqKVgzX+CF7JZqSVhk4xIIjHn4W5tundheQYTUecQRj+uaukgufEulk9/FuH4FX+5a+2RhiGWNyWWCkymdaMyCp4RcWKOeHgQuvrXoobDzDoczilI4QeFch19mlIJvj6ns30J96PDevawG+dhryH9f796azVqgVmcFPmRvd9ITj4RylnKwRT0sIzSlnm9N0D/2wJ799jZ+9+1kC3FJoPJM8/UXeGPOrZLwOqJ2jiUCLLV5Bk02yaEhT8ifc1zlQ7uyxmhTdC7nfc3xoo/XCaFCWzTvoPLE5/cYsGzpP7l94lHFkZ8MQUAaG12f8KJYsykRPUnD79KjotGJl5s9yVO2/oJx7k1iXu49pFMwp5+xahBUs0o9UQbymVk7Vfm5ojeKFSjBniNjhmIZshDKGK9LPZflX8KW4eWMB0qgPZ/fnMu2dFoP0NlmCWQpninQKb7ixCLFmQ9ffjtexcBELk48PS6SmSC2HMmbsd2ODlfPnNZcECTDjIXZjnCA2rCMhDtRr2e4iDs3CSvTX4WUst4P015lm2fJos0ps2oHBrDlgpE6HULjKAPd/mw0a6emE60fhitH9zPP1TUCakJK6p8oM38+QfXyR9iJhzHPsRc44/naKdBKJCTfcJJkudEGJMHjTHEiaGCOMe48OBcMs/S6D3w4Q9w+BIIOBSuLwqolf+fnS3BM5dRPCw4BxuU1+7HzIPuJey7G9Va1CsqP/ZB2R8/9JZ1ztEbXk10RDEjZSrA9QDWgek69RTGxarnyTO+PlPR0yWgcGlgDfpMzt1/15bUuL4KKBqLa9Dg4Uy4Sw1rIpzjcvPAZrXjx73aamdccM4XAZYasa9SrP1QubSGwwUaRsTbkegsnpUItmzfFy/Ib3YopKf/yv936zhfi02xMScWksUewvEvASN1Hda1BtDtN32eVWzlpf0OdQk++xPJlCmKgGJR5aZyziTUpTUHCOI/pglxUeDE8+uh2Liz6gtQRkpft68/uAjNGF+YRGBVx3rvMOn5hKQCvSU7IslcEMBHMi+BZkVEKAvKM2xNynl1hvmS2EyGJUVkUdLy4okYvV9JRPiMqhnKsdFx9kYwj6ZlMcRhxhOcD/5kZVFfqzw5T8zMj2v/CBp2AjjFoHtjPqadu3Z/RtRGt7XUSzghzfVJcKf7ON4intCwVdLhm3BRKgOCu4kgGy/tmd6AnJ278Z42eepwA4/faCAFh4KciGZKaRW5imccSqleCGIbtLrLeqKd93k+kS4lUGGAp+Bja+Zi7DWoa+LYQz/x1RtZdPpuA+PCF5M3GbB1F9B3Vcj2QPDs4JwrfBgdhDnoe5YWrILLUXlWMSLmT6ZmlJD4Pn9fnNwg8T1qR5MwLlUXKhS4ZQaUQXBACOqG51UwOeqaBtATK6v71IGSvtcysEUMq5xaMSGHZLUsjloLz6Y4XgSC0xjJol5WAQIlEooArj4kMud29XG9G/HK+XDpEcXLddGpUbNpkLaLIjeoYq4XQCsBIqkp/IKqL/YO4IU0zozvq87HKUTYQTeE0K4x8BjuIysU1owI9xkOzEeU9pVbrstfnaynZwOPzUG/xncuQfJYPrGbjX/H0nH4lcnen/lVmfMb3tcXcLm8EolGpfnbrLbhrAbkdlDfRBh33x4Xu1TlxW8C1IM/DLO58r1O2c8Z0oaWDLiZ9aYMbBwWyZ43xjMmUlUrHcVpWPyHJBfCa6x/v3tiaRwaL+RYvwKEByPEBdT2X21K7UxWMi5JF3FsEhrJlZTpH4IDq6KE0OjlsQbIjpKIUFcNnkMHUbCcxv6n3Pbr9NalMNb/tieeZ8nZMECL4Oj+0pUVXNzfmvBPgYGDhY3pw8QcwDBWiYIT2Cjm20XMA1kuAgKCHIU4YWfPoA7k5OK0ur72tc5SShFrkbHfCv8hB79LUPkAiIATxxRMSwW41XnpZBJ6fRxxkL9TnPI/ucXXdkgClLc/GQKh3rGSHsZorhvmT3xbzKc+jhEnV8xvSSB+WhMGrgFyDgZHvQ5dzeWxz6O4EYW+ToyLRzcSN8JXnPwwqR+vAxWgAuBhe0YNJ0sazUt7BAHOmCN0F7mhCFLrYMQX2K86p8AWj1m6pJNDzIdH0RiJeKV6c8/9N9FLYjHSyWuJjSLRt6dVu/qp7a7aHtYHHxb+NJPHBKObm9dvZA33qcHl1QUkrREL1Y4QAljnbmOeEV9njPmOttqjlODMriFvKdZ/A2FK7Z7xT7xjeL1sJmwwsNilG3IN63VBX6UEQEcpXNvSpQzZO3uz6pW0M8bBSSYHtugQAiaW8MP4+UmuN+d//q4aK1ci7lKfO/oQpIvyGh+zoaFA2HooZUFJLgJZAnW/sAm50yoH7PkLJID0BZvWx0XKR6XFwT7PKjY/DQfvCwT5dlDqCbRKQOahAxLgGNV7dpNI9V5nc58LJ8Q2FskloUNrRs2BxHMjvlip0MaD5tLAwkL3Jjrst/XYm9HskkNJ+R9fNwEBNDSnKcxwTNiOJF3ZYvZ7uFmLElLvGKbu/oD7+wxekZH2wyfJ00lc9b9XM8t/4GKg1UPnzHb29xjRzHh8DivO8VelJUTns11yMIJgbPsqFqNgFofAJEXV1Diyc3zlhEqAsH8qGfl6WMscrK+afogOU89oNa5Kl26dwRfoD1xgNQtco864K3UT8ApVQNLh3afp95ujGJ5KQBobGUD/sERCU/ukRrBft0ITrTyYMD6fBUbAhQm5+QYJWV3MeF92y/JMbpKRxXn5l1A4dR36+uRk/vWP+nWdFE1puPvNCunaTj5yITX8qLYIb1U2lEEreO+4mE19rU2Fx8dfqQ16jl2eQJ+355MMIy7JOw98AYcP6z7vPwE3P+/PsDXkTsfBHdXXZgoyrrEZ3by/G77fVxJuQaCRtMS7KQaYSlk9CJVByhEgqIPGIewbNaElk7Nelt2bZYlYro8EHWyhYxixFZz1Y0r1A5Mx9CxWP3pJQrdfRGxLqRj1CHczv0AtnGsRfGnKBlWD/sKZp7IsX1QegSJ4jB0kGRSmOZ7nDjhg30rYnGvrCBmr7m4EE1UUiZfQvNm1mRoxMXUWOf1J4ssbnnmb7Vo5ED8HxEtbkrYfr1+VvAqR99cRFWvnUg0bDf50P9KCAh6Q5Tq4aPwEBuJghA6+89sSHldW4M0ag+pzc0BPy/D16HbatRHGovGIsXQhq5i+RGbSYOuThakyUOs6BP3O9xp6ZdNPzYrl1xIBGl1MxTBQ59ue7QkP4hO5F572FgV4Q+tGSwPMY3/1TWCP1c3zblimELnxk+Bcm1tB2XTFvAYNAHGKJ4lM5WV1qs2itM59qC/IoEEZto5yZFt5+XowVlTtvs6XgoY0RJ/gO7d3XLL+KbLLWsb6qcwTAnoFCxYo4kZ+rmlJDREkWVYOEW3P1Rk3/V9wqcrcNGfRu4Chz8JKYEpVFM98MCAUewahzHNXZpRT1pUFXs2b9qgvh7qpefZHNT4WJv3LLnF0C1ihI0DXQha6tk7PInvEvZ9ddsLoeSSKCOdBUJJVMZbXhJYBzyFiwUxu619s8I/JL1eWr90Be2i0jfFFyfKLvRSe3q5Czg+Uz6Ui+fVXmyFv4z9TxjkqHCM2uiT80jHMav3EGgLMN43gKojvU5COk/x9DZIFxMBhNk0t2pgTBDIBffKzBwWt/FozHqIGO0yV+O9qNOxTpb3WbL6aerT03a12PMy7ufV8MAsxBA/EJmDfh7LGYLnKYXm2Em9FyCvuFI2hlUjb2Rl5p8gu/Ykqa/DPK0W88yjguPjeqQc0lF+Uv3VbWg+InQLZrGsYmmvHAbfCU4WADDs8bSa07fb2TEjHE+P3T2oXpoSXWYEsZkV/ELtnKjEnlnKpvCHETqwcbZ7NkPgrsGI7unKAd/XmpcsDW7VVlEEIeP9gZLVO81zPwz78r0mreJztwgmu7R6ultIVTKb4wD+8b8UZuFBSYOXnlbjqOo5JWe49aHhFe/ep49fUqLyCkeiVaY7wF8vRPoLlf+7hNb0kPvaI6dTtkyAnD+tVh6sPFq9zf/QG1VWHuk3pckBA5MN0zB9DkCyH1T2PXwtsQugc/q3Mxr+l0yx/SmfmZfrcskXUBBige2+MCywBAAZFNGUqiUr13njBWnVcMC+3NHmtE/HGepeN18cc6hb85iZFdiTovWnXeMxGtte+pvjpr9pbSbZfXk93P80ueTIzvFMbKHO4awrLmWc0AlBEqiBUk+hMSlmQ8mNFMf+FBBiydgxoDn7CpAzkbU7WUdduNlioxsgz442AyLXKmm9jQhkCdAGofQzgxMwmc7n9xXwQrMcOiXpM0eqI0ao3wuvdvq3wBzXdTIL9p7mZGvPgO1fthAfmawTePZmPJO4uviKWpQ/ZSMeRSOji/KP0whZWllF/7E4jKtLFDIQTURWzS+QvBw++dB/Blscz5jQY5+ogSagf9VjTTUVNs/58wFpZNgeoLf4QgUvgmeCT0E+1puJ7GT3h0xC5DjQr8KTaONqZDH++ckawrRDkTpdvrKt9ZA/YnalwHThj9TmIIv+DMGGSN9WwW1q4x7S2exBO4gCAGf77S9StKubbpJ42HcO9dfiIfsmJ/L6x9esG/AqBVoSKfd4tNZhdKkzRNrM2vmFmfbEgyzwPPA+yvnQN91YQcvab1RqeuPsXQTVCA5tGicPKXz9SYfCwgG1CKvCXhFoIOErvvqM3y3IVFOUvBA+ZO+6507YarOF//u3OWL0D6KoUbUE+3d7jDk2g0aeRR3VhpXHT2tIhRA30w25qvP+U9DoWzyPwcjCzpjzRZmK4OKtX0cCsWq7XMnpShlxbmpGv2yQkuXwiqBATIsrN2iDVi7zxl4ccqre1V7yV6Yp4L4IdpAWOYejRhAhQT7Yq/AAtheljWDn2pKIFrxa24zF1pz2rTbtkxeXnqGFDBzTpoM059SpneRyNo4kfFyMzsT9VlkfawtvgmhhE74wJc1yv2dHxgUKYvKexoQg7PygSyhRxSKSohbgPc3nckB+NeWTDXT3+J8+8D9/g45sv2X8vZLh1Wl0IUBx4dIhJyqVKhWe2s17+JoRmVWxAGANSHhynNiHkEUXxtLzS/Iz1PIttDU9STejAfJx5JawheGvV1EfFJylKnRBtdc0U6kZwLTo+7lCbJbjBOo54Sz/oEL1nI8QHY2ojtINLEFMEF8RQHwbMKhDdJJ6Kud1wet2HD0Ih+j35zq9/nnaFYY3siNVPN9Iv6KSSpwhzm/1LcKMzX6rPrRmqulSxcaiTsXLBnQVfKPERK30yk2AjeTUUXsKSJcHcUqyswIzmkE9+04VM8qd5GYtbZZNBnX+6KoEve6f1jFqy0hwn1mAtTHhvpgFlTxui2h6QR8r0xFDx5j9JHjkJ6R7jR8+JQ3XypmKqhcn+R18d21c8FRnaC+cYJCOhWTmn+dJ0kpDgKzcyR6cXlWAeTixZ2GQfyCVAGrktFUPb8FOs0RdLYwHoqePzs/2ML9v7oaJtF+KWdnr8JUlnkP3pZfPVe3PtVnAubuXRfwETlcAOdJNjzUnvWFrcUQKe5xDY2qiuL5nV7Hkft1GXLi4WQ4/EsIApjpsfoo1zXBIj4nRx6lzyjX6qP2eAcL+ngFM2ltkF/1863o2DCvbArRX+3oqc5dC614qVd/E3l2YLPqt3yyfMVqB+D1TQg1Jq2EzELt8znEbQy9xldhaV4cI625LXpdHiFm2S0/Mw5Ik0PN8qC0GU/vaDA5GplD6NOdMG98MtSajlNXki8slvrtLDDm4fk9w1/gcddPh6cByQLMS55hiY/J09O6k4W2sosidpZjrbnwWsFx8GrXw1eeh9dRSZYAAH8QW/0XSoL9J3Ws6W1UZ9dIU7aoQOt4hGJcUplpA8aUBmeqvLH3Xx7gNg8rNRw/N3/Sm/hvuaZ0Xd/T0AJKGMIUqmdQXiG8O+LbawCPRCFwVncyoYrIc9fB3aZ85rZunkQhM50nJdidLoydPrDNKshsjHGg113CbReX0HOujlfKFXoksDLpcVyKmO75SGV1L6w8FC5cSpdG2WAKELeTm4dPt5xGhzPwcVmRer7RvJwNHabjowjo4vWTEeaEM84dKwePl3dvgO2NyTF9WI5g6SAMni9yVqcLZLj7Ww5hV8Y1S4tJ+mShlUyeYZpUdx8NIQUx0FpJYqX3VNJZfEfiX0Y9oMdReRDBWGRUX3fYsVHwxTTNq84LigrGLgNdwY7Q/mNsFrAskNfOAG7wT8B5bhOdAfJFW3NhQ7gDovJw0SHc1BKLk4/U1qf8QgX2l+4i/60Kz0ePNOHeH34z4vx4Txz974Iyr28ZOMZwAOiFJ6SC/dZXAHQLkgDvqdxO2udMfiRLMIybpI7a+gVkNL7HaMudLhhXB/P/8DyVq//T+K/fPgipJp99syUj3l4Yn+bTiS0SRXw5/PmCK+VKPPUXDadg1G6gRLIQua9jvFdvCx8s/dMH2UEks1pn0ho9XFNLxKrpGeceUCsmTLhcvVgum3MtpTAK+3K1NqSlWKklDYhZfLBL5mw4yrCxc/61BSy1HXUF/dXp3/wIqjrZVsy9KXyxHdbuFgBXT+SWFD4dybwhUZhNkfSuT4qkTdJ/WHweBD0FAhdcDQMBeFPNvCSxw8TIjJ+uJALwipbQstInfNQ5hD5qOyOvGb5GoF+6Et9yTyHOLQhgi5TBEvmyGaJWQFNRt+oVeR4kPfwFfPL3JF9agxyM5QotBWJujqRma7ry5fe8bfqlBHjx2b+QPYDHWFYUa4dUyk9ZdHYRJUCJDYvkz0TNaVHMZaYmDQWkD4y1/OrOW0N3ch25mN8sxLfAKsxIU1s9wmx0LCteNbsd9cLVjEI7fU9wdpaxM1Yum0PdKm18v+DjGQeAJyfOMpX15JFheYE28f8SV0HdODwB+5daoCztkSXFBmNTQ3FmPBV0piKYUO5bemLSWtedJFjKRVnQZxRDxlXmPSy+UUElap8k5A/ofvd6KI8Nfc+xYuIeJWAmI+4ulIEve0YGd8eDopws2+fCz8phvUIsL7bHjr9tOEGHX8pQHkZKdkNkyLPOXFrmSHx6m/5Ofw3w1XRBPR76cffn4zbGUXMa6TTBuFdr8/BaiYr7p8waITWds7Eferq0A7jvSZrnVW0/Dt12RlYS5ROj/zII5JsrfWNzyr1GebZvFmLEYvsQnJmr036IcuQ/FypkA7clfXs6ZPsNWCpjxRGTOW+kblK1KtmkIkgFt2hJWDoXQJoqDlAnPKNHiVx/laWokrjhDHsxZZu4Am0e81FU2BzBdReGxn80LywKUJvl3LKePYR++hUm7vqWa8olPVmfZc4RmIb4TjuQV6rhDKLfBxl9g24YPPN9wWvr5kNvk4+d7y95fQfNJci99I/RyND3U/OR2PSFfDGDZLBVRbM7CxCJ4CajvPGW4H9wHicaDCSvE14J0w4BGZinOd8lz8DfblPUNGT5F1aS6IrYAfrz1+KbGKg818oGKGkZAEE76UPl5QBmo9ljVWw33RbCem9aPRZ+GnOK1vdYTEvTb8w5zSt0rPIlzzq7Z8UHP0IJLQYDRv/Hfi2QZUEXvJL0rPtIjUym5RnIMVjLac0FnhD3w0Zz4s6JlDuf/mWF0GD8ikKWdV9IvJtnShGDkYkYvgLNgTS8RjxKscAh+ESuZeAqWhR0jduYmwdw04KUROhadfs0eCBPlT/JUm6lyLA//CAn63gRcmKtKcGdFOdew4OlEYM3QudoyeTHKf5yAOZcAKxEJkD5xV63piC8LObBkvHSnfJV0eEKCKFkOUjqX4M3o6a/MiVl71fhLIaHWKdKArfe5vRbTvmBo1O72jw2A5zzd5+hVRNtHaoH8xyrCuKqTlH+8MhoMZU4aOtVV43Bdcg2u/JFrZ3r5i/rgJdAYzZ+m3e5R3lBRVTWTwZsTptJ1cbz0j9sSxtYBzN0gVxPjXk79IW7hHEry8qcaVAoQZMnq2fjaMQrYQiZcby7ssQMlj4ieESzqJzYQMVjW85roVjHwUSbddhkaB3BIFotKma2YJzoEYSXBajjDW20RUr4V1POHCqUFysVDUeQwolFndPZNvq7PJMsA2oO1sEIEqsWKtGFV7xdczagEPEa6mQM1rSXhoCyQq7A+iRbxID4VxKvvxC7NPwv0Sal3ukyyeu7TwRp6eo9//vamC9/jTIol817fqEuLrHrYF1OvVMu/QJnbwEWRBl12FLmsao5ld1tZLiCW5yIHh47rD7nzrIUMi0uOqDlkPU9B998FhbSxvONxLsqfI+7+f/QEpaAy8lygkNUM3hX37kqbR12mmmLRMyLuZjHJ2mo0yc1sz3ubC206XW9FY5oAzaOrm1kJwJgJpHnKKao4d/srNhgR2teN0duSwTr/6xcUIEz7Z+jkjOMe/ASM4Xxt9YDTh70yxcDK3tBtYWTxj/922NiEYiGJtt2SOvxNvCoMJ03la8Eze2bbBe1NVm2BTqmpDquuWuSy9w5/RTP/LaJ5IEO5SUhM41MwiOJJjzxmds/DieW5OGH7At7fKztaL+VE4EQb1h33MtCMVLs9ZfKpEGEengYVBeJGkK2k6NnuxwsdpbjdhrjtqRI1WYclSGMEEqg7l4wDCnDsmDY9B6KDkg9v3SbpIopaB7knQPCjVEkeiiW/48AOgAc1P4KHrdB9skKEMX4K3BHDRqJfIWEcr0Rb941xiJfhpirgYiwwpN6/llM8bKGaNSiD8mBl6eMSOvWGYsH5b5hMdG2LFQbxmUyUPzZA8sxudqpv/sKiuvPOdPBkXJ5g06iwS5h7E5XvylYQpsmMK+CtHkclBlXPp3gkU03p3ex+7IE0Liyx2okqSmWgAUqwmjld/Pul/3UTtd0/HSfK0NdWgtY+znUqccw8MTcdkcWlGBC9s6PnP/yZQZ07l4QmYfOTjNVTwGx2ytbs7ibd2x3s8F6KhUQDBPpIqs6rUWUNvYII5SNGt1gD+Ia0eqN5MDA+OmrOCW2jSUbK9/nZbHVtJRE6EfMIbDhh+5pgbwLAy8kQQky59IHzCWVBFhOKtoakCAtCJqaGQEICyainZSFr9KG0Rn2XVSVlaa2uvffbknx67u3Hits9SprCGjzR4jW8lYXTMnLZPpj0UZMXRimte1VF3Kn3CM+bPmhmvbI+pxyQsdNT/TNJFrTv8GUdpY+Trko6PZAs7dS7GJ4C8c6i4E6gqcoQW5bFpfK7p1dMbglTfzTPvzbPQHdcff0FC1ENPKQhqfisxvo5p/Eqb0YQOJAbdHQ0Jsl98PXFNCM+7t+1x216POWL9v6Cmt9cWj6BfhZ4XTNs77XfZ2X6py+QUZ3xSUPOAHM27vyJKVxj+LMnYjQEaRl3cc2VfeoHSnfvMqqScnIJ/Ms2Eo6rhROV8Bhd7+h0pl07A+CRi8rp+c99q4K9Gdo/cymoAP4BmHXKA2m53CTrjN2Cl1kHOb0iyFkb0f0mCRJQ43ZkYozqSx55h5rbQOaXz4MtZWpMQuTOwL2htRoTFbzib4BjO4EUEV+KN87GDHS6XfPvwHu31+46tlq/5qXFNiFoPgHSRrRm271heI8yTFSbwroUgP8D9MgQDLubLY0J+67appgnMOZ7nkW/+ija0SA2u+R9LCKCIgdDUmWIVrS0mN0yPH+wc7xxbED8L3rpM3VkGR6R/90wZd8djtR/5ckDU6qprYLxwVv1Gfdn9v5CfpBlyDGPLdyBBlnjglYB2iYIuTJ8rjvUElUUYU+q/6jd/0KDmSwgMEreFEzB88QEZtk3b1FflUlw3CxV6snDJm+orJeieLzDuo5mcyHB7uGmntazAEsILIzS+bCUb0N4To25/93IJU7ldWQPL4f3ohMeXf1gmke/Hd7h+MnAicvZJlFDsZKKYwsGfXHJKdefBwKIgh8/KuHEqYEd5mBxn9x/t2+k5CCseHpoGMeLx2XUZeamKBXaa3iVee9k1SUE/Vpf8j9ooXUXHmT3PR0AiAkZo3/FWlfqYSSRjfYLink1wfg9V90DZQVplCSsexoqUAVcfTV3wVLIYwszyc8sXq9TbtG9Cq1/ocGtqJ4WUM9uufIf3W3CuQG2D4yOfhSUqpGx93uCc9JBSsVMhe3Ypd4TI8ZH/7KWvkj9de6FYVm9g9cURg9FxAvK2+B38H15bu6Llu4+61v5GjbIUanBSmwqWcXO3CxOyWRiHKDuu8jNxLHWv5mImRQRczzxkbu6FhxIYJ8h05wl3yARyfYVR6O/exIAyCL1bWhal0bcvboreDCuQP9/aelFd3FVX1GHOMo1WSkAFv/rZ4fBHaEnd70g4bQzJfcA7vO6IVAR8h+PI9TEa543nj6bB3qjs1sMoanVLORp5uAOIcaM/8tKo9rwo3akUa5cZ9l8ZoDo+bYHAq/Kfk4jxsg9VMePqf6kp/ter98xuRnfTCn8B4yLwEjqhQqlgFNPGTDnxZugasWzrjhNYT7mlKb4Kcz+Bm1r8BhdFO0V/rDFnA+t5UZwyDMfz5dh50SQwhiOquKqCehcBSymGRpQm1EVpJpRk3IPBb02ywNPFdygWWbMvxxuBQSGfSnQX0eWRGp7utNDKQGQkwfR7kMndGWruJWt71TCWGwcuGmkToK2QcQC8VzmAsh2cmQw5UL3fSsAtlKgmEh8lBXdjLcNRZzMUwSqGpPJgDSVYIhRlOpTZYvhtKShN1RzDn/yNHzNSRhz7uh0kyRMkDZdybI/3y4J/nZQUfaxQ6zi1dCp3x8h1LIsvQmWFDCPKbsaWy7JrlZMVapBofIeQHz17WOLjLHaPNdDK947idZBu11WF+Ds1mJhLugWkTOD+SOSAQL/Vc7mcVTOHZcQj5S6cJZqTd8TZZRMZ5/mVCkWueRNdQMFDtFFIMW3vPiGJoFmx+v97KbzcQjOID9iyxhqvFKQulCa1ntyBwv1wleTU1uXGLGVqcLptOr43R8IRtbsbyW/nwNsCd63EI7iqLQ8npj2sAxjRA9H+G5vCaJ4n3gHc/bF/fWk1W/fKF/xKxNm5WJusLvoz28LNVbDV/+yM3T2BB9cZhvwDXBZ4bIiFxrD4V9vIVkeBVZRFZRCPqb798VF+UwdamcgS9yypk3nF0nnvfsg0gbdg+DUEO3XZCx2x7TVWQn0lVvkyi4AdFDJqemFRkuow0eyikNezLwElJ3MSIAQrsn5tno1Dm5ujyBkeflQUU21IRoruzHBoNt9fZfL/JpOAR/62B9sxvqCo2OKyZ9/9YWxvuSJxSgvnrKqYeAAHLDZrEJ0me9ktelaw4bD6WgmZi03i1BUUpbMf/aFbCfenwuANHyABUYMA2HpLHeJc6lzb4zYVvapOMpqSqB5dKQMrCflT4l59r2EQq+Vwf9mo4qPyGoGwHdTFmYSFgxnS2s0kkHjU2AXo+O/MmIRx8DcO0807u3khnklwG9HnCzWfL85BrP9YvAMqM9w2zANkGOKXZBngBTzJGXEdALWR5oYyEvxRF5o8ko+kabV7/i6cMLyM1zJXYAZRdgb7YQ+LujPlEe9EMMJHU6siOPlBBuQnfS06w4sVGrTZ+T0BeeGV0QqOrprBRp8bGkyle6UZuyquxNVaAIMp+MHEESGeUZuvY1ALBpMOXgC8DQMo+1PrylmxGaV/NY6ksNrN4EOwcVyk6ZStaoSFGjEAz3cQzMTFSkTus8mcSlxq7Hb9EGk7Hyr1Rp+ht+ZNpMvgNI5WDvnEpR609d0IauJKNSed0At+nSRewnpmgVjGhavsifk/thOu7HND1n0mVtpTYQLaaWZrR+OyMOakNCVKdwoqFqglEEUgRFq1OnCQzyiYrPo7akePninJoiao8eSl6qbiWdlY8A/ucjy3BWgnSXQZH0q+rFp+lj/FgKV7WqC1SLWOvWAETsXTk0L9vGUW+iKM+WGXxyzIjb4D2z4n4cJp0vexPA95zJLP1oYrfHDDIM1PVlpD8DS4Qn07nkHq67ZEoK0ZjGzSyv4wDRqt1FpznUOhZWLCfBFFupOQnoJ/8CszxnBcLQIKKQPxChCMiHydbXWzrChLTKImUYcqhxi+qBLpW2I4X+MS6zs9cbpCJs4GQE7vS0eceX/WLGLR6vwC53ncjk/e0PdvQsAO3wK981gz0RWavBkctyOjVdZ16QZz/iQRUyIc5j9DSOPcYzb9ZemiVb82VzcOIRZb3JXIYBcO8OOm1zZDW57xnUXoE25VjSs/RKYvBop43sWKjVtj+PgljiRQEOuuOOH7o1jaS9JsOCw40TOPjY/WNH5hqxnpQv5v26A5oKz2laaQ8uHmEWNXhlBHSklkO1NSS74CZSjJ3A4ABFyswBG/GRYiq+D8UiwnS+ijT/NfA7FPXjZc016otzDVmTnqTe5nh9KFbhyFb+z5jqfLPFM/2ylDDGOjmv12FAkb+COROR8nyOaP0EOPQ+TL2D3W3Zf+KHb6gtTWL9iOjG90GtG8AbIDvC74gaaDyiKnv92b+iSpRPVMgNCsMprjoDNTqpQIw0+wl3oLoEzVSks5va/z4JFdM6MHV5DoPn/3Up7cDs8XPRyQHdz0C8eZ2qCQiZ82AJHSEhwpyNO7/romxd0MKzFFVfaGDpTeYhMeqnxkQqkgYtnSCwdrj+RtISyglbsxvATaPpSupIQmhqUsmDePyuqRKiioMBGQviQySuKzaB163ZLDh9lk3VVmnhraUKHpleGt2S+AlOMbsfswfRglvqyl+HayiA1W5XfRimRTv0MiI6yZ1tn0YPv/cVLqYTsygmY1STY1qE80aHcyyAr3wWA9eAO3cUZiWSmaQb0V6UVndOauju6cHBdsEBgYL+pXE7YZTFYc0adNcrPMRr8GlgMDGBLA75gbBvm+CAYI4xuex2oPRzdGDFu4HvR9gP6FZI65IAzxq1qV8jJIoAqbQdO5qKygT3gSSuFExEaEr6HZi5PXJpxzgZIAyTmiizZnlkq2t4hc0XK/M9Si6eBurzjIfADxsU5hA2rPhOOrEp/+bRgb6W7sCaBaXvNWI3eMt0Lg5Y5O+aAEJPvpXrRJmufF3r79BUtzhFis/BbmF9TnCDvbLDLhrz53eY8GvEKPB+N1nwgCJhkNRYpA3UlQuN+ziefaKpOQkV4drsuu5OUtsfRwoAUsfrwWvTRYeSxWxO0I8s6fU9rPO6v61CpttZmsocZCfgpsHuFELDNRwmQZIwhxK1Lohpd5Gq0to8yS3LuWXPgZ3AQVY9ALpfHmJPBZMeHfYtBQjdl+g8GufO2uB96VmvVK00Y/64izoLNge466/s3LfySmrofkWxDrcGtKtNWRe8jXbrlL6szIfexuqJ9Yt962YnGmW/a4zGs1aKX0SafmBFoJnvGl4ZRbQRq9UYrrqW4P+7fYkkGqvnAKESnZN49gPQSzvRz1UjC6MNUhHIEOJhxb9T2/b7wwaM0vAGNZqn3Bts+v3s6G8/cOt/kuNOdYXFk0LdMC4RoyZltl1q3PYPMv75hXInY2ksMmw9t9I9Vcz/+9XMObAgiB2d0zDXIsWyPRrRgAIy2O1pHf+o5s9nxFkLKYXxQP16sV+eZHqmI1KEa9o+JTCly6KsUx0/u6P8ykCt2vdNLBfVN9srQC7XTm3zissiwjn9ZKUhyi+WLYeeUdh+FjB9Xyq2bs1Pe7JwaZJjsxsIstI4FhmUjJcUazfI7Wr1C0yZcF6Ss9FuPrfVdKsS5Lk42L4mHAdZsWG2qvfVUbrhxXtVZB1u78xIva1jRYYDbn54UU/rFNooFzre/PLNebsItbW1XRtOFlAvGffLxzPtCIbjr1ZZdTyxvCbifkHwDI3H2Tvvrtt6l9D7Rry1z7LmD6p9Cgmu0GMqk2j1d5HyzU9FVbJz8aDvcP1e6tWypIBV0O15IGAcwzw+KbLOa3kN7X7GN4FPXRseeEgiwm2Vbh3F4/lMm/fxQKlQ5O+yv65w7Ngvj198fBmsYXDm8gCFgRtjBNvCG4lzBGu5SORJZZnYw6/eSQ82uUMFyxgURlhxwPQS0Px8rv9B2fC0i+Rn/59ctBc6ZKu3PZbPRX4PHM64Xy7Ikg/pC131O/g1nmsawEc8r7zaFa4xH1C3Y6HV4apUBHCsyPgH6aeIIyYkcr6QdZACrH5Wlp0Hg0XcHzBgQqaJ8me6Y/bgbk4XrcFn6aOocOeJy9vcDGwxw5j+qnXOe0yMBnbt+Dj0VVUnQt/IyGYUbv0KLrMavZgG/XBreuVO7AHuYPskafw1lQMFaqjaDEvgEgajcuN/1UMwlbQH2XPxEoBeOSGF8P2zQmtgZrV17Q4VL6uZbmYauI2YRZrh2HzoYNlRmSUmoZoPOn2UrRV2Xr5L9egxWYhMShoFx3cLKjFOCIUMyP/xyEoGQOTrsnQt72bLt9eXUimGHtDiMAmzATpnw6o9sEjzsnoNf8I5XsrIdIzV2Oj1z+4L6lcMNlcEjvhnjvZiz0wTfHjwXcsaIffwfvjvxYha+aO2NXImXLdeuVsBJL8bpBSNGXG6iIbTEvYNZlpkh6oaeJGnvf6kwMuCCCoEudaZPGUtRyyQOczAR3x4UM0LAKmn4+Bf7wIfFbRQd4p7VG55z9J4XXt6jPYIEahUwaWZIKKDNs7JSQ8mb4tLYusiidzN3pUTgIaI7bjU53EBSUcR+bypPkZaIJ2tctuldRB4pCoWOddfgPynayzsclmPHoaKADwSlWTbofYeBJw2cAI0Wz/TZekkSrZrEIIChCQL3uW1qUgmhVMfC0VnuAyPwctTOFv5F31DHJe2w3HkA7LqcuWDT6qllDkHyR58AdOllY20CV1nkhb68hZnoWYHnJ21HT/3x6nhd6wpQCRvwBZ6qTPWZz5PFPC7/+ds40cNUV4nKYUfOv5hNpXGH6d5COMm8nbd3WHaxz1pt4xgDZx9uxPQjm9bF2S9f8x9SbCCw/E4zL9EV7kp8jxyIaUQpBk+IC18qSJS01hL75/P5HLjofbHJtyM2MB+mNZSsbYQaSmSnCCjh7/qpq1gzePEUBF58BHJoDf64ChLBN0tPNnf8kuLK0sJza8HbFmmXZK5bNmtKKfO0Wv/QG94rzm+J01AR9iS+afQzvoNLFcx6LPoN75fW7Nk1vZBqEuRKQrHBIBgxQh4GL7yxEf9wVtiHZ9szAmhBYnnQxJWFfOpW/BPD2jabIMSax42/uxezONi2x1c2G2dd6PMkF78rLLNcGSekla2Y4WrzNS4KPc31I+P/WOBD2uWmRxtQalbWzOcH3Ai8PJxjAuFV6/cuditMr/34tEAqW5MngHkWyBSMpjDr2V0jfVPfg9aI6d+KVp1yXQcX4F7XINJxAo2rXgwuUvsJxw0WqFlg8ivf/sq/AQGkeSLo0MyiXCrE5QFyPFZ/JvQjtcNBZhaX5sjc8uWz8ftMLVwiUCj2QvjNHb7Ln9Zl2SPrCjvYOGy5N9jOaKE7XVG8U5sQhh8FW4mosja4YkJ0pXLJa93ZSknA14z3t+Wjnz8y7w4hOWQ4VBqOaSuV+h4tzG5Ft7GUf/KaQ7z4u0LIs8tQgHUiy36Gge8CU82Vi6YuhkH5V78Pys3LNavuPEWJdPThUnZbJ2D07QlcllG43J4jbOdWvb1g0S/3S/BgausUvn5MSsizu5Zo0SIsuWCwKl0561EDlHSqIQPZhGA4uCJ+HLTXd9pTGu0m4Ucq3wL378ON/9QVSFzdpHfKUlNezS9ntoR16QM7SKJQ06FiiStfyFgwmUdaROjY8WNt1pBT69QB5qN2+qob1Pm9FngqK9pkuh13MzkmpFpWm02rdmRokr0s0B+UtbZDBK68Zwzr+LzCynQ1Mqt0tbsFpBiNUVzOTe6J7idVZi4Uf4QUOw7I4BonVk0Qcng1AgVRFoIO5sot4cs+o0gPMVcZEVEBLoftYR61ps2+4rIbbY0lRVZkP47Z27aF+l+72Xt+GyTvYpuHCXkDqE9cIs/YJGDs+C5EydHViWIZ9c+RKMv+tDLsTq7f/YCkzokmk7h00zXBcfqge5+qlqOKTSTAK9TmTclpsEzk74BANF4WKNDwVmiyv/CHqyTNFJJXuJbP1wfnBvePH8BwJNU76pFl0ZX6fhsJ2b+/FKNd/f17W6Dxs3fCup9xKK8gBdF+PDDHe+7ceI8HGpWGfZIntrBTkv8YINc9xMap0maDfbZS2kZ71acSnyqUsplQN8pf1nr+B00TxfHgqW7TvOeJt/aXAXwnOcEtJ6N6JN8Zt0nw4SmQPyqOxNGaI0iOSIq0Mucr/y0dfbMgGPdHigNQ4Pf4nAcTjNmokjm/y9U8RNUYn/mZRLFtiwbvXR+yS9SsnCnPWFU2+zrMpxON3saj+2uV9OkRGBUdDyNGoI3yz8xfYll2FrtIXxT9d70rT9DLT15Ciaih4UkHrJmriA8VS/gXHiAl97oSfDfKAspb6ESeQwvEyt6Trbjtr5F9FpxF8vdfh8YaAzauyrxFRc9sC73jVf7JruaTHIYMxxnn4AqRxuExipNkohhF81VeDkeJhbDf1j89P1MZ9cpA4GYvjX91YLutTyETkSU5XT2w3u1eNPv6vZ57OuO10zPWFt/Ztm7xwn2E+ThHQa6uL1xvluZNtuXD6zZ1qhqYRKnWFlwLuvlOlzMlzhpRMt0OyAqOPrmDmHNslnH2pZBuVcMYsZF3So6eG0tnymQ1zkFASdwE/6vqMA1JaIzVlxOndw0scrq0O6XMu+zZGHAmr9jWw0a954yBFnaGvNZKNYllT0IOa+LPqyeF2kTwawoEv485YyiwQh2EooIL2dyKy2M0ObWCbEZi6TMY4CGKj8I4o08rSc1dvFa9TfXbpUJSh7EbsUcofhboJe1WwwCpPb1cevUBYC7ocz8X4FTCPiTlE1jxXzjSEX/tPgouf5WmJc7tXI6iBCsLjtk0rwaxVQkampu6jZDkEatTeCl70bfZYu4rUidoUIh47Y3XL4siCOjjjeI4NGxMUnOADFd6UJ6Vp6oubs+D1YOU5HCvGl0Rlpo3CoF3DkPYTS2/4kB849Vl87wA1TT4t1I98Y1r+FJJYNHdjhxr1bDhuslgSIMPZohnZ6iANa3ytzjjDvvM/5ylI9/wL5X24ME3OA/tZhyYHAbNdcLEDkx2jWH6/mpdrs4B8VgdT641+BELBlnYZoC6l7BkdkMRjxGsSjPmnezIHurLgB43CD0zSFpO0lQpK2tmICGhBszf/jDI7CvAVKDPkxotIJnM4uUmyHJrBdvXp3f15i4MntAl3jF9fQej8idHJ4dxfvcXFNTC6XdLdfZ5SNvlsHEB//F0m/vj9p9V/OS+tauaLpDGrZNIx9WDurtOhrHDc32uRSMa8yrvT7gd5da9w7P87irFd3fI4sXvsCyVa1KpwUL5kfzUbxJIO0T56NIvFvOWFcFiUjlG82fAKyhiHXFbN0HAcyNGGqhlgeMHI2UZKhCOvHKdZkvFHFr3FMOyoxc0zdHITtl2HhJ486inQkJ7yzSN7DZF0fI86jTS2NnzVT7pmZ5HDurh30mvaNWvmYCwYV7V3QxgSQO46penGgsUt23QFoMTOJEB5e4hV9S9hnoPBzmywDL692TJD4qaNMx9iiIlI17bkbfCtZnVtrBh2K7MOptWNx+Y8KEv/dO/hE6JuIF6H3jQul83GjunpDmDOkcDroABwldVRzbOBtzjCslBijLxA/TET+Wo+Cp9FpO6QsJTH9NRAb6ve7A4HEVlfxvejDTKKf2q8+fSkuRak2SjKZFrdNyKFlFxt+ynPfUZMCO5kvwhgcCrMYpy7GqQEsVS630Ujaex3dD6YT022kBGouwqBSNznhV5fAZmwhHctxoalwy7hXQ/3ocaq7EYr5RusN8ybxTcnZB11JF4avQACSJ3LyImV/MrjQojQ2Ca1PATdfqeZJrTK+iSXsYlFgWacNQiNYDNkZ4mrzUKLDPKlS7S1+BtWWfvzZlu7+cEOxq9eycpFpqViPNuDnvGw/GNgOUbnPnr9LtRGF8rAScy5F27vuYiAl3EfQ4EEzK7gcWVMVNWnDdGVCgcdT7G/167eXLEt4C8vX/jQipsihzUfza0mpeNMcQLm6ZCgVdV0HUGufUIgPzwop7eUHHznr86uJZeDOSs5WfiMYNF/oeeTylkpkcBjl6HKU34XpGOmqm2i5avArrZDQgM+r8KhPBt85nHZ3LTaLXgbgH4TTpZzpkcBiJF9PMf9mckCFonh9FUwKe3lydmsyXRcb+jtW2bHWI7lCbY/klaQUfbvPEIkVO+T+5KH8td4q6uXNpJxCVzWt6rdYyO9tljGxEjqInbTKYlXzBe7mgp1m7we/PtWUbiCOrAKt9dwcM63sP8HJ6Pf3bTnEEU7m35EkbQW3M/pIqeMeyBxUwZVFM56aIhC3/lSoQVPQVUdYvIc5Mb4/pHcjSTw3YhoVJDcffwJ+TGWHy507E6ShsJxiBK0s9mNrgJcwiiN5FB44pubP+e9JOQN5PVilht9nvXIlaI2HlywQc24ewCQDFZqHoRWrMzyckvboVvY3RFYkx4xVqEb7bUpLKHkb4N2EiSG3yohD0UcpVK8XUt0g6x4Pv78m9rw0pex9wzO930BHcFXOkNjWnDjJMxHmO4YyRqYLKKisXQzGmaaH/PDqTIzUGpzWyQXgF/IqQnmabrnYpvnrZ0ikRxKT1qBzxNE3bT8xwXQlQGc6mzBbDsiDa5Qw9W9o9585RzPid3azYxYEfowws5GMjNkOICeMtddXACRDsE6jwuM689eBGM+1AduA+aTxkcycfWEtHBXv/z93A1oxise7ErxDodSjJgfHOBIpO+ab3+AYIMDK4C3FOOIVy8RrDtu/9l8PudAbtS2tOddQ6GAssaDkx87UXxq15VbUnP0ERERwKhV62TJuVrrhkLNfYTbNa7kz4e/Yj7NcGObBMDuGwWurysBtwfMCxBLvLyVQxuBfwawzdsukCWwuWXepbO7fWQWdBsK3Zb9mePX44Mh27MxGKfvsBfUkxurjyOROecsprrz+HzZR0+gTIuTcZG6u/uR0ZsqPIBiOf9zBUFC1uiV0RmjR8azdqu3z1xYaMac7Fx7I51gqA4HJwy4ZStz4fS1QXD8D06a+XPxXG95TeensL5ys81g7M2F5kkdIZiYo7zrX7NpvnapN0LbQU2pngEVThTuvSPHK9kJMbVDnhRSRxuVphDPgPtqFjf5sybR5cJrfyxXEpEcsAF7PVs9dcF+56QdfrYtHK0ZhQbwyac03ekB2RISzVVbRYf1tYhGTc4zSZOKIRHE/fw4V+YLm0p3KPQV3SWeTg6yj10TCTAkDgayB5GaeK2JIczkKY0e62CjYfRThBXmeMMOdFUNqSloTb+UT9Lym/RzGxoI/cEAgkqmUF4MMo4RsyPnFyqaZlaYwPAbJoICPJza71TUDsAo20SH4khB9CV++zmTdZrrehSpWZ9lWRgtjsuSRzeM/SCBdxmYBMajWooLC18JXN5ONfFnDLfqLDieOBCZv+AwLfSwE5L3mjvlG1liTkhLykgpesqWfNmbzCok0tv7jALwlazYaYc87mVHbaABJFCevNygFEHhessbo13JMoiLJm7JtVV5ETNMaZmVX3QsRFTTHFZWP+cQHLQl7ocN7e3lZ/rAQVXQ6IU4EEV7pesWDRaUuY5Ir/2rHNskN703wknqEcB7FbghPGp4Hv7ofk6NxQgJ028q0/hTKsSLHvTmwZZIJnNb0GHFmQMPtFM/rpofgyrB0O15OJiFjIHLIyu6tmMbn39KlHE64whMfJhJbRQy0Aq+Fpvcd/QvQWWpZng+O+tx2XIItnQfIEEy6u2SbJ8gdWd0qJAV9o02fc+TMfdNQn2doYo4JtHemTxnuXQwz/74ue/CxKn85/mGQxiLQMrjCZFagnRCrxgKxcKRrorPqv0IsKrUv2Ty9k5iOfZihZX7WUicVle19ZwFTAeeeZWUAlcXrtdik9lZRiK6pT32vQmx//Zb23aCvCPJV+JfY48VY+MLMUHyAx/vVFFsuGj+I8bEmI5FjjilhXmCgWiQN48Hs8TOGJ5klKVJMdW19yiF91C4Afz5mU9AhAQ6Tmf0bmyAzAQokFe/ZcjAYYzlb3BM1TwGzrtyQzRXcBCZqV5LyocCpXj9iNObI8hpz4UILT04Uv3rq/XHMdFnNGU/NexGgGufDQGrMTadbU97fNOV1d39BzCzEZ3IkEUX089hdnWCxfOlQd5QEYy2qrX54Qv8YQxdaHoraX6sa15ux8NN4zFP5yt/d7xgs8Hktxdw7tEYTeK5bqsujY20RlGArFsG5Lk8xVFwlPT6KQxDMaRpio4XbJdH/QMkKX5C14LZ9CFC9zxSeJ8tcsx/P5MKyndytwEodPDAwXX/1QNAy0bec07pEaCEJ2fIUzdR6r34lHz0NnXKfXzoy1r9bnlL2dPJ2NZBrYNJnNxKJ42qbSb7bdrlhfly0GXTsAs0/WCcJHEr4daPlAIrIQQ+kWzHUWEnyB6c7XoQr5gK0f9PinH/zpoZZigDP9291g2x7wA81SPp07f2kDIBrVV9HDZB7Dor6dMxFsnPzUNWSFsVg5JfO5fs4PjeAgg80E/XVudk978Ve5jUkWJS6VgRB+GwVzXBpzcJCKBEAQhcwYeZpFoaWJ/NBlBhcsfx0tXPX/LTwIKFg8BlddKl7j4j7Mt6X2G1N90iS9I14cVdIj7sSX0UzZKpZpp81/C2UKlMGKE3EXBXAjEBXI7caPN7M4qzqGZtfjczAtn0J/CPHp13BkBdLz9r51f0APsuCMGdeH/pXCVZMg9V63U3lOAy4ol89TecuRPrxuCklYvuv+cEiWE61pAEUTIDDSj+kShsyEutTAo507Q4fiiUQieeleOwVCnnV12lxo7/u1YCGsOo8WK+twhHazxThESNPgElFXVQgzW68wnDt+fSXKlb9zb/8aXU8ceh4M0DKAuwyHgSA/IpFdxGfXXCzfFeRqcGKs/RJq5/vELvAp/0zQb9BC2fN+dHf3rdj+dwjV1CSFdl6PXAzULURplZ72q3h0i8+sJvhGI0beY2jIrPKedYWibLZMt//1pXvU9Xn2I7ogwI26EILdEqbt9E7586sYopDAoIHkrdGsrfSeDOvFdLtaz6GnwBLMKrXAj3VHzyUGJzU0enewr7JSqIRa3gkNko1gs0WkPjOTNFj9rGgR5ejx8Yzz1YdlwsEc1cVumIF2uXyw7gdsHY7P8urRq6TY0jSC4PPOOvyC3M3FN2102//uWg/Lhy2yNEKlTSH8R1JESKxu0Udr2TFQY4HgYVQ6JwQPfjaHllmvca/R+ZXBkxGFLyK9ShPnvchd9us0azlZdfXZa1GC7eCPfTp9BAwgVeSp8XAp7eQJbgqiWBEMsa+aqpVxwXyT4/J0b22RwHF9mZ1UAFjtIe1L3/aV0c1b4mMdRANozJ1WjNHqyBAQzMyq6N3fsQSeUsPiTwWQsjYB5W6EqKMfRK+kybLnNKpXLiCMCfoPvSx3YMyjGxUbOz3bBh9TusQ0MsuJpYnweAD9f/RlnlUJc/dRqRHTEdZwdB+WqcXsDLSYws40hc93YQHqt/8EQSAEV0QzEymQEt7hM2pk3R0u8md4+Bten37MpM0AcbcKCQvpVZYErRpAh1F1f693r7c1bkUGUoLSZTHwy+VnBX6sovQM4T2yWzgdQTJ6/MUHlPUTYSo4WEgHClHY0L9lyXsdJo/J9jBYdlRBqVPEv4Hf2RoxJljON56mbX01VIDadfQ7+wO8cxgwtWuJqwma9WlKxU0d6yMjmq+OzSvxId9j8YIe7hE+ovFvHP5dDnPMf510khrXpnbEBE5HLdlS+1sb8iHbC7hyNxxTvMzS2EE5hAwx8RY6rHUd+L/4sc9/WM3VFqZpp1eXkNEcvyKle6FEbxR04BrS6+VGPWvTmogp3tmf7Ke/yy0yV7boZoO9YznughRg9bKQiH//cv1arOYnTI6pPbFE0Dibr2nxNUQEjd4lFgyvjQp/m9nmm32YO286fmR+p1GRqGs+YAE50lyeuJRF5Ql74rGDmaWMvu+uqKzOB4mxQyo1w0s39Y2Kp0xQQhi5CF7Hecr2GVmXy9mq1vNfAQKcrp2yEl5mggri39NZ8isVfZrC8QUJgXMlWhGkkW7oCemznIQ+dUdUOU3BGRJPOzbr3SiKl0XZfP8VudGzPJRYJeZaevuon4yMX60uKFMkYW7CVzG7G8fj4sryiFmn22m59RJo7vWPsGnoYGNRwIC9NaR+bJWKKJFd1up+W78RPhNps+hXWB4Y0TGRcmMG1OAZCUpkNQFgczlGh1UA8DqzueX0/XfSx6LYzCf44zQSxVbU23CQ/S/DHvFYg5EcbvHBRHTQfKSpjQuyVevD4znmtLeY90CIzd2sNBTT52sKk6cXU2aXwfXMrZKn2dn7w8YM+lvOUcBYEJlnPln3kbvm2Rrwszpspqsb6/69JB8yEqqpVeIHTWqc1CELlz2T1CqSpC4Tkh5eUUs2SY9JukcxdiEzaGoBy7qyopKm7c2OHq/Sork7mbtiy61cF81vWbdqhUiRjobFE0CF7zibSrgLAb1/bhBmcdPu2ClkcaCfusS+uno3KET+1rZLXPpJwCirEQTolZaGy3C+iPF61qfBJt/Uzq27m478c1WmWVTTRDJAEK4t0hip/fGczLO92ZeuGO72LdHpFeNSJzwtZBMtW1CCw2juIUBD+oDKyK23Rj7rphyhMuH+zrHxXTOLWfRshO6aK9G3feCM7neDpDjzGV9yvP9ykvI1jOyN8mc49DXkNyY+yemtEziJIoZXK/IVyVsMu4mCHSThc3RAJGKOOVWKt9kOjO4it3QfBCTyYi09zO1gQk3bFenDBzv4PuWi7pCHX8HQvy9tr3hssesT/EHCSbwPrzpxuCHZj0vUMZEmkiWUQDM+dNr4REXE4y+TPrIgImQ71IKOlAhXryZmDL1NkHI3hfVXRx3pS52FsCx5p4SaouBnUtsQO1MOa8vryEkQubfg+EG9aoeZlWi8iJJU7W7l9X85dmJfd0ywgy4DTg+XF0S4qY2iY3o4m3sIZSF/YWgdxY/xnlBOIAYPOXYe7E9p+ewGYmjVI7bu+uyqHw0ZOxRzafn0TSnhD91BAo9nm4IB7qXwvG0P0XHEGvXJEhuGyiowgH4uV5D7VcOddFhc/ebvjn598GoUMER8VM+3NpiIxwLW7IreBpocg7pZvrk4FbuY75/YkCmhhjkFRYVu9PI07R6oF4068RZpQhdB0sxCa/cwDeNThDm0XhdMHBRae5ePW+R9hDcG/4ZAmYQ8FUZAZE1Gmd9OWKhxkv+uWrDk/UulM2vL/OEGpCQPXuW7fjgiw5H8HxK3dyVk6NJkyK8Lc56mI0fDiYP24X5dYLRU+pGaxtMhLR/GFEZwIlsp8jZDnwfrDZSWsRif8FWDj8E1SSFrMVh4tAZVEhggl4f56+f8xqEA6pvsCdD/ioOthekWq5jwEPwF9faV8ivsIJfaH7a8CUvRIy52aFXqo6SG7Cudi5ROnnh0IpDcdyPIhEPcA0S/3Mlhernf2+YHSQqtg8mnLYUPXgwrryjiwzf7d4q6qb4ZqwZ76oGxO8LW9BGxjSA0MQE4TQUYPFX3/HbJjIC4oZg/koDS4R7UylZnqs1LDkbn2NItRnH4RaRUaKZFwh5p67piVJU5DINIS+EVKCzdY+EPXNlbrTJ/nA2hpAcaIsntUHO0/wHrJqI28nbUbRvwJQysL4hTpGjmTb2is4Ews6Y5k/9wNxOvryjBANgt7B/Y7BcSx85CRMLAbZwf3dS/SelQ8tK00fdgK+2o0/wMhgFHtENgCVjJYjvRWAa4u4/Le9tV2Mt44IB6XZOzY2MBkgFNUPWtOk3/DYzIQ/712bTTK79QIJqr7wRmR8BKeq8U8UafYf2sQO2k817muFMa6OW+DVbp9yk0dmjR4XGqf2KIYFLm5aJVddvEOR6JeTT+v1Zqe5uCyEg7UcfSeTx8s5xP50LZ9ADbElFoau/MBtlMaR5g9XE5lKiwQAh4Idjf2qkb9jeXQrXR7zO+/bmNmA3GtEqDRdJMemJrOT/U35Gxg1GWra0pLTC8yeiuxAyWHVCpwssRmcz1MSmo8jy0+jcTKdLUuf2iqTlMLBjqDX41YUPo58oOtBJrMBUHknUoXSfksG8/sMvRlaSfbSxl1BJuRnNVU7nhIiuXfrHPPUVOiKYQ/j3KiPVsEwgq3KLrWbaD7JsK1H7rBWKPG0MXTS6DvZvemGbR8Y1UOwVeLUQT2+92mwl8u8cieBVUEW3L5EvoIB/paBkHVJGr1PJJ8SCp4mSHqJ8UpoEk65sS5lPpqqDtoOj8btG2lGSvekWtZjIXQ4tLNRhzrk4gM6nzbwDjn9vftBA2zuY2wouZ0nddPEtXaywoBe1lBsWld7P0QudHWBq6/Fb1kRcqEde3ehrXaa2ZvCBCWh+YeCkZoU35+MMHvK4xmxJv7Iq8PmajJ6JOy4hIlD7pFhckqzjCaRFtH9xeBHP9w0syhnMi1+c4BuRnZATGT7icRfIsaes5ms0uaNJprUWMp4XtbA+WlVrehDrw2IUYP6E0gC5K+f8cCSWk6STnp44AbF5gdEuBDW4m6GzWLga8mZ8ejLhJDy3Qyw3ai4uzxjGRSfAmTMOj2yuwPTuYTh5hXPLatLReN3iwczDE5Cv/tUmpDrC6osoJMV000Kh3WQZiCYYcNRJwk4H6v/ByhGOQQIBOSXN7JnA5CuM0/9WGJ5VlabhMmF3+X8eBW4zNjEqbiqSoYswA125eTYIp/mNdrUtt5EogZy+V9MfhA6OIOFyz3Qxi7HoXOPz5BJJ8t27grgvaMLnpMXSw2wI7CYXlNVNZmle+NFNwr+RXNaOQHjrGuBIVvtE0znbKRBhAR+L7LsXt7iQAqZ2WQr3CJqJaIyrO7gGhTb/YT3zHFMlsjkcsPaZ2CAeWd9jwoCzuSca8/dDsQBdV5isgs+58lzkTslHip4ZEhZbcwtt+IbH727L7uWVfu86Q0fD688b3gJ1hkJKunSzYz2i00br8aqTUPx0TGIFwFR82QpfKYIV3br+/t6qI34dPejf6fyWXMlJkSyPiZcMvzJSu0q5LqjhNWDvgTRNaJTRuUq1wzCb7Sn22s8dzib/gQzkE606Nz7mooIDuYNgKEOYwJnKZoz3ENZbLzgiimBaa6ap1qdG+ekls5j5ZO3sG9p7cLs05l5lCAWAXt1AP31FsPhHAUuxLMU8OxcTmQwjbS7VNVHyKOljYqbdUb6TArcHF/YyVc+iK/ajnB5AwO5wRP2b5kCnAgLxaFdCX3kSak0d8h13Awr6lbyqMl0onM9mFbNHQxQlxgJLjU+fW+2fs6KNTWDLoyLalIQ9n+6XF71v4oAhR2DcqTjw3EZy1BNKjY5X6f3oY8I5yfbCzEjOsVbosz+iIgXvKgzm5cpj5PcLu0MNEvnMcv+wGK14pPPgnYOU2MUxoxqTIBcRY7oLxorMYnQsgJNol/FmgTAWeH17eRCl7xYQxdzcz+NObgD/aF40O7Pbwt+/qLV3RGWkDDsAGcXEd1Ir90CQHC2v3ugg2pgW2u9g8wVql4ndzorLolHX11xh8f6jteWpYIwRAwt3Y8uvBlx0aM+xlPBdjKBLqm9ml635KApk/KbKL7kHaq+CmmTjhbEIBEkMvYwnqvbzp8WSN42nzaI7tt1JTHtH6LGepmpXMfg6aB8nG9pY4xyQT287KP8LZlUBvBeuMSVJy0/xvyowdnaafoc+vmZbut2I1Tqw2pPLSySAKNeYzJIlVzxRv5UsPUIz8xJwqMiOblLRjv/fSMnotE5Bk/B6/QGCUC7k3wEXlgdAY6JzSZEnKoyS+L96S4d/Da9VJX4RfcUUZWKW++t7g/jPY7t0B5SkZYnX/fjl8yhgVwEIH7NGBbdIimzqT+p/t9OJMi6pUwDJsJOJbGOc5CoDPp4Dn79rb8Idy1Kms0Ou0INxRS7sxrqYJrtkdlMvL4NAzFgs0vc3GshWFTWD8GsuRYIwNK3iNDaHqfCjCyVjBOreI+uTiQA05LWGGnW+9vX4THMnRbE1raYN/gYIiUiBBypaU1kX65vgK8OwlIdXbLaqVXsBAwQDUgGSYo7XcxLWNVuSg2p4CdFWvk4W0Fm/E4nsVr/jywANykcm891Ko2JMds2W8Yy2JhhAOWdy3ZZpbUb7jq9ESAzYNgoukQ5YDjdc1qdy+3EpI9lOHOQTVYy7P5sTidl1eeHP5zYP2WrFMcPK05xYWJtpok1W/sqWqijkK2vEu5NhQZnuGzdG8hBr9b3J6rX9j/RK9ZFQSfhtNFm685kOFZZNC5cb/7ynJg9n4uJWhYry5ddl9icNFz24E+w6e04ZOd/ZYdhA+8IljLYpXAXAxq+UTN0fTduBHxvJSxMlSGf1Sz658QlvA9eeXFDfNQfnuNFC6VG9hFMF123n3kI5lmB/iiBfHqMjMyopWc2ZbFz7I6zmDZEU0Qh6ZCYolnUBUKD2PnWGa2jhRbh+VZ7XQVSviuFvcSCa6ZEqrfd0Lnea/tLEu+6vb2bt0NxKIwC3dGZZA7QxxY/uB0DjcBLeeWizuz/tRC1m1Qs4JcfHfpEO3c78pA5C2xmCBnsEwz4N3OkPfilJ/3+m8p/r6T0GQdOU4yzgyZj6pnohWMFcljjSwuTFghHVOOXov0/PhWjib1iDjriDWfov/Aeh8VjC9jlbG4+5CwPg0ti1AmE2KLZoPcsIpN2LCOfPWZwSXb+7j+X30ebzlx+rSiqfsWjPHDq54k38jZct7AWWUz0zATds46VvaK3aqQKfwvz2kQw0pHtZd+pKq6sB6rMEcgfDBv7EYo5Df2opgYEqufD6Vk/nrpdOguCZ6yVUxZPAGVx44ZfMDaed+MZuFn1rdQwg8ZObMg6C/bHx2gb1xowMmTfWDepkGbxYhlRLSllJxH2/968mbn2rmPmPqH8Owst1eincf2cEmIItYWYAXr340y0YGG/Q6/smf1GLcBxSNKlQANH0XcS7zNa6pplZHv+NqS2Wf1GH8x2GiBeowlI/cKjLulw4kiSytS7MdbvbFHIhh8Lm+sJ4X0Ubopwl9qDo4a4PckaMeYX1IX8dArzcJiNOFDeOs+SOMW7jZ2KtGeF7dZNCf15WEG9/67VLZGDjiFR6RogK5pZ1TKqDMn3lhzfYkyfqXpaphyliDsrvuZQw8O/4D2R/FV2j/6bopN53Yd51aQ+eEgi9bKRqbVBjGHVgAU+UcD39NoE3M6a+23/+K6HEaEQiwiL3t89sJ6H6YLYXCEUlL1bGRPiVNqOInH4XthiTf47XXlgJs7XVbX2CcExJQ7e0dCJSuG4Kq3+bwjJLdgkVI1Tpjgeq77f2QMeX7+zTZN+jVenbr1jMGFVE7Xi3YfTh+aH0t/ecuAd9Tp7sbfHyQ7mRlqouRl8M90NzE+inUJjTA2Em531R4VIG+fwMv05dgJ/5aQ/a+KZ3yN6BOdOh8zcIZT8Ur0dHDnBfT7rtOStgWMQNXIGbGNzgr+s0JNv305oCKaxSBu07qJUH7BhbuA8vEDzK/4GVd1PDjs9ocGP+Whe+87a0FTWSr/7wr12GbTkl99W6X/7/Minhmt15G8xq6BLVYj7uDkH+V5iTGGiaeAr11RMntUVS5TD6xScdGdhTlPJSYvmqbEFpGVt7mA3Wwjj/MpXCUIiMQPnmjzOfs4DBPm8je2Swlzr+01jBV82RPAs6onB1fzhdTH0ohjnAvuCA/kv56WZoDvWRZMFyvJlt5REE8uFrJaBLh7CXVuIZO6xyhi+lceMOILr+eIS8/GEfvKaHMe05HdVeXbWYac7jbP2zb2Y1e3KoEq2X5l8gfh5okniw9yIQN/aHw7FKuTyBwh8KU4QdU6P02V+0vtW/juFPOuy9q0sg6kGjO6XdqClOvD8n5aa4D5ywbn2WaLzV0Zs9calO6ud+AlxZZ8kGlhx1k9/qXDahmrWEWeuQbvHjv32SLDggmLvB5ZiKuUSo4uz6xLxlcbxYdIHcoEEVBeKOes9qru+8tmKke0NoyCJPvQaYXm87h1wkmB721UbA70umgvn+pGtNjarQ7Jk+Z8lRnd5MP52gIB0fBocvoDmz8JxQ4kfZ8xMJVqmuWCt0QF9RouUtvvJP6Q4z8W6kaNr4MCHyski6HlQOO+cCl6mCMWLh7hDOsjxxgqUbLw8fsJvtHGFr05p4dJftqYdoDvoFjwRdjifiajqW+kfU3xbm8qoNIjOvHWCwtYNBxaH0PwqV9TTlaXS0DR/zWKbukELgpWMCVUuW2Y9OG+McSgGQDk8o/wtMxMiPSPtqWUSb0VIhJ3fKhmp4iHkxB036iBEmvKxKrv+1xIo9pVtMw1sk+Aa+xKqULIk+nuSq0KMUuaHaww3SEK1gWq/+/0BdRy/6gfYLmHa6Ye5pdpXdJhH9rTKgyuGxHLcrloiDkUzaF66ND3fkvBAqhTMx3aRRoMv4iPaeHYnc1ENoiYZJ3g9CuiATvlh5M2/kQCnTot1PA0iNudu8UQz/4F6ODu76rZ7VyUcVYyxCMhtuRdL23BC9lLbH7HdhAxjdNOd1bnV1dEvK/vJSsGWZipYS2bwQC1T+SbdoZ5KCqw9sjp7MyipcWTtSOpQYxw0FYC1XmU62AsGKswV3R7NbhMjOqwEg6Fhs9FNDCigmXaPeAtBC1ZpBaRZPV4IIH6BY+zTpU++SAWHQcsl64fIRwg7FckThictguIhJ8vupP+wKzOAw45z5mYuydJEbDU8U6GG2DO4IrDkF0jyBmYG+XSqKlKiB67+Qp5NoNaxnstIlQ5/wy0y3azJl06HiwGEYurexij2RoHKEUkHOkZjGKNsrxhQq/KXm21wTCc6lZvxSP8S3p7Q0rlsOdtq3Uy4li5gSfZXwYHQW+FKayRb2WYAIlG8o5u5MDpybGVZU3gAAWI8jteJgfrT9Vl2BDw4hXs7c6i4V+s1bvwySR44hXMbfDO6/IFc+nX6Ng8WBWrK95QO4dz11Xz8qX9XmpXCQLR/cWQV+Eq3ZgvQPq1jaXuP0tADkclEyufaibSi2A+f6syJqQBWudFjVc8vNuLu69w0KvZFOErvGJsMdbQqp5QhEeuSSwwTSti4DBa7Dh+Svh2QBTHvNshauc/+wZ7/Jrm6zJNN+Fj5obd1q+ZonjNqeUPQ6I01zyX8z9qGBovp8sq7RClZkUEu9WCA7BTFwTz7352vA6UgFlF7Uo7gTc9zsDxE+GwPPJbw3cqrfrFkmQIAA9qku3Te2FlhxUy3FLCQ1aWl1XubNnZaE6jHegdg6DZtsVU7bami6wBt0tg4Y2ZMzdABPstD9PuccEmlgH6kjJvAap0g7DeIErX3n39iZbSFBS0cOwvDHGX4TC/g2vy55rPkDToQ72MNN3jR+f90zUqX6VcH6YY9qaCXVQxAk4OZof+BTaxl8YPXMbq2fywZb/xDXXWrQ03qztjCylbSEqP7h6jqZaaS20wRHl0M1yriAseP3zk4x6ywHqhIEiEmr9HYvB6f/i2+FyEm6kKuQtlDXGgWSc68cGuDuMjR34xpUCyxDvTOKVvz4E9sMBMIQb8FOqI6XHVf0wkcagD+ZGBGWmIctQD6R4Jvmu5kFcHC0PoM9fl+hwL6BmGbm+C+uVm/vh2r7Y2wEgcAmZrT19Jd/61gtolVeViv9UAO995N0o0PRuiUg908QF5JLIkebp4OTR0DBSo43Txchi/jh+RwlGs43Mm0OzZ+v7hylcbyzOiZ06ipX4UinC/gTCqx0v1fTGNL2hQs+mSE7j0miEKlHO2Re5ASCkcWtUy6P9SW76rTsRyHElrRnCBzmDNHMFIecwjQHeonSDtJornXmndZNgY+sLmuDLA5TmbSe5C8LGSBGIkGZkof7ldbEMQjkE2T0/bxmuNMC2YcTn8zIEequBtVrmzo99QCziKNSkLCtePSl5bXzxdwRAKQx+IN4PuRS+FXoDVize4Mo191fJts+L0bzdh8TaiAk6bzAAs/5HFCZBOscDs1oTUaLZzRxX3CFnH8P+hMud5iNu4mfxZqStswvdG1Ec3HdvU7E6yA2s2a1skjYLejyGpWkTSbVBD2vDfPMB6J1LoCR7S+thMvaRpXYRu8wwL+juUQGKqfW4wgYDJffGqS2B0gps0fyJDRNTZh/OfbobYF7LvtuDfJbuf8tIpUvVa0G9qe3XpH5RjDgrEjE7f5KSKem6gwS3lcHDXsy2nHiP17FTkcUEvs2wG0W75IwD8okTl3eOcUYNFG5dQf7pd16sLBOyAufERNQmSAVsVqHTPg5yaJENMeYnPS2nMeWR7x4B+86qtsnLB26dpec6HkbMZCrWJbMwoBMljlGUTfJbope3+pWKOjx0tZCKxeXUlA5A72aPbtmyT+4BanXJzFdh0hEHQeWDYAe6fOD36rePIjOVC4/DzgF4IliTSzu/3Nh0K4sTlBZuBGEr/QXyHStORa3Y9rQ52ovZxjtfQiX/Z5Mpian3D0oo9WhTux+FMVv8OsdLwkxZEgaZsCxNYCVrgcFDlrnfdTZX+GbWMQ1W9g8DWAcnSKvavi/EBpObn2zYTGaN5MJc5yqR1vrwdT8fvcpZrDOgEcOfmMrA5Wsxg7QD2RJ9v8ai0mvKAGV9FTMv4YTGclOXDm29FbHfhslTJlhHC6KNtVbic0HBRvedJ6qfpvNodwm+LuTxeXovXCwgM/S9rRVyl25w71cCQ5M37en86WNVaVIqV4zVxSb6mXH8hX00IpUxb77McvV6WJGt1blm6mHaa4KmWIlN3XxDsIkLQt8EaRbJ+vdT+a7E7IMe8f+/yPh4nV4Fu3AoNrfdkJkx8kK4X8oQ7oKppwf0LmrWPdeoUs0RwQhozCFV6hd1rRENuLZusn631mmp2lCfLUE25wyiNGB3p4Jxc+Ta6FmRYxZqlWblcxM8k8AZwJrJYymV40OCpFb8O9mq4VaaSCcIhuIMYZFZzVpMYJoqBITY8P6bCxfBP2quD5CZu/FMOJhdmS0IJsx/6O0yJxTEOeMfg/7MUgvE9hJ9ZQ/b66KzDF+SqYW9Kr6PLBBfQzyX3GEDfqbP9x0XIY9Xoctb3NLIkFI/cKRXcT0HbTVbLhe+Q1DczsMhuNRdUgZs2PJ+PabFt7ovAEmJSPWFiupXCpMdd1TjvqngBhBnhysO7V8jIMgpmkkv40x3Wj+kUnJ7sG8Qnys0IpBC/2MbAe0d9wMT+dbIxhnFwrxWSnvwaLZQ1S/e+b8ezasu9c2ivxRi288VvmXXojsn6axJtL8M9tN1rNJp9rgp0q9wCAESnDO3rqDi6pxfGMF/CpWYeBCefvHdqLr8lP0qNm9alu+uS3mYK+Cpy7wJjOU3gysPofNwX9SqbAhWcDT8ZMB/gcqSTjhivz44U2NUg+Q0Xe2kAi0wYJbsX/YRt/KXoeJoMXrlEUMqqpQlndzsWmBKqjTsf4/ONW8ep7r9vlcvn5sB9Z0XRzwan/wA8W3lBWjt/NVPSfedhrjoALtUTaziKbTp+BRBeDYjCOzmxd1JESNeh+en+Q3AtowQGExVguSsAriPgtq1t25WcnFkGkItE8cvugqvh+yJBGuMMWSCIT1+jQeRc5fiHHxFo+pAJuXwQMNrlpI4s/E5gjlcU25TeQ3aB8PiH/AC/yFIs27rjJtPtnfuIi3+t2ijeXXi2bUaPpzoSQ+Sus19lQ/PBBNZVvqsKJO4X2+lNQjR4MkOhZIutMLiwzFSIR96dheVOrSXkz2y0WxtlYA/RJ0diEPcHYqCTzjx4Z8Xe1CyFmZd05D0lp5KMydgrBNRfiLW2+oKRCE8lMS8NPpRaISeAllMkupFEU1ZlCOLNa3cT1zp/USl2mFDVEFluTKi+D+VycFFxeFzCu/LQSYJumKspZcJmb0GvVAz8tjTsykMTHqatOGhppM0MFaegNJ/5iDb5og1sXipGwcElMG1OHa17deflxTS4/xKtfX9OmfiDy5WLKNd7Yt+BprWm89Z9iOL9fLahC8+MM2twCnj1NP/pFgd4kvMTV/WoeI8I626FNv9+uAoCkhZPlDZouwZZTkPdjBSys9GmGp1Tf4WyAxCkjQ2WO05vxmWq7WwvB8qajNrgz6rtwUiZ1whnSoLGcAoL2ZPJMc9xdUuUrlM3wvzBshP5419aYhSSy9a2EmBAmQyzZ/fVVtQ0IR1n5y3Y7nHP5BtQuUwxCKyCPnK3CBCrDEwxZnlEpyHJAKi6tzbHMUB54AszbH7hFPTznjzkD6iWDMN0OC1nYPuElesBsMxG/r773zcdqAQCMMD0slCbQFJFeHfZyBa1+tp3ydt5SleU5CfacbqzSkuPqAZCpuANv5+ucaeCv5RHzcfzpAt6xxIsRE8/iBLDzeZWQPweto7M/HAEzwDP4mhIjm7Uj2kDY+BdkyhIXgWoNohBKtY0OJXpKykF1CSkde4dfEZ9SN4ocGl6AV9moMDbpnbP/RY3Ej0LuFlhPBgMYtZTuOzw+I3xZe1sc+a+mVZ+A1B9j+ptwfM/+Oh/ce/cpLFzwVTAfPjXLe6VbsvnsJUGe0l7MwtjPUE0PqaZDPo9+Veo8sjiL5sVYxJx0ZcQzT7K+412qLQqFUR1j8gjb7l2NY1sGPokQou5BLwtjqTP/pVIPs93DpS1XLWQF2+SRVEJ9IFrTxWau2I5XLQD9KregZ8uD1rUtJ1mq9gTPvgjQxY69PeGL8IOgkDAJs5nhhxZp1XZ9pIyDVzhEKCyEuynzKwVlY/YBOce+xDN/aMUE2JvWfAFWimrjyeh10CKu3VOEYD91d29IeXUaPt2tlSJsSw1qZOpm4DrZU2hkfDT4d8IA4JW2OfvXKbdG4cDCoqYxadfigTJFT2nGZOdtoYxW7BLrJJN9ZNYWGzxiH1cbsuOd+A2/gq6foB5Ib3juj/PXQ1k0+kLb/e6uvdm2L21pzeZgBEZlSmE3tYjdrdpvcmluGLG2S3LStcdlu3rnvW1VV1YQrwAOYRI2Uxkvdnc2XW65buY9i5mI/9oW+EAxzPBVBeXntCELNbXRc+p3ga4+YZW/ysRMf8xClHSAugqr+ymb+stS5wRjBs9HEFRNVfN9lxNS9PNeM31jEuXVQuAjPYDzL/8yUbVWhRW3o6VwDKn0VlvPMLDnpkJ9zHzMOTTDMnBQalXeKww3ZXUGIdzWVWTIdwuLOj+kr8bqUfV+umRrHUKM1G5P5hRqsOGMvtqEITehw5BK5697KL2q22htHEJ8uZrfqgd8kyFNNrcI8gE2aMn9QFbAh7INfTh1zofqmObR0SefhrELx7ZXadgN4f1faGS3QUgankGEf6j7PFzkFL6x4dX5qMX9xVJ0od+Ko6nzPBFUabnzhLFSH1n+DA3tWJU7FJ7ln5hIPa/sbpXSFpitEi93dQvjMh/pIsi5yt4SBYxgLkovbcWL6hb/AcMYbu0fqLT677jDEuGzcoHxsXG1s3NcYGCNORwxcsREhUhXWOZsyoWOpPmb5URdAMjJ2Yl6jNA1j120kbrg0M/sfXYRkDImDOGqStKcD1Fsk+nsE9WR4PbUyaa57KIgJcMja36K4YzFeOeYpJ33WHagj2/fnXX5waAJd/OvyejqfYuL9JPVwQ7dshy49fMkufpoawxtLvJScOWH/cIiiXxozGR1IpRwpXV82SBpV44nBKgadFNBUMGSEunpdEF0D5tGhNTC5jvySiqLllhUb4i8zf5MIU59XpqjpEVizBZC+Lba+E339nulYlQguqzFnZA+4N2sBLUnvEdhQSei5ZN/dRRzxogmw9o6WtVbNlosgsIWasuXa6WgmQBLBNgS8DOyvVseGVTRcKUT8MxLtSbv2dchPMfvo/+OkggYNEF3TsMPovpwYBSgtVGQo4CPu9Bpj+1cA9N4PifxwN459aS9RFahBTdThMZ9GZLC5ocUeckli76cEQ2cKqBpzY3B3KuF9eweH+3Z2BumlBwWtA1VaDgtCAGrnJMMHAuZgkWTQEzQNv7J/c+7CbSUns/tGp9mp/5dPaEcOUiPSTjMlz4JE87abv5K62dUap/pOBKkBR1AJ7szrI/AkLvfMX129o3znFleXYfexB6FgGlLbc/He/5mD3TNzy5f49KnAuG+qPCx/wN15p6C1ud7ehnsWUOtr9g7/v2v6Kai0VvCgxS1kyohQ+N15hDcLoEQT0KH6Xi6oi6KXh0fIS5X8QNwBH6M9MxINKu5944Rckil+kbUh4+giUhn9yauAjws0tshmVpFibsxLvOd+c0366exk2DdToh8M73axiAq9g/IBwV9jW+V+K2dSAwueZeHkIsFKfG9otj798Fn6YZhJzia+/5QdJobuPJdat+oqZYnvC0r2tZi6mYkML4aGyBCvzPoJpR8FLguIKV1dSiduPFM4Nk8Xzhl2PM6AQhgjrvB9bpboOK+ljGTuCtaxSAJQHMtOTQLPlh6sQLGjOjs2V8Kg/GF5vV569lSXGXtyP8VuW4E92QkB4Mfj2jHE5UufEoZyisPfoP28tmjWN2q1DCYB579Icg880Mu0rCVDKZ3uuQsA1i38HVRyjq0Z2sxu10L0ZKlxU4TGwzB/nmO4t3G4ageMEuvD+mnpSGVzwoj/4ena1vau7YyzK1Gee2I85jJsSLzblA49y8rN+5zPtmEOoi5tjp7jBplNVshqf9S4L6WLzHzUl+iSJmkc7DLg8JJN6DBypvitZUPujAr8xSch7KuqT1A5mAklPGj6/pUyH0bJqTKE9JSwfCr0HbPyvOBWJ6yocyKdf0ZYBJyBoTsZSiBFFyASXyVD7frLJ376BdrXDQhp3b3TtTfjsZF26bV6jS/BB/vQ+tIFVUYqbqsxDd8MR68sQoZG3u/OYLZkqhFUWyFTUo87zI2WzBDVOIjkIu5l9tw1rWRvKokOQkcIaLXkiYQV0UNhFKP1OQ0qiRT9yl2szUZ/PrqHWOpvr3zs5rFu3IgZpb5f3otMkjlBKD5oj6ipjjZd9cuWEsDoe1cgIUOQ8+tUuSmh3OXcnvdi0JFUCU5+ytNGgGJh6rpaA7SLMeC8NBg7F1o6qWwStdXZUgj//RED84jsLwpnKEEAptd74py4j2q6+2VrIF2TNQZKUF1AM/mi/1xQPTiaSGPod+/nSx3ky9f0RlFZnwNiyGxPoc7/iKz5wZqr8BsZ1xFCzVlD8NhtvdUXpzQKT/Jcr8LkP1vxxOmF7ATygvjLa0qm6Q/yR0ATYrgZNUUuVPQ0RmWkMJeO/q/Y7GxIpaFstCV00bb7k+PC0R25rzTF+180J0WjzIlwYJkqvv7+Z1iwSFKNx2e3ztotuFwfaZEaS8HTeATCkJqE2LD3b155FbVkL0XfUhzOMd6FyDYh41jS2tlWIx5+ea2BbE7arNf98wxLmKaffFkkt5zBrsj0gKQSQQF88fOQfOMOmj2kmUAoSGSut16nIF/kVo5vbMOQizf6WEU21HbrqTGKfrhUmUjgcs19h2r8eXvxErnEQ8oQ2vPb4wk/HMz2piQNtL5Dx32IkcD67Ayj9ECageF3iu30jGrvUN1zspPBGMrY8UfY90iqzZspkcxOGQKLTyCkvbd+OrE6qw7ZNlDM41VDHxskzAKyTzX1vD+SFmMT8Ktvfe82yYkwlL+FjERvUw7UsEEIfZ0OG+/Rzu+t/T+S8M2VP7ZdtMF4Q1Hv9p+6S9/zZCjUplkVzCIlKrPHFIC9P2/bNYknZ9np2n8plooEN489bqcVeQi9Y3AU272vnMkshbdVrwLCt+AIsMghqsKOZWv3kHLAss1Os+41BBhZwoogVRQHCx6d8r2fF9bW18N9wwCh/ElOzMGc7/MLIeUAdS5TqT4eKB5x9unR+5yElpdx1VZ0aWb2CQnHprPz82wIS6+9kI5y/1jqwZfhLeGY2IEcCTzqaM9btsGl+cqxPoSQ84T7rEP69Q9FiEwDLBY9L1zgaDdandMCi3AGjBVoIzSmGOz1VP9CssCaCJ7Pg7hLcTniP9bTdUAg/lOKmPkSUJszpgUtBz9oOxtiHL2U/Zx60n2i/I4OLy8lc4O3U9U3X4hzu98ZivRbmjh4WYh828J3WCrWt6e+7vgcO0U9bP+hDCKbYinACfQ+WkWRQQg3SulCnypotiIjOoGz27V2xeIjRC2cQcueyfJ6KMjwtP1fv/4lZRolisI7nabUq+2Np/4jPajWrwrJO1sh5dbIa/73bex2h7az8iI+5wqR1hp8V9FffwXn+EAXDl+k5ZlMvANElFevuLFTlWZYGrGJDp1sDCkdSPOLh/EFp7xTpxhCkH/S7y+NbRsbJtKX0obzm3CrpNapYlpR6J9u2pEGc6MjIwcYp2oj8J8ULWOKdNmn2V0GEvAqsTpGUX+6kOwHCHDDUt+40YYY6p417arRfAwuPUKyi9U5UIG1aU14McXBN8BbfNA1Jc6D8NGyCaOxo2O39HMjsPe8zqUWwBp9+W9fHffvPHaSX8fLo2enBD4gmXFB4IFogRuxj38y/SXV5PwSbHf+M8mN7/JKi0DcNLsDUeXllYTB2cTvp/cBC2HRDHEli/qUFsQqCe3Jt8D8eEpMqJpG//34H8o3wnsw7fVqpLypVI1OuFuz+Mkj+471wZd4GpKNL8wY3RpEqQXGqcfrAnsSbJdFz3ExBkTDpyF8NbUhzQJPUWTVoOYSelW0FDwAk0L6i1lHUtgOqIxLxCG8/RYKXDP3xN/ATjRSTHUg4vtyIibnDq8E2CxkX+QCm7yXhCCptemOJhifgn0zDinXdCTQ4IoIshSHXOg99VHfncqJ7p/0WklEMazW9+B10E38oZi9SMZNHjEu4CXWIKiJZdCm4O55exRwx9Q8i6N35hloJZ95z4zJhla5vo06+6HXdgSvsU34Fp2WI1IEnd/BdXgIiCJc79pLddSDU26mxSgPvmjVWlO++So4bcYWqRbnJByDtGFNcpKPMshHU0MqbQhAFWEeDdyJVC08GI3ZAHdpbIMXHrOZge6LtRjoao13HUe+cdaraCoLMI2fObjuks+VSlsa3EGk48swYSB8gmK8oq04ygPt7VhsS3rs1w0QoQeKYBsyXN1vBOTHdQYydOgWr5FuoatOrrQbR758p59sdFjp+WySrYr/JuD4ekgDXCIdFtcjFjHdFtK1Nc70s+R9IpJapQVDYpu8GpYZ2rh8wtFOiI5FvPrrkE0r+0T6pPO8/iZ0AOTlhko2Me0h/mgHuh3LX7JhUHZ9eWUpxtKJWDdKESxom01INBGvYAyIRT4ZRumN+9bt2/fkyzr+B9Q3eI8bMxm/w8enysdhm7wSdybVyOHbvSak+AL9q0OwujcOGoOLwegMGO4pzf4w8pVJC1VNMY5Lj9VmkvNLXdwcEYtcUi6BfCVOxiAb3Oj4uSmPj1fGGL/VnnJXLXiKjHu6rIcNyiWvq2auJPdYgTaE9REBfkyqIg4VDdkwwjAzrAs94707WYa5b79GgeyJ2Af3fCyfDX68euUJLqaayInHT16b0fRrrrHOP+RUL+2h71A/viVuVdsj2NHoze0qUjhrsH7jDw4AAO/MyIUi3lRdOYZhmg3Eh99ffv+xtkGl95UFa0pCXNA/k0ByjHjb1CXH2i3Ehe2uqFYitAy2OItwA40/4MSYdYxHR1WrXUDYUx/XNGpBvj+SACtq/soe52SPMQwVp9LYH5VhgVmJty6L7OdiaD/OHJBtOYgnxNUaEhA8Rf5rXPx43KSDLpEEp/iNZeYfLQmtzEPt/TR1oSx6ijQbPgi6YVflvf1ggtlTOYqG2qdiQbcvl1dhzqJrstNxeObSeiEjZW6cD9fzRnyYmMcCkB/ifJtwTvxrzBJbu0bE7a7r0q0uDtdkWtLrMhoA/IBS6pMc8iK6hNd0luHIXKe8qqRtBin1VzuyAx8fzevy2jLEkA+o9SZfGHgjilfYD2A4ZX3MX2poi2EGSTugnCgRt/l48YwYuZAvV5CVHObqaEUg229eIPBsp5FRbwkTNwuWEW5Y+rD7naNqgvIpZTShcBR/j2XHqM/quABKU4xqxHwwMErBAAJi8zibd9mAXFmxVeEL7B+J/iwszMa1KQ3EXyeTh/0FUgjM4X35IZNkQnd09lZ40ZGeTF2CzJXzg4kmBl8FxIh9XPz/tCgxAgbK26WCKtlAcyBganqTBjuS3VVRG4od6+t6XHkdaCv4AVpuCZEM2sErP2FBNxDZSCm+LfrrwCIwnbuMAp6ze2XzpzKAPiKWejFE+7At+Aju/nCjEf1QWxgEW9kHjZqdhAdNdaQMrVYStBOELmKK8pyF9scDA9cRIn0Fq/bymldLexmSQykkP4fFdduYwHbiRPZX2BteBlBCoxFi+JX/sGdjTSRDLqFq4r8JYnOoifdHv/XAg1Yndr58qMoOjUwUBx2DG45vKFIMUzIHyrgksUws/pjut4XPEiuw73o5zW8gwbQN0Sae0lgvZPw0Xi/USSiL2YHTsnY+7OZ/oSIq1kxJddBh5xcmW+ba9xbsiA93Hv2INB1E4zueJTXkzK+XGt+OyI9kBiNpZLYZuyFO3/GsHY97tjsTjOFWx1mqMOBNmDV4QtgJsFw7tQK+FCEFw8vz7+Ny3ko+7OWPxqCrFI5uTm7fvNKFUkjFFVCJVBI4JnbZIAcmucLy+1Yse/DgVtkUl2V8t3AfOct5HAHqMAHbWm7fSexCbsa+ZB3LIznwn6yEGNeLmR6gCEO5MbEkxm69m3LtmQOJmU9rn2hK1CyuUmkvsLm/3OUHvmqHo00GBP/b+EMP641bwlyvH0lRGn14BX/5ZSP9yjerOxOpEOs6fcgUmjFgVUurJ08+Sd8yDWgGQuPbUOdA25Hlao/flKeNZZZggaRFVmmiJ88CmcH+A1QqynI0Iivwtx5ocGsq7NpMA8hLUJXk0prgpJKYri+NXPb0Lw8T0R7OSZ6q6y3za1jsa3ZQoLdaiN9EsMPlWF0uo16+NK8JU+0cDolwaPp01t0xa0dSe39Wy10b7fQ+fFNAWfNqkwyHSZpAdWAbcpAEATDAwd8NUfU2HboQpumOXl2JAxoA9qp/eUydM7viVnPcvH6CpellV45jb/P19LAw1tNpm35daqB1+8f6lY5PhjpzZ/LYyj1z8ClCUUKoHOYw0ihSL0/07rfD52VirxDb8RTL6e3vDvASsdQQDSULoXo4K20ZcO4jjqRLZgh74VF/PRZ0efDEM3RZn0n9A/iNDJpPKfvWrtRTLNpXWE6kr6+QZK8Hpr0rV0+tDoHSKW2A7JwcfhYYDAU00Kmg71V61TcApWYjENBMqlqafVErq6xsnvcVVHepWM+70ZiF6ndom/yPjoKbI7m+Bnb/QqcMn+eaADOyUvsMaYxZyR350njd+DFSgaoA+WV+6vssIAv2fEobZ9aEKqJoOFKNqQFy2ZEnBdcmcynqVfUGezeKXVj0/fUj629rnquY7jM/u2ubcGUOpUcRDH+RKYNyjGWPaO7OvKGbqrfDelleXP+rcVHTHT12GzaO52yIifFU87RXvL/xg5LE9rVwBXdYpBh/l8ZBBsM50EEA9maULXJKQ4Q0G0p3U4EH0IRYf+nY8JAGrPJQ8zHAYKPpulbvqZ2Nv2JQwyAMXq0zgu+W0td4wP/TnAm4/X2ZNz7+4VmGHxTyddNxanv867fvp4SngIlo7QW5PsEQYAd5ib7HumAsmgOVNt2KuFbH8q0l70GuWzFt2WV+YBjLhhdBtP1vI+xTT9KHX7RyKtmdORUnV7kh6gNsoY2UokVzAnMREuwGGK33GiCcUgUcrpMUKs2CgYAb9bgJvJa4md4N+yd3kg7cHD6ZyyIol3QEJ5E4h2Qbh8kpCnI/0ohDyUm096fj5rtlUwDlRWEZZNLnGJUibcAA2WCKgVdKXjD/9kF08Tx8mr7ovB20HbQs3/n6hEkSwaGVRue6XCSFeQredZf6dCLDT2PXa2M9rHzVpyzooDswXkAQFPfH5bxd5A/rO3CJG/+5WcbM0qPElsMRiW1nqHorD4FYy4fbpk0XboHL1A04hlKpY7pnAK/apUozoU1AhISNLEr3UOUTeKiQJPnIf9vdcQ3mJLHaT+zvl3QxG1sDFGawTHl2MnJGuQQjh7QJBQqyk5D8WjSTgh0TfrcnO64O5Z6gjvJ6uul+DhpFrF4YZmWH5jWTZFwgCWIqBukkTuh6eS136gAXpVM2IAWYp5X9mO/U0a7l0Njg8d5Ai3j1Sc89UYTxBFgrDgaTtBdR38OmtHEbMrqfZgcDrEq2GvdSzGQJ3vPwMuNBev3h56fiD8zNJOHCk4kgs8giVHvV1S/XkNvaMJOoqzptOHjOGI517X4gr/llLCzp/hrEe6Qg56A0Z2bRFafqvlr6VMQkpiwHz6tDt6SQTMQeprukpXsKo4wlVYMgmSX4+B6+enyqvCDfceVg32LmXAWi11p6ei3xIvM+LfbR/hyqf1r7dt2QdYi3/OJEP/0eP9WW+aVbP9hwsL5GmrewlK70M/7TQPXNnEBm00U1eVLESAqK7L7+Hi8dhwT3htl09hoRmPIC098u8xSLQNRsj+B7CIWQH0XVDLtuG44a25/dg73LIynmWWQd5AVqOXxV6yLbxw5jemx6NaGw3Dx2OTr2YuNJbv42VcBIGnlpdSiGNmzdSPYQaWfhwz/C7igMTtgQpgbRVE4PB/hvBgWf4uqbP3KuuHO0Z57y3KQiC4yWjFR2+dgKy4mOggD9E0l1mRFMMW6AGmp+dQoTLH8p4f+fBUtT31VXBK+7lpiKba3rK4lC+5if0G7D8GkLkocT+yvdu1fNHDl3A6jGUDg36zNxWZVcVWwNOXrkWWcZZ28Q3P5JeJFsbsT3S51jEan3lq0fiKimP//ssbAd8jWQ8OJHZmcMopXSTubryVy07rm+YIl+cUVXmA5DUTkjAxFnH2BInhyVgBJr/MHeqScr2cJSW01RivRr6OfwrKUGuojdbuhpKY8vQiCA1AayNE09JohMiXnTbB9PWjgsl/+mOpBEcFSdGMySyUOIBmcsq1MDtKBnRhsKf6nLRvZ3ohKY+Nd49/s0S2bxMK2N1snDlP/YAWqrDupBJdOe8ZqmEWQkmiJJWQyrS2fJ149k2VLfzZx/HzvZeDklvrVu0Ne3ICSbqBdIyGjbsqZxQ9JMKUI3iVC+We+plYy5MZvJdci21kUX5ztg0QFgF1GROE/nbRvsruA3gtQEU3o7p5ZV3pVK6Raeeg/MIxd5C0K59SzH2q19of0kOo6rhWVnsC0z872ioeddo9DV3ihXTTRVGQnqTRoT7vIz3oajgPx9MS3e8dY8onosaIUxZzU1xZBzFiGw1UhLpDEVtbSezRm6ObJeZvxp+8hJnBRo840xhORzVSBMv6uNaRW6ruM5UOS5RtMXZiwtmoCPsWvJljZ3AnD8LGcKnxsE0OAm5vp58wjx/JD6HnjD9lwD//S3E0FphgIxc+DqpqKzLGjeQPD8AhV3Xr1+L+8CRlJaHfBUkMxmAP958iHzFqvDmD4lNqJXFlGOec4iRsOUpcNGLL28lk39UlLUGofthK25FkJNH/sXDlQdqLRpuCnGBXQdKotsVlGt/Efg1M/y8TLIAN/M7wlt0PYq/BKZ59E8+Ixw33oH1kNwmp4Dbj/TKH2rmIQ59KTvEKaytY3ufS4pE7LPX1fIyUd82PRsrJCk1n+xWUirb9cWsDpVTxY6DQC7u3vPLrl6FX1X5BBv7PpTavnYIu6WFpNIu//PomysfBamuphoFSg0PTi26KIWRzFQKenXGSfLg5kgsunsxNDedDObOXzj5krlFDdYyujNvEQDPdfMNuppwSB5CXv0nm1jSCk8gRbHAXTWIL4DTKEVI0R1SJhq6lhby2YvFlQu5ZfUEJUoZ8/gE8K2NTxI/X8vw7alLTKEgkpkR/EbJleie5/QnZwkfYSgRKrGCIkL7zK49L6PXYz+cJPHT1DYjBGp2SYOpnyaxwm8Wxy0kA3yiqdXsF5VbPR5+Jv3D85MvVLYifTgjUm+tJ8k8OUhMNgFfz7lfoQ/xz6dOUUscvzrWAnijhg9Sa2oZkglK3TxR8Z0NFZp6b5mgInQ/BZrbWrf6YfrUPrcFXfjSUzz3/fmq1fp/ZnmHWL3w4CBP0ovBDbTTeQaqsVh1XJdrd5bZ+Ev5SSMgQoN1LSOADRxWrVVBKFGREKYCHWo8zrlN6BK99/yWrCTKY5SwT09CpZTvz7ueHiZEopHI/ZfeB2T0DkpyWIVrqO010FMOhQhxgigfyLYEmQQQMzIo0YkuobkMtf0yNkLSmt9bmn9VLVc9plDU5bkQw5Dh7h/SXqc8RPrnZAJ4PNMkijhf9ojts0FvUGOPUCkY3MUCXzAO0uyAs9SL2YS3gEooCS3KucpfTOHCrPW325WpmjwkfPAX9mNVFQ124jpUNB+a5aiFctvtvlGFjXW4ZqFm4E9nAMFoJ0NeOMeI6oDVk4HjSpspAAr0Hm8arX2YXw1CMq8KrFwY5oh/kuLwrFOEOZBdTNDK0qDJgaBHH0xxWZ4J6blMBUO6tjcvdbahFect4AzNExS375HswYSieW5fiwrQDu59SdPtCv8OKde1DynwjN3C451N83FTqvKzZLchaosiAm18+OBB5oZSdlLJFaXIJI7X+vbu9HKaulUWrD+9nWw1G2KmJ5QguIIRWyfIRMDXuednyWP8Wd1E5fpZ12fJvzD7wTWeeb4uUJtTm+zLTxAfruzM2dSqcuSCgxmjtSXTynfvwTNWN0ISBqxr7AKDeb/VqC2Yvlwp6/65Vji0MEgjmyuoaQe2H97MaGxZIRxvtnGCiQ9X2ZfveNOhmTqXoMyXqVk7OIYOyKdSKzJj/m9QqIBYIrQ40DU5EHneewJW5RwmdXk7zWB54ErrY5o7r7voLWTq2Jg8blTbC2X7Wv8Cpx5hIhT9Tg+/xeqTaLB2PL9/+e+9/Ed17gmpJbl/k15CcCbhXswaEBhsOT1Lx/flKDZ2f/uk6O/Qx4VoZAv90ynE7dlraZUySKV0uToNPBNYme6KmFghc7Be0Zb+6kZWE4OXRdd7ftJRKpws/TMhHuBEpflkwSdTGN/qjBou7B5HHWM+4hJBF0w7fyrp7QcI9TK+YKlxVAlx0maQQH2Gpx2Zv/mHYyoHsk3F3u+x7gSi1nwo9iaJmY9EdVcXQ7qxD+akZrEAtPZyKdfPPzCJyUqkqT/ugpT8q2hiagQUSDam7QRA3i/3o1EaFJ6eb3ZG98irSD5lCpaImL2ey7eG4f7m99lH1HOKloe6ETNm0ID1zgpuSh01nySKHCjZbDTwSFw6JOKL6vCwmnaKRl5Iw9VuVq4xfMycu0HUnOi0X6jVErObOdflFprG1+vYdHTq7Iv3VBMmthqILiwaWEROhSzp4p5Ytt8aAcSwRNiq4mfQwd5XxW+hWZASSdaXR5pQggW71VqFsNLk4LKNtpzG5STNeDIEaf4qciId2IL1IOSzECtnmToL5jahMYZU9uoAN2ZERWb+Fa2mnK2EuGvO8mp0lbDFBEmEcI7cRYYreGfKGj8QQVMIs+UYoxFrxVncz99IdtGoH28CHBeVDy4f5O6SasYsireP2XY5NA+ZN4l3yXosN7UUtamISUofT4LQdqTEOKkpTDTrUoQWDHmeyRz9kPN7c5otlWQClHAA1qgLmesVRumDYyGgJek0sd+c7/zgBo5K7ERYHnp4pHVLqi8wmp9wW1591J8TrqfVHfrKPYvpqjO/Iau0aPaCenIl8BE7qbDkk1jrycxDx06SzaT07/MFPAZhNYSXi5yIAcZsV87+xMZK1Rsavhs04WhjB6EtyNxwKwr9+jE3t4IMOIYEB0QtCejVDCj5TTZA6P36Od9aUldfSKKKwsQFTALU/PFRcp3raRzBVbMjmwlna0LUj4V+4NkSoNEri3zGdEptQRlQ161zmW2ND1bb3h8HOHOQM+DIYjA5KO9LpCOCIw4y761gzNAv12+ALKSLh1s3c/XdIE25wH75iLBXiYG42mcTNMIN/GmX2XGepIuNfmB4x7IL3kwaGwKUQqZGNhZm8LN9+2PpjmVfAO3pHgR64xws0j2fnwo/cJzgVifJgwvbtnWh4XkBcwWPi9PzkS+RYk5lkDmShhpr3KZk3qUJO9EMBvtNje8miS6Z3bbBHEdZ0GZj4sz7bNtGMrgIXThVgQNClkwHEpaopeKPsL7KCXLBIDjEkXPKP6jXvk5Q5lIiGB8crNMx61eaHYqCJ9ZzfLKXDzSFp4eEelNEwnr3MtemedLN/ezX/CR14lxqGbv0IBGuOPwUJgvYveCwMG3BSanItzm5HV0j8+RlUkP+gMAbi3ltZHNhiCFi7lolx6uw6oJyuXldTga9HtADSWCAhaZAu6jVCCBq4gj2EPM+lmYAdu4L084rdANyVOC5ZkZggfdDS5wtmDzEmumYL3X4SVKOJjnqDjSypKTak5zbcI9p01nfCIhA+Im9HTFWiQn4h2p7NoTMJr6gaEV1lyN+pfgYvcRs5K66L+dMR8gLcWU4rJ8w6cVHDt8pMp8CGJKE3o5NOQAT+rPGKr8vKb4Oryto0+i3Yx1bu5x+ofaY6ApQAbR04EobrJb7RpW/BWUNMa3uyEAo65BRealwFiyAycAgcGBvtXXT9VDRN/N4/n3nLoMwmmR/GwqoJFQALhcwpI1DQrw+mJ2OIeDJxTr7x5BrXbgIjTr6lCWOAOnCJydrCTcigU12Cgt7p4JygnVyMBwUBnKsdtymX/GUx1phDRBDvcyCEelLTZNvqcVnvQGd65xb7hxmSziqdRw20MY9H5VXLnyDI2db0xitq5sR/Y3lqNhpYFKhIZpp/lbTiEOlE8b2RnNdOku4IO/9JV+pdT4ZY5VvOVG7PVKzrWrLCwqCUA5qOdM+SDqg/UtSfzNFF5nL7GxoM0OGnVB5AOOwAmP+giA8mkc6sP7DRP+3GRGdifB/FOzwQIS2vRyjMxSJm0gHI13qXekdN9esvNEeq883Eu95F1OWbkLxrFiS1/8ZvyXJII5sl0rbRDgmtKN52LYg1oZn6Ukn2YZm28wq77wpXpW9zTPpTJuq+P1Rb4HKGkPx3yuI/k6GDk1hHXI46i5krIBgCNCk1dRzp4chNOsqxAIlxuAyj1zf+bOeWzX2Yfuy/XO3AAlePUoB8PfhqOgKKIBWHc96mtr2kRLcbSf2ZdBKOtayxeivkf4qEN2mM+fObQflaU0kDuR8vjfXGxxnGHj9l75u49IXqA25a1RwBs9Jm4C+5FrWXWvJP6hXFgaLAKcJyrAN7rX0jafh15kp8I1FWEwHmcNrsg4kmHQkQ1sWxT/RfLzRTI8gWTGlxS7KIngIY8ORvxWaFbbVn8gcyEEQRFLVr7fbklq60KOJITqMtFcIUtQw8HNP+12N4XktfDXcEg3LIRIM6i7Kqo/1vkcCJ6ZiddwqVuwwakDoZQ+opD61Sa/L9SCr7wcF9t19QXYYp8dCv8NksqVWRkH4tLWlD0WLpPIcE1IrKSbYtqSQtqeqRIku3AB1GqMZrST3qYTMLht9KF7oD+rH5sNuzp2vzhW7KLkJb7gAauyUxCS5K1TKt5Y42IGD14OfQj7JVTS/HX9tK1Gp76fliK4WOQ79jV+TUK1GoPxC35BQFIuYdTyqi7UArp3bXRa0kWkDLoYNI8sx0Eo46iWRLWlmkjXf9gC28ghvzSb8cVB3Qa1dzGvoPJCwbbtDGu2IczzkpzVVcG4nH2MwmeGRZ1nLPIk1UD+098+aL05lQiQ96zE3uHBnBb7yt1x115cLRuUOvTBZ3Oqjxg6W+0l3/PbvHM2rP0nh3tQ5ws6aHLod+Pzw+a6bkFTA8yksB6LogsTMgm9REyBH/AyOdCsdunc2Y3/cd74LWSMOWrHX5Fj4iXMYvF2qKRqt+VL7JSqDF7lK1UDN1KsDys1uqUdML8Ph2YYHa6hn3bnY2/c94mMvM/XfrmjMdX5uqJBGG8dys8WKlRV9vcI6tCJdSEOiXbDPr7rT/5+CTuDi2Dd/CITowON15hsui2zhgdxxfkWOoBUJjuWSv9K2Vl2LZqlWoUCjIYt3QlJJTMIQqOFfVafpbYoeRPAmGhMjuscGCzfvpht4/MW5mk+RnsdmQIrNzVp/Zmd9Q0pkxgsde71wqFsSwqZzGZif4PNHICCeAV6pcCh5Tgk16qRXvrSYTZ2t5hziYR2khzgSRMr2DNrocNtspZlHIQZ9q+R7uk8jrsPhP96r2bEeQTARxYj/IXcDolLHAE9FVVDWHGvFZIYFB7IvZisSMcVRsHqF1yxb9YvRzKqO9wPchXnFm36uP5GaKBU2jkrB7PlYXeOuvw2fL2MJiu6UEg49NcWfwRpYjDnCqISj3WHgSAjyazHcUAnpfuAQTUV89uLG/MBfI2wJcElbIKfu5VSv+ypBUyf3m5tk9yK2RqiT6UUC7QvmPuX0EHUoUK+N6oRzRrT03/nZbs03iYK2hPyslF1vkpGkQp4m5j9h172xiGf280d+n46VSHDTPRA+dpqF3buoRMsO9pRCf1T0gfpGknesnhTnWRJOf79YAonUKAoeK1U5Tzi9yN/8PDvgNnKnqIVubPSKzQ+3I/b5HErIy/5b3tFGIfP0O8HZsCQA9pn9MvCRInBOA6nnIYfw3aY0g5dRGfklQ6iUXQflUnOvw2NiS1tEtn1E4ZnwEsYvB092eS5H6yo3ISdZYUnXwaez3gUsYz2opCl7j5mbzoBZY9zqrAk+8c3IPkxn4nw55rc8Cq5m1ZgGZW75UrOPnAtBq9+hoYjuPrhO+lQkFw7Xd9w54YLDmaMRZaRfsze/aTajWdVzriexHBEwwhLHI+KA/k8lF8Ewu9eBSbAYDPF9ZcOW3bhqXUwvBTFygiF7oceMzkMGfXbMcN3Wyvvbk69y6QDC7g2U9UhWd20l3lan61k7Cu9AQSAAvv4SklJDb5TxdccSm82bCn+BCMnZhYSfAedzVvlvPpSlGG5rPNXfJMJstkP2s3YYJpXWtRyKuWiOtMvD3U4VbtILnZTprxX/QC9sZFSJY1HHiOWx6R1vw7ZR98CP4APnTO3vV1tsbSlw8Z/V1ZBkrTuaCRG8O9luy++UHyJhlbp5bpqeWyZ5+/IlqVXmVeMPNIo0YVOvK7HW1YsTTilCF8X8KGHNc4RV9F74YI6LKScSCAq6RLqjgAAaisFe/Yq3UnnGsE8BRyqvqts/FEdVtEypeBgF7rfUMmjD7ieEkCbSdBP7QN/rgqhytPnpZMnzQRRCkI6fb6r7tf89vsg/1rPTUQjTscl1notFrJTo7GVIgfuBq61Cw0cS86hs24AthKiHi1n/7XC/PhzEpFtISXmw/Ct7jq4QLRYqq8TUztHZ7yWwYRRaBaeY0kTUBV44csdcP/G0aMwvbOVjNyD5GfA1ypC+wQ++tfll4qbOQHVGLwOWSDQCgc/Qzkc6VrAdk2d46HRBjBwOw9dP0pODL/4c/AFq1pkCug4DwYV37r/YnXn10zgwUChFK3q04oKDjs6itPpOxCFyJyMUB9nFeLaK/b2aLCn1odbWQHeZPsDKLHy/F6Cn80BfWdWca5Nfw35hK/1yNvlZen6r3e6XBCg7cjvRX5SiuMtVSVLSiguCdn3W3wdQS5D7naMkBDNiXNsSkCBpXqmn9txV9qJm5+6kraCfM/fCSxltLfM1Unq7rkyYaR1PMujL8OI5a8mCuIDSS72FQUH0l+VLi3OYsB4iuqCyF6/NG5Ro9EYEwjdVffCDC3p9dV1QsZ9ve3wmMGNH4BUT64FxnW6Nj1DU2CofDQrmsdbk9Sl+FEDTgkKGdI6Ndre9ECP2eM0Q1WFLP4SuXvvb3LFFTm7Ijvjqnu8l2pshY6sdTSJ/lyNbG1g7f54bBxETMRhOKq6izPVSfwgIYlInp9rH5VD3e4Ajw2P7Qb8AkLUVYv/ra1MQ+7wi8QHxU5IlkiFe3slIiqukv0Do0NYgf0EIV7ewjcN3nAjEnWMoRVqdVMG7t1sJHelJV9DtX9snjfHHDn3jaV88NEYGXtzlXHz5mCXSRl8CVIACs06Y1N8NMYmlg6Anz6NUUt4hefMyMgrfa9oVF/VGB8haHc4GyqP6auCPMNrmbmi5+OpQYUfLCQ4IT4Lg2ieYOE+ZMVIr2PXQ9Ch3HOXzq3RiKszSB+ZyQPCBXi5XA70/f0whLsaMnll6GzXnIG4cwXo6mHjdTvyKxJF5uanlG7O3nvPETdSYhHKjhg4vYuIp+dsxpQxEOlDZWJMjl8Kmc1I/TF60+hjEVV9NqXelPulr1BKMoNUKUQfkxwmPwrHKeLlMdHutL8+P+crs3SG+EOsTHDSfckQD+g/hTCGK+E55gWyqUvQrOfWw8lNidbLeBAmO3IieoLdD3bhKjPBqqrH+Izr/FoovAd0PumYj1YT33hUq2imvZQHxxqx0I8SIttix/cdk3nMtnI9MlXXTxOIBABKr7FdJtHiNnTCnr5ObWQgAoe6c9W7OHxFbp3irl0Gz07g8zdFYMScfIV3609vuhGHFO2CrW0VkGie7/1zxZnJfrDGlHqfxw5fRwI+PYG3wXJIHaAMjYTyBg4IZCkV5CjWzOKtHYZLBcMv2QXRl3Fsn6ry3YAmwewRrN8g6uMSh/3TYvto5xiMcXposjqgkwl0EcZJqHfE1zQ6d4tcjs6cdQWS11lCvt/VIKYefWnKmoK+lsjXzslVKQEwGx8XLyC8WNl6RI14G7HKeVOEVL29a5ho8Ns8OsCgvr/EFg9JmgbGzx9VYAW1vCEo6l/GSlTLlegh/HcwrZMfI2oYc/Pn2lDnEl3iwgSo6egEhzAhcdJh7x55zJpP6ugxA6wP/5Tuw8hL2oiCOZtwV5AKm3Tb8OiLYqpRh+0Izb8ESCahLfnE/ez7kYoV6guT3ZLeblUAkOEkLFtFp15CXjx5qyYCLUOzjDbBTAzCUmpcQt7jE0g0HwjJs6fi7gOYgfF0eAnprNI+oHgahlyNh/0munU8O1y+wzaSze66c/5r1rjSmorFXy99FKXMY/yHz5vi/e7jyvduguFgxj2+3PEwdBgYbP0OzyVj1pIiJjLSi8qM8p4KhTpZUXyrmo9vI8TGn1fggPMhWq2JrmY6tApIkFD1D4T5EOQVyLf0eUhd4TKPB3b6saq13N/8OsBgyWBDtP8/hN4qpmByyE7FSLwhN+9XQvH3tuK4KX9hsmgkwIbsB1RDTobZyQ+w4xzQYYrxf8Ri4agLQX7n24VR6QvdZkChgpThHZ38nVQeXUVA12Bve2CGBuAfg3BJNqeV/UKsPjwbSUfAorcCuszvAn3Kz4ZMaOYn8BCK9+sOJEOH2LaOZmFTFmBRozWK83vFpjF60JcURmJMuvNQEWpQFMeSHxjggI1zxxjRLkRkQcPoxpW6knHU0uZcKSK/CfqYlkuuEa+1cpIY0BMElTzHr5UyC5qoq7Znv5TgaVPO3C7rWNTOTuzdx4TqaXNytiSC9yQE4EtHRSRkj1EtivRYX3eGhDZ10+tFwCQt14mWXj3Y+XJVobXf/od9aRo/tFtGy/KqLrHa33WIZBrtM+6b5XW8HbBeywszrAblUHrv7XT+LYRV1R8iUKn1BmmZmA8EcWMtPxx+WYFbBgyVeCQbz9etwhNBjG8ay04zUaz43gUjA4Y4QIURQZuGJH6kxKERsoQSo4w/7Dxw71ephcSLDzuES3JMRr+faewEemJHxilIdCQ7re+/YjiXTYqHTn0ryTTUbScpo7iPdqKjwkX7mKGIk3kTdakZPbPnz6c0pwOOzOLbJMEAPtqZ/X11VNvJqlH8He/k5DbAZlETrPajb2ZYCn2vzTOuiHvn1K9N0AdljMkp/YEX2peytySQD7RjjWfOSK65i+ZW6GcRNGmpGoAwcZgMNyFkRGUgrROtwmCEkG9QMwmqYZK0nPO5sI5dhATOJrke/HdLvIyha/GRHj7VMEwK4dRY9AEPyi7P5i5FjpfwR2NM/jyvvasO2jvisSweQ/l/XbccWIiUSKIVnEU+iEHMzWJvKNubUWOxhvslQJRXkXCkZh1HS9TTZLtb6LoKryQfTCfXe/eyokTHhM5JObAjvaXcZDcHVZgzPus1yOqQxuHVYACugwPIENU/lgvGn0ViVh4flstMwxk97HVqzkE8DJFbdtjq7Upw7cFhk+vZTFki0WXf7u2DWgYb6f7+bYz9tZ6a49LYkr5H7DitFkiZQPAteafq74q/173lJ5kniWH/QGZ2VbKIGdafb3uokLezEb3ZLJq5NgpaaCsxgNrOpKmJ/BeQagwec0fa5NYalLlfTrzdNyyLH/wJ0dxEmPwXeA0erUzZn1EqkHEloCRfvW7p7k7es2SEsFeRADpApHdC1YfbLUncRnBzAiYMD19DTSLiV4f4SezdAYgbbjqe5e5njJB7Iu0XG10mwGawPE87FmOo01bnai7hznryoie5Y1+h8iskwJUUo4KL66VrhsGLk68gtG+5763btSLT2FrY18+tN2cIJ4x7x1IvxrF7T9Ek6ad5EDgtbDBgtkX+7/cimrzAw0Vbqi3iXP816qZgo/8Ckx3fipDHrdOqC7QdLskJpM6Q5WN7LoObtKRXQoXasRBvIl6RTpj+d0p/2J2lNjLu/kHoe3VVIKFAPf1l5WsZSTCHJDBj0yMY2M8TNFxTjecf1KEa3mydYYz+BIjoFnq/Pgk2i/kcFmtqX5N/cPfA2mXxJeP4dY980nGlFrtBRV8epnGWvzj/XyVDh8A0aiogjTHOByNdZmDK/XhIKMsJ6NG+DNrvtJAKuh6JVebOScINl+GLFDQW/puK/nxCchDoRwNeC+l+9zeSfny7LblpynNspgL8b4oHgbVndmZLGsUZT2CQqF0OU7YmRLMxrgDZZPjBwB5FTcJCJxiYmPP4PZRvRlebZbmTnwXT+aktW83EG5tMxzd0msH1lHNGP1sU2LVVIvJR4xuAzfU9KqpQLMeqqSJ56Ryr4M9OvCnV/X0GOPEVaV1dwMEYBD1K2pEvjvlU95qUhmkgUg3toG+s1jsXsyEiZBKSoWzgei14TdY+aq9p5DNsFhXRl8pS3FO2BQWoSukZA1TnKR3/pl3fjfigBLBPquQ3sNEjMhExiLKRxM/bHwpLPyXT2/yihjM9Ks5UvnqaPCxFN6gyltk+5J4oH8FGyOafnI3lKFIIngxMXl1AN0z+PuwjbXJZmtk6Y7KqOh+bjNKTRzMTyBR+axLD8xHQEIPHiwrGrw0wndLfcQGTP2A3no/R8bzQm275fsx3WZogsB9nlLelpHia4a7TlUUqBBX5ix2ZGGOs6TFZDsypi+h4ZQIiCzkpBvJ+t8T3YRtBFEx3zrbqavzaSYOd4ypErBDzlkCjCmzSt4fhITMLOfzN/cA6gwfcWkPvJTWxN6Vis/o0Ls4CqDjSu3qwDxYAmUB7RAwTwzps1hU0Jno1LClOrp8jz+JF/jSEn4JYpyzBHpP2xWp/9M1EWkrQPTYtRDKltzudmu///A+cOeN2V0vOkn4RF4vgjEV5tEk4ezlwYUJY3VvIFjsa3YfnYNXheXQ2u+KVmkgppDxWSSUoMwy7tjyMwLEgqsBuJ2vakwkyEAbUeikMnxPbhWViFcYi5ynMIU/Kz+vPAf/ykZt6tsKvU0+T0q2xFjcTYiajbOVQLBKA5FfEm+7qYUk2wIFEe+jd3DvGucz87sSL2GT+AHoQH6Ax2iQxlnmp533QNVKPbAKWa4m0KtHFEiz6jW02AeWyYkeaEMi5EukLPMFjlqTY+M+zXJ9Ep9p2sBtV603HN1USznIzjvWMhUbVVUevDPSzO/boXeDhU674C2FITTvbww76sqau0osNUP+Ozyw25X+K6jeAQmgB3Q2sib6ZdT1crvSK8vnt0h/O4VqYjCQdhSfB0mNPPlRC5h4ZUUcUGZ+mBbcLeR49E6/+0DCuB9FXlzN4s5lXXOaRcjLwX4dZTeXVdQKq5kvsHiCBX1XKjo4p8SXFLIocRPzP3X1hXXsRoAzrH59ewXo6Zm1zuT3Uf/TKeALhh+rg8BBuTzYbpjwlM02o+E1lOhNKcQVICIBC4EFRFFEZbf7SxGaBtFzv+9o41wiNNQT5z2U/UqNuoJqe1cdDRgPCDMu5Krh87uGEd4kpwCHyUWw+VLRl8fFiDQs70qWjJ4kwv3TvfUrjNwJ5kN5tcf8NFDNGPaViPu3PiJvbdl4d4f3oboy6vg86DW/PPmxYJDt19foJ4q/MCQosJCMxT2vcSKb1XSIIFJdbTNYkevjoqFly1p04GVVEKxJ/TJcXDJl2ScgiIaeGabcgjhrqgJupzJFik1+tR2fps5AvRIRelmYPSUQtd1X6QT365CcQ/HFdkoyyzOwrvLv3iASb7RDZekNHwbVJnggRes1SG9ZDo8v9WMefi6hh9BGhPlC8REg8E5XWjmFH5AuzD1VVwZG+QIMEj9fvgZwe00oeG5FF288EH5AnuKD1EtJVhM1W1iQTDpz+E/79y3mZMOXWI46Wa7HKFMMGnNeE0S2GMD/pXQnuZxbs4DerwO+6P7hR1IHJlfqZn9zWizt8A4ZOLGiKrKFErR+ywiZ9GYq1vfvs7gnEnnO5pRiLFErUdsYQLR1ECIChgTCERi1rubv+xusHqOoECXpbdqC1w+nqdUlvqHJfwCHejPbt3TBt0qTzwItV+QP0M2MCQI9ucu8ZbJR3nkk0+bC2qW0cR0sfxH6mfbLRFgn4/CGhPziRE2aRrILqBKfFhVNehD3WFiJLOaB3Uf+oz6dshcVc5c2u38JIMS3//JEXFue5Vh8UwQQF2YeJS/0T0xcExIz0wQ8SxF7LegIek2aNm22P/Pz9k84xJgRexvCO8NdtT/RgXydYm/UWnc+9RsBpMAhD39F6OyX8TCPfoyC8b1HsmZ2IVcFw+mWogpFYBMbU0vaGMNsNyxVTUDDk+7MPz31WzmnuwSLjEs3rRtiIcad4K4wurwMchDJIJPZku2kjlq5utA5wIh9XxfGkoCVA1U7JLfA+tsIRjKmKh7yFATuDDqxpAE2/6ThgeW95eJ3E6+lOhlrAtZTR3Iab/zXMNpbSr1MUiIXr+YsIZDjUipGMgVkIp/NvPX6dRVkXfQelcFQzCKTiT2+6cL2P+fDUPS+yh2/Tf2bAvEHHMv1xVEZeETqm2T+K4T4fObCxvrKRuITj2wgpEeO2nKbKwdgpw5RcLkmH52TY2tIGPoKDB8Vat2cIW9dm9G1BPCiUn7CdroidanNZTDDMlNGwifkvRHrK7bGmdoU/tAdK+EcFsw9267blcn2rGFjxZX/Ngxqd3yOzUS5tAO2ePdTKUmX6rUo9nLQYTXzDnervlU+16xu67O5nR80qDKYM07hCueoakYyga2bX714oRYeWvlC+8qGx3ret9YsgESSkfarj6r/yUmYhB8fQCtvKUojgd11guGnVleYP/s13zeM1X+Ob7Y03S8TpMki0z/01zsXvKYvi2IO/+niTZEOIcTtIHCOYXW2Um9aCA6Bbw0Oove2hTW8yLIkY4pOYYvXfKiQnnXOdZj6FuF0xLiNQMv9/2L2+A8nZmeB89Y/fcSMlYalJehi8E2vaqnpoamCj6UtDHN2YMv8Av+WpDjTvYy1hfUD+hr2bsVKW4DPqfCz9aa/0zE3coVDr3tNTiQ/JC0vUQ7D+oN4K68nPcZU5pbbAtZ8cAUJfjhR8CrbI5Xz0+IL1AGWKW82q/qnAmCJ7GFYPGQJn8p3GqXtBRal/nb/Ew4lwDZbWg7/31rboQsNxwKuwLI+XNjxvfrMpVE1myB1ZyemMsspYrVEbkKb5bTMiH3x0XEpKusu1+mAtMy4tEQiRkzYO/0Zlmtfc+lNiHg6YTnrJsW6PeT1trHQdfm5ZfHMSbIqJWzYlk3E1Cy7G1BFOOiqDqjDgq25ymSeWB9TPWIZWjd7vYh4+NCMR8RycV2MK4imiwG3RPfu4ZWPr4AaA9+U2rATydwLr06TBviuMGwEk3ejxVCUrg6ysUVK33KnIutsOWtIj/VbNhms6mhnlIR7YxsZtmD7o6kL0qdXOYOkr016DzN4ZNdolPJIyvOo47D4tqnD62vcL7+Ifiy1J8rtEjbT7NF5X5RHztQTXXt87BZLXG3MfxINspOMXjs5mPTYtegb8z+Fod0BSaTyA5evOMJaOZbtUcP+v9WIg33pny+Pic1WaTgghvKX+S9VyueSSEKK2BLskGTo+GvkhCwST2W0Ch/L1kHjRHIiux++ONEw07NJ4cdszNs5i//71sucFb2rlAfa/ewbeuYk2fOrnhsD27Z0NUispUGGxccE9VP3ZvUWs9IV+sOt6zPC1GEEIq+oPrW7YcwT8z3wPZ9cxmhvHs4ghjWiSaQlomcKFCBFg3j37Hd3LT4Icl/dO6kTCk50g5kE42+2d24lnl0hyjM42qKnPjA0N63Zs5HOZp/no7ha+5uSkeA3ob73n71BbPiHNs3RxliYrZtoGHtLJed45K5HvZcDT6brjTnfOVpj7hf3EM8LuC3VCHTsgA4kFRtiqN/oU/X+op8konOMc3NRmvWg3Y4A62qfNPRggvjdy/lr7ycDm/e/8vddFs+mLmp3hLH92XJSUX7Y9eceKXPb9E/jK5pT1daMPskAAyEMupJwWB2gFOCO64yUGxyzT9lOH77RbTbQCZSd5vNaCdQCSEITahcIkVmwMGdBDbZgICK4k5RWVc7aC1C7kc8hSGPI2dQne0GfHP5gTWb1fbxKSuaGNOr7eFY/eemEw7hRxaw4ofGpPXTTx4HBu6VOzDmhXdtfUAv3lqUhHFsWKQBnWexZOqZP7A8BO+J73iw8f+Wf7eVGbhdPAc3IMaJ8A/cB2ilxnE6HpU1w0i/ftM26op2lwIfZqnetQpBsLqout5Br5ICT826UEblysGh5v2tte39Ov/n1AGb3MT6QKfNrjDWxG1+BrGJllr2j5XEolKZYIFQIQL4Ic3TRAd1EYWkT6W6jmTz/HlLjTor2ZiAv/Pfg/UtOK8EAXAdjuJC/lYSZMyuBHfbgLrPZHHdoFd3Ur7DM4K5yMgLr4Fe7jooKLUtkzQ7qM4JG6uSubKEvCW9CiWmlEJU9Gg8EI7vbiyijv+WQaS2zTmbifId4Fuyf6Ffx0ahxV20vY0KHstzUPV1FS8EEC6G6dRvH4bOYkSsZxTDg/hcwovz52I353PemyVW2JT1Z/Z7U6hxd19l5pS2vmBow2prpMN5zDHLwAMwyW9UDDm2eyz5RcpDgz4EOKcM4wzUwHrheMuGzVFy6kq0jIGQ4GxAtU/Xsw/exlljWTZv3tVMpYj6iAugNQE83adt5gYVyEJhbuMtsCSso9YgAMeBlnHzwHNQ8auH2k3qCKHn4hX3QO0tp9piMzzTARJHdXbzog2oao3Erj89vbpbmO4A3MUogg1U0cTrmCOJFuHB9EjFQWJahifsy9HLMadXoI1Vj/S2phABOzt95FuNlr0xmIRuuVpyULOQO9YAODPMP7ed5wtcSq52lqOQkbb5MbDiuEMfNtswa/v5LI3c4b6zTd9H/uhg5UipxZ6ptLU7WsAdxkUMNFmDZrNdVJYGCYXF2Ncgg438K5jwkhrvZf5k0uTgGiUMTssR1kLq0uA3j9mwB7e4OYRN+3LA4s7anSldWD2051/Tn3M1mUosfspZQ+XiXpcvMGbxJ4XedMCDdkDRWFpAlvHrZrtARIv5eSH7q4JbgJqb72nK/ajGEfhYizWnKjvj4/TMU+ze8ZEbLdWHoUHMy7bs+ZTuuQ1UjECc0MP6tOJ1EYEGEHtQmr039L5XeY7yn6cIodjr3QH8Dd4h2WnsN+IZYHq/7Lddk3/4pJcGMl83q2V73GaPB5+xRTwBa8AHgfTuHKIUoRO66JF1aOS3d7IutUWqphF61ZEvtWJIXXNlUZWr5Fz3IdYXNC42Ek1Wl1m6ULEqJ5UD0Vxm5b/EqbBPvp0aZ1plfy/UeZ5lBAJyi8b+KLL9/ilQsT2/wfyzflhCcS2dxs/r88A/jNG51Zb39iwBoGD+erSVi1kyttPXrCFQT900kAAu4q0k/IYVJ2se5BmWwd9g+2d1qK9Pyz6qz5jZJ4iZRNfdnJ2VUXfcgqlowoX4f5mKUNLJDIE/tuMELJyI/X8cR2C7B+ylvmsDwjFgjkUBDO6lQpulx8GWUBjdtKTsOZwKu6Gfz3Kr7DsWclmlKuwV48k4OzmdOlxh3NePBn+83aHupCPT4lmK/mLiMN6K2XNxgyrDZFdneDr8s0HPFv71zMNAyYkwm/UctCzMvDAtxzHuLNRJEAnHSkMdmROlk8cTO1twVENdnn4mjhYwCKFnzsNogxe1GRNlFNSl5jmvx07lenVa9u0YYeP6n3X6taizEF/lTHfc8HJ6oGyJsVQtNPfKBC63WFA30DTznAqKkfQHzva/2ahpC4Hpo+bb5QnICaC9VKyNtA94/LG+DVIrZbGi3NpmSc1+wP0Vs3JuRyYVUFe+nxOXeCgtHUul6qej0dbQorj+dfd+gY3StjcHg9nxODtN6LudiEEjTirhBTtpv8myCh704H14AE17KlvE/UUK82cGWGU2reUOOy2BooYMS0KdKFtllZgXPdWtGXRDFjMdhMtBNo5QB6mdr10tWdJJRRLCPDOOgpsUSket2KweY24pMmEk6PwoxnMlFten/8Qkdn6FzvOD3ak/VmbPfjZqUojZXq3cj0G0qNv2zqR6Um6XEi8hVLGeNpQYGiIYJXzIgojL+rZtTsy12VbxPgRojRS5cWMqumlRH2/MFgaxTy8SpqymJ2qBDTT7WiKazUIlMIGHhCcwcp72tDlCwqLLjilmepklh7tiQyJxMvdRYXrtCcRaYSfSTywIjQnEbIrucmvy8MHvlu8qA9pJkJj1GdKJsE6KEvmnT9TqLQ3Y6iGlnhnKzhvQGBXSEvMlg9c9ANU2VrVRejR+9oGwl5v0uw80AE0ODvv6jV0smnmNoDUtfdCco98lpkR0KS1hui227LJTA0P/+Q9Df8kxpFMyASqTcmTWVK8+OVgmWSsOHfndhHpF1GxnLQtPl6vQ7CDZ+LUMMeB0OwlYTDOAmGwhUjE+U9eCviF2IBF+kYltZ/j6RZuW+kb+MosBm4Ak4CAvSdnMjlCS0QTscQvQmzBjhhTpLT3l92b8UudZEJ6njb1SWyQOwGjyG8QUIp0rET7htRQCCvmV4ll4f+Y54+VqVSZXlRa+W2M3Z6cd72YXNsIdLfnCjfgJnug/dCSfZUIlMhDChvzCGmljbCCDEkqMzTjrIVG5Vzi8P4cWVgJ9ktIIaZf2GZkMZ8cRwNaG7qG4AwuTWIY4QPcxtebAYgk/WyPeUb1XF3m9VpSphvml4SlzSmjri+gV7M5m5yc7VjLCQv8zfD3LetxDRfIt8C3Aq0MQ2GFq3iyEmilfT//+gzQ0KDCzOI4ecUufyWBpXWQlIaC6OfiziNwDeiNw3MyI4zHisuZWrdXQIEonb2hmbCy6GU0xZW7zToQ4yWTJEJyVJt3kR8g5i32NCY7sxbYdWKy+A6Ugh0+8FhkD8SV8L+ezplGRBaHzN8+PlLYTRiFSS8ZO+5laj62OQvFQ52bD5c2nlqx8xZx20WxnUSVSxfs479QLm5ToijvsoDxtbCfPa8KmYK4prTbmMt/o/u2tfHcPxP1TXen7O4TVwzAzAWRoNMj3o5eyANIw06QoE2XK1EVko+BB/8G5u8O4b+E0WKrwgJkskVafgmL/NCBUcRz9FVMVyuNBqVH9uizvtGjJl4wYn4d4r+XfdhaTTsMr6gjWuQB2xnOwZiobIvQ/W/kG4cRpYSv/+A58XkWiCsp2U674fcS7j6guAq6SVq7GSMXPbCEi0gubvdJOB0N8g+aMW0DjbKOPA7lCRWoHOg5fcVP3KYhjMo1RnQ/oC3zo8567dGDEBae2FiOPX6G/KwEckHle2cET1WG3UzY6v43Xe03LepsyRPbTCeNn2H6a2veHN+JYTEiF0wr5CvCkDWQn7YwiuSp/rASfQrch3X6IUMyFIeNOzbkAQ/BXjyTPdycZe4d/AmoL2xc2HX8CG7GfeY1fY39XPyCaQmHRnzj9O33X4x2JH3A0b/PDtko3U61lEE3TguoZVKEx9R9js5Eav9xe/LUHKsmCTO7FMJpjm3unyLorTHek3IWk5qI9g0fnNewRqd3jPzzBSU/LOgBdTUexeMvuX44tzwU9mWPffDsjsZJl+f/vXpzoXNJ48wUTmRoOUG4vHqZGqo/NBSwGBdKVyrWMXc1EglAOmVqhghHOKlaGX9uoylocdfSdcz6t/g1/McjGoEXaTxqZHmsrvRFoppvJP4o9g0QuCPtWcelSjP49e6wMh/mQSDdA6K1ZjwEZqaMG+20bSdLEhfryUX1d6q6mTtAUo4fIKYXomoYJDSuLxtDYTuTxz6suqg/iUJ4cHVE1GVsZpzIajp2+d5Sycb+53VG42IJph+ggqvEN/StrArxLQeZ/2ULmmgZtckeL7MrHb/onXoxZsGBorPOnnIZOfFv15P9U+Xj7VPYOFzUJgWXWkjHHcZF/ngFVm4azIqw5JzrZvxsRC+4w2+v3bWmn6KO4zipXKC1vNSfh1ZhWAlTD4kB1BvNepAA9EfAL/3bgS/+wpfKk06WSN/ueMNr0+IXjaLwvCwmn/NncDsW5T8Uar8Ixzv+sFLDo8Gv58gkxjPCvUsWJTUa8RdlsHeKsXc0JQFq19lFOvGbmoDq9M8PPJyHcJnAE11aN/cVbE+UbNgFXEh7MKULniOmb4b2tbCN+D8ONgh7Xzfppg+S+VTpxjloEjCNGs65hhSBV/0lBPhbMHZMGEwoKv+q0vQX7RqTK5+j2+hb1ao/YhaBrv3F3OUmiYT0lDqk7Ndgjl334MjYu3fSuNGLITeafsXUFCygLq+HPV3fFfkXAdE6M7gTl0dFPgvA2G5d3ntqfvjj8NHE2QY4hH+hVpOLMQl9EqWShjMbyHjhzL2wkJ2J5B+kNlJcpTpGr78NloYE5TR0g6QLvv3cumh9PqT6MAzd2Vb+vJ/G5ibwh7xilpkvlB64E5OtR6YMEkFTgki0JXlZgGrPVHR4LSaZo8K+SacjJtYWR5NQt6RP7NsDw4bAhpRZvtNQFlgQzHinckpS46y8XJ+OrRI0bGN6CqTaxbXLpyZDNFIqH6zEAfqL0Md+HCYm5n1b7g48nS/4vr6rpLpaoNvZj3W6f4qqnA5KeJ/INsprLfYLqr4Maiahno5Vzcc0r66u21VrO/2FqmBRVt73gzrzitxcrm3IhsOYZNDRU95ZUC12Mpk9frw3PQUIaJWcclKykZGuiCGsRH4y4FWhs1+4TrUZTtqnWrU3Y2iEr9XQjiQ/1pleaVKdhxd11bQOzesgkVuV5uFxvl37quEwL5xuQbvbICJbDwuiwbav8Ix33IitADv8Ar/u+pelC1/Okm2xU18oYY/eQ+lqg+dySl34rNvuu4+/Bk6JGxX6ikB0PECzLOkss1AeksHIsprchCJoVMU4XFvyklcRBIQx1/ZoiB36/6yRPlOBgl3JaK/X87jvQaY5QixCN42c2OMbhipiYYxIPbvjxBp5ckWKihsgnjbtOJEaqGUNkAHjc/QP/k+2r1tYuJ6Y5n2KnrsEw+YDvJHKZHFnPsQIdf1rZfmtNtTJHjslAtjWOv6XCFRnQIFz5gBY7KjvPHH2uwETAFne8Q61Pol86YVf0CZwr7SkFNGru3ydnJqoKCMKeiAaO04PcTkH/P8JP+5dyiAU8Pfh6dZWf65BN3yySGfkn5l3Fn0HB+s7r288BicT9WbzvRIhpmOJgLOXnbs+mzfuXYQWcv4jgJmYs5+efcz5QxzvCuuyL+tYjZkqgqeUJ03jxk/kg2Xp0cFddCnM/4+ShcnJ2V0CyL/RCY2vfsIyH9WE1OciXV1rd9Cy87zBnCqRFwzBKk99JPXQIQYDKkFJFxllAl6bdCtJ2qL2Q9BqG/mSgmvDk97uPWAYID08zorZF1Z0z+lWEsqs+UcFGb2Z9W6ojS9Yc6YU4gxec9sIYiIn4wBYwifKZz/v/i9SLYgrT/4BiGID87OCayKIEFP3ML8B43sqlm2Ih+nww0KmEj5eiY3AOYOeHFBs6vITFwgDDXk2wrCTVk7H75DHGiXTsZlkiEetDDsc82WbyT21O/MoJAW93+p9LwDSzpxrVkEg0ZqkhFiEh3a7fkKz/bDHU12hN9h5EX3sPE59z/85/6ckj5QjYSKbkMZuaDnmBHqZxI2/yV4kPRcjrsFpAzQhMoiFW/QxnoFcONFGTo1cUOsUoV5LYz79jo1t/67b8KPK7L+Ajwav623ed8VXlnFX9rVwBSk5rEqyzScarjcnwtrKC4EDjL67P31ywb6z7W10LDS+UBhiS/D5NQswk0XcS3T2mzgNsGfGaCu2P6sBFsX3kKEHhhjYDL9OUPgUMuhzGy9125tEIdN+6sWb7ePJWQCayjKjxIFZIxiv91u28Xq4C9Fo7/D5oZiij6wBg42Do7Asm4FkeqeF6hYP+LwdFjapQCyUrF1p46+W3/XgIklHifBm3Rrtf6L8gO6thWnvSRTOlrBOoDRi4ojVzCnLGixEjjqcDWEO4L/N4K2pvaf3iQRQrFj68O78VY2D1HbRFCMcc+JWuJEylh3KAZAO5o7fUelL3otJn4K13yZjHyGzy0ni9ZcjVs+pqgiAyq/e/rGl8vBlZgod5BmRHBDb4acwnLp+jJ2T+cjmpCb6MIFlakvaHSKBD/pYKIkTReOPRTiLBJneNuzaLydTFYUv8fREICD7AUgAnZnbvwVHg0dpM5rg2o/Ovp6HfIkLHVk5bU0i4vcYm6wZwdcAjFfJN3rthq4fIFxSZDXNWtv7AcolnRwodTaeDoTR63Q32t8/7F+mecwfkX9gBCVhu5KNQfrFDxkj7g/kfJHh0clTJ2dsnRzdy6pJ3j43FuYZ95SI8SPTsQzAkVT5CqXgdj4a/SEy+4bAkMehLf6r4s4S3DotYuCbtqUvsvlwZ3ojAgrteKbTMt00Ug2tEReoyn3Viro2+Qvs+vCfi03w/uFcqvHOuoQ7Nif6AzK3ZoTmW7DBRHcZO+iOHbD8+oKbvWvrIomc4qSWE7ZJVIySBx2l/wTEN57iu3HUdSLMzHrGBhyQJ8h5xFKMieKPcENWvUKtEdQeL8EHUc6BIhvn5Eg9VOk9P70k3vgu0zp5fjdDweBEKm36JO7+MXsDA+4bj+rCLnEHfqyDzerrNpDyRYaHXCXuN3kse5qTjfh6C9fy0hreIVaKGv8lBriTVNLbhCv4f8vxJk2Cl7uroz4ruKo5rrIH8nvTNUa0N46tA0QylSw2GFz+cxSZ6gMbpiEAMVUruNzk+RePVZRkGGN/Ww4THwSPYPmngEM4Q0t9+GaVnN8RfMzqVrAKckk/DXTxztklvL4hAQwkVs++HBvqjPjX5su5k3tLXAjYlDzCCQU+cSX2SwbVGot1gvasLlC/552ktozySougfisBeBgdRW8h6WWdAGWocLDcP3rJDfsNC/NlrpMCPam7bUON0qZb7P6nIZctfHXv2ThUmBye7lJAHkcUN2AmzV7wERfxUkpeTov90r8Pi+J9UNyJUnwDI2nWuIygUGiwalSKxKUI8npR8qJxd/UG8gUX+QGrFWoRHBMRlpMjgCZ8RnzwKYPuBc+/rjy1d1x6C5tkPNlLMXGU+18M53t9NKvj2OVCqpJ0rwb6uePpOAtlOQdtaQ81vyETG1C0urOoKVf84bGGSSF4rwNZdwLb6sJTovyWcy0ZZARaGup4et/dgm9NqL6BeYWgAIkGDgbK3HOo1hVH7dlxO/XUto0HYAXT9s6KKHFgV7hu+6q3nT6mvq/sGhrDBBkLjJ6Y5y0DcSFW4uCPQxjbQScrxoYMSsEZ2xjI11d8acjHDMa9rnSOn9DFQl4oMhqiYyvvt7+NWeq9nVu3ZTAcoBBkoEzl0NzW/5dFPDTQxR5lPEsTJX1kzIA8eP5JLD3FGKmdCfCW4pbDSxrPbAbmXIS1U9dubLXrG6mK8GRlFhBkCgDvWbsikPMQZZK5dO2QVSPfeTRbZHu65A5/5CBjYD2ZGxe1/WEQB1aHrUh5jXihrfCAN0JEIax7rSzLpgyw0HCDKh0LftptIpee/o2Sm87WGC6VLHgqFZgRBVMREBEJqS+gf6gsrbPQ9IBnamMGXtDMMcwTJUSl+OE9NGCM4ItbkqIcf+u9u37nkk4sbTtDvBKMhsZ7Fjnja6n87PCQ/xqq6GmIIs7NfuLCLNs1QT0ty3fWQmM+nVD72XIitFfY41F8y2xog344YVAk5mlf811UE4NMNVsR1gs2jMdUDWn2OYdafqI/tkfE43/mifk18B1SbQJo4u1LxF2HChEnlNISJq/Ivtl9fQmsdvsYZhNMCctZLXtUZebHtotFsjHjXpPYnjqM+tWc0dZFHfS4bD9/JxCW8G2cI8jiEimnwFEIB9lQPQe9aGRi8hQLH33pv8xZcN+vhDY5Cme+Bp+zRA58z0000EUYSok8BkgzyRXQNjEbwSlsSXz1t0Ev5gk5XMkF1+wuiB5mkQ3TgsaSFvAh6jKsACGfio76iQVhsf5jjlpVbg0NTSk5WxxbJJRp4Le118AlUCDJ75fvFc3bFeUj32vYTszFUjtOac+YzzjViUKZ7IBnd9Ya+L8xkMmP7+7QUSui77JdiZzeN6NE1quoKV2gFdkFV4DpM8qhISrF37wRS04cjMxpcocTlUW/tnIvm/Th7VZMOjCuVzIsddTNatf7l+jtIxm+WBva0mqNR/woPI9S0gx++qhKlQ5ZY28JDDpG5nn93iNk4B2neGZdnh93sPE+4sw5xUzebhruwyHwOYVLEr71l7UA2iBkpa7VMKqz1+jMxR4/a06xqHQ/uxn8bOmSgI/BkLWgvjLGwtIlh9QdZDzkdsCSVNaUzkdX6zfZSvGAsUAzbvlGJEcwASVstrJPCLucLwzQ4w80PglJ/pvQg5rJ3WU/+9ZYkQTEI9L8KLrRLbKUljkf0rK1sqJ7rULm9llrx3EboXyfA9xhbEnWRzgsL/C3UtU9Gh9vWRyXoBmMKbuN06n0mHDiux1Q4HfFTQ1i3YFAZHeOAvv6X0Xso+L75L7rGMmtH0EkNj5ohHyhR1KQGUocCLex1bZysWUHhqBFinrim5uZdWJBxWLwymFIvwflVB3S5eZGYa7NQfya2n7sri0RXQnJ+Qqr7wg8ZLS7/rCSFouXuPCDS0ZifA5l6Nxjg9hnbc3wGbd54WKs7DbTGV4W0Yd7mq3nRpKnQmu8vpxQdRVP+pMcd9ubJQakGyxByv/53J/wwFvex2w7bnU6QVjqIYY1z/swMJMjItAktfcTMi2B8EimPFdNWoVxfhajLi7//6NekQvlqMmAXAloUs1LQwuiQLg7xz1PoZgu5CIuBGDw7S9rwKo8KRjV1S8lLIMse2isfD0sJvSjDzmEPf76ZSxlCvcxOu5hpEcQs9JiVdPzmf0gZ50pZAeGwzY7bqKhil+/ByVhPPTYw5MTsMAXeAP4lZWzvmq7zWDfR90iYFNXqYCX6TLblz4fKaM6BMfHdCLUhRT99ZbZdurl3V+Kx2LSO0MuUP4Jw7zq3ZElOD6XvBo1H+nbjpmylbG/LDcCeglZH2V/bNMMp6ERmPmAaLGsjeqxTAmbEkd5apa6/BQirH/dCRVMrAg7eKn9foPfsHJbivvXa/HmlpfxkOkoEa0AN6Bg+ftzn6ECCKaAZ/1mCQ6nWjgucB4v3emcli8hSq116Q33yGpcPDW7I7FwWF/bqA+2AGfnWu8ypUasum9rIq8mSIKBkCvqPvOgWupVYeKtSvqxnPu+8Y344JMB9tg/HUCZjDcgYmOCy61WzHl+e93R5xPdN8C50PQ81pWsHyFQ+8D+09S83zN2P76X4TVFYCEgxbuH3pIWEDqXC+phWmpaYqiqA70XnG8V0cx9IaVkZNMfpdAaH/HXSBZSNY9hibfByUrAy438Bi9KFMRWXtARcFTDq5iWo9L/V1nczNdq2eXx1a9RKLLMb2X1CCaT/ETZ7HoxtYo48mQT+H+vghrY8KTTrR0wEKDSHNv6ziBbg8pTHSG8JaZr6dNdPfVyhIzMu8f6i27F5cB/Jpw89ZBl2TiqU6kcFVRpAne2O6WaWc9gutaTopJU/0gXP6dmlOpt4lkIVxF/APftiAuqTRCajSQVrcIMXUz/bEuu+9NyXcakpwFTJ0CnQl5bjMKK6ILmVK5LUNfSNJ7IJJ6bHpZLEqyfPlQykog/N1xg+fTjUuwFn8+BKVulsjek4I5BzEi+/5lOtr17T84lZAm64AGryicS9LwSSqJRqAZ6S+ewtK4J6T7XaQePZaKt3uj3dD6EDmkyeqgAoLUuN6L46bS1SWm3b5yR81wDxVoZn3Jd03bvvPmN+tG2wym7d5RLw24/LRpELIhRVfvTdtdMkJHv/XcEXR7Oa+rPhWZvIpW4JX+LVR1K3RqapZIRpYWGofihdoF5SVCU4rD8i8H/J6WOOOxXphX10mmXraJJhVgBzWT9lj3O8hu5h03ITRtI8tAz9l9DEu/uzixhLaU1rsjU5NMvsm9FMRrQp70W0ERWah8nOPlK2/y/+dwu6rkZkttbeCb0zAX1oL2Ug8wi5fCtplqPKkGEETeX9bLl3CuSbHFiICo5meCdfiXK3SX2gBmm0PjmJfviByPH3UXhbW7lRay4jclw6C+jBdhA2gZyzEmOoYzmQ9nEuEnYjtTaEYEqybmiqH+nkoRr9UlatpmCx5bnEsLuQzwSpXs31yu7vmQWeQ39BoF6nRSlnmc5YtAsfOoOa7ZzEB0odaxTCChr13mZh8ktJxFqo3tiGGGf+rfBrvBbuz1NMydfBsUj1Kpm+Rf9WJhzOnGz7YOCFMh4Y6ECy9kbU0XrI2oxQL/P5fMPcdmPxtdRms62m+KHCbbUdOvikohxhsKo76S3qiZPOiwRCx01uVLGCxn7Tru8j35zYoYPis507uHw8u8cRuryNuuUrVZ+o+CkLcNYXrInb+4A7krCiFnlBikhRrhOuaIprLlSQSzq6UR8ydekITB1FckZ+X266SMCcF/pHBOppj8STxZq+dOPNJ528ar+0slMSPsjdb2iRnH5YxLwiTeBApg4Es5Z0SVvO+r9IOC0m2zjP77LF0V7SGAsuy1/hGlpQljrJbFwy/jtXmWppOfCAuSn0Hu3RnOh+5gIl311jRHZruesIuJNXn0DpV0PGP2oOoAkgLRJS9GWz5KvMPrcTwQZyfLiNU4/u/IznPo6S8BMdFli2T7mIBaa2Ft/eSaHs/EKVDWcmEfryTi4s6t0Gv5Ok8utItTy6snqfvQxIo/XH93pBEnsbtU7GUrmFQtXX2m2wfnGIBMKyGd6tqcTZ12Xxr9zQmFbZVhBwYwFVcpKuwFIScfw53VIb8qmkwvzH37JxWWD5mYuLwkRPu85akGBe0nKvdwNUDK2tb1XzOcapp0QvdtKVHudGbpGV3TqqZYcyFwtyScHD+srZ58riZl2bQ7DSC4BqLM9t+B0aIwrLimYoHAcEeIcrOBdfjGbdyocTUqemuOZMzSp38j/XaCvJIyqDsJppor4lQCTFi3IyBgvu8Jdbi890I1fMgS+P9MEKpjYt/3ZqTybOQXA9PgEdmKowW9AygU7BeWRQXl3MTK63fYiEu9J6C1ZG57tLuMIuA+fKoxdpxrWALkVOLHE2Zm1tesVFyeLioCFMSJmkbo/BOppDn9rz8jnpo3H+G6V9qCdGmI2TwDu3LwA/vANKnBT0j39HLRi5eI6OGZCfxb04U0qe6TANTV6IiImxfzU9aQPt/q+E4HbUgfUIoo3E10La5hww4U7tp3RHMk1aJab7pVdZ/xsK8ziHDLsKOLrv7ogaaWTOKm7v4nlXPyqePSL5ivKvN3pzfEI7VAnvwsTM+tmbbTc6744ehYnrrHzntMn6+O3DTpQAUSLRNeskFyuRDAhbIbaWJWuPf3O9PSCN/o2JVL0l3RlokQ3ND7cm0hvR+e/THbRIDRHQFBrcssRLRwdpeeO/sce1jdUEWW6FrHuqmid+cpxcqtdF+IIGQyRGOEHefZ7BIimOn35FPvLly9vv9VwAaq06VOpz+PrUYPq+6bXeFFlBDrfhmPXKAqmQ9NgikdncChhpJPOU4EjJKYeIABWZBwD951va06uRRfqgFirZZMon4w93VG6AXor+MqiG2MnDNjM/r3BxUlneUW2QUhOZHwhFfGOOx5+prODMZpOvDt/HDhWOQ8CFUqgKFo3DmGnKJ0KJFuSXVqr5ZdzqYy5D/ToRo33OaWQOOf/Hm8szxZB9gY2FKVN2E8/eHW6GcKPqo5whdq3DtH79+LouBriWupg69cYIEWVkuqHs51PqiLIMotg3xsgSqeEhJW6P8wuUr8W3sBfYTdiLVZGT4djwm0QCzaKWGak9zyJT9dha5pGz4kbFYFwBC158ryM44dkekHR48dfnAHtmSKwm32KZekr2zAzao9F4+TJ7JuJuH21diGHRN01LmMwZ+X7tPOyLz5F0ZULvwVpIoavgjxZTNfDYEv6d35Q4tP3e0CKfzbHB7Qf02TDgUNh3tes7za7TScnedN4KqovSPJ38Fe2J/4njAw3WH/PeiG23TIBLERihb/39NfQAm6vZ48oqP+p2qI9p65pqSLvqyGB6JfkZZAbituD05SsFlFmSoMEIC5SLvPSsO1lvzqq9/hFzeiXcbadTGm6VgPW7hoPDSNSEOfNN2gQjV24n9A/1dmGS8hIpJSrBVGr8leHYyMeaDur6Og+i/PNXv9SWBHpwVnmfpxfovqJNyfIXjHvVFoBKRhkrM1VF87RCyQUwRrZ6g6IazrqT1EIiv9Ub1wDTaZWWP2vyAAVJQK/F8r83Gk/+A9tM0DNb5dgHNLsxHCIHBKK2b8qubrfmNubN/dICFKnWYV/8v2pKAxHXZ+WcRqRYL2xW+tQrp0tO6m4m15hkTZrDiVkClF1inK32iDnTG+4xq9thW0zCxyGMzI3d/GfJH/vhwXqpWha21ruLki/t9Kb1Hg4e0RsqT26DFyvknaQ0NY0N4+ITU31aObp+T+wIwYuRvgZqZla38Lg6ABNjh1aBufzFxaNMRqWXuAlxnwa08zm2YcuoDF/mrwgXnGul3kp+2rO9C5hK+VhFXmVWAvVJey19HvPSF7mDeDopchOyMA4xXzhELnv04XHCnrpbbkS+SfLTbU+uGwnLwvPiutUx0ViYvjsZptkoDxqYSJb/tVRzVB05rMwU/8TnxedjiBOsxmuAfQL5GwOmc0fsYDF9XnQsNScNy7IGknSrQrt6H8jxNPGR9J8L++uWoFS7/xpgaYBAevkFjHg0a/c1yilMNKxmd6QA702cbfNVEXBgLTRyIIp1TCqsdNCAGWK/kZEmin7Mz50/LkFZYPtksfVX4IO5wgk9c5aHvvyN2Ye5oAvxrRVLoEb7SBiamoYPsy+9kZQpM2sFm55On9bbwQtQcOUGNwcu7XgCO3rIbQp/qTILsVJ6G2H3dHkzPHPw94DkStMstWtFA7sxjQsbVqOwSqUjJ1UAI/fVYwGjTSK2vI5Nix/rgwuxAIBXKfUzkoVzCKULyF9w0umn5bUvDD8Yu76m5rYjnlV0RAvkTh1Z9YHfNin2wyHUuRMaltExnLFTzVns05KPGW9C+R80w8BoS+9+0aJU6l94xvgXn5Sx+KnAHESd4tSqhTLuF2pgBsSw4RyMjsf8LvRZvtavsMWMSAh/3zw++BLsZhlcCMBEsKI7vQA9yTLaTlxOmKg0xQvZifWRnJdLcsbmHFVfjMY3vBNfTivnX8ROtO+YS7EhEoSzc+PeuGncs3cRckDs0JOBBHCOwAzOhnYtE55rgk1L/NDKdqD34QuNc8XoezB5IYBB65aufXI03C4W6g73Ji3w+6B6KwTneYdoNS9BUGua1pXfR+qSZJbuWSf/3DJu+JCawU+wEKN3Q1ArPfhcU05ePksRQjKBtyn71wfQCtk7WC+Y5+kpsEzxHNFQrEWcA1lpXLGEXE7qWnfFbsxs4qj14EdF6tYVC9h06iriCq3mQgTGhbwmHTmqK7O256SYnkXFkNz2lcvGCgPnx0WSAHr375xsrTws7TggyJlcvKMd9vJ4hcAzN1hdWPy3fxjQQJ/L+PZRa8IVSSqKfVqvk0dJMepTQYYcrWZPsJmtxx6SRJpQhYOsvMPm6qtHvb15HIBiNhx5ZDv06U/sfkElYOqVrCvVQRCYc4HZDM4SYURjYxpVU0qOO6LOqF68Hx398d9+8xjT+85b9aBREZneDFq4pIoLrnil+OCeGe5zZJKUIUKF5JZ0j3P+n+sA/XFTU+lED/g8wrrgq8utm+oI8zu1pb2APbJQNXOZCFUi4ayUk90L4xQ4GzC8H9+yDU/3kJaydzpv/E25jY8d25x6Ozs0j/ze79p1P4KdkuDFgxVJc1jH/aWFE0TD92qnKSOulGDpQUxIY2GEQiRqMagq4HG7lrNpiGt47lfyzjgWLY/VF65/W+IAms9/9d/nW8VZ2pa0LAYD5lk8U+LKuMYbDiWsnMwCi9iWAboAev0lM7dgxxsL6mcfhwYjuxNx6iXAqokx3lAw48r/RLlZeHZTyPgglkXRasqb/VcH2UZcim14SD82S/iWfqYCFvdOsXZbKMFspriYTvteN98W5AZD8EOckw31d3Bvg7j+vL9o1587uIAV3NHHIwq5K0Jr4UrPD0XdZVTErNG3rsSAizaMo6BCddtXoHTYLKQNQ7IoB/mpMlcQXVbBZU5gEBqiNn9vVUwzHzKrLTdssctKZtN6nZWrUC1Zn54iZm8Wy8+Z/ReUFfh1t3nF4jph6xudXatOvAYeE3Yezl6uH8oKWS2D4ksR4oCSwrqU1s0pP6OU+RgKej3KYhFn9vvgfp11E/HuGeUpYHTzerbrBDvLFytG7taqE+k3LskgCgxTY0J9aYXXgzL6EqQjdQK6U0wNK5uL0RNWVIBJtkI7JoAvEDI5/co0BGRLsJINutK9NnSryFix66Zusz/HumetPfRQ+o8fTqiQFSc6EPz4gn5G6aQgVYMxVbDnzKYOyMNsf7xOZ5e15A6hexUGAx7788FxjCU1JJHQqSnuP9wH4XsLm0SVIoD8+ZLCOnT/sha+JVxZt8gTUWlrmaHkGjQ+bTPKk9JY/eKPr77fi7mqqyA+cI3wM40KEOJEx+pzUc/l+uZqOe/ZxcIR2qN3QlPHbLgqygCUMsx4xwlzaW5nME1R2v2JygaB/5Iw+ml0GknyVZvBRHiJ7YC12qjNPhfzl8J/rNRDiX1nQlffOi6neVBTy0J5zj7hbfQwSy04g6kXbp2IBsnuTCVq8zipej+NgikeiAS1uEo3RFFF+8PLJCUr77MQOCIEmO7PlDbcXe+OrwaX8dV3WSn2TVfN0Pej/f1eYpFZ5yqVLf/sNrOFrXt52c7pdYa7FHZmrhA9K54KHLf04QYeLictjD5O/NvzkD/pZNs512kfsdPFSQMhnL75r3uBaLmZd8XH+GRR+dlCnyd0LIlU0oI62Lm6Vt7M/JmPUNV0iZH6oBq+G+JT+pZJKFqAvlS+ByVRzs+L67T3TOXMK3xlVGsf58CUVU7zeexX87ISIS+5ho4lJOsNJcmS8tN4Rn2Ar4HeUfz+7l2puYSP57LCHNlHXFufmPPehB4NzGXoBAm/lPxTwlEPSrfTv/3KAmyt1YYTTW2/XRLyYvrTJij/dAxfUEkGKQ+heTfGXL9q95BrwdzrazHkKoldDPZzZWod0vwYo7Y68+ztQavLsNvumfekvheKKsHn3dV3/Xsj3z/pfelv5XqjHe5yOKE6nzlYRsA66sHzPj2BqrlddJrio8oZ+h2ziZ1XtJadDKA3Jh2wQt8l+MQ22tQYkxnv1cSA1ccac7jKzojk8kMqoPJpRS6HvAzzfKDVCpqcm3LNlhIriO81nWDEohSQD4YbbyI21Dx7DAgu1rkGRdo+5T/zKAJiKyEH9vRnkTP4qHJcpt24TvMCwO7nMXJFKsPnweAXruc3MOXMWzXknbNv3sKg/dKMmKR0qXkhxs2/g6leEeWatildvpnRmlCUsGSTn24jR0AV+8/mptAQXZT2niO2c9WjzVm+mZBEcFClyc1phSoSo0M2RLOBQHH5rLWGEwrSYYFE14lFkCWt6t1fNx+7711xr16HEXdlXP3+LMQP5+Uk9BQw/SBXJ73MScJpvVBwu+WsG6pny0ic/8R1wJmTI5OEAX4BqEtJEenBimtaee7kz2xM+TFaWHZDeYT2TesXZuk2sLABNYkYMMpWH9i4fP6hzI/svuZ7Skv1Ob5abk0HPhMoRzB9Dfsv2h1vuU0mZuNypiDOmX46qJWeE2UEK8Oem/TTqVTG0s//l5URfx9+O2409vFccgHP6kWo5J3b2YrJ8H+UgV4XtLS0vPqoKHhnR7P5keE4j+TZPQBRi3wpLzHpgVBSISjzVaGMeZoPgFwWzxZfQv9QVx4EewWgCHoMqyeguLmQEqPwKhYUL5uMAovD00Dk0qbRGkN2c2sBn8gITmIPohqmmD9YI0vnr1Ffb1PTZlEVF2zLbCS5qp1RPRgfNJcNXbNGk2ymUkNgewiEaLTL6Bj/9SKYH39l36C/R2NnzwaNI0lcwC4F3YisYslgsk/JXxe3H3CnQroO9uXtxyG26BJDS1t4Hk2pc7N6GZsSujRvig7u6UBxCaEwMDSKdr144390LYqHBF2d5xW7isyTP4T6zZ0NjWLCSoDvBJfskjkLzqz+/Cypa4BeUUj1KqQxRVc3FE54I75LjD5BlseU5SCoCgFK25ZPwylyd203d+PFZnMhW4tGTDib9wSldggJZbU1vhlOnpE1rp+RqwcSO/GLYdJOUdazOF715wnV+rL1I+L+IyjUanJEnoFOEuWxGV895hJHM02Zc0jKX5MLFE+EB9r61ZzqHwIXERncMMQbnoTmJ/ETCP4M1q52TArxlfZ0BKdmO6IK/ldc5fL2DWEGZeXmMKGvE30iGby2lXOhWRamU7wTsX9HnAei6dZAJoUYFgXdB8GjGxpvniweJZM2qs2k/7uuRqPaPSozXwr4SWoxxImcTZmaogfe1f9CYSQThKMJGTVw15l194weu49tSml+jrI2Zlk1IY9ELln/0moVdXZYQOApwG16N1Z05RRl9qF85jqCfv66SMq7UeXpoIkeHLRxiB3Tf9Q+CPLA5q824Ryg1ToACBGVlGHNZLhk18e2DGq/J+FV8wgtoVjCiIPzQGHDNYInlGflsRFxhlh1gRdgxkZkp71YFoBVal5JC8X4Y0hHH5akl4YEeMADVeDTnxWTSWNCpQfRqOreS84DHLCXIdPtFpOn7QdUrk8GQcD+cN5Bk5FMgCfnXtdNifQ6uxq1nEFzczmkEzuVd/2K9NVm+zBkOwIxn3F4Fj5My4ShWjicViHUQhfsIXl30OxWLbq7MQ0EMgnhtFoiufTFGi4VZwJMsLXviuyJofcwIBd824RxtrvHLavSMEvy6MeMcUH/gkc/M5GO4raT0X1pr0wYPzmE/j+1xNu8tXdKvDJhaO2N1jbXbkPyGyNr7itMkS8KENKeF3rFJWpUyIAZWnA4GZySl+LdlpUsEGmpwzRHhGzTs+tngcIkQORGNf++a8z9x6cEUbgpTK+4wBhumrUf6E5W+aDWPy9sAPRExuOKncTmdr20tQpKaGcKGojSsB55dx9zXQk6fsWLVZiGC+iWbc0o5GelzCh2YydOP3r8OLS0VZmjpooNiL0bSBJde/br8IAW0WkjhbWQKFObvXPjMDNWXs3gKCnLPN8LtzGyYcVdTbWlNwaWkULNic+nNurHpjOhgyiCv29khTko1gLQC6aTz7rbNqGyEKJAYpNCOYULGoIepmydS+mIrjHx3RoAzLGp/Dx437GpQYUKoap8D2ibebed9zJapcqIdrbivzOWKc3/t38owYnnUUBDpswQr8nrKKDPvSqX+uvQ9fB86u/w4y+e/BSeNk6JGESzal62s87aJJlK7ewa/07uuKVE8YLiQdWcgPGRUsfkJrAc0gc1SchtU5WmtwblW1gIiJ3WSq6iXDm7kxVd5huO6SWaTqK49nrdD+Z9K/ew9ABBc3lVXB51Y0Y2vTocHBIVtsQQIQ71mqOWyMDYY9SdAr5Hl9oIjzHqlGSEMBI+Imwe1puv26khr7NIVXn3dqO/M7ul5iUaWyrBDPMHvEwSl+A6xLq8jdHIU1TUwkdITEF3xVRyZSr/Z6cNFKKi4VLhPV0X0GpF3zVWvNDfny9Y1KtV6oAgdTlRB2tvO8Am86eKlKgMJe1BZPzq5/xrSTNCDAYYU8RLgE9584Qc+h4TtccqfMtqKwFMPRsAdGXUmezUbulW1JxFGEonJpSX++n9nQ60+9yzLdn27iWlO5r596xhxLBw+bISTfohgT3lyN5GDML64pSLImUv4XfXKhj58FZ1eMnSLdyT+sfz4/plNTqMFlZWV/h6ChTVe7rKCDfVOhlzxwWDh2F3kRfica+vwTnr/wxTFhdnPbyV3IVD070qD6i7IqJYslL0umU7gQBcDuQ8EBA5u0nJtq0Hw4hxV9H1RJAG7D3J+3ZBK9hMGgssHo7Xe2q5WpPz37N0YLH44olIi5bYzXQZxT9lrVTADJTt6DDbepek/uGwX6b391FYxHzKcXYupwUK1zvgrBvDsmDUxIbddIsrGd6QIEso+aoVXlhtJ5bhpJhwma2fpThN1WJpTOa0MyuAuqBu7Q6Z2U9QvSVUHoBSKAdSQTN44JaTzHpHev2EAa4fiUENR6LDkkJirt/m38XCsljMcjGjRI20Op4xUGwF2RivUu73QsK1wzMJcZIGZQgcXpdB6nqvooQv8j1YUZv4Wel3s3G97btOash6EG2cI4vCyKga9n8zaFqW/oL5hkXH90IkRUyJ1ca8+RsjHM3UvcOE/8Od6cKadipfxYd3shw5jP7Cossw5xLtYVPGkR1Jwx8Hr3b87kq4NS6zBgBJUgYkabQYG0x/dv0Stb3EFhnBpBgjJF8BVkBWmfrlSGahfDKw1d43dZdOBtR+KiKvYPEiB+Qzp4bI4w5vBWWhFgv2q6e/2FvTINYMNb7owWTfgmA7yLimyHXK0kJJ8aQKFsZGhBo07JBwdBzOiFTMSsiPxNquEmVg5ydZFjJvNuzejhaWyO+kZZ26eV22+gOPY6AuGUPv2ykaTnitJKn6/08cRJcqCbdmvZ46BfJYM4qu9KnZve+NgNmqwltyY5rk7AqkcsH4vyZhUQ2PW1cQvNuFXlVhElWcsanEJtUsOaM4lg/bkYN8Xjb5qFW+n4ND87x1iJyfsWTHOcwD3Qn1eiAAMEdJPGejsXKi4Y7tWPa5f1svEQe4KB0vfrLd4yjObppKlcOWXbi1hM8gh599xwzTZ8pYG+yKOtNqcqbG+IZG2xBMgf16d7mof/oWsgIxSqFtjCalzVCkFg/zUF3cxYy0vvt1LnDnkRH8zHy5Ax5zBLC6IMGIu261hqn7fwoW3FbLoZFM6/BJoNOOVofrxnyJYl8xjtCvwingqUDVYD5Ogrq9+1M6H7YfQ9MZijfr/r6ONnzjPSYXJVXM2oe0qSP6RdXgBeMCLQMX3A4u+y+7WXPU3MB0H4Eb4irKxbJ3pkEkys6eb9Y1k+9TdYDLqxBQKNYH1Sc5kTsxmCgah+auPpHo0fSet7KchKYiEtFvVO/keABSHAXvL/EUYoUsG2pUh18WBbvjLF4UtKpuOPssy0OOcwXOQ7H83f3WTpeLASgaM1aXbYTfgi/9JQ9VfOHsFy9xAWHPlSxc39vEuKyO6dzzEutJ+OnHO971Wtzhx3exrteigCwgP49sf1uUe6mJHbVYI5C+ryvw/mDAeYh6PsZBFPEzdToutLiMrlpZkSMarK8l436+1YwufOlnHB5OcexPG8SdpTaVcl8nD1v411+weQzljCFROqr+M9K7ZWp8FCvmiSuaFAWu0MKH4ZE63kz6DeWUkSg+5bm8CxF+mkvsN3YpnLrA1w2Ro2bzY1wztnSq/fVPShFuWlUi5ELV2NgIEtbKydleDpswBq+XWhTy8mfsYOyAx/+XHz5wXUtvyINZ0yIKP4nxjJym4afP24GjVcAFgFaXtS43wW6f216PZ5CNKnT4DvM0Eexip3cg/ivXZ35HpigrjVIxrSb6JKjv71wXiGNmKC7fYLST2YGnPkiAeckZdWXT/U6IAB7yqg2yWUEKPjSgxHoy5TChJ9E5k+QuHgVI4V4uNgaXJjRE3zpl813lWj0oxUfniBeeFM6bsId2/lAnx/wlhCkTx3Z3Rx6AkZ+hnUqo8lSm/H/GacvLqYlVV1RuaOzibyPALYxHACnrdEE0bBnAq5gIS0h/tkmXdWEde1fwZNiwyPHA6Z0wX0GNlL0DsnlBKdshK74xCWYa5slIeKYUQ0qeK0M5B7AHgEhMHvYMch1pb1N1i8BvM7NUf1YTKpC7fTJMsaW6n+R0v+0PvIW/wT+BG8Vq2F5XblrmvPOLIgMll/MVgPoi5a0H7veul1Q/pvvtiykDmBbLfaBdsNumncTXJ4r5ZHBOma18b+hlWj8WmcjQ+9eVyjORJ9nBh2LseDx3Pvli3d5jYpSMw7LwHJtwjTGc7umE3sUcktOR5bnKXmJRVnF/HXeFgEjsmA9L2/rbBz3bXZEPWvkY6uB6yF7NVK1iD6yhlBdWJka2ouHonQ2wVCUnZxpNwPeVHB/U/OJs8A8MGnWZ8VQk6nTodCGX4lft+n64xX9v3LUAzmFZZFKXOIw1ICAfmED8qja/GUsGCaw3ZwUHx2qizW+kFWvp3zRd2yfGeL64i6/zi4yg1YJ2OmMzviUe+MajtvQlgDcnmP5W9h1kKQi16rSIgE0J/dMqVDJCNyZi/oi6sUVEhuWHSJWTe/qQ8KUaLo5sG8KmYGeM9aQDhDkYigKF6VtpPlb5jmYKJevXYMSgXPD4w5m2Uplo6LptYkNIhswb2PwftPMLeO8rKb+jh17i1gHln35FSUgGJxsOD2+jiXKY58nmpf27nVsZIy2zhdgQri+p28uAr5iLFbKXihEKeeISoAtfjy53XnbA6bp1mF7jMGdeDGk49o0ziKmieH38nPxgVMO5Hmnc85NRWffqLr5Jpuk8shhWOrqNPeL5RBYoWELrzI4nB2F3nz8HTc/0jDK7aPt/nYtOHF4W8IrB3c6Br3drCab0D40i9rzXWd4CE0oBa8XWGXhBAgwEZRL+/+1//QPkhByVNo96zfkHUd0N7Sp6nbI845LUfAdppUMJRyrJ8tJ+ugLLQ/i/8GrAdMIUch0z3V9+kWqJ9Vix1A8K54yRqmH1+DdeBQNmceyamRi6eRXxNiEJfytdmfosQ3qXPlrANuq5WqJ1XW54yiJskxdw17IcEqCkur0cWs5DC5zGTXmfhfnRwzRmlZ4gu+qWSZdX/l3WxwP1OJ484d/WY4hforyOEI3maNJ0LlMBiMd9Ye9a7fZ7B9fV8cqocrQRpuB8iIZjVRk0TVDyQcj7K98DlZIV2f/6AZRDgjZ4NrDX8NWg3EwwmVkhK3LZNNJuxHWJYptZw6iGZGN3HJMB8mH+ZHfsKQRA65BR8uyW41fB7qnROrziEbUeJ0gjVLYKfKcnhcpqNZaY/19s1G7HSYUgKQh2JNgeqWDGEZ6l4wKlDZEisXnzlRLcQto0+7lBxRJz2f/WTXpiaqsBjnZBPPnEu1aYEbTOPTjE2yY8OJfIJ5I4zyB7/rgzk2aRDiqAuny6sPDPFoIlRxLJioOw28wN1F9Qk7yApA6LulKuex1sT/rsMYeKuEwN4EXN9zQxrZpGoH2GSWKw6RwH+1QHtZbDkEWJTfkAvzD4zaaaU2KVHK3joF81yJRV2xUBOrAMhuZyoGPWFcRElBPjZfthJRrIWQM5teeveoYzy7bsMBSdQ9RllbpG0ggOnSfnR5iqbKBOKH4co+bGnnGnP9AflbA+2cl873R7eeDIpPhPQeP4eg1Lai+9nZeFVO1kImLy6IfBKGndoBY48DXuYo6kpQM+DiUGMX3PQ0JS5CcTHsTDvqVM+HRDbGzaDJosQyto+6mms8z/gRcP/VCgD8S6qBYq2x0GdByE1hzrKy5xRi3ol1BSHCCqKIJW3Ezzc99FB/aAwDt4Ot3LCOa2Q7wXf1qJAP5F09/dbiNqhL7GUAwQzFOYIBdrdutZLa3BjUUZq0qV64JUVG4hruc3uiyy3FBL4l3rAUucd/uVsqdNKWUoxmQ1GyUEyV0LEg5x50SgtznibLYIpfpAA6oSVLkomkP1b+7p7HpTi7jsSYHINorBOWsAnQ8/BeFjGtDVhWfJJ/kK9Zh7AqxGe4pxIDEChT1+3L6mEXwQkxMarBXo/r+oLq2K/++JU47vM0ZiHxlApZto8JUYYQg6TPitONICHYhmBRnXq403trQA6XnXSGaw9ixLpvQiZ6as3iDnjqnTXzjVfV9qWwtDORNnsWYmOCDcHBwd+kLvHQrTFnXTYdBvMZ/8tYrk2aNgMi1gFcKSc+HBRM0VGcYI7+WKdEE13ABOiNPgcPMSMcPiX/Ia1lR7kb5r21s2FKDsT7In2sB3HLXchZ6Jj5SlNIvyVHyfGRd0EQ6Z0Xc/5Y1F495Z+V2HR6hvqy9bEZNi71Wiave16LoXeMDuJCWHCcOy5YGga/U53jVmD12OkEjsiUJSepBYGsTys+wAJWukxjayjZW2rsrLLoPl02oNmBLTdDAR2HxRzZ927vHYZbNbolvqvSHWwJXZ501+FFjHcyfPqZ2fZKGQT3uemiaiLAd0lxZyzg1AXf7fmP/JbpFZVxt802Sscycjr6HHUGgh2Lhy2KiOVL9Fp9uwtRIlPHo7qfBWnMo9H8+8UVSzOXnLQ8rUeX2DhLD28UA+1Su1cXK2n7+wXlnilq11Tr8yOd1l+oMA1W0XAeoTX1f7mKdhSvFM1KU+ZpDjsjG5kviRCEDK8WUsFLcpju8gWTiYRe+zzqbr0/vux01qi2iicySqRP78x6SCFleRRIj/Q31ZkWXUxL140o5JeoPYdEXcT1DUHTcsj1Z/OSEFFD+yrV8KsTBrSwr0KQmEQGbGX/j4CBQVLJnoMQqVfb+5B820C20gaBGHAjcCSOTjY234BQ2etIy3Gf4QdF6jkVeue2mUxOQyTs3XrpXln8k+Jq/qOc03IBXFFGbElZLopECLL44kc2UAKTwE9Ls8P5KFZHsWyKO8wJL8VgeV37UscfZaBPDZqLGVMuup3pousjiv+ehQi1xMjUvaX7L/sgCKJt79QhgvoWeEQKXO7tH0+t0wlSXRT97d3c57CVpPfdr5u+GsOmXwB1LSjEpfV90yYDCr1KOl8voGnCsBHkwHlLOtGuz7oI9If7UAewoYHnsktpiIEfeoHr1CxoP8KPI2kr9u5L4FHVSKBfK1iLxTCV1/Sdn79kluvPeEfAX9DUHg8xbA8VpHUJfqK6oUvfE6NLfq1B5sREDksiUDK7BARb3BiO9Vriz0TRpQM09N/P6Qj4+2OnXvkTHplbT/ihUZOp07qmIOmST8/Df6d5FJCYPKdVrmuX7Ii2EvMWvBnGyBEYyND4e8d+TH+YG+d8Cm8H6aQMY8rBo+53bw0KHfO5gji33+HV0V3b8bL1/+it1oF5zj9yKd8YBSyCPBJAOkY5wKku3iumqbA9hDf0yBvwaqPz4CX2jSwjG7+XwemfdZ2nMZnDM4QQuXHe+ticcetBURJkiWgr4DTl7ePDfMWO315FKhsJVEiUtc9HHq4uekqiH3nIdQdOVMSHS1Xeu44d9bn61JaXytmitKBdofDEj9NBXei78QIbr60A8IWUWkEQ9LYLf2P3TOmtEySK9hk37Kpi2RhyAL2w4DVbwO33E7EuAtUTi4TjXXKwpt8yhdY31l4usHWQYpaVewGmJSVLgNpsc5mYhlYB0nVNO+eX3iHopr88j5rWney749IvJ/fe7BEB5DYCcShyM4McOF7fgBB80w2KhyIF82ejr05GMjFG8WaQZOQuKtNpDudsdQyHBbd+UlHfcvfd4mehpixICiGrBmSCfPa9GYGKwtCp2B4Qo4m2AVkX35xRLLP+F+5JkiTx961chjGY3MjVyeoLk/qZe+VFwjufHBQzsVbCijI4kHhZ4iY+nllM9XrK3MZiDoDS4We3iMNHUjZQAzm+/LujmBRkkBw1aR2bC4xtQxWaky+r9FkGZMofjI1eT0MwNFoSPemM/UONBoZRudhYIWBbYeSc5fw2dwwNL0la/o7gsmKEDF9RbJsLr8gIaCvCKpNx/29IMUX96LEAwTEf5S94lOiY8sKvdbP4giuiVZ8kpuk1cu6TLVSvXTCgilJxq3qjsxm4h3+6OvkgdxiBGJ2gRkJs1zg75uIeZ7PysgFkumclsa1b88KefwrLimg7rUzBB1KbamWWD29QPLMFTC7EaScTKvk71MScoS2GwsB3wPW3RYbTcWPU+mJSrTsIEnxQsfhPIBRflpg4pDXxfE0RoRSF7PkQwuVKmcbKnLt8COzKirbEe/Ajho8lVewAlF0dwbp3uqW70dpxr8eli8DM3Bo/WIFo06bkDqo4Swa0OwRmo5kjL/SnT5TUKwVC5XRZoZZ3mq2HosRD0bcbJvDFUKHbMJnUzjTJ8qaxAVQD3BfbsSXUoANTGWUOPnxX11EZAohZAcLM5FZYtGlobkSWGkQmq4thUJ1vSwbWPFQig6sktmqdiG+B/VvH/6VayOJUDGf9o5VKGovkXnzcL0VuOAa/XQCzShY0Il1r4NAcmkFe3iTvWL3uZxutgg2qGr+2IQC3EKlXir01xsPWktREnaRVvO1kVW/UBjZH4JWe+IHI6ywu+N9FYOtP9aDZKA/mq3TrcqgRJ1Cwb4nbksD1GPD2INxn2VseNraivjCKbl+ULkfV5juiMXwSNhPr/Q87xuQe5ulCwDR5egbyBgVpaGttOIfOZJC0IRupJqgzawO0r+jM/tsr8Qcvdqhdh4W/21/ibaOp6d0Xw7gJywgVJh8/zSyGsOW82FVOLCDyRceMbLWjbVSXr87YQ55CD1s2EFoeaMjSaeqy1f26mrgODG9Je8BiWry1I7CIHY7Ny/KgAAsYSBl1OcacNxkfGU1RJda6cH6maKCVQKokTf7nQ+FF7aVczsT4sZrDIlZDzjC3xl7EXrcfKboXDp4YLIv0BIFNlNMetPEiCPi4bT04OvBGuQz7FofVCWdUwb7rXUpz0i2SF3HrGY5kLM9CqNAghdgemKqXt45hBPOoJm87ulMyXVwbJzHu2pWLaIYaN8l/RvWpLNMufdLalhrvwJ1i9ZazJqToC3SNg7Yw90Sh02UVC5ozODxozzK6rBDdl+SVtMvNxhva4SzLB+gQjfUb0dQv/Zof5Z1lyJCyOoC3EksR/vr575Rx3N+QIOduaeGjlGDjL//6kvCQVEri6tM46LOFSL/fHo4i0y18jLSq5fkwvF+reYlR3B/uouEQ3PCpoB61z44nnINfChAUM+qF16NImGa/ZPHrYwPlW5GHUeE+A9dU/Tq2P+no0ltDe644k6Llj+wYmQ6OrM4LWL0C20CM/SLZp8gMo+tFlU4YMSLNJOnnUKM1VsEuJv72Te5wC40baPhxMuakueSaZq8hKHth78FzWZA3rHg3a4nXSv0VxSx+kmL6hEpdFnE0/AmzJhhrgghDtiRDu7ayTxHD2lW30Zoi3NjkMBfGcGOJgstQMjFKZfMyZkROdiAxBhsDgWcWWaxqHxIB+XaAAUP0AHqfCal68PK3BJEmDwGfx68En6XQtW1dKIn1CG8RkZ7YmHCXQxXQKD8vO6t5SKKDpUkqTDrbeXjfeOb2HuhlUTSav/xgdcJ35ZyGD8JNRYfj04YUXUDU0fmz+r3jWqKgLBgbckUr3hdJkZ+Q0I+eCj6v5oUc8YGHnvAUiyEZFSnPqJjoS0X4K/UJCU3JwfgiJchwdU7BDsKtT26R9K25lLakuAI/WGiNHsly7iKrh4SP/cz7j2XCZj3BQmrFNkoei33QpY0m4tVs2vbzN641TI4MmjNU7jZ/Raz13myIJ1Fzj2AF6n3SP6MohAaaJh9uHw8tm+1UOxPlq8VWwtbVWStHgLheFFpQhUphtpvQ5pe+JZepckKvrqSZCLeDxBld4rlUT8dcr1CqXOPiphMD1epXPqNDmxzjWjXgjio36/U4Pxy128falVJt8FLRd4mCgTwT4zJ9wL0ZsIB/eZVyxAv+8RLekb6XApMNg9vphlt3UUf4IFlWx4b84SSsPCN59BQvAXwiGk9uyd0fXHr0SMeqPGLEnrTtlhnw9cQwfO+Finky0ZJvtsPaTc+iqu/7HDgSjcmn0uAX9RRUh3edd+IfLMFFjUSyFKnLvZzvTBgMIqk2DrFeRpcb3DA5xHck6ICCmq7oQ/iRPx9nROx4tyBJgfPJ6ZUl1hz27EKiMKyCMq3npTWktRjDY7eiLT367vLN7WOWlhfNpBGt604QPKv6IbonnErp+GsqVc2l+l4XXiss5aesv3CJibl88KiVQUpWtKB13YYrZKunhfkVrbA68kzbSxdXOwy3Zp3qYWX6qCAsqtuavjypuMQAzMDvSR9vsstkVS1aeKYpG/XPoQkF+Onvtk54aOWNeIkPBV8pBVVUdrRNLRrTYCogaFuf2Z/LxOfzkO1+GdO6yk/T9f1WqcgxfBV6+ANf59ZbvdtVm2nR74Mnd+qsB4fOcUZs1jsuitlDDgZOshpMcVVMRsG2rVWNWe+X0yDNw8EDRiFcc567XoihIZDH0oKbfiOYBZX9MU6qzWYg4P2Scz+BGFXw1AnSNTSaTaOuw3EsQfsPTfIu60d9FOLW0sPhbo3TCGv7DPL0UAegjPlCDbzMaL4fVR/H0yPhPsSc3px7IR08JKseARvdPc+rg2BSX/3bX71ZGubUIdorFter4Cbh3+67idht9Rm0htrRwKxPaU/jfkW3VCzCW1Lmfizo6hiK0Xe5SIUfG95c7UcJ+l8nmlMEmFXYlqU+V/efbX7VUl7WRzQ5KuZ37fPvRP58wczxXFfbYKaTuHK5Q3xQZ2hv7KNlBRYdFQKUEm0WfCbcBiOiSlfLOp0+Uf0ufvMqpnrxOWJgAs5t1YjUGRIkyeU7paQriZkLGV3d8l3WMJBOZqgjYoAJehglmO0Lhf4Tv1G5ePugfxlW2/1RPFfWXH73W/A42QFwMhSIh4gJEIvcJCrmQWrmAfI7QoZaiOHdgPGQg1t19eh25+kogO6Ol1HB1O/+klGljCAJ1c9hN2wMira/1zY9EdJjuMBKVmNjFPzgpA8SroMB0bT5y2YasOC1/zAzr+NfgGVhfPk3VJpujm0c0iR2t5o2vg89ooQVg5NLOj44ZVYlqOKYxwws3nVOYlPLA05cS0t9XBbxs9WnjFlafp6gL7EUdHSC2QY+0dMOyRR1mHBVfFf9W2YjI9jBHsn2qxdB5JdZBOG6UxX7HQVR8Wma0XQYf6phZAObSVnxgWYYLuJl2P+F7dUKMYw7MC94v9ExPEi87an9ZY+6zLXfU2UJ/Isu0NwOKU8ToDAMCW42daZr9Qdb+CZv/rirnIAsq+nTwGNzPAabOTxssumHcnDuabRlkj9gu5tPeVTuEMl+5US0h23sWdC51hJZPgYps/sCOc61qV88YLJeCjfIRch2WWSvlz+4feTxfWTVQWesO6F9xfBuWfN9hk35NinC5evJthX2DJRBu4WMOLFhOJ/fiFBixeSW44LMrt5QSQkrD5PK/a1K8qnd/HqLDL3cqVYRutWXIG4OrYEKC5oQ8KHgqoshd3S8vsGOC6a1I8ZtT+1Ee/rvjhInRWNVGHdxQCr+6ud9qx4n2JgqnQR5rfhFN4L8xQ6m8WFe70/hGRXAgUgSBPCRj2/g2sNA94ORO5DAUP4//McziUGQCjq+dG8nnYm+K68DV55W3spNFIZvbfxGndC6Gt6bq22kFx88150MQmKxkTj0WZ65jS/LFA1YFyTq1/5EOiOE/p6I1GEtbhIj7GFfwa9Cj6iqKvj4qWIoVIWfaFyUYgI1YXXb/inEaxvST7lFcTaWNz/uB1dFyTcfr7McCO+UBdfFU0Cz8KurZP5PKLMyZHmoi7dRO7BjWFcSmJuZUcFGXonyy8OquJmcR50lKcQcVWKHVszrzy2FqOQ6mdsmY2WqyH7QD+MZbqxBqfZhbj1Pihx/W75kot1rBIxh52wkdLm6qMNtTykioadQBEQLUZp+IIxD8kOxRo+cs7s2b2FGRwCPjU3g2GX1pAvZN5282VGXDKS+4SkjYcAy3WQ9ClYRn2gOaBlJ+aljGG2VRuvqLoyw/vtsuKZq3hrz3osm35Ip5vw7cIxzzf9E206Sv/G38fnlPA9bESKDZbp1jhOutMSRDcYc0JroKhBRf8R4bRMYgyoGlyg9ItF1IZkuKGIzz1cwGWA88U4L5tB/+QflICXSa7kIei9cqkDb2gUCXbWhMriZPSmrvqf90A1BFV1BqvS53/cLwQg5k6RUj6onfUDoLz+Dip7QrB1gnXrSJzsZRcIlb9nvqL6SA8CiDjaXaW51J+aTrJmBmaEPxSZjFY6TpQOiDvlrHyP4iWtVcdbeLiHtS1vnJo9hmeoT1RsaQmSWf3eNkQ+7/cbq6IrbdAO3aTDH6o1lquKJ8ioWMhfcI6hb6WuJrTcEMlEDU9KsTYgxQd8OiZqZJBKk+RYwLw8v2ktOZ1AoTy0f8253d3yzocUSb0IrKFcSbBhQlpFIaxujQ2QsIw1Bu56DkSQylIz5ZRVPjkTJrDE68sfu3CgHqdoO4Sdk68cdU7kYQRg4wD603/wf5KIwdO/0p9+i1Bas3XPBtOnQpzEj3BCZzXnFIFgrvITSxdjpl0c3ylRgm6KHa/DlHaFz8tfAz6KgPGCaF7LERoFf4KLsVQMbnQCzheAbgik/fClLruwYHJrkl5P8Z05IaYW29t2dDR+insxh/fE9z0ElQJ0LfDnUeGOpzETWYKP1si4oQY16VAKRx06jraCDMlja09HFYulbR+srg3jCHCzToNM1TNEGPZwO3NwNsJau09+lkwoK66q3roDJTJOoZqAjaJ+e5uQWsvoAoNZ69SDap2pNgXKJpf1lvD7cbzNVZk5y130QDZXkDsRR/xRg221ADz9e7VDXaDzyHbwTx+0/+dwXLNfOcsY1Ky7oD1lON2dNb435DmXq+QFRtj+5E2PLQJWA9Cts1BF+zDozbO1L910jGYV9BJWE3VY4INxbVCfzFRm03jHzQSm1XXsn629DaN1x8evpL9Xv/oTXXRid7T9nLtE6JdZFJBy+10SnjyX9bLciw1tNU0yJ+tLyx5Ah2QXfaZst+Pb0+TY+Nlf9HA/GCEUapO94AkAZDsTcO1XbB4HBT24rAcva+kPa6w7UwswrLo95wxjJVLyYbp3bRAp3/Mmh8nyvBh2A3u5OTIH+YqPzrsGlowULwCHXnxLLQV8vkPITHeghLnrxVKhARIgtRP1r0pOry9o00LXKnmh51aV35E5dPk4mr+Kn4C1tpjk8F60CItGXShIRsSXfCZEPEJNg17hZcsSkieCmhQYLAv/PGByhBgFRvLAPZ/qfh4RUpTDnKuxizdpOUSk7Y9ctNvA029Jc1xWX9kTFyLxznd2he6C0lI00OAAGzJxyYHFa49wJA7geva3zItBh1RtlpVPvr9/akF7TYPBe8ivGzB2BsCrNlfniGRBTCzs0RZyrB7RWcZ+T3X42kJdhm2MeUG0dr3elRWyzvzRYDMrKNBbQmRv9MturICVGRJvxuAnOQCcppfiFk0/vZSGM8k4ns/4AJeL7yCyYAoaq92Y3c91wqYkyiF1Fpy3d61iACOqS3xwo7w87b2KgA7QXSb3URSFV3xrlh2brnD0OksxCLddZwA+dlXBGM08+k++jS2SbZRiipKTWC2azjs5suCyaq1cwbAG6hm5Cd6/DYIji8NDsoSrFtCB37iH9bi6gryWjvGdxNRXyYzL6fLP+6+SH8OaFrRRzFgkkE2KkMuuZMtJF4qCxxflAKL3SbVhD6nnHFRejm9t+ao7r7pcXD0o+zZ+OnAONQV9WPfa1haoZWMAFQOzI2W1T37XiFsHaeG0uHI26W8MsjNN2rp1zE3GyIAymS4UbLAJKNFq9RUqAa8eajpGD3MkbCISpqqte/+FwL8P6bvVAV1mqXLBRuFP21ZD2GxyLbojpMNBa3YmCZNR8fLCigASpWP4rgUpCw+Otq2GSnBHXykc/2JFKzbXl39uwjiGYE2cW73ccZGZ0qNTiYcgb850+tpvQ83XJr8bgItRhbeKCydvQf81kYuWwe08w6k+tPxqLOtIwHx3MBSw8m7CVMaHV5KtZ1P2sYAfs89Z2My7YeswiIhJxgnXGnvyxP37A/6U3VUlLYhS75ZF0X1nlDTsW2OXeUovW4m41bqcXsP7wZgdMfFIUF7XIrsLoL3ACAWa7nuUFF+Tevk147pjxj70n/ki65NPuBS4Ma3koZ0iDK7sNy6PsD37De3BOS+t/knNcJwPvMrN0YEyZSX3apdFcb/ZeVIkkPu9e5sm2y/+gKCWw+fa9kBZTsyeK0uq/KWWN90VidpXPHc/gpQ4rLrKrdPYzlhaFPAofttT7h2spGwbH3/WAUdo80bOb8WRHS+BanOmQC8pl6CNHcNgcHKIwOGY44pv6bjpdBVhuokBacqtJ4WYT8zjyFkdxoVOgFIIkjSftP7L5zy/GQygPshMjr05Hv8p5dtqF+TYMq36VE5jIJp91Xw/d/2220Jbq82RdrHTOo2uslhUusj/zOGNPjfJuK65J4VEH8lgJdY4dk7A30emInmlaHC/GVZR4HUWwDlbGJKG0wA35YnS1wV3cKOexXm7SrN1WYPx+MyAsSSiWjVtZYghsoIJPeNfs8j9RYE2ld6X9om6r2jWRiNT3dy1Gv5l6K0jaCsaWT6R3hiVMYBBJWCsH2y0Uzc19865At1a+FlSVLXSkOloFj61JQU9xAwvPYMNXiq+3bC+GZaziSHvuOLuRzAG75OU7te04x3NCi/L+LD5OPSNDHalat/dfP692uMIEyR7wxQNSSQMwyC3XrDu0k9K2TX8e7GI0IDRcK3azZuyia41ZqMb9wN01AFqf2z3T3yl3UdyBlwNRLRJZzGdmH4G6THWN2ueSK4H1owIXqTJpCAgi4A8fIa8QaJ4YVJZbn98OGhcYn538RKGODfSecSoEpTGBb+0kO9SbgXQvNBTrvBUsVKXm4UfLNzLkH9kTx5edGt4n8LCkvdrpJcA0sMCl/1JtQwnRtKut2kUY5UFQ8B6eeMF+oyXJWiqMKGqiJGGdLftGXmAoNZ5kOD/V0Pfi3ddU/dGpJ5kyKnyGohfPcYwWS54mQ7z0av3N/Ytpvzff7pSfvRFzZ+Jy8UlvuK9271IDz+HaBMQbunc/BAHFkNnO3bvOVLQCJu/f6JtB+w3Lk9W3ROlCN7NiFfllzoaGrDOpguqQL7Mn4tNf3QyIJtm2DNDbPa3eEgtfhkcKI983dR0uW0I1uCvZRINTgHnMhOHQfMgB60V3yNKzftzYnhg6IEamOp0j5i6o2PMI4s0N32XKNlpuhPUjI031ZnT1IgUEDz5q0+Uu3mpF4tQ0ogOU6tm2euNQ9cqBxiDGnMGOpcucMbsp2Ce49QZdaV5zeX7/j4RyeAR2QTCCEuz2usuva3JknpDnGDb2kiaJL/M8Yd5yBEQom3IhGZqnFTtecByT6cOGr377nLJOXPRGMIcPrzS9C8paGhKuNes5zgeMePM4UrZxp8btsIrM2dkOpRymnJo4IdxH6sq6zypXklcDJVCcQq0FXg2aC8NAqPBP2DgJR4nbFNMuTBHouUV0XGkHctlSaMrj7Kj3+FtsaTjrWuL3ir9hcib7FMjUKd8+ASUqtKudEV0ZBAE+JXW1j+hTxHoDx99hwg1drc3npRXDBGwinnUj2JDPWIWwPacse6LjMpzxBdpi/H5PoEb8mSlBdFcxGkD0Wr80DNZuuPJpYqt07C3b0eioTkCWoXsd490OT+OSrhsFtXm4TJTpKn/3IeCsd6z25cxMFxpf/dA69QKfJDeURlDYhRtRz0RuKEbUwULdDZg7+qYFK9681OvMucI+CvIo9d76YqceA4m26GEZy91qrmWztrc3Vr4SVT65iHKu0AvWLC/NVczn4+ttWD5TzxbAGcrECnQ1vq6Zt8ojY1Zb4inU850RSPAf66eN+i3adVqlOfpd8PE4jmuBYfp69Of/hJatWqLaUMhTXGCLpjcG9N5GJ9EGm65lVyVWrzbgppjgqQaBxxuiBspGntJMEUIXj2T4tEw6bPE6SgdUiVFV/DqQ2U14b5yL5cMPatSBNK6To8wpQbPD8lci7tEZ0d0PnNxxp/r6kbLfvWHj/BCegxucAsZCNcalzyL1St+sbuda4vpRbRhI5fPolzhGeA+aFjM03bZanMVQWrPMoVif6pcNIh2S+KTYWuB61NRMKvlzoLvfcGjF7KyEqGicFSrxya/KQRypfa5OWbGu4EAj0d1tuDLi8uqDLiHghShU0CbPjp9HMbopx5YcJOxc8Gh0wprt9TeTkTZ3jp7RIEbtLPIHVqiZDKZqmTjAwpu1gUjG76r8fHrd4fV0SgaCeShXucT3cPHFGUXj1GcYQlOt9o9zXAgxRKEEI4sSrr65xbpghf75sJKO+W+rsdH+CBQQo3NfVJhdSmzypEHU587GqSU9XrlhfNmcSutRLNYLhhYTrzHrraFF4tw2N6JHhRgeYU0QefNWiWXIeF4CtGWLNt4WwhTtQS98+aeMbKhVS1GiRwxFAeYIeoDA+6VV0hn7e/fEZ7u7pTG7sGGUngwJLnxo3ZVBxoDKt30qnwhK05VTqNf5KhUsxHP1FTJhMuET9HuNvtva9MPGEdCi9cny6VDhfmAe1tD47PPDlABhaj248E5iigo0+Qz/vdWxpXA3xw2Z9KWvR24/GHLzwiLnOWv4a3kNZZwqif3QOMaV5dCpeSjy3OK4nTwju2eyoALpbw+SjWxcwFVBOrwIwMrS50o9M9W1zcan4lGIHMD/Tqalx0dJr5jqkyQW4x3CWvm9IXDNs4Hhlwjjxlq8EpmYZ7bOF04VctUNyN7oXX8ZaFrnj/oGI/tOL/U2Kv6Gp7ZJUn+DzWE0/CsEGfgdv1GEdvrZnTbPATTM38G1NXD04lqkxBBVvMEjvVGlZ2Yeu2J78fDl3Doj4fBCst+pmrineSjZFdhoN6D9VmIuHF4mz8O0rJp+dWWvTmsYPpub0XyQIzl9X8AgUVmJjV71Gn82agQDH+Ml1saKhDiwNp/hlr2T0jwzG5EhEZ5ITtwtfQzttD3FdbFnPBl17LbPPt4mgRxMsa7ox9TyWWfo6nEIu1N9kxnXIePw3AyGpi7bYCOLQn5f/sIEipLonaEkuG5DuYcI3vGROt2bl4/J7PEAlcTwSZtyTvme8tamAlKS+SJnXHXFOf6PwshFK+RTxt5EyqxwbG4GVuqktU01SrJ1d+TEp5Lt7ckCUQ+DhApqTsUfgaKZmB17YuKZp73GoZUrBNhUYfJlyyZYvYxAUD6N/adcaDHkJGUrP9NwbllHIhh59E6ZEcfoaNjnDdXLq0bQ9mSPMUYebh1szqipUkYL1p+pt7BG5S0z2wKRrAWBuUcLmJU96+CVe6fXuY1Mv2kn7VKp7WJPfB8bBYQKLwrXPCW6Mp+OJmdtmWosULdaSxrST1n1fUqX9lVA3SFQxpIYjYGmpDw2yyhTbGeWLxQBTD0cZnqJCRrAev+m6P1UyQRqT+OEQtGwD2yJ5lwqAzGa1ur0+EaDFPzmbD7DtbkJQFpVkgDnCztNNvWN1ljTCs3PyAcTRXMIm288fSbOmUnIjSR17dH1cRdUGudhaXHbieznhKTYvLUMZjKX5ql2wUSvT376g0DsbvDYoQntfvP6zd6ZYgtgLxIcRXzOG6ZI54WdAPmzEDwtE3LR+518/cl8VA/yINETGbbd56sL7eiCSVqIMC8BlK//tyfzcZqhJ8AlTCdgw+aYYLOzFhBKbkdFgyrVoNdd9LE7a7ANEVUb/KO68u6wNBuL6teMuKUhorA2px/Td3XXjqzG+dxpotnEQW8xQ+C90vXkjHgfwS/ghy9xinfsj6VY5P6pq9M7DtQ6fncZbNffOycanYhTn6sn8UUufp39F69/4AUmJuoo0rqaH12aR4ZgWDQV+XSrVP2oyxTH9pSrKV/xTETelUtBbI2uBnXZy4JfahiUjYxu/phX3SAENQoMrbRn9Ic/O5larHjZIO3+4eHrNrkc1feNdpAtLeSId4RlhHCzF2W2CuhJeFK0ycTNJpsiIaOLcwlbSAxRZQLy42AxSqiF58agPdcF43BQEUYgqimnaq0NfAAhNQmH8IHqREgpL5Fb7Y+M/VGOxNhYm3yFnA+/gciePzyp2FA0yf3EHjDBIOonwetqllzbAAaSuHR+yq6xA7snyXMNoeka12PfTb/v8XTOpr6Fdi3d+Z8YFC6nVvqqIkN1gAJmvaEzhdpF05r9TpSiO0OxN1ytdGRQe3oLc5PQ/owW+6QSMlJEhuOXsXpXEClFEuQkRY8OQSClJwUSy7ggIIv9WzLWJ499rFurtm4yYZcl5G1dglYc325+iVNKw5zdm4piN1zqwThacinXMnXL4cS+8g2Wp9Un4hA46X+F5M7DgGQlv4oV8F/xOQ8LDS4FHnWAwzKKxQwRNKLccZknPxQMQzp0TJaRSQYMe1iyZtyJ6N/hK+TDOmFSxnsdG6lZHypTUOBFFFZUkyLefwbMeiqp8sG1gvDUycsACfCjZ74wLk2OCmjoKOR64JwitAfv/t2mNwYW6BO09rYkz+QwsKEZcFCTE4gDl5BzKRtA+xS6PJpmiVF4B7VLqoztYmSexPcBSnd7ZFWYXbFjWpr/GcXk6eHRy8dyGHORCxlLh/cfhsk8oGhqNXsL+lBs4176n3ceTey+g3Iq+5IB+N0na2LsU3mYDRf54faF7gZBLnFfQvB4GZoBQgi6h/HfouA320g7KHgmOBTlwjyzULQQozr1cRGISqifw9Ing/5fdytBfjKfsAiIbDOkoUnx0juuDc+EKrma7jyuIICrWabDjIE9t+PZbzVslLF81fPwavRZQYe0rnvVWxVmc/cW46c7pmv8JQc8VWyIgJsoXkrAhovOMiJB+OkF7SFDYLcTIagVxRk7JhmmoZD0HhTqDSSFFFs5zFcQIjV8bT/JSJFdIdnFn8LyKj4hDlDRGiSewicQvSmw0oOSy9s90Rqzb/+VgnYAf/zRGpNg6t85pKFh8X6ZRXt3Ily6ZOZ5IxpzSOPUIkTV7nRNWJDhXOpqZasTOmXepA9muykyMhh8Wut4p7BnRgOrMMJbdjthA2nAfkODq5mjwWiR4CUHGueyu8+WDqZCfBzr2CMJqH6zbyKIbgf1/soYpI97bkOxMUGMJLMUju1ghCrHFulqFAIBOi3UEe8lgWNCHIimht6QQOCJ/nFWPlyZ9Yr42Mas6/kwxZguESkYDYUtLItpXNRLl0G00IsylI7idnTDJgYk77273Odshzft545uM+8oXv5PVtXgIsMCzLPySyQvLMFDyK0rHUfZ7YAG9sl9o8p/VALLcMkiQCJi1qVhxtjD0Bymk8M+2meP/v0Ypih+NNJJxcvZCg7x2fbv0t30FEG2fhnii84kECOIPGKTBXAST/yMENEjsPP2GHBQARv8dZjosX2ZNHX7/1QOC8EnRb2AVGF40DvVfZqCQbCaBPU+97llqFN5A9JSJppcu1x3MqFlgiB9rRbuuZVEK57VM4nxUlwbFv3C9hglQ+P75HIOsNNXF7K1nCcRmPfgavorF6W6QSQWvJOANwsUxyQZO1Uf5z4EdBkhi9JjoNGZ58xjtDzeqKNxgHsGqLNP2DSIEhmxcEj/HRltRfSQzclmd/M+wDmR5Ar2d7cuO4U27xmRMjznxONhdqrGPqzd3c2TL2DJRKyA4L4u4lefIuNdMzxl1w6Pd5zJRsmmBVnphmlt+PMTE0y/nszko4vajPgIA0SZIeVmfWNj3A6zEuiMGm60ieHgsbPi/EHLuck9fr9tSc8h5AGSFddv/NcQ1UqnF8whBegxnC1OFU8z4fu0lgsizLx+HDUS5CE1vHcUqiZ6Jhr4SCJGodsEMhWOPgKNdK+ciA81J4eg+iV8rb8+GUGIqd93nzHOi+OJcWIYMYMe9JYmgk44qJbuDpXSQvWHhWE5vKp236Us/N9N+o38O+Tc0c/Ap0ZrsWklZq8KhFbuH+yWDND53rAUv7OPjwa3K3J6sDXrCmdQif1bZ+v7UHY41rYQfdbc0jknSk16ENG7IilKF2nKKaNaXbF/Tr+lFlmIZGmHW4DFv4ezefjLfF/H8Mtp45bGvwMkgsm6K0tZgd1rC7vhl2fVbmrjbiJsQKQPAQametdNvlqcHHmPBji4QDQOFS2fpGjDcGcbAVe+DXcvjydn74us2Pitb9g3O+l/4ZXC/KYmSd1xmcHu8c0qfj6HYvX3Ghmzw81o3RQGRyBtvp4bo279Dew5Pu6bT0F0eLIVRKI3BXChUJ6+KgCg8QOpQ5vnaGagF1hetcDEiplDVxhoqMR1q5a5YO+Tad1Vv+lKt89IiYOErNRLXGUgpkC3tu8ui0xca5V4CPyzbxaIlPrXycUozpzo7eFzWad7px2glUZ7/77QLdLPvcaTgqH8Ye5gr93YzfgOJa0Pf5IeuF3PuCZp230MX5VUpbjC3uu1l7ge3icBJFiyEAbH3jN9JRGUb40Xj9n5DjoG1cX3d5SSQ2DwAYriKKFa5is1iXQGJ0tuXKsarAIz4vwKJG7LFcD4f985fSCqFot6Z9tM0yayfYjMYs/YCaJPDOKpcHy3vR2zUPoAmdR1ikSaGlM8Kf3vgdPJ8mPZXaI10dETwDGYzDOiSBq+Nado6RAmHwKwcqyu4o1nFWGdalee4/E8vIzZyFzCV9I9imccW1c8LapXOjuC7mc9NZJq4tbBVBpFtcS6zZrRILYFCVazkj+wt8nmkSHuVey/NYwz1P838TDI2y3tcJVE4aPTX008OpkhOwMaHjkJ8/PnxjtCK+ZKGTbYSLpe7/5D+haWfXv+yeOh6B3h/4nhrV7hpqmhrQR2ZQbm6blBz/XiCj7MJdoBFmsjqtTudqtS5I9S5k2MHeOW3uDCg/niiIXp0gYN0NznxNGUeVDBRkFtf61DpjGCTmButj7gWxxER/JiqVSp8du16gY1iT2nR6q0DIJaP8PKRcYyQcLwtDDwHky3kqlh7hqbOwF0vwc38V36MSrtDv057rLTdGoCbGgSWKTFcPZl65gezh1BNDMtHhTavbpGMlhP2f3BOirhzsB77YlinGx1OhdqRfNIXKS4R27tMgz+HLVIRKbMj/BVB8/ZhzutYf53Aw8PsXE5gE/w8XUWhZQyxWcgvFilkzsiK8bP4mXyi95baroKc1yPs4TZxmVIPqIApNqYGO2BXMRYwLi1ixmGFBpPEg5dbEBErkkUGgon5LqN9sxC/L/HxwMQbm2siclzA4KmUUevhAidQ/GXV1CjrsOTkqBWyQYlWnB8vrJbOTGu/qEdDAKzY/8x0pirNSlHk3uBmyCiXVFniXIMUuC6nYXfNXDdamHnHy49gQT90zDZHOGdBfEip26pHMPuJew+8f3b9Xhii6oYbaLwaYWKl4CZuKth4xRF/XV+tVJVqHz4KcoUa8Ve1Afp2dXWqZ+e1ByWjb5SzwrZ/NHD3HMUPRl1ecdZ6r4LujLjuX+pgbhfstDvezmGYGDSq8ANKIN7n8rA+tatFce+Sgr2NqEmnEoCsOTvgB7CIlg+2trCaXEsUCqDp0B17ebK5Va6oABjvJ/e20KDUalyka+tK7sShAArOVPy06JoKpPRwlyYmF34U25pi39hIOozjMUSjp7/XhjKFYXDW4DYGU7hkM1W8taQJKbwHRluCpimGhUqRfUEyLxaD9uy+XfjmmQxsa3aRxIczKb7lErz1N82GA7SJfD/FCnhgW/wJuVTbGB8124XST7xCYZc5jxLGz8g+Wsk6pcDrCuuJFBAGNci0GLsdGJl5AFM703u/jy/wPVt48jO+jxtnpzg68cfsxqqchZr/4z5jSyeVV9XnglizhMXUfsDkiOZZZ2IIKDCytrDYIdarchmJS9QWW+DrsHXiHFkGl0toNsdFogAAhMhAwljFN5Ab/s0gmaSvV3cIEsfu3/hKHuHxe7CY9PeszZ2meqHFTFz7Ird1DHfuguHX3LYaHsYagYzpe3pnhpvT//WQ5akOvnO2SiV0Baj7wfAV1/SfOhycce9OPDaVnianTnOsxEcb2hg/2bZtANibnZRDcg/6y6AiRAopFW+yUYO64DFwClT0VKoKoV+7EJgEe4h1XMjKr8JYq2B2AjGSHP6IAOwu4WQPRU0lE31AD1SFmx5DxJP8+oGV5gPAMKpWmTReCV0oixqixdxm6Zcga1o8pZzTmtA1onadOmg9C+XFvWKHacGHEpOonWFM1grOUf9AX5Gu+bPwmUVlCBrwvWUq5ftiu2Dr1qiuP/FoaUerg9FXs5BJU03IItQ3eKtnkmos33tEJLXs8g3HZs8M1CBIBuHhBd3Mh3Q4osLBuWv0oHCR86YFO3YIGj3i0CZ98wiR5GPq87/pIzYlYA00r/lA9yPSwk7rJqriNLpNJuodRBWqywJ+ZELb5Ut3o1g2P5uozkgLvWW9WfMPW1TySIGYxbyxV82N7m6xpeH720ge1jRuefYovAAwU03PTQMAdeNQxvrurAOqTburJWhUXMdx8EKkQMQpVQgT1yRnOTduqmEL8bEnCwSZILKtL4S36oW2cSVR0StVuOPLq2A97/Urq1ta9jFNXz16RbVb/weexMtmBWbDaNhwLtlZmjV+4Yzw4D3Si02sAUMYrNpIOpTnmp9+VVY8YUp3gyIGLxCPi3Y3dfK0cehybyOyOXi+9CuxFDXXz1/dS1eLq+v393VraphyD4IH706PkXmwjwDjW1cVPurYVpy9iPDWF9UTAXdUkgFQLCYkwHbgLkbRhMvOAwIOqLTD5MLmoPRBMEcI4z53SNfpyfyYp0AsngoEbP07+AuCjvSvKNvFI/GILk6uUtK8xU/xbmb0zNMIfqggL57tDcm3mxyPH5Ylo1yBQ2JswDXqalBkOOUt/24RwVamMclwWEYUmjbOmpVa1Dsztu/yTaIixOERNc6uXWLqqvgbdVXRSF2E4j+r9KMjOjpfJIhK78qxC9cG+wqzx8jx+qHJfGOl1wlB5NbNtOLxfeSoa1R1RIInzlSuo3yQO0FsQbEoTq2zfQGpjYzxrqe0vbDlwkfP+2I4Tfn8ivypbUODqo8cL/O8cKs8Np3xb+JglrtjCnMG7WVZP2l7PvzsMXC7bpaCdRGOSNlp2l3200geSjltJeNgixM5sj8/+F8dnDMOP/c+u7CDTQZaRNvzund8uJ3JxhvrLoDGsbuvSgs5XiEuYK45qwQrw6Fju7moB8rNYkvXCdqv9THLFx0bkgXK5qPi2SYdl+kVvmReErC1X7AKPpNWQBKZdBwZMzgZTDcZr3UBkdDhVcWDx5kC5/iMzcs3suP+RloNQ0VLtNElLT+pmg7qbTCNsimYlaLyvD3LqhQI6aTMV4hpaYKjs7CDYkoxX5QVr2g6sounGlEKz7ZyLa3YiRD1uazHfE1OkOlkEYsj0FftDeakBwdRyFroRFYyEpHqmlAHQVggES6okSTmIHv8nmJry5YqRJLU09LcYOMaGoUUHKAx767kncau/6nOsVwLbWSKJ0TuFzVscbDfgXeireve3KhZsSMAbBjDYDb3BkuQKkiWMuoUJhYVdcsXT7bGoOcG0dcaLUKdOxfN/p2VVprbd1/5Bi8f3cFdPuWy/9NHQUvYmYhuhyQOHbkouP3mg6haJD4BUL5cGQMafb4PEhq7Emnj0110X+jKZ/xwzvKwJwfv9drsqmalfRsWBmrqCj1oPvkAV3kt9P43u+AhGKiNr3J7BajFs/W3ycBt06IywtMSLh2CovFogfmSOFBFp43JGIuEY4mJZyVMbYmZ4uAVDoYEjIQ50laI76patncyLlC+xzKmJk9u9MK0ACMnptYffXtBWeNi5nv4F+XC+HWx0kGHexN9wRs7TsAj0tJJINSj2zktH7R2W/UrC7jV5R1aaxqttfOzQSOOvd6tEZfwCXhmfUpIc5tQrgkTvB2rrXhSmr9Os7tRLPoNTBAMCxn3GqtfT/323gfFks3SgVmjI2n4diUAuHoQHRDzEhBd59KeTz23ans9CQfvCTGw4onoS7TKUkG8b/bdSvYnZ3zDdJutw8heoEJO0WI0tkuIfJSHemHPcwjuZyOCnIXkALLEDAowmnQMXa3LS7RSwT/3+csG0bB0Sh4AQY7SG7n8XuP7/BD8nvsCcFv+TW4ywJSaVyyW3Dfiwj4s0tWLT3Joo1b4nsdTRYF+eWh9ntDCwcAHMt4vLBPmvbA3dv0q/of86pJVbpNcyKltNuwvx92iUtkxEocBOH0wDQ2717ECKit46Ut2XtcvNoapSqmukIh47mrSF8hsv8+/i9mb9V0QIcqDiYpLo9GCsJTibcyIDiEWkr+UKzA5GqNz8mEdaxVVDCCgerFqFNz5nj/gfgMRLt0ABIvd7dvAhFSuGADV88OIHrUy8BG7+bteLkbwoQdVJfBThB3l9QKbtD4iT6xRd605usaGiKBhCNSuIMrTSno0poTdgrlEx4a+0SJK1Yd391B2CLOdao4m3DRXKy99kxdxUr1KA6c7wO4OBlGrleb+cBj8v9kuRiUCplt9E1SViu3ZQjazK4tpNQRr2lnz26y9RF8yg0dBtTam6iH/K/x88HYfD0yYKThHhMxm+UTj+CQFWpQJXylh40faFNXTtUP1NXzieh0/n5iaeTMbAanTHoLlN9YrTSqd+3vbKbemLo+1d3XT7MrjvD6dyvcKD6TG6F/+H8C41X6dvaBgDVDY5vWWaY2h1kiuYD83eYMGw68+DXWg9smvQMRdUxBflxF0WVPWrCEgaihMM9p5eWgaAiXMByAlx2iuZFmV22nqhrmf/5aIMoNqr1feDdDTOH2r6G0veJR/Ff4ckIgBYEJ8IiE815pb2tyodxow/G9B4t693+D5kA8Mw5NYJoqTjw5Cj/2uX1rbbq1bVGEtj2h1EzucIJZ7Jh4BvT93ew0cqu7QFg+O7rqOVxJOLc7bRB5+yATED/HsioTJUMzBw/dHSzRvK98rdwReZXtuyUx56/SToKhvYSeSRJHuk2HoceW+BS9dZ0fkLd+RqMddETJCAbCBaZEGQCJlNh5bKMmzawrghmWeHsnT0QPpZ+D4dmLlO2vWXIzTkNAoRb19PzOAPGoOQXK+j9aM3Q7xgXkazIyAV7xgQ5NNyQxI81q7G3lCvpk/uoh5tVqPLaDzLPoe/hTXcAnPU2FVbKYcebXT/rE8KZUuSysW8K4MQcV4onl6iACPrXGqVBs4XwTDG+QOAL2HOaVAbMoKPWh2z54PS4/+kYEbbJsPvQIxBreyXA884SFr9+hhKKSiu7G0eTEMBjdoujq2vXAktBe0f4jKPfWICrYDnU0EiAcfj8OvmVSfEWadd/9DGv5uLHZ92pLfD7AClQcifXAMLJZKWZPjAf9Zynimd/JzYNbDzfu8efkUsiDX4Et/Fvjq3O4XXGnTfh6yBWO1awkmzrtSVX7R2Zb+AVIAQRqHQkGqdEu3YUQE7z4x6oYlJTKJUobzwUubF09BhS+Fldo8zfkzS+vNdqqOxaRbM1FDBCdNy0P8ZGTg6nYq3PW7ne0Q3yAFnq/zpx9aWNUjNFIVn/OiE++uJ6ZjCeFNvKspmC+S2sMhWe2VwJlbPt9t2bMuFlEOc8iYp/CF2iilk6HMb8BRHdMvVKOGhip4nSJKpzgnMwxYB2mNR9hsPrTUFLYJ87afb9EF2B5UWsCf/unUdtiopb53hOFQZC26TEcm2jELBsjAlKVhgT+jujnwfogKL/x/Je7Qj6kcUxd2F134Phlf9tpv0laNnzjHgp1mqsFTVYs+/fk94hNuEXSud0x2104YiBBTWXxp8u0diV5/1hRysoKlKOyH2kd87UiOoY+pivAD/xgx8y3UnuvuBSZUUSzyB3qSR4LWA4ez+TwpvlL6X0ds2HS6VUOQe3DjlnUuzbVmN0+Q4FRzHrsvxM27gjs8+B6Y6VW5e3dn1WkumcrOZqjeiUzDz7joSikOaR+4Gh7UUqPb5QwTUiGvF/FJ9IYNQfYnaaIJZnA+zs4WiSyAtquTdtXSDtMQ7mVEduFCi5KpdvZC5C1FDKvFn1IbwE8147LMdXG/egGlj3QzAB5EI9aaYcXKrvghJuPq3Ujjhn0+sjqxXTcbsvnhPIWtIpDLbF4l9vCA/StRneuL9hL/rmLt8uQL3XxdqfAFmckYoxjSgT+PKSuIaNN88vjbhWYXxZq1HX1NiyB7F5L7+4X8XO3qA9hHDX1kYKDU3Lj5B0TXRUiqZdLWgA870xI+Q/CwYC4IWc+a4RO+AWMwrBhGeoGbXpum2l+uFBiiU9SpyGBmAsQ5+VmuxXWRZPKfXD3HQLt4pZEWIKtoKnjl1Dx5vqaFeIY+ObLiXPn4XVN/41D36iLAb1g7MyesQ1mg31hsjWvENg7wY2Jta0S5oaLkdAaTmYzAtr2xNlCVrEnlLnAFxcMTV8yTCtKA5w3yM7NZ2zlrvrDROrbud8TAxZYxdCAbvL9KT4/3/dPST/ESm8nW89qb30A5WfyFhvYiPqXMfI7oct0aKVuwsRmGUxqwpoy7BBPKVzs1qfEa/Tl199tmHFMqis8sZLY022RDEHhhM4zphKK6vGt2NV45tMNkHynpS+WO+qObgOtEQkfauwIhuV7yXMmgf/rzYFXp1+haVMehlPN5CNXDjdkBY8pBpL0CZ6jaMxNBfDoADZJHDFq1NGSDs4Je631To8YaaBtWaI0iMFVPMIw8pq8Dw0ywzLQo7mk/aC+XZ3C+JdJjVFLBv98ZiGFL+oUxlVhXBlMIlyTLYkO8XrYqneTnS7PxfVIpMX6+U1fRTrlxb8LMWz8r+WoCVAAEa4aaWMC3CMu+lhtfzppjWfsaELtgb4YedYq5qwUaMIIgtXpLbtHl4LCF3RkRwKWRoKmy5cv33skoe7m8lw3/WFJ4f1yW0BNl9Uic7OXCWeFJB45s0lfreTW6zwgMq/Gx778N6YAh+5LVkGMu/ZmP13teOWbatIIpZMSAbZ1X+VkyCylV01u6Nl9r2VeN6+eIrE9mqEkzqgeNOmxq5TMuJg5rfV7m5w8hkY8tEw2cdSW8npQlO92iF9+aSG3N1ZnzEGM7WoLKaWGN6em/jurOR9ZJTgHkBHYInNCo4zovpkstfq/zQgYYYSPUzHjqA6HGZ0ORhQQwpzQ5JbBwBEhmT9y5qe4F7eiPaQXexWmJ19gkNcWNfMnzyTJrjR49ij6FJQ6qq3qBA3sbk5ykyzbp2KI2pBIufDEhjsB+i9q4wdH1PX/8P4UW+Q9td8kBSSoa6v91vf6k8gRNP70E0isX5LpJch1RkAzhWWdBUYYGxjAY6jY8MbPfqX2zHsiBs3ZHquUgThoEGA87zxAvRfoLlZ03tk1DERP7SH3yotPj1wqKeBMh24WD6Z4OGTbYn68XW7n6wKmUETZPMp6PgJqVZKpd1kUe7WEYbVVWDDVQYyKWdGIgYBx/n7L8ozQYvbEWhiA4C8+it69LAjOhiIR+xIXo0nohmRcGN74IS43PYeUNrl1y/q86t1EsmScbr3qrK66R6uXW1nM4uXXde3Ra9Pg/oz7pr+Ak43E6G5GKA+e4msnoH6ElFVHyuk/Hpt5CmfmtL/VoRDwNp0nLsXCCz3hjgNa1ddVov+qPP/t1wyeSDuZ9rBMHAgnHfuYgaRmHjlmpJlg36EjSddaHmfhCfG7AONTNmdmxNcDvR8+IOFAxKVoKyMZMRkcggj4/hB3XPPj2P5g3wMr4hq9BIy5aZjWfDNCG9thXfMqA36quzjSh0t1DPbUQLSTYYyJgwCe5Y6mvQOs0ce2fkz3wpqeA+CHviVHk9ttapL1JaEEnc2pqIQTJ/v90JiDLSUmLW48zQA5Frj6uINjBfY0vpxpOAMSNQfpDqtvtFWzYDtkpnZNO5ZNlFoq8zyiKE1WM/igiOxM8a5lLDXM38FEymVHuczjXmflmQFKyjoVAs2oYfahkByj20VtjdjK+MS1XnASw14LI5VRUFuJCcSRxLHJ/wbpvpiNi87k/YLJY9NFs7tOLQe6FkzCMF+blVbOS6Gl0G95tb1+aZayM3OxEnqG2cJXLtv9dVFKJmiWyZqbglibOB9YvLzdvDvh0F90h4DmNA4ZJUPn1/8GA2Xr7OkG7nu+xKZ9zzx16fsrD+C8wQFkbE6glzdPo8W3bpKTF+YQeDDwc0Mw4WSQWnr9v9UV5KHQZsq4QTi/5uUSaipHW1bJ8daMxsfrVSkXvljemXTRjQLPEUdSBjfTEa2D5RWGmsj53wMvmgiveO6C6sxuxlF8Fse5mNaTVYjVc74iAHf+/q472UpzBDo6dgSG9f4shjexlhtR8Pn0/c5HRvdZKsr6YI10Do1HsMBG4hN+B8p2fzsi3/XVmSY3+HInTejLPXHuNtABSpCmsL+MYZY9b16LECnXhsUF1Zmgx7ZvoPodKih4N1NDXbXd/xkZkA+KbZzNrSesrhC0Y/iVwKS2wJDQmcavnb1ZwlGDCEWKhQVVHcLj7QmQ0Z/XZ04KuZHjGCy099yq8wkz967Hv9QgUENI9s/dwTPFlCZP5daIEqb3XULGvvyZff3Ettm0MoLgKCSENgv29IKTVzTggSDfJswUgDvcXcdcvuU+2WDxuBvy9MKoqT5GfAfb2qZHN95HLcXQvh9sBv2gKFonxKaDn0zBcbqk2qFYbkGwnnQM2z9ZJ1od+SxccS1/RwdEuFurCYf5CroV8iNvzSjxaj78rue8MJttFditWmjNGVfrc9HXXXXCHC8jVkK4l4EgGosrrsf3AfZ9TWhjKGEnooLfwi7GA69NzJeIEjBB7YdLgQD95BogwQ+mkp1WOQpUhtmtQiKRcUK3r9VbbRzopUXb0y6I+wU1sylM6yRaMHEhtxU/RhdJX2I/wICguveedNTF2RRoiii3m89+HAcKhJ2dTGS2dTzgo5259h/B+kVeWGQEd2DkyOkO2ATtphZLl2ylDkyLM36Fw/s8TXwh9IWVSpSTY4PltEqsJU/k5A043MMvWyH8hB4P2/OXfQnxNVc+7NeIXuQ8x7MpIAMGkbjyGCvsjlbKdvp+XNLSiKPnCrLngCEJfA/3uqMi4OXqkBTFZJ/+XLHMTvzXyR4BDifc30+smTv5b++iA6tYkHuzWa2eIXW40ezIDsHDTO6hZ6D2YqcM71lMqE5Sw6TV/lUU6PFfllqQh1DKBBtPM1ccM0fmnqku9oxXfNJYaiz1K2x03ExX3XBltkrVU1wVben8GBUQ2XNwKlWoAanXKH6mS/CzG462m2Gq1RwwsJO3tUfKX66MNbp45twhpDjuLeSLO7hjycURaS9DXEVs4Xja4llAiTBuYckxhoZarDSsrWqjE7Mgbir8Xh4ZTMVVjJobJ51VUOEkov9tqtT5AKc3kQrJCZX+jzbA2wDVCgxWVOvhbPYvLgsV+mV5MHuF6n4JJrdBEIc2SKvx4qqGgt2hdDdbZF43rxl4RFs0JwQdxJ6yiB/PwGEeddaqreBU+EZkGp3jwPuWkoDDrQQazN5RtbulUjmRP+zzi8YjUG6G6++qjwArPUbC5ATjTLlpiObru4XDACgxIajGxONZjVlUZElyW6JEI9f7G+GNyqPXBCPpKe1kbmQgwhMV8WcuSJLEIoHc55Dn/8v7FEQWAh+KVscAlNPdD+OJCJsKN/Wl3ZvAwo4tUXpqNRB0gvKqKeHMrayvO97UYlAnMgVkUc/lJ4lcFjjl9I4AdqgMSsRkj/ZCvawe+g7zuP0z+xVxTfAXIcvEz+IluFviwf8V88XzW6xMsizbq3EtfHESuRVBEer7evTYqRsXhl/zV6dYvpST+scXFo3ZsUf8DoBNTSbyC4EQCVgGM+k1qSlr8l0keVt9d28bLBoxYtHWxqH1lb/DQW4oovg2vLkT3vPGatBeqI51AaS3VORgzcSuHUw8sFyGdhqyzbojtEY2fJww68HQa6zXJzp95F8mHc2VfXwHBbzR0lcg4t6xMxsLyP8MztkAN747meOjSgFBwVacSz5V8FRMnWgx1ke78q+Ag+hUW+H43QMkuUcOh/n8k867iJOeJwrji6a2yaQj9S2XRqxk61u7cVr4l+A8XaOlXt8HVAf1xCvEcB9wY6Vksv9UXkwVqJ8CUMHvieXjRUmHBPj5xtcY4cH2+E82XPqHLVZcMA9OmPyptCK7c8Xp9aYUxMHKu4+jpnTNiksMmo7/Ek3dEUgw4aR0HELl5LPNYJ+HB+v1WX83fxXn2tOex02D16oaiJ9UxCLX8N1s2G5uGJYknN3Gag8r4FnCd0s6usYD4yarAxoGDOJJUK2yPnF6emUz8Feq6WAvPeuXNQ+IoP6xQd4AwSzxM6FinnNm/dE2nruiX2pTQN/oSK5QyRDeedw5LaFihTDxyNceAhlExRWWtJKSuYG0rWE3Ug4GeSJkZ4rcyetiuPJLf9eKr+HWWGI1YV35Zu6B0133GM2y5qJ3/laTTN7ox/ShYVmTSl6j8HpIm8nF8hnEfnsdtn7uJt0D+B6F7V31/83lTPUPjB+KcAHWZzOmxGnZ0IjGeXQvKprTGNjwtnuEOE8wSly5WRocYVL/in20zz64zrcFjSbIcCqrXy2oMQ+fE6n3R2GSx6GGW1kvRTYqGOzVOGKiBtnZN/hqjgTvL2JJHZqojyZNWdo8cdpMriFb4LSRX/v07x+MdLVoQBOCHORvgQWtShb12satbzQ/mLEwrjRMMIzp3DR1yMsiJGAr9Yh31badEILVQtUxbgf1LF+IcTLWzZL3GpVk7ZfY3irACmdiAAA07ta4ZvUofj9qGE+Q54NNFOp/vVErGSBI5dIQuRdXtg51qxTuXuKWrRLCumfUfHgbug4T225qwCqU6ni6BDaazpqThtTjVNnuPYaQDmtW6+rZRrdH+ZH2wqbGD89FYeso+UOtahpt9jOXB4x7GCHwa9KBKMEHwLbv1Hnwn/CkIMSNOc1tfQYlYvHJXh3XatjaFMlFQFovE63FZW9D2G6x+jHbfDLHgl0BBg9oNMaHGr/T91JM0gJjfTC/c/xMiw1TELYNdXITw5d/qx6lTXp+OcB4Sh3foEF59rYbHZEs13FV3xIlA4jfFjnm2t5WSw2KBJA0FgSDm4TC/3dmKOe+KzS/nQ1CL4UB2TPzdC1dt45YnPu/h5hX1qEq7S2Lu5eZVIHqWMxRQJ9XWED9dF68oQOEQTG7X75SYAnRmImrx8grQD4QX0VKQpnifUcCUTitDNLW3x0MIAiY1h30G79w7wFyVKLPwxq842rXIn/mjv+kxIQZ0zwJ/2GkII2kJO95XQm4QCYoYqK4kVompBH32GwZ7P87TULtu6C4BMHHwfXutGkhYXlStu9JCddPhbZ2pdsVg30oIX8Osc64mq7i8Lpd12YAwAjWtDTzF76Dsq3BH35PhqusGt2SPoJVMUEXV4+8b16W7ach/zNqFP9nWAfHVFrSv7YRHtYI7SySR0cWnSSzLszd9qSG2tPPdyHrZScLH9+JkqYf9ah++PfDdrk+MvsaWauz32JNErzhwGhnrzWCsIrX97dEfq/Il/xm9or3VbuZnhPftaaWoLJBumigYMboRxtFQZzWf0eadbcb3BvT0yzAITdeUuFaKG1P5QHs1MJbDjRvLs0+om3Y6lYLI9J5/qCLahpVBpzZQZfsfdh0hpYaJT5fCADAAqMH9aYNWKFPSsN0342Bhxf4lmt5NxsWys3Q+xbPK3jwqH8sYhxfEHp4QEYQ5tMwD038QNQrXA6dz/0o9MC+vNTyaqHCq04b8FZmByMdEOloIqS73giyHNPQ32yOCfLQ+B8GF6C1EhxDq/yTerZdz7im7WWav4KagcIypYv71XWpTSZ7Kq8XKwcCfa8NNJjPSguVPbwd5DJfglf2WI5nudasG24lPBP1Luc7dGVVamyl7FGBBRfCMwchC3SnUFGp5/SQT8uBuLjX2tMVNbA+Hf+ZhARyy/tSHRik2OsyPADN+LU8jVg1ZCUg6/qbF59/26+APpmEEGuMBcRMU+rrhDZmkV1WjUjbfcVDvjjxneBZ2Q16sJJsahkH1YQbqkgN02hljOoPMlfmNF/P92IzWLSaXKP7hxfHU92JC34vkbTYNfWQG3gjoHpqe5OeiJyFFFQNgH7YaVuuJZUvzB/XJ1XymiKun9bFQEBU9Ae3sdO15R1djaHaRWCIj7JVznpYaMu5DjdpDyU7hXoQW6k5yfz+/HiYnRBzUNlslwdQ9iAXe8DKGVqDM8iG97rlYFguChMdvza4sbZbWz3RF8qmb7RpFnFc57eQZRO7VW1+k8yrUsJyn1zc9p/wOddk9rbu/cEAFGoPKFS+8rHPoQv9QdrxuxBEKCCUGvnedmXXLylFpiWL8KdryrA5Zz7tiPEhcYBEw70Cca36iubeSRSDxMZ8BxGM60pIguryrTebErgYFBncklftg+iyh7Yv4NaniW37TuoDNAhWw/qAOKgiXFJ5gHWVefK4xTZo0ozZ/RcUNrjVHzn6HVyO9laH9qWcBqT1e8EQJxIb5ovF+VlgqvoQ/fnYMPz48Pgatl0EYY7FkRQvfyNEHLGoi7arAzFJ6BUZTFcEpMfI+6EhlZz/ajsjriW46ONdx6t15hR9h2idMNQe18tEXxUznmb7YT9+NxjXGKFg0ynJ4CPzwNj+n17uevKwcj7ktOUzg2aux8paQ4OnHdCNOy+XoETIXvcPAvQFK5pJsxg7Zi5Svd8fqWMZEFP7eLHnwxAu2bRMQuVOj52xjnVUIv4auznLF/AK6Ar3VvVd3FI2lQunCl0zSXQxHb+Smh6Ne3+ZKhVs3yma+Io3zbcelvCN+C4I7vOFsCxuMmXfinyDw+PI4+6TBJUJ75Hkfm4TLfESff9sGkDOJ44B8XutbCqlsuB7pyZQpmiDY81RxxMAelZBryn2CKL6VVievXoxNNE3NREMoqA+q/XfwY/zMWCuNNHupUxs5PtB9K/zyQVkYwV4dEGEAf8C5FXp9VW2eWD508iSxifxMpAGPHd5iayf99I1WSCpqyuutkkoDhYtV7sU4HoHdazNpwTHT4p9oljJo0oml+YVQopktl5CfyQGyr6p6bZRKF8/wJH/qS4xjfLvT3oG0teYkEOYHG3x1E6kKDBCnExEFxxlKyq2WytJpRPdr9U/pY3v4uj5zjWfGVU5oMXdZ6B/O6uwSSzL24jgUD0WxZnytgcJ/81mGFi64rj6NSn0owIXfpl/wIVsHGBf+Ah8QXY/0F08ZH1xrnH5cvr7LhG8ggbK/Go3PGVB6PrP0KiYewUEnkvs4GyNTiO6oF5ZTw6BDNAGHdxCLLplHKkCoDlGDNEdJqeCK1XwIebHW/qD4dOPJHRX4vpWxoqFbBy3rFRvgKzGFteeHBoZ5l56u/43rxs/KN5NIzTK1xrNqnkj3Vfd+QPXYji4klFnm/zLAYN5+jZButrtFPqNDEQd0kaLm+a4cKmTWxqgBHI3Ti7TDD9U4cWRZGdcP2BCt/7v7n0AtnfrL+MPwNJZEcC/NISzwas0qDds3IVWg6MaABSVJcjImSOX47WEbpwiLpoDCZpP3LnpEh6t3pcPasZvwtD4UZogrK+E50oyjHPO13y+1OZflrfY38msk6uTa0/dH7ZjnF+Gq2q2qoQVl1kkFOJVNgCNnY2uxAhSUS5DPzArCnhyVoExDtuOzMya3lYXeAjPGxQAO4uiYyFGPlhMGVFHx1e/gd5UUgy2w+ghjDaqPFcTRSploZY0hOOE7WYYjcUXVuQZPyn+zdsUDF4p6E7Jwx8dHMotBtn2TMyKT9WxtgrCIxCWK1eKI9cJ21FRgTR/AF8+mJ4jvp71Xe4nSWT4fEx6maxkwKHBgnRbnrRvTTSwHfp2plfFyCDAFnukhgWVGujBHL5iDqSnE4KxEtyyo3Z2xONkko5wJsWeF1daGXRneYjKxoS7oAAWUBbtlHjr0JvQnK7kQC0mwO8OzjlpXP271gQ3m6W0GOpFBh3jk1GTJ1Dbu/qu2j9aIN62qapitJCyVrP+lXUiRr6iM9IDwAVstofdPLvNt4Q9TKHIJ7tnar3L/nM1Ekv4WmlwVtbjwC3dFqMxAqFe32dpQbNz/v9pz19zwoTgmRswQKntdHTOYAOLFUY9kHzu7IMgLlLPipRIZVc0cOn6nLXMJ99spm/0WwFDN3RArtQKmFEHS+36klLpZj2QEJUP1MEtvVSx1dM8UcsURpo43B+iRLkpyHE3GpQiNwERgYqgg7b1VW5Ev5KRoF4vgp342wClKg7y8YlrNqGFm7VYgc5SgrQgrKR0BZgYjG1a0cQRPs6I0YoIsAsUlDZKpUGvQJDCos5NpT5PfyQ+dd3/VdGcVnPyheh/Vl7KhLalG3i5szd4VxmxEcq8WXOYWompWUr7Rbk2bYQiKYcrEacetBi71otzklIz1ovnydbtumEhGOPJItOIT+ANpxhR2Qc/nCtD+a82h5pgHWnRIr5Vtzs/LAUFOKVLSt2keSw96o+zsiLT7fkZT0Dfe7nsm+KGxtpWQ5CbV12Tua2dFuT1speyllo57YPVaViVZAgcCtRmKJik1Cs2QRTcp3m6wQBY2COmDniTjlTC35auFeyQ1KA0dnzj9nesf/6+5ks0CqyVmEOgHDRXL7wRUzyIVPxs3N4dJkMbNUO5UV0bFUER19yP7BKxyEtrP6VDXlEe7gn/HG/+A9SOegvTYCTD1IgrEUc1XFehCk0JWzlSLxyVM3ydZM6yleMry8/qeX9iyrjg+PgNorunIyO3J0aetAWYy0IRkU9/G58Oyo0ybPb3QuC7lNblvtiGgGNT1vTm9O4p8D+2smYTiC302eOqFLK9Hlg11QMwH1HEDoyifG/qZ3RKAEKK4XMfxDipnAtSOLzsXwybVHPb/CgpTwz2xrL/SRfYF0wHUUUJcyRgEUy2QqqHjRpBOB2Pkvtj8lg1KUMjtrbtSDm+vzNrEb8q6ndwudhYdhD19AEaGSH7TbKQejgikSqwuTcrYXM/Wd8mlgYUqbRPRwBkxVC8oZcvazqIQ6QXfr9mynzNINXtQwO5IknmtKkBzb7AL4De/YBZf8YVl5D9YaPl4WYVcvaCcIXns3ncyyptf7ukMorBoqJ4610DRqJM+V413JFHHCE+uIBA3SYeAiLEVHdT6+lPnNWgZwh04CQucvhlEyxbrD6YwJTsAzASNVqDdLCcy82m/S+9CH4n3Kwsxxa671GpyJ56PkETiDcLrJf+pqoBKljSi3p2Bq22Z4ZOkj0nPjXwJFQwKAEOjm47/SuW5xSnh7IQFhh/P690XEOOT38xrSUFmRwma/AeRtXZo2VFT9GJIiTMmtdY2nSZMLG9h+nXLCy/VrXPnejGPwle+dI2hWmnUv5QQK5JR1PkQQf91sDJh/ay5eJRyXqBmIQneXzHulFYwOqaOzJBkKBM+aj8zF5NzA6xHbAfzW7B1KeW1nJPduQQ8XV6DRMmQ3J46XqcggLYwzEVm7mWFiBtQ5nVvwxh9sV60o+O8rJpVd10jXFdW0KVYNPXzCa11fxjVXGeC+0GnDlOQuRt8NpWTXG1/K5D+VLIIiZiy9NpwbyeGjEfFA0OWUub4uRyoeylrEg2b9qOFipHfFmHVPZ/g+W817bgTd7+mubIDZiQepTb+fgT8stUxh8pl1Nf7eHKHp6udPpiDLX97JoALb7IbyFnZA1QttEPgoYTWV3kztrRPyYTkJjDJAZIbs0SgH8jP7xcXk+1BMr79aQQazEozxN/5BVSoo7cJUo6WmMKodmCP6dOI6cY/LiJqmsMdQD86/A6XjwPpsNd86koTiZTBb+zDKeb47HgNlAPZlVcRX4MA+0G8wyd+afnFkAqmyCtZg+5el0QgNoCCS278/SY2KS45XqGgm57Axv0vjI/FDhoioAeA9z0ZQ5fCZd4wSzyrbIUD2B2K080Z1peVEJqBwBb7Xu185EhKcHm9RjJehj9jkFf0l7Y2YULJ9XRK3BkcNpEZLCtFb/TolT1b8HyyC4GI1YEv4jH8/4YazA6+sm/m5h8/IuK79BDil1Pl4GnCdry5xomCq4BQqxj8TeVLpY/4dnO8wFad/V2Eph5oh+ERP4nfmWNnHhKl0mNJLAPSuf6+0dOgxznNjpMKNn8AeDLu/g7RH3oLqhLQejM5RX296QSMXBeCVeVyEqTsgmQCIFWpu3nr9TxpzSQIGR0pxN6msuQ6FVs7iGfVrS7d/9EvZI1c4z2JYPShLNs0/nczgTmgaLLtv3/8MeN1zOuqIa4vSGpUqf1DSWQh1KkUSdPmC0Dqz8oD5j8fVQvzRBMJ8K19kHmTtf+K+yBDFliZe76WyPGLTonUGKwnylrzM2QQLq5/0UZ7l39ImzmZjl9xHqp0DHekD6yShg/DHU42Z+yQ5vx83yrNvjI9ggvEPEUtTHl9e6fEZrwoHQp4nm+3DLBiM1KzooLlB7MMiMG2HLMk/aXja7UL0XYc+OCUdu9v8m13iiuOLP6xVf2MP3Agn4kjO+mPYNLlKBIZj4/U9ZgDa+SDj+0qhC/SnGJrsdSJWUDpAmJWXLlauYPbLGyrmWui6zylTphqySZEu0EQ1OVm4nrL9++VkaOD9DHlm+KnKfczjIvauHaJhTzJVtMN5wzlLJBEJ6RMuIdISy6TedQEje8wJNIIsW04NuWHh9mAACSOqhOduJxVrrx3MSBr6GheZULb/H6woYLsCL8IrDBT1py+qsyQrlgkNeK6iWWWJbi+nF2obxFA9zsBEwq0tJW2yOH9WG/0M/lURd+5/65uSe/qQYJc9lJ2nZXc2pCrE+/+p11GHe7QENcPp2Eh78gf37WrCvTlHjVHjaRNlDpQOyIT1k/zzdvMLbBAZlTv/he8omsObgpvWX1BYYmkDpcEtYZQpspX3kX00UAmwNj6EqIUYg0FtRZM9N7jbxle1OycIbmWoh7zRGaOPYapr6y5tY1xDCxdGg3NdIS7AYe+QdpSb/JUdk9kuRy6p3KTw9Bh+a9n5a69S3lCZWng7vHOH9eBpQck1+/2woCnqzUaMB//kIfIgSN2/1ftk/pv3WF8Eit7Ubk9IxZgsko1OR5n3zH9TS4r/2IgfSfo79Iz9JqzRcQsPaJ3nbO0RYmS21IbdXqmFyxiy0H9lqmBl2s5Zps3FMcjHFrxUhrt0ym4FBtCRxJNrDkLz5nYLfvXdG79N4JIUKYdSCK8Sm3xzPfkau3IDGrAi08TRroDzlRSeOa2kWih4KXdEiFCQmBLfwjSyAb/6AqvoU8ObSm/xU1SfAVLWlgLXq13ybBbsX1/6taBBbBXRvOvxa1Tvede6z3kA635uxG9R3uli1o7iMMVG3oZXYlKj4BOBib5zoH8UrRPr2ma9AZ6Usi4VLfNHZ7pZuqARZ0z0aMjtoTq5n9rwm/UdldtVBp38qo71afHK+Hx59fI6KmywIXxxGvLI4WITQnW8FCWrCzJseoQdHvOt9nlfzpDdXe08RO8ooyPUctG5llpJTUfDudgxS3tPu05Y33KzjMHVG3SgC069Ni53z9z5RuYDn0+kADspo6/HoKxx5Qm5zyK3Skh7l8pxVPsRTz2vvpKnHQIguExKgW2SoGWXcGSkOy9iMPBTjN5PsHczsJUhauoUVQ9uH9s5f9x2fwbHu5JNaE1OnvImFBeYGb9qjl+VDeeLURltz1NoZ4Xtm7NYHYgh1PLMilMtDnKceQ0xy0JY5yox5Gl2ScdWHJ2SvWrIUGBW4m2HgpLwXQJMDPRGwtKN9AXdpq+9ZvYdpnXJfHQQjo4AJ3LtDZaWOYuUZ8xFh0cQHqnUoIQfmmUhjjEp5Nvzxk3cSOulcym4D90Aw+nTE2AuhAlKGh18FSjQQjChHqkKwCQHdeAMNObwCjXCJU4M2ANa3xCIDIFMPvvmv8/2NBFDD8CRH7Kub+ij+XD7Fde3xzJxvBFZlJuId8OUGXiNoczZEsCJrIrdbwLj2Ed9ISxWPM8hvJVx8GPmhHRF0m8DmZ9tiU6sP67XPK+mgjxq8tjA08DoqfIoaZjKwir7rNMJ51gXjjIiFGXI+2wh4c5POdZnfV2GqTR7WGUIa8r3SZKB5M1ygy7g0wJXHCR3xTEecvLOPFJAOlzAdDSf1SJEMiIrmEUNRJ4czNuZTf8Mhr6nCeHWvBvMJSsdRly3DjQ9CK2zbqKU6u8GeOSZASWAI6UmS1PVsxMw6jDy5ts/Db5Fmy+mZGIpkSQEtrNVNj4WJztSBxdPwPoUedGm7uZo/N/mJnvT8xPiE5L0tRY6qC6GwqrIUIYMHz49LTCN4y8ctaiYbHHQV7hNKSZKnFOtW3P4eRO5maNUt6V/1qfFEFvPzW5VwDQjxZVmMcpimAFBp9NECE6REG/6CPMzkKWPcLx5oL3IOEjEN06G2ruayE5hSmaVo3iM2ZvW5dTIHWDwWr/rOWMagWligJTSYa0gKlvLzQ88+kcBPXkU7EoohElp3iXW7QXLjNQ883080WyjGS8Kgz4rQnXm2woeJQ5duR1dvls9rV5TKpTnjrOuljbq/lDhvObsMvfmTNJQ+BF780DvDI4emj1ppA2YLVyiZhHRBcM6UulAqdyuCopmDV7SMY97j7jD86uP88FUklSUE1V7fB42r7w3StuFTdkOnGzevOlJplrFgxSpXuzxREz2B5ClwkSujWaf15UKcT+rZmSHRKm+nl4sOi5xBoT3EAoE7xZl0msfDcAZL4ZY/g0HHFQQsm5Ogs+J/j4sWjFj8YI/tHziLgzvPF8P8FHZF88ZhTiHqzrWPgYxpcMKsNM/chob5UDlr2jXkf/vPYjySZLrnsGLquUuxWE/8S5CHiUfvQK7SHqAn4w7HY5D7oWn2WC7pCHYPjT08FJWWEYhd4UmZHY3m2ucjxMAS/phCj20jP6Tu7CmYBcayS6WtGSKdzjAqPpv5HcLaJsoA16Kl7dGCQrBUiDa94utF/awemcDRlcYTe85qqrOf5Dd5eIPM6ovMYgxAsHYF8Yn4aVsw2lS54qKhkNCLnuCRaol+Kajwu1cA65lMLAsaFEYfxwncYDS0Ys9cME84fyr9O01V9eS63e8e3qN1eY6dQ1AgS/4Msj9fICXA3uR6AYzPNTkqxJO1f0eQ+1AQ55gH0D9xaaqQMRAVXUmP35z1yjBn7QK9Swb9sMW+Q/FOFFn+6Vjn633IFQCC0cyhe4Vo8JMUm9ggYSTaX86uSLH2PUhkH/Ep4DoemZRDL0AQWupDUIGF3ZsqaivPyRdZEMl2CstlYHZPxz1Fsu6X2I2z4wW6s2vq4KG7Cy155bf8xmrQ1AzhyXbJTb3k6l1sJP425Afl2BtHfB9r57AxxkKzcGDWyvVUXZho1WIYLFEzherobRq+ihLF+PSzwvP8rm4XeV4Q1i7v9MaXLm0spSd17oJGFCqdbKFuYB740TjwADaUdtrxLICF9YuCCcYEaIBwf5KuuEAqswQK69Lqqn/JG7dVOLSZSMU1VsJqy9iVqRiZbXIN034ZlbTXnntdqMX3TsUJ93OcPJIrTWuHdLoJG0OeZ61NHzyNW5QNTrNIBm4Ce8F+CKjR5rU6JqbGCWgkEbuU7ZhakDqvvv0jW2eI/rJ5Z7ziVuunVT7fe2JU5YVEbYVU3RQ8FV62UFethiSLA+Zxs4syuSHRUwPndG7/ZplV3WQnR9JvfgPNKtXH4XTfITaQhbsD/f8NpseHcO0cFAe3/N1651G78Gw2sWnzq05rOL9w844rxNU/iEMhN46Yuywv0prc37m3u7M8WnQxoLeGWfF+F7FWVIxS6d8jCrbVZkl8ZAtsh+8LeSeQiRn7OD8sWbTFWZoShCoLSHMNOE5P0XSAeR32HKGD3lFesRjb6hzAWYQk8Opt63x0P5iQ4Q98jesZSKxe7xKU/SrmQQ0tYEIBMQLmxfx0qyOoBDkAftATpCwUKeSf3A0dSIfj1fphSuMPZl0pnojeRg3VVJGQ16dLn0LprQDCM+vs7/hUuqf9vkLtx/sEwI0w7hDhY9H1zhghAod4yyBkPAQ4amzd304YsalRNXH12+GO7jzw96HWdTzXoC5pwfjrKhdn+jpetHkHGn8+QfK8ZhP6mkAxR33cJhZrQMtDBQKPZu45xYCNfdpljMEk1XivQsJhktFF9FEBp1fQ37sffVq2ARKmLx58DLt3ztFN6vz6jJVuwTCdOcChLP+nRk6Z9qzqf658PjWG5alQ76qKGbqi2TlWF2E8hEE50bhkGV62tDBWcFkhuXpPXJLgSN+MNGT1HXj/9zLa6PAZS8clqvDIb6i0vVqL/RWsMC1VdV2gA6wsMMN+gJymK3E4iVcRUvaDeg+WeMsyFuI1nvA8RuYMDdLD1JNzY5180hL7cNPzi/oKkyGngguYm3oOlP7l5NotbBwjjHI2936b/NocYWHPOaCata32UKCFx1wy7XEXMJ2Okjo9ih+kZ3FN4InypSHteuSVN37aiNXbWVxGyXfIqHd4DGSNeNKZ88EZ+sR9oLxa2WVeQl28jne6R/pxbrgVoDPgjGOv7ARALUpWiPNVO1jq07YwKgm/pQk2A+Mye9Wm6vcV9PSGIvzgNZrm5omkVaGOG3nxpiL8UASrynGN4PxdBfLyKTU0fPxKCy45QsIUoP+9z0QjYkFgd3DmX64AIPPMQOaC2wR4dg9NVH4CHqDosTmMRFacLGEqfVR1rvOjCrtTkLJ0P7ZHdItPFU07kJxXF6kC/glYdDsy0TUwbAorMSlaw7VI/61MDtsUgnIKGMZJHYjlpUtDmiDlhTAdym/2uRjVUY8rSTRiDEXIPfjnHfnTA0vG1qJObf4ANTnah8WprLw6PbbicbZN7gQhyp60uC93z6iEIoSwIZUGYSUzMD7pyrdpIdCozMOI4Q8izo15iEcixDS1CGT/C+U1N8ZM+j5wvDGYFZfQkXLElZfvVwAMNosLUejW2ZFyI9ZMHyhZNHgl79c6DfAV6mrhopGYSkZ4WDq9nh29mjfaucdBZlVChWq8247fAoqwZbgCLrxFEyfMSZYBKXDHJuKj6ZCmDmiOX1vc61VzdZ/MWRlMKfb89TuerQ/OsMGouz8noeeP6i07ZBLPwEMLGgnKeSxV5VqPN+z0Fs4oJc3uNpRG/S4rdpDCZnUU6NekiFZ5/uy4TeB8teCagAGfrixXPIp51k/hts0c2URKrMBotS8le568IgWOC5cJO0vd6hI244nphYHmtFmiGHnSfyhRdXXc5MnrF7tuODzOB4I5AQlaCnYtEGFLKvs8RxJmekkLHqqiSQ56AZTHPAztF9SPyBNQYbjjxKKaMWoy0RLS2rEvLXPwtIZey0pRro+ozmW2/0JA1v/Dcw2Z/spz1Cds6I9mNs9YsRwhRle8PA1nadaNKK8ul8QVCv3P4xZIuLYnyoI+HNPvcOJPjRdTjGHwhqqLIv6eD6tQcYdU7M6fF1E5SaCDj89MDH+jG/gX+LvN6mABzLlXYC9HJ6g/OxXv/ESd4NEyRDcNx4ezEhY+v7iOyV9v7SBobvZCHBWnZsjYRSHcCdgVdmCroyzO+vLbPEI8NG+xAsLRc8pv87DLncrI+jHKybdRymsymFPqBN00dQ9bnLyuhRJDiZbnw2qhcCw7GHb1qdafDo9UojxQF/oKQIN+K9epQ+OxCb3k+OhvsmsUdggp1tJAD5QowO3DtNkYoEpKc6PIh5jXJvkTgCAOPLnfBgMUGPKI/4NObiOc6b8/VoSHmA72yxWSw176zc65QuuzEaW4ei26pq0gYPP/WfdQ0YzOT1KttsjkXA9B3L0Q0TfTsOJ/i73Snat5useVTylNwgexABraLTGrIB8pnXSBOX8RBRs+gpkN3Il5nKvTbiKIHHFN30E/VthmeRSbLZ2DgvCNsLYfI6Kbdnl6uLLQG9pFIFq6qlogB0gLwqWis17uIClJbw9N/mJq3OaA8wYRWhOX53/b8dgl3hs4nfAaj9QOI3EGV0ww8CYpQaUt3JzJUNkHo4eodlTxei+DV/qlKVhiLWET6flpGGuYwwfVaKswF/fO86GDTNviGqA7UoiGcN1kgy4QnTq/Y5mmDsM+qVtEve8n/t3crbw9cgmYdffkGYV2jXodAOkIwFCL0tXX+Ov5O7sxFAlscXNGPXYCfIzd0YT1H0+pH+s66i3gSNwVKnvDFSj+yENv/kFVl0NGIqjnwtAC7kaIvsJIdaViWNWiy1f5T3UbUbC20xXagMLxePQ6GdFTmB3h/SVhAcB9fadaKr9kHVPrdkWsoQqCUAQ0fb0fnTMSF0Ui0ofznHYDNaZznbyIDr9LFdkCxakhJCcB2PbtYsUv8mInOCZSQ5rw5rdOEwrSAxpYvicOhVBhVUoUuz+YS+z7Jz3/+/Cyl+fbLMPl5RiPq40IfTNaDdQFLT4Eq1Lrfq2QGDZ2BLFgeSZsbFjTp/1OweHsS05mA/el+aljFxfnWTAwNAgrxOBkmJw5tMO9/XHpI8NdwddCW6YvdxMllkDJyID7V9dtWaiZOBt4niiyTWAX8bD8O2TUmt0xRXL5io277HBQolvaISWjQC1juDTt+3iQ6pnJqP9U5yH/apdo860R+4yRpBF5Z0qNtYsQavaGbo8FfXSktrCh+mjhjjUJbumoK4q9WzwnonV8dQ4M1YYaY4dPjajBbqlkWSOgBYN1+b10ZuQx0wQLxT9Gi6/g5Wvw4fb2N+AJplmy6itPFsM7vqIAQfGG0V+YK78WFBU38lC8qMUxKrWaA5RTWis/iDYs1z+X1ZG2CkR4mjiEhzFhr97f9F0/Zor3tPfa2QDs9hBA+Hi20DxFmmhoO7jEN7f1xObpBLnzVFDZTwIBwv0Qphftf9trn2xurWQVt6kgh2/CBtmupyoNXyF4y7J4s45cnzw6Dkxvs3FQW5f7nVLG2UAx2cewnYgW2z2rmeOiE7+8SDGLsxGRAtrw0BUJ26P6NUWZFY75LnSRrZ0hd8N0y1MtAVzPnPeV2PLW0Sd9H2ITWfkea4GwEKcdEEORTukAs9F0pntDSzi79uyBJr03ATh7wcx8r8bbrBVsvVvTdM4d1oLgyUTA8vc6pKS3SUj9ir8kCPJj83a1v1NHjrRHTHuTsZvMIqdTNc3YKWZBUrP9w6qGLOEz8kGzYYqXts8JFCA2EPoqugjngRZp6vH5FuCxTUcKSP30N5q2H308IvdaiELTl9zjT/RgRh4hnkYFE2Xicz4FJTdojK8VXdty6DMhMxbdZv8v3ClJVeDqQ4K+3+L/KUnfncXo6F/wGfClfasq9Zy7ahdeQtDuP8O8fFIEMu92tH5qJI55QaPxZq9eKoAgb7SCJXrhhUJt7lV0KoQshYs2AM2dwZ+vjiUby2UI0HsSZS6qg0eYZHdeBalXzb08/RU1TqtB1FHIGmy57h5c99ycNSA9Z/Xk5uOZXjk9SFXbPWeiBMUIM/gxJeFzbCsUEzcL7EFvfxfwLnmkHPu/A5VxgwanPLGEltSsicJjWr4je/jmfDWCQDXf2h6L7MTOnt5WgodLto55hSD9UmYkkaRzRQLwvfiugG58qkuMjb+SHuC5qHzu8oubUbze06oKD2ExLg59qg0SUsk+ed5P07PWAGU78Y/CGCe/ZKZQappnDZvFTaoNitO6HPLKSh2ChpmAGOCkJeNbi0ljhZVqqv8IExX6b4RPUrVXuAmnQPfV1eMjI51ZZ6hvmorsA4X70r2AZpPzpvsfwUceXPXBXMzgheCsJSy48xA2dNL3VDY6rKQ0cvFtNbZIR1Ii1ARSAwZzH0dHWjADrQMQqXINLDmDfL5pEBts4TwcjBEauaJzmJMDSQUyjX2lC14jS1nkUnIgSJP2BwNZdjjqRdZM4msBd0eJatePn1c8mncd38HXnKJDUNz2NgtoPbfAVN4pukLo6HbKOIJK1CkbkkbKJcAxgF7SE/aeW0wkau9Odm2A8l3NgDVVE2EMTx2J0y2LoYuNPzHyuCBxY9ifp7J/bK90ssr49Zi+82WdfL5y4fWwNIopPoOA7mzSnzIfZKCE9BMybdFXgHqh0Uja4NyssW90tr/YSrBvei7jM4bGaiW4LT8JUqgRGNwCD60/rOab2cdHxEp6QlmXjd8J37kJ/b//00g0+XvbLCxGTpenIIvIQigXKjHkCAksCAwgxoSwHwX8ErUpR2Qj2M4L6mY6wEH33dkp/V+XU77LzfAGj7p0cbyXnRRxYQvtaxokei2OTdc/Zxvw5AOl9+kIm4ItPC4ECmQIIGGusgj0TaKPxUCHzMPCMPBCA4zxHgZQHxKHCdQhCDYsp0az+o8lA1rsWNZKWIhVLBvbXqCuGPUiScmpRM116sYUM2CEccAo0L7GkcTcdJ+eaX+23uB4ukg5FdjZcxUONwd9lpje2ps+irU8m9T5N9iSj7HUF67tJVZZQoNufNj36L/BpPYDMPFC9sn4Qb3tHqcLWp5rehdk2IcSmU85Q2kNF5LrINBovkri89p8/jYl5GtxC0UqXJJE/8ORihhwM9SzpHE4MnLhNdqFBiYCs68yHScvGZw3akznfJdSyKig5DOqf6OvizMuXlm6/YNAbYBmzGLECJ5sCbzcwsPh1RKTWmqW2MNd++FsRc1zKFE6caSt3u0ZGnFXnNFBCFn9xV1cOVUx2QLjkU323e6nyrBiJJPSOsnuKD20Ob+FTPM4gxrwq5BRmhNAy/n6PLgvsR5tdftGSnCNvSXAca75D3l0T3Gi3rEAQO4qvUws828xrU7iDMSJzFDX1d4O/9ACGvyed6DLujpbXPdoi+yoigsx2eqXWQgGkTv+7NR8wkuqKXbyJHXFs/bMdFolTNPrfuxXoba9CKYoT5ylH4I6S+mBa6VExY6y06kHqZGpRWVTn5CjjT+pFBXF5Q1TupSd+MMqrqFdTdSrIyGN9xaHKaiivT8u6rAO8v3wopwOd5mPdB+zOBpuGkLVQdr/wackqH1q0GnjBANAHhtjGjrC/xjZl+di4KRDL+6uURegcXXIPbv8k9GXPImTINYzEJ1PAG2wG/sFh7kjuepcfHwcD1toBtfLyNh4V6VcyXUGHvwguxXLmxQ8qATOj5/2Uyn7ibSJYvt9n6/lXcytwxP/elaTROYunQd9+ovW6x4Z0k+KVtNjg55vQB2RslAtxBYWnX5mSEHAAes9S9d/5SaiMpuyGu3u4jlyI4AEA3yZsx7/j/SYREgtJ0tI8mCIaNSrGB1OnYZrXtArGhQZK9B318uu6lBTj6lvpkrLuQAR4HVJOz7j2IBBAXFTHC/eAUhWQE922L0hZH5Iq6gaEyVOH+fKq9jFAl2hs/7nC9H7s9SPEYcmUA95QwfXXAlZZQ/oi1beW0Eq3SXD+QxAC63rKQx4ZmJeFZBXHRbMUpsz+wa7bUpnYj/8xwbkAF7w9Gwmg/yXy+3fpYcsLZ7OYXIZ8kdHy1qcCxqWFSfqbnnukNJSm7+etUaNGEpo4Mp7paIuSKaajrt+L8DYXd08utmKbHE3Q8u9Spx4bdmzat+t7y7+wr+IZ39fR0y9xEIcsoMf3lyboubta1DrQKP96NoW0bQFHL7NOHlbAyxlbDUltS7ifUnrlD1R/cJ6tZGhJ+nth4LPKIKqfNGeWq/3ma24ExK28KkFr5oegr1H88MrfBXaZG6zzkqhuDzoanP/GHz29TExHezT955QNLmWlq3m3Ml3Oc8saW47Qjfk6f5c8oQ1zwekcyZiV6zYltm7rWbwOw0sV3dZbAQM3MYH/usL1uVVGUKY9MaUU8Sy8Hqy8EkEXeUGEf7Qks9XAII66UHRFUOL7+2TFdHZk553eAXPcXiuvgxNcY2q8DEOlXPR3koa+dF9kbBF0SZ7itvh22Om4crgJEQHRqvfUgdSIa1HdwWrpngruKmWhwjOJolchk/A/5QDNcKjFmoADkVF3zIItptXjJWXpG54FmR6/s+D6udGhyal5Jkawl4HYpRRiAnASa7QE5gdvPsO5cqruxUwAo5eEs689EPu304HP+fTpX6m9KzPwil8Yn3C2wJJCF0lwG9vsi6yN915taJNZ1uzHkTjpqIUeDA998fsirnkMw5BEwVjoiNzE2s0l39V+AUlDX8jkz4Q4isPadAUaKs2tWotmFniTACtRFd5RfcPyF2B/Ee6onIMHRIeRBrMJTSmidrGu7mQawdMjnRwue+HyFoSAOg3VXMSjTdteIsZj5VJZuhev8cPAdsRaZ8CXkaB/4cnyyoFdySmKFKHd4XW88799rFNW02Ne7vundh3/NfZW3ab8fNE6pJ4lYIrbOw6dJ4S/Lb0nkGezQXwggg6fvBjtYvgU/XPxfShUgKSTmtDar2/Lg2pxqaTrMzPR419joIjdSiKkBV3Lwgg9aMvMzu3BvtfN1pkMr1OZK9pt6cFB0EamKiGsdv12bEsg9gN2TaAArnZsGzpcWVYg0KPzX0wQzODFiayCNLVtXY0RFPE16nDpP9O+DIhlKbZzF6kGWkmsRzDss83FKRKZ/WisnaGHxU4VN6yXi/NZuwkVSl/t3NCzwCJN/EayhSQFPOmnP1yTgYLkkZ82MNvopVRoZZoHZ2ohIPyEnX6Ssy72a5WM1r9Vn+RJCufMsR+AGd9bo3MkO6IZd8TAkOkd6NXDIs/uJF3Rn1JoRXdSbBrP/Nt+GvobkFeHz4Jm3XvdVt2gYyi5fWrl14Dr9jj3GvLlCcPpBqlL9TCcUCzX18dqBZC8oNbbXDwB8tHLiuQW/cpjkdtnSD5cCUIFYkG6W9I/JCfsXejEpS/cFFviCPkxxurBZjlP1cYqIZyFPSTLsbcMCG0cGrZEQZiw8HjAeJhN8ZGehcMbHZniA3Lli9J4G9eslXduNxXdPSVMGi+Qvo0wlcsPxB/sTAIN5+qWfh3PEqfI2NsrbRIVgmowSbV1zDCNWLCGqjgSZj5gtoDUXCv9FzPue1ZhcFc7t5xWs1DX5r2z2o+tA4p2y2aHtv6APPAR5Zs9ZlPrrrMlSmuDX/fSsvjDbaQ9T7ZyvZUURV1wSZH4ezFBrdXCY8GBgDHujNqpR6WZO1zMLzeFs7FEy/JI9J+SVDPbdn5gt/tqFk0UwQiqexAHtlCJ27m6VJg9r9UeZ8QrMugvgXz3u3Wh5cEVkfaPx42J1ta5kIUyhgreAojfV+usw3HJqdwR7Els7NiyiYt+ErEI0RkFoQ6D+CxmWv1gknpG26gqr6rZJhmaGbVSIC+g1o251k9VSNhvaq4CgGmgwN/5QH4s2FkD661BLBSp/LHqDf2kZPiBLNMXyPr8RpJOQWFyyr9CeAoDAT5CdJW55wzpcjkWU/22LXwTkLZ3sk/eMF2cQcV473KKkFcgKx14ktLl+Zxo3Uneizzf4+FQu3xFP7aM+vFWZT0PkeJNthWC4y5mmWWlHAJ3ULb5veDl6CGIaP8L3M0CTgV3RGU3XtI4IVZiUsXNe9ijONhnMQ+0uSe6f4vLf/XVdTs0u/Ze6ZIhwhy2FkxGsdffnoTAY2zRhHJKLxcHnS3sT8r+3jYBtneqTeDlyt3SJBJN7ZOQcGcBcnOATZpaR7TilOaSN+BHkHiRuvyQOlBjNi6nBqdsjQhiVCOFOVWZU8NHiBOAemDAry3L9Ti3AJlMfKhwOlVvj2N2JhsbGez+EcaMJcyQV/GbmW4T3D1ojKGjFs4BVx7Zm8Z4nxPEKGz/a7p8itkxbVLA1hRHAlv2YiEdlQuJl5iR+h0T9QZt7zuQIr0RszerWf0tEbs++TlCHqmFVfKeHkJ2G3gG55EBmtIM+VUp9uxDtDW95ciM1Ake/nOwQdud2ydRkeEcw2uDNDimm2H8PBBQKIuh3ctQ/xJPQ1aYIT0idz4nW3cVBwGxHtN0hyvimdIBC2pvQ/Bu21u2bUnpHYwnEmh7nLTDR0okbY5S291DmGQKRjCNWpT5VaV8Y3A1wDgKbYzv6HhSxPMynI5nv/rgxEmbulgXmfsgZLFpjTrG50adI2fBpldaHF3ZbWgb+RBkPKeU8iT3KMA5h9809os/ppSs/bMfheJ6HbFgDxwM1QQuP6wRqPFrAW9uwbOEVGCt+EDLw+6U/Xzq2fHsoN+tLQE1VPcboythblR6t/B4a9paeIUFgh2CWUSxWb/0cnLJxmWLGx83fxcEhZ9Xat2Df4rznE9REfJ40mrdPxJWYhe6a9WfU6/qsXMBhoYJW+9iy1OpGabCK3qIWlruunkKCzt50/pQX9bZnwGVQAgx6XAiA3WX4Qsc7KLYuvRbNjb4wO2riFqw4V2b9tNEQPq16Oab7jDzW6mI0ZsbCjptd1oKBNpMsUFFlms0uRmckuAwGWEbk4qWPrzeDnbENv18+IjM1geXBq1IC/DlDksh93Sb6/GP19cA+J44EWwB1rAvFtAe5oQhb7jIz/OwC6R1Z8tPMRZQUcy5ilEGkN3KcoYCyKwx8SdUN9UYfmZcF/kU9ElQTPKh4PAwNd+Z3U0cGgBjtoCWa8mUh9FsxzF6DHe52HPFleupBKwDdD9Hv08y25PTkuGSJ3Z1WtFjEWFSl3n3eyhAh9xspcjeGxjazWeDE6DJVp/n2WFDTfj9mqDNTFQpc0FBSxhGJWwf9vI4jW5LQQeIr9Rcyg6rLLx8Py52JTwEtdmlsjJQyEfLXqfVg8ZfJ7q1CI8BCj3WhspWqf7FqzBN/5IR9FQ7TCspsDmVx1t7oYX3+45euhjnmeBM9fqLm6EZFQH6hmIkTalwOxiik76GayBFPlfNr8MdsdwirHvdRwP+oySmO7I/OtYFlLhPTrjZWZbMYaN7aS7bYnIGb25ILHK0AcGjuqBZ88Gw3tSqX9RRLP7Lpf1uylv7wR+RZfDRICv0QTQ2ZlBXHcvuZtSnxdhdADJOambHaYMzFOCvlY7pXq8AI5DYouGHzUeaq2GshWXPXcKEBVN+xdTmOL8prTnA1sUdE5IXWIDUIrTPGAmHTX0rgOfhjX9paGVY79us/MMbXnbMSiPs1OAPcCbgpXd5+dqQVK+OdYw/CPn+UOOS1BMGZ1+Iz+UFWSdDIn52acPLLgkDAVr+M+he7P/gv/PFxBGp9lJfzpDyauMHjEP6BVzwUc6j4M21azTD3nnFwJFhsWAqd+rMmEJZR/PxlZaBAmhGRB6Lmyu/9ShngS/1LLywq8eEnU8aIo3izDb7oW1C/AWa/TLSaDxLnE660hMBcGczdWRbcOjbCaSxTFnSFDnhQ454TP1eMYAim1I2BcZ8u7d2XBxs4olTKFsqnL7mdXOJn+xX1S6eU5Rvpb+JOf65wZY6UXGlm2+TTHcfQX6hQwOTYY21XHNsJebwrLppN9q7xdwXPZOgMZFrZ3ENmz/sw0Wtm2h0ZdHnlLq4WDyA1DWNBNjHCVLKxyhebvegAYpAeeHMQqTskfHxaGpeKbNQuIpJ44C48lSVnq3VTnJlJgVXJvoUl0vakwEqlaW6EZDNO8f+3kV5gmQt3Anfys1Kda8FQEjoSTZKLYHhMw2BzLzZSNO7WbZ6DkwJOtlG+RCdCouSYcFPwQnwuaQj6tB4l77XjOExYh0yhTn4hTwJAUb39XM/6vx/E7FbPditbN4/Nde1t9OCRf/2Q3xi4u//0uo+fox+dbny2dyqQSanrgPVQSLOr1x9Y4BSn9Oslbc0hADlcGX6vbtD6F2+t6dD6RFkHYD+6xuxsF87nJWvH/f46Yd77EFdOIAEAajWKCVdk4vjmp8xRIwN1RYrJ7+EoiV6xsikzJgPx+MRdeVX4GYD+pbfmJFaOKGuKnQi4iE41iBdYhJx6c4ZXvaHnghL1ZWzP8u6bmme0NgOMVyS4LIiXOi/c+juh57CPQ4mDSuwit8kUN8szDg98Qoa2ZDsw9J8XqDp7gnBtL5oHili2OtgvfGTMnpyoMdsJsMdbFLtnj1ONT66NTyQAIPt8AHtKHbzW+RdqJC/wehNQFTlYiCXVDHrWrx6TzEXuKIPA5IXUGsCyO6NM+FrWVg/ZaoXB6kv7xA3Ci5THPXz9g8bOYK7tvmmkkGl3yuQe1l2/9ooZGqBlDZwT1s3xf2ZAABnilDSshWDA33eGCmwmwHPP6vpCQgAgw6Lh4sp2pTpXgIybT1hrYVQna1nGYU1FfZG0tHeI4hqlgnId0NKEw9vQgHdHcp6WNtvD8MsSkPvs8u23GR8XhSO+xrzns/kk2TCtZI0nYgkd9wYElSu1fQHVj8QgwNCfNSFVR74449YdsUbq/sk7sR6JpWaagiu7V0yOj4KU0/fagwo1pgSv1ghpzaB7anGQdWFmw90p1u9fgCZOIxG69s4pljiggcAJoNg79JRcVTaOFTliwaPxAhkg/D1nQ9NmlII5Uw4H14lRYvo5cXmYL8iUogXJeC1peiA8tJ3rxYufOyV/oJT+MSp5i6EnQ7Om7Kqndz2MbrheB2FqeLyIdKISUj1dGQakRz3R+a2zqLb8LR8vn+8sKU/M87uAsowBaP5qEHLQD2vhBam1aqiJ++b6JzzCJhyGWkdYzBE7nsGG6i0ZQYdl71d84YB+gbdMc4S3H7OaSDPXCaEHp/JuPWxUn49QOyhSWlCzF8PSVC/ywNZnW9i3DSZCkPSXhBZApvA5gJBKWZ8fxWTDcl6uCYLTHSPQNwo7cOpAe9Dw6lJoJFZD+d/+BB504+ddKFYE7XKRdSJaVHcBQfxml1KDCVNYtftr4ML/l2llbGZj9dq6cc4dkHeHUzuupNXFXax0gdhmrOAOZDIxn+5rGU/6CGf5Pv9PBDyVgFnKfZdScHeyNfxUrVL+T1tEe4w+TezdApoA2R1I8AutsBjRDuC9zsck+niH6RnRysZMdhZUgd6tvHg1/7OUlI0IPoUBBQPBKtyF/cRLjRLUJ/J1YiR2A6t5KGH0xv3bIfK3elXJUDo0ryveEBrmYCAHr2ERqBPqAAUPEErEjEzcRdjigVYiGoNgV5D3Dv0cZbZUYn8RgeGP8XA7lpT/eEjIeN/DDPnLVj1cBTTSbfO2H3QHq+iCfwlGnV4sKljZhbcSf5YePE6IfN5Nub2nr82yvjWBoioKIeM//d4+7Bh37LvE2QF5Oo6Uc+3RH9U+hUli1CgJji4EbA7Fmzcw3sOMIJUvCPld6byil/MbZOSyA7F1/dGed6FIEijX0xDVBgMFAkqQjY6ym2BVJvwg/vGXGdlCexRRhuVAibKwAFRFMzu9w+3+n7URJYQEIAsf1KpynaIBUu/nspDLeHVEOAMWLhgsV+y9vnj+cDtDPfHB2WuzoiX7ldYLwJjSKGnnUcPoJYNNZC4O/xn+0XMyAflLRMzACG0JyAMdInpsp7ciOVeOSml7eAGz7L6tQd8hSTf1rYCYKfhR9wVRXiTl+s5ECt4CkeEzT1ODiy89uLmwehgO5IIRGUM6blFPStPkT36eW7nj1KH9+IDRbXnlMSeDi5leRoqVJORfziLZaN08vT38AHmRQ2Q5PlielMgeRc6Ymwce68xcPV6wl4AjaFBCsxUHsz3hwyGQ6mifrYnTo0doECUmV1JkO9HHOWTynBPZ2AX/JT4BfwlfqTHuahiFHHj/I20d731VpnB2V8Mt3UhyDgYvturPlQZ9hPmUszBdf12lC4emwfcPdAaIV8+BfS8S5ymRdf9uLGFf8310SOhsYP15iQZpwhmWA+x5biJm2nCNuiTrZbI6vl6aI+pp8OlfCgywv7ZnBrz1xUvkHWTooqMRmBRSdAUg9Mwtsu6Gv4lzaQlY0sErPRPRUWI8D9smlJ6RQn8rV2m1h5RiBdzYvbDjOApo2bDHtrJg8/BnldsupQ4id665tXbSekCpz8flOPIwj46N7sxJF2pmOBUDdZCBGi6KA3Ef3ukivYRWtFUtC30Gnqq3kTrwW5WOAkBk92ERfgUndI2t4jRFIiOy1/KgXZM/+FitPcmDtv2XHFgrT92JULsTx9BKwACJIMA4R0gfN/SKYcI+3RHr+4WV7t3aLJl32voIQeT7qodquFtoNphHsLSgZlOIchIhesyXXR8Lneq9kztv352nZ/j9bJYqDFPTnDRA1dP3oTM/VaCQrYspAAzPGBR2EP3dDJ3xYU1RwDFjjIeXCu9kLLtoRxlrippb8U6sM6PRgUO2Z4dlTA5dqikScK4ZxM9z7twrmzv6J69LJVBOVLRiY8C1lLAJ1Ho1yPZsTq2AB6pakAbsgRgiHj4+8xEgRQkvX/IpAlv8CoLRYseSZTdMWN5j9PLtX5vnQKAt0W8ZfJVthXiswzNP4TE8dJYvT7wm5mpyIzg6z906A/gR9tmwuaNUM07dXrB4xzdVQBbmztn3jzqw6Bgxm4RGYhy5dkXeVSEDeObbL7xwPrX41xsfKYEYq94XzjHqXk5/ZcEB+af74qHidIW96fzI32BxwZihMon52+NiGgeh9kHBc/zbSDLJFYz2ekTqv458/gfKq1HLUsVKJDtIZbMStbru97AkCR9pdlzn+78gN4baO3p8qxh1pv3ZEpy8+GinnAIvFFSBAGZEAfT2oJKgw2KwsNzU3k+AMqo4F6RorMrd9cHVhizVkFShcbHDMtbEZwT5JkB3/1Lt6aA9HcflJebVJTZAMmrjo3mi9HYJxVbhzNZbRUo5Ik7ItNthngWM6MsZ4OKvahi76k5dWxey6PBdOu/6snXyytt+oTv13p/qco70y8gQQhFDjqYVdHd+NJ5woLvcxuLVDdVJ5KBeyhAMQGhloYKvy4x/t7VsYUHnEDyzPdhIv6Sr8DsxBzidOfoLcwwiOZ2ekhidwsX9Mp3MemZp1naXnQb/6Y9ffJnWqNe7wtbds9WgxNefwDhIZy3G1KWjSIgJLqXTlZ9oJCjsCgsy51xOR9e72MyZ4OoIO5voG440bnl7rql/d1y3QZFPG04oV0aiKx2skduw5mAb6JrhS4z7P4J3tFhcrD6QJD5NoPb3FOigjginI3nP3Zrg08PldK63IjHEDULry3b/gV7g7za1CMx5a32QNUkgth9y0SR1pX53bG92AWO5ZD6b10cSvnEhmddmJh6bkOHpfgTRJHQ1+Ka4xRxLe8YpfblwnfdHjqp/iGinZ7aXVQE655ftSZP0L5LcwdV/MvmKkssyThk8xbDtGQJ7/0LfkxTQEIs6jKCf9Vj0mXZjvskCmatyW1cZghr67TfSd/eiEjJbf9x0jLS3kS9TLi2RB10qiQVOHPG+0rxKY2d5kQn25cgqRU6hL2XYuWmoL7dmJ6ZM2Ult6x2+4TPCcJzPHUhxxzVhnordxlxSmzPBfTr7UaFwZweh/EMadP3u18SNHdcvulXjCmJlaqemrmzxeA2l0webi7MF1RhstUt7dpH3MIUEozP6lxrnA63p0qE3HHVfQ3GF8VlVePiepu+aYa6V5JOxzwE0PmdPamusAPAkgeqKlBp1xdkHU0odHbhsfpuNCIcw0E/1/XmHnWjWq6Oe0gxRSO6n7XaL5IL72xBiiVRrosCs7xhrRQQMJBDDuyv3e8IYKz1GvnpT5xuo7ZyBCmHQVB1jOoMLKdSyzCOIzN4wvsiwG2GzGocZGmYT3xpJqRp3Adm9tv3KJiI5lIEDqIa73UAbEp8rbBotqq4znpsSonsRu7Ikbpz+JJgb92zVMz7d2JW3X87MmVYYNu/z1uPUKc9kOeP7FBuV64CRpZ77v8yU9Mw4kQxP4f5piTIZLzeS4qbabX9qkbaeQE0OmtAZ7Pp7sS7K/D1bW/KfciZh+KcSAFeU7Bjv2wbOnSIiTK8lyN5ZJivb6Zg1DWmM9yG1ErlBHIqjh0WFqnm//5rrLvKuWus5riycZcjTMA+NyhXCqkCttKbu9rX+vrXd8iDN5S/IJbdqmpBp0Lna1b9oCGWKOS3oOsPbqlMR9Yd0vZhH3nTQU/uy4Co38vgoFa9tkepfMz8nl7hp5j5dHu8ZdIE5jEAWlWShQnW7vJBSZ0qJMnIdY8U0BrUh2GupGaltgBhwR8VyWlFHNzc2Uo64Ex8PgaJ2JI0mF/L49eQ7mUgYRRt2m5eiI526Hbzbgs5XAiWca0qIPAYrT5amTHL9JCNUKerfOZhvETBamebLIwjlPYxggPKxjHjrN0Q9g9teb3R2LemPTG7ON9qdGTqGJfBHxVO45VbjhQFmPyiHcsK86qW4engwuxN3aG/igRAOsBYjJ+l8nasov49wXg3pjdS8AYzYM+JJHynmD0a21FRceCGJEIvnC0vVAoUopMc1m8WQK3nNMX76o8WriTF3MIrHpMzMv5GBV41cgHaE4AAStPwoKkYnVQ39C+DtVBYjP/sU4DnlV+KgoOFUMaezRu0mPg5wNfTkHhNLfPrsghwtHCAaijCdIFfVbBsgEvlxHw8BHeJi4gxTgbubRXLrAs94wDYJb8hvkjllbpHaPaYcIuKjnpJ4GPTIhXWsEZUwozt+ABA6rnu8lM1wxdFPGeI9Namfzr6m7CfNm0FVnemxKEf185BeIyA5k3KvasCkbgi+rfx3EA1rohWWNVUcc2PFtnS0c7kWakg7wMwmXGSJMn3RY1Pn3wOlAVMTlju58h8oXXDq4eICa1WRSCrVr48SpWGZNMUdSOubliP28zDDeQp5PypWL9T1l/1mqySFxZcbl2uFwpwK2ErvIxS1zyNt0k8v4vUl0RNtKlukHKnjFDhTkHhYBYNLpdJiAuT4N7cSzSnkqWeKR5cnMgUg9ph2BylPJhfxTwS/rjqrZcv53p3S5nUzXjLu7XX2ojWfMdU3XjUdMcLeBr0CExTrNMlxWQfM78m9qKJYrR9qwlGp0P7s7Ay7YV2JCg2bI1RJPLRshLWyqN6YWtL/dDmBjxsxg2muF/tQz2dHXP0XooQkgUMZriKZCW8/ZXqjQPiSVAUHJcoMpU45cuqqGShOi1j7qIecBGq4uEr1lHyTL6K4i7KjNU3W3evPQkQO0u6g0mgRE7z8EmKSKiOH0LIjx3vBhK89fyp8VpMAX5fS0fHlouSK57f/a4PYIqFr8qWc6RKqXK7822Dw/7fkEADvon7z8FwG7Dqv/Q+ARs3+uIBnNI8aqtg2zOqmsi95/4nFM55QL5Pne+b7OMPtcOxO7U43ZmBFflAjOhHqqJLyPGbvQbqMy94d2vr6e4vzVF88Wde5mGgBA2ngqV0+EWB8JlHQqB9ej4ymN8/3bmfupKQSkoE7MgoeqYjagMnIBFNmHUElw9U6SZd7j5+5nnaiwioXNp1+PHRmA5JgutQMdcoDThmammzyOuKJvDm6xDeXh1FGx/Dc28LeMBNkMVQCVJvyv4noaKEOrNudukV2AB9tOKxe8CFHS+/7ZmG9xa0G5Oget6jQz6zV2DSRP+YVpn3kuzeIRieOVTKM6f2eJZVJ2p+NJ5NunGh0DiEd2jDSm7oZjKs8zARTs1GMXrcUYyJtcBJfmDBkJ+vo/un8Kp7mTYWGBk1/xzU103QDv1rkq0kWfo5swaglNjEJpar373Oaw0cTgy74lQlunlorFU0xCE5XKu5htVj2R+EPr7ppWLTj3DHvlnwQikAm1euY4MhY6gspT/dkutpukPJOzFU60G+7oc85Awzs5Rgzs4tg8g4EpucAoZ5NFn4coAnYZ9w77DyGK1751/kWuv/w/qODFeWdnKTajqv261I5wrXn2emkBRF7UF4Gjca6mDgAG4tN6Et/RXsSrwaVcUZqo9fejFUeTGMZ3QBtAUDVCyZ2aax6IfWgYhCLqxFlWgB65l+Ce3a6kV68qMYd/0l4pLJnfRJxphNVppPw9OxLmBGkNhJjNdpJWy6SXHm/nArQ0HJnRKaVg/CB1XzAp+bqrxvTJH6oZf4RELOmgkU/NJ1L7s+bJ9XJkJtwF4l62wHKHIF4EGfSf6EVlKcvC4bvheoPKtkuhr86hKokRSnFSqu7VeKdJ58JNwIJYI0OnuySy0PtQA22wZmG50iPAqyc9rGVCCSDd1ulj0knQV/JSo3B2/zpW5tx4Qqy2aEsWBEXA1Gc0j9AB4JBVJKImTbGpxIXaXXvxymhhmRJ+h1lyESWMsY7xc+NHlyyrI+aZSANeK7mU1LqkfJJfPt/BrkZhr32NnVHmMXMzJPyEyh8LL0FQF3KqGWMQb4ALV/sVPl5k0VPAjreRD+nRUAvMqK53jz2J5/q2kwIEPMFdbHqx91BLwCGuATEEiSnYWFBvwD9w/MkUhdwzXf8RoVc8Fm+3P3bnJCghoVawDSqbdRhuWKjlf6cSHz0wgBj9u4QeKX2BsrNOp4h1rKIOlPBdUQy1q37phnHStgNB6Ql/oFfdQ3rcHppyEuaNrooWzkrzi6qpaI7UQI0J7SuwKf+Pi7zhIIef8o31tyj+OFqjS7qXE7NzC0FnCLKVAh3UJ7P/JpqmfjmK1w+7jS48D2/zGRrX0eBG+q0NI6jBMLUrJlDPRj1NvfJGPi8nk8SB5Ikr0C2R4ceDqGB4yJdfwa1tSxdjxgZ0Q7Mvqc0sqPcRdNaNlKT/Tqkm+GpWgspAQqVuh60skvZkgR9+lZSeQekWVrrDGFakjw/IwgkzccqpTKve1gZN+/TvWkfJd9+Jniafl420e2ug7tFDi1y6nJ63OnfjapPenkHtEP5OsId135hc4tSqpjowgLctQvQ5Bp9pJWYe46RYvfrmab7l3+xAsgMHxWmVJh4U0A8AcCr0y/eNaQM7F0huTN9QW4MkFbu/1j/9K6rDur1GkGji716H4TcCAZOiXLmj4JolvdcAc0b3kysGC9v/oD7rb20133ct6ntYvtKDzRoFj+/xBAXyxhGvdnfzxoaqvow+hpLprbVnZ0fnyVXWq5a+IXn3fCfBFRWh+SIrkQ+jCCruUwC49XfuooV1g3xsvQz71yLI/b4QfkRRCloJu30qvTvtdqv1opeU9pfUF4cAMQlkSRHZq87GIsBhL6c5MZyM9tuuv3ghJTUAleCKJ3G8EHzI/iJ6dlr5vrdBQnv+9FAfQcmPwybsa78Zc3y8RTIYCiS+UMee5PK0E+xn/M8xyVBhaXCmMPwCYPryGVFp8jZ9rNmcaXi7KaWG/BVb0xSSQPPHtpAhKRwRDeZ3CsbVP8BfrIUeWvRdRgx4zlG9krN2G3vdS+uzaY+UcaRBso0sGNfRo4G+qEfB0jQq2MMpDCpcYuBhpFaYzLe8yz1XGwMHyYWUOvXy5O4O2DYlk1/JVL59rqAQgVppJAwjKQ3upBGJcCeQcWeoe1GXROgI3GSxdzjl1W71364QTGPrqxlveu89q+L4b6oR1QHo+VbsAMPuT54YqHkYQOIxfIHkCkgPuBE/053sycVe4C0/KOSmIMaf85ZBBOe291yCaQdl+vfq06jlqccbkV8Q1o6fk9YWgX8YLsRdkUM7O8m5cy3wgW6y3YOhblkXvH5jy9EthXWwnt75qkBcFx2hoDxTSCltMWwmO4XZ9ez17zm7JabcNZooU/wFgTNvFNAf1uINHCYwiOKofw/Ql3S6Ngdhm2gDaCsrhIUVvWJLXP504WOBKYQetYm25SpF7VZ/HcGhHTurELubevjKmClkt7PCKfxLEnv0LYq6mmQFJjnAQU31m7iB514v0Pw7ZmsAMU7hndclIgOtl0wUV+rJfmAq5uNzj61C9Cmd1RSI4JbxisaYqBxQqbiY4pz8fPEJNCFsSuV7x9dbIqy36HEc/uqOEqpS6Vv1IaoSvQo+2rF3/al4BCgl8DpJb2KDRm8+tkGQhze7BArJDNsMmQSx0nrvv5cD+YuoSKT/M6cUSM5J2tOk8pTuSdF675zQrW8dL0kjLw0sPZyBppzaP7+A6uicTok95BEExfu5pekExfgwSSlAno8QVEPRtMZPDg09xg6Z60iow5ntjp3ZAnsndaFhfAeFMt0XAfsOOzebsRvsKCHmioCE9TzHN9xVq+JjSqf6DBVstiJNYW9GjLKibVur7QWOhf9kQK3sHXxWrL6ojwl7QhSJvJx1/oNnHddiSwBiaWg53+UVbIXekP/wRKyS7nBwFU9M+ALEzw8pSoxBWTD9L3oSc0G0qfg/iUR+apzmrmsoCdD/OHYQGWbU3xePe63ItgrgrLbax/8RD5a+SGRtypggRHRIJv0nctFXxDtnALwRF88S/q4RMJyA21XInPCdLTbvxuD9PxpEmc4z5spiN9ErjMbK6HH/+fRxyQJke0loQv4wew/U+fJBSdps0tTWGfSxFPEUuLkGr1LYqitV687MdguO+bC76IPeGD6koFtG4kY7KN9eg2Wbwk3rGdBXrkHxWdlzOBS+b5EdFSTG3jltLUEjrQWXrIRxWcxJpje4XexApjR2uiQz9+TMh53vfIMExoe5SUN9/pSf2vGX53ckIaaTdgClnuA8Ahc5r3/GY6DId1FptLQveG36evV5UUCYo3cPkNlOx88iifGJJGLtYmRaQFjJgX9xzmdm/dU0/5trLOYJ5I/IRMh/Yq6HojQQJnQLAa8FNHiu+QSzRZZviorNSNXYp+r0UqY4opDbsC8NiNTcTGajaVMoqL8WwB5/owESdtJ2vsgKkDqAtxS8bl1pgLFoNhG8Zv3xE3ZTe3Y6w74a2cae3CkhO3vT1hPmB5PP92kxcdZAXjIvo6LoYg2CdRqEVNnW+a6nwri6FxXLmBsvum3C7Zov4Uw72jI/2rjx16XsDrEBpoRQ+nX/Oc3okIhQsW2Vx34LiAkwApOKCT5pcGtGvsxSTGFE77mI+VcTJk+tzDxAi8n0zBPaEHGe7FwSpGm5M0zSnqmzNnQWa/vA6fI1/KMSRsMXZPEgdMpGpg8bkh7s9bbxpaSKg9y7uoUgM3VKIH8KY74FUJzthuPFhVrBMU5R4zMOOM7uY04icQ73C6xb/1ccoxwFi3a52AXWJxIW2XmlILTu+MU0XEt/V3WETacx6PXxKPE9Lt9EHb6aJ3kcZoW9VH2frcNOHRDZvcN7KkjKK0JGbX32t5rX0IEsGdmj/d3USvIRgffjYYZ2K4Q9dEiZF9Yis2ik68cTsFu9mQhMse3h4B5k4WHjgF6nWIjPxtgfzDn9CVlDfo6mIkSrDgwcEfTX8iMRVJI4gLm3TkS6NpjVv+Qlk9bRhr6h9fSloxzZ5Qls9fd5pp0Zz5LBadNWi4D3XP5dHc2l0mz7cEAsMW4yeveskEbR9kuuxA5p4cnrwV3QDn5S5HeHNz2jmyl7StljMd7FHbQLJGBE5h++CBVFM8lt4nDYgUmGnUI81swjF6CasWPTZFEXOGvLsPxBxvPRPCg+yL7x7XX/NCxbQrtlzTMpODvGkbxIchX3fZxCazz9lpGbyGRqr7L4smN/gI4lL82xsZ50yC4qFQ3fXlTrkP3mrNMRAmza590DnDnT3lgE5pDUpXlUTpnxbzA8Yx4CYVTm7fJn0ij5M+3mChW1gy6z/89/UQh+A3zThZYJQIVdFnkUbszvJEdpox0spZ1pB6YdL0xWUaP3G3kFfjssa5/b2feDWkfYyNKfeNVXTZj7psgkhLUzKJrrsP/0E8tVfXqVTuSi5LH9KyTQ6jNWdlq01DDxOxVEYrByLNgvGQaKd4PJ7N0Ilhk6DF70NXlRi5jlVgqXqGeJuDcNceIdMCAuw88ta5/Gnt/ZeZdPbGheoKVepmhjkfP2nNBoUuNLJM8bPbFVJF3G1OtYU0YDFSPv2qUj8D0wzb9zBPt18NpOFx1wztxLdx4SJJNobMbTL/PdGRBX6+YNkAVfrl3YfuzRGhJxsWumHN55BhymnZ5ykT2lAntezUd6U1JPJlz0Bt2fE5J6bt5U5jozDinDB2gNVm6NSut4Z0NcyGUqMufju+jldSG/tEUJu3lOHNH2EhC8IsImte6cOEWzlLjYFTuicgQfi9qqmhCB7aA9+LPhvZRp0Iv01YsZFNC4rOuzpu/yZ0OFiSj6XSLcR1Cdrj0079+BzX5uPUuYLof6CquiykrNagjYjF5H/q2j2/fN3iXzsFuiKhthwR+rJ35yr/zEwLHgI2Y0VlAOlcoYlxV6VUONIg4iNGveRZTXyVfil060h8qG1TSOc2PG0TKB7kqmCTZAmxBbSBqyy9pT9dWUPND/t5o1G6yAUS90Tfc8jHE6G0hZYMPD3L8hysk55klWmthVGb+0YJ9CqWDAOFGECWgFyI1UmT9QGYHsGTqezxIPGa6hYFtJJ/ECGdG0oOapd2K9rSd9TO6WVhuSylmUqN73Us2wwOGYHsr75hCNTd3G1VZszdks8n+EvkEqu5ZFJJT+H/ZIEBtzi1KwAvwaXCVAj4TqnADuIH7U6Bt8mmpCWAny3VgsFMyDao+Md0bkETEU4jwBADLEElRDD2oRDl6LBUahYv8cox3xxCEzC37VhrKeezHWci0E/9f44VTsh9yDDXAGmS3lrls1ln6urJ/nbBU1aedLg0nNPq22NwnAvqMTV25X9EOaDnNuRWB/URVfBY6ofryUkeMG1PvbRCHE3BQv+IdS6CNv1qKAMIM0LFVTjqCfQgWS2vv4YBd4zrepDcaqTHqTDbil7YT9Fy0rVKeaDQs8rQUGiiwuL5jtUwk1rZkWZlJzMM6OKKYnFE0CKKG/6su6kqNOjwhTdtLAnsRiqGHfeankNVmV2UNQUrMI1Pm1dyti5jb5cdT0QMRsPHfiHq9tNCwWJGJ9vlufSgjXkQYgW+gLKnqbgCYu9lsviXUq5l8F/BGvB7ZQSgmIEhAdH4TzpZNoZsqo6mwHgeZt+k2XnMRTrNHDuR6XQs/E+y2t+VAEMDMFSruj5DtJoO6l6wolKb6Py7T5bdNvWb7eY3JZf5IdWLnqhzmQGK42CcE8Uoxo+Kxbcvni0pBjfkSX1QKj5PnhvveviZaILCPYjXhAugePF0sY0bJbFrLPReNdVKYtsKYf1J0tPk6avVO91onz4408lFnqEp+o2wQDg1kF11fo4MPuaN+N5+HvtZJyhKz5hLW92G4aH5xVXmESV3Aa9uzgKcPsNtDSJV5ICqdxas8rW8P3uoYtuP9441zABGb5q9penWo1/VIx2qQDAt2aTOCUhPICF8D6/r0o7mJgyD7FSh7gHCAFCXeVp7MYqGupDzcp6n7a+i4YCfzlseVkA3QWhSL8L2OtpzSkQMmWZ5ST1slxCI2wD7lMvWXqrfHzDrfROInH3rKVB9E65ysi91VLmROQvBA2u7/MIaqBBRAdkIXdeP2h9ubdRqLEKfjBQnXyQUroPOKqGVUX0vtAVabZfrn/K6FM+BVpKPwKLwdMtI94FBGi3qWAXuuEWGPFTKz5pM2bi4uPUEE6hIwQujObqOJIKD0nBIjKAve6DdarT9KdYs+dDyM7s243fLKo/gIrB2RH6EwzH9tRN9HJY0SQ5lT11cu0SU3ZMYjogtxbsfTJEbjqCdxYX9Vjx6nNQHl5qhP5LvEri6j1NZbDSqZQZOEW/NzP3Rba9KBspkDANazyo4Sa3bfFcXD0klUqcHAFW9dw97h/BMgnIK6f522sEFscXSMrSKM4mUp9hQjFXPFL05DSTb6DhFC4endFdSEpxMXWuO+a7bru/izlmfTvc2ZsSysROOzOPYd/zzQn5b93jgpZH0dqkQtHNtii0J5cEtLBKp1fFObaPzaZ1HHsDYBZOjby6InV0aXKZwEFwhlsHLnDdaOYyRy6PmFp2rENqRtq6VVfradjMI4/ekMG/66A1kprGsFh84O5mHLErbrWi4PAUey+om09mdUE3Udtcr32I8Ke8gzaQqC9MYGvr4SyRGWGLWn1NuL+frJo1IBkOU7uAr49g3hfZpohaIG4vUuJtjHE1Ntg1uqX1e2e7Pw+RxkDl4uSnJOZT4sbnwHt3q3V52FtYe8GWAhHYQe0sZo8wdZau+l8vZ8DOSmSLVPHx0wR0DKC3YgwJ1cVLZUmfnhjRDkvyvA5+0g2lJDDRdYEi/48VKDifeCTAQC5FEnrsyLU6j6N+jBZJ2DAnOoNYUvsFlu+i8U4rk600/m5eK2VqTXxue29EHlAFAXbzxKLgkaTWSiZD8sIKzR5zEpFPaJcSJkqnIvQjJLWrE1IQ4YoWnCiQcOVe847a2VI4Gef+CdFowXYK93taKO532HJ4a+WUjJKaHru252jQZGAcT1qAfeGftgGkX3ZGjExHgGS4ibJowaTRwFmmJdIIkioBIwSp9bSF/icPVz9PfFbHJoiDP8k6NqyzAvMdTr0kZK5HQfcWVkhel/aPJIJbhDVkJp4DBghCH0xyp8uIA2e+MGbR/kixlbegp1AFCAdepCS0b/vg2ZRy8MhqvZdorU09TN3ua7LMVHCbKEaXJ+SVymVEveuVh/TYanyYL2LCx1eP53r+hNGMzzs6cxU44c/+dL99zlLzED+cV1lbupQlSCbGjk6YT8bQ0NtipvoLmlnBQ65cFQuWaBXtom5WbTG7pH85MpVQJo86QVK1pGsgpWbf6WX1C272lPyNs6No+UYqHaOsOfKO1AS8OWcPkht+9bDvVHSU6/Q2/+WxTuWEB8m5jx0HST6iySNSXIBlVAc1/ieLEAOWZddYzFtVJArmSQtTJc5YeVvjGkwrz4+G+xrhy5B3AgbXUmXfDjZe3bQpDYmYBiJkCKyBKUHP6fSSGSHTa5jl9hznhbwEGQods6oRYPEjuFNyrUnHq2mfhPjdWXTI0AB94AgZ1WcaFnlkG8273eYYcIsp+E8tO6xo5kdPF28o5eTTTR1P3W+7juT+i6tIJ/X+R6jaU4X9tL0wQtYZLu/O38/3im0+g9EpljglWpPRkiiw3rdXR8YLGHaqBJn3oxdBZLTjJ1bVufRm7k3fggUHMDJTcklbh86VW46HTXiTq8VU2G6Q1jx37oUJGK6n5QSZeDnr1hZgTP8vHyu8kVy4XnaHya2HPE8bGC7mzOcAGBp6x2S9lnW5bgbL1FzGBD6e+5SfL+g4kTtay2Gdy94mHa0PDk0dCWy4QSOrYc6D8CZpA+ZlQk03XDTCLhYkJRKmtwZSnfjmq9LrPWfHO7Kta5Dong5upRk9gVuN5tBhID2/fSIgUMfSNjdtcAqCP4au79lxZ+TlgJ4FL6U90JE92ZtnZgVJpRw+l4HdgA971ecca1jZ/JOrUc6mDjW2WcMi2n5CrCgaizPkv1RkKI1TKNx+j1/O8AVVqRA/aCq7xMrNOkNZpByenS4L4gfim9U6K8dYbdSHI6jZeMWxtmN7vDdhaswdnakj9+K0Mjd2F/aY1upSzIxYOUov3jSp8IIbwCyuiyd4m1KOvMalHp/GHHxYrNlhkSt/PR3w1cDq68KjHcA3yASyoSnXRgjFK8iIP2FPuTyo3iOffiebsxfggXQkfXyKVfwk57mTF+h7QCsNgrF67IM6H4W5bTpud8DICuKXhkBf4aHEOSO1mXd+JU07c61Iy7dHX+78Mhq+EF5jiIbcKtsecnwhCgS+DxIghe/HPDXweTmayk23I2nnHYe5ROqwIm3xm7URJzXbxJozk+/439xR3kJNTBCHJY2V0oIz85fsJkNhCQiPZAq3gXtgg/vYO7PSF+TPykyy1E2/ScsyhlapNDBiZGM81i+S8pGUt2/KHBzuLVVtxSInylQyevd8b4pmUZoyTSLvlLoKlAXvb5TehuvKdwptPh+QkoRsVOLrY4Fk69kJVbbpBW4ek0ZKzdJLhKdzNRjY+Gfp07TJn3/i+YoFPQw2ZbgEoF7AQqHg2XivDe4O61SaqAwONe8pG2J+pJb3qv7GLqtIpUnNYp6KGcFivZXqmDaw37kHheL00xuZHSTY3DMPxVThpn7ugvYP/DwZKwFPCCXvkW/2bXrI0ZAPyfvFjYGMGFuM8nIa8JJQvteLz0e5C1Vsx/bj1CvMXQCQtzOAV7xZONl+9bb7eayfjF8IKv5Gae+EnX8Ul7P8m8eA+AO6cM5+DMxHWc9VKIcHuoz2LdZc6JYLwofcuWPu8TJnTMIFVN6ntS49IXUFjJfFmHjbC7VwM48Z2ghn3HEux/hHX7w55n0px3068mlE0qCAvATy4d6akAdkBOz9J4OOAffJwhkbd8Udg9NnQe9kZ69srYVqwMqTbDJdTdQrvtQf5BOhEkfp/mb/vBQn7e5OQwQzhfQgn44VU2qFg+P1PGaTvzW/xNpQ8lyDRoGJy5qfPHVTjsGjppwcee5cj+Nyjc4z0djjM1U6HarD7PniDX8GsDUA252bHvBM8dYlTTw9/1Hl0SFpw2eKUXDAN3KRcRRzDRrx+fnQqvCy9BFADczeEXShRL1MNfnt1vGoB0YMv5tlygSDyNO0Z5hlIwYVrrFMpr1K1xipmCnXx6QlHPh2CL4zwdXnjHIm57JJRX/tPtlSXiVA85JU8QR3+tuMgXgkIraE2E2i5lHzIpvJtoPhtOOw7H36dvqlUaWZQ328W/j30KvK16yWNdNnk0bqFNDMDLppMcAJt3lnUB9DhJcEEBxUfDw92L0Cw96b1kXzC5UTSXsryjb668XFBx8aWW0v9dQVpjsuhOaHQBFVZJGnVOsVxjcjqas9EcnC6nlAfcIkAQ+FGfRwaXSsG7uYrvjaaaBlibTufMcTIapPprovBB4N9uYULk2E6XuLG6mysTDQh4E+Eh7cO19LyJqKuJX6Xa3pF182j3VRNhIt7wwolkajkbfGvNqb+h79lvZn5ZK5Cnjom3FAtkdBBNY0z6U3XuxSBQfLMjf/umS0x8pCMlb/hQpyccfUZqbFpLbscQtsQuceuGMi5PbS8sVM8CXezi/mR6NTmY7bzRqGsZpcoBLvKDPmw4VvdVbcD2CJwPaUSYli+SmfEw9tr2gSuGN3VIKMeHqjDrH6Wwu23XMUYQY2va0yi8/DcwiYFyqfhWqehhVBMYc9KgHL4jOtZ/nY46655zR/jvwhQHxbAw2wa2rdNcgHuMfsufsp7XdI43qn6td2HxOBK7DbP0zP9CFZlTplxNsyuCeRmTaVdpGeKbkMzSqmvLr6iq9KGJjbm0IMIzgevu3iKCzMU+ul6sAVySlTGKUI6IINf4kv2dOz5oQrMmriedc9mn8MSRWkbanvNeemC7h7FHssMGBDR+u5Bz0MZhLS8VbouCSnfuR9SFmiuJ+76iL/q64j9ngsR+qJUk3Y1ZgBawkhlnEdiotyAqlYSBFikZ/U7D/i3y096KFt3GiD09pPzT8AUNHmbbZOnZkVUIlblQsOabuZbSY8MH01iMXPmeeXSDP6cTppSc+V7sXz87qPi+r1HXqWTU/TuU+3rpWcL04EieZjklLqKZUyJ/MzVnGuNrCdYik0RCbcgohyUUmFkcut7rBJ3vfAsTpXqkvW2JXktWkkPeYy9ZkuAIG78K57odw+h7gV7B/dEiWv7y73VQqwDYLzOxmkvkZo8NDrEZSkXFhp1bBBymB/yDGW8CuXE+XDzvMON6ovlU2S+cvJSWHZAhW15/oVZ9Os1EYalsaoiSC8PbO7T19Pkljs1YE88H5tfU30aMvfBeRLu2twlovp+zkmsZ7Lre3TUoaVsNUudos0Cwwu5mZgR+RjszEASCBxYy3UQt8t41UrDvX7rPScJRaa96JT/7lhaFCACHiMHuOMQawogE48Lsp5Rp4+7wL7GNznySppHtvwsLIGb497EJbXT36ldBHdssUwX2vGnB530oHhGRwfclqmNCSU65doZzJNiUkfTWFexANC1fqGn7/i+f2WesEfssJ4/ORSxbh+Smp5mb2LvS/NEGcWoGhg0X2ZMeleZ1M1wVLsbtyAwsDaOKQDmaWozY1ofk20eyAT9SW9UD3FXfsMKv/QngMWHDCdKBbq7ntS611+qyA77DlplCokYenG6e11GT8dYFa8pItPKgBHu4c4gvPeWuTN6YUDiIXJFbTrBtFW9n2IuYM+IRoccnldIPvofkQ7fOOdGaEosmCJGpKLmDAGjEiSqQl/1Aw4h8Wt9oHiEr7G+HzYsZVV6Q4MXbwuwk514Dz9IobYuxT8VHfuyFvg6qLC33aorLDdFypBmJdVJoYEcnhIa9LHf6ubPZFk0H+7VY4/EXuzp3VGhAdFC3IoxTXWWnP06tvU6je15K1IOwiGHbrCnnl702o/oYJTPPk+yimK2kw3E6ShyjuldU3ZkyUuWnQ2B2Kdub6Xw1EG8GT6Q2xpU+dGAZ+OWjfGPoFqg2u8H6ud/wWTqy9yI79R5+bbv6T/2SjhGvaMKMpLDpX+kFtx3spLyqcq+oo2WZS3eDXXrWRELy7Gx6W5uyoDtG1z9dHx9x3kBX9t6PHJGJ0DCX6HGlE7IfsAU29VIdbgMUuG3MUQPZQ8oyZjl9T3rNWBJKF+4STHjGPzfV2EpghVYV3hTYc7+DrJliUijmPmoD/VKuXKSpi3QXk5lkP9XAL4eRTtqkDeF23fYGdjCzNlV0z3N9SsPTW5ujcL1inPJWaE01r95yyQtTy0WhEOpECSUFVZvBGpkeJpDSOhbk0J9Fpelr8mkasCgsisE5dpnjsZerY6PG4nUmkIhzD2HNMRPLYQP3+pX8mDX6tFbCyNIsUv8L2/Qr75AYJdjVweu0L2dInPXFcv3c1kRtIw6neIeR/aaeWCfytyJQbs4hH98jf4s7Lh5n6RfjfRYZNjqRxHS03ibFu8ZU3cfqQItY3VZj3oj5zqU1xbvmzluV2YgryKGo8sg6o80ELVqkE4i6cBFgARGEMXloJfbA1NauzDspPUYeiTbNVFTAPFOZiynGBpxNw8gppDzeguz2kGQqyKWDtV4wYpwrBa8aVFTzTF2rpawR2f2uu5ANOUzDpnqlWIAIFs9iuAFTqK6zqpOOcfRaumkO9Sal2J+nbpz0dDXxHM89/D9XYYTT5ZdC/0MyH9DcpuU2h5Cy53tqbf0a16e85thvkd5XvTg+cylfYLoqEWJqK8SapLPjK8bpw1s9SFRaQd8nM0EKBZEgc5X4CNYth7Q48Y/EdHBq+aSvZHjcVhKaMR+6TrQ0ekiRrNDwcjFrHePTN+I4ge64XVpNvNb4mbvsCH6pGHYvGn+vwc6h1C+AxMb9kbbyKLx9k1FlsSkZAbJpPzxkHKLb49ILzzO4kLbf4pBpqoHcCkox7cpF+bV2qoeLZ/L2pVML5mbYRc1dGYBOgS0+/F4gCtMJGAVSEYPZtjIimXx6bNcrZi/Zn+HHTWXpdLg2adua/FF4tlY22tUuUkS5jTI55GfI1E+uEREwHLIozAlh+EzlN/i6YtiAL4iowI88BSkmEWFT80hTBqvknY0siKg74QW58wBdN2z4GDD8fqOOsfkRfSt0uoOZCrNwhuNddMAUWEC9NmGMYwpBdqrIt+Ij5i+Z3A6yfBCiMCygCuGQaSn1c+Hrc2Uo9SOXUTIYFr9Xa6s2Hcyrz911zGVIyO28Ug0XPUyJ+BCpcadr5oLmZHDVS+YClw+NodWPspkTx5+T8VNej2D7p+81Kt86rwPcVBbL2peHqkK0p/53uueeWhq63hxgbKqTtK3uH4Yw7TMjpYrCvSdnNbqjFLdzVxfZ5prhGss+SMksj2sNKkb8ctiReI01kwnYP/8w++UERKzVSkeBmWK0FoIy7PiiDPB4FD0jBr23SyJ4in2bAsIhTdAK6h1nRrT5UipFiQhq1XRR4abn2FU42tHsr3LXU681lG4R8aXYQ/gGY74pL+m6P92o1PRKQ7/4oZZLwdVhW+ZE00Y9A25aHQGqtoC8Yg3U+71/12MJ5G/BOOL2l1vem3f7GgBbz+k8BcKNN6F2KXKZa8OAPaxmnkn6dtfSc0rSy42Fho9SaSomENpEW4RmFelmhfoMLwvE0oCITOuTBt8l4DPk3kIEcQ/lF7WCS5Z1LDArdaQalYDBU55m47ts95Zt9xFMLT7tGjQDpoE7qA3eqtDmxqZwBTLuT11WXXmGhhs3UswHSISh5FkXGWCVUK8rcDNsSO3+XOqSH1727VUeH1HSjCdu6FKosy/l7K5xDqeYv3axPJGWTvT60gpB5lw5LA7NykL0GEU8gZmHjkqrqFy8+5/2Rrle9MfHOF8/wr2A3nENjoSVtIw1VNeU6jp5VaBoA//RUqc8fXIKg05JPpECJ825cloSjOZUqV9mdyH7h58Hut0d+G1nsLvYQ9Z4w1Xu5XbkgSxbZTnJNnW60UbFffW5yw42sds6T6E4v4DUTQVwio0V3LT9vIDCCp3NdvPLnwSqDBPGIc9DRaurpv0e95jJ2r0ieo7Yg6FK8y17K7A5x7PFbaWRDQK6yA6/fmIlKr0e4l2aVN8Pm5WW/t2dgfPiGyWE9DtVXXf/i+CdtJfppLRWNCUspXUjxyIZtPfIoFxVbkGN2DPZJVMcqFob0NtTUPJbOm89OAOewRlPH+sXXzFluy/jzmxBhSGB5DthmWzbaREq68IWn+SxldZzRtIxhl0AyqqVI2PU74mHZC6Nl7anqJ7WDdjCibzW0dRoDTw5E7gjYwAw9MPk890fzGZPZ8aG2rrnGUwZZ+KLdsiWzeijFn4BmSmxonOrtc8iPoKLgXrbZDPDOwKq4FZyaTZ9/2a7FFDgnDY15wdRp+JWFgvQZnqjzDPIoxaoys6lCWzyIiM8Lw3Hmr2MfUaG7oV95Ji/DZrQtkBzwEA3jdRN3NvL+xbBCbz4FnqxFPoXHn6fsTbc1JB3jmElSX2J6xHjk0Dg/UidKxL+7hSB8++QyQM89EHdOptmNZ4DMe9MOBt+py93Dge0Oh9W88lGfMSFbhczkRtvI57ZmTWCgsma1H9LhJUu6fzLbmqOp+csUwb8HPygUUqUaCag9wZCfyVtDl2BpnT42L8ZqlOLlOZ2H+ERQwMc+PITtBc/CB24qxqVIgGQZYSFbwsfWeuWcUF/G7sE/qUoU30cecvsL/bqJC4ZtVeepEEeDQvqZndsbGIfJ/dX7785/W0SneM4LabkQNdNPdDZWYFa7vVN01x7bzUvKo4SQOZpIMk5llHpTiGkZAzs4rZUtg0xGiEm3sDS8y80nijdSS2DF7lwf+Dk+MkTuxyhAZ61Ar8B7GOfEPKoOqYWp2SnyR/5e5oDCjT/DBQLRiV+OMjQiI4HzBHhdhfvuNoYKWQip+DyHqr4oTnBsNYHiEGMlSejZkpom9EGYYiavBpCPBK0SbEcI6sw08663lYdgfdKSDkg9TE7VWdmYNMA18ALgj6fwV2SwaVZxbz1rNWekcLGL+huGuS3Fc1PNfe98sbSXhTq1i5xWCxy7GMNnaskA8R6W5u6vldy3/7OhiqFF1/FH9TWJHQqO+4K3m/tvhSvseNam71oCknqJV0T4q59Ig5jTelKX1IvrEvSc6UdxPXmM43lGoXdZ531dLvqJZ7SrYb5YSZ5kYLEEMiisjl2NDy67CCKZEuojra6I6V7ngn08tlgwEJsRO1vqdJmqMR4PvMYsKc8bNiLKPQ5KvjGm0kQxEMDIMrDK+oRPiYK/IWvKDay1XL87w+4XhflWAXa6mXoYIL+nZSZrYC6qELuUkeYEUUNvX5/K5QUvm23IrliuRxHR3aHucUdhDunKKIBS5fCCqiD89hlR2wQzWpJt84mVNcTynz40Tuo1nGLGQRdmWrZEvof+wugwOb6PQOfHwDv7/N0MAyZMQ4xV23HOQhzsaOXWnYDKqnk6e6rdi4DOweWnTH8nMk+yw84JUswXJ4ELTkAfp+1VZ7p+OT9I/PpvMDmRgWdqYf2ciPn/7tW+5t+dMKAlDeExRBsordpoYb7MBNS2wSGiPv+vjV0s2Odgc2Rn+T3uNIkq7k/rZpJ71n9ZJx3r83emrrZcjR4MTjaefvmv3pGaG/jNWzMD/wo4YWsK6yS1LPSadeMgtSTS/iZLVEp4ERx+PVisbVsJOHIs0Ps3uQLU+D8oNb8ITXAWMfyvWEPTzLDVp4pRgTXhmy2bTdGZv/XzBul99a5i1E/7r14P7CVzCsiiAQV0cG02iQRuQ419M9qhBIFyLjZMVtV+buQNrJil6PxHflGTD5b4/UDFfuZ+Hmlc+1/ztP5ybRfABdCEH0i/oxpX2MZHWeDbs0NMviGqDWJWT6Auiwt4DuT4LVaRCAGRkUVOrAvVqfDAeAvLI0udGwiYsuYjF7c4vz+jEqAKeJhDpYGmZH+6HNN0G0kyp271cOIiKmUtTEGIA2gQX2QqIUSwir/9gl5kQ7f1aSu0yn+XHHPhzC0SUtPUi05MWYBHJPw++ARRiCAHYAFyWTacXrjvsjHDSpj6XZxBg8q4qGXQPnUE+MOLRxlQ4a0fbSu2X334YfOcUjIDK53aFx9NwdFrv6yiOnmNUcMwBYRQfVP5mSJ3njhhR/WjmfN+D7ouY0c7/lE3LN+/aBTxo1aRvrqKQk5+0/rR08B8gs4Em5/Wx1qNkIFTXFR/GpcLcVPJIIXIrxqVXTycdhKnFWhIH5H9WdnRAEm6hFbETTyTUC9n/lexfGlfDr6Giddt1IyhmYNSl1gTpe0Y4lWpPyxd+3jgDjsf9Al7DjukSfSHLBzhqQuDa0aNxwgkKjRFFiWxCz2EwY+xpfd2O52purlxV3+OKoySkxEW6G0NN8iYdVc1BjA1jwBKVn0orTCfiJzbWhv12zJVRmnBx70PMviYalyu8JNjsMQlEK6CVLFbpNvcjDKrM8Qnl3v6Q/rNUaJ0J5BP6YvaS3fRv+8P+5BAMU6U4EKJwurLv49PXbkshW9YYrC0p94PQiFk77e4qIg/BRa5pKi8SE/3HSJJ4w+oEZY6h4FAuZ6KFQesFuoM+XsnTVLYIX4qhGHfpygOfG1VIaPcgh7UkKQgMxPZ1Wqi8FRAtQOjE/FuTkmocMcbsfW2N6RKbwNu8MEEL5RyBgPzMqfYljq5uFZSU1qTfXsS5n+6PuSKIL8Ri5/PzP+TyHaBmu8XK7DHGAaOr8gsH0FUGbHOmdb1HJc2qjKsfo0e9qsJaWdePSRDL2FAW6+oMgS0WL010SO6wJBbloBVLccD5EdpEAdu5AQXCevtQneoBanRF2NpCbfkpFlZxnCNE1C2tPcJ5ti0xelcBabProa3AEEuzrimcVLP+RMttlTfITVdLFeKswgtZKAIhdR302iwoUW6XjViS2KzR0UZ0WiJet3y73J+FdEuYqpSTyRev2Hd4WHk6ata/lmIKJiO/o4XXIc6KESCtqhJoO8nVihUVxEaPiw/spjIKT3E2XBLtpE+p9kZicx5/vXdquF49yKFF6peg7bYYYD6mPx4QnGM8Rmu1oWD000SUJT1TwlD/7j+22A6OTrVBYvjZF2G8e3bVKvrXBvW9AONSKGGmCXIqYWp39Jlq/Fb0R/zxJNatoRFzz2nmkIAeRyZcasqs6mZW7FKu47BHqPdJfY8OSXCNIrWMRtQFucl6kmSblyoQMbRFhq8Gl6agIw/oVQc6qiM0L28dfgNhoDTf/KDg6chLzByefcjTi8Wl/fevAX08oGyOeoCaEiivj/bk0PrhAEL0Lau6+6o2Yv4IafZh1dD0OeojDO0PX30NPZgxJZ30qeqAJ7EM5Xz5e93/K3L79EQkagX2JQRVAPc6wifYeQTXt1hkmYgPAj9k37ImUweJeyIsa4+2iUtftmpDsU7DFNqVBGtz23gjw9USgPRQSldnMxVbuMYAKl8m7zaLRWMYAZux/xwh1pglWZEULubvexaGCTYtRWn7nxYAHHJMg0YHWychHKkYHTcIetOarHbTEn/0l6+NTICZ2zSqgvS8zqLHON2ilKBLdtLwCDM7Bw0RRlICa2b9KYpfkRU4pqC1I0T7gPQCRzXri/FAzcPp+Y92CC81Cy1VK03+Ki3QoznoVXCIjPSWNbDMzzVOGrtp9+Qugo3KmE14dYYue+6gQvavMDJNiOACCMQtKmlHtmZ75qzS+JCbdWB17w1b2tmg4S7XJJp87Ug7vKUi3w7ZTdeU3WMlAQw3duX3sLJqXd/TNIJX0I06TGnzeOWoNvNbxv/G0NPfuQM5cC22BqSbSlpUudr1nMZkn7FHoufc4T7azdzlDyNC2ogZ0ppl/4vVgPRF34+xUEwFEDaU3NiViPZU2hUF8K2ChyaxKw0Td6c89GNHtTiVMmh8jRSStWNFE/NpLrneRsYzRehOiH2s0S15magMXSc6HatSQjd3YhVsUyBfpAbWi3KjWJSLw/giFmNEdQd5a9ZllHYpxArBZE/IPoit0N4SK9V0tGzchEpGJhvEXmO9H/98Cq4epIYfwootHVAkAV7gT9s/E+wQL/snGMh5kyxjXU7GrmASNg0KVzrumcQ6EGDpGcVJrf4E41DurboJg4pOprVH97HjQglzMmtuO696Xs6VSVQ0Rpjcdrjj91REXo2+Ju7WY0MI34Ehjlx2z+tmLFLysKxyr3yevoC6JGqiJcR2Z3mAibKrYspKba55N8jrq9g34IODXMfM6WEIwe7bF4/Ivo6MQZk8uK9NpLbmfZXxHI75KIDJB6+FnysK1GMG1NZcdWZ7D+jayBJ7qhwq78+rWSIO4JECv+FvB6vt/2DQG23c/i8xw0DphlcEIeC45G99NQezerYhPHBrRj4XRV7W7n2AHK5UKX58YQ3Ddm1qqpoWhM6shHeGmQwlckcH/NFztBgiNi/EQf/4LAnS3WCyx/XQ7JQ+Cm/RDEMtEHEg+aTg+PzRWVa9KxDzbpCeyvN/SLAF75cnZzF7M/4NMcFgdsvarphLjU/lIG6qOAiwnX28HdaELYvJNDJcHIRGvr3tzo1FqXv+dLSYKmSQVcjKuOBJtffjSwx/GIsZCcWccvefCZ412fbH2VAr2j7gkiFXefT/qTk6AqVdRgDTT1HIlRPV+11zUiAcZ924JBmMt87PvPzIRUCDxK72ChKvDhzxqSosOs0FTiy+vcmtvofphgN757OixOSq9dEvb24EC7RXgwO1aMKSJPhzU1oF3rhlX1y+rSlwY5UCscigkhqJyJhvQ/GYYsDl4+ie/uyD1Fzq6eubySMBWA6q6trc9ArFrpP8W0EU+Wz6d7hAR5AjhG/ZMMSngQn9WS1ROfVxjmdxNrBb3zvHK18N4kxeMD3IdcrwWnuGaJhxdNWGjqCWbhNvL3DCmCrvKLm2gjpA6xOSq1HnCIV+Yyw+vz4FAHDrDdLSJtkoehVJm4RuUEeRX9u9RJ6a6tqrrm5p8RLv+hdvnF3Tq2SKvaCNARkNOH1I5aSWZo1rCfbRkj9DUJQzmnHwZP96oa18XdisCmLSFCVNFU9Y8+REbDxBJgI8g5S5wpRAHWmUEalSA5u+Q10i7hxmRRSYGCuq5qgoIRar+XcQbfWnhX4lytP/82CBzXecdbfq2hwQt85rWlfxZgNeqQZOlFTroQuQJ+r7F2WfSbuQ1nauMO82ByQTNUwym/0+rxBnnmi3BCUHGfyBFntYPtEuTFOwYIKcRAJrsh76SI7BWt5q2eGRTNXa2opAxjDfm+l3lL5lBHzsKkoPTq5np1yCUcxgBpe4juKGPJuXGp5n5O+Bo95Tzf78TfPAN8b+aWs707A3Mjj3PL8sSdqP40NqrtL3hcki7ZG6AE4YYZ8YPrL4GRRhwF7FLTCy6mphCqo0SdyMtwbvoGjFFQ1Bak+zy9bAz8+rVwOcZDtOEeFw6ui2XvHV2XcqNO75WzOeUKebrxa9itw82A1hrZbK9/NN0wp5cPy8/pe0eIOHE3ApCsrpgMXPz7XDCv/WjSKxJg1FTdAPZJEyATc5Ywsq6cSg70Yx7yyOr0SD4+aJwl2yAP9YdkfMDDpSyfwLlWW9c7QxxeoIDaHDhl/PDggCI8zNg9rnYTitrXX28k98UdWV8g9oNgUaR3mo7Kwp+JeK++4SOt9THh5Y3b6N0FziomZGMfuZkq4MLHwMAGnXF5QYtoFw6QolUAFgWtdlys9UCIU5rJNo9Nl4O05Qs49uJdGgnxBsl0D8R4EfuTO1bvOkLzhfZE1ktR4JIKfqQPSwqUuYZUcmdrsOX9YzdiT8g/Tncy89gS2ONb+niLdTZvkyVpRqFLfgsdq1yjbkX8IFPaFg9pihlynO7T/e8MqR5uaNcPc+P3+FNrltUjOeyj85aJO8wQrOpQ6eAF4yKEcnpPZ90qOACfHjyqpd17F6SlRS2r09WaRU1qm0AHQRXYXm5NL+CG2dZX3Gj7BDyJfd7nC7nJd+g9rVphODOxpnfdRG4oK/VGfNtRknlEgCpR2Le9i+3XIX0TWUEUbQLqsPiQYzdvVv78iyAfFo+SzheJlXH5YP73mDXRoC6BNq3wy8hpdtaxwJ/O4T4n9tENXDobRW1PStQeOdBtyHg/KuwnVOPwc5oj+iSu3u60F6QFPe8SjVT15bG63QO4QQDiLwq0xdembjP+b2jdjn7RhHHRdfPdQCg4LfZkS14VDJvU8m5JX9ReUfYTRHcXNgiFn6xSMCEX3CastivRgd08xrHMcpowZ/MM3QI4RaLnq3MEBLQtvEn25sQ8n9z6rZNxjvi2DUOGNhLR/4F+eGJql7tL57rrWOLllc9iWdXbkHEiFNAFjUctLKP2b9NL11tzRbcDywQY9h/A78F0j0bTwmj+vhGLZsYd/L8z+8g14LASm9kWd6M7yM/1nRkWT+9pylau4g/za2Whg4+YgIKsUPB7r91B/Lu99AIuwBj/SNCcOz7R6YKtslZB7QeoTGa4wizsG245wZTkVQLiAHcKCXbx07F5PamnEow/p7hFeOFZQrSh+qnNjV2UH01cAvkFp+I/xilf9ElhzBimi9BFEdjO5btqT4xDvFTX5xff6cyOMLtPhDRR/kd7mAugOdpC4YcsDRqJAKiQMAqC4J7loUA8E/faNmLTD5Dd76rzEWBjpY/D7P5Z5e7WHiBfl3gaEvNqcAD+EhFchbDaW8MgIYSs1h8rHx3DBqpYElCsiKEjwUDwr854rNSl7ckS3/oIfeW86hq3dQhSrhE5u1C2IoBESn28F4BdECxI9lzgnqS6LaPu7sdmH1waPh/IH0sfV0DGYv5uS+ZMmiy1wAh/kp6nfjhMvXo+bp0nssBcSAoIeg14BBkPPVQZSVksK6Vfvi+WFhrB0GMgcxHEtp6tE/cgpnIY7QsoOt332dXYQynyeZaIr3v6CIuUIMByTk+DYI6paKz/a+MmQQ5UCliw8VVxmvH8guYgtnNASQPrdI5bVtM5MINGI7TdlBMJRyDWxWTitc1+UV7nuMqky6jN96NgT9u/JDDcQ4rhkqpfAQ/xN8J+CqwxmTp8Tk3Y8Nhx2PXE1XIvtmusJW9jHcsRypuaRtpBlWdpg/+74yqVwr7B6KQSUmbFqyCGFO48j2lWjRgFXldTn/wMRkG/Tahp4haZOJu9X97hV3zs6NS4oqACOyS7dLvu03bIOEpserzW4BHvNQuoXEO4oQHZUEMZlTAkdH7QcrjjelXESvkLvJdAeBGnrZ0B+BsO1jg3IeDQWvpfUMD8pk6217joUT8zqCq6JtO/ossNtr4yQqP+V9rcGNwSJ3HzVOycWu4x64Oufr0KzxI9Bl7gUT+Wb7zsOM0BVHUwyK5RDwDqQZXv5GRvSHi6MjFuMwXEqlIreRC5Ymf8HJmtqQ2Oy2S1EpKG7vkxkwzFk86Z9p6h41WkVl4GNZEGft1OzxtxuFpCjKMxKONucielrW2hvLxO7ta5p2Pjq7kxaza8rCm9OSrR1FMGByJjschIVA3ngxT8bEbmzzzokfO1u06vFF1tuyErZQjYJg7lIZ8X+yWKrgIMCHhIUAHr0Vpw3k3k20TYUY/vvwKfT6LUJ6qRw2srn/WlQC4UhQLzcvjUEymcUzGqPv6zoOjhJ7vP8fJsmtHCBEqr7OzmOU/x1aiHpwwGj8FsutysbretJx3l4d7qVNYoH9z6qmm4GZU8tlSo3TIL9yZ20jpn2KauR8UWx7ITnk+R0JslrwfmrSCAyW9adVzyPijqz1HXaThTLPWf+SC/VHqI2OXIX5IiKCWnlVneqh2ziw+OmCUqdvHXJuJgPG17zvuQwh3pWjtt5GP5ToR4Q8oWUnbUobvlLpID2zPqLP1OGkXZVmf+AzuoYZVCDpZ8GU5oYo8JYLTjYlifpcs1tQL/clnB+Ac8S0Ls6ML4Kcg7XAM8KylLwRjdQn/enNWZuYDxvTnfZDaBGo5zMVb8/RKWjJh+yFHTzEz9tDh07ZoiUPXUg5Jya6Nb4j8mANqwOgFxlJE1AMOCJa95qZsNTeE6CBMR9KLKAPlO99kyHtizaMo0xiBqV2a+rI5o4k9v2DGBGzIp0/oo/S7JQAFFlMBT9xXoyu+4mK8tg1MP1og9sjd8gQ3W+LHIh+tJKmLQdXOmr2smpAW9RfOwmmu/QQ7hkvQ94ORzT33KCxkzpKJh75oVsrm0ujYC7DYdvSgm8NbcaVCoVcDEql3EnumMPsyocPSb9Jt7CtJ4ENjfmzI/zBX84TTpFje8sW7dSIZWUlAsh7LqG307f4G03wGBu3EowZsXjiUpemYbXIx5JxCzLYczuvXE9AAb5N/IwqX5rF9HVGk79Ixa95kUBvJaTJhGlm2rSm/PTqpH72ijBWexGdpejD+dTBMz0ccpuwmKySfAWGOMLVcEa5dW7BJPL4Mdf/LSCASDHjNqzynLrVzU+97hGsYemxCkwtIC7jtLvuMTDoEsORjzSpUuM2e9dVKn/pKX2u9QUSAPUusBjcgf/iByrK02tO8ccY+gqC5ViV0LpS/89Pf4ujgx+Vls0ExXPOpqi5iAx94/fqhlDujGV6sRk4U1rsdUvQ+uXBY1kHxhYpqjzLEFO9HIW/hAkquOK8hQle5fTSepEgi+cQ5qEeSKXkqCUBDQbBxQeCEJU4zaKQTT/4pU1rOUenrnB4fVBfHUx8Pu8iPs0nB0HY+F+QdJGK2tjARfH2VJbo+PimPUSJXrLvcXy1qJjGWMvc2qSCbGRvQlwU6BVZFuQ07Os9tR4ZM/PH6CY/a+Dv26afMNZQ4NQ99e5etWsU9gE4yo7sp8cZERgP4p5FHiXZB/UpTYMbz821Dq8W1GFhREc/wSKHYCylOOasg8v1cOy9jPoWb3XRHZlc4M/9D+6UyoABG3+0q5fs+o3wW2YWyTanYJ+CJtkb9NDwohGLhOnD9hzzOVfidRrHVp0FWX3YIBNIJ2OJ8uwhW2glBsixDPcHtEehaJSPP0zjHGXZvRB8IhTM9kVD0s7jgrQm+DAC/bvb0ckGJQqfq0F8yBiEsgLfjb8stOKtCadUxdYAQrK+9qW0zD+h/zVgrHVFSmlAonNld77stakVMvNRMJWGEnvBjNQGkyVJ7toGuCepQXpdcSrNKoOJemIquUCI6Vy1XUxhfk3jK7rlE013rPdnjJb1x/KgUZ+jd32exonmNY8/f4AD0ALI3BohjxbRYPYn1fDYvcBsy7+gu5xt0NZ021raH5qFEG96jxAa8i8uV3jNlSekGAQrdRPYiV6aj2+u4X+t6I2dN7JiOp6WqhpOPcLSz5NPOPSNqXpLGTPuR9WFfPBMVf350q+fxtTcY8UGCKDv3WLDYblthkc/ug8fSrjwwLOAMBgwoInozpTc47ddA1semlClBvW6FPDobfTBzwyVylQHVxXwy9DUTDFb9IfZcEm/jf5Sy5vI7QHNs5EwkLk4F08t67Z9Y6WIkOCMUU2u3H3OLxyu6B2YVrGKsbDVBh8weEUltN6iXb8O3NJMaBFcusVjkSEK7wzbQ+Y3gkZCJIK9K5vIweUYW4fzZlM/l1osrQ+eLam++d8MZJOTof9cw8c7Qbzn6xDXfQGZxQvR1fDOiovwpm2BXxCZoQt7ZHXj2sssI1eJyXoInO4YwTN24Yff444kwzxcy+I0mx0C5mylXqg3r8OlMvgeYe6gkfOr8bxivTI0cvcXNh2YqPqAtZvBUF8yTPqnc2tcJLI4+QC/DwLV7xBIur7MfIO379YUYeu95J4WX+WBcvFuw2Okbq4WAvzyxG0WA2tGeRXt3sfpus5fXDWdE98fWLocwbSPUp/vrnghsFAuERTdWvesjKFsrGekO20+ai0vfwT8op8Tyof4itq/HBUFlQgN55Ga2wH+IeVKvMbcws8YTMuTuGVEoI3SZru0xEaqbi1j7M6cSHC8CQILr3M8QrOrk6chf64vBP8TEDDavZp16ZKuDWDCZ1ZML/FOTDnvnDlXHdX+nvVhXQW57WJTSKPZdLU9f2i4H1x8YoQKNgL2dWkNqZHtay8sDPJ+hP96ZwFE0aP1pLa2lwPjvqBnMVDS4P2YNfD+buUEGV7ewhiXfvMPa8F6pTdfa0HJJEqK6Q2ibDxSK1CB1p2IpypceOz1bmjQmk935uNcNjqTSxnhj+F5sIVdzrHSf9lwGfhxjpYHOMpjQbicSKh2OAO4J9Za65pb6zGfZdtJBB7hh7rPpeG24V6KrB8AuqFRXA2OSO2ns6F+I7zUUy4lgH/TmneWvSxXuxv9ERALMQ8S3ZloGSNcZT9jn8P5bAu0Fh1vQvxGBFUqqObtgccLEYSmjhJ6tqg9w0cyE8NAKI0N9nHHvVsx0cc6qxYyTr8tr2t5RUNLuckE/D7I1REUIOye9rGGa52A6aT7rEdxDUhpxw/qWMYS86q/cW1WlwihtGCXdnNUXY3Z6lBIfBCn4npiLC7J2JasIgisj9xfArmaHG6GjkZG3KqZ1F60cYeu20iDVixjHDpIfHNYNF5v3Xv4OvsaO065VIJ2iok4jnHW72WAyQm+2Hs3gQJfpD2hB5BeAgtN0EEA/cf+/XM4SazHTOnc+j9K8x+Op2kUSTcUr7alhjoZkD6qVqqt0mD3XklG9xZj/vAeH1d7/QHalMwO9TZFXj+bCKCDQxl1EldHpnxNMiLCl70dgrYXgcwYkI3iTkBrPelfo7BcYNw2vD3wm7sl9IlTFDFjjfvijSaNeZwjejMGCtwjYuCkrHBWRO47bFHoSV5IMZoauSfb6F0JHWx4HxJQ4Qzwv5GyXs3YOtPueSAyUaGYVMXoEZy7s5xFmKMtzwSlQnNhDcKIpQH68d2rIK3BCdwI44skW0DFLyEnGLuTY0YWx8uBs7NYLLNZ6OUQ0i96NddeuFrObkqkcVOM32WPuByaBadA6YHot6ldqLQuYVTSlp1mOyz05CyptnVjlPsEtLGcAS/sFcODAEIc0SAVWkd2Z07GIGlGJCQ2y1l+L6jpWH2asPBT9PYIj+Opgnx+MTO6CG7fSVOySurjjv8DnvKkNXCDVlcBVW6+ob8xIL4StCQYE36kAOHrdp3Sy7hDxGUcDsxiabyuQKCfKQa4wGVVqqKhnPcc0pWw8KYL8c/lOJEpS3w0kdiXiF4N5DNpGx2jNu0CGnlx2qFrdc36F3VFXZHkrJfxHt+EnRv+E9J2/g3o1X9niDUQ28Rr83xVmNq1Gv1Mhiy5YcLLAiksz27GvmywQ9M9I4ImljI34tnh9+wz0avDZwuERLy1axu1zimTSlHMnqrzcZ+05ieEq19yGG4CUvXKNlKezemKBigocralCTKIdb24h9G7cmO8/P3KPQmzcqv/M2KYqUyJ5kt4wmUnqEgO/5jEdMCvXfrDXaPvggs6WU7aMTJep9Ql5aik/MpRCUcDz5R3YTk9Bm0uM941eqhkeu59PrmmYz5WVlDoVLTCIDYWE0H76m9maKPVg/re1lFC3nNcn6eMtH61Rt2vxwxw4o7VeM8OTTLRJ5HJl2xQQOML/Eh33/7u9fC1QkhP2BszvPB0PQ6vBR+T1UbbGvpm2A3NPDi5s6UCjzyOa/y1HXTWyi8Ltf4ZO9Li69avJTVwY16xZEGar+KTIDYLy3+ABkvVAR6y7yQZoMpC6Rx47mTMphTDRW9Np7DBO3KbwysphHK792Bxc7BbOa+ED4co/KSGZTe/IzMC8n36i1B24+IXKFdwRsZFyV/lWXxbaXncWMPP/kVg6gI0AI7PIhDwcUmvnCZ8QLaL1M8YypGq1XOtL8flh653SbsMGmoFVnqn+xtE56kwlAqoGVXBvfGmdpfoQOu39EqUMDWQDuyNmRJiAwx5ECl/jbU3QryGMHnh3GuMgxzrhKCjW71o75YtUu4XpFvhaum5q5Fv5gGWif8wXVJVZILHGACiiAbwgEKiYFUdFdpEHOHQge0jMk6qYAgyE0UmYEm603BSGTGHy0XHoAFMxn9FAwmHCEKUPwoE2WgH98NrSexTSkoflWrYhNglgi6f0mOugjZUmE0SmMDECXb56DobIX9zugunjvzyES95WEGtJIlySler12DlWcxSZxUoUq3IcgHExRFMEcjtamND/0xioK/vJ9cddo9/1cusR2HfgwrelNI7EMC82fdzGxssrsTN20DO4mTZbiwhjaRT9bQafN6A2KBQ1Rp4LYJIv+Y40rG++UPt90rkTj4YXHjrTzg3EsjY9H1/dTzsUvkK8aN1XsfsRkWq8/W5Y0PJHqtg0OTtqQTxoNt8/99k1NEim29rZNqdcjApm4Vzb+3fYGlVte4TZMcHjY2ml8FBlTyfkqPA2tqRqXXGGr2Y90jPnpttQ83jmiGYPKw53xJciq+6qlv2mJ7WGLj0T08CxvlIrfzErR8IdCapUj0Bfuz+UoJIw1jHNgOPJqwJnYnzhCqRABu7uV8kfErk/QqbKlsruj2PyCzyHPzmlL9mzclM44hZuZl27LT3emlG9hfjK3kdSzCEEZLPaNxQjyS6BNJ2ZZGHIKqUyuf0eTRQleEkdazE1H7StIdA/2tD8Cwh550lQZY7EOtjgEcnWCydxFLTaTRv+i2j3qTCI053YmsNzKYg7gaBrGAezYgtJ8ojompzZ7wXclU1eyoSi1dprX0zrOBUo3GqiOw/2zgMoPHDdzi0811hI0iERb1rfXpQXYVj4RIABGA4ObAI1WtuYJF/aDHnath3sIChNvz3ltZbs1JJ1UvLs/T2kCnYQdKF/XQSXvYu6FRLLD+a31TeBDfpc730eEf93FMR8MZiKtY+eb7Tqcesl3lnkEu+7Q6h9ONx7Af0djeol3SyEbRXGjiXP32y51PWPPk/tvYWUCNORrw/30y6QdJ0Fj1PHh5NQgSsdkHVP3gVeSmd5OOwRevmOl8MJcQ/1MUMTf6qW0Ax/6Lu+G0Qeo6w7/QB2XCf9HRO5wXfZQMVOkrB6q3VjgdMv21ip2lO54mYW7a79M5qWY4SVVFJsuqEYxKFzbLjbzDSt3JKGl5+qBMqF79LQGEt+B8tDFLW+erDoZI35PXgTqRNt5N5ww5ax5Zocj8W51n7Ge89Cm+tgDNMQO4aL83DRWesX73DJgR4OTYOogyg5fsYTkhNueI0xshvo9RR8mYWSK6bcl/tJLBUGYm9kRKb9UUrR/Ufc1Ir4Y5Tv55JyG1FUKSEo55QRrfLao0FLDeT3ijLTIeYkT1r3FY0A5c2jBGHqdb4vj/Ym/1oGIHyZlaNXQLqsHRQImOZPkIZufR7wItsQ0zTjzkaFPxMkYWym2qLWF2CvIzcwYROhQ+rNFAuJWgUIkxMKoh3zKBxvJLvHtRSNIpqPwiNHLo7o0hkzKeJ20N2DaM6rZMajc5fNMWB/u0Vpub+qPIPI+wPXl8Z4XFeHiy4i9FLE6MaAA5GnLEEafi9zV3JFc6p0tlXkGnRM/4REn3vGvQSa7CpetWUfFFFGsn+8DX02TeHTyqLIXIqLuvE8aL9nPo1tHIlp7eYvxyQNu6f8Ck/UrUOt54SamlvUDuADVn4+/wCyyoiBEMBPc8c96a8LoiLHeqrY6N8VwkBxSm3r0N0mQWTfO2Ypf5asffhTDn9ycdh/Ag62nrnpa4uHsFw6sWtz7deAe+RBiYSzTeTSVqK8f3bD9qKJKOaeLz+uflervjNHCHwTyQJzhKL4jTOCRzCB0Yt+KvryzOWyVJWR6ZuC17HHzuD+thLK+ILJeNvi5cUM4bYBJiNmOk/u6Cq+XDzIx57dSicq8tpgIemjSI36Tv9QRCUdRTjRyIZeWr1pU0hqF13qi6wak+nUNMMRZiYro2WMKKigKQv2hTdJ3XYnyfnHBVLiOBPhnOjyLhXNd4KYyMPNEheY1j8JrK43P4oXaBVE+/UXebiSHOUohwIz2AYp8TfwHlN+tYiIwya8mcQ7LOxrRGiOTZiJYNIgF9QCb1y0l66oG5hdHWYEpfMas/AnDUNlbo9RS1NWR4a1PKrn7dKIcCucK34/hUsdM765OO275TZ7x7ZjK/p1bH5saAFgjm33lBWPd4/i+Q4FPsnKmBntCNIcb1W2qZfv2gwWfZJshsV4iSrA7A/QZalqKimKRB3Ps3dCI9kIjhcKAhZxNARN85hL1/LIuyT207HOG1ZXKKaiF8WfF30aVzHeZ3DgBUsHzaCYORyq2pPyZ47vrlOjlDMQNV8BKqTCBJOQWzXiiAI3kCIuq1iujTcKIPT9IDa3a6Fv27v0HOIDooyRsa69ekfSU2zDXazT/mG9hbIfhjCtgkliAxnF33ID/fkVWRR8vmiiaMjZxdrk/isx6l7whGNz8i5I0VlcTI9HXOWYlR2SMtEcwEQPFQHD4ZocsWnB46gL2T51voeCMj6Wem2XF7PbZAwm2N8+SVBG5chPCXrcXjgtEZ9bZyI5fT9SstAbY4pKPoWPjpgijkCrOP8WkdtFpKdig+vC/82HeitkFtxXCv7dZBDsM9EcSkBfLO2q8q6Hcw7/KQ+MwVB/yNjv7/ljinanFY/uqFgxZsf6d2+j0C6dthmKXCMXelm6g2tjG5WVY04IrTB1rq6PF0nHckeHWBYvs69cyIvNxNabhjBwPaFn39sXJVxL740JtR9eFQOtFo1utwEIIU6tT9/RLx0wdbqO3rOhE8WW0HYvWPC/2uMnoWXxSa2/2vuvQ5Ati2K5yIhKtvNez8zx2eCxPcBOI5f0YGmGJHypHGeJ80/2VUNRXL5mOYYAo74mG4vTQtxhZ7XY54cji00cZxya7PSYx2dPElKBVcGp4AxNIHa8moQmvZbwEcFIhLXmC0fzoNaywYQVOCUfTZjW0A9rr2VMkzHHbycwvQZVP5HJwq+4ONgZmUdkiRBLP2glBgkOphDWclznByG+zbxIsFfIHlM1ajMyI0J0M9rdjE8PKXCIF/j/ISWBGcK/Bv0uBGaNRgPvptWK2F4q5GaqttDfYJ8LiibGjnDrRArRROLVQASLowZneUg27ePzAJqoiFh6saxbdm2z8HbCOetu0d1DNR7vf7W//TEOxc8hXPaLFyednokEcWNueayu1ExhshdDq83EhlBS1Gd1XMFseKdIS/hKei0owusKn9Mep2K3W+BDvuyGJxInFtwyZjwgQJ3BVTR6C6BfvKTBD/6aUoLTUM2jQT9YAwrq38uRvZWe1F+BLtXmd6erUn8i8m2lYESRiXMdQMsVQMNLnsJmi6Glj0DLyAHtfrPUbEzAQWrOmAxdaDrYKw1n4yZMLKC9szDuXDSjwVR4k5TOPpQ9pgR+KXvwZ0QPna9ZYaG4JbExKiteKOqilG02XDK+kZsoIPZ7eC31d55yTqffEBj5BrjNV6rxWOCZTi9wnNTRdvDSIodGkm2l9hK6cwwaYBUszA4l90Mt9HanxlebA+TCqGmkDFIoDGwo1RFhh64Q//ZWfu99mbBa8BejZ6tVZm4DrhLtfCEgktgfDrCecsX8i+vTJ4yn5kOeiBgW8n6+EexPOTBcWqq7CRQe0hR0Pf+Luz7x5ZN62K1yGvA/C1zS9FOBBuKaOb6U65N6srdX4krpdiA3/KNteyqxs8ueqEc2mLas4yqW6YtLl5mAKwvcH5B5rm4j4hi1R598kp1PEqk7ObPku7P5LEs20lUS6nUKVdXW22SgJcluZjMZjxvFmHaCIqDXL+g7tzuZIk/GPvt3lZ1cyzk1oXM0cPLDiRoBap8jf5xoi0C7TDxcbEgv2umlro3AnWL/XH60ueY38CDESdqJXjRUYlFGcvDIwtOJpbhbb5aoefM2oc6FO+21pkDXqLxdfzcZS2k3yLOlYvUSG2wyUN+5vNcKha/Wf9c9qV9K/PMfFmc+wn3+146TpHuImZYWjtavscurANtB4K+vyB0hceRE2Lnav9q4xnGzidUnksEVAgBSLMHqTTNT+ItnS5iM2b52YiJkMdmDdpR1uadUlZJySEapVMXBhctLCLidFtgDXuSDyPlmRPnqLX3PL7522CPm9b/Fmw7vm33HN4w/81IYxGoO7LbiArzZqLVKoUI9C4JJD9lW4TxBl6frPJw9SRAhU1h1IdRDmYr81kEmfcOQkE59U7WAFE1h07f29Dqfgvc4V1l2MSWaGeU5DTiLH4nhk/d7RsNpojViBH0R4JleLtG4EhccGxA8WamNk2hzkQExxz9aZ99Xj4VfEAOAJbRaNouVOdW5z8wuLkBfPvCsPUfMcQEW+zZYINn1rbfw7citpPfwbh6a8MDFkfkTi3fJQsQhnFADKFJf2pZwPzNM36CHyzg0WrmKNEEa8M4OkgomLD1w0wFF5H0W8P87SAz9TSSxZa9G6mOx+sdY0t7NOTwmlWMq8S73TIXkhsdjL6KRVruRSGE/rT+nVZept5J5o6G8Qz7tsJWhpIZ743oMR9njyB3JgWRcfsf5vASOTfw1U5IjeBZJ465tHsas1IrUzKsQBuL3gRPKPykabt1Z/ZCodnKanHpTNY5ZZ9qmDUQ6TivduAZ+/BUC//g/sl1bJ5Mnfns8mkFS6uTK/jcYvjUpsvu2glvxO6Iu9b3uwzpTTCh5cf1LTHfl3UsA25kipe+s7qRyYQQYn7GaH7I3NlYNq1AgY9pMn/dtXun09Bx9HqCc0NguSc6To6GU33JCjrRzMxCH2NpottSKvtN4MKH/kYfzA1VSyFgAg30CUmElX0vwiIf/oOr3dNaIsNuFPtqc+EDTo9wKzzKQyQHCkc0qL5PhKUwPtfC+rhD5sGKXPF8qMnLOkhwqOleJvHjIy+1QsSHEeU/OWJDU6JuUg/nlOcr+oQn3RLW/s2EDzzYWtDu/OH2caX5r4xuQCCL62LPgAsBgW1jo/YwVzvzxJvayw0sduFiZiSGLIB0rrVXYwW73ZNA2cJttESoGOnGTSrf4jaeQOCnURQf+1V/4SN6KEaRsau1k0vJVi/OMcJVgTOqi2/KCrgtFU1S/wssEBerRzABc/L8pyqBMhplSm+kwu1XnXSWQYjC1902vvFv2hFPc/Q8YaT6f55FMOFXTK1X9ZhmhOLDjTBcO1pC50yuQejNbmm1o3ASmFNRDyx3FchIy0uwG1m9+Hvi911tTwLw8WP3G1tvvCLr9JdLxlmJooVqvhvRuvgdjrLGwmG8dU53wtRr3fbrPvC0gVtfnlmCvkvrQfdmc/PIASnniTq+bur8AKS/D2/1yOn5J6+SuSSLRjXowm7CjVXvgDvzJr8VVcNd7d9IliY3C34GZlI099pcUO5Vp22vWWBmDJo5EFe4Whz+8V8tDAbLsBCYDY46pQqrd7go6Pr20j14L+r9wVE4gVIqLiTxoeCgobEmJwKgZUAZwLtk4b7F+z5x9CRl2k2rZB06VHts0N3CweP6962oU6uPPpXWq9urb5THPizzsBSMe3OezBvNxNnzlfmq0D0d781RVj0J9Bi4YyxiAczQtxm9Nxz/Au5sWXsv/Ywv993PiA1qBJjzbLJQxLU2N9twqS2dfw8/NZYaDM90fX7m+25ViJSTCDq+2HADo5e1oCSln9/GBvXhJOAF+J4GqV1RYJl2C+TlScj1iJ9skSBPcJn7RFAyYMg9R0cAdW0EZWsiUPyLJZvG3rdisHRYQ9M6red/upYss0ZwKMAwIv6EZhWWMgMocVDOo8tz6c9pssrEjkQEM/nRuOu8Y5ToeoyJefBUABx2VLibJ+B1l+j7AXV4cjalTnalk0JGxJtiZKa1quwHMQRyE8O6vnb5/niWdCaj7DULf6Lw9k6/6XGXNcPLSm/BEt43XF1hGlPcTSixMafwU4DquaT/tbzcrYYt1xeqjf1itT6vA7f5ieTtE1ZqPAqxY1lnIPbvsW/uCPo7cg/GuHoceG+WBHRmoFec6cMIoDMErquKeWkNROHdd4kwncYmPqwgqvALdQjTzyrAd58OfzvvPXdYQHbij8a8wUSCrkpmakwKXZN8sqRWVBPv/1qtAgsmmXgDGdTnf+7vR9UDpLRyAgDbaiR89FEGZPld1FIsQyNZ/kb8tcvBHC9UOG4vli2M3FoQVgZSeiWJRTPER27jePqzpGj05ctzqAdE76rkpg8Y8GoBngPqtVm46eTRP37wv4kCDxk/2UwZSwbA8dNe4nVYPu0EXQkBLdiHIQ6GQpqWD5YAjB4GcnUrbI5WjdHuhrv2ddC3FNFd5aJmoklYFJPonVhkQSohC2T2CYG6sZzIIKWk6pwCQ/5g4GdV7tW8kvonnQhXxvP/gOL0170a48GcYSLYsPGu4BmPGiWy6rErK6uGXHm7CUfjsCgN6HWO/D9EJHakpAj18uirzm4exUneE8C8koOWHZHsvtWa0cV10fI/vYqefQUrOGoEUxYhH0PpWTeceIArmdr4ADEw8cMlBQao4LVO23ifRAiW26Ir19el2vSQamMCYbUkj5afRPSHv4F5Gdm+J9ed+v5cI7f/qOtxHArouza7Tk0dEsVLO8Y4clTXh2YqzrCZa1rQ3qPK9lXPc2aRLPxliPIT4dMx57YkI1jBQPaim3XgQbrbINV2nsI9cPo8cPOTrNk6m6667a2DfyGxF28bjDMuVlbCPp4/tVhv5H/Opy/TxYn7DT0aNloIpkztFciA3bFbQU/MKLpN7V6DwNi16a8EkU99VkB7+TK8ON2paI2qFugZcsbbaxLaz2B6vikaXO38y4tgVLxSBhsH9epbx1a4MdHA1C98AoH5N02Hw/D7n0vTwbchV0TYNVyepnA01IU4bbWgIfM/jZrfjsB44KK3VIdzbyj05gk+qRmuoBHJ0X/+oJ1jeNB7XUihdTRZkrNY1STFIuFSVlNcCeOm6i2jThmrOVnojpEiqpZoDsjI2TdFX2IB2/yee/8alrd4tHQ/zy7BJ4Dftztk4klv40mY9Lur+mWy0ghE0jrSoNp5LLz8ykqr3nRzR4oq0zzNB8Kv10O95eHQ6mxh02cvhUTDsSdPNpRggr4sczWbufz2uHh5xRB6aPn/df57EQ+3uNLP1xqBM4xAvs8loD4aatBFNHQsh8hB4BukFq2o1TR4YhHg5uMfmFhcP3MIRSVinvFX9+up0iRg9XojCCrMecT75ogNdPKetHCbqjTgidV/9AG6f1Uav41cQri1KF6aEmPAt59L1zi6gxgnYLbsGXyCRnXN4bKUr8KJwaLA3rvQTQCNaP4iPBSBpIiP/a26KKUnW4JzNKFybFS9pLfTgkeDhn42TK4s6mjQHhSI133/MtF1bjgTF7Xq1vAmZYPiJIEdhhseQh9uWXTSmBSsfFy7OYk3ih1+4ONgIbT26w7mSMtW5J3XUYWkpQmMXv6L7MaJWeFO+JzZ0HKe53QVqgt5VK4FAs1Iz3trGqr2qgUx+wBG5boQ3oULl2JoHDpeJgycgyo8R+DynFqHWYSuQUPQhFy8OxS9k4g7aopk3u4hGXqx1nUOLOfO8sDgIaxm1HaTgZpx4nPaHvW03yH4QtG0gdqzBKR9d7GltNvUPYV5YzQJ44hp8d07eA72Bd7nIR2Hnp3M/aDiCX6E/iyx+c04Cx4Z3x0ViiNBuC/hw2yP5mZ3exLouvZW4nJCgzc5QVTpLbuaYq8ROE+sVgc4ANJGUyohvlPQEozmAicCa8R1A8PkwUl587kIfft41m7wxRHrZgIQkKp26LhzJxvaPWENWzkK5+MnQfmbWvUNjZHZSDqMX5/4ND4RC1EpHH2GY1ZRe4/KKkpQwAipbpLq/1/b4SoSbIePamUyVM1/rtLT/9SB1zlK8qePUWq3abH9a8prLOU1fr3OmctCdTOlTB4rypFzSzHCQ7gW2IJU72ZYj+3uxsX3zPvmeeXmoFlt/WLWKaC2ILGnR8XylX6JMSxvWWno971cNOOMBEzWX5MNK4Q9lap2hfrJ89ZV63kh7nwzNiTtvxnn2smtyKojWlno7gtCUMD6TehmzaX/eEs31SgHzcgFELBJgOcAnU8nFW6kDrA7bM8xjbEvJpIqXIpbxg1W2fCl7LuELf2OOppBs/60ULfKgjc9gr1Cwbc4Q323BAkm59UzzfSJy/xwe2OIcvx9edwagBZQkKw3QP9QpeXJWJeaPX1HhA/CzkSXlipLFY7OmqWx18LWMrH3NSeM4ruiQ3vzj5JOeBGqolv3CaAXsYakJkOu+6/j4YvUH4Ktq7Sip9J5dTnfdyp2SJlIAaKVjr2PH4XNqWJmdhRx4lYmC6VANrK1j6SKDvO4IuiExIKiCs3vZITSM6hgLVIzU+hX2VZoKHr/oabVzCH36S7qnqG2oD4TFeYRwZSQFmsFPpt7+G1m/f9O2xCMrW2bxkDHBmNrxMey42fKpF8nzVOnXJrhtH2q/+Vzc0xG3m2LyUgsY25e7Wqx0hq/D0gPy/P0VWnmWmnYsyHiCpaOHVMosYeGI0JD4sRi1GyOn9iySoSNDn2cjPzs1r3FxlaGf0ugPH1D2BwlViTrLyShELZlreZb1SXNteF8TIpvAGGxD0X7tyRJ6T/aat8eEiPd0kluPi4zW/sb6SF3OoFDz1rGLHBNTFjJI9PWBY5U5amo2neXvoyoH1H86yDARYhxbfhCUuC34Ixuev+kq3yY590Bu/wWDSjc18y5X0wtuUdh9fVGUuocaR2jlRDGzYZUc7nvil/OPswk8ApOuhXC139t8ZkIpU54xW+hZCc6r4S4V/NP+UDnDyA8ky6ZSmDMwFCZlP6XWyGaRjKeAOcggIh1nB89pbpWKHAxBHYCUzvW9x8QRI111Qx6Fmg/Oh95Gu06vttZWDCBUlRKkeioNPIx0eh/eFtzAHL9xMItwh5mnUrIE9GvVWscdjSX7wXzjEY6riDThmN/iL2fPi6F+nuGKDoPafs8jsh6cAq/DWvWAr9A2rQUFwxcE2hUS1+mi0X3M1aysi/D1Nzc6Zech3Zwvk0qxQBPwP04U8G+tbUACnYcfI7jCmgI4eejp2V0a790/4wKiu1O/SwD9BQhpJIjIM6YUJ16N8m4souIfGdGjVdzOMzY+ze1/12XjwqWmqPeo3XRASvtNuwSuxBdaFVgs8kwme08POJWoqh9/qC7xSApPm6NkrJQ8Yqk3KCLmXe4B/OEmpnrmMB6F/Lbz/UEdgGId6wMrKe8K50N+r8mHoyHoqktOzDZ9Jz4YfaZU9dD2N/jmtOEbzSw/T/NDstOnRu+HAm7glO4Jl99Wlq5VewsTyMGm4W2XNnHyGntNi4woKKa8AL6RsWW/yhCp3DJ4i5NBGGVSeR4HSKGTvtc1QPlBfVXPvmerrfbvjG+ZTPqhc7uqQ4BUNtvm04K6R8k/60UMI93qtpHbPW0b3csDFKA2tI/0Uby6dhRZtZ747+DhpRHRTNxtngd/qY3OfdP/+HEqNhdNLd3Z/kEivPOg5vu4v9LmwtiI95/LyxBqEmjgncEITIPSP4T1tF4vToPlc/SgM70X9vcuEhep16rC8YGT9OQdwarcKItJ7GP4MJ5ns6uXM6sx7CZyOpm2gK38eUzt77UQvJtGMF9YIAODDhZGs/H1td5d7rr78iUZHYa8XnrxS3k9yJtoMMg+axw8i+isuWX8jPxRToc/4qWg2QerCuKGbqpi+ulTEypMTWmqwKEk2JJc2SpqZ7FN7ChFZGUb5hujqRIBSaHb0tHZPs1npnJGpGB3i1gitWQinCYDkwudy1HHNvaYEMZMgsnJ8Cu9QHoQBsYEGZVK46aE169mIskIQqSkEHGP+rIttte7Hx8KNpS6A31cwKbhPBZNhHZGzSAGR0C6hnK8Eag8DeJs9Svijlwdc2fRnIw+w49vLrz2UyJzOKTTkfKVViZAswXAYb9n/tWPGfKhEWs05kTM+zNvPj6EZZ98Xu0IJRz7a+2VfjYalTVhLQDQK8umtixlSiCTAXRwcNeyappiP5TKw9i1Gu04oJCSVc4iHDGowsZPx80b28zVWdZJIRKJiYkWj+9kEMo+pK1+MZ/q4CnYjOzA5A0rb4LYo53ar/1HTrpBeveTXr25zxykCZMWu84Ik3ROjPI9K/kKSBazCPeWNtU4BVFXvYiGOyD+LGkpX49xLZmvKa5cQZonGCkhJR2f+bgFDWvY5eExCZtIXTEmEJbh45wi4/neqoP16gA1X4vtUXalM0nTd+2WoFuh3LcydIeApl7Mb+qJ7bv4habwhI/BDGzxtCA+TVSpNsR+ApOnW/+g4HEsKTwZ6D9ie1qyBMXjuoxwbSYTGo7KSPe9rfKqYGx1lVk5fHTZg9J+azGpaYHC7oXym0/Lhzqmo539OYNuzi6ggIsXm2/hbN7+nGxdF8GPNffEKiFukAPM4ezIHZyz1qyVAokWhS4NRhhJB49cbDj8ymeIo4cSjchSjUdzRHZm7+fRLVVoqd8QxovexHZPH0r8A9WmMuByNt2wlIByztdTm0bc7Xsuw3sZQGkK0nWjSVbhk40N6JnNb+5Gbh+qiKI2YjHsDnxO37QITAa1ulc3v/ahPgQssU6dUWsvLAVes0608mhu2ASj/NJpjDscNMUKV1nxpWf4Xiqxt6NV91Udfsgn0lFobsyq8XdrziRJS5Z461IlFpvOkoAzskxxOmahbGvRmYoof67+6jRIu7LI6Zy3OAlaFpDSjJVGFMkhqjeBn4/6WijgpP2PT05cVisCslFSrc/qwv5pDP9W3/2ZVq7MUFSIVvPDxYywcJ0DHfB+MIqcwQQbJ3U8ukNTovW6d/SQaXzxOxJCQEm1r2TRy6bJoFmwxJ3wqXeVLXIZFWB9AiRJo8AmmBRzUyk5feuss0O+Y3md6Wli6JMlt5j+tEiRGdjEXmiyvKGBP0QZDcjP15hkGX125xpKNyyipTvagrFrqVOfU/6RNOyyw00dlzle+ga85kVzoMKgAIOLUVT0PoOlAx9fh+8NqcWVQ4PBS3gInEwjY4cNneNX11OXvRo8CMi/7bErbfrWKhXDAYuT3sgvdo6Vz+AucOTD0G5Q+H4J3TAah+/jnxmOrXYgHCVsHD75A1SyvcngNulHyOXUQwoStEihp+uNtPJ0CHGogcdUJ2+eRa5fwvQ2nss0dY4W945w4uVBA+fn/nC7IVTeeVyLcwFWzQWJiOCKpbOsb2bG+X+Q5EVZdsmjIVediaKutI3vr173DdkRrmhXrMbN62dGo4xavcTG6UtS90BiywfrOzmpECpF1LjOUiNh2m/wJECn41f0Q6iVPcYHvFgAfCa2igY98+aYi7mLaVZ2zNCh/LpV2APIuRKxvPBPOFLPj5OW7ZPi64JVE7Ci/MZWOn3THyA7thpvY3zZ6pNUD3nHJGLmrNO9iEj8dAHFrSnfy+eFo7WXa0EKkZllfnnzlSLM8IlzlUs74tcRmzIbStOUappsp1we0abgQZTqZF+lrBOAv5aPfV5ZIw3t/Xfg0zJrUQLhu+eXX3lSjG2cj4/Rw4d8wuPtT6VzG6N0BNDitup1+jPjlR9YHilwF2FsvyKzSGNnNrkTPjJMCPw/+qwDEVNdhS4dg3ybfQwL0yqol3lsCpDzGQMBK6FpyomPueReKSK+ThPadTjUDgNU0VSlSu38s0Aamsfr3YT/Tmz7NbcxQKpuAfvKvf2wjfk6b3nqGScnFNmzQcRgRQGzllwZ8wKouUEac0Z3UtEnvLqCrBFOkNCM5qbl1mB8XqvNHb+BQr0ZNgbjuzIKnu6iemgU/q2ruL2ii7GXRZl8RzEk+1+mxXOlqTX4HdLwyHT37FiZ/e+MJ2csJH8h2Tw+qj385ybgPEHQjPs19ZnQZfRoPUoULXBM1dtXZCnkrnVL8cMEr8ZiFvFg1jRAI60cA+5PpWsd/ESRZ99vu6PiCdnVTHmLtW5xmhcgWtdRhdaucnK65FKnJF42PVa1NZfm9DgT+ikqcHnJ7Y8dyGayjPR3sMHQbQM5rU8xEDq8UUesmeZYIoXfUuJcujuGKigNUam46Z30Zg6tzvGmGO+6nSzzVzWD8uN1pqUOrWPQqLE9EwH9zSOqoHEPLxhg4h+6/L09qKr4V+2S9+ccBTDk5uQ/EVkQbbbBg24SUv00uNujSAZXY0Ih4vZruyQddRRGe0l4iqjjn6BEiau5VKT2I9eUr5onTV1LR7CuzIWylglx76jGIvLS35w5MJRMcwz6DV3lNWH+8fHqEu+K2a3HwRQ9CJkXXE6TOTjlp5406cqi5c9hlnYWiUxJd9I7QJKAhYCBH0uCCzU4KfFHw/7sUl8niVwXJObEydsG0mk4X9u4mPuJyS3wFYVZHH5eAhyoy0Jcaeom0inEkcykly6R8hED7VyyB2nkI8nGv/eaEXQoCghXnE1omk1TuEulgK9u1RypMuJ/aM+LE2HY20Jtkvle51UDgNrHbSat1Nmukehfgbj6bEtaGNs8reFpNHsbGoKpbCWAC59F06YdUvYA8QBG7vgfTpSBoYPAKx43glcC2dD7RbSdFH6HSPVZsoHm5KOHguhvOIh7SdL+4MU3mu5Y2cXxUq1QZmPhFBID274jVxxFtWJtHL9oHTmG/aj6Hbq+NbNpwuslqsuLKAnlHgk/dCghbxhTA45YRhxWXbZq3ZJHt/HsvuciwRl11LM0VFl2tsx9lgoZI0/FhLjbWD3eSAzIUaYZ1CPJTN27B8SdiZFvi1IpkuZQ/+JNfhzAyhqINsnPYJW1FSoOlU665grvZ+OExNhwHwvsEXY+Fc0/Hhny5cOsRxbBFR82pnFDdT7W5bKx7FLddUrcR3ofMYYnxWBAu5fq3dNVtUrI/uWik3cdIcjXmmfHXxQgTjgPPGiUAh2+P8emxZpjwyy29BxyrLe0p3W3xR7yLya6Kz5B3yn9LGVY/mQdTuHJYj0CNAOe9lTZPewRaaxfOlKWUcvkwDcEtWRcNN+oBAvuFHIa1Af0WvFfPjZGvnrdBfDn4MZw/PC6BWdG5ofEwfMoYw7CxjyCnE8RgPd1QN8X0xKcYEDx+jj7kLCnznGHx3GAwQJDQxxDV7RYTqCZHVTVAZy2JlCy9TbL0lXQcLNxqIsQ3Qxxvcjoeyz/DkOuq6zn6jltmjGi2sSiEkqeqFp2XaE9BV8wyiafOtCEL8ndEtgBfIpbItAdV26FEb+OJNPEMnfK35QkqH4WpCHlYQwA/woy4VuLAUR8hz66fXbmNxQvAvcAG69yDxVanF7rfvaXC5amxpOTGiCimUqvUn/wpfnnFGXLPNC1JaOgYodbkTVQXh8hO9xklKBKvgOQrh1/snLfrFhg8NNXwihSTzizRPyaRQINwqVhy8+/ImoClLQ6msYnjvSwW1rCbkcuYCjAbUT8uBrGIh6RPYeJtEKBHe71GvuC7xKaGtAp5oSHcyTblF8AGn3ri0q2OJqdkVFC02jKfmZIvzQ9omAVDajWkhs+UVcXkTgHC1JlYndgXO+JS6QjmpjNaw9wRt1O8k2xqikKidOnh7CrcYcZ8Y4/sBLEbEBuF0EXaDcXP8JItD+tuyBldZ9cKtvWj/Js1uqX8H14A1zSpWmWE9cEEh21gPlGF2ArVCKpqy/UCAjG4txU1Spw4s3aguNUe3G9FkXaoqbFYzhhdFsky/5QC8h49K24TFont5BT6EIa5VaMlFfeK1G8VMzi+nhT0+1pGo6g5psiNvFyRjLoBQ89DDzxJWqZD7ThpglVuZB30XPLVDOIayL88LxvBag4UoFnS9+ullf+WSWEyDblD4pO+OKXCWpSgWIVH3UDXO5/wgTcPcnVOl6AUpLZ5NtFlSNh74ZxtIkTBw3R5kU3/zT/KwDkm6naKGvudGwbUlGq57t+vOth+2bxsUpZ+KEHVG55An768iRyluDSQD8Bq0WLWHhbYUrfVj8HIlHBO9a5IhjCgO7lzRGO0koD1n3MVIBnp5RLGqdwFs5SDWnwZAMLgt6yZ7h00dNVLvOi2Um2ZP0Bpu7VDh4kVWYTf6HPxXV5/TYvFJY+6UbDwPFL8ybnVpgREbKjaDyumuXGMFtGrRcHJkNYIrWrSwDLbefFsnIBMvzzagGn7ExY4zWprJzYKQZj9/trU7xmTlfxGJHmZustjrkw11Py/oQNWhTK3ACTt702+O9C1AORdQb2dUX+AR7XkQxi2Z4cyGF/EMuVZNkJudWyAsw4DuDUs3x+892f7FIrCSwDqxhCdH+xU2UZwjic67HCcM2tP78zCC5hKXCd4O5ri0wVIcP4w3KhtNZxcgpvIP4r3RrBZGv8uISyJ9tlOVhNPmDhXtGDO1MRue0AO8iqr+fJzhZMXZrIjWDuYLwBOrtyZCDHxMPuBqLVOLZi8iKTe2mjb6nJYOcZQ4jLCLa3bx1xGdjMfCOWkI+yIwSddCmWKc0C0c1+b3RpJbon3aC+vnWYzCMHC0VWXkfQp6gkVFCMoOUdT1MCx47EkddFgS0j5+Vyec7pnFhAXWR9DdqNPcbq6yzrMakyo9xAoHt1OYLgXwYTB7H40LUU0SDmGOhlE+VaYhGQ+kz29kcujFfXSejfkQIKLqOlSCpJQ/8/WtYyrGeaEh3O66bYj1w9Tm6FhiEG4uV/UO1k2+UnXpgQbE4wUeC4DnIUosFw5+YvqnYuKA7Gk+ghLall8tMxXc8NEICXoUz3429RrxQU5YOtpSzk/5+VdkIkN6Ms6QT1/oWWClNU5bYdft1q2o28woiC+g9wxFNriNDpSO4/33g5jNoIgFFIxwOcxbewbIztIfCYDJmPgQdqCzAslU+G1fnIOXHE0hOf/8lwTPf4bwGs1REJUFl787G7iVua68zATMGeNb5DAzbfSbH5sOl9dtLiaZtII57Ca9EFOuTfG3K3GWD8rj2F4WEFxK+TR4ZLzEUufhz3JCR3QLm5L0+DDVOVuGAwLCpw117rDYjeoFY+laFFDEzo2/ZfrT52ayC30k3LcH8F2pg781eFQbVuy9F25jmcCOfPXMnkABwQ+9XmjXEVnbqvsbdPbWWJ5N5SLK6ou1Jp4PM4KYpdwH844r8c5xu35CFRp5L+xYI9rWJAFoq/n2OcYXPM9LEsuhShGwgWNMmPMZnXZr9hYwqucGl/lRezrjQiYWYr1Rv4FPDHz2uH0V6f57/iHWqIGZ0yee55RbDG83gRNY5dLH8qpoSq5CBL8aqWvWoz3JX2sbYEE2gA69zAAesK4uy2a/vt7VoM8SuA+KtWSNFgZo/kUDIx5ukPhogCrL9mxQ1pCjI479NLWsgvatjDm37HtGtdOVIINuQoMSoUeYV86BdUiiqSjlp3hKy1M4jjcIS4RER+pQG/o4blj1+XvPNb8F+S7hi7u+PagC1o0vJoJZonnFXxlTSUnejLsIrdyBQif/8HVvmkSX6u0NMEdM64pg5PcJx+T9hjzO+GDhQ8Fs5DQsaWHNjk1losnFtGCHvMmVTuQlvEXeNnAHIs9VxAyI0/HhgdX5mCujIsBh2ZF5G0UXHTSKHkiYZGzpLegTRh6agDzq5q2jN/78WuyOic+PecPS+MLOW1AFJaTloZOJDqmlRisrODfz0AyTOOpUeH+30VumWkrfZZU/KahIJSqMMwi83neGn5J58LJlNcT8adDRg66qugBmZ3bvED+noITbTNjtOw8sE4lE8fhZD7RT7X4DQjHK5JKJ0WnQXxY0ZlY3Z9XOB+8qW6OdXafYMZqLBWl5WgUSEREMwbODk9TBW3L1U5xjPXMX2VO59pnQ5RxiGTvxT9uItswINaONT8N12hb/N+8I4PY+rpnL0UIguq+sQhcMQpVCEBSvWItdpgH/bmiujN3+ClCgrjwTbX69khfYvbPxkDeTMF2zWq+6tR5WslDr1k11k6chKY8HrjXR0or2awaSz26uFh+cHfVp2gKgigAgHmFU+z4InnbcVL99RHIxOGKOGPhJ6+N2n5qubNGrsTuVqbbMWPuYn00P6Y5k74w3KUqAiTbLuhX1mnlwX39SkiOLGlfWt9o+Krlfwyr/9hkiEUV7q/KPkorerUX1GaD3UZI3QdyyzSQUsGl8J57ZZbvqscgYm5LNvs7GCsd+E1SldM6rYyUK3zOFwyc35cDeEkWMN4FdoZJvnRd1UmWAA7yGRHf1fWTg1jEl/GNBeIZ3MhBxubBcMdGqcGy/dskGlX2BXmlcQx7ljAdiQuSXJqkdw6xazBcrh2F/cobtBrkrFEzQDriSwR64lncfOXX4QSHHREi1PlzamlLMvSsgtRIkozCSEpujiuqcmKAvF0bv4LSmuKt/7/pkIOzGYdQIBXWnqkZU/6Kxiw2FeLYTkezqo3PJstCeRn8AcKfZL1oAu/XJ/Wt8hYDAUkRvaiAl9qWvQtuEISqVz/8qciW23OYmUSDmIulaNvbJZbnBeoSgTIj88EyDP4ps6SaTEjNioIg7NEfFJp+XFU+9ZTdcR80pMPlL8PFpKp1in6hEQc0zwOPTcT6Uu1w8Xd3h9VQnzj8xuiaRNcGp7LFiZXjznuYDxaj0cKIPxsYa10wGoEIANx+orga9r/1KhkcWNK1uBluINvSbIrGT+cV3aoS9wKxd+X8BvXPhEf3Ykziaiu8InUmYZQkZJGd/vLV3doBc6tdOkjSWYK3/v7dcdfZgcT34hoqgA/ZFD1a9m3htP0DuCZgV5iYqLEbQFNl6RuSPS8tuCmF0AQJCzGECNidlqsEq1dlOcSnmQIiiQlVx5JZVsKMjrDV3A0plffoqdkz7I7HxSMu7HmgQgp/LNo2N9HwZZ1eau+sjmzF62NtRABeKpC9N0CfjMYEOSMzr8FhVZpU2qsZtbb9aSAHXXXihwUJZRC0te/lUP1tpDwFHKVut8L+56BL/CIYxiTS6GdXp7WCr/Kum8l/M1kZHxlos+5J5ux+fx65t8FsXPrwF+ALPRPtricU/w7Yb25w8IIzOHZmzbCV+L/0rDdpScvwKsooIeU3GGYIKFLh9tcSPks8HS5Vr4oNb6O+7gBVWzfGaGAKlUjUHKFFvfMau2KLfmBi8AF8p6OYL4HeGcbWJT7GKUO1YODh1MM42CW/hP9HBizzBlfcwvcRLgkdCtGnAUb73cW6VsX1YtA3W9qbyUcrD55aHsaq4pPGbsnMZ+ZTah8JI5wquvUaY8BLMxwW6cCjoAKQJsp9xngMrtgvuTQIwgXGThLMyeJKk09IFdfMJWqv3izuZkgh+Vlkfh0OJ5jwqw3tileK0ge1m1WOhTiQO3qrOth3tTZwmrQlG/8GA3YUkBBOxOAPdK+lly6BJ/xHDADhWSmNAweYm5Nl4Emci0j58cHs+hStJ2zHp71ObnhJ8l+5VMQrGMJweK31/lx0Y0DtUXZlwA0jMocK2I//wFCzuPCqM4e/Q0krEES2s+rqPHQDCURtoJMQZlf107tAvM5hn+OYnnJoNSBokthsgKRw+1WT0bbedlrNW/VrCF8eKxjGEnFafJYX4OOjDmbwK/WrVwXGeLXjYY/4ShXMZ9Oq4ydW1nDS8wrV7r3uOeUTc8NBeZ2xU/7wVGR60u1NU1kjfi5YMvuE4iWCoq0r42l1uPphpnKcndJIFIS1OtKTC71H4b/1OlSrRM0dGjonfFaKRvvaFKtL27M7AtBxj3IB34/rls012CMsYSlOZLdB4cs2SAdGWuOR054QP2cu0sfn/FsQO+EunSeerymIeKqjSkn21oUksPnmpKyDdwLMA/syRos38bH+rI1V8K/7Nj8wrCqQh8EZniFcJJfpZFSA6PhwAKPd7iLwp1ASPz079SumKeplii5oYBs2IhFG2pfHSP4c8KXXHOQ3e4SyiEwbZpJRjBYUqKBFT2mt6p3XiOdYr84Z9iDsgCJhfEBMvtfuwjeMcEUn6OEhZhzJCDIF0sGOMpJhjNdDOTI+fq0u5NuuHoHAzXqtL8DdbpQ6b5q5uMHUlir4mVsrnFp1Cphn60FTuCORk+1z/LkB6PBZeBxgUtZ8vaext3eDVs/mMyoNW1+iS/7lmyuhOtSvvxNlNzMTzAHr9kECC1D8Tm/+aX7wRwAvGXooq53fJmdYlvG7KA3bQbRWyq0HXay2/UBTUJaEU9/D/oNmVnrNnu2HxcnRlVW32hHn/8fcARkfJhZn16zKYqIqjzMnPOu2t+e69TFm+7DSLV7VGgRyQpNtoa2pKvylcica84+puti5RfQqWAcsQ9sgRtLdUDLygkgBbYfmMFmaZpQkaPUF7koaEG6J8FBtCX/nhMKFub4+irfHCKstXWhlcw4SE01ZepcXTOGciSfPG/0omeCnUTRC6zP3K6+hm0CQn8Vzwg+fHpZeh0XUZvVw3HNoKiG5yXovEzAVRhk+RPeJ1U7ntVJ8BiZGhgquQX9LY1Rh6KtX4Kg5JFVFOwENh9Ln7MScKf0JoFVcfmqgyIm8HAPNf8hvVGj/6rkXROCDoH0mczBA/LN4wT6PrwO9F+FtBe+L1jp3ibZTbcOyE3ZvvCEUjmBEQhCBK56ZOHasNedPoqFupUWKZyBunJAOrqijMgo6qr3ZywNTPygcD3+cI0gZxIhrX+NfccNKpWRR0M16wUiUOC3h4BLyEFxQvipSJqSbwD1ixAOorT69EEP/GqfwtUgh78P32VtcMDiND1E2RrOSEAtXHrkt9jFUOZVcYUxnKYVnX8ujvbi8komr5rCw49E5F+lDIJI4UtuIstdWRizuiepsi0KRxjWghg+NvQJGJYR+/w9ejCznWn6mw+y+qEJZZKgZtzEJfuTSXoldBUYBKI6QCFeZXClQmm5SPBWvUUugGip5FLAWuDSxPgkzpEGWK2r62ARcVYgnAIMAyBbkueJPxtPNreFt65tCmRNHpKyrERibR20LzAiVjjJ10kzc0DF5eyMlwfp8ZY7RnOvVpmYc0k4Jjygjxx4HAoACr7FhJiOipxRyaOU8sWz0LLpMKU425IF0+cjLSbznv3gdmRGQCGltIwgB9rnblf3VkaBA383OPqznpxiRN42C9mRlDr8fvzOsJewi/c5x4of8QV//lDQWqrL5A5UNctZfkBScdneEgslQijgPFKcio7v0+Wh5Ga/VB/oPOO7eWcFU//RikecTFObX9Vkf48dRIIGYTsv7JUFTmt0wRuyFddwOM+N4nw+gFziIWU8ug9vkZBo28JzBXtcB/dA+hMNEAKobpdY6yV81WZHKJJwM+3jHxEGToidMqBr71HAelNelZkNznhoOpadVZFOPUAn3U708KzKiqeMO4aBh1zbkuLd+uB72/Kfa947/XvMiWfLa2sZunQ6dslf6vR8tzOS4L2MNBBZonCaPJNzYwUId7NORwDXgUPUBjqJhosms00EFJ1bE4Iy0r0+TXL0aIzt3x+ppgFH8ceFSlezs0SG/X4jbNgMnaCQJpsQUflXSL6UJoF2K8iLWSP43A8etecxqUwE7WUw30KBJF8kQY6XE9yxbggRTW2uL9layoXteSnuDEa2HUSsFsYKP+JNIygpHpSu4wjOnvV+x09k66gffw6808J+Nbcf+oDEihstHKiWX3eOxpYZ6ElwRYKLM7yli6rD8pJiUt7MbLQsgVei1WLCBlSeUYM2V4GdD+p3m+waIoACkfs6oCW0Diup+WUTH+PdGRq/Ep4Ep6v9J3dO84mdMLATAvkyrMUqbMuBBLRoQIzArDmRDCJcMJNCvw7MUhXEmHxLZw3tUa8E/Gv7BprSbPvwg/O0e4gAfV5ThL4L0U4lH3+xzDGusjkkIHu62Gr4VZloG6VEhfL7eQZrvLN/6pFIQwuBkKeGXmAdSJ8B3Eo9zxEbfmTddkohWfkZlq7mvYcQ5kfhlD7ESmPhOcHIYtazMrWLxn5Cxow9m8APRG8sVn/GFCsg1tyQ8raIew0u/l5xKejf31vl+CJYDIyX1G/zsZyroNXNz4+hC7P+I1Pvl8624cTjmVCj0fCLM9wdf+fVQMo7NVx2tQdEVp3ize73jQYf6ZT0AHZ87pPJuz5hA6lA0SGLvHuyMPrf5naFx/nsOegHZTbZfXphbApEWzl7QP4kHVf83W/6gSTb0YunVD0bJ2CD7X1emEqUwispUeSlJ82NkhDIVQ4s3Z1U5OGqX0UdhI1lL3IA7YeC58lVhfjWH/wctjtb4JA3R1E0uQLydUpwWsxE5FOihCeOAC3d9KLdE/7y/cG3nNp0YbdDQGiKUZyqlUXDvrLCaj6T2X3EC3CsjOP11icxcd3qYFCvhhXZeU++fzO68iWsLh51IPxWiLfpA1jY+L3wzxNkvunKuWAsS2NgFhevf4uyfsFTGdgKA6lsBh+aSaDZ0I9vPOdTbsYQHTD7I/MLoyUsrn0VtTCerd4pQmXB8IKziA0TfARgUix1v6idR+A5T/FF/9gxKO2y3wp8JDf/K86HoOH7B6gBxBYeBgrlJuA3l6UbCNVhpwNMoPSDkPyUomjWiE+OBdsI/IFxpsdoWT9mVw3t8RYxCNwE4sP1crztwshvbpNoMC7WPkMGkTo5w5JCeklNJ/H3ottY3yLqWZXooV0of9o10+5WXvSIE25HFxPjD6PS/eK1co6PwDqTIRBmOzb3Lg1/wahKgbP+dcwVlmKLY1+b+EYNEMXMsFF0d/3eG5PMNLU+V6a3sCuMqUtZfjCoLfHbjLbl+k6qB470dV3tvOntr/JDY1vffr7tEP2wqLmcdB37+Du0vtgm7j9THg1/xpgdF6LPZBClOhaEd4GTB8yBpUE8Cil8Mc6UfAVHrE7HhYcPr/UbSQpsbjVnscKhs59aXtYagYz/gShq6nydrNVRLXPIOZhXrL9U4yZFWEtHojQZ9VooW7/70RXRBxLf1rKX4jgpBMOFH4Z16/g6nlWnN/Khcvs+V0FUxw3rHk+Vb/oHw+0MJZ9sXAWCNZIXOVKlCMpoGyn9TmkTjFDO4migei6nNrUgEVUbjfVtTyXemBWRR7bEPiWCPcPCGblzRYquAX491hrNNRsYLZbY6/HMV0KyOxmzpJ3T10HL4UGOoA7A1YNPfTKmWwUmMuTb81znJz2KudPURM+2gl0R1cb4AurhsQYjsiIKJAnL9C8yCVLpowkYns7uyHakyF6G5ddM1ZGEocx3VwqtU0pG3bC/vdEfvm6NJ8Pl6OKh1hxr3E7l+kr7sCi5uGdWtHxRf5BdENOekXGLoqiD4pygDsCzR1WVQ/m0WSJk2OBMtjj9Fh2pOUmXiBzNkWkG2e1zwmP0vDyU8ucBREvJHqJRReW7AzHr2217XQaQDG9yx/TUYO4d0GF/lUGZ3odgY085m2fMF5UjIMLAOEk/KFGD2+/e2f2jrRa22WiNrJiEJwxJeXfXvpXdA3tJglah6MsmZUYxKuCwJuPNb2d0+NLddNautfPP1gC51wgryRFz9rk106XFyVPkuJcAZ/L5dXoUP9j/EW4JzA9p11wLvxXJLoqUvevdkkO1eTVyum4AZf2BMBYsmVMU/7DmjdtJGaZSV6Wi9flrUTEdJmMZcRT77fTQbefEYA6yqP6/FYoZ/QOOfONmTFUSrgtoJX2BDmJKjIZreg/GYZek+bLBkCD4hF3bqemIsq+kpEiS5QfF0qkTpwljWAhaEFmRgZ+vkW66t0q8yXobkTse4oNfX5ag+itmaLPZELlJk+YxeoYNlDDAZfSGmsy9u1I8neMpINJDLgsndevQhfKcYc5V3HrwKDBjvhY+dlb9IaE7XUzO3pbcst9Bm2N4xlL9fWanEMB/aTleeklCaLA2DAR1cyXxYXhTP7HFc+o7bV02UD0Cnxp6MTHrYfu/+uuEBe/pBFkCVuBu4TWmTk1dXWR8PUIrNxoxur5FiG/q9pP85x8MBRJbjVtufuh3wY0b2nlcl1K0YVmvLVS2/GI6VSbXWUeZrswC4swuz8T5Tsg1PkEbA0itCtnKckG/u0eyhf2haXEfnJrm02iWNyfdquUOynehJqwGZtOQC1600QUsb4H+/mOhrTqLP9XOKsD9L9H1XqEZ731oNfVi2yUyHkd+OqNJJIgW2S28itfGzjBBFUXinMWRSfwIOycoMI2PZGj03Bt1x1uaQfdbHU+YL+hZVewavnKfSsa8nlR9hst3H0PJj08ROLj6V6QWBTXTPuBgPg1LpVy6RldYJ4PVqSKHYVIY7ZIZVbMXzCNIKPVSzp1vNrArkpIeKDr+hhqnwISLWGXkwNWxPb3gut5+0WP+1CVVf+XjVI3WAiP50csVKoarnT9/D2sp+aZ6HSu9n5waVM0z3/6ve5sos2rJmhBLenjA8g8j9NWQy8gyGv1lA3j2YS2B50IgHA4AEO2zXMMhuMNkT+TK9bJ+3xISDq6cit26x/HGJU588Bdi2cuhmkncJ3sDhz7UMHStKj1G5tPedzJ6eBgA/ykx0lMeVETU/YJ2Rj6X1AP+evK0LjSJPmmiVQE3S3HjwzPj7S4zmJV+tOGzip/CcGjFqC2BplxFoUthxb1TiXexnTszla3plTCVN3uc/styxwh74BjaIEzVtFSw6k/Hr7QjT4KV0R/w43WzRi17cAPFb2RZvvDRol68Fem9HBswzuLZd3rODGZm7WuG8lsoYbaJAFscqb7etl1PDwIj/n0GJnCBdYkaUFdyWeYZKVOiS+jQI0EN5SPq2D+Q/vSNrYBujiEEWe20BNJIhEtz2yfQjDbDLwHrf/nqzrbfK+SB0Y8R5Z2cKGgEy2ApqleJHvzibAGtErX8ffMBHTt5TLtsQ9ayBfWTk/ihLdpFo49vL9qOi2wJJJ3A9cG1n90GwUtccdbxGqzyCIgMHqgdGa4x/E+V0/SQU0rdC1nE0YFkI8RfGcJtiKtgeYYwEOB77tHv9h1siAYBIrl93f25F0laqvSac7tzV+FxbNAJx09uQNKftU5/rdNkijheIzOWAXaBfb7fbMpYGvlO+Ble4HChQHy3kw6k4l75eL+V55C13MtfkH9nMyxc0vawR5h6PNcc+0g6oABcR/nfv4xZg2Y6VzpiyfVWvL0DVbnummdaZeiTPoG2Fz6FbJ3LmDQPbh840WwjwQIiEZmIjxqUgedJ2hCXBPvX5g7WRrrsa4hls8DVOYKfGma/vh3iaVCDWpf5+8IzaFujmTtdUEuXH2nkZT9EmqF4ZVhiyCmqn2T5pE1zgkpya9YNoSwFlVAfiYzLLcE6DYJj1vOVyu86JCHlAnlRXBNKOKJNVTcLqDbY6ImGZ1X4B9gqYaVjmIrsmk2orWwMUqk6nq2aWcVW9DzuDk890Syc3YsqPcNY+dwlQlvxoq/zFUJ3PdWUpEJLZi0e32Oo/H+Q/cV9HscNAjRqd5ZuF08j6aI7z698SQmE6t/fRSxrzSbXdDEibNI0bcjwk8NkxbGHSE6O8Y3oaQk2llF+00LJ3zXGIL5uaqxqlCY9Ex5/fEckCBCMiU2HN4T44PMMZH3LicKnxoaUNw89LFpW+JMdyAjnvVtD7BLBRKta7AnsFavhTLSf/3QB+EI1eY2x4LTjm+qBnwdRTH3V1sFhsNkmAmh8daCyCF93XVkLcduDvDtH8jkQdcaNc9bWEC93l2SVytS4QIe8fpI9sj18Z6op+nJcPsHTJF0vNv1Opw4tQ438i2lsA4C1+cKrClM88gS/8lhHPkCtmIgL2pZTeC8IVkoGS14VekFOlsGWeCMjeUUNMLxw/W7ork+ajn2Dh17RZNYEEsxqI0eWJEdxeMEqPS3p25BJDhr3aNxGpUIv+0meAPUy0bMumJr+jjOFELDEJP+e5kbSKuWjRNFFwDTxoJd97wH517jBUO2dHpgHX8ed+ywx59L3IbYoBmKJ4wiI7fDyWewmq/9UxzS8o8L4lAg278GyOlPNkoeLZE3ZXa/kdrkgXryO+JDkO3d14IYRp4FDFbvRROcYE28nd6ifYf+BrMBUxvwyfpygVcPm0DwxqZvhAqaN/cEe1lMIMjKL9BqjnI9JYiNbZAaTCArGsLZbuOd/1KIKG1l3Xw+KWQ7kDY/Y7yNfpsNd7/OmjoiAvBhnKTXdHuCCer5B8i//UiQ1p02SH58jbA1C4reVumQ0a5r3oPU8acX8E/JU5DtgpOSgk34iSZJzi3jm8T4PPdpJM7wjLZNxLTG1JnOJzoiRcfYwVYf3Vifb/bwm7O2M/DFYR4U5B0pObjSGvG5mNpUglQsEt0rHWF/VJKVGzBe+rNr+3hkKdMFBeW4BHfmzFgbeA6n5P5m49XuSzwC67QgEEFU1kG3h6Ag4nmh/siDx04ZYbn3srGXWKDqN4f2TZir0waFj0NKFB/Viv6xt6A0UuFycbOymCdmPRrgRUFS370UQkVWNWi8q8h4d6lkZFm5FokAevn0dcDfEkppvUtafeB4XMm7cVctLJpN4vFSUKsFcA1u8bi0JJLnRQqb9M+q3akwrrhNMBspQEnwX6YH775D8tZKkyAQFE3yqQ/C4ALGclWAJ9p0Vuyfd3kqGcWUccOpE1oP8OjwKDl0ynVg+4U6rCtqiYYbhW4dgTjaznzXSIQT8lrSdIEuj9U7DDFuN732jzzGlNw9D7ZFUWWwKtZBpp3B2uxE26xs8fy+jxGS0qfDZPk8dq6rAWvaV1E3oN50qNPit1FE+IYRuJZ49qq6DY+FtIODYx86z/HHszOAN3UnVslOe05fmAxrG5HoZHChjs76WD0H3HPk+a81b7KbUD0oYHa1sbQu+icV1X2+ifFPuzTBp+WVtlZzie49iVrpyKRZje3U6GjyiM3KVAGlEXf3Abi1rAcAp/Wb/TZ4/0Je81rtbGxL4Ka+al4mSiCNYnohM8p9UwkTCl21Fhb2k+nAFxQBGbOPVnxYU7AzdIQ0+htPjgIYi1aWXel3JEudNRxnSjYO6dQZDHaJfv3U3m1V8X/IltSJ8cFEFbCSdWaOn4yNZBagXlcIvP9JG4gSMYsBd9Fta9glj/YV4fwkh2fCcki6+us1ioYQm/GkO594JwY66vyk4PWEcSgR4e5tE2UzgRYCHfLPcJOr+iK5eer5s6XXLDsTkEl+jkiLEWMwVLrKEN2WFWGeY5479KoppM5+ZiWtV0NYfQfVlx3dumWcqm1dLg56pnMUK63EzD4L4PWjcthN+dYXCZqPGw4V+f2yMx3hGLecDEASdmQVYLLDA/nrzxi5qBLuwlH6dqNSEhNPjd7E2jQWo/Kiq3z2xEYa4XNtAErxxTZlxkKXRyXnGJyooeosqdDr+KDsdZ6Xse3Dtd7rgAgcyzdMyTDa3yPcHJBIsIRHEJlQIiz9zPLEGSnB+vj7gItOQCUStJzNitFnbR7rRCXiK5Qmkl/OZOrts8viWQibimadPq/jYbHm3kVlNK7rUDR5GdH7KUtSgJh2tyktUw/Z26un17MGRNqwYBJMXvkLgE4cz9YOucDDyde00D23Vad8lKgklM5PMEEupQe84fU4R+yPV7cefdIaYZAvezf+T7pQul7pYsVhAgaUuB8z1hWeEprdYD7JCXREqseWRDy7DplK16StlJi6Pu/a/VOyYBQtHmIKzfFH/lHxrV71clUf+e16lLVTziCznAk2moO/qLlMr771V0mQNAk2aAb9ZJ/nc+crtbbLlDV0zwdA0ion2cFhJzsm2DktJEkSmttdDKNcwV2qT6oQmtMis4KO8b6wgbwc92pCcPZaEEKqFC3MOZ+sPKxgn74sKWQ9FD5G8IwdVgfkrDretDavJaEAW/XZiw79n9Gh0hiFmjv9f4WlRU1PvJonVS7qSKPy3F3m2IoWyfQVZU2kuvhZAEufMmLTPnQ0Mvsj6pUOMKdUVGnfEqrrST7XqG3ePNB+YdMR+oo1ULg1Qew396YKu3J6e7kWVCjdqXwbVTOMMkdY4X2xlaE2Y2OEduRdiZ4GuJ8DzBxcbD9luT8Nu2py6eq9FKFvjtqyi0YRfO/PxmAaYQ16NFVRP8zXoIYwc2R/QVUapCV+fbPONouBK0MvUBACJ/73Nc5QU6Wefmkz9tziPEKEKJFdEG1K94WiKUf/Oa+2P7MWs/d58o3TVrXpYTV5O4i1LlF/9D1PHiLpAn1SnqSZ2RfByaFuEMaU+R7NurOx1AIm18DlHPccldNApJr6atvboggfQSwLWtUO71nOwMvCRMQaBJt54t34Zfcpe9vael7nYvJhF1VHIrG79OsffBhrDk4fhtZwveF7HGVvafNfYlCO4955Yk+XsKsde/rgmpmQ9YQwi/GYPJg9LlWlTaVmDDAKUno5LXWpYlyaDkq5WqfG+uovNxhnNDjSA8idSwkDeJ6CmwI+pi+lZs2wF+0Se6FJM4Q/uyERe6IXSFR6vNIU1mIk+/vFduWY3JwUgX2ZwFDFC3WmKdW3kBsP9SKI3g58Rfjxve4d4N1/8u5rOQBkMx8km6t36kiSEkEM23vVlqi9yG2ZmC9EI9qPTAqaDNypEeCM+lQrb7Bb9iz2fDbL7wct++MeHr4uaHYO1WNIa4BG6+fQZosjCEp1+0JoWB0nnc1CMTuM/uzp3c8beIUC3K0v4j52RCIiHo4vZTRrd1Yn48xKlgfoPshcfXCN/AkJ3BEUZjkpR5VCTWXuanbrB4BLmM735QII1dvmjgEKfELW0MXjt5E627N3ri+h8ePumNj70jIeK/PFNZyBVMD5JMA7YdQlGwkC+WrZHewoIoibXqkabgC2uoXBr9vRE9LlP/KnXn4/hIsTIqF9bMpD1nWyMI7l6gFVxTjdjErr80Ta/DkKldOWjI4JuxjpE49ntZv5WqT2ynL1f3k0/9284jML2f7kfKzLsksY4mkCX/jtG3S3T+bivFOOfnEn37cvwFo1RZplWI0jQSLDJVVZQ+pLvSHS/4rPrAvtMGdXrIowkEcF86Sk+3yNm5cQkIXYQgUr5HO9pD41j3B2gIWdNbuzx4Kyua+1FnUfNeb8oyvoUY6gLgFRJoDFKJcZa7V/LsFbRFN0cVNVpaBsEcpLkck7eEulpncOAgy7oDsVYnytK50ysIzQHdYw2O44z3DJmwE0Pa2jaGFm7HCBuikgt7UakUZEB9O2rDF3HzbnWEKNhto7Yofn98rr9LraVkHhrQa01v1wnirJV1Y8aqLfoJcEPsuZGJC/Wr4/NakiNzAwXnk34qe+1OEliYu4SKXOt0XegkAaUOpBPaJILfWOa57HCMVurLGnx+U1ZXZH3eltiu3S2vXQwMBtGSJ0P8mMutcel/yxqkf5NTFk7E6SdzWUllQhbufXkOkL6u7bsC0cHCdMjf7X6NXLnSHDd3bM+SYSWZOSCcyKoA46p5LMJ95+TeB0FTHDz+2qyoKamvU4sT0GfzyuJgR3xn57pw1XNLGqxS3fm0z2Z4rl4kXNWgKgtoYw50kqkOItpLip213rYwHO/85/RIJqMpclppZP1SJdtigZ3W6Nh86027fJF4TyAGrQknFQEMeUIjgHPbgFspl9TzvFWmbrzr2DiyeOPM6yCl3H+0ZxNH0nf5GIDro9yk656J7e8rylyq/M7uVUptA4XhVnzqnLmYn8JJ5j3HXHwEVBqQSKletl6FXsvCvB7bFH0eJul+weHk7ySUcOsC3KQYzHXysFNiiMl3aw6urdAQvUlEmDRZMWwtIE8Lqnt9/5JKWylSTwA93LyKMMeFgaWuymefZDxdi4Rf6W1f81L62E0KAHvT9OeVHUX3XpAmOpBGfmjCHa7oEXXi2SGmj3P0IuBjRgiRTVsLhe52PbrMAT/gfDdwzBDmG1UELPm9dJYLqV92ls5l0vZ/orBr/T4R+dldeCSSY0Al2ma7+iJaFDwMDX9HzbYvpDvhtJ7C8jylS1yivWm5L01ZF8XG9Pz9FX/IN0aQTQOAXYIHAJ7ZK2ffyOynSzcvo4SkuUYERivI3Yl/XDVORkG3halZuiwMqByztcjX/KfpKNGZ05ETNKQs1y2nq+NaKM1aleOw8clWSYDK1o3DEul1t2+pZR/ITxjv8iLjXIiRB0sCYI5Bonvl4kAdKTg++6cnt/Ij9lMPKmYHQ78RhF6xbZeuTUZHfgOu6eAG5uHXC6tH/HHI3SgXI1qK88H67CsXB6EzmYfSP/xvjy0qo0FPscU7eV5HZItBdr+ppFHOLxXl+KFjFeijQkZsMGUK1aS9GW7EDvt9yTDduG14SxoeRAlAnl4FTc2lSYF9o92n3+HBB3FZVGp/H6epFSRBuPh9EW4mdP3XwjmvtwyUpUsUKwNwSA1N7DCWD2DYa1cBovKC/8WPKzb2G2kW1xIG/Kb42LvQCkDeT+PQIIxhPYSYdajYeiYKgNmmePtCDBUl1xXP85xmcuNGwO8VkSqr8xwEssOPONLENwmmBh8w45eCO0KETmDfr99yQZxBnlrV8YZT9Ft9pFRwWp4jeb4n9K6pZJjuYI6Rbb5lnqDzzagjkgaDEUw/AH+Jb6VBQyWLM1bF7GWukfbG9qlx14k7Ymb2y7nD4ZpnuwGaFSN1LEWcVOI+9oCAiH0fnN++b6tCGWWqY6gKjkAhzqcs5xInFmDWAyT56SSqufl6KaupZF+kgtZPxIwK080dm8f0KOjv9p6HpCrl4SJ3qLLGmbJqD+6VhMF3dFeQ5AKTtmaBuHsoGLiQM2LjeU0dtvzA7qCmoxvD1nhuf6YHG0yrtVY5wa2aqcoIbdVN1K1fnNWYiLhmKM2pNoGMM1gS+0BMzGVSZS7rk9l6Butp3EX2V8lVpVm1FgO22GZA9y7UvlRYN0ioWmcZ46B/ebT2oVhsD0XM8O7zw8dGw1yIA01RPYtWE1KsUaF8sA9dUARfgSN99aiqG4miLDZu46EL+MClNZ/B3Xwi4M6uS5VwkGxfpRpwlsxaRnrBUPm3/JXSUfAAKK7zCuaUnOwgJvYzcMvtM7UIPVerJeT4RRL44TyxH7mFaQI9dbheX89/Uj5wltgE15W4nq+UDtMD35Qdxa9zedsVFBqq1yA6PiOGtfoWXJSNHUAdhDADuLYs0BqwVuZM/MrfPww+/MblOhgZs/RXBRzQbEdIuy1MOicO3p0fCvMLrRaYxzi9/bIZ9rXwMcCLuFvacR4rk76XguV83KkFu3F75OcPHVi2JrUn/Lvo8Q2h0LGc5FZ3pCAyb/QVWZ7i3xg6bYB7luaKUGBH3Mhpa4Dkk9smaOiCv1FBohCwfzJy50APfBdEga8FRTD9XXrH5PmSb+/tFuB/ecyN7Ej6/WjHahFROY2HgBvaOhxeXFwpnbBGbbppeM/yu1ebr9l1jGrNJh6wNtlkJk5PY44WCh5+dL1xSXDNlJ0ay973heZTbJ64Fg6tJjVF0fCpYZGCybmrs98nfsBbryLkIQ57aXqqA5hJJ6YO7y8s7r2nYztmdRhHq7c4eOa7NBA5pJjc0AtXwb7C+brDUxdB0e57eX9JUw51DFX5ld8ZzyxUq1feNhVuRyoQxtm+zzShAJVM78XLPc+cfnZjOHa404GAfE/GTtSeotFkak+zT+T8qH2CoVYb9s8x28hYUm5OPA5QlWm9HFA3qvAXK6OPzBrttpDUNBChCIsxrwXb2qr4pznWfGlso8yVUn8csX/ZhFBx7tQCKDEwpQGPFuqOFHJ0hRcrBmJDBUpqxEVLrrlPWyI1fIJBlcQ2+Ub/y71jREShDM2JGZ/iTudmQVMN6h+PeqAL6uAYG3YGmuSIZWIidzfeL4TLu9y4M/mz/YX29/ENsdmUvMADX4JvWURk00ufUaqgCP3OrEYLYP6FCbrrDH98hAOglzOYssdD5jniKOAcpHZex6qAnpVPH1u+5BZYDLPWxMkRi7znWJHp6E6+ROXc72SGjRfOo76jkwGDGX+LyWbcRSpOtjFMIloaT3xv9NjpNH1mQ9OajxXBnpu46lSvIGrpCZdH5waZ9CPozLXp9dd48PPEY7G5UFkU3UDO1N9DPh6m/vYOL5+EhiNK5R2wcDN5HGEBxT6dyNc5kCALlxfwRt0xR6TmBwLCuVUwPTnYI9+cPV03aerjAccuBuM5Q2mNdk9aE7Dxjrrol6aamKptnBjma1gwVOI7mea3AoPrU1GgSu8V9oazM2t/2jlU4wMRZ4KJVwuX74n8DvvL0r7q9ftcegcTsaYPPMlIgiq02XrYMFW3ilA28A/nlvOuhpWZinrT8NmJIK5FY7CrsOJG2L1yAVTWlOlzLMnyr/KHHvKvmyG95mYlRoY5iDmHY3Wm3oIO4LHYa+8J91sQ3eQl4jP1CRvI/fbLYuABV2+7UySs6My4z4Y3s7HxsqfbP2eqvHg04Vet96DOgnUbdw3J6sUnijEKuzCLjuCO5++4c/ASG6yZUC6w6klIL7xU2+7nsQlJ7W1kG54ow8jje7WTwb5A0dOuPnxNBz3az5nGzlx2+tGbYgjvKXWzk3eC+Gkla5OqU4BeaQLOANjfBVhgZHx0N7RPWnjhstapU1vLGzGZ8oPed/g6YJoJFmSmO173CTQwJySxHnmvvBlulYzBffc2K2Yzc9sLiEzCxPAyaLZstpPAgfIpnos7AAjESJ6y/mwxk7zDD+4rgyWc14gKmkuIfpZDLfrA4LjONvDk2EDjKs5p5+4GBKfgo+hbgEgO00LKTR6YD7x6/sD0OyPWCYc4TlhsbfwKyqoOeReK3Z/L/zdXnzJ1IvJkIBV1DzZP7GgV3IED+fRDJhj+Mri5M0ILO8HVlFZatcMXKtHVmFCu77tEhs/itq3K1PNEa5CMIx7QE3x8OSBYoJC8Py7V6SEPEn6pLqx50xy7JcFn0SwChjs7QwfxiguZvpB6BvOs70hHQeUyDPQ/mMAXJehelJYNELZdUyZh83Rppg4DZokdS4Gzox5dUcmSLqRAfjqqueQhge0fmQRxM6MKJKI0bimalwAQZjOMcNcN07hr8auIc3ZTTCT/Rl68eUrdhp1wBceVdd/nmGoSk5mLSxvyq8XSyZ5Q29VBYgUZj2KC37Ntz/WYVLpu335RjucJv45cEpnZJmdAZRUbyxYFG4XhzWTGEqhhKIjGSOS4CniQoyRKB2PIh7YfER78/jH8AGKRZxXI0v7LsOzZ/6My/SvjByu/WolUAmRS1URoYrRRmZAOrQUwELkqWCokN+0+IQINYfeUd9J3IYGw6fBjC0kMVvxlDeO18ihZC7DXS2tZ6IMrydZvq/T+M71p0eOjbkvqb9G3U8h5soLOvbqwdIdLIGkDn1BTWPiFBeNiaEcdUhFrHjwgNEvoeI4RHjsHag7veX9a9l4ySRGadv77YNU91ijuymS2rIer7DtEQ/XcYshqRio6kFFQWdtZLxbpNZ9XR0Rv6/YSJkK9DB0NEKHhc6E5+a3ZVpSlDxmDWHUlHN+dO44n8dRMWUgZd0OJySdaDnzFaZ0aNi3qezrb7rlamVYY+6YBs01+XeNhDw1GDSdB+W1EoIUoti3P+8xxQAqvrpbn/7EbMziqVJaOzVAafCJ7/brwzuW+vcKr1ExQZwn99P01rPLm6DehOhl8koCM3OQV1i2iKLYz4+j3kekNUdvRqtc21Oejs6aUcqTA145cnWept4w5ONaEDPdFveJQr/vPJyz0KrLAg3a8O2zV+c60R/Nhx+5sKuse7LHQFYdXcPULpCrj22/EjOzV7xxHVRT1ANjQwxaSzMISusbi8ZaFqnWOE4RoJ5fGC2RF6EZ2FT+YB8mLQ9Farq6vFVq/XYDXbW6i8XECRgC5b9m+uqMgX8g8fjtOZaVhRvvb4RDvMOYRE6wSQ+KHTiXoIjDHf5uDtfkgX+3umPYb670aMGKN6tFVZI46qYGYPnXln0m2OXlZx8pfpGO6H/S0qZWG9qiSY+lsF4X0P4mUvgY+ffBXkEEyKyi2jI/yxpuL83HYcDWHpdlmS8MHWDVX21zF8MvxTSOZjU9Ecg9JBCyVi6Kc44yvUdjq8BycL7HpESCf1un3LMiT1aToDZaCqNMK3b5JBhHyU4T2mWq3q7yS0ttlmHorkYsBR5OC/KZEJMOxrCZLDvGwTdkedNXOC5oP+miKaoNcjpTKxLv9QluezX+rTjlk3tr/lzqGBU4LtoeHe1Rzw8pRaTfzTUSSMLTlx+0YN9s4gkq26+sVGnWJgON6Q4fBuh+9hXtbfLyS2hEcXsge1eW1cKWD6K12t61lQXlWDKqHsmd3O1bKqzYAQFDgrYhRye3yDQOSXM12eqHXoa7lvOeMwrsF4kptoqmhy2KRlLsqavmIyk+6f9Dz4lvLN+UxlkB/x6hBiZr1DP0v1HvqB6O6RvvwEKklqICSbCW8fP54rW4PRfFVgVv7P0a1PvZDjX9LXeB2S0C0VlYbR5xM8BT+T/7qHW8gEl5SlNdo/5rCQqBQTplrPOQNAT2c4/9Xhj05IULXxfhYFVLABet3WykQPn2MQ/Pyfq+/rzD2+6su2y6ESirOiVJBRcPkW/hvWy64n2OvuwcOUe3EvxP/k+BRo0dTfn++8ebFcQOfv2+cmJKBNdHMaDy/k3NbOUVdQ+Qegp15UlVGKiCsrAmwdURjYjDzK8jGtE+IV2yrJWqdE5j1aoAP5KqmbGVUUYq+M2q7J4eFEICDYHfcdhAW9KcCwpk2NLQyHXdYVcYhMikOyiYsqs4blP8RBdkdqDIc7KsNxgxwMYF0Hz+hTu+G/9sK6EZh5RqwZlkODA+0HcaHS7OxoJ/6R0v6zLBgHZ9N+B3H7IIXro57a/nCCXuyMc6WUExVYKHVPZdpZneqe8Juk0UG6jK9IZ2gTtdBsBAGAl6M1kLtCEcUc9P8/qjZ7flfPNl+Dqwp4quSBoqo7l1S+37XOSBPhGCFwuGTIj1puR5lCENbtpsMH8RYW077APJzR8zS2suH//T0wymS2jGcmzIG3ueUR7P0M0Uodp8Bs+bPoZbqxKperssDDBFG1xMppALLqRowLTkHWzZ3lCkpdrBWdPh1iiw03joleLe5ClTcfLIUV7qcJfH35inQsGpS61KI716jUOUXNHrCdcV66eaHSwq8cFze9pQKhtqxIRhMdrtMiHv3pDiqjZNBWLD9dCXAfZT5xfa5OP2mP3Dtyn89mdvyJrNKuZQJhuiwsRZe5jCs+9enAB+zRW73A4FWsInlgJnKhjMJvf/zxe9ta+L8JW1CVf0+IVHpXTcOAaVcq6QH2CuIGiVWUURimiU5cm9Vlh2055y9lwr9ebZMPRpZ+pt2DSRVLK6AV1UPvMdu5TaqwtRJOTgGICvybJgyCVUn0053TBBqQK1fnVQJ6W690BsW+4IFht3pN/1YHX3PtrT0duexTrX9qwYLuY9+ItX5RLjLeisdjWLlHpmhtZql9S9TdAclkudO681xunD8QnKh0XjMCfOqdof32Jk6W6pgXR/o6UQGKHutDIwN/+BrJ4ruXS++DduYDfcv1HqfLO01kewgqsyGebVnkUwdFtIkfWAOhhpHqQldIk/3/IgnlRtGnA7O0Sv/AP2SmOsmOitbDPdqXiJ9JbBNf6ZgJe/Hp27/PttzDLgyO7J1J687hHnfrIPmc73V2rWjysRRP1t/tSLHEqQqAQv2ah3a0nGHkp00A7H7D0lEM06Sg4ju52J78oWLoPe2mXVIvpGwj2SzpOJuHjrafLeWVkOAuZ3N5XUGowY9Fd4602XvZEmwWpjmZbO70GPTtahOwcbjJ7oSc4uMJF0dY1zK6s29ABl1k/q0+1bk/yrrMXPa26SituDksfeUqonKROm8jjiuDjCER+AEc5NmapammCTa2m6FNwBZ/bjP8Plaw+x4N6+1tnbE0y+k5vH+wExC89BN4SbxTUxgkG/w3OaHl57c/TvPqMtNBDrV29+VPn1h/oOS0rwA7cTp8CIShejfwiPb0wIVvgwBLpYl80zLUl/DOutkkD+jmV2dEQAzE6vZq0iaMA4x/wb2g6nDMZqFUVZt1FmcPcUGBhZRFLUg2McAXKL7WWJdLniEAfa4CWLi3XFbZyBwAC6qnn1LVvyp1zDZHBoZMeje+nyoCZmmVKThiTrgPGsLxzDmQYRAMOnNs4rM+g2YL33GlJpDNRzF3u9CAnhusoZqRd22oKKMgBZDYUBX7aQuh0fP3C4krs2C3qW89jQRbkFqMVV26Ph1iWByY8nmyBqSkFMu9h395YcN38q5KE1V+1z7jDbbTAr4E1KVCHEYqCclWX5gqYLDpv2uZSOc+vYYSpNr0xMMXt0NPFVSb45r4F5A/UhGVNFMzxH2PvZdLQ5v/Jw3KG7vz+3K9UuzrmmzNTbEIjWzZzRoux2a3jbjo0Ah92VkbNrXVTg48Le9vxSgtCeFNZxcIUK/2wNV06TPmXUSxe2rZXQvg7BMimggYn6p6bY+vOdX3HpTm82dFwLDZGNimDhEeOg1i5eiFcIEyOe5alu0IVVcQoqaQ1BXg1QBpVDn9rrcpQ+xrXPsiYnb5CiCsQB7MlplUpzV4O4x9koGSdJjcKcf9+hHzcH+OGVxn5lUMRJMn/CIPtmPsDC+x6F/w/vTeoNtyfZ4MHO+KEWjbUwBANvn1yYUWeCnOOHlsfsYzZRSPHOvkTizSN2+BbZI0p6q1UoYlCq8KfsipPEd8drRxB+UPwFZhLIsosn4/Rb1KxvQSv65pVGzDg3qQGUimzyQ/XcKEdqDdhKXfry/3+AoTn2gaEQWgaKNBbEeCTUSB3zmgGVKmum7xOnR9AqnIAyLLovY0+peJr3pLMOAR+DrPLSnJds7QJy+Us0s6WkHT1d5KC3ufbv+oHC9A5ABTEPwidYSDcQKF2GFUZk0SZJKxLOwnmKjcQ5kxu7idtAuNWvMedg5Q1JMCBjxyHOEOSjzAFIB4WIg5cFZ5AeB0XpIXpOndm0riAXP8bseXxhfe+2nFZVby4quqRkae635syBVKzVKzIuqqC7pixcnTDpS+b+TNdd7ArM9ttsP48SlUooU8IQlvoGtxA3XUpYiEv6vy6oRrY4+B1BJzF5RonyFgutAlW4UidkDJ8G3N5hvUsbZirL5bsx9s5b+hUVv72nL3706k1TTDQq1eJhuH6qhjxWMyNmdpnxQcm4Gw3JcvW65yikhzRDDPxiyUGg6xNd5ua99fOzhmNMXn9FWoqT5UgHZ7wfK+uefsQKAZBAS45psAwXzkxQcYL1GF6H3NU2qGY+rtMnwHXBL/wnE1tuj4kOnaenvk9JnRCZSJaLmbSOw09SmfhQ85vFHZ7hqmLmN/PhspBLEyj9oDD8EI8n6jLyE40x0gwX4+kQX1tYVLabPb8VenjYkZcY8E+TfLWy8DwZTZy9RjOAg1gjKqanLnEpbheHesbcIpUq7f9D73oYeWNYlshipmt3Qnrg8Zb0CQKJeqdRBRxTYE5N2g0sNlgkKrqXAlH57YH8AYnl6FqExNGUe92BnC9vN2oO7QgBd1NOfTxId15MX57RxJaVGcoynzsHK9lutLZUyX9K3iPOt9MrUtd/2oRA9YLgSYqc8lJGvyqOSv23IiLosP6hZsjKyHZk69VHL4Tl9RzRG+3eBEYCLjBqWr4h2z9XT9NrIbLSusoqfANMAe/5mN6OYJvHApq05c+q5Mz6y9EEHmp+McxaXTLZEmYFAJCTbO3KURS8bBLXuHOAilOem1D2efi4BmlD/obGfO6CZe1bVxF/Y4Dw4EPJL2Az/g5BRC316u7byXTjuiL0y0Mq10sJU/aAqJHgsxT0ubxezSN1zP6dpWanaPaQ4mf9JSNKcE5s/2F6QkocYBEyxK05E31li98rlSLMfYVJnU4y+/cJ4hBXlWIolguB0AhUu0AD6mP4d0v+4OcFRirjSxFnodqljyTYDCxtf/pxFzWLgRqJU+z8HPdvG0rl8wro31gz+J3LVIhDAFOj06nUqR9KM6jTlXtrWx1pZWBAhouD5mM0T4mKPOlU4x+4pg1IFH5CBRFov8iKDsL9G2q/ed4bt/fS/uLp/ge6Bwuk1Z/RZx2AZivn9ZqrT6qyivY7rO6AepAQU3GiWnPEpNuiZbnFSQX9HYrm8YF+VR18uGFEqZEBFziH7XOW0Llu/9sAEAXD9gHSQJromuq05CZvwzmm1ZB6lQsqVf9D4tCzn/On3wOiheGe3QA7+ipacXEj6z8ZsDwdypsktuj2dxhd73pMZCtmL6z9SUVX55PTVgBIk/l+Isv4LVm/SdmZDoGsOxRuXv40ceOkgtoexSDQRsmGzlsqcgLaS9X/Q9CO0oTZcPl1u6PFCVE+cstHMEqsFBR4YZU7RtnTWx04tExseaYLncdq4Lkv1U40gk6pKrP+1Ea4xoEoDf+WqttSHVKW87boCzCjpRb6oxRxKuOCtIvfbkAKJ0RMzHHrGsGhqo2mvSQ67SkUww+qY2jZJHIYE6BkxEhkC6xtxqKkWfEvGdyPxwiqtcd4tAmmoCpSNezWkDlOz01hP+iVITpskClSs9T6xe6wMCSWuHu20VoM1rOyx0V+MIT4c1CyDxUKdmA0jAB71hInsoreWqukOhl7V+z4DQ/tCj+BJCiQD0f5/fqIy1qqAs/yBntbM+QSnmWMpG+88w+UcWXg/plmXUN5LH6mVcY1PkDeW5nvVS1ZVcwyTTnfRlKWPLklsK+Rgp12PZQTQYTjE8JQOwIYPxMmEwJwbL8uRODC8Kjle4U9Hd/ApJTe8CWWpCqMJ1g9PtjH1ojiuuz/E0Q4q8ofvRSHnaIVW9Zpya1SjaJ7vLoJETCPsGgza30l+cUXMVVvPEp39wXV3mgRSeGoBloEJu/UcK0Nj20j76Gk/ioz+OwPz4UkylcyLocFpqCTTTuhStFEooseLOdS8vx0aiEU+JFDfEIBd1ZSxHXzS3kicjMd4lH39ea9txS/o4Uh7yL4EihVI1hOZuoyH8UatYqz7m9KFSMyj8mVTfR7HRFziL3qSA1KHV+SLxvaNvGReBS38r2v9XOI2dHhDVLxUPJ7Q4MVVXhlDhQrDIqqqAXnJupv/B0fY2CioTArK4drB/nO+sIjO6RtWQzaLL7W8brGREWpYqERC9LvEbay2D7sIG4W8L4rkzJv72Uym99UjlgADn/ewIWoomB8H2HbjE9cQd6SPRSZixF8iW4gn71+Ae8LiPIxhx/dFi4WcekleaSRlGH4rUiabAom+oTYHnhyvbIdjMgx9y7dAz0KKqkIeKGKUph3LbbHQNaGPnJLQvX4UM2xqJEkejeVuaL0MdsiFhy/Bf2VP3AtlPBr4TuVzVwHIJCjhGeuRX6eMYwILlEPsGblagWPsOLRaIepiH75iwJE86UZHClqI2CG5iH6nHsH7PszCHIOBewH0sLhXhBBUVM1A7J15ggSWbqjjR9LONcz1IsUhWHWbA7KVa/iKWk55W/X3ZYF8pGdgGLAJx17VnA16JDuWor6nJZxnn6q3Hi+TzrscYlgQlpSr38kpgbPc94/2bKtpVTYdIDRz6fSPX1sW9C9ZINqZtYl2FlpofquBm1JZbxXY8nEpJdypc/omzU7Uu3bGhzI//ZiH2fbuBftPDX0pX7IyqVwOa1DjBR2wVWM79ttvo0/Ngx1Zf0r0JqgAzxef1FlQn7I5yy0/JzSe31kQwpUs/UaDjbB0cgjjokZ9Rg9lcow4i3WRXTtyyHReomJ1NZJVHDPUiuyy6zBpnSf21Lq9bqtBJ0uXvzxqwQEbl4oJ97tjVcZ6Pq4It4rUuXqagr5znWyvW7Fow3bl7paEiBysD+tu0vYLn4TryDGxvjcp7bosFXpXYkNL9kJdwU+pZE2zarFDVwZFXNDcH/oGoad9fS8AZe0+1Zl7H5noVUgIYu1kUdnXlIg+e1W9kw9ZsNgcLalI2ifUPu4/chS7FeEv108Kcy9Fl4AqSnIf+sVGcrlG/e4u+hqYAqNTOSmFtcOLjB++utWozyAreOAElVKfAzjSJtG4etdSchR580sADyNDx7w64FzVwkWF6qfDEI8lU7jkL6huUktbOIJgcKW6NatTD3Mmpn4b9SD81Tl0PRohAn+uRoRiXBcSSLiqgSbBilzn5CJGjA7Ok919aGZ+flhuP7y6/irj6/oX4SLTLx8lGzlPQarN/nx6vxY3T9rHOPgeqWBUHkNGgA4CLLAMmzrRDHA2xbw0H946x+hfEIEvd0errClMF/cGyQXmwFu/C7H6EsxFt9ny27CZxJMZCUIqKt381ynsZQ4H9eWn2Gnz5z7Fi+hha4rMO2HATh/aSCzEsBjXoASAAB8V8+Ll9I00lsn7JT5KH2Yp+Hk+tsksE15j6WBObW5jqI+9XC55IcgNENp4YFw9zzPBEmGHjrQedjyoz/H+LWNWJl+oRUrVlQUisX6KhZTx/nxH0chJ2dStaJwn7yiMyZTUF+5d7bbl1RjlY94AdQoJjP7Flq5BEDnYpr0JlYHm/J0bfQMclXDRCJwkgkM9YTkt8FgjE0kiN+zL7VSnCeErPBIO5TlRUaEBhB8tYBkt6l56/OfWCeLI3An93CBVQU6GaFc8HKeAvPW3BceT67JDAufs3ViqQL3O4ji6wpRuxXBEF/Xh3NrVNi+LYCpOPVoitR8KTIVE3liKYw+lvqdD4Jl0ezpPerwJ2ws/9xXA1x3JePFBqZQL9wNrBk/e6ETJlEQz0QlZPw8EI2pNEh+yFde2JeIM5XZ+7NiP4uVxNwhCBLveCV0Gy2+KgPCpEFORnhcrPc71DAdNrn+AxLIBe20VT1lbf5a4FgXrjKXc946iN8bvup2zgNrYnv56Xr6/fYPLxb+v2/EqfAwRv7sybYN0acJEqafjIhgb0l30fSKVBEEfnX7axFoD+3Br7Hx0STV+f+uMBULkQz+iclRIEFb5pXGS+6rnpfxcMqHefjDBLkOhVgjRU1c3Vd/nJwBQkXjdF7CHG5hvFCxMrT6LUrzpmImF4+Ku/vL1sjxg17ebfIjuoy66Rh6tEKAz+XNrkyI4z1ySHxWKQVTOG04279JdPEDgbbHXsY7JUY5IauQvbWyiUQhpYRhCctq6qOOT+Xfwqksp8g4//LRJgvwfRneochOxso/V/kqBByI+AuTLpmFksw7uQ6qb7V3hhXX1HZ0RX3P4wAQ2bowT6Z/ezsEDbeqixa+ZQM9vgYjf9tgrL1bqIWEmh1w5Fm+On+MKCt6PPYp9qTJbyC3HgQyyxuAg/AKQHMk2S6OkqaZupAYRIqwbAecOwYqv5pz+5qgl4TT3hJlLunj7g12BPjSFWuFuhMlGUYTRzaE30uRpsH5T/hkGPeNQvI5kyrTKbogX/WghlzJhK0cp/Z+GxfvDXaWAI4+NnlRFHZl+3vRcXGawoURm+vveZoFGMN2D4GI0Hb7QRqaFNXT98ITS1Npai8nsdSmXSj4m+yCDi3nrjhLW0QGsjbUNEAkLfxifQCaoinuKbn3rK9xAhEqHhWnq0cA+5Q2JwELQJeaCGroajEiAh/0UqPKncv9Ff1YjZzDkuyyZAxVrq2YwB+wH5uX1vTZaiA1zHglRQMd3ipecWQmht6tXjyziUHwDYeBGdGrFtxKveOj8LqOr5GemZFxZ0ADyjQX2VvMBpPBKazY9p0U5QkGcC7D95uvOEaoVzeD7wCYChM9ldjr9aL7ht+rAn7LMjwJ/9F/eDDqlEveT1ZjSOvM3NpRh2av4Wz/ZtQFSf4NkWgqzQdpBiDizTfA82+WNuAIrZLUewqDGIA+BBl26IPtaB4ECh+L+gmo0RJyzkIHlrrfKvfj6NkEvjyjM+rs4pu0SgAMrBt/mY0V/WSPjR84RsG2cS5XcGyBPtck4p8cFE6YHwnwcSfOvnw2AF8w+510DFbNLryZu5S4TRiiX4qQMqHYiq6cCKImy5YAuwNtXH+TdF3IF3PTLj/Ng0pk4kvwuiD8g6SfggOpsUhR6qlbNAURi04Gzra2+3yRJhXqbjKUIiTCNroWSH4d3s9dBJC6DvXq1K2QO/SMMIJ36W4AKIvo0MV1opQDOACbsSZJjQ3s+9gv4NdnxIVQ+yb9Ki8iu7AJB1sNfzR6VaLH+ddAX1RBq9vu5ttSl0jOhXplrHl9T/qF1JYv80uX8qybwWYZrgIhIO9jvJW6DTcjMICVyHks36I5lP8qsyEGl3yRn3a3k58Ge0J8nNyw1VT6JGRHe6iMYmr2uUJoG3jxnwl/5iOBAh8LrVO/+Y5dXa2ev3SAY6OvoEcv6v8kjNm8ewbSmp8TJ8vLKDGClzLy/S1khZJJc8617ppFYvQhb85bEu/WQywmTa7p6gDXj22e6xhoUo6wyngs8WWgvydR1gEtWSh1bY2ox6YYVDggdpthcpY8sBXSzYoxkCJf0pLcV4GTJcRBVWtGAHu7Zhx8ogOAeqH7fvMixwegpn6VYVWxiw0fHDQC71x/qSVh1np6x4dMSHpJbeju7KXckginXYu4JCACVbg9xil2TUifiS7ze7LRbGzIwvpUVIlF7fzMv7eQHfDtqoWACaRbD8Oq1n3fZF2CPNYxkDFwLFeCdRR7bj6lb3CIy7xImbUGBHFakPbTK518/s+VPQ+s3owNVE35yvEDAgvuVHkJamB7/MZrSIDEqedkQ/RWfGqDl7LbQCCmgcRNxFS5wvzwTeufJY4dvPqVu37fb84DhyHJoMkmS26pqbQJFwuEMv7w63F10VTtoOk5Vz7/RQ85HenDyahNWtUmSao/nnoHPUc4kV2+ASTeFPas3VJtvVFFancaXWQoPRi7upB/3BY//rqwha8rurgbH5sNJDTz5UbfRxB84HqmMRSpZ1hC2Kq5TK5f4hYUNrnGhNB9CKa3jZYRceFBcuMUafQLAZRqVX1DukxKQZ2VPKTRuSJyVBFZZs9/R/YfXMHP1o5qU9oVHa9Iw/KcYjWjlkT0nqwxyB7TI2fpxsrBcbLIUbSGBBriTj6QzcDfIhibjWgYKcLXNTT40WCyqSJ27wjOC1uiogN68LhNync8BPlh1f53V2CWdtWOxkOX++tYYHOQWMwRFKOmjp/OtISyyBVTBHHXiFlTZYMPV18cEu0FvXa+9ZUrMvfxs+92OnGkLzUkHa94rgfOELoiprijp4qKKKca/Mym5lLvTMCFowySRe4zIB59s2z6cCIIoVhG6REv4BoLGX46//LkFC1hFxPeUwGLwKAF5oNuT0qMTQCOuqsF8TXLoeOFWyEpV9ujaFfgcZbbQ2CgCNzpgGrGPMTbQORtEhbG5d6SJsHG/UevPevwHidrWoIC2/U5EJecPv0ibBCv3ih3siO5Neqnr7S3s+9PtFpjzJaleRhPgEL44OByj8iyAiccNoyNZ/AsWftx5brccqlwLB21+zrhAPq2NKXC0SL1F30gyND0hrMBKPl/5hmyYHiYNtk1GDXzagBKCCVVYVrBaVMGbC57l6Muu0Lr6itxEWPrRbs6cISqYD3XVEsUk/oldogNxSnC9dJ1IOXfZdeS5XVpGn5ZE9a068+OgL9pAhR35Kmw8KzQ0djuOiOYrSAj/HtUJfZLWH1a4eoj4ioEPoRFBESYCiQFUXFixqqX/+fUM73Zv0KlAWbjeJVR8dl/T0x/5WSB1uY1TaN57KUFW95rLRg6tgEUD3v4vMzP9KVcYonlYXqtn4Z9AyvYWzsIkcbpRpH+2vEHEvtycCXBCu991QJZmFBVQCD6R9JEuQIhlWzmm9Ry/ziQ7dW813EIC+4T+yfA6SyxrnF/7r6ar3VV0R5W/pH18CWVagcDuATSrRXIM/5ulY+3BGlbKg5rTVmfJEKivjlXFdhGPiYAffnluMTQ+7CdiZh8joTuvVA/hsU25lmFrajAymIn0ysuDeCQHA2Uo0jVs42kk0aMqwU7omHO92vuEosd6JH6nGKdl0VHEXnADg5d22TGccPD9WzHvTamE+84YmjUwKSIwXD5kIJZ3uT6rvto4iwATXc1mHHNeGxkuIXhwr++3wLHrVTDMyJqZlZ97Dwc7Bw3XdkgyM/fx+UYhs5GMHlu59Js64YrxLi+HIeE3KhcbradpSOvYoJx7Teif4fNSyVWXW5X5+kXANwICDeDZXaVJsqBvIHtaJMOrCL1dy1VC2P/vFg6DmJv35U8eTYHurt8dGygwG7B0TpUXq3cXP2nJBhj8v52HV+4TltMkpsmKCnOKQFqvUXfw1a6IfKwiJXGvjvOJSowGzyQqXdC5YD2NLnzFlkCV9/NmtXBxCIhFThCU057N9JTq5m5HqKlVEV2QsjfwqN11BUJNOEd9jjoyWbzTvqGtg/1RvNhMJWa253JqJgCxrvHGJ9RB1GdOLiqbkcRBtS4Vj9JNJbAvk24r7xW9E4WG9rf82yVc+3gsbp8g7lXDwy52sPD1wCIeaXDRcAm3pR1/csy1Fc89VuE7E+mQDhQWqhUCvAuRzempbuWtdPMnVJUVV91VXvgusJ8k53Q1CirMJJ2/+/0A9M4QGZD+kj/PoE06cNaOFobPQjfAjXWmVgiyi4Vv0tX5hJNFzZcPrNCW6mgsiBXJggaqtob9pf/cnfS4n0Kih0hdw3MmbiVhTQo93EkaaVJ5TeDAraJoMhhpL9ER+oVDaYZfZ831WyzcM27UUKqw0n82Uv4/TdUS4rGC5Ue/h2CFAAU2JX/iDhoxEz4woGhMxRB9+uHp1wcuGQ7m0ok42ZcQzdZlvGmMOdB4UlzMfNDqM4dlT9bZK1npJnQfzKAWw7Xksc9oR5xsrBtUh91R0JkiYrPHxD6mvLLpiyr2tfCrhEGGL20c30cbYrK58jOO/1meMliPQfdKLTOxjyh8eaazyteoYSrkiKY/KeKtyWplPkAJ7Q0j5qgACk8yYgZpNzp9KsojfpsHgbMS3oLYvgdrcp1Vnhqg8DE1M/FRogboc0fLq+54Mk/LN3Ls1ZhBYvt0S79doR7D02rq5i0sNO948mxf6PURRp/hQcNsJmsxzAtod95RM1vq5vzibrgH6IDIWBDnU1csbjwC2XRABRRR5tPUtXk1SWyWKdq2zeBubZfsYuiOb2MgEDHaLdxqr3GdRJCmR6f2X4cxzhbtZ5tuG2PrOiV9W1Hl8Fe9rxxoN1Fr309CG9+jYmIzXa+ZDQWJPEva23ndm6ry6ZxD2Vhs/xXewZWyU0NkM+w41T2MsC/gGDL+r/DcjxsdhWUtuH82Im8BxJ6LionFT0zb2h+fR8liEuZRipQksfh/6XjIiPMa7eKQyvBcKbn3ONJQxqOszIf6rgl9nm8ydWLkOapgGgNjDQIffFLFb1CZirlR1v/GWZNXBQq741+MIQQ9y9/qKmJLgHVVy3W8h/H/LKUXR84Zl/bYqkm49UflAKDG0tIfbhxIXFx9jYP+NdCFDLTFPN6z8ogmX4EE02qMNRtO3/h8pyUF9kW7YYcpmCiXX4chSwelneWoJYUIyPhQjaDvjzNldIL636cGbex+r34PVmvOerB3CFGN+8+MMsOIGa03jkPBd9E1xoOb2mgx3urf8kAgRwSozD1kJmOb1wxRcNG3+P6M+jlNHGSSokvDV0D9akO0dWPmKO9f2RhNSmbyxkqJV0nVFnGAMiI1w4CnQ4skTDTp+gdKUDDrXw0XQziDVAIpRnBrJ/4LzGkj+Q6y9CucT/2qwvMeoYk2xAtmm/qdFh5HPmjoJrRLHYTMP5AooxPeJAaumdzoB1fOU/gEPCwUghZmnb60PPgFeY6wqGBCRQ4yHMqwosDw78rxi1NGW9VQSA7OvBXHmORx2ILvntzYILCWTK4Rwn70X2XMjEF32DNeTQBCxzrfuM7Sbk9odSY7YogPEYG0WFBaBaw7l/jxClH6PVibPe7uCzbF8gbOE+A0ztLAlsZtJrvuUGDx02IMTRdHnKkAnofcbJuwQa8cukyKtFEyRNNc5MwoZLX/UwtLFOCsZ6eqR4c41ngzaD0SGXrTKTfiNjGwNd3EiGxFZsP/0dHRmiIWASLOlYYnOrW99te9LTQDzPE+VxXjdT/+Txar92JQgdpWaIH93+n0YTs6xI87oqLnHQJp6CXDXob3OB63i4GBtK85gHnWWQXIk4pUNQZvV+U7rVR3m6bZ/czHRndjQidJprJhVsshQ+v9jaqYRGekcpAWWeilYlvbHp/1GaVD2HCLKANAeavgRQ5PDuhsZwEAYi26l53ZaaDVRrgSxp8/DemNPSHy3JoGWks1O9mkBTU6ms3y2VRGA3yfJIftCAAIkac9NePv4wsBjRMaEkeynjDI6MKuXOXplomnuX760Ja/Bj4j/c24+89Q1m5DzuSxbt7mQmq+cIVVSoBGVa6/wvMCPGctd1JRM6ExHgb/vDWLs876Rp2Z8O9f9Kh0cff/E1vB+g2WL4W2tAGZU69432PMxBL0haSqcEgxioRTca5q6aML/0dgGm7fG3is2Y64KFSrHw64s+O5Q+gg9Qu6N/15AiifEisFHqhSEWL/j/PREJJb0SZt0+FKhrx6EzopM5Tz7z3I/0dwo7Z+5TDPl7oCpe2eS8VN+FwyoxXGNGBUvyN7X6BmcYwHfKiK698hxLgeZAHOXZzXtfY5ZJwnUv/htrMRNj3cZ7emmnIFjJe5tFnojVU+7OPVz8E8Q+LU7kNFARiAsGbHhzCgbKA/Z1cxnpX3+z17iJn+hU19UN5VZHPffCqxOYFByd19flq9lU7cE14EQ8m18jYzj2ImpsvMj43KUA98kp/vQa4Nr8aUWII7S5l9P8TwcLJY4Cq2slyR8fLheewmr4Q9+6QJKU707sqsHGPXupIUHvt5FEgdZPFuqmFMlONivviLpAWfW3PBSkZn3Ktae4KHRev55fiT4NsVCVCWH2busBTMgXudBytH03E3beTwkYD5vqp417EpPNUePwsb5ztPiu/dj2BMcmKF87hxHsAJ3GLcOUFjg5+NgAKnn3ld4Pp/+y0uYxPB4bT6AqAh7eDKN74WXGSLjJ8B8Qh6VhvrhONgbrJkbfR9fL6eCkvULuFxX0E0+2wI5Tly2XIPHgJIT15ISzUQw7eTYMseAVBmTdwNrbFF34gs7Fl38NV73lv3TTqhjpXYmmOlzo27FxGENK0+af2NGU51rB7YowmJ9uLkL+Vg23jQ+xt0q385ZMQy3RLrtZ8Tcq53SWV4DK/D+l9ZtrpN+2CYGG66TS2L617PcjF8DHGoftJNjx7xDYJ02w1ijCCYwCQD8acOlPibRzLbZxvhJawUcpADUQvaWrxkMivvP6eIpFccPeb4HsM6L0mCp+PGWQ3/llM5WkZIgU7wUXS4WVFM4o5CLfvcveXkxdafRJ8L0kaDSMR90YohTmc6MG7xjQmP8L8w+IjlkWadIqyX+R7RmqJTLzMiBnyjLr2p9lyA8RxOGqtc9NviWi1gODBU0JMU12m3oLRfJNUxF9K58uD0f1TzAc8NLrnwYpYaJQeV5gmIdg0nUZLMEW9pc4mu/+uDEk+F7cZqxgYfTwDvVv7PQFhxUtq4Ay3PFsPNhIpqHDIBN0q/53+CpkYxuVhmknwoqc0y91QyVoeM9zWCLjV+RXUGtolJyPxGu0YTD4l8wkOLTBURl42nIRbw5iUKTVzm4Sotw5M+jhZ29iGmx3smHlqH5xTlyouhfGiPWBEhYAm6kzCST1d9UawdLA0DG+2e6UdV8hdT9XPxErhaubAeTg0CC7LLYuAjx9e55RSuukCSRGGJduBPZf4c5/v4RRiDbGffUps3hQQ9eaoE90nMN5qZneHPo/X3h2s1RpAIyg14dwbH5gsbP4O0lSoYLdTpAE6buZGsdyzC5HJFb+RSoN63teWjYma6qnAWkq61SaIHGqQ/ng0u2dW/qQEoxlhXUlXw2iThjv+cQtN6Nv5rbLb1K/4JeKa6Lsq+lTfE/xfmSI9Wfr2U2mxdB5vkzxbrivKhe9rFHj1FrkV7IcM7vDYjN1Hy6xKTrpq85r2WA0bii4/YElkx54bw7qSaY8U7IYPSgJ5pnnrdId24Cs3p5poX5Q2CSTaY1r9i6jsTdazrCXvOiRQ2rwQm0kWDzJj8UXy+bq8ju+3LR72PgcIlJL8ejVlu4667Cf3SLN7hKTmfm+Bnt0DnLx1hpQd4m18ZwdoRihYKsKqap0EvvVfxP1K13yAzwhOarF2DvzWdvxN6jypFBMkJJW/BNtawXcsxemwvP+AJbqDl1fwsm4MvT9UHwRI1AFeg5VP8FylGqQhgt8zCa3zIly1Xeh2K9tD/yatXHJSosCf+j0jk+gLAyBYANfrg0rNEkJAG59MOTDSIiNl7oVTHFKczTsSG0fCshOrkrARDJ68yHB40ZKsYlsj8VO+SFSNfWNLUZwuy0LpcWfiheHDiEnEm+7vL3e6J4fMtMqrgPweHXr0iHgmjPzG2TQsHtDxMx6zr1Zmq9hwidIVTS4wgADCheLO4d3PwmConxCoOslSrL0IqbIwQXcKTE8w6A3psGveUzFh6rnVA2BJnUf6ztsiE8M9zNsjbiBO5VxELfjUseMWP/mV9M/CUn7JuBvKnYXpLvApxo/fpQbJLz5GsLxep8tMuVToY2yjRAMYbcA3PGBnpGy2mneCdpRUUE0ZCQgsgqdg6Tsgz7+SHsGxffuW9/DvHwv7VC5pDeE0vBmgEZdEAasHX0OwKI+ins0PMHUqKJwAp2vwM+UhjxALAFu2GkxGqFVJnkHoDEJeLJ1Nb2lZC8qdnm6tb2a+ej3BAWvOl5xai55UtXi99kCJEOve2HJB0rEz4CB9IbbnwiefMhBNBQW81noVySXDnrkIB5pBiuK8GUhY44cWeVHQaFFbwENGDTFpz3300KVBUph6KhoSQmMJYDm/QtXcxr9kAvbaCbSYhw8ektitNu4J7x4KjBMF5KjANNUCnLVKUZhPyuuiayO8CzLhcK7ChpKLqk5TZap8iewhW4x5droFjn51rhpdqne6GVBZZB2FgdZMLb6zzI7hM2kxgZ8/czHyVAEl3KXZVGHoqs0nQnlDbseDTTa2NCMbq+8BCNwn/Ksb7r4WTQK0YO3J8JulBHkHsNsD48rkqtAOnqeVZxiW2BZ8b1iWKCxiTN9i3ngviLxugkjjaGQ9UteicoxrpTFlHhVIw+K9j5RQNfy2RVr4vttaM6p68ujB8Sw0bUApTr0jH8/FAXbgo0XdldG43xha0+OGwO+mmptLKSkz00LCizMUvyE6BkUVH4r7AYAzIR9edO1hsqXPiNB1M04qdLmWmrOUZIv6b6nIw+54Y79xQuSBBWjxuiboVZp3+n0riVfninuds+YuKGZaPpnlOHOvYDzHOWCtH51hfQi0m/pNykM7g+TX5vAgkBboE06ijg1Riypqv/COO5n+JAoiq4YMnvjg1D35WAp5/WsDHVCMLDbIY8e8L4oRJ6nXPdqMYwkSNy0Vcf7/ZfelpYSIQ7qUPROD33jhzVSnsrfB8DNZ7UZctB1SFW5CRRJ4ipUyWeXOATjOXwcQJBBNxBo6n8geGcJoTBCTvbBMICtBelhpcKXllaOExAeXpZ2JFtLUsmOqJXebdkNxJd6gJIMLrQtFccUn/33PxWH023R3c15Y9vRRTl5Y76SzaHEvrnwyGFHqtEIgGV6IYslMLzu6R2MtTkrs5cXy7/uS2HjIsg6WzVhkCpUJPPoEZnw38Ki4f0mTv5XZ9lbmGqOZsPN+TLBn6SZBDbtOgJyZ4m0W1XscXAjOVqgNMbHQzQ5mu6tH+PgamsqWD5oeIs1HCABZvfeyub0CLN1UrXE/QoDOPpmgFgcbUzuUIEw66wxD7sVrZMaDN+5Fk07u0fA34j09RgyBE3vPkTasqz3R85aKAYuOjFo7jr+TFDqJbIhx/+IxVL7o1vogD1Lz2f2vU6FQkWZzU2z8HegLlXnvVt05bjd4OKb0h3mrsqJf9TkAfU37XNAH6oBwv3xBPXm/ru6epiwhOIfJjtfWkEE1PQJanNXYy3eVPKdB5EftGQ1m1PU1E/PQQcO23Wn8RgsG5rGQ+7oRBmc9tswh+OyRFNnznZo3u6zOtZrnw0SvwdJ50qbM3W/Ocnur4DeCK4KxroSSW5pClloAn4JmJqJ0H2TTr96Kw1M/RDB3W4Yz0QTgqP7BF8vT5dUo+yqqEM7mybtNDFThwbPs1oy9fuddKh88cFvGSoiQ+TkcxNt5aZqFa4482fTNtmEip+DhLmKL1QLIV6XD0vLGWvBGrtg3InjHTaiD21hnO3UduBA9AmL+Y+tR7TSgapl1i041mNsQYtHj6BUuz0ZmT5e8E9fox7JXQMCwTE/9HIvPfGBW2Z+dDa6AIAWr20nrlo9vCsUi/YEX2Og3ZBj5UZq3bYyS+UfyprqbQXTNCfglJBOybf6TuZaE1QNmwSR3bZrCeIEvnY5Wj7scF0h500c4gDulAVLJzkLy2unvNJm0eyso4TZvhKzJ37+MF32s8cWOygUp9DB6nGJDIwE6bnfHtiWOFhVytP5E59e7zk80Ph0J7jFSVju7KsgQ1TTgEvOABAHCoPHXNiPELJPVje6Oa16xOhIyKWY3cbTd/w3+dpN1geSdOrMhWFQ1CTwnnQ+TSbq67X7rO0eJsxr8jU9uVArclxlLXS2Wq0XqFIpnKGKNhWZVThg6LFjkVJw9iGdVxLN2cqdsbEFWm3Opkf+wfPMCc0lV1sL/QtQvD2wV++cNH1YW3mWpcio5r5sNSkYOXwCheY3y/sdy3v+SJV/e//r6eZ1eLnHl1BM/980epdjzMXAgJRw0t/ZXM6AxmytGWJF6LBxgr+TjjpjnLZCJMFCxjmrpJpqaXnhnKzcyhTM5NrL2htqvOMirMWYKzohBAoKN++7LiRB6Ve8hEHdvjuH5hjBMdHwucyEWWpid+PtDXPF+pUyqaGq4+ikZnbiyvzJyd/pYhX8DH9Bv5ZKmrljswmmW9OjkPBcZd6KpjdVxRyXbYbfYEjBEogJuNSKsAc2L8PelWFnT3bLPg/z+JOfG6csJ1h58TSZft4H4H+m0RbDbvSWKUonrPN0soowbESQjlimA0u0YZKm+mCnjfdq6hPZ+nB8U1UZ3ISqzmdgvAMC9ItJc6imdWqdY1NNKklAixxHYNxAjJ1FhrCFTlmsQopI+TANML7hiB3ifFHcuszbLEF6jFpZdT1spq5c7nIrusWvC2mORtDIFcZhpRcKFANPqAlPPjgnKF5GkOYW/hZcKq5YKmMsuGc4ZMbHbSe1ATyNLOlnPkVvKMh/qyqofeYhSrNJiiz/np4jXOAFMea4yK3iY6EaGy0RF56l9/TPN+V1bcpKpr7s1DBuIiz70vAbJjH0iuUgEymNMbCJc1qZ5a9cCFSl+qaM2LzNPE3IN2pEiOubbQeho3/YaJArmmYS6nhv2lODshZt7BE51R7E2aU71qVC7TKqCcHNZTqQNTB+x6KgdMM+hCDowLOUqFxg7hvJeogwPOZHtfeug4fqQ3jRyHefkOrj9Tc8Q4IcSwdGA5pRUdZ4NL4FE6S4+3mJ6hi32HY5lMtwcczBww7FsBnwSDOiGyyeIdf7Srlh2d5LGF+Z6qvmc7Y3x0W0rCwFB/lNHkZp49bQijbU7ss2Tqed0+8Vx9x16aIMby/4upSVg7/LxUObFSEWRE79PlyLlobP8qDfcVczNs2+4d2Ild9lWevELAUwPzUDD5QINf1R8FvS9sel4KxjBejgLcmuWCSapdlhGTDacflzerCWUXtVQJC5cW+3z4eJms0kqjaMClskLA4A3Mu3atoPOdZ7TNHLkc59j50YVkV0cn7Wr2RtZ4rKA+La3N8V+at89YTs2YzVwgA2bnNEzb08FsHXfxgrRDB3CerKyBA+FBkeWTvepGnS2JvQb73UYjazUnEJ/TjtfpB8fb+MAj3PV10KC0l//1Z+3aMMJxbojwgkdIFm8eeR4NCc5goJpX22dFXedCwp030Gs4FuYrJtWrMMq7ydlg1cAn5Ts7tCu2zcWwbuAPnxyoGHsPcRn+DLpWCUHMmWDhhpmh/4Uzf04a/y8PgN9mmUUw0LN9k5VRoYb699KLB/4S6rLvtstUUQ7ZbljitAGtdJ/A7eGYt1IUX/U51IS0r3SJsJU7ofie3PZDo2nYYJwxTGVj/IoAwa3szBNWbvNk0aX78TybHaVmPJLgtBhMsaNZH1O9txMJe/eOi30e3LS0zLntgmtYxToNEptKvvARLngVX9yl7XkJ1niroe0dnDcP+0UK1n1dZRsE+ZH3goeCeIDXaWssO3P59oIH1Pb/lURUGfWqxMWVYv5u3onxoH+mR+3tB7ZOtrw9OHRqXbi2NDZSZ4I9Ju0wP0TGmA+3isM9mkCGPxmVtUHEVgymb8wSRUW4QXBq6Po+MsM89F7CaW8f6A0ugEcJV40ZS45Ant2Bazcs/WbrcegTMEIuFzn/Z5dubOgianr0GVkFon5OJ+w7YjfdpTQwlnkiyfV6VUJNcINaYknV7hk2GhHulZPct9nxx1Y653jRc8A8JC5fHi2o//7sAhaulGvLqZVyqhbeJoVxJBHjIDiiHFA/QtePS3Yq0vUtqiAA2A6ScvnjUkOHwi0nXfq/HFAwN5S0E/yQETqA+7ofVwzUnp9wKQZhTJGKlQ91UeXN/dl3KgniLnZocP0EjObr4PwY4A0LxVPb5WFYHKUuxLDXhTklGDqETzkQ2EviYwQMVc2wCfpbrpuOEGT5p+yA/9/2vjJsKt+cHPh73LyqSDWrtNzFw6B1qu0ByeyFBhZwQzXcYpwI8pmlftXC+/3JYbbiKcptxDjM5QB72Ed44/zwsmr0r80DF4ycuq4xc9aU9AIDsa9jqrbfHGg9/B0n3ooKOsLFKSpUog/IZzsek6AGkyNOPXIwXUQNaN74jNQlGUjjkIEx/RtXKQ2X1nZHlBAoQJv86SjFZ4cgrGHIZ1SqZWUVd25cn+qGQmZlV/TZpQDBvxgkBJebWWZeNDE2JvGuKkdFBCsQuQPUVwL+c8tpyLoLNnycSDcOzJNu2oKBMZ8g2cOVd4VB/zNZa3LLghUppJdR5FBkLMN4Q8KzHyCG4kwFNRkJfiBrDFLa1vYDg7a7al/CfmviE0d/ZmTauKC0EM727cMVAbl6AbsM8xwL/w6almp36SNWL2g+OgQjeFhaYjfHNdFggkmkmrxQPtaq03cQqWx3x598g3DeLGirC1plLoQ5E+CCL/T0nHicNvrgxEQqRV59M3uRCnlcCXfLFa5Dq/lZ/ojSQTfk7Byg2fxKPO9kNA0JJ9nxyEZKUz5NMGyVIVunwGFkOFHmR7Hacqx6THi2DPHgNgtUZ52bA6ps5+fHRC4dHYLa5HmOunW69+yaLI5J8GUghsvdBFKjZnhnMbutGoz3zIs1ZAMH4Z8DfXMciLHJxCx4NF7/ZAM+5EyvVjRMjTraI9AujmwkmAKy4u/oUbH64yOgaglL9QUvMal2TWp97fObXjcmWzYv15l05WRlAvzB6DUDgfb8A6mbaqTA7b3DrNHL9GoTDUQa2rqH9oswqD7IJsalSMpGAWhKA7H73h+BIGnDFcMZ/Ei9wN3L+1oP6ey+MxP4xUJq8syN0e3a6rauGPMofB/JjbBF41ZLqehSc1VLYldzRHZ8BGajzHTuxIhC5j4B6fWeUkJ1RCGWYb5R/gl1t/K0UALZd6xWyqa5vVYgmUt5HN9vWaPZg4ICuSOO5ZdvO/72a5vStCUkgu11QTpCySQAnb4AxOYee4F7qLKyR7tSbxiEs63bAE4uyxHpZjcKDqfJIEF2AAiE2moJ4L689OLQRmTSuiAI5H6QzX0H7U59hCFC3l72rb/Nry2j3jeUhjAfg6JSR9WmohPX4zOm34zfLivRoLUdLY3K9sOQgC5NIqLMQj92nFzDSh9xbk0Lzx9lAIlboyoyFvZVg/TF2857qEk77Stt2lbel6x4M+Spj+CNi7tYbxNAJqymuSZMPK4w8s0c9gjrzQnhVC36ylvAD9ZuW26+pQ2dSQXtF9eLtaHb/S2P8+fUCGj/Nd40cFxjBQfvzxCNKegXlqs03gXfRBv1/y1jw0U+RvSEaPgGPqL3kyr/9i945KCynjzWwWWjI2CsL6BrGg3exgo28rFSxM302Q/XEWuf7GLfcEo+7rTSb+MZvdUCTODQhfhYayVd4PhrYf07NEvTDfRPOPdC1MAwHoEfg6d1ayf98eX9vQKZqE1V0txEPTQndtDas7MlfW85Pr6ZeDGS8k7giqgDOREhYBrLQZp0ANlpPgs8Q4xBKeA6k5P5/8w/lc1+BhbLST1/QO8NyjC60jDfKOSzuzQjijfC0vbJsbrksTvh+obAWQxNA8VN34Q3faVTsE7Ts2A8kv19+T+yINpCrNb8KveNuef3HkjQAk4XM0RJu+Kp6T2Nm0q3TxRMGlED8/SSLanWgFJ/vizAF4rBTnsMarHjUG7US2JKJ6X3F/Xik62iToiC1wEkyHeLb5amNIunYvwNVWOwjvqQtGS3mYTXrMqHtHmPJljE5s6dd4rRapvxmejfAyVoIla/XFzbr/DXJOz4yBNkON+CjnuqNVTlGJbQuXO7lpPVIcLzy9YXol3Br3zaS3eDTORDNv9QELoe+MbS9prlih4I1J2uXxBbIPWWNBD16qRHjWgqhqDnOj3MlC4yYsw0fwdM8+VADFCKm1pkR0vEA2/bJDGuqS69US89pZ2zDl3G4wE8oqXg9E1xxfm1YQuPzi0KwnmpCdEFrcBqQrGaoPW2hbK/uRg0pyCtGWUfdkeBIX/kuEeaR01QDjqLPwCiJI4lt5dpJZnuvt5sdvPZynKRCvL37dFAwHlTDeIOiqPo/svDT1kwZc8yigVMRlTUCvWjbcpTGYoDNGU56LvwNgQ3eW9hwF/ERpFMlWoXzd0EXuYIRKUg1E3XPzI7HlNzjDy9oiMz79QMEYlqJ3ltHGpYlwNunf6ZTvFi7ZRw4+8cNaEohnBiXw9SIkAMeFCVMCxBlkj++vlEdkOhjP+GMRgwgkZTOTKo0fHJMxia6mY3ZfUJ1enuvInqGAKVhPhNBDI0ctlVBiIKfgAjrvDTQebWJYLm5IXibojsrZNa7UfGXTXtY1PFapav0PbL+o5I7BAAFj26eqHB6SarX1yPoOhnV8FbFnonZ87vvFgyV+FkcsPR5KB6LWSOahIr/djpq/bxliFFCAF5EHPPZDbK4ArHEi9LnPIQmAeXrn/NvoghHTYsLEmlZrSdFM/hbryI+SJsLRMr2OjEm31hV16+4jZbGyDamrWEjW26MDPTC9J9voLzDlxAkJgJIalk8FfVD2OVj3r4KkZtTBhvQSI55o211GcGqVaGojc454pE4NZww9V5nOlXThmiRabL/hucu/jWIW2y2ytO3q4f9sxyvhk/kqbMUr1SFIv8mfCGwxMXLcs5Dt+WdBN2j2W4/v3zXPySoUYE+CYYaF6byxuoHhBF7PkTMshttTTq6wDVxDRtgYpHXKUpGFhpiALBDX1w9OxjjOGHbOR7wXaxwwoApwYBuG6Sr0Ri0msibcKzAGX/Ng590/KscWiKcXI5JZsJt/4X+eSAPcBjAp5Q4PEOHYfHYboqwGAEYjHglCbh8uj6tXvQzxDL0n9wP+Pg34pvBirVE+Z4Gq1gDxZeKMEt9FtuUICB9fo+ufZJZOm/l9+PSvDYVebxB2Wfiu7rLe5RtnUWIPa08KALZ6vI+EwhnlU8BIUcq/HcX5YHK/ARxAbvk9OQbFFLB2RdMJ3Vg5jBeITNGLN1q0Hd9cbaB937730IUEO27ao7UsAEhOSubVFOaNaXUhNkRWbEXBQrd47ftDhT/7/I9SczBdNfcDM6dJ7ZbTpcAcJz/35SWXDYniTPL9CxHsL0iZz8YzJz89ssRZXGGM8zlHnN8tLDRLGrN75un80g2Of64bxsFY1UTPlcx806sPa3zSxIvweTQXUiFW0oHpPs9r057UbkkE32L1TezgSm6rTMiYYn/G+C042f8YwHo6qZGRZhABbMnVFsr7cxhq6nutry570T4ilkBvguKFd/3Up2shQKWb3OGt+dgoSzCc3AQuAbTK7tP5hPj/Ch6plODNnMgH29LsCSg8VKvj1KCmmShNoETVFHoI5MRLPROpFB8QjJtvRQflVJYSSxkGWZylf5ROvKVSWuJiACCO5d9C5CgDfgOvUTA34Qy3tBCh9uS1ohdF0/aujfQKIm8FYlyrOuXtxsNwR3NQY2jEio9+E3OvLrKPHuy9EmOoW1vVWTRGU/UhEMoYBqWI4nGBfx2dZ7eRbCcOmnIl2gDZtiYSw7m/vGZKSnEhYyfslDCnSxwvqiR/2bop1/f1uZgSEXt8YMpRqegWCp7NxXmoGFcV8GpWdYQI02FR5CyI3jow/g6SQYR0Y8uBXjaGNXay3tnjjulEeu5TKMgoU4h2RZ+JhUa/jWOioFNwKqmFfzb2NiXk6PjJoGq7qKvsVI43gk/1a6ssCHNwjEdYTHoFK+Bggw1y+ZZ2t3VcJxxZCwENZTttZypPRtFTH93ncLb2E3mKKvmCdjnf8WRyjgiyWlDLJ3vOcNl9Y76iNPXmAe6HOYJyLGO1wj5UyNgUy6EhNN1Neba6QHEgV8RCazlpS+4GVYslEhw5O/0x8Zz6+vrH9F66sYsJggcsviRssyrQ/vRz2DDxNRx9z5Egx8O3gF6/nW/PkbJlhq3i6HdCbPimbqK6RmQkFtDZTuWo8XUidzduUBks387uQ/CnKdkNFXLy3RDQJntw9VANp4FU05sP0IZFL8dg/riIJY+0RQ0hJOtgDVNBhi96G7NgQyRP2D7iVaYuWia7fKQLUqDuIfUOvAXzgLfsnxH8klpRtJ0NkCURSWWsVTD0C6PMqYvutbs2v/Y+PccVwA0o9frU3qH6mV850dTT7EcI4gTAybnfUFHanh5v8i0yZ3ETdnVOoeG9nPpsP/YC/kGIFur/RLoRHItAAxvopxpkqc0OGM+Zrdj/UlJwl3VvGurJked5MfeqO3ZnRdGFegycLdBB1AZnO8XnohKLg17wpeya3hlO+MdfmoTM5ORgAUYe+eh0mLc1LMkWMp+8nlmPill1KFOxkdxqN6udFvTSne8yrBa0KKhmYozXh/wVbYcuU/7eIWFiEW1E4C7FAk00DtTgs4fD7h8S0yHRn9UM7QHKBCQYuy3rXVLFZZKzhNvRYWs+qcLAC1Hp9VqieU+XjYSPsLAxFku6vLS+cMGYrkhA8kRXKLB+ZQgwPqDrIYcd/E8cVLKIQB2xul9gHfGfKeiJ/UQyTLLzNRwHPxATQXQubOXv3UlFizqs9wwi/FeISASZY6pg4Io+WhanYH7sMc0gHCvqgdJOG84E6qMW3QJYwibo+wtTzPNlWoddeUHXfKR1wxf5K1yGpg0XlN7+mwen6bVRHRgUiDeEav+CqCSyzELu6qt/Yuhbryc27F+kmG/TYF9j7zZ8+h4Dpg9J6/9zdFYDVolRuPHdwidhGPjSV3DUy6MHOBy1XznAN8RpiGcHeHTRUMqcnaILqhNZl/TWarUN0TsX3AevJAiLb/8Cfzm9zvF3LKgaRk38kd6l32FhR2cHImVsABTnJnLtJrrYwQ/pPLDNkx9azPTq9no0FPcYhLIVFXCw+w6sUKb4JZSJuKYupThxNshj6u8yGoy9zug50F3oNw26sCkM+QWCby0o7P1g4MKrWwmlJ4S0PYPwix7tEPn2DCF7BzrH9ZuNVwmZIEbU/TT2RXXGB6hXQ5nLvoFp9BXy1to3l3WXjHGBmC02XewFLHWP/9/qjcwlhmHdoMC43MTG3LWfTTOyGT9bquSn1b45zKRUx0ipDJIV5X/zk9dGwQrnA5ntGTYcSlb2Y+24ZBXbe3a84bxFedLkoHaiaUadsShYtJDauJVJ3v+CY9Wnt0cjsV7csj5nwtzosGyCc6y9VioAdsly8KUAM1bK4xJKCpMXNsTO0Z2/HtPkaJhz3kzWKxoPU4GlIMXLwTFVKsxNGUkRID6QR//ROvc3qlSXeUIlqHwwHTLHkNM8epLVAd0TgLRejtJnvibyMcfAsRKIScopvksmv0O0Yk2x7GRUyolJKNOOYku/EBX87CB2UKeZxqkirFuKktHtcApGCnCCFLMkjG9C/2nqTrQcxIB3VHPYm/MWtIpxFvG52zBiAmGmAIEXAVepeq6J+jJI/L5kwiGRNikiX/QdkLs0NJi+DzLsrn5HG1kO8N3Oc40eQA4dz6uY/Qvn/s46JsjQ5w1yTc6LU8b1fneqlrpvPmFuCEZWi2c0im1qriVM9LTZwRuGng5gOGtpkkUTkHyc/oCTdEa6M+Fjpsqw7UO99DPZWOgSm7pmLjQPjhwK5ecyqNObTTOotmyag5hz8Pf5ZFh/SAAqp/xo4/npBK5YG6Bim4FNbEyxG9z74t7SHfwJPfbdSzTAsju76bF6w00lPlRka3KOIG72hSEhWBabqkQ/Iu7gIBZmC3cmVBd+uqUrmjfAwBpUoHQqX2Z6By7QkDMGXmvkdnLHbJCwpreQb5aigHgdUdDTzsnwSZwLByY9CnxG5/b41KR+gOiLXKRIHkZEl+xwWciAdt4rR3NBr5QHuA2y/wtPXiEOt9tqSpnQ4EtSmQv0n2cOGsCRUF6MdFJTmKK89gGDlVSGdHDi/e+IWY4wvnYfMWHcxs7v5A39fG98bUtYOZlzOML1qsxpkOb2K2utriTgxBX64bY0pVa+arY39i+RunbOe2yukwvdUbFrBehnGu1ilMBLPkPPw09S0hQkZACl9oFzaUcW308tKXFVtChetQU7nTd+C7yfirElkD7gId6Ylwdo+vRVN/LLi/Jnyk4VWjVCdw8x6dvM3os3DrLpn7bOXXZi240QbZF028CMtDiTMA4a5IWpjmg2+QSTgZOcH3B7bxRVl9WhpRqBdkMOmLaiS2lRC2tb5FOUHXw6FYrlNcreB2JISkvGBT7MHDra57zFiXoBWRfK5bG+RYojOpmrgMTNd5Kab3QzqgO+Dcu2CbTNJImqWq8o2CMS2KDtN5Hq3ZYTg1OPG3cVDeC+Zo0a8QEbmxVuQCjnjGYo+ZlL8R1RJVCnF80b2lWOBqKXGDNt8iSsntXkpGAcQNok2mYCEviYzDUyHrfVvfPKqS+At17O5yfvlaaj3U39MyJwAZR//G9X4OWmNMn7FpG5oscycMcInLTanphyWIQKiPjYAOo0JZ6Pek8+KrU5k59pWMQdHzmZRh3RMe/beSMQZyea4PzrQ4XbAqfHMPNhoFIbj3K4HwchxDXGgJ5awGUY24vdygvOcExvO3pkfv7zCxmJDsVM4YMCmqwo+g+1kU95UGVBgjBBkZCQ0ZMUWKYnp/KdSpmpyD/VsiHKbBUwD5Iq0RnY3+bkRR+V7jtlM+MNK1lG78B+XDuwtpdScYm8iGl8RJc1b8b11ilX4QfrcPEk9o1jx83x//k4ab6JNASWC9jeoGjgzthTHqku1C7ZZTT8I7HsX0M/lZbEr3zuxjpbth0iXpmPx2MqptbIM36MhRaT410wjCtMwZKFhAKF1FE44hKP0XN5nrN4ab/uatLd99AiJpOUY2Xoo0XULGaM8wgt93BL1gP2cnqUohfDCMZbykHV1mu+7VC5MiWD1NXriZ12PLW+ychx+v2w8FoIjtInm2BM1HrUTeh230ul7b1ttkBoA4x6Cbv4DmE/K7WfjI3j0p/8YtEq70FgqpmLvXkE25t5AZJ146Ubw9jEKm+PI+QjLk9ExTiyGe2nZX5lu4L+pqF86rDXZ8tpUJ4YFNunl2c8M/Rxt2kKwYT8ggsSa5KfAQtF6LIYyfIeWd2ov3LMGwJvt/KIMepJZpTLekikHTjblVs6n47+mHew5K87RwPkOMIz53+y3uZQGLs0LuOrhg+EVee+fgiM2lOdCwJm/T4Xs8Rtb11iipre+a4Ft8KS8uufqTGhdl9XC4rCd0ABIS3B5R6leEYSfLmkVAG/V3vqV7i1zZ3pIqc3R8kRBgAnA6jMtukS03e17w67begGcsRFSgafjop50OM1X/GvdXjsDe6ibihIm9FQ/8W/Ar38YrHOE1deWE7o37VXUxu6au0QIUz2ClhoNpnGIGy+re1ylWYEzuNmho54aXrbkDC7LMv2r+jbidFhREsfw/2jyo6MG80qco1GcZR5/PSnLvy9efTiV3i+Xny0vXXSc3daECw7gIP0vdZoyqPHERoDSLBW5sdA46tVZ0FVGKCG7tMFDo4oFFcBFAhgcPdff1WlUL4p4S4rDf/f1u/fxEU7tMbPF7gsVDTWLWXkE0enlH6u/tLLrAIy4wHhGcDOju04OvILXhU3/VAy9jilK3GoeybjQIwFC9KV5awOipWU/I1RHbkGYlE13ntQExTmv4A2+LERZaSEv1c0eIvdaEfUouO2lCDedS5u0Mq9fWNCRGVNg9ZhD3VyX2Qc+IJIM4w6FAoL62PSu288u+8oK0OerNdYfmrKe4YZnIMWDjHtNmyFj6w5pJPVZAUigZgLy0AWdhyGLcG//qpGdsSz92CeCgVUsMFjaSci5ZQEIlMPk3p1oYlOivHC22aKEciktftQ7pxSjFD/zI0EmnmXRnLyx4sPKZlHa0oXKqB7RPKf+qei2vLiv3BwcKvW/5qeOuGOmyuE4SZa/sUCKa516LOwtxeJVcWu49SdX0/4xFQ6ZonPAJgYGX4OBYCXagx4W67dPZm0rk1bDbvW4ebjsKMs9i1AhNjkq5IbacMwH0A7LZbmKCpySyGXszJs20gWZP6TF10kycidGZyMIi8SVlP3H/ErtLr9Cv0zsD6fr7OvjdA3pLQkpIUNAR6gKxIpd5fUNMRnDz0BO6N0ONzykbBeCsJKKVanLvwg2Ci5q46H3eMtlexxlidEJdCqYrgE7gqMo7pLVikDbuLirRvEgCUInfpcyxDRxcgSrhzNwXfluVEmEnsDRlue6fC+UUhwMXWQNd+LsKD0DoiuMwCDhn26+6EzN+zDSfJpjibGuUHE4b4rJxGWVLzbUaLnqzPGi/qBSuVvYTOv1qNI1Xt+PVSL4dfEpqp4HXPGHGE89gr7pkS7aHwm/FgihS5Sn6rlcnryvCTx6Tuwjb2maUiWU2WSBMgSCzNev/09WjVVbXRi3eNpDoSGqEzc5K/9AVz0TnT1sIycn40tS8eaLtkvTqYx+aI292mYHPE+dspFV+oJPD4jJ6GU9Frjpuq7aCB3qhQ+1DuvfBR4uoR1azsvyXZL118Um1V+xGBfQasX0jqve6PRXJArI8wfL3crorCD2t8Bzldi/rNgu8td6BBYRCDFenK4Yzk33Whhc99pqKJsYsQYKROUxcGHQcgmqA3xzKppHF/1nQAWitEI2GDrnLfnk0GRZSNvqHEujgwQn76bTbKrmba2heZgqoQY7TrS5qP3jsQo/W1ko0Q4VUWug6E99wf5OgahcD06lDHk0kvuQgAoFbj0tiI7BOWcAXsYjZWZTgNJ+h6a25GeRtuX2NStxyYzqHohoITMBTUtT3q2XwJpRM1vgKd9XpbTl+/wFgPNtFjyUPINRGbCfSet5MHbEuLnc8ICeJug5Jc0LJtCjx7wFLNgW0trzhFlMz3ih1LVB/qJsyL1bT3qTCvstvLdQEn9JOXmDgW3OSfLiQ8ddNnrw2wEwyZeDadRXzSScReBGheu1W0nD++jA73aaSHNaqKHO93H9eIcpiUKjbJcRqZLdWPeIazdRCZxPCTlZMJoUFPHFSSpbe4C0OsISketM76fhwtaa67RVjrSnim3qvwVpkY+hmqgmBEHMbyPw/xJWPkUdpiIcuwN4JUIkCfB2IvtTeJeYut9ImH44jqYytDOE3qlpEShEDZ3G/A+rJT8jUC0VTuGyjt4uhaRxnKF/cRE7x8L4bePgAisRD4tEBINya+uYcB4F5NFofz0RUuGJyuhrYYtYuP3etIdQJcG5nFuccosxsKYcwLg6YvH9CJryqJ2MecXAN8p9XF/r66CRl3uZXtIzUXS7TK9NXQ9MA4ySGf/6LoliZYibn5zRMSJVXdhHUogz92PfyNm1tfQ86Rti1iLyryO5mNoDzjRTNMrNeizO8aI/+Vr1ofcI3hZur7JpHNqIs53ReF9/v5tyl1IuWo2RKFkrc9EIkwjDCAyWHh0t+RpUk892G2Q= \ No newline at end of file +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 \ No newline at end of file diff --git a/src/test/vitest.setup.ts b/src/test/vitest.setup.ts index 2caa82289d9..7cddf4bf3b7 100644 --- a/src/test/vitest.setup.ts +++ b/src/test/vitest.setup.ts @@ -13,7 +13,17 @@ import { initAchievements } from "#app/system/achv.js"; import { initVouchers } from "#app/system/voucher.js"; import { initStatsKeys } from "#app/ui/game-stats-ui-handler"; -import { beforeAll } from "vitest"; +import { beforeAll, vi } from "vitest"; + +/** Mock the override import to always return default values, ignoring any custom overrides. */ +vi.mock("#app/overrides", async (importOriginal) => { + const { defaultOverrides } = await importOriginal(); + + return { + default: defaultOverrides, + defaultOverrides + } satisfies typeof import("#app/overrides"); +}); initVouchers(); initAchievements(); diff --git a/src/ui/ability-bar.ts b/src/ui/ability-bar.ts index a0b249695b9..7a4ae559975 100644 --- a/src/ui/ability-bar.ts +++ b/src/ui/ability-bar.ts @@ -1,3 +1,4 @@ +import { getPokemonNameWithAffix } from "#app/messages.js"; import BattleScene from "../battle-scene"; import Pokemon from "../field/pokemon"; import { TextStyle, addTextObject } from "./text"; @@ -36,7 +37,7 @@ export default class AbilityBar extends Phaser.GameObjects.Container { } showAbility(pokemon: Pokemon, passive: boolean = false): void { - this.abilityBarText.setText(`${i18next.t("fightUiHandler:abilityFlyInText", { pokemonName: pokemon.name, passive: passive ? i18next.t("fightUiHandler:passive") : "", abilityName: !passive ? pokemon.getAbility().name : pokemon.getPassiveAbility().name })}`); + this.abilityBarText.setText(`${i18next.t("fightUiHandler:abilityFlyInText", { pokemonName: getPokemonNameWithAffix(pokemon), passive: passive ? i18next.t("fightUiHandler:passive") : "", abilityName: !passive ? pokemon.getAbility().name : pokemon.getPassiveAbility().name })}`); if (this.shown) { return; diff --git a/src/ui/abstact-option-select-ui-handler.ts b/src/ui/abstact-option-select-ui-handler.ts index 2069f034e89..f58eda79bcb 100644 --- a/src/ui/abstact-option-select-ui-handler.ts +++ b/src/ui/abstact-option-select-ui-handler.ts @@ -2,6 +2,7 @@ import BattleScene from "../battle-scene"; import { TextStyle, addTextObject } from "./text"; import { Mode } from "./ui"; import UiHandler from "./ui-handler"; +import { unlockAll } from "./menu-ui-handler"; import { addWindow } from "./ui-theme"; import * as Utils from "../utils"; import { argbFromRgba } from "@material/material-color-utilities"; @@ -42,6 +43,9 @@ export default abstract class AbstractOptionSelectUiHandler extends UiHandler { protected scrollCursor: integer = 0; + private konamiIndex: integer = 0; + static readonly konamiCode: Button[] = [Button.UP, Button.UP, Button.DOWN, Button.DOWN, Button.LEFT, Button.RIGHT, Button.LEFT, Button.RIGHT, Button.CANCEL, Button.ACTION]; + private cursorObj: Phaser.GameObjects.Image; constructor(scene: BattleScene, mode?: Mode) { @@ -159,6 +163,20 @@ export default abstract class AbstractOptionSelectUiHandler extends UiHandler { let playSound = true; + if (ui.getMode() === Mode.TITLE) { + if (button === AbstractOptionSelectUiHandler.konamiCode[this.konamiIndex] && (Utils.isLocal || Utils.isBeta)) { + if (this.konamiIndex !== AbstractOptionSelectUiHandler.konamiCode.length - 1) { + this.konamiIndex += 1; + } else { + unlockAll(this.scene); + this.konamiIndex = 0; + return false; + } + } else { + this.konamiIndex = 0; + } + } + if (button === Button.ACTION || button === Button.CANCEL) { if (this.blockInput) { ui.playError(); diff --git a/src/ui/arena-flyout.ts b/src/ui/arena-flyout.ts index 9c0a2e7c8ce..882c15d3d8c 100644 --- a/src/ui/arena-flyout.ts +++ b/src/ui/arena-flyout.ts @@ -9,6 +9,7 @@ import { BattleSceneEventType, TurnEndEvent } 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"; /** Enum used to differentiate {@linkcode Arena} effects */ enum ArenaEffectType { @@ -33,7 +34,17 @@ interface ArenaEffectInfo { tagType?: ArenaTagType; } -export default class ArenaFlyout extends Phaser.GameObjects.Container { +export function getFieldEffectText(arenaTagType: string): string { + if (!arenaTagType || arenaTagType === ArenaTagType.NONE) { + return arenaTagType; + } + const effectName = Utils.toCamelCaseString(arenaTagType); + const i18nKey = `arenaFlyout:${effectName}` as ParseKeys; + const resultName = i18next.t(i18nKey); + return (!resultName || resultName === i18nKey) ? Utils.formatText(arenaTagType) : resultName; +} + +export class ArenaFlyout extends Phaser.GameObjects.Container { /** An alias for the scene typecast to a {@linkcode BattleScene} */ private battleScene: BattleScene; @@ -111,7 +122,7 @@ export default class ArenaFlyout extends Phaser.GameObjects.Container { this.flyoutContainer.add(this.flyoutWindowHeader); - this.flyoutTextHeader = addTextObject(this.scene, this.flyoutWidth / 2, 0, "Active Battle Effects", TextStyle.BATTLE_INFO); + this.flyoutTextHeader = addTextObject(this.scene, this.flyoutWidth / 2, 0, i18next.t("arenaFlyout:activeBattleEffects"), TextStyle.BATTLE_INFO); this.flyoutTextHeader.setFontSize(54); this.flyoutTextHeader.setAlign("center"); this.flyoutTextHeader.setOrigin(); @@ -121,21 +132,21 @@ export default class ArenaFlyout extends Phaser.GameObjects.Container { this.timeOfDayWidget = new TimeOfDayWidget(this.scene, (this.flyoutWidth / 2) + (this.flyoutWindowHeader.displayWidth / 2)); this.flyoutContainer.add(this.timeOfDayWidget); - this.flyoutTextHeaderPlayer = addTextObject(this.scene, 6, 5, "Player", TextStyle.SUMMARY_BLUE); + this.flyoutTextHeaderPlayer = addTextObject(this.scene, 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, "Neutral", TextStyle.SUMMARY_GREEN); + this.flyoutTextHeaderField = addTextObject(this.scene, 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, "Enemy", TextStyle.SUMMARY_RED); + this.flyoutTextHeaderEnemy = addTextObject(this.scene, this.flyoutWidth - 6, 5, i18next.t("arenaFlyout:enemy"), TextStyle.SUMMARY_RED); this.flyoutTextHeaderEnemy.setFontSize(54); this.flyoutTextHeaderEnemy.setAlign("right"); this.flyoutTextHeaderEnemy.setOrigin(1, 0); @@ -221,10 +232,7 @@ export default class ArenaFlyout extends Phaser.GameObjects.Container { break; } - textObject.text += Utils.formatText(fieldEffectInfo.name); - if (fieldEffectInfo.effecType === ArenaEffectType.TERRAIN) { - textObject.text += " Terrain"; // Adds 'Terrain' since the enum does not contain it - } + textObject.text += fieldEffectInfo.name; if (fieldEffectInfo.maxDuration !== 0) { textObject.text += " " + fieldEffectInfo.duration + "/" + fieldEffectInfo.maxDuration; @@ -260,7 +268,7 @@ export default class ArenaFlyout extends Phaser.GameObjects.Container { } const existingTrapTagIndex = isArenaTrapTag ? this.fieldEffectInfo.findIndex(e => tagAddedEvent.arenaTagType === e.tagType && arenaEffectType === e.effecType) : -1; - let name: string = ArenaTagType[tagAddedEvent.arenaTagType]; + let name: string = getFieldEffectText(ArenaTagType[tagAddedEvent.arenaTagType]); if (isArenaTrapTag) { if (existingTrapTagIndex !== -1) { @@ -295,15 +303,15 @@ export default class ArenaFlyout extends Phaser.GameObjects.Container { // Stores the old Weather/Terrain name in case it's in the array already const oldName = - fieldEffectChangedEvent instanceof WeatherChangedEvent - ? WeatherType[fieldEffectChangedEvent.oldWeatherType] - : TerrainType[fieldEffectChangedEvent.oldTerrainType]; + getFieldEffectText(fieldEffectChangedEvent instanceof WeatherChangedEvent + ? WeatherType[fieldEffectChangedEvent.oldWeatherType] + : TerrainType[fieldEffectChangedEvent.oldTerrainType]); // Stores the new Weather/Terrain info const newInfo = { name: - fieldEffectChangedEvent instanceof WeatherChangedEvent + getFieldEffectText(fieldEffectChangedEvent instanceof WeatherChangedEvent ? WeatherType[fieldEffectChangedEvent.newWeatherType] - : TerrainType[fieldEffectChangedEvent.newTerrainType], + : TerrainType[fieldEffectChangedEvent.newTerrainType]), effecType: fieldEffectChangedEvent instanceof WeatherChangedEvent ? ArenaEffectType.WEATHER : ArenaEffectType.TERRAIN, diff --git a/src/ui/battle-flyout.ts b/src/ui/battle-flyout.ts index 5b34a6b5411..fdce9661793 100644 --- a/src/ui/battle-flyout.ts +++ b/src/ui/battle-flyout.ts @@ -7,6 +7,7 @@ import { BattleSceneEventType, BerryUsedEvent, MoveUsedEvent } from "../events/b import { BerryType } from "#enums/berry-type"; import { Moves } from "#enums/moves"; import { UiTheme } from "#enums/ui-theme"; +import { getPokemonNameWithAffix } from "#app/messages.js"; /** Container for info about a {@linkcode Move} */ interface MoveInfo { @@ -113,8 +114,8 @@ export default class BattleFlyout extends Phaser.GameObjects.Container { initInfo(pokemon: Pokemon) { this.pokemon = pokemon; - this.name = `Flyout ${this.pokemon.name}`; - this.flyoutParent.name = `Flyout Parent ${this.pokemon.name}`; + 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); diff --git a/src/ui/battle-info.ts b/src/ui/battle-info.ts index 3b889228e27..2ac350e2b14 100644 --- a/src/ui/battle-info.ts +++ b/src/ui/battle-info.ts @@ -118,7 +118,7 @@ export default class BattleInfo extends Phaser.GameObjects.Container { this.championRibbon.setName("icon_champion_ribbon"); this.championRibbon.setVisible(false); this.championRibbon.setOrigin(0, 0); - this.championRibbon.setPositionRelative(this.nameText, 11.75, 11.75); + this.championRibbon.setPositionRelative(this.nameText, 8, 11.75); this.add(this.championRibbon); } @@ -278,8 +278,8 @@ export default class BattleInfo extends Phaser.GameObjects.Container { this.updateNameText(pokemon); const nameTextWidth = this.nameText.displayWidth; - this.name = pokemon.name; - this.box.name = pokemon.name; + this.name = pokemon.getNameToRender(); + this.box.name = pokemon.getNameToRender(); this.flyoutMenu?.initInfo(pokemon); @@ -329,6 +329,11 @@ 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(null, i18next.t("battleInfo:generation", { generation: i18next.t(`starterSelectUiHandler:gen${pokemon.species.generation}`) }))); + this.nameText.on("pointerout", () => (this.scene as BattleScene).ui.hideTooltip()); + } + const dexEntry = pokemon.scene.gameData.dexData[pokemon.species.speciesId]; this.ownedIcon.setVisible(!!dexEntry.caughtAttr); const opponentPokemonDexAttr = pokemon.getDexAttr(); @@ -502,7 +507,7 @@ export default class BattleInfo extends Phaser.GameObjects.Container { return resolve(); } - const nameUpdated = this.lastName !== pokemon.name; + const nameUpdated = this.lastName !== pokemon.getNameToRender(); if (nameUpdated) { this.updateNameText(pokemon); @@ -533,11 +538,11 @@ export default class BattleInfo extends Phaser.GameObjects.Container { if (this.lastStatus !== StatusEffect.NONE) { this.statusIndicator.setFrame(StatusEffect[this.lastStatus].toLowerCase()); } - this.statusIndicator.setVisible(!!this.lastStatus); - if (!this.player && this.ownedIcon.visible) { - this.ownedIcon.setAlpha(this.statusIndicator.visible ? 0 : 1); - } + const offsetX = !this.player ? (this.ownedIcon.visible ? 8 : 0) + (this.championRibbon.visible ? 8 : 0) : 0; + this.statusIndicator.setPositionRelative(this.nameText, offsetX, 11.5); + + this.statusIndicator.setVisible(!!this.lastStatus); } const types = pokemon.getTypes(true); @@ -629,7 +634,7 @@ export default class BattleInfo extends Phaser.GameObjects.Container { } updateNameText(pokemon: Pokemon): void { - let displayName = pokemon.name.replace(/[♂♀]/g, ""); + let displayName = pokemon.getNameToRender().replace(/[♂♀]/g, ""); let nameTextWidth: number; const nameSizeTest = addTextObject(this.scene, 0, 0, displayName, TextStyle.BATTLE_INFO); @@ -644,7 +649,11 @@ export default class BattleInfo extends Phaser.GameObjects.Container { nameSizeTest.destroy(); this.nameText.setText(displayName); - this.lastName = pokemon.name; + this.lastName = pokemon.getNameToRender(); + + if (this.nameText.visible) { + this.nameText.setInteractive(new Phaser.Geom.Rectangle(0, 0, this.nameText.width, this.nameText.height), Phaser.Geom.Rectangle.Contains); + } } updatePokemonExp(pokemon: Pokemon, instant?: boolean, levelDurationMultiplier: number = 1): Promise { diff --git a/src/ui/bgm-bar.ts b/src/ui/bgm-bar.ts index f4366ef9c65..076eec26a8e 100644 --- a/src/ui/bgm-bar.ts +++ b/src/ui/bgm-bar.ts @@ -45,9 +45,6 @@ export default class BgmBar extends Phaser.GameObjects.Container { */ setBgmToBgmBar(bgmName: string): void { this.musicText.setText(`${i18next.t("bgmName:music")}${this.getRealBgmName(bgmName)}`); - if (!(this.scene as BattleScene).showBgmBar) { - return; - } this.musicText.width = this.bg.width - 20; this.musicText.setWordWrapWidth(this.defaultWidth * 4); @@ -65,6 +62,16 @@ export default class BgmBar extends Phaser.GameObjects.Container { @param {boolean} visible Whether to show or hide the BGM bar. */ public toggleBgmBar(visible: boolean): void { + /* + Prevents the bar from being displayed if musicText is completely empty. + This can be the case, for example, when the game's 1st music track takes a long time to reach the client, + and the menu is opened before it is played. + */ + if (this.musicText.text === "") { + this.setVisible(false); + return; + } + if (!(this.scene as BattleScene).showBgmBar) { this.setVisible(false); return; diff --git a/src/ui/challenges-select-ui-handler.ts b/src/ui/challenges-select-ui-handler.ts index dce04276a4d..6dcc359ef31 100644 --- a/src/ui/challenges-select-ui-handler.ts +++ b/src/ui/challenges-select-ui-handler.ts @@ -6,7 +6,7 @@ import { addWindow } from "./ui-theme"; import {Button} from "#enums/buttons"; import i18next from "i18next"; import { SelectStarterPhase, TitlePhase } from "#app/phases.js"; -import { Challenge, ChallengeType } from "#app/data/challenge.js"; +import { Challenge } from "#app/data/challenge.js"; import * as Utils from "../utils"; import { Challenges } from "#app/enums/challenges.js"; import BBCodeText from "phaser3-rex-plugins/plugins/bbcodetext"; @@ -27,7 +27,8 @@ export default class GameChallengesUiHandler extends UiHandler { private descriptionText: BBCodeText; - private challengeLabels: Array<{ label: Phaser.GameObjects.Text, value: Phaser.GameObjects.Text | Phaser.GameObjects.Sprite }>; + private challengeLabels: Array<{ label: Phaser.GameObjects.Text, value: Phaser.GameObjects.Text }>; + private monoTypeValue: Phaser.GameObjects.Sprite; private cursorObj: Phaser.GameObjects.NineSlice; @@ -120,33 +121,30 @@ export default class GameChallengesUiHandler extends UiHandler { this.challengeLabels = []; - for (let i = 0; i < Object.keys(ChallengeType).length; i++) { + for (let i = 0; i < 9; i++) { const label = addTextObject(this.scene, 8, 28 + i * 16, "", TextStyle.SETTINGS_LABEL); label.setName(`text-challenge-label-${i}`); label.setOrigin(0, 0); this.valuesContainer.add(label); - let value; - if (i === Challenges.SINGLE_TYPE) { - const type = `types${Utils.verifyLang(i18next.resolvedLanguage) ? `_${i18next.resolvedLanguage}` : ""}`; - value = this.scene.add.sprite(8, 98, type); - value.setName("sprite-single-type"); - value.setScale(0.86); - value.setPositionRelative(label, 113, 8); - } else { - value = addTextObject(this.scene, 0, 28 + i * 16, "", TextStyle.SETTINGS_LABEL); - value.setName(`text-challenge-value-label-${i}`); - value.setPositionRelative(label, 100, 0); - } - + const value = addTextObject(this.scene, 0, 28 + i * 16, "", TextStyle.SETTINGS_LABEL); + value.setName(`challenge-value-text-${i}`); + value.setPositionRelative(label, 100, 0); this.valuesContainer.add(value); + this.challengeLabels[i] = { label: label, value: value }; } + this.monoTypeValue = this.scene.add.sprite(8, 98, `types${Utils.verifyLang(i18next.resolvedLanguage) ? `_${i18next.resolvedLanguage}` : ""}`); + this.monoTypeValue.setName("challenge-value-monotype-sprite"); + this.monoTypeValue.setScale(0.86); + this.monoTypeValue.setVisible(false); + this.valuesContainer.add(this.monoTypeValue); + this.challengesContainer.add(headerBg); this.challengesContainer.add(headerText); // this.challengesContainer.add(difficultyBg); @@ -181,32 +179,39 @@ export default class GameChallengesUiHandler extends UiHandler { * init all challenge labels */ initLabels(): void { - this.setDescription(this.scene.gameMode.challenges[this.cursor].getDescription()); - this.scene.gameMode.challenges.forEach((challenge, i) => { - this.challengeLabels[i].label.setVisible(true); - this.challengeLabels[i].value.setVisible(true); - this.challengeLabels[i].label.setText(challenge.getName()); - if (this.challengeLabels[i].value.type.toLowerCase() === "sprite") { - (this.challengeLabels[i].value as Phaser.GameObjects.Sprite).setFrame(challenge.getValue()); - } else { - (this.challengeLabels[i].value as Phaser.GameObjects.Text).setText(challenge.getValue()); + this.setDescription(this.scene.gameMode.challenges[0].getDescription()); + for (let i = 0; i < 9; i++) { + if (i < this.scene.gameMode.challenges.length) { + this.challengeLabels[i].label.setVisible(true); + this.challengeLabels[i].value.setVisible(true); } - }); + } } /** * update the text the cursor is on */ updateText(): void { - const challenge = this.getActiveChallenge(); - const { id } = challenge; this.setDescription(this.getActiveChallenge().getDescription()); - - if (this.challengeLabels[id].value.type.toLowerCase() === "sprite") { - (this.challengeLabels[id].value as Phaser.GameObjects.Sprite).setFrame(challenge.getValue()); - } else { - (this.challengeLabels[id].value as Phaser.GameObjects.Text).setText(challenge.getValue()); + 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]; + this.challengeLabels[i].label.setText(challenge.getName()); + if (challenge.id === Challenges.SINGLE_TYPE) { + this.monoTypeValue.setPositionRelative(this.challengeLabels[i].label, 113, 8); + this.monoTypeValue.setFrame(challenge.getValue()); + this.monoTypeValue.setVisible(true); + this.challengeLabels[i].value.setVisible(false); + monoTypeVisible = true; + } else { + this.challengeLabels[i].value.setText(challenge.getValue()); + this.challengeLabels[i].value.setVisible(true); + } } + if (!monoTypeVisible) { + this.monoTypeValue.setVisible(false); + } + // 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}` : ""); @@ -221,6 +226,7 @@ export default class GameChallengesUiHandler extends UiHandler { this.setCursor(0); this.initLabels(); + this.updateText(); this.getUi().moveTo(this.challengesContainer, this.getUi().length - 1); diff --git a/src/ui/command-ui-handler.ts b/src/ui/command-ui-handler.ts index 8ccd05675c8..f083acd2f5b 100644 --- a/src/ui/command-ui-handler.ts +++ b/src/ui/command-ui-handler.ts @@ -6,6 +6,7 @@ import { Mode } from "./ui"; import UiHandler from "./ui-handler"; import i18next from "i18next"; import {Button} from "#enums/buttons"; +import { getPokemonNameWithAffix } from "#app/messages.js"; export enum Command { FIGHT = 0, @@ -66,7 +67,7 @@ export default class CommandUiHandler extends UiHandler { messageHandler.commandWindow.setVisible(true); messageHandler.movesWindowContainer.setVisible(false); messageHandler.message.setWordWrapWidth(1110); - messageHandler.showText(i18next.t("commandUiHandler:actionMessage", {pokemonName: commandPhase.getPokemon().name}), 0); + messageHandler.showText(i18next.t("commandUiHandler:actionMessage", {pokemonName: getPokemonNameWithAffix(commandPhase.getPokemon())}), 0); this.setCursor(this.getCursor()); return true; diff --git a/src/ui/egg-gacha-ui-handler.ts b/src/ui/egg-gacha-ui-handler.ts index b5335ed8f2e..c9f7ddc5873 100644 --- a/src/ui/egg-gacha-ui-handler.ts +++ b/src/ui/egg-gacha-ui-handler.ts @@ -9,7 +9,7 @@ import { getPokemonSpecies } from "../data/pokemon-species"; import { addWindow } from "./ui-theme"; import { Tutorial, handleTutorial } from "../tutorial"; import {Button} from "#enums/buttons"; -import * as Overrides from "../overrides"; +import Overrides from "../overrides"; import { GachaType } from "#app/enums/gacha-types"; import i18next from "i18next"; import { EggTier } from "#enums/egg-type"; diff --git a/src/ui/login-form-ui-handler.ts b/src/ui/login-form-ui-handler.ts index 3b75c6f7c13..971bef6ea6b 100644 --- a/src/ui/login-form-ui-handler.ts +++ b/src/ui/login-form-ui-handler.ts @@ -3,8 +3,65 @@ import { ModalConfig } from "./modal-ui-handler"; import * as Utils from "../utils"; import { Mode } from "./ui"; import i18next from "i18next"; +import BattleScene from "#app/battle-scene.js"; +import { addTextObject, TextStyle } from "./text"; +import { addWindow } from "./ui-theme"; export default class LoginFormUiHandler extends FormModalUiHandler { + private googleImage: Phaser.GameObjects.Image; + private discordImage: Phaser.GameObjects.Image; + private externalPartyContainer: Phaser.GameObjects.Container; + private externalPartyBg: Phaser.GameObjects.NineSlice; + private externalPartyTitle: Phaser.GameObjects.Text; + constructor(scene: BattleScene, mode?: Mode) { + super(scene, mode); + } + + setup(): void { + + super.setup(); + 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.externalPartyTitle.setOrigin(0.5, 0); + this.externalPartyBg = addWindow(this.scene, 0, 0, 0, 0); + this.externalPartyContainer.add(this.externalPartyBg); + this.externalPartyContainer.add(this.externalPartyTitle); + + const googleImage = this.scene.add.image(0, 0, "google"); + googleImage.setOrigin(0, 0); + googleImage.setScale(0.07); + googleImage.setInteractive(); + googleImage.setName("google-icon"); + googleImage.on("pointerdown", () => { + const redirectUri = encodeURIComponent(`${import.meta.env.VITE_SERVER_URL}/auth/google/callback`); + const googleId = import.meta.env.VITE_GOOGLE_CLIENT_ID; + const googleUrl = `https://accounts.google.com/o/oauth2/auth?client_id=${googleId}&redirect_uri=${redirectUri}&response_type=code&scope=openid`; + window.open(googleUrl, "_self"); + }); + this.googleImage = googleImage; + + const discordImage = this.scene.add.image(20, 0, "discord"); + discordImage.setOrigin(0, 0); + discordImage.setScale(0.07); + discordImage.setInteractive(); + discordImage.setName("discord-icon"); + discordImage.on("pointerdown", () => { + const redirectUri = encodeURIComponent(`${import.meta.env.VITE_SERVER_URL}/auth/discord/callback`); + const discordId = import.meta.env.VITE_DISCORD_CLIENT_ID; + const discordUrl = `https://discord.com/api/oauth2/authorize?client_id=${discordId}&redirect_uri=${redirectUri}&response_type=code&scope=identify&prompt=none`; + window.open(discordUrl, "_self"); + }); + this.discordImage = discordImage; + + this.externalPartyContainer.add(this.googleImage); + this.externalPartyContainer.add(this.discordImage); + this.getUi().add(this.externalPartyContainer); + this.externalPartyContainer.add(this.googleImage); + this.externalPartyContainer.add(this.discordImage); + this.externalPartyContainer.setVisible(false); + } + getModalTitle(config?: ModalConfig): string { return i18next.t("menu:login"); } @@ -22,7 +79,7 @@ export default class LoginFormUiHandler extends FormModalUiHandler { } getButtonLabels(config?: ModalConfig): string[] { - return [ i18next.t("menu:login"), i18next.t("menu:register") ]; + return [ i18next.t("menu:login"), i18next.t("menu:register")]; } getReadableErrorMessage(error: string): string { @@ -46,8 +103,10 @@ export default class LoginFormUiHandler extends FormModalUiHandler { show(args: any[]): boolean { if (super.show(args)) { - const config = args[0] as ModalConfig; + this.processExternalProvider(); + + const config = args[0] as ModalConfig; const originalLoginAction = this.submitAction; this.submitAction = (_) => { // Prevent overlapping overrides on action modification @@ -83,4 +142,33 @@ export default class LoginFormUiHandler extends FormModalUiHandler { return false; } + + clear() { + super.clear(); + this.externalPartyContainer.setVisible(false); + + this.discordImage.off("pointerdown"); + this.googleImage.off("pointerdown"); + } + + processExternalProvider() : void { + this.externalPartyTitle.setText(i18next.t("menu:orUse") ?? ""); + this.externalPartyTitle.setX(20+this.externalPartyTitle.text.length); + this.externalPartyTitle.setVisible(true); + this.externalPartyContainer.setPositionRelative(this.modalContainer, 175, 0); + this.externalPartyContainer.setVisible(true); + this.externalPartyBg.setSize(this.externalPartyTitle.text.length+50, this.modalBg.height); + this.getUi().moveTo(this.externalPartyContainer, this.getUi().length - 1); + this.googleImage.setPosition(this.externalPartyBg.width/3.1,this.externalPartyBg.height-60); + this.discordImage.setPosition(this.externalPartyBg.width/3.1, this.externalPartyBg.height-40); + + this.externalPartyContainer.setAlpha(0); + this.scene.tweens.add({ + targets: this.externalPartyContainer, + duration: Utils.fixedInt(1000), + ease: "Sine.easeInOut", + y: "-=24", + alpha: 1 + }); + } } diff --git a/src/ui/menu-ui-handler.ts b/src/ui/menu-ui-handler.ts index 571a09f3b37..5555d1be01c 100644 --- a/src/ui/menu-ui-handler.ts +++ b/src/ui/menu-ui-handler.ts @@ -6,11 +6,16 @@ import { addWindow } from "./ui-theme"; import MessageUiHandler from "./message-ui-handler"; import { OptionSelectConfig, OptionSelectItem } from "./abstact-option-select-ui-handler"; import { Tutorial, handleTutorial } from "../tutorial"; -import { updateUserInfo } from "../account"; +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 { Species } from "#app/enums/species.js"; +import { DexAttr, AbilityAttr } from "#app/system/game-data.js"; +import { getPokemonSpecies, starterPassiveAbilities } from "../data/pokemon-species"; +import { Nature } from "../data/nature"; +import { Passive } from "../enums/passive"; enum MenuOptions { GAME_SETTINGS, @@ -22,7 +27,7 @@ enum MenuOptions { MANAGE_DATA, COMMUNITY, SAVE_AND_QUIT, - LOG_OUT + LOG_OUT, } let wikiUrl = "https://wiki.pokerogue.net/start"; @@ -30,6 +35,47 @@ const discordUrl = "https://discord.gg/uWpTfdKG49"; const githubUrl = "https://github.com/pagefaultgames/pokerogue"; const redditUrl = "https://www.reddit.com/r/pokerogue"; +export function unlockAll(scene: BattleScene) { + if (Utils.isLocal || Utils.isBeta) { + const totalSpecies = Object.keys(Species).filter(s => !isNaN(Number(s))); + for (const species of totalSpecies) { + //const pokemonSpecies = Number(species) > 2000 ? allSpecies.find(s => s.speciesId === Number(species)) : allSpecies[Number(species) - 1]; // thie converts the species to a pokemon from allSpecies by checking regional variants and returning the normal species index + const pokemonSpecies = getPokemonSpecies(Number(species)); + let dexAttrLength = Object.values(DexAttr).length; // this will be the final amount of bits to set; we start by getting the length of the DexAttr so we know how many things every pokemon will get at minimum + if (pokemonSpecies.forms?.length > 0) { // this checks if the specific pokemon has forms + dexAttrLength += pokemonSpecies.forms?.length; // if it does have forms, add it to the dexAttrLength + } + const natureAttrLength = Object.values(Nature).length; // this gets a list of all the natures to set bits for + let abilityAttr: number; // since pokemon can have 1, 2 or 3 abilities + switch (pokemonSpecies.getAbilityCount()) { + case 1: // if it's one ability, return one ability + abilityAttr = AbilityAttr.ABILITY_1; + break; + case 2: // if it's one ability and the hidden ability, return ability 1 and the hidden ability + abilityAttr = AbilityAttr.ABILITY_1 + AbilityAttr.ABILITY_HIDDEN; + break; + case 3: // if it's 3 abilities, return all three + abilityAttr = AbilityAttr.ABILITY_1 + AbilityAttr.ABILITY_2 + AbilityAttr.ABILITY_HIDDEN; + break; + } + scene.gameData.dexData[species].seenAttr = BigInt(Math.pow(2, dexAttrLength) - 1); // we can set these values as 2^n - 1 if n is one more than the total number of total bits compared to what we need + scene.gameData.dexData[species].caughtAttr = BigInt(Math.pow(2, dexAttrLength) - 1); + scene.gameData.dexData[species].natureAttr = Math.pow(2, natureAttrLength) - 1; + scene.gameData.dexData[species].caughtCount = 1; + scene.gameData.dexData[species].seenCount = 1; + scene.gameData.dexData[species].ivs = [31, 31, 31, 31, 31, 31]; + if (scene.gameData.starterData[species]) { // this checks to make sure the species has a starter + scene.gameData.starterData[species].abilityAttr = abilityAttr; // if so, it sets the abilityAttr for the starter + } + if (starterPassiveAbilities[species]) { // checks to see if the species has a passive - this is different to the starter code above as this needs to check babies instead of evolutions (i.e. check pichu instead of pikachu) + scene.gameData.starterData[species].passiveAttr = Passive.UNLOCKED + Passive.ENABLED; // if so, it sets the passiveAttr for the starter to be + } + } + //scene.gameData.saveAll(scene, true, true, false, true); // I could not for the life of me figure out how to make it save + scene.ui.revertMode(); + } +} + export default class MenuUiHandler extends MessageUiHandler { private menuContainer: Phaser.GameObjects.Container; private menuMessageBoxContainer: Phaser.GameObjects.Container; @@ -146,7 +192,7 @@ export default class MenuUiHandler extends MessageUiHandler { }); }; - if (Utils.isLocal) { + if (Utils.isLocal || Utils.isBeta) { manageDataOptions.push({ label: i18next.t("menuUiHandler:importSession"), handler: () => { @@ -177,7 +223,7 @@ export default class MenuUiHandler extends MessageUiHandler { }, keepOpen: true }); - if (Utils.isLocal) { + if (Utils.isLocal || Utils.isBeta) { manageDataOptions.push({ label: i18next.t("menuUiHandler:importData"), handler: () => { @@ -188,22 +234,30 @@ export default class MenuUiHandler extends MessageUiHandler { keepOpen: true }); } - manageDataOptions.push( - { - label: i18next.t("menuUiHandler:exportData"), - handler: () => { - this.scene.gameData.tryExportData(GameDataType.SYSTEM); - return true; - }, - keepOpen: true + manageDataOptions.push({ + label: i18next.t("menuUiHandler:exportData"), + handler: () => { + this.scene.gameData.tryExportData(GameDataType.SYSTEM); + return true; }, - { - label: i18next.t("menuUiHandler:cancel"), + keepOpen: true + }); + if (Utils.isLocal || Utils.isBeta) { + manageDataOptions.push({ + label: "Unlock All", handler: () => { - this.scene.ui.revertMode(); + unlockAll(this.scene); return true; } + }); + } + manageDataOptions.push({ + label: i18next.t("menuUiHandler:cancel"), + handler: () => { + this.scene.ui.revertMode(); + return true; } + } ); this.manageDataConfig = { @@ -332,6 +386,51 @@ export default class MenuUiHandler extends MessageUiHandler { 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, + { + label: loggedInUser.discordId === "" ? i18next.t("menuUiHandler:linkDiscord") : i18next.t("menuUiHandler:unlinkDiscord"), + handler: () => { + if (loggedInUser?.discordId === "") { + const token = Utils.getCookie(Utils.sessionIdKey); + const redirectUri = encodeURIComponent(`${import.meta.env.VITE_SERVER_URL}/auth/discord/callback`); + const discordId = import.meta.env.VITE_DISCORD_CLIENT_ID; + const discordUrl = `https://discord.com/api/oauth2/authorize?client_id=${discordId}&redirect_uri=${redirectUri}&response_type=code&scope=identify&state=${token}&prompt=none`; + window.open(discordUrl, "_self"); + return true; + } else { + Utils.apiPost("/auth/discord/logout", undefined, undefined, true).then(res => { + if (!res.ok) { + console.error(`Unlink failed (${res.status}: ${res.statusText})`); + } + updateUserInfo().then(() => this.scene.reset(true, true)); + }); + return true; + } + } + }, + { + label: loggedInUser?.googleId === "" ? i18next.t("menuUiHandler:linkGoogle") : i18next.t("menuUiHandler:unlinkGoogle"), + handler: () => { + if (loggedInUser?.googleId === "") { + const token = Utils.getCookie(Utils.sessionIdKey); + const redirectUri = encodeURIComponent(`${import.meta.env.VITE_SERVER_URL}/auth/google/callback`); + const googleId = import.meta.env.VITE_GOOGLE_CLIENT_ID; + const googleUrl = `https://accounts.google.com/o/oauth2/auth?client_id=${googleId}&response_type=code&redirect_uri=${redirectUri}&scope=openid&state=${token}`; + window.open(googleUrl, "_self"); + return true; + } else { + Utils.apiPost("/auth/google/logout", undefined, undefined, true).then(res => { + if (!res.ok) { + console.error(`Unlink failed (${res.status}: ${res.statusText})`); + } + updateUserInfo().then(() => this.scene.reset(true, true)); + }); + return true; + } + } + }); + } ui.setOverlayMode(Mode.MENU_OPTION_SELECT, this.manageDataConfig); success = true; break; @@ -363,7 +462,7 @@ export default class MenuUiHandler extends MessageUiHandler { if (!res.ok) { console.error(`Log out failed (${res.status}: ${res.statusText})`); } - Utils.setCookie(Utils.sessionIdKey, ""); + Utils.removeCookie(Utils.sessionIdKey); updateUserInfo().then(() => this.scene.reset(true, true)); }); }; diff --git a/src/ui/modifier-select-ui-handler.ts b/src/ui/modifier-select-ui-handler.ts index 3cfd103b4e2..b3718b8854c 100644 --- a/src/ui/modifier-select-ui-handler.ts +++ b/src/ui/modifier-select-ui-handler.ts @@ -136,7 +136,7 @@ export default class ModifierSelectUiHandler extends AwaitableUiHandler { this.player = args[0]; - const partyHasHeldItem = this.player && !!this.scene.findModifiers(m => m instanceof PokemonHeldItemModifier && (m as PokemonHeldItemModifier).getTransferrable(true)).length; + const partyHasHeldItem = this.player && !!this.scene.findModifiers(m => m instanceof PokemonHeldItemModifier && m.isTransferrable).length; const canLockRarities = !!this.scene.findModifier(m => m instanceof LockModifierTiersModifier); this.transferButtonContainer.setVisible(false); diff --git a/src/ui/party-ui-handler.ts b/src/ui/party-ui-handler.ts index e820c8cb0d2..9bb8162ce2a 100644 --- a/src/ui/party-ui-handler.ts +++ b/src/ui/party-ui-handler.ts @@ -21,6 +21,7 @@ import MoveInfoOverlay from "./move-info-overlay"; import i18next from "i18next"; import BBCodeText from "phaser3-rex-plugins/plugins/bbcodetext"; import { Moves } from "#enums/moves"; +import { getPokemonNameWithAffix } from "#app/messages.js"; const defaultMessage = i18next.t("partyUiHandler:choosePokemon"); @@ -52,6 +53,7 @@ export enum PartyOption { SPLICE, UNSPLICE, RELEASE, + RENAME, SCROLL_UP = 1000, SCROLL_DOWN = 1001, FORM_CHANGE_ITEM = 2000, @@ -59,7 +61,7 @@ export enum PartyOption { MOVE_2, MOVE_3, MOVE_4, - ALL = 4000 + ALL = 4000, } export type PartySelectCallback = (cursor: integer, option: PartyOption) => void; @@ -115,14 +117,14 @@ export default class PartyUiHandler extends MessageUiHandler { public static FilterNonFainted = (pokemon: PlayerPokemon) => { if (pokemon.isFainted()) { - return i18next.t("partyUiHandler:noEnergy", { pokemonName: pokemon.name }); + return i18next.t("partyUiHandler:noEnergy", { pokemonName: getPokemonNameWithAffix(pokemon) }); } return null; }; public static FilterFainted = (pokemon: PlayerPokemon) => { if (!pokemon.isFainted()) { - return i18next.t("partyUiHandler:hasEnergy", { pokemonName: pokemon.name }); + return i18next.t("partyUiHandler:hasEnergy", { pokemonName: getPokemonNameWithAffix(pokemon) }); } return null; }; @@ -136,7 +138,7 @@ export default class PartyUiHandler extends MessageUiHandler { const challengeAllowed = new Utils.BooleanHolder(true); applyChallenges(this.scene.gameMode, ChallengeType.POKEMON_IN_BATTLE, pokemon, challengeAllowed); if (!challengeAllowed.value) { - return i18next.t("partyUiHandler:cantBeUsed", { pokemonName: pokemon.name }); + return i18next.t("partyUiHandler:cantBeUsed", { pokemonName: getPokemonNameWithAffix(pokemon) }); } return null; }; @@ -146,14 +148,14 @@ export default class PartyUiHandler extends MessageUiHandler { 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)) { - return i18next.t("partyUiHandler:tooManyItems", { pokemonName: pokemon.name }); + return i18next.t("partyUiHandler:tooManyItems", { pokemonName: getPokemonNameWithAffix(pokemon) }); } return null; }; 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]; + 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]; constructor(scene: BattleScene) { super(scene, Mode.PARTY); @@ -302,11 +304,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) + } else if ((option !== PartyOption.SUMMARY && option !== PartyOption.UNPAUSE_EVOLUTION && option !== PartyOption.UNSPLICE && option !== PartyOption.RELEASE && option !== PartyOption.CANCEL && option !== PartyOption.RENAME) || (option === PartyOption.RELEASE && this.partyUiMode === PartyUiMode.RELEASE)) { let filterResult: string; const getTransferrableItemsFromPokemon = (pokemon: PlayerPokemon) => - this.scene.findModifiers(m => m instanceof PokemonHeldItemModifier && (m as PokemonHeldItemModifier).getTransferrable(true) && (m as PokemonHeldItemModifier).pokemonId === pokemon.id) as PokemonHeldItemModifier[]; + this.scene.findModifiers(m => m instanceof PokemonHeldItemModifier && m.isTransferrable && 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)) { @@ -378,7 +380,7 @@ export default class PartyUiHandler extends MessageUiHandler { this.clearOptions(); ui.playSelect(); pokemon.pauseEvolutions = false; - this.showText(i18next.t("partyUiHandler:unpausedEvolutions", { pokemonName: pokemon.name }), null, () => this.showText(null, 0), null, true); + this.showText(i18next.t("partyUiHandler:unpausedEvolutions", { pokemonName: getPokemonNameWithAffix(pokemon) }), null, () => this.showText(null, 0), null, true); } else if (option === PartyOption.UNSPLICE) { this.clearOptions(); ui.playSelect(); @@ -403,7 +405,7 @@ export default class PartyUiHandler extends MessageUiHandler { this.clearOptions(); ui.playSelect(); if (this.cursor >= this.scene.currentBattle.getBattlerCount() || !pokemon.isAllowedInBattle()) { - this.showText(i18next.t("partyUiHandler:releaseConfirmation", { pokemonName: pokemon.name }), null, () => { + this.showText(i18next.t("partyUiHandler:releaseConfirmation", { pokemonName: getPokemonNameWithAffix(pokemon) }), null, () => { ui.setModeWithoutClear(Mode.CONFIRM, () => { ui.setMode(Mode.PARTY); this.doRelease(this.cursor); @@ -416,6 +418,25 @@ export default class PartyUiHandler extends MessageUiHandler { this.showText(i18next.t("partyUiHandler:releaseInBattle"), null, () => this.showText(null, 0), null, true); } return true; + } else if (option === PartyOption.RENAME) { + this.clearOptions(); + ui.playSelect(); + ui.setModeWithoutClear(Mode.RENAME_POKEMON, { + buttonActions: [ + (nickname: string) => { + ui.playSelect(); + pokemon.nickname = nickname; + pokemon.updateInfo(); + this.clearPartySlots(); + this.populatePartySlots(); + ui.setMode(Mode.PARTY); + }, + () => { + ui.setMode(Mode.PARTY); + } + ] + }, pokemon); + return true; } else if (option === PartyOption.CANCEL) { return this.processInput(Button.CANCEL); } @@ -482,7 +503,7 @@ export default class PartyUiHandler extends MessageUiHandler { 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 as PokemonHeldItemModifier).getTransferrable(true) && (m as PokemonHeldItemModifier).pokemonId === this.scene.getParty()[this.cursor].id) as PokemonHeldItemModifier[]; + && m.isTransferrable && m.pokemonId === this.scene.getParty()[this.cursor].id) as PokemonHeldItemModifier[]; this.transferQuantities = itemModifiers.map(item => item.getStackCount()); this.transferQuantitiesMax = itemModifiers.map(item => item.getStackCount()); } @@ -699,7 +720,7 @@ export default class PartyUiHandler extends MessageUiHandler { const itemModifiers = this.partyUiMode === PartyUiMode.MODIFIER_TRANSFER ? this.scene.findModifiers(m => m instanceof PokemonHeldItemModifier - && (m as PokemonHeldItemModifier).getTransferrable(true) && (m as PokemonHeldItemModifier).pokemonId === pokemon.id) as PokemonHeldItemModifier[] + && m.isTransferrable && m.pokemonId === pokemon.id) as PokemonHeldItemModifier[] : null; if (this.options.length) { @@ -762,6 +783,7 @@ export default class PartyUiHandler extends MessageUiHandler { } this.options.push(PartyOption.SUMMARY); + this.options.push(PartyOption.RENAME); if (pokemon.pauseEvolutions && pokemonEvolutions.hasOwnProperty(pokemon.species.speciesId)) { this.options.push(PartyOption.UNPAUSE_EVOLUTION); @@ -928,7 +950,7 @@ export default class PartyUiHandler extends MessageUiHandler { } doRelease(slotIndex: integer): void { - this.showText(this.getReleaseMessage(this.scene.getParty()[slotIndex].name), null, () => { + this.showText(this.getReleaseMessage(getPokemonNameWithAffix(this.scene.getParty()[slotIndex])), null, () => { this.clearPartySlots(); this.scene.removePartyMemberModifiers(slotIndex); const releasedPokemon = this.scene.getParty().splice(slotIndex, 1)[0]; @@ -1059,7 +1081,7 @@ class PartySlot extends Phaser.GameObjects.Container { const slotInfoContainer = this.scene.add.container(0, 0); this.add(slotInfoContainer); - let displayName = this.pokemon.name; + let displayName = this.pokemon.getNameToRender(); let nameTextWidth: number; const nameSizeTest = addTextObject(this.scene, 0, 0, displayName, TextStyle.PARTY); diff --git a/src/ui/rename-form-ui-handler.ts b/src/ui/rename-form-ui-handler.ts new file mode 100644 index 00000000000..35127564b60 --- /dev/null +++ b/src/ui/rename-form-ui-handler.ts @@ -0,0 +1,58 @@ +import { FormModalUiHandler } from "./form-modal-ui-handler"; +import { ModalConfig } from "./modal-ui-handler"; +import i18next from "i18next"; +import { PlayerPokemon } from "#app/field/pokemon.js"; + +export default class RenameFormUiHandler extends FormModalUiHandler { + getModalTitle(config?: ModalConfig): string { + return i18next.t("menu:renamePokemon"); + } + + getFields(config?: ModalConfig): string[] { + return [ i18next.t("menu:nickname") ]; + } + + getWidth(config?: ModalConfig): number { + return 160; + } + + getMargin(config?: ModalConfig): [number, number, number, number] { + return [ 0, 0, 48, 0 ]; + } + + getButtonLabels(config?: ModalConfig): string[] { + return [ i18next.t("menu:rename"), i18next.t("menu:cancel") ]; + } + + getReadableErrorMessage(error: string): string { + const colonIndex = error?.indexOf(":"); + if (colonIndex > 0) { + error = error.slice(0, colonIndex); + } + + return super.getReadableErrorMessage(error); + } + + show(args: any[]): boolean { + if (super.show(args)) { + const config = args[0] as ModalConfig; + this.inputs[0].text = (args[1] as PlayerPokemon).getNameToRender(); + + this.submitAction = (_) => { + this.sanitizeInputs(); + // const onFail = () => { + // this.scene.ui.setModeWithoutClear(Mode.RENAME_POKEMON, Object.assign(config)); + // this.scene.ui.playError(); + // }; + // if (!this.inputs[0].text) { + // return onFail(); + // } + const sanitizedName = btoa(unescape(encodeURIComponent(this.inputs[0].text))); + config.buttonActions[0](sanitizedName); + return true; + }; + return true; + } + return false; + } +} diff --git a/src/ui/settings/abstract-settings-ui-handler.ts b/src/ui/settings/abstract-settings-ui-handler.ts index 6763c8d3d85..3ffd32cf842 100644 --- a/src/ui/settings/abstract-settings-ui-handler.ts +++ b/src/ui/settings/abstract-settings-ui-handler.ts @@ -375,6 +375,7 @@ export default class AbstractSettingsUiHandler extends UiHandler { super.clear(); this.settingsContainer.setVisible(false); this.eraseCursor(); + this.getUi().bgmBar.toggleBgmBar(this.scene.showBgmBar); if (this.reloadRequired) { this.reloadRequired = false; this.scene.reset(true, false, true); diff --git a/src/ui/starter-select-ui-handler.ts b/src/ui/starter-select-ui-handler.ts index 0caf9ef6fa6..d13122c5265 100644 --- a/src/ui/starter-select-ui-handler.ts +++ b/src/ui/starter-select-ui-handler.ts @@ -28,7 +28,7 @@ import { TextStyle, addBBCodeTextObject, addTextObject } from "./text"; import { Mode } from "./ui"; import { addWindow } from "./ui-theme"; import { Egg } from "#app/data/egg"; -import * as Overrides from "../overrides"; +import Overrides from "../overrides"; import {SettingKeyboard} from "#app/system/settings/settings-keyboard"; import {Passive as PassiveAttr} from "#enums/passive"; import * as Challenge from "../data/challenge"; @@ -268,6 +268,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { private classicWinIcons: Phaser.GameObjects.Image[]; private candyUpgradeIcon: Phaser.GameObjects.Image[]; private candyUpgradeOverlayIcon: Phaser.GameObjects.Image[]; + private starterPassiveBgs: Phaser.GameObjects.Image[]; private iconAnimHandler: PokemonIconAnimHandler; @@ -398,6 +399,16 @@ export default class StarterSelectUiHandler extends MessageUiHandler { this.updateGenOptions(); + this.starterPassiveBgs = new Array(81).fill(null).map((_, i) => { + const position = calcIconPosition(i); + const ret = this.scene.add.image(position.x + 153, position.y+14, "passive_bg"); + ret.setOrigin(0, 0); + ret.setScale(0.75); + ret.setVisible(false); + this.starterSelectContainer.add(ret); + return ret; + }); + this.starterSelectGenIconContainers = new Array(gens.length).fill(null).map((_, i) => { const container = this.scene.add.container(151, 9); if (i) { @@ -1137,7 +1148,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { const species = this.genSpecies[this.getGenCursorWithScroll()][this.cursor]; const isValidForChallenge = new Utils.BooleanHolder(true); - Challenge.applyChallenges(this.scene.gameMode, Challenge.ChallengeType.STARTER_CHOICE, species, isValidForChallenge, this.scene.gameData.getSpeciesDexAttrProps(species, this.dexAttrCursor), this.starterGens.length); + Challenge.applyChallenges(this.scene.gameMode, Challenge.ChallengeType.STARTER_CHOICE, species, isValidForChallenge, this.scene.gameData.getSpeciesDexAttrProps(species, this.dexAttrCursor), !!this.starterGens.length); if (!isDupe && isValidForChallenge.value && this.tryUpdateValue(this.scene.gameData.getSpeciesStarterValue(species.speciesId))) { const cursorObj = this.starterCursorObjs[this.starterCursors.length]; @@ -1704,6 +1715,16 @@ export default class StarterSelectUiHandler extends MessageUiHandler { this.scene.gameData.starterData[speciesId].moveset = this.starterMoveset.slice(0) as StarterMoveset; } this.setSpeciesDetails(this.lastSpecies, undefined, undefined, undefined, undefined, undefined, undefined, false); + + // switch moves of starter if exists + if (this.starterMovesets.length) { + Array.from({ length: this.starterGens.length }, (_, i) => { + const starterSpecies = this.genSpecies[this.starterGens[i]][this.starterCursors[i]]; + if (starterSpecies.speciesId === speciesId) { + this.starterMovesets[i] = this.starterMoveset; + } + }); + } } updateButtonIcon(iconSetting, gamepadType, iconElement, controlLabel): void { @@ -1853,6 +1874,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { this.shinyIcons[s][v].setTint(getVariantTint(speciesVariants[v] === DexAttr.DEFAULT_VARIANT ? 0 : speciesVariants[v] === DexAttr.VARIANT_2 ? 1 : 2)); } } + this.starterPassiveBgs[s].setVisible(slotVisible && !!this.scene.gameData.starterData[speciesId].passiveAttr); this.hiddenAbilityIcons[s].setVisible(slotVisible && !!this.scene.gameData.dexData[speciesId].caughtAttr && !!(this.scene.gameData.starterData[speciesId].abilityAttr & 4)); this.classicWinIcons[s].setVisible(slotVisible && this.scene.gameData.starterData[speciesId].classicWinCount > 0); @@ -2325,7 +2347,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { const currentPartyValue = this.starterGens.reduce((total: number, gen: number, i: number) => total += this.scene.gameData.getSpeciesStarterValue(this.genSpecies[gen][this.starterCursors[i]].speciesId), 0); const cursorCost = this.scene.gameData.getSpeciesStarterValue(species.speciesId); const isValidNextPartyValue = (currentPartyValue + cursorCost) <= this.getValueLimit(); - Challenge.applyChallenges(this.scene.gameMode, Challenge.ChallengeType.STARTER_CHOICE, species, isValidForChallenge, this.scene.gameData.getSpeciesDexAttrProps(species, this.dexAttrCursor), this.starterGens.length); + Challenge.applyChallenges(this.scene.gameMode, Challenge.ChallengeType.STARTER_CHOICE, species, isValidForChallenge, this.scene.gameData.getSpeciesDexAttrProps(species, this.dexAttrCursor), !!this.starterGens.length); const starterSprite = this.starterSelectGenIconContainers[this.getGenCursorWithScroll()].getAt(this.cursor) as Phaser.GameObjects.Sprite; starterSprite.setTexture(species.getIconAtlasKey(formIndex, shiny, variant), species.getIconId(female, formIndex, shiny, variant)); starterSprite.setAlpha(isValidForChallenge.value && isValidNextPartyValue ? 1 : 0.375); @@ -2545,7 +2567,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 Utils.BooleanHolder(true); - Challenge.applyChallenges(this.scene.gameMode, Challenge.ChallengeType.STARTER_CHOICE, this.genSpecies[g][s], isValidForChallenge, this.scene.gameData.getSpeciesDexAttrProps(this.genSpecies[g][s], this.scene.gameData.getSpeciesDefaultDexAttr(this.genSpecies[g][s], false, true)), this.starterGens.length + (add ? 1 : 0)); + Challenge.applyChallenges(this.scene.gameMode, Challenge.ChallengeType.STARTER_CHOICE, this.genSpecies[g][s], isValidForChallenge, this.scene.gameData.getSpeciesDexAttrProps(this.genSpecies[g][s], this.scene.gameData.getSpeciesDefaultDexAttr(this.genSpecies[g][s], false, true)), !!(this.starterGens.length || add)); const canBeChosen = remainValue >= speciesStarterValue && isValidForChallenge.value; diff --git a/src/ui/summary-ui-handler.ts b/src/ui/summary-ui-handler.ts index ae94951bc4c..ae1770a45ca 100644 --- a/src/ui/summary-ui-handler.ts +++ b/src/ui/summary-ui-handler.ts @@ -15,7 +15,7 @@ import { Stat, getStatName } from "../data/pokemon-stat"; import { PokemonHeldItemModifier } from "../modifier/modifier"; import { StatusEffect } from "../data/status-effect"; import { getBiomeName } from "../data/biomes"; -import { getNatureName, getNatureStatMultiplier } from "../data/nature"; +import { Nature, getNatureName, getNatureStatMultiplier } from "../data/nature"; import { loggedInUser } from "../account"; import { Variant, getVariantTint } from "#app/data/variant"; import {Button} from "#enums/buttons"; @@ -122,7 +122,7 @@ export default class SummaryUiHandler extends UiHandler { this.tabSprite.setOrigin(1, 1); this.summaryContainer.add(this.tabSprite); - const summaryLabel = addTextObject(this.scene, 4, -165, "Pokémon Info", TextStyle.SUMMARY); + const summaryLabel = addTextObject(this.scene, 4, -165, i18next.t("pokemonSummary:pokemonInfo"), TextStyle.SUMMARY); summaryLabel.setOrigin(0, 1); this.summaryContainer.add(summaryLabel); @@ -207,7 +207,7 @@ export default class SummaryUiHandler extends UiHandler { this.statusContainer.add(statusBg); - const statusLabel = addTextObject(this.scene, 3, 0, "Status", TextStyle.SUMMARY); + const statusLabel = addTextObject(this.scene, 3, 0, i18next.t("pokemonSummary:status"), TextStyle.SUMMARY); statusLabel.setOrigin(0, 0); this.statusContainer.add(statusLabel); @@ -227,7 +227,7 @@ export default class SummaryUiHandler extends UiHandler { moveEffectBg.setOrigin(0, 0); this.moveEffectContainer.add(moveEffectBg); - const moveEffectLabels = addTextObject(this.scene, 8, 12, "Power\nAccuracy\nCategory", TextStyle.SUMMARY); + const moveEffectLabels = addTextObject(this.scene, 8, 12, i18next.t("pokemonSummary:powerAccuracyCategory"), TextStyle.SUMMARY); moveEffectLabels.setLineSpacing(9); moveEffectLabels.setOrigin(0, 0); @@ -302,7 +302,7 @@ export default class SummaryUiHandler extends UiHandler { }); this.pokemon.cry(); - this.nameText.setText(this.pokemon.name); + this.nameText.setText(this.pokemon.getNameToRender()); const isFusion = this.pokemon.isFusion(); @@ -677,12 +677,7 @@ export default class SummaryUiHandler extends UiHandler { const profileContainer = this.scene.add.container(0, -pageBg.height); pageContainer.add(profileContainer); - const trainerLabel = addTextObject(this.scene, 7, 12, "OT/", TextStyle.SUMMARY_ALT); - trainerLabel.setOrigin(0, 0); - profileContainer.add(trainerLabel); - - const trainerText = addTextObject(this.scene, 25, 12, loggedInUser?.username || "Unknown", - this.scene.gameData.gender === PlayerGender.FEMALE ? TextStyle.SUMMARY_PINK : TextStyle.SUMMARY_BLUE); + 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); trainerText.setOrigin(0, 0); profileContainer.add(trainerText); @@ -690,12 +685,12 @@ export default class SummaryUiHandler extends UiHandler { trainerIdText.setOrigin(0, 0); profileContainer.add(trainerIdText); - const typeLabel = addTextObject(this.scene, 7, 28, "Type/", TextStyle.WINDOW_ALT); + const typeLabel = addTextObject(this.scene, 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 xCoord = 39 + 34 * index; + const xCoord = typeLabel.width * typeLabel.scale + 9 + 34 * index; const typeIcon = !tera ? this.scene.add.sprite(xCoord, 42, `types${Utils.verifyLang(i18next.resolvedLanguage) ? `_${i18next.resolvedLanguage}` : ""}`, Type[type].toLowerCase()) : this.scene.add.sprite(xCoord, 42, "type_tera"); if (tera) { @@ -796,7 +791,20 @@ export default class SummaryUiHandler extends UiHandler { this.passiveContainer?.nameText.setVisible(false); this.passiveContainer?.descriptionText.setVisible(false); - const memoString = `${getBBCodeFrag(Utils.toReadableString(getNatureName(this.pokemon.getNature())), TextStyle.SUMMARY_RED)}${getBBCodeFrag(" nature,", TextStyle.WINDOW_ALT)}\n${getBBCodeFrag(`${this.pokemon.metBiome === -1 ? "apparently " : ""}met at Lv`, TextStyle.WINDOW_ALT)}${getBBCodeFrag(this.pokemon.metLevel.toString(), TextStyle.SUMMARY_RED)}${getBBCodeFrag(",", TextStyle.WINDOW_ALT)}\n${getBBCodeFrag(getBiomeName(this.pokemon.metBiome), TextStyle.SUMMARY_RED)}${getBBCodeFrag(".", TextStyle.WINDOW_ALT)}`; + const closeFragment = getBBCodeFrag("", TextStyle.WINDOW_ALT); + const rawNature = Utils.toReadableString(Nature[this.pokemon.getNature()]); + const nature = `${getBBCodeFrag(Utils.toReadableString(getNatureName(this.pokemon.getNature())), TextStyle.SUMMARY_RED)}${closeFragment}`; + + const memoString = i18next.t("pokemonSummary:memoString", { + metFragment: i18next.t(`pokemonSummary:metFragment.${this.pokemon.metBiome === -1? "apparently": "normal"}`, { + biome: `${getBBCodeFrag(getBiomeName(this.pokemon.metBiome), TextStyle.SUMMARY_RED)}${closeFragment}`, + level: `${getBBCodeFrag(this.pokemon.metLevel.toString(), TextStyle.SUMMARY_RED)}${closeFragment}`, + }), + natureFragment: + i18next.exists(`pokemonSummary:natureFragment.${rawNature}`) ? + i18next.t(`pokemonSummary:natureFragment.${rawNature}`, { nature: nature }) : + nature, + }); const memoText = addBBCodeTextObject(this.scene, 7, 113, memoString, TextStyle.WINDOW_ALT); memoText.setOrigin(0, 0); @@ -809,9 +817,7 @@ export default class SummaryUiHandler extends UiHandler { const stats = Utils.getEnumValues(Stat) as Stat[]; stats.forEach((stat, s) => { - const statName = stat !== Stat.HP - ? getStatName(stat) - : "HP"; + const statName = getStatName(stat); const rowIndex = s % 3; const colIndex = Math.floor(s / 3); @@ -831,7 +837,7 @@ export default class SummaryUiHandler extends UiHandler { }); const itemModifiers = (this.scene.findModifiers(m => m instanceof PokemonHeldItemModifier - && (m as PokemonHeldItemModifier).pokemonId === this.pokemon.id, true) as PokemonHeldItemModifier[]) + && m.pokemonId === this.pokemon.id, true) as PokemonHeldItemModifier[]) .sort(modifierSortFunc); itemModifiers.forEach((item, i) => { @@ -848,11 +854,11 @@ export default class SummaryUiHandler extends UiHandler { const relLvExp = getLevelRelExp(this.pokemon.level + 1, this.pokemon.species.growthRate); const expRatio = this.pokemon.level < this.scene.getMaxExpLevel() ? this.pokemon.levelExp / relLvExp : 0; - const expLabel = addTextObject(this.scene, 6, 112, "EXP. Points", TextStyle.SUMMARY); + const expLabel = addTextObject(this.scene, 6, 112, i18next.t("pokemonSummary:expPoints"), TextStyle.SUMMARY); expLabel.setOrigin(0, 0); statsContainer.add(expLabel); - const nextLvExpLabel = addTextObject(this.scene, 6, 128, "Next Lv.", TextStyle.SUMMARY); + const nextLvExpLabel = addTextObject(this.scene, 6, 128, i18next.t("pokemonSummary:nextLv"), TextStyle.SUMMARY); nextLvExpLabel.setOrigin(0, 0); statsContainer.add(nextLvExpLabel); @@ -893,7 +899,7 @@ export default class SummaryUiHandler extends UiHandler { extraRowOverlay.setOrigin(0, 1); this.extraMoveRowContainer.add(extraRowOverlay); - const extraRowText = addTextObject(this.scene, 35, 0, this.summaryUiMode === SummaryUiMode.LEARN_MOVE ? this.newMove.name : "Cancel", + const extraRowText = addTextObject(this.scene, 35, 0, this.summaryUiMode === SummaryUiMode.LEARN_MOVE ? 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); diff --git a/src/ui/target-select-ui-handler.ts b/src/ui/target-select-ui-handler.ts index 772500e8901..48799473343 100644 --- a/src/ui/target-select-ui-handler.ts +++ b/src/ui/target-select-ui-handler.ts @@ -6,17 +6,20 @@ 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.js"; -export type TargetSelectCallback = (cursor: integer) => void; +export type TargetSelectCallback = (targets: BattlerIndex[]) => void; export default class TargetSelectUiHandler extends UiHandler { private fieldIndex: integer; private move: Moves; private targetSelectCallback: TargetSelectCallback; + private isMultipleTargets: boolean = false; private targets: BattlerIndex[]; + private targetsHighlighted: Pokemon[]; private targetFlashTween: Phaser.Tweens.Tween; - private targetBattleInfoMoveTween: Phaser.Tweens.Tween; + private targetBattleInfoMoveTween: Phaser.Tweens.Tween[] = []; constructor(scene: BattleScene) { super(scene, Mode.TARGET_SELECT); @@ -37,13 +40,15 @@ export default class TargetSelectUiHandler extends UiHandler { this.move = args[1] as Moves; this.targetSelectCallback = args[2] as TargetSelectCallback; - this.targets = getMoveTargets(this.scene.getPlayerField()[this.fieldIndex], this.move).targets; + const moveTargets = getMoveTargets(this.scene.getPlayerField()[this.fieldIndex], this.move); + this.targets = moveTargets.targets; + this.isMultipleTargets = moveTargets.multiple ?? false; if (!this.targets.length) { return false; } - this.setCursor(this.targets.indexOf(this.cursor) > -1 ? this.cursor : this.targets[0]); + this.setCursor(this.targets.includes(this.cursor) ? this.cursor : this.targets[0]); return true; } @@ -54,8 +59,11 @@ export default class TargetSelectUiHandler extends UiHandler { let success = false; if (button === Button.ACTION || button === Button.CANCEL) { - this.targetSelectCallback(button === Button.ACTION ? this.cursor : -1); + const targetIndexes: BattlerIndex[] = this.isMultipleTargets ? this.targets : [this.cursor]; + this.targetSelectCallback(button === Button.ACTION ? targetIndexes : []); success = true; + } else if (this.isMultipleTargets) { + success = false; } else { switch (button) { case Button.UP: @@ -89,73 +97,71 @@ export default class TargetSelectUiHandler extends UiHandler { } setCursor(cursor: integer): boolean { - const lastCursor = this.cursor; + const singleTarget = this.scene.getField()[cursor]; + const multipleTargets = this.targets.map(index => this.scene.getField()[index]); + + this.targetsHighlighted = this.isMultipleTargets ? multipleTargets : [ singleTarget ]; const ret = super.setCursor(cursor); if (this.targetFlashTween) { this.targetFlashTween.stop(); - const lastTarget = this.scene.getField()[lastCursor]; - if (lastTarget) { - lastTarget.setAlpha(1); + for (const pokemon of multipleTargets) { + pokemon.setAlpha(1); } } - const target = this.scene.getField()[cursor]; - this.targetFlashTween = this.scene.tweens.add({ - targets: [ target ], + targets: this.targetsHighlighted, alpha: 0, loop: -1, duration: Utils.fixedInt(250), ease: "Sine.easeIn", yoyo: true, onUpdate: t => { - if (target) { + for (const target of this.targetsHighlighted) { target.setAlpha(t.getValue()); } } }); - - if (this.targetBattleInfoMoveTween) { - this.targetBattleInfoMoveTween.stop(); - const lastTarget = this.scene.getField()[lastCursor]; - if (lastTarget) { - lastTarget.getBattleInfo().resetY(); + if (this.targetBattleInfoMoveTween.length >= 1) { + this.targetBattleInfoMoveTween.filter(t => t !== undefined).forEach(tween => tween.stop()); + for (const pokemon of multipleTargets) { + pokemon.getBattleInfo().resetY(); } } - const targetBattleInfo = target.getBattleInfo(); + const targetsBattleInfo = this.targetsHighlighted.map(target => target.getBattleInfo()); - this.targetBattleInfoMoveTween = this.scene.tweens.add({ - targets: [ targetBattleInfo ], - y: { start: targetBattleInfo.getBaseY(), to: targetBattleInfo.getBaseY() + 1 }, - loop: -1, - duration: Utils.fixedInt(250), - ease: "Linear", - yoyo: true + targetsBattleInfo.map(info => { + this.targetBattleInfoMoveTween.push(this.scene.tweens.add({ + targets: [ info ], + y: { start: info.getBaseY(), to: info.getBaseY() + 1 }, + loop: -1, + duration: Utils.fixedInt(250), + ease: "Linear", + yoyo: true + })); }); return ret; } eraseCursor() { - const target = this.scene.getField()[this.cursor]; if (this.targetFlashTween) { this.targetFlashTween.stop(); this.targetFlashTween = null; } - if (target) { - target.setAlpha(1); + for (const pokemon of this.targetsHighlighted) { + pokemon.setAlpha(1); } - const targetBattleInfo = target.getBattleInfo(); - if (this.targetBattleInfoMoveTween) { - this.targetBattleInfoMoveTween.stop(); - this.targetBattleInfoMoveTween = null; + if (this.targetBattleInfoMoveTween.length >= 1) { + this.targetBattleInfoMoveTween.filter(t => t !== undefined).forEach(tween => tween.stop()); + this.targetBattleInfoMoveTween = []; } - if (targetBattleInfo) { - targetBattleInfo.resetY(); + for (const pokemon of this.targetsHighlighted) { + pokemon.getBattleInfo().resetY(); } } diff --git a/src/ui/ui.ts b/src/ui/ui.ts index ce834a83645..ae1bc10a74f 100644 --- a/src/ui/ui.ts +++ b/src/ui/ui.ts @@ -46,6 +46,7 @@ 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 RenameFormUiHandler from "./rename-form-ui-handler"; export enum Mode { MESSAGE, @@ -83,7 +84,8 @@ export enum Mode { SESSION_RELOAD, UNAVAILABLE, OUTDATED, - CHALLENGE_SELECT + CHALLENGE_SELECT, + RENAME_POKEMON } const transitionModes = [ @@ -119,7 +121,8 @@ const noTransitionModes = [ Mode.LOADING, Mode.SESSION_RELOAD, Mode.UNAVAILABLE, - Mode.OUTDATED + Mode.OUTDATED, + Mode.RENAME_POKEMON ]; export default class UI extends Phaser.GameObjects.Container { @@ -180,7 +183,8 @@ export default class UI extends Phaser.GameObjects.Container { new SessionReloadModalUiHandler(scene), new UnavailableModalUiHandler(scene), new OutdatedModalUiHandler(scene), - new GameChallengesUiHandler(scene) + new GameChallengesUiHandler(scene), + new RenameFormUiHandler(scene), ]; } diff --git a/src/ui/unavailable-modal-ui-handler.ts b/src/ui/unavailable-modal-ui-handler.ts index 2f6e1c08832..c864801d9b4 100644 --- a/src/ui/unavailable-modal-ui-handler.ts +++ b/src/ui/unavailable-modal-ui-handler.ts @@ -58,7 +58,7 @@ export default class UnavailableModalUiHandler extends ModalUiHandler { this.scene.playSound("pb_bounce_1"); this.reconnectCallback(); } else if (response[1] === 401) { - Utils.setCookie(Utils.sessionIdKey, ""); + Utils.removeCookie(Utils.sessionIdKey); this.scene.reset(true, true); } else { this.reconnectDuration = Math.min(this.reconnectDuration * 2, this.maxTime); // Set a max delay so it isn't infinite diff --git a/src/utils.ts b/src/utils.ts index 5aa558bae3a..3d55ab8fc65 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -292,13 +292,24 @@ export const apiUrl = localServerUrl ?? "https://api.pokerogue.net"; // used to disable api calls when isLocal is true and a server is not found export let isLocalServerConnected = true; +export const isBeta = import.meta.env.MODE === "beta"; // this checks to see if the env mode is development. Technically this gives the same value for beta AND for dev envs + export function setCookie(cName: string, cValue: string): void { const expiration = new Date(); expiration.setTime(new Date().getTime() + 3600000 * 24 * 30 * 3/*7*/); - document.cookie = `${cName}=${cValue};Secure;SameSite=Strict;Path=/;Expires=${expiration.toUTCString()}`; + document.cookie = `${cName}=${cValue};Secure;SameSite=Strict;Domain=${window.location.hostname};Path=/;Expires=${expiration.toUTCString()}`; +} + +export function removeCookie(cName: string): void { + document.cookie = `${cName}=;Secure;SameSite=Strict;Domain=${window.location.hostname};Path=/;Expires=Thu, 01 Jan 1970 00:00:00 GMT`; } export function getCookie(cName: string): string { + // check if there are multiple cookies with the same name and delete them + if (document.cookie.split(";").filter(c => c.includes(cName)).length > 1) { + removeCookie(cName); + return ""; + } const name = `${cName}=`; const ca = document.cookie.split(";"); for (let i = 0; i < ca.length; i++) { @@ -409,6 +420,13 @@ export function formatText(unformattedText: string): string { return text.join(" "); } +export function toCamelCaseString(unformattedText: string): string { + if (!unformattedText) { + return ""; + } + 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) { const v = Math.max(r, g, b); const c = v - Math.min(r, g, b); diff --git a/src/vite.env.d.ts b/src/vite.env.d.ts index b588b5b1145..a2acc658a10 100644 --- a/src/vite.env.d.ts +++ b/src/vite.env.d.ts @@ -1,10 +1,14 @@ /// interface ImportMetaEnv { + readonly VITE_PORT?: string; readonly VITE_BYPASS_LOGIN?: string; readonly VITE_BYPASS_TUTORIAL?: string; readonly VITE_API_BASE_URL?: string; readonly VITE_SERVER_URL?: string; + readonly VITE_DISCORD_CLIENT_ID?: string; + readonly VITE_GOOGLE_CLIENT_ID?: string; + readonly VITE_I18N_DEBUG?: string; } interface ImportMeta { diff --git a/tsconfig.json b/tsconfig.json index 682b3a7084b..546ea2a9d12 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -29,6 +29,7 @@ "node_modules", "dist", "vite.config.ts", - "vitest.config.ts" + "vitest.config.ts", + "vitest.workspace.ts", ] } \ No newline at end of file diff --git a/vite.config.ts b/vite.config.ts index f0830f5b9be..6dce1272ee6 100644 --- a/vite.config.ts +++ b/vite.config.ts @@ -1,9 +1,8 @@ -import { defineConfig } from 'vite'; +import { defineConfig, loadEnv } from 'vite'; import tsconfigPaths from 'vite-tsconfig-paths'; export const defaultConfig = { plugins: [tsconfigPaths() as any], - server: { host: '0.0.0.0', port: 8000 }, clearScreen: false, build: { minify: 'esbuild' as const, @@ -21,10 +20,17 @@ export const defaultConfig = { }; -export default defineConfig(({mode}) => ({ - ...defaultConfig, - esbuild: { - pure: mode === 'production' ? [ 'console.log' ] : [], - keepNames: true, - }, -})); +export default defineConfig(({mode}) => { + const envPort = Number(loadEnv(mode, process.cwd()).VITE_PORT); + + return ({ + ...defaultConfig, + esbuild: { + pure: mode === 'production' ? ['console.log'] : [], + keepNames: true, + }, + server: { + port: !isNaN(envPort) ? envPort : 8000, + } + }); +}); diff --git a/vitest.config.ts b/vitest.config.ts index 7f16059a8ad..d1827103807 100644 --- a/vitest.config.ts +++ b/vitest.config.ts @@ -1,9 +1,12 @@ -import { defineConfig } from 'vitest/config'; +import { defineProject } from 'vitest/config'; import { defaultConfig } from './vite.config'; -export default defineConfig(({mode}) => ({ +export default defineProject(({ mode }) => ({ ...defaultConfig, test: { + name: "main", + include: ["./src/test/**/*.{test,spec}.ts"], + exclude: ["./src/test/pre.test.ts"], setupFiles: ['./src/test/vitest.setup.ts'], server: { deps: { diff --git a/vitest.workspace.ts b/vitest.workspace.ts new file mode 100644 index 00000000000..38121942004 --- /dev/null +++ b/vitest.workspace.ts @@ -0,0 +1,14 @@ +import { defineWorkspace } from "vitest/config"; +import { defaultConfig } from "./vite.config"; + +export default defineWorkspace([ + { + ...defaultConfig, + test: { + name: "pre", + include: ["src/test/pre.test.ts"], + environment: "jsdom", + }, + }, + "./vitest.config.ts", +]);