diff --git a/.github/workflows/test-shard-template.yml b/.github/workflows/test-shard-template.yml index 185764c86a8..9fc41d1b965 100644 --- a/.github/workflows/test-shard-template.yml +++ b/.github/workflows/test-shard-template.yml @@ -29,4 +29,4 @@ jobs: - name: Install Node.js dependencies run: npm ci - name: Run tests - run: npx vitest --project ${{ inputs.project }} --shard=${{ inputs.shard }}/${{ inputs.totalShards }} ${{ !runner.debug && '--silent' || '' }} + run: npx vitest --project ${{ inputs.project }} --no-isolate --shard=${{ inputs.shard }}/${{ inputs.totalShards }} ${{ !runner.debug && '--silent' || '' }} diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index d30d8adba38..ccc8604ff7e 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -5,39 +5,58 @@ on: # but only for the main branch push: branches: - - main # Trigger on push events to the main branch + - main # Trigger on push events to the main branch - beta # Trigger on push events to the beta branch + # go upvote https://github.com/actions/runner/issues/1182 and yell at microsoft until they fix this or ditch yml for workflows + paths: + # src and test files + - "src/**" + - "test/**" + - "public/**" + # Workflows that can impact tests + - ".github/workflows/test*.yml" + # top-level files + - "package*.json" + - ".nvrmc" # Updates to node version can break tests + - "vite.*.ts" # vite.config.ts, vite.vitest.config.ts, vitest.workspace.ts + - "tsconfig*.json" # tsconfig.json tweaking can impact compilation + - "global.d.ts" + - ".env.*" + # Blanket negations for files that cannot impact tests + - "!**/*.py" # No .py files + - "!**/*.sh" # No .sh files + - "!**/*.md" # No .md files + - "!**/.git*" # .gitkeep and family + pull_request: branches: - - main # Trigger on pull request events targeting the main branch + - main # Trigger on pull request events targeting the main branch - beta # Trigger on pull request events targeting the beta branch + paths: # go upvote https://github.com/actions/runner/issues/1182 and yell at microsoft because until then we have to duplicate this + # src and test files + - "src/**" + - "test/**" + - "public/**" + # Workflows that can impact tests + - ".github/workflows/test*.yml" + # top-level files + - "package*.json" + - ".nvrmc" # Updates to node version can break tests + - "vite*" # vite.config.ts, vite.vitest.config.ts, vitest.workspace.ts + - "tsconfig*.json" # tsconfig.json tweaking can impact compilation + - "global.d.ts" + - ".env.*" + # Blanket negations for files that cannot impact tests + - "!**/*.py" # No .py files + - "!**/*.sh" # No .sh files + - "!**/*.md" # No .md files + - "!**/.git*" # .gitkeep and family merge_group: types: [checks_requested] jobs: - pre-test: - name: Run Pre-test - runs-on: ubuntu-latest - steps: - - name: Check out Git repository - uses: actions/checkout@v4 - with: - submodules: 'recursive' - path: tests-action - - name: Set up Node.js - uses: actions/setup-node@v4 - with: - node-version: 20 - - name: Install Node.js dependencies - working-directory: tests-action - run: npm ci - - name: Run Pre-test - working-directory: tests-action - run: npx vitest run --project pre ${{ !runner.debug && '--silent' || '' }} - run-tests: - name: Run Tests - needs: [pre-test] + name: Run Tests strategy: matrix: shard: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] @@ -45,4 +64,4 @@ jobs: with: project: main shard: ${{ matrix.shard }} - totalShards: 10 \ No newline at end of file + totalShards: 10 diff --git a/biome.jsonc b/biome.jsonc index 3ec4552d359..da80d8ee127 100644 --- a/biome.jsonc +++ b/biome.jsonc @@ -50,7 +50,8 @@ "noUndeclaredVariables": "off", "noUnusedVariables": "error", "noSwitchDeclarations": "warn", // TODO: refactor and make this an error - "noVoidTypeReturn": "warn" // TODO: Refactor and make this an error + "noVoidTypeReturn": "warn", // TODO: Refactor and make this an error + "noUnusedImports": "error" }, "style": { "noVar": "error", @@ -64,7 +65,8 @@ "useDefaultParameterLast": "off", // TODO: Fix spots in the codebase where this flag would be triggered, and then enable "useSingleVarDeclarator": "off", "useNodejsImportProtocol": "off", - "useTemplate": "off" // string concatenation is faster: https://stackoverflow.com/questions/29055518/are-es6-template-literals-faster-than-string-concatenation + "useTemplate": "off", // string concatenation is faster: https://stackoverflow.com/questions/29055518/are-es6-template-literals-faster-than-string-concatenation + "noNamespaceImport": "error" }, "suspicious": { "noDoubleEquals": "error", @@ -98,6 +100,9 @@ "rules": { "performance": { "noDelete": "off" + }, + "style": { + "noNamespaceImport": "off" } } } diff --git a/index.css b/index.css index 49e570bdccc..62ad6266d30 100644 --- a/index.css +++ b/index.css @@ -68,6 +68,10 @@ input:-internal-autofill-selected { background-clip: text; } +input:-webkit-autofill { + -webkit-text-fill-color: #a1a1a1; +} + /* Need adjust input font-size */ input { font-size: 3.2rem; diff --git a/lefthook.yml b/lefthook.yml index 4eff2ad1f8e..ddf875f15de 100644 --- a/lefthook.yml +++ b/lefthook.yml @@ -8,12 +8,6 @@ pre-commit: skip: - merge - rebase - -pre-push: - commands: - biome-lint: - glob: "*.{js,ts,jsx,tsx}" - run: npx @biomejs/biome check --write --reporter=summary {push_files} --no-errors-on-unmatched post-merge: commands: diff --git a/package-lock.json b/package-lock.json index 87e2e150c65..6b880370f0b 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,49 +1,50 @@ { "name": "pokemon-rogue-battle", - "version": "1.7.7", + "version": "1.8.4", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "pokemon-rogue-battle", - "version": "1.7.7", + "version": "1.8.4", "hasInstallScript": true, "dependencies": { "@material/material-color-utilities": "^0.2.7", + "compare-versions": "^6.1.1", "crypto-js": "^4.2.0", - "i18next": "^23.11.1", - "i18next-browser-languagedetector": "^7.2.1", - "i18next-http-backend": "^2.6.1", + "i18next": "^24.2.2", + "i18next-browser-languagedetector": "^8.0.4", + "i18next-http-backend": "^3.0.2", "i18next-korean-postposition-processor": "^1.0.0", - "json-stable-stringify": "^1.1.0", + "json-stable-stringify": "^1.2.0", "jszip": "^3.10.1", "phaser": "^3.70.0", - "phaser3-rex-plugins": "^1.1.84" + "phaser3-rex-plugins": "^1.80.14" }, "devDependencies": { "@biomejs/biome": "1.9.4", - "@eslint/js": "^9.3.0", - "@hpcc-js/wasm": "^2.18.0", - "@stylistic/eslint-plugin-ts": "^2.6.0-beta.0", + "@eslint/js": "^9.23.0", + "@hpcc-js/wasm": "^2.22.4", + "@stylistic/eslint-plugin-ts": "^4.1.0", "@types/jsdom": "^21.1.7", "@types/node": "^20.12.13", - "@typescript-eslint/eslint-plugin": "^8.0.0-alpha.54", - "@typescript-eslint/parser": "^8.0.0-alpha.54", - "@vitest/coverage-istanbul": "^2.1.9", + "@typescript-eslint/eslint-plugin": "^8.28.0", + "@typescript-eslint/parser": "^8.28.0", + "@vitest/coverage-istanbul": "^3.0.9", "dependency-cruiser": "^16.3.10", - "eslint": "^9.7.0", - "eslint-plugin-import-x": "^4.2.1", - "inquirer": "^11.0.2", - "jsdom": "^24.0.0", - "lefthook": "^1.6.12", - "msw": "^2.4.9", + "eslint": "^9.23.0", + "eslint-plugin-import-x": "^4.9.4", + "inquirer": "^12.4.2", + "jsdom": "^26.0.0", + "lefthook": "^1.11.5", + "msw": "^2.7.3", "phaser3spectorjs": "^0.0.8", - "typedoc": "^0.26.4", - "typescript": "^5.5.3", - "typescript-eslint": "^8.0.0-alpha.54", - "vite": "^5.4.14", - "vite-tsconfig-paths": "^4.3.2", - "vitest": "^2.1.9", + "typedoc": "^0.28.1", + "typescript": "^5.8.2", + "typescript-eslint": "^8.28.0", + "vite": "^6.2.0", + "vite-tsconfig-paths": "^5.1.4", + "vitest": "^3.0.9", "vitest-canvas-mock": "^0.3.3" }, "engines": { @@ -64,6 +65,27 @@ "node": ">=6.0.0" } }, + "node_modules/@asamuzakjp/css-color": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@asamuzakjp/css-color/-/css-color-3.1.1.tgz", + "integrity": "sha512-hpRD68SV2OMcZCsrbdkccTw5FXjNDLo5OuqSHyHZfwweGsDWZwDJ2+gONyNAbazZclobMirACLw0lk8WVxIqxA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@csstools/css-calc": "^2.1.2", + "@csstools/css-color-parser": "^3.0.8", + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3", + "lru-cache": "^10.4.3" + } + }, + "node_modules/@asamuzakjp/css-color/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true, + "license": "ISC" + }, "node_modules/@babel/code-frame": { "version": "7.24.7", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz", @@ -423,9 +445,10 @@ } }, "node_modules/@babel/runtime": { - "version": "7.24.8", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.8.tgz", - "integrity": "sha512-5F7SDGs1T72ZczbRwbGO9lQi0NLjQxzl6i4lJxLxfW9U5UluCSyEJeniWvnhl3/euNiqQVbo8zruhsDfid0esA==", + "version": "7.27.0", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.27.0.tgz", + "integrity": "sha512-VtPOkrdPHZsKc/clNqyi9WUA8TINkZ4cGk63UUE3u4pmB2k+ZMQRDuIOagv8UVd6j7k0T3+RRIb7beKTebNbcw==", + "license": "MIT", "dependencies": { "regenerator-runtime": "^0.14.0" }, @@ -658,13 +681,13 @@ } }, "node_modules/@bundled-es-modules/cookie": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@bundled-es-modules/cookie/-/cookie-2.0.0.tgz", - "integrity": "sha512-Or6YHg/kamKHpxULAdSqhGqnWFneIXu1NKvvfBBzKGwpVsYuFIQ5aBPHDnnoR3ghW1nvSkALd+EF9iMtY7Vjxw==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/@bundled-es-modules/cookie/-/cookie-2.0.1.tgz", + "integrity": "sha512-8o+5fRPLNbjbdGRRmJj3h6Hh1AQJf2dk3qQ/5ZFb+PXkRNiSoMGGUKlsgLfrxneb72axVJyIYji64E2+nNfYyw==", "dev": true, "license": "ISC", "dependencies": { - "cookie": "^0.5.0" + "cookie": "^0.7.2" } }, "node_modules/@bundled-es-modules/statuses": { @@ -688,10 +711,159 @@ "tough-cookie": "^4.1.4" } }, + "node_modules/@csstools/color-helpers": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/@csstools/color-helpers/-/color-helpers-5.0.2.tgz", + "integrity": "sha512-JqWH1vsgdGcw2RR6VliXXdA0/59LttzlU8UlRT/iUUsEeWfYq8I+K0yhihEUTTHLRm1EXvpsCx3083EU15ecsA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT-0", + "engines": { + "node": ">=18" + } + }, + "node_modules/@csstools/css-calc": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-2.1.2.tgz", + "integrity": "sha512-TklMyb3uBB28b5uQdxjReG4L80NxAqgrECqLZFQbyLekwwlcDDS8r3f07DKqeo8C4926Br0gf/ZDe17Zv4wIuw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3" + } + }, + "node_modules/@csstools/css-color-parser": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/@csstools/css-color-parser/-/css-color-parser-3.0.8.tgz", + "integrity": "sha512-pdwotQjCCnRPuNi06jFuP68cykU1f3ZWExLe/8MQ1LOs8Xq+fTkYgd+2V8mWUWMrOn9iS2HftPVaMZDaXzGbhQ==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "dependencies": { + "@csstools/color-helpers": "^5.0.2", + "@csstools/css-calc": "^2.1.2" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-parser-algorithms": "^3.0.4", + "@csstools/css-tokenizer": "^3.0.3" + } + }, + "node_modules/@csstools/css-parser-algorithms": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-3.0.4.tgz", + "integrity": "sha512-Up7rBoV77rv29d3uKHUIVubz1BTcgyUK72IvCQAbfbMv584xHcGKCKbWh7i8hPrRJ7qU4Y8IO3IY9m+iTB7P3A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "@csstools/css-tokenizer": "^3.0.3" + } + }, + "node_modules/@csstools/css-tokenizer": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-3.0.3.tgz", + "integrity": "sha512-UJnjoFsmxfKUdNYdWgOB0mWUypuLvAfQPH1+pyvRJs6euowbFkFC6P13w1l8mJyi3vxYMxc9kld5jZEGRQs6bw==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/csstools" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/csstools" + } + ], + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/@emnapi/core": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@emnapi/core/-/core-1.4.0.tgz", + "integrity": "sha512-H+N/FqT07NmLmt6OFFtDfwe8PNygprzBikrEMyQfgqSmT0vzE515Pz7R8izwB9q/zsH/MA64AKoul3sA6/CzVg==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/wasi-threads": "1.0.1", + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/runtime": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.4.0.tgz", + "integrity": "sha512-64WYIf4UYcdLnbKn/umDlNjQDSS8AgZrI/R9+x5ilkUVFxXcA1Ebl+gQLc/6mERA4407Xof0R7wEyEuj091CVw==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@emnapi/wasi-threads": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@emnapi/wasi-threads/-/wasi-threads-1.0.1.tgz", + "integrity": "sha512-iIBu7mwkq4UQGeMEM8bLwNK962nXdhodeScX4slfQnRhEMMzvYivHhutCIk8uojvmASXXPC2WNEjwxFWk72Oqw==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, "node_modules/@esbuild/aix-ppc64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", - "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.25.2.tgz", + "integrity": "sha512-wCIboOL2yXZym2cgm6mlA742s9QeJ8DjGVaL39dLN4rRwrOgOyYSnOaFPhKZGLb2ngj4EyfAFjsNJwPXZvseag==", "cpu": [ "ppc64" ], @@ -702,13 +874,13 @@ "aix" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/android-arm": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", - "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.25.2.tgz", + "integrity": "sha512-NQhH7jFstVY5x8CKbcfa166GoV0EFkaPkCKBQkdPJFvo5u+nGXLEH/ooniLb3QI8Fk58YAx7nsPLozUWfCBOJA==", "cpu": [ "arm" ], @@ -719,13 +891,13 @@ "android" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/android-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", - "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.25.2.tgz", + "integrity": "sha512-5ZAX5xOmTligeBaeNEPnPaeEuah53Id2tX4c2CVP3JaROTH+j4fnfHCkr1PjXMd78hMst+TlkfKcW/DlTq0i4w==", "cpu": [ "arm64" ], @@ -736,13 +908,13 @@ "android" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/android-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", - "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.25.2.tgz", + "integrity": "sha512-Ffcx+nnma8Sge4jzddPHCZVRvIfQ0kMsUsCMcJRHkGJ1cDmhe4SsrYIjLUKn1xpHZybmOqCWwB0zQvsjdEHtkg==", "cpu": [ "x64" ], @@ -753,13 +925,13 @@ "android" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/darwin-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", - "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.25.2.tgz", + "integrity": "sha512-MpM6LUVTXAzOvN4KbjzU/q5smzryuoNjlriAIx+06RpecwCkL9JpenNzpKd2YMzLJFOdPqBpuub6eVRP5IgiSA==", "cpu": [ "arm64" ], @@ -770,13 +942,13 @@ "darwin" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/darwin-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", - "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.25.2.tgz", + "integrity": "sha512-5eRPrTX7wFyuWe8FqEFPG2cU0+butQQVNcT4sVipqjLYQjjh8a8+vUTfgBKM88ObB85ahsnTwF7PSIt6PG+QkA==", "cpu": [ "x64" ], @@ -787,13 +959,13 @@ "darwin" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/freebsd-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", - "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.25.2.tgz", + "integrity": "sha512-mLwm4vXKiQ2UTSX4+ImyiPdiHjiZhIaE9QvC7sw0tZ6HoNMjYAqQpGyui5VRIi5sGd+uWq940gdCbY3VLvsO1w==", "cpu": [ "arm64" ], @@ -804,13 +976,13 @@ "freebsd" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/freebsd-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", - "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.25.2.tgz", + "integrity": "sha512-6qyyn6TjayJSwGpm8J9QYYGQcRgc90nmfdUb0O7pp1s4lTY+9D0H9O02v5JqGApUyiHOtkz6+1hZNvNtEhbwRQ==", "cpu": [ "x64" ], @@ -821,13 +993,13 @@ "freebsd" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-arm": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", - "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.25.2.tgz", + "integrity": "sha512-UHBRgJcmjJv5oeQF8EpTRZs/1knq6loLxTsjc3nxO9eXAPDLcWW55flrMVc97qFPbmZP31ta1AZVUKQzKTzb0g==", "cpu": [ "arm" ], @@ -838,13 +1010,13 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", - "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.25.2.tgz", + "integrity": "sha512-gq/sjLsOyMT19I8obBISvhoYiZIAaGF8JpeXu1u8yPv8BE5HlWYobmlsfijFIZ9hIVGYkbdFhEqC0NvM4kNO0g==", "cpu": [ "arm64" ], @@ -855,13 +1027,13 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-ia32": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", - "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.25.2.tgz", + "integrity": "sha512-bBYCv9obgW2cBP+2ZWfjYTU+f5cxRoGGQ5SeDbYdFCAZpYWrfjjfYwvUpP8MlKbP0nwZ5gyOU/0aUzZ5HWPuvQ==", "cpu": [ "ia32" ], @@ -872,13 +1044,13 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-loong64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", - "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.25.2.tgz", + "integrity": "sha512-SHNGiKtvnU2dBlM5D8CXRFdd+6etgZ9dXfaPCeJtz+37PIUlixvlIhI23L5khKXs3DIzAn9V8v+qb1TRKrgT5w==", "cpu": [ "loong64" ], @@ -889,13 +1061,13 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-mips64el": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", - "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.25.2.tgz", + "integrity": "sha512-hDDRlzE6rPeoj+5fsADqdUZl1OzqDYow4TB4Y/3PlKBD0ph1e6uPHzIQcv2Z65u2K0kpeByIyAjCmjn1hJgG0Q==", "cpu": [ "mips64el" ], @@ -906,13 +1078,13 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-ppc64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", - "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.25.2.tgz", + "integrity": "sha512-tsHu2RRSWzipmUi9UBDEzc0nLc4HtpZEI5Ba+Omms5456x5WaNuiG3u7xh5AO6sipnJ9r4cRWQB2tUjPyIkc6g==", "cpu": [ "ppc64" ], @@ -923,13 +1095,13 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-riscv64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", - "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.25.2.tgz", + "integrity": "sha512-k4LtpgV7NJQOml/10uPU0s4SAXGnowi5qBSjaLWMojNCUICNu7TshqHLAEbkBdAszL5TabfvQ48kK84hyFzjnw==", "cpu": [ "riscv64" ], @@ -940,13 +1112,13 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-s390x": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", - "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.25.2.tgz", + "integrity": "sha512-GRa4IshOdvKY7M/rDpRR3gkiTNp34M0eLTaC1a08gNrh4u488aPhuZOCpkF6+2wl3zAN7L7XIpOFBhnaE3/Q8Q==", "cpu": [ "s390x" ], @@ -957,13 +1129,13 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", - "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.25.2.tgz", + "integrity": "sha512-QInHERlqpTTZ4FRB0fROQWXcYRD64lAoiegezDunLpalZMjcUcld3YzZmVJ2H/Cp0wJRZ8Xtjtj0cEHhYc/uUg==", "cpu": [ "x64" ], @@ -974,13 +1146,30 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.25.2.tgz", + "integrity": "sha512-talAIBoY5M8vHc6EeI2WW9d/CkiO9MQJ0IOWX8hrLhxGbro/vBXJvaQXefW2cP0z0nQVTdQ/eNyGFV1GSKrxfw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" } }, "node_modules/@esbuild/netbsd-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", - "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.25.2.tgz", + "integrity": "sha512-voZT9Z+tpOxrvfKFyfDYPc4DO4rk06qamv1a/fkuzHpiVBMOhpjK+vBmWM8J1eiB3OLSMFYNaOaBNLXGChf5tg==", "cpu": [ "x64" ], @@ -991,13 +1180,30 @@ "netbsd" ], "engines": { - "node": ">=12" + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.25.2.tgz", + "integrity": "sha512-dcXYOC6NXOqcykeDlwId9kB6OkPUxOEqU+rkrYVqJbK2hagWOMrsTGsMr8+rW02M+d5Op5NNlgMmjzecaRf7Tg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" } }, "node_modules/@esbuild/openbsd-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", - "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.25.2.tgz", + "integrity": "sha512-t/TkWwahkH0Tsgoq1Ju7QfgGhArkGLkF1uYz8nQS/PPFlXbP5YgRpqQR3ARRiC2iXoLTWFxc6DJMSK10dVXluw==", "cpu": [ "x64" ], @@ -1008,13 +1214,13 @@ "openbsd" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/sunos-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", - "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.25.2.tgz", + "integrity": "sha512-cfZH1co2+imVdWCjd+D1gf9NjkchVhhdpgb1q5y6Hcv9TP6Zi9ZG/beI3ig8TvwT9lH9dlxLq5MQBBgwuj4xvA==", "cpu": [ "x64" ], @@ -1025,13 +1231,13 @@ "sunos" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/win32-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", - "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.25.2.tgz", + "integrity": "sha512-7Loyjh+D/Nx/sOTzV8vfbB3GJuHdOQyrOryFdZvPHLf42Tk9ivBU5Aedi7iyX+x6rbn2Mh68T4qq1SDqJBQO5Q==", "cpu": [ "arm64" ], @@ -1042,13 +1248,13 @@ "win32" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/win32-ia32": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", - "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.25.2.tgz", + "integrity": "sha512-WRJgsz9un0nqZJ4MfhabxaD9Ft8KioqU3JMinOTvobbX6MOSUigSBlogP8QB3uxpJDsFS6yN+3FDBdqE5lg9kg==", "cpu": [ "ia32" ], @@ -1059,13 +1265,13 @@ "win32" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/win32-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", - "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.25.2.tgz", + "integrity": "sha512-kM3HKb16VIXZyIeVrM1ygYmZBKybX8N4p754bw390wGO3Tf2j4L2/WYL+4suWujpgf6GBYs3jv7TyUivdd05JA==", "cpu": [ "x64" ], @@ -1076,7 +1282,7 @@ "win32" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@eslint-community/eslint-utils": { @@ -1096,9 +1302,9 @@ } }, "node_modules/@eslint-community/regexpp": { - "version": "4.11.0", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.11.0.tgz", - "integrity": "sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A==", + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", + "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", "dev": true, "license": "MIT", "engines": { @@ -1106,13 +1312,13 @@ } }, "node_modules/@eslint/config-array": { - "version": "0.17.1", - "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.17.1.tgz", - "integrity": "sha512-BlYOpej8AQ8Ev9xVqroV7a02JK3SkBAaN9GfMMH9W6Ch8FlQlkjGw4Ir7+FgYwfirivAf4t+GtzuAxqfukmISA==", + "version": "0.19.2", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.19.2.tgz", + "integrity": "sha512-GNKqxfHG2ySmJOBSHg7LxeUx4xpuCoFjacmlCoYWEbaPXLwvfIjixRI12xCQZeULksQb23uiA8F40w5TojpV7w==", "dev": true, "license": "Apache-2.0", "dependencies": { - "@eslint/object-schema": "^2.1.4", + "@eslint/object-schema": "^2.1.6", "debug": "^4.3.1", "minimatch": "^3.1.2" }, @@ -1144,10 +1350,33 @@ "node": "*" } }, + "node_modules/@eslint/config-helpers": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@eslint/config-helpers/-/config-helpers-0.2.0.tgz", + "integrity": "sha512-yJLLmLexii32mGrhW29qvU3QBVTu0GUmEf/J4XsBtVhp4JkIUFN/BjWqTF63yRvGApIDpZm5fa97LtYtINmfeQ==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/core": { + "version": "0.12.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.12.0.tgz", + "integrity": "sha512-cmrR6pytBuSMTaBweKoGMwu3EiHiEC+DoyupPmlZ0HxBJBtIxwe+j/E4XPIKNx+Q74c8lXKPwYawBf5glsTkHg==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@types/json-schema": "^7.0.15" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, "node_modules/@eslint/eslintrc": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.1.0.tgz", - "integrity": "sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.3.1.tgz", + "integrity": "sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==", "dev": true, "license": "MIT", "dependencies": { @@ -1190,6 +1419,7 @@ "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" @@ -1199,13 +1429,15 @@ "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@eslint/eslintrc/node_modules/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -1214,9 +1446,9 @@ } }, "node_modules/@eslint/js": { - "version": "9.7.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.7.0.tgz", - "integrity": "sha512-ChuWDQenef8OSFnvuxv0TCVxEwmu3+hPNKvM9B34qpM0rDRbjL8t5QkQeHHeAfsKQjuH9wS82WeCi1J/owatng==", + "version": "9.23.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.23.0.tgz", + "integrity": "sha512-35MJ8vCPU0ZMxo7zfev2pypqTwWTofFZO6m4KAtdoFhRpLJUpHTZZ+KB3C7Hb1d7bULYwO4lJXGCi5Se+8OMbw==", "dev": true, "license": "MIT", "engines": { @@ -1224,25 +1456,92 @@ } }, "node_modules/@eslint/object-schema": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.4.tgz", - "integrity": "sha512-BsWiH1yFGjXXS2yvrf5LyuoSIIbPrGUWob917o+BTKuZ7qJdxX8aJLRxs1fS9n6r7vESrq1OUqb68dANcFXuQQ==", + "version": "2.1.6", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.6.tgz", + "integrity": "sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==", "dev": true, "license": "Apache-2.0", "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, - "node_modules/@hpcc-js/wasm": { - "version": "2.18.0", - "resolved": "https://registry.npmjs.org/@hpcc-js/wasm/-/wasm-2.18.0.tgz", - "integrity": "sha512-M9XVIvAXGH4Xcyb5UoiohWcn6fil89pcos/gClNdBZG2v+W48xSf2bjcA8BW131X/AFHUerVY28n1P1Jw81/9A==", + "node_modules/@eslint/plugin-kit": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.7.tgz", + "integrity": "sha512-JubJ5B2pJ4k4yGxaNLdbjrnk9d/iDz6/q8wOilpIowd6PJPgaxCuHBnBszq7Ce2TyMrywm5r4PnKm6V3iiZF+g==", "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@eslint/core": "^0.12.0", + "levn": "^0.4.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@gerrit0/mini-shiki": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/@gerrit0/mini-shiki/-/mini-shiki-3.2.2.tgz", + "integrity": "sha512-vaZNGhGLKMY14HbF53xxHNgFO9Wz+t5lTlGNpl2N9xFiKQ0I5oIe0vKjU9dh7Nb3Dw6lZ7wqUE0ri+zcdpnK+Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "@shikijs/engine-oniguruma": "^3.2.1", + "@shikijs/langs": "^3.2.1", + "@shikijs/themes": "^3.2.1", + "@shikijs/types": "^3.2.1", + "@shikijs/vscode-textmate": "^10.0.2" + } + }, + "node_modules/@hpcc-js/wasm": { + "version": "2.22.4", + "resolved": "https://registry.npmjs.org/@hpcc-js/wasm/-/wasm-2.22.4.tgz", + "integrity": "sha512-58JkRkxZffiBAbZhc7z+9iaaAOmn1cyxLL3rRwsUvco/I0Wwb7uVAlHM9HiU6XASe2k11jrIjCFff1t9QKjlqg==", + "dev": true, + "license": "Apache-2.0", "dependencies": { "yargs": "17.7.2" }, "bin": { - "dot-wasm": "bin/dot-wasm.js" + "dot-wasm": "node ./node_modules/@hpcc-js/wasm-graphviz-cli/bin/index.js" + } + }, + "node_modules/@humanfs/core": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", + "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node": { + "version": "0.16.6", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.6.tgz", + "integrity": "sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "@humanfs/core": "^0.19.1", + "@humanwhocodes/retry": "^0.3.0" + }, + "engines": { + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node/node_modules/@humanwhocodes/retry": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.1.tgz", + "integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" } }, "node_modules/@humanwhocodes/module-importer": { @@ -1260,9 +1559,9 @@ } }, "node_modules/@humanwhocodes/retry": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.0.tgz", - "integrity": "sha512-d2CGZR2o7fS6sWB7DG/3a95bGKQyHMACZ5aW8qGkkqQpUoZV6C0X7Pc7l4ZNMZkfNBf4VWNe9E1jRsf0G146Ew==", + "version": "0.4.2", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.2.tgz", + "integrity": "sha512-xeO57FpIu4p1Ri3Jq/EXq4ClRm86dVF2z/+kvFnyqVYRavTZmaFaUBbWCOuuTh0o/g7DSsk6kc2vrS4Vl5oPOQ==", "dev": true, "license": "Apache-2.0", "engines": { @@ -1274,68 +1573,78 @@ } }, "node_modules/@inquirer/checkbox": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@inquirer/checkbox/-/checkbox-3.0.1.tgz", - "integrity": "sha512-0hm2nrToWUdD6/UHnel/UKGdk1//ke5zGUpHIvk5ZWmaKezlGxZkOJXNSWsdxO/rEqTkbB3lNC2J6nBElV2aAQ==", + "version": "4.1.4", + "resolved": "https://registry.npmjs.org/@inquirer/checkbox/-/checkbox-4.1.4.tgz", + "integrity": "sha512-d30576EZdApjAMceijXA5jDzRQHT/MygbC+J8I7EqA6f/FRpYxlRtRJbHF8gHeWYeSdOuTEJqonn7QLB1ELezA==", "dev": true, "license": "MIT", "dependencies": { - "@inquirer/core": "^9.2.1", - "@inquirer/figures": "^1.0.6", - "@inquirer/type": "^2.0.0", + "@inquirer/core": "^10.1.9", + "@inquirer/figures": "^1.0.11", + "@inquirer/type": "^3.0.5", "ansi-escapes": "^4.3.2", "yoctocolors-cjs": "^2.1.2" }, "engines": { "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } } }, "node_modules/@inquirer/confirm": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-4.0.1.tgz", - "integrity": "sha512-46yL28o2NJ9doViqOy0VDcoTzng7rAb6yPQKU7VDLqkmbCaH4JqK4yk4XqlzNWy9PVC5pG1ZUXPBQv+VqnYs2w==", + "version": "5.1.8", + "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-5.1.8.tgz", + "integrity": "sha512-dNLWCYZvXDjO3rnQfk2iuJNL4Ivwz/T2+C3+WnNfJKsNGSuOs3wAo2F6e0p946gtSAk31nZMfW+MRmYaplPKsg==", "dev": true, "license": "MIT", "dependencies": { - "@inquirer/core": "^9.2.1", - "@inquirer/type": "^2.0.0" + "@inquirer/core": "^10.1.9", + "@inquirer/type": "^3.0.5" }, "engines": { "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } } }, "node_modules/@inquirer/core": { - "version": "9.2.1", - "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-9.2.1.tgz", - "integrity": "sha512-F2VBt7W/mwqEU4bL0RnHNZmC/OxzNx9cOYxHqnXX3MP6ruYvZUZAW9imgN9+h/uBT/oP8Gh888J2OZSbjSeWcg==", + "version": "10.1.9", + "resolved": "https://registry.npmjs.org/@inquirer/core/-/core-10.1.9.tgz", + "integrity": "sha512-sXhVB8n20NYkUBfDYgizGHlpRVaCRjtuzNZA6xpALIUbkgfd2Hjz+DfEN6+h1BRnuxw0/P4jCIMjMsEOAMwAJw==", "dev": true, "license": "MIT", "dependencies": { - "@inquirer/figures": "^1.0.6", - "@inquirer/type": "^2.0.0", - "@types/mute-stream": "^0.0.4", - "@types/node": "^22.5.5", - "@types/wrap-ansi": "^3.0.0", + "@inquirer/figures": "^1.0.11", + "@inquirer/type": "^3.0.5", "ansi-escapes": "^4.3.2", "cli-width": "^4.1.0", - "mute-stream": "^1.0.0", + "mute-stream": "^2.0.0", "signal-exit": "^4.1.0", - "strip-ansi": "^6.0.1", "wrap-ansi": "^6.2.0", "yoctocolors-cjs": "^2.1.2" }, "engines": { "node": ">=18" - } - }, - "node_modules/@inquirer/core/node_modules/@types/node": { - "version": "22.5.5", - "resolved": "https://registry.npmjs.org/@types/node/-/node-22.5.5.tgz", - "integrity": "sha512-Xjs4y5UPO/CLdzpgR6GirZJx36yScjh73+2NlLlkFRSoQN8B0DpfXPdZGnvVmLRLOsqDpOfTNv7D9trgGhmOIA==", - "dev": true, - "license": "MIT", - "dependencies": { - "undici-types": "~6.19.2" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } } }, "node_modules/@inquirer/core/node_modules/emoji-regex": { @@ -1360,13 +1669,6 @@ "node": ">=8" } }, - "node_modules/@inquirer/core/node_modules/undici-types": { - "version": "6.19.8", - "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-6.19.8.tgz", - "integrity": "sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==", - "dev": true, - "license": "MIT" - }, "node_modules/@inquirer/core/node_modules/wrap-ansi": { "version": "6.2.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-6.2.0.tgz", @@ -1383,39 +1685,55 @@ } }, "node_modules/@inquirer/editor": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@inquirer/editor/-/editor-3.0.1.tgz", - "integrity": "sha512-VA96GPFaSOVudjKFraokEEmUQg/Lub6OXvbIEZU1SDCmBzRkHGhxoFAVaF30nyiB4m5cEbDgiI2QRacXZ2hw9Q==", + "version": "4.2.9", + "resolved": "https://registry.npmjs.org/@inquirer/editor/-/editor-4.2.9.tgz", + "integrity": "sha512-8HjOppAxO7O4wV1ETUlJFg6NDjp/W2NP5FB9ZPAcinAlNT4ZIWOLe2pUVwmmPRSV0NMdI5r/+lflN55AwZOKSw==", "dev": true, "license": "MIT", "dependencies": { - "@inquirer/core": "^9.2.1", - "@inquirer/type": "^2.0.0", + "@inquirer/core": "^10.1.9", + "@inquirer/type": "^3.0.5", "external-editor": "^3.1.0" }, "engines": { "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } } }, "node_modules/@inquirer/expand": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@inquirer/expand/-/expand-3.0.1.tgz", - "integrity": "sha512-ToG8d6RIbnVpbdPdiN7BCxZGiHOTomOX94C2FaT5KOHupV40tKEDozp12res6cMIfRKrXLJyexAZhWVHgbALSQ==", + "version": "4.0.11", + "resolved": "https://registry.npmjs.org/@inquirer/expand/-/expand-4.0.11.tgz", + "integrity": "sha512-OZSUW4hFMW2TYvX/Sv+NnOZgO8CHT2TU1roUCUIF2T+wfw60XFRRp9MRUPCT06cRnKL+aemt2YmTWwt7rOrNEA==", "dev": true, "license": "MIT", "dependencies": { - "@inquirer/core": "^9.2.1", - "@inquirer/type": "^2.0.0", + "@inquirer/core": "^10.1.9", + "@inquirer/type": "^3.0.5", "yoctocolors-cjs": "^2.1.2" }, "engines": { "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } } }, "node_modules/@inquirer/figures": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/@inquirer/figures/-/figures-1.0.6.tgz", - "integrity": "sha512-yfZzps3Cso2UbM7WlxKwZQh2Hs6plrbjs1QnzQDZhK2DgyCo6D8AaHps9olkNcUFlcYERMqU3uJSp1gmy3s/qQ==", + "version": "1.0.11", + "resolved": "https://registry.npmjs.org/@inquirer/figures/-/figures-1.0.11.tgz", + "integrity": "sha512-eOg92lvrn/aRUqbxRyvpEWnrvRuTYRifixHkYVpJiygTgVSBIHDqLh0SrMQXkafvULg3ck11V7xvR+zcgvpHFw==", "dev": true, "license": "MIT", "engines": { @@ -1423,129 +1741,190 @@ } }, "node_modules/@inquirer/input": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@inquirer/input/-/input-3.0.1.tgz", - "integrity": "sha512-BDuPBmpvi8eMCxqC5iacloWqv+5tQSJlUafYWUe31ow1BVXjW2a5qe3dh4X/Z25Wp22RwvcaLCc2siHobEOfzg==", + "version": "4.1.8", + "resolved": "https://registry.npmjs.org/@inquirer/input/-/input-4.1.8.tgz", + "integrity": "sha512-WXJI16oOZ3/LiENCAxe8joniNp8MQxF6Wi5V+EBbVA0ZIOpFcL4I9e7f7cXse0HJeIPCWO8Lcgnk98juItCi7Q==", "dev": true, "license": "MIT", "dependencies": { - "@inquirer/core": "^9.2.1", - "@inquirer/type": "^2.0.0" + "@inquirer/core": "^10.1.9", + "@inquirer/type": "^3.0.5" }, "engines": { "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } } }, "node_modules/@inquirer/number": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@inquirer/number/-/number-2.0.1.tgz", - "integrity": "sha512-QpR8jPhRjSmlr/mD2cw3IR8HRO7lSVOnqUvQa8scv1Lsr3xoAMMworcYW3J13z3ppjBFBD2ef1Ci6AE5Qn8goQ==", + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/@inquirer/number/-/number-3.0.11.tgz", + "integrity": "sha512-pQK68CsKOgwvU2eA53AG/4npRTH2pvs/pZ2bFvzpBhrznh8Mcwt19c+nMO7LHRr3Vreu1KPhNBF3vQAKrjIulw==", "dev": true, "license": "MIT", "dependencies": { - "@inquirer/core": "^9.2.1", - "@inquirer/type": "^2.0.0" + "@inquirer/core": "^10.1.9", + "@inquirer/type": "^3.0.5" }, "engines": { "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } } }, "node_modules/@inquirer/password": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@inquirer/password/-/password-3.0.1.tgz", - "integrity": "sha512-haoeEPUisD1NeE2IanLOiFr4wcTXGWrBOyAyPZi1FfLJuXOzNmxCJPgUrGYKVh+Y8hfGJenIfz5Wb/DkE9KkMQ==", + "version": "4.0.11", + "resolved": "https://registry.npmjs.org/@inquirer/password/-/password-4.0.11.tgz", + "integrity": "sha512-dH6zLdv+HEv1nBs96Case6eppkRggMe8LoOTl30+Gq5Wf27AO/vHFgStTVz4aoevLdNXqwE23++IXGw4eiOXTg==", "dev": true, "license": "MIT", "dependencies": { - "@inquirer/core": "^9.2.1", - "@inquirer/type": "^2.0.0", + "@inquirer/core": "^10.1.9", + "@inquirer/type": "^3.0.5", "ansi-escapes": "^4.3.2" }, "engines": { "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } } }, "node_modules/@inquirer/prompts": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/@inquirer/prompts/-/prompts-6.0.1.tgz", - "integrity": "sha512-yl43JD/86CIj3Mz5mvvLJqAOfIup7ncxfJ0Btnl0/v5TouVUyeEdcpknfgc+yMevS/48oH9WAkkw93m7otLb/A==", + "version": "7.4.0", + "resolved": "https://registry.npmjs.org/@inquirer/prompts/-/prompts-7.4.0.tgz", + "integrity": "sha512-EZiJidQOT4O5PYtqnu1JbF0clv36oW2CviR66c7ma4LsupmmQlUwmdReGKRp456OWPWMz3PdrPiYg3aCk3op2w==", "dev": true, "license": "MIT", "dependencies": { - "@inquirer/checkbox": "^3.0.1", - "@inquirer/confirm": "^4.0.1", - "@inquirer/editor": "^3.0.1", - "@inquirer/expand": "^3.0.1", - "@inquirer/input": "^3.0.1", - "@inquirer/number": "^2.0.1", - "@inquirer/password": "^3.0.1", - "@inquirer/rawlist": "^3.0.1", - "@inquirer/search": "^2.0.1", - "@inquirer/select": "^3.0.1" + "@inquirer/checkbox": "^4.1.4", + "@inquirer/confirm": "^5.1.8", + "@inquirer/editor": "^4.2.9", + "@inquirer/expand": "^4.0.11", + "@inquirer/input": "^4.1.8", + "@inquirer/number": "^3.0.11", + "@inquirer/password": "^4.0.11", + "@inquirer/rawlist": "^4.0.11", + "@inquirer/search": "^3.0.11", + "@inquirer/select": "^4.1.0" }, "engines": { "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } } }, "node_modules/@inquirer/rawlist": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@inquirer/rawlist/-/rawlist-3.0.1.tgz", - "integrity": "sha512-VgRtFIwZInUzTiPLSfDXK5jLrnpkuSOh1ctfaoygKAdPqjcjKYmGh6sCY1pb0aGnCGsmhUxoqLDUAU0ud+lGXQ==", + "version": "4.0.11", + "resolved": "https://registry.npmjs.org/@inquirer/rawlist/-/rawlist-4.0.11.tgz", + "integrity": "sha512-uAYtTx0IF/PqUAvsRrF3xvnxJV516wmR6YVONOmCWJbbt87HcDHLfL9wmBQFbNJRv5kCjdYKrZcavDkH3sVJPg==", "dev": true, "license": "MIT", "dependencies": { - "@inquirer/core": "^9.2.1", - "@inquirer/type": "^2.0.0", + "@inquirer/core": "^10.1.9", + "@inquirer/type": "^3.0.5", "yoctocolors-cjs": "^2.1.2" }, "engines": { "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } } }, "node_modules/@inquirer/search": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@inquirer/search/-/search-2.0.1.tgz", - "integrity": "sha512-r5hBKZk3g5MkIzLVoSgE4evypGqtOannnB3PKTG9NRZxyFRKcfzrdxXXPcoJQsxJPzvdSU2Rn7pB7lw0GCmGAg==", + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/@inquirer/search/-/search-3.0.11.tgz", + "integrity": "sha512-9CWQT0ikYcg6Ls3TOa7jljsD7PgjcsYEM0bYE+Gkz+uoW9u8eaJCRHJKkucpRE5+xKtaaDbrND+nPDoxzjYyew==", "dev": true, "license": "MIT", "dependencies": { - "@inquirer/core": "^9.2.1", - "@inquirer/figures": "^1.0.6", - "@inquirer/type": "^2.0.0", + "@inquirer/core": "^10.1.9", + "@inquirer/figures": "^1.0.11", + "@inquirer/type": "^3.0.5", "yoctocolors-cjs": "^2.1.2" }, "engines": { "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } } }, "node_modules/@inquirer/select": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@inquirer/select/-/select-3.0.1.tgz", - "integrity": "sha512-lUDGUxPhdWMkN/fHy1Lk7pF3nK1fh/gqeyWXmctefhxLYxlDsc7vsPBEpxrfVGDsVdyYJsiJoD4bJ1b623cV1Q==", + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@inquirer/select/-/select-4.1.0.tgz", + "integrity": "sha512-z0a2fmgTSRN+YBuiK1ROfJ2Nvrpij5lVN3gPDkQGhavdvIVGHGW29LwYZfM/j42Ai2hUghTI/uoBuTbrJk42bA==", "dev": true, "license": "MIT", "dependencies": { - "@inquirer/core": "^9.2.1", - "@inquirer/figures": "^1.0.6", - "@inquirer/type": "^2.0.0", + "@inquirer/core": "^10.1.9", + "@inquirer/figures": "^1.0.11", + "@inquirer/type": "^3.0.5", "ansi-escapes": "^4.3.2", "yoctocolors-cjs": "^2.1.2" }, "engines": { "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } } }, "node_modules/@inquirer/type": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-2.0.0.tgz", - "integrity": "sha512-XvJRx+2KR3YXyYtPUUy+qd9i7p+GO9Ko6VIIpWlBrpWwXDv8WLFeHTxz35CfQFUiBMLXlGHhGzys7lqit9gWag==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-3.0.5.tgz", + "integrity": "sha512-ZJpeIYYueOz/i/ONzrfof8g89kNdO2hjGuvULROo3O8rlB2CRtSseE5KeirnyE4t/thAn/EwvS/vuQeJCn+NZg==", "dev": true, "license": "MIT", - "dependencies": { - "mute-stream": "^1.0.0" - }, "engines": { "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } } }, "node_modules/@isaacs/cliui": { @@ -1664,9 +2043,9 @@ "license": "Apache-2.0" }, "node_modules/@mswjs/interceptors": { - "version": "0.35.8", - "resolved": "https://registry.npmjs.org/@mswjs/interceptors/-/interceptors-0.35.8.tgz", - "integrity": "sha512-PFfqpHplKa7KMdoQdj5td03uG05VK2Ng1dG0sP4pT9h0dGSX2v9txYt/AnrzPb/vAmfyBBC0NQV7VaBEX+efgQ==", + "version": "0.37.6", + "resolved": "https://registry.npmjs.org/@mswjs/interceptors/-/interceptors-0.37.6.tgz", + "integrity": "sha512-wK+5pLK5XFmgtH3aQ2YVvA3HohS3xqV/OxuVOdNx9Wpnz7VE/fnC+e1A7ln6LFYeck7gOJ/dsZV6OLplOtAJ2w==", "dev": true, "license": "MIT", "dependencies": { @@ -1681,6 +2060,19 @@ "node": ">=18" } }, + "node_modules/@napi-rs/wasm-runtime": { + "version": "0.2.7", + "resolved": "https://registry.npmjs.org/@napi-rs/wasm-runtime/-/wasm-runtime-0.2.7.tgz", + "integrity": "sha512-5yximcFK5FNompXfJFoWanu5l8v1hNGqNHh9du1xETp9HWk/B/PzvchX55WYOPaIeNglG8++68AAiauBAtbnzw==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@emnapi/core": "^1.3.1", + "@emnapi/runtime": "^1.3.1", + "@tybys/wasm-util": "^0.9.0" + } + }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -1755,246 +2147,370 @@ "node": ">=14" } }, + "node_modules/@pkgr/core": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@pkgr/core/-/core-0.2.0.tgz", + "integrity": "sha512-vsJDAkYR6qCPu+ioGScGiMYR7LvZYIXh/dlQeviqoTWNCVfKTLYD/LkNWH4Mxsv2a5vpIRc77FN5DnmK1eBggQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.18.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/unts" + } + }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.22.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.22.4.tgz", - "integrity": "sha512-Fxamp4aEZnfPOcGA8KSNEohV8hX7zVHOemC8jVBoBUHu5zpJK/Eu3uJwt6BMgy9fkvzxDaurgj96F/NiLukF2w==", + "version": "4.38.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.38.0.tgz", + "integrity": "sha512-ldomqc4/jDZu/xpYU+aRxo3V4mGCV9HeTgUBANI3oIQMOL+SsxB+S2lxMpkFp5UamSS3XuTMQVbsS24R4J4Qjg==", "cpu": [ "arm" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "android" ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.22.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.22.4.tgz", - "integrity": "sha512-VXoK5UMrgECLYaMuGuVTOx5kcuap1Jm8g/M83RnCHBKOqvPPmROFJGQaZhGccnsFtfXQ3XYa4/jMCJvZnbJBdA==", + "version": "4.38.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.38.0.tgz", + "integrity": "sha512-VUsgcy4GhhT7rokwzYQP+aV9XnSLkkhlEJ0St8pbasuWO/vwphhZQxYEKUP3ayeCYLhk6gEtacRpYP/cj3GjyQ==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "android" ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.22.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.22.4.tgz", - "integrity": "sha512-xMM9ORBqu81jyMKCDP+SZDhnX2QEVQzTcC6G18KlTQEzWK8r/oNZtKuZaCcHhnsa6fEeOBionoyl5JsAbE/36Q==", + "version": "4.38.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.38.0.tgz", + "integrity": "sha512-buA17AYXlW9Rn091sWMq1xGUvWQFOH4N1rqUxGJtEQzhChxWjldGCCup7r/wUnaI6Au8sKXpoh0xg58a7cgcpg==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "darwin" ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.22.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.22.4.tgz", - "integrity": "sha512-aJJyYKQwbHuhTUrjWjxEvGnNNBCnmpHDvrb8JFDbeSH3m2XdHcxDd3jthAzvmoI8w/kSjd2y0udT+4okADsZIw==", + "version": "4.38.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.38.0.tgz", + "integrity": "sha512-Mgcmc78AjunP1SKXl624vVBOF2bzwNWFPMP4fpOu05vS0amnLcX8gHIge7q/lDAHy3T2HeR0TqrriZDQS2Woeg==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "darwin" ] }, + "node_modules/@rollup/rollup-freebsd-arm64": { + "version": "4.38.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.38.0.tgz", + "integrity": "sha512-zzJACgjLbQTsscxWqvrEQAEh28hqhebpRz5q/uUd1T7VTwUNZ4VIXQt5hE7ncs0GrF+s7d3S4on4TiXUY8KoQA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@rollup/rollup-freebsd-x64": { + "version": "4.38.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.38.0.tgz", + "integrity": "sha512-hCY/KAeYMCyDpEE4pTETam0XZS4/5GXzlLgpi5f0IaPExw9kuB+PDTOTLuPtM10TlRG0U9OSmXJ+Wq9J39LvAg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.22.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.22.4.tgz", - "integrity": "sha512-j63YtCIRAzbO+gC2L9dWXRh5BFetsv0j0va0Wi9epXDgU/XUi5dJKo4USTttVyK7fGw2nPWK0PbAvyliz50SCQ==", + "version": "4.38.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.38.0.tgz", + "integrity": "sha512-mimPH43mHl4JdOTD7bUMFhBdrg6f9HzMTOEnzRmXbOZqjijCw8LA5z8uL6LCjxSa67H2xiLFvvO67PT05PRKGg==", "cpu": [ "arm" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.22.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.22.4.tgz", - "integrity": "sha512-dJnWUgwWBX1YBRsuKKMOlXCzh2Wu1mlHzv20TpqEsfdZLb3WoJW2kIEsGwLkroYf24IrPAvOT/ZQ2OYMV6vlrg==", + "version": "4.38.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.38.0.tgz", + "integrity": "sha512-tPiJtiOoNuIH8XGG8sWoMMkAMm98PUwlriOFCCbZGc9WCax+GLeVRhmaxjJtz6WxrPKACgrwoZ5ia/uapq3ZVg==", "cpu": [ "arm" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.22.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.22.4.tgz", - "integrity": "sha512-AdPRoNi3NKVLolCN/Sp4F4N1d98c4SBnHMKoLuiG6RXgoZ4sllseuGioszumnPGmPM2O7qaAX/IJdeDU8f26Aw==", + "version": "4.38.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.38.0.tgz", + "integrity": "sha512-wZco59rIVuB0tjQS0CSHTTUcEde+pXQWugZVxWaQFdQQ1VYub/sTrNdY76D1MKdN2NB48JDuGABP6o6fqos8mA==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.22.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.22.4.tgz", - "integrity": "sha512-Gl0AxBtDg8uoAn5CCqQDMqAx22Wx22pjDOjBdmG0VIWX3qUBHzYmOKh8KXHL4UpogfJ14G4wk16EQogF+v8hmA==", + "version": "4.38.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.38.0.tgz", + "integrity": "sha512-fQgqwKmW0REM4LomQ+87PP8w8xvU9LZfeLBKybeli+0yHT7VKILINzFEuggvnV9M3x1Ed4gUBmGUzCo/ikmFbQ==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-loongarch64-gnu": { + "version": "4.38.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.38.0.tgz", + "integrity": "sha512-hz5oqQLXTB3SbXpfkKHKXLdIp02/w3M+ajp8p4yWOWwQRtHWiEOCKtc9U+YXahrwdk+3qHdFMDWR5k+4dIlddg==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { - "version": "4.22.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.22.4.tgz", - "integrity": "sha512-3aVCK9xfWW1oGQpTsYJJPF6bfpWfhbRnhdlyhak2ZiyFLDaayz0EP5j9V1RVLAAxlmWKTDfS9wyRyY3hvhPoOg==", + "version": "4.38.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.38.0.tgz", + "integrity": "sha512-NXqygK/dTSibQ+0pzxsL3r4Xl8oPqVoWbZV9niqOnIHV/J92fe65pOir0xjkUZDRSPyFRvu+4YOpJF9BZHQImw==", "cpu": [ "ppc64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.22.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.22.4.tgz", - "integrity": "sha512-ePYIir6VYnhgv2C5Xe9u+ico4t8sZWXschR6fMgoPUK31yQu7hTEJb7bCqivHECwIClJfKgE7zYsh1qTP3WHUA==", + "version": "4.38.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.38.0.tgz", + "integrity": "sha512-GEAIabR1uFyvf/jW/5jfu8gjM06/4kZ1W+j1nWTSSB3w6moZEBm7iBtzwQ3a1Pxos2F7Gz+58aVEnZHU295QTg==", "cpu": [ "riscv64" ], "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-musl": { + "version": "4.38.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-musl/-/rollup-linux-riscv64-musl-4.38.0.tgz", + "integrity": "sha512-9EYTX+Gus2EGPbfs+fh7l95wVADtSQyYw4DfSBcYdUEAmP2lqSZY0Y17yX/3m5VKGGJ4UmIH5LHLkMJft3bYoA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.22.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.22.4.tgz", - "integrity": "sha512-GqFJ9wLlbB9daxhVlrTe61vJtEY99/xB3C8e4ULVsVfflcpmR6c8UZXjtkMA6FhNONhj2eA5Tk9uAVw5orEs4Q==", + "version": "4.38.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.38.0.tgz", + "integrity": "sha512-Mpp6+Z5VhB9VDk7RwZXoG2qMdERm3Jw07RNlXHE0bOnEeX+l7Fy4bg+NxfyN15ruuY3/7Vrbpm75J9QHFqj5+Q==", "cpu": [ "s390x" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.22.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.22.4.tgz", - "integrity": "sha512-87v0ol2sH9GE3cLQLNEy0K/R0pz1nvg76o8M5nhMR0+Q+BBGLnb35P0fVz4CQxHYXaAOhE8HhlkaZfsdUOlHwg==", + "version": "4.38.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.38.0.tgz", + "integrity": "sha512-vPvNgFlZRAgO7rwncMeE0+8c4Hmc+qixnp00/Uv3ht2x7KYrJ6ERVd3/R0nUtlE6/hu7/HiiNHJ/rP6knRFt1w==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.22.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.22.4.tgz", - "integrity": "sha512-UV6FZMUgePDZrFjrNGIWzDo/vABebuXBhJEqrHxrGiU6HikPy0Z3LfdtciIttEUQfuDdCn8fqh7wiFJjCNwO+g==", + "version": "4.38.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.38.0.tgz", + "integrity": "sha512-q5Zv+goWvQUGCaL7fU8NuTw8aydIL/C9abAVGCzRReuj5h30TPx4LumBtAidrVOtXnlB+RZkBtExMsfqkMfb8g==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "linux" ] }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.22.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.22.4.tgz", - "integrity": "sha512-BjI+NVVEGAXjGWYHz/vv0pBqfGoUH0IGZ0cICTn7kB9PyjrATSkX+8WkguNjWoj2qSr1im/+tTGRaY+4/PdcQw==", + "version": "4.38.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.38.0.tgz", + "integrity": "sha512-u/Jbm1BU89Vftqyqbmxdq14nBaQjQX1HhmsdBWqSdGClNaKwhjsg5TpW+5Ibs1mb8Es9wJiMdl86BcmtUVXNZg==", "cpu": [ "arm64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "win32" ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.22.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.22.4.tgz", - "integrity": "sha512-SiWG/1TuUdPvYmzmYnmd3IEifzR61Tragkbx9D3+R8mzQqDBz8v+BvZNDlkiTtI9T15KYZhP0ehn3Dld4n9J5g==", + "version": "4.38.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.38.0.tgz", + "integrity": "sha512-mqu4PzTrlpNHHbu5qleGvXJoGgHpChBlrBx/mEhTPpnAL1ZAYFlvHD7rLK839LLKQzqEQMFJfGrrOHItN4ZQqA==", "cpu": [ "ia32" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "win32" ] }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.22.4", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.22.4.tgz", - "integrity": "sha512-j8pPKp53/lq9lMXN57S8cFz0MynJk8OWNuUnXct/9KCpKU7DgU3bYMJhwWmcqC0UU29p8Lr0/7KEVcaM6bf47Q==", + "version": "4.38.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.38.0.tgz", + "integrity": "sha512-jjqy3uWlecfB98Psxb5cD6Fny9Fupv9LrDSPTQZUROqjvZmcCqNu4UMl7qqhlUUGpwiAkotj6GYu4SZdcr/nLw==", "cpu": [ "x64" ], "dev": true, + "license": "MIT", "optional": true, "os": [ "win32" ] }, - "node_modules/@shikijs/core": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/@shikijs/core/-/core-1.12.0.tgz", - "integrity": "sha512-mc1cLbm6UQ8RxLc0dZES7v5rkH+99LxQp/ZvTqV3NLyYsO/fD6JhEflP1H5b2SDq9gI0+0G36AVZWxvounfR9w==", - "dev": true, - "dependencies": { - "@types/hast": "^3.0.4" - } - }, - "node_modules/@stylistic/eslint-plugin-js": { - "version": "2.6.0-beta.0", - "resolved": "https://registry.npmjs.org/@stylistic/eslint-plugin-js/-/eslint-plugin-js-2.6.0-beta.0.tgz", - "integrity": "sha512-KQiNvzNzvl9AmMs1MiIBszLIy/Xy1bTExnyaVy5dSzOF9c+yT64JQfH0p0jP6XpGwoCnZsrPUNflwP30G42QBQ==", + "node_modules/@shikijs/engine-oniguruma": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/@shikijs/engine-oniguruma/-/engine-oniguruma-3.2.1.tgz", + "integrity": "sha512-wZZAkayEn6qu2+YjenEoFqj0OyQI64EWsNR6/71d1EkG4sxEOFooowKivsWPpaWNBu3sxAG+zPz5kzBL/SsreQ==", "dev": true, "license": "MIT", "dependencies": { - "@types/eslint": "^8.56.10", - "acorn": "^8.12.0", - "eslint-visitor-keys": "^4.0.0", - "espree": "^10.1.0" + "@shikijs/types": "3.2.1", + "@shikijs/vscode-textmate": "^10.0.2" + } + }, + "node_modules/@shikijs/langs": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/@shikijs/langs/-/langs-3.2.1.tgz", + "integrity": "sha512-If0iDHYRSGbihiA8+7uRsgb1er1Yj11pwpX1c6HLYnizDsKAw5iaT3JXj5ZpaimXSWky/IhxTm7C6nkiYVym+A==", + "dev": true, + "license": "MIT", + "dependencies": { + "@shikijs/types": "3.2.1" + } + }, + "node_modules/@shikijs/themes": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/@shikijs/themes/-/themes-3.2.1.tgz", + "integrity": "sha512-k5DKJUT8IldBvAm8WcrDT5+7GA7se6lLksR+2E3SvyqGTyFMzU2F9Gb7rmD+t+Pga1MKrYFxDIeyWjMZWM6uBQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@shikijs/types": "3.2.1" + } + }, + "node_modules/@shikijs/types": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/@shikijs/types/-/types-3.2.1.tgz", + "integrity": "sha512-/NTWAk4KE2M8uac0RhOsIhYQf4pdU0OywQuYDGIGAJ6Mjunxl2cGiuLkvu4HLCMn+OTTLRWkjZITp+aYJv60yA==", + "dev": true, + "license": "MIT", + "dependencies": { + "@shikijs/vscode-textmate": "^10.0.2", + "@types/hast": "^3.0.4" + } + }, + "node_modules/@shikijs/vscode-textmate": { + "version": "10.0.2", + "resolved": "https://registry.npmjs.org/@shikijs/vscode-textmate/-/vscode-textmate-10.0.2.tgz", + "integrity": "sha512-83yeghZ2xxin3Nj8z1NMd/NCuca+gsYXswywDy5bHvwlWL8tpTQmzGeUuHd9FC3E/SBEMvzJRwWEOz5gGes9Qg==", + "dev": true, + "license": "MIT" + }, + "node_modules/@stylistic/eslint-plugin-ts": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/@stylistic/eslint-plugin-ts/-/eslint-plugin-ts-4.2.0.tgz", + "integrity": "sha512-j2o2GvOx9v66x8hmp/HJ+0T+nOppiO5ycGsCkifh7JPGgjxEhpkGmIGx3RWsoxpWbad3VCX8e8/T8n3+7ze1Zg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/utils": "^8.23.0", + "eslint-visitor-keys": "^4.2.0", + "espree": "^10.3.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "peerDependencies": { - "eslint": ">=8.40.0" + "eslint": ">=9.0.0" } }, - "node_modules/@stylistic/eslint-plugin-js/node_modules/eslint-visitor-keys": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.0.0.tgz", - "integrity": "sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw==", + "node_modules/@stylistic/eslint-plugin-ts/node_modules/eslint-visitor-keys": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", + "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", "dev": true, "license": "Apache-2.0", "engines": { @@ -2004,22 +2520,15 @@ "url": "https://opencollective.com/eslint" } }, - "node_modules/@stylistic/eslint-plugin-ts": { - "version": "2.6.0-beta.0", - "resolved": "https://registry.npmjs.org/@stylistic/eslint-plugin-ts/-/eslint-plugin-ts-2.6.0-beta.0.tgz", - "integrity": "sha512-WMz1zgmMC3bvg1L/tiYt5ygvDbTDKlbezoHoX2lV9MnUCAEQZUP4xJ9Wj3jmIKxb4mUuK5+vFZJVcOygvbbqow==", + "node_modules/@tybys/wasm-util": { + "version": "0.9.0", + "resolved": "https://registry.npmjs.org/@tybys/wasm-util/-/wasm-util-0.9.0.tgz", + "integrity": "sha512-6+7nlbMVX/PVDCwaIQ8nTOPveOcFLSt8GcXdx8hD0bt39uWxYT88uXzqTd4fTvqta7oeUJqudepapKNt2DYJFw==", "dev": true, "license": "MIT", + "optional": true, "dependencies": { - "@stylistic/eslint-plugin-js": "2.6.0-beta.0", - "@types/eslint": "^8.56.10", - "@typescript-eslint/utils": "^8.0.0-alpha.34" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "peerDependencies": { - "eslint": ">=8.40.0" + "tslib": "^2.4.0" } }, "node_modules/@types/cookie": { @@ -2029,21 +2538,17 @@ "dev": true, "license": "MIT" }, - "node_modules/@types/eslint": { - "version": "8.56.11", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.11.tgz", - "integrity": "sha512-sVBpJMf7UPo/wGecYOpk2aQya2VUGeHhe38WG7/mN5FufNSubf5VT9Uh9Uyp8/eLJpu1/tuhJ/qTo4mhSB4V4Q==", + "node_modules/@types/doctrine": { + "version": "0.0.9", + "resolved": "https://registry.npmjs.org/@types/doctrine/-/doctrine-0.0.9.tgz", + "integrity": "sha512-eOIHzCUSH7SMfonMG1LsC2f8vxBFtho6NGBznK41R84YzPuvSBzrhEps33IsQiOW9+VL6NQ9DbjQJznk/S4uRA==", "dev": true, - "license": "MIT", - "dependencies": { - "@types/estree": "*", - "@types/json-schema": "*" - } + "license": "MIT" }, "node_modules/@types/estree": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", - "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.7.tgz", + "integrity": "sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==", "dev": true, "license": "MIT" }, @@ -2052,6 +2557,7 @@ "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": "*" } @@ -2075,16 +2581,6 @@ "dev": true, "license": "MIT" }, - "node_modules/@types/mute-stream": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/@types/mute-stream/-/mute-stream-0.0.4.tgz", - "integrity": "sha512-CPM9nzrCPPJHQNA9keH9CVkVI+WR5kMa+7XEs5jcGQ0VoAGnLv242w8lIVgwAEfmE4oufJRaTc9PNLQl0ioAow==", - "dev": true, - "license": "MIT", - "dependencies": { - "@types/node": "*" - } - }, "node_modules/@types/node": { "version": "20.14.11", "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.11.tgz", @@ -2109,34 +2605,28 @@ "license": "MIT" }, "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 - }, - "node_modules/@types/wrap-ansi": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@types/wrap-ansi/-/wrap-ansi-3.0.0.tgz", - "integrity": "sha512-ltIpx+kM7g/MLRZfkbL7EsCEjfzCcScLpkg37eXEtx5kmrAKBkTJwd1GIAjDSL8wTpM6Hzn5YO4pSb91BEwu1g==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz", + "integrity": "sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==", "dev": true, "license": "MIT" }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.0.0-alpha.58", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.0.0-alpha.58.tgz", - "integrity": "sha512-5G9oIj8jvosj8RTa0VDFXvRmUg1U6FxXJu7ZEfyJYMvFkdMJoY5YnzFvgAvHbYsXOj+YgXZu81fNOTRWQzwk5A==", + "version": "8.29.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.29.0.tgz", + "integrity": "sha512-PAIpk/U7NIS6H7TEtN45SPGLQaHNgB7wSjsQV/8+KYokAb2T/gloOA/Bee2yd4/yKVhPKe5LlaUGhAZk5zmSaQ==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "8.0.0-alpha.58", - "@typescript-eslint/type-utils": "8.0.0-alpha.58", - "@typescript-eslint/utils": "8.0.0-alpha.58", - "@typescript-eslint/visitor-keys": "8.0.0-alpha.58", + "@typescript-eslint/scope-manager": "8.29.0", + "@typescript-eslint/type-utils": "8.29.0", + "@typescript-eslint/utils": "8.29.0", + "@typescript-eslint/visitor-keys": "8.29.0", "graphemer": "^1.4.0", "ignore": "^5.3.1", "natural-compare": "^1.4.0", - "ts-api-utils": "^1.3.0" + "ts-api-utils": "^2.0.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -2147,25 +2637,21 @@ }, "peerDependencies": { "@typescript-eslint/parser": "^8.0.0 || ^8.0.0-alpha.0", - "eslint": "^8.57.0 || ^9.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.9.0" } }, "node_modules/@typescript-eslint/parser": { - "version": "8.0.0-alpha.58", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.0.0-alpha.58.tgz", - "integrity": "sha512-/RpgxIejBui6WXJgV9ukwzxmvbZt5TlfHUGGLB/BsNLj+NRZEbXVtWT9rKuxVOqsGb1Dn9c5gxvBI/XzyuIsMQ==", + "version": "8.29.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.29.0.tgz", + "integrity": "sha512-8C0+jlNJOwQso2GapCVWWfW/rzaq7Lbme+vGUFKE31djwNncIpgXD7Cd4weEsDdkoZDjH0lwwr3QDQFuyrMg9g==", "dev": true, - "license": "BSD-2-Clause", + "license": "MIT", "dependencies": { - "@typescript-eslint/scope-manager": "8.0.0-alpha.58", - "@typescript-eslint/types": "8.0.0-alpha.58", - "@typescript-eslint/typescript-estree": "8.0.0-alpha.58", - "@typescript-eslint/visitor-keys": "8.0.0-alpha.58", + "@typescript-eslint/scope-manager": "8.29.0", + "@typescript-eslint/types": "8.29.0", + "@typescript-eslint/typescript-estree": "8.29.0", + "@typescript-eslint/visitor-keys": "8.29.0", "debug": "^4.3.4" }, "engines": { @@ -2176,23 +2662,19 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.9.0" } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "8.0.0-alpha.58", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.0.0-alpha.58.tgz", - "integrity": "sha512-bGgJXn8B3Pf3mzEOUQTPxEqhux54MOJSqw4HcgBReuP7dudz/hsN4TH9GqHbMXkFv8N4Ed1iqVRfgGeC8b1mGw==", + "version": "8.29.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.29.0.tgz", + "integrity": "sha512-aO1PVsq7Gm+tcghabUpzEnVSFMCU4/nYIgC2GOatJcllvWfnhrgW0ZEbnTxm36QsikmCN1K/6ZgM7fok2I7xNw==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.0.0-alpha.58", - "@typescript-eslint/visitor-keys": "8.0.0-alpha.58" + "@typescript-eslint/types": "8.29.0", + "@typescript-eslint/visitor-keys": "8.29.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -2203,16 +2685,16 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "8.0.0-alpha.58", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.0.0-alpha.58.tgz", - "integrity": "sha512-spW/I/UAY6HM0lKj+/333Zb9arOvUoi8+H0cVNYHELPhOti9re9NjyyJFhck84PNiwi8WmpkEf3GXe7/h+Cquw==", + "version": "8.29.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.29.0.tgz", + "integrity": "sha512-ahaWQ42JAOx+NKEf5++WC/ua17q5l+j1GFrbbpVKzFL/tKVc0aYY8rVSYUpUvt2hUP1YBr7mwXzx+E/DfUWI9Q==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/typescript-estree": "8.0.0-alpha.58", - "@typescript-eslint/utils": "8.0.0-alpha.58", + "@typescript-eslint/typescript-estree": "8.29.0", + "@typescript-eslint/utils": "8.29.0", "debug": "^4.3.4", - "ts-api-utils": "^1.3.0" + "ts-api-utils": "^2.0.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -2221,16 +2703,15 @@ "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.9.0" } }, "node_modules/@typescript-eslint/types": { - "version": "8.0.0-alpha.58", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.0.0-alpha.58.tgz", - "integrity": "sha512-6+jM4y31a6pwKeV3MVQuVXPZl6d3I1ySMvP5WjZdZ+n57uovMvasZ3ZJstXngoRpa7JtkjVZ7NrMhQ1J8dxKCQ==", + "version": "8.29.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.29.0.tgz", + "integrity": "sha512-wcJL/+cOXV+RE3gjCyl/V2G877+2faqvlgtso/ZRbTCnZazh0gXhe+7gbAnfubzN2bNsBtZjDvlh7ero8uIbzg==", "dev": true, "license": "MIT", "engines": { @@ -2242,45 +2723,20 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.0.0-alpha.58", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.0.0-alpha.58.tgz", - "integrity": "sha512-hm4nsoJnQcA7axMopUJrH7CD0MJhAMtE2zQt65uMFCy+U2YDdKPwE0g6qEAUBoKn6UBLQJWthJgUmwDbWrnwZg==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "@typescript-eslint/types": "8.0.0-alpha.58", - "@typescript-eslint/visitor-keys": "8.0.0-alpha.58", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "minimatch": "^9.0.4", - "semver": "^7.6.0", - "ts-api-utils": "^1.3.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/utils": { - "version": "8.0.0-alpha.58", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.0.0-alpha.58.tgz", - "integrity": "sha512-lZuGnpK23jr3huebgY4/qqrOKsWJ8dX0Q1Fo4oVYcyAy+sK6p+6nObK4VEPJG098gUmrriiavRiDKIhPDFm4Ig==", + "version": "8.29.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.29.0.tgz", + "integrity": "sha512-yOfen3jE9ISZR/hHpU/bmNvTtBW1NjRbkSFdZOksL1N+ybPEE7UVGMwqvS6CP022Rp00Sb0tdiIkhSCe6NI8ow==", "dev": true, "license": "MIT", "dependencies": { - "@eslint-community/eslint-utils": "^4.4.0", - "@typescript-eslint/scope-manager": "8.0.0-alpha.58", - "@typescript-eslint/types": "8.0.0-alpha.58", - "@typescript-eslint/typescript-estree": "8.0.0-alpha.58" + "@typescript-eslint/types": "8.29.0", + "@typescript-eslint/visitor-keys": "8.29.0", + "debug": "^4.3.4", + "fast-glob": "^3.3.2", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^2.0.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -2290,18 +2746,42 @@ "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0" + "typescript": ">=4.8.4 <5.9.0" } }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.0.0-alpha.58", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.0.0-alpha.58.tgz", - "integrity": "sha512-V//E9PRY2216kh9fN/ihRvTtjpobAXEtmrsr3utlVUwHa2iklcofq1J12yl3KOjx9QBRfBrtfQnYaeruF7L0Fw==", + "node_modules/@typescript-eslint/utils": { + "version": "8.29.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.29.0.tgz", + "integrity": "sha512-gX/A0Mz9Bskm8avSWFcK0gP7cZpbY4AIo6B0hWYFCaIsz750oaiWR4Jr2CI+PQhfW1CpcQr9OlfPS+kMFegjXA==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.0.0-alpha.58", - "eslint-visitor-keys": "^3.4.3" + "@eslint-community/eslint-utils": "^4.4.0", + "@typescript-eslint/scope-manager": "8.29.0", + "@typescript-eslint/types": "8.29.0", + "@typescript-eslint/typescript-estree": "8.29.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.9.0" + } + }, + "node_modules/@typescript-eslint/visitor-keys": { + "version": "8.29.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.29.0.tgz", + "integrity": "sha512-Sne/pVz8ryR03NFK21VpN88dZ2FdQXOlq3VIklbrTYEt8yXtRFr9tvUhqvCeKjqYk5FSim37sHbooT6vzBTZcg==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/types": "8.29.0", + "eslint-visitor-keys": "^4.2.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -2311,15 +2791,241 @@ "url": "https://opencollective.com/typescript-eslint" } }, + "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", + "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/@unrs/resolver-binding-darwin-arm64": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-arm64/-/resolver-binding-darwin-arm64-1.3.3.tgz", + "integrity": "sha512-EpRILdWr3/xDa/7MoyfO7JuBIJqpBMphtu4+80BK1bRfFcniVT74h3Z7q1+WOc92FuIAYatB1vn9TJR67sORGw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@unrs/resolver-binding-darwin-x64": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-darwin-x64/-/resolver-binding-darwin-x64-1.3.3.tgz", + "integrity": "sha512-ntj/g7lPyqwinMJWZ+DKHBse8HhVxswGTmNgFKJtdgGub3M3zp5BSZ3bvMP+kBT6dnYJLSVlDqdwOq1P8i0+/g==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@unrs/resolver-binding-freebsd-x64": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-freebsd-x64/-/resolver-binding-freebsd-x64-1.3.3.tgz", + "integrity": "sha512-l6BT8f2CU821EW7U8hSUK8XPq4bmyTlt9Mn4ERrfjJNoCw0/JoHAh9amZZtV3cwC3bwwIat+GUnrcHTG9+qixw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ] + }, + "node_modules/@unrs/resolver-binding-linux-arm-gnueabihf": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-gnueabihf/-/resolver-binding-linux-arm-gnueabihf-1.3.3.tgz", + "integrity": "sha512-8ScEc5a4y7oE2BonRvzJ+2GSkBaYWyh0/Ko4Q25e/ix6ANpJNhwEPZvCR6GVRmsQAYMIfQvYLdM6YEN+qRjnAQ==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-arm-musleabihf": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm-musleabihf/-/resolver-binding-linux-arm-musleabihf-1.3.3.tgz", + "integrity": "sha512-8qQ6l1VTzLNd3xb2IEXISOKwMGXDCzY/UNy/7SovFW2Sp0K3YbL7Ao7R18v6SQkLqQlhhqSBIFRk+u6+qu5R5A==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-arm64-gnu": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-gnu/-/resolver-binding-linux-arm64-gnu-1.3.3.tgz", + "integrity": "sha512-v81R2wjqcWXJlQY23byqYHt9221h4anQ6wwN64oMD/WAE+FmxPHFZee5bhRkNVtzqO/q7wki33VFWlhiADwUeQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-arm64-musl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-arm64-musl/-/resolver-binding-linux-arm64-musl-1.3.3.tgz", + "integrity": "sha512-cAOx/j0u5coMg4oct/BwMzvWJdVciVauUvsd+GQB/1FZYKQZmqPy0EjJzJGbVzFc6gbnfEcSqvQE6gvbGf2N8Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-ppc64-gnu": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-ppc64-gnu/-/resolver-binding-linux-ppc64-gnu-1.3.3.tgz", + "integrity": "sha512-mq2blqwErgDJD4gtFDlTX/HZ7lNP8YCHYFij2gkXPtMzrXxPW1hOtxL6xg4NWxvnj4bppppb0W3s/buvM55yfg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-s390x-gnu": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-s390x-gnu/-/resolver-binding-linux-s390x-gnu-1.3.3.tgz", + "integrity": "sha512-u0VRzfFYysarYHnztj2k2xr+eu9rmgoTUUgCCIT37Nr+j0A05Xk2c3RY8Mh5+DhCl2aYibihnaAEJHeR0UOFIQ==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-x64-gnu": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-gnu/-/resolver-binding-linux-x64-gnu-1.3.3.tgz", + "integrity": "sha512-OrVo5ZsG29kBF0Ug95a2KidS16PqAMmQNozM6InbquOfW/udouk063e25JVLqIBhHLB2WyBnixOQ19tmeC/hIg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-linux-x64-musl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-linux-x64-musl/-/resolver-binding-linux-x64-musl-1.3.3.tgz", + "integrity": "sha512-PYnmrwZ4HMp9SkrOhqPghY/aoL+Rtd4CQbr93GlrRTjK6kDzfMfgz3UH3jt6elrQAfupa1qyr1uXzeVmoEAxUA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@unrs/resolver-binding-wasm32-wasi": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-wasm32-wasi/-/resolver-binding-wasm32-wasi-1.3.3.tgz", + "integrity": "sha512-81AnQY6fShmktQw4hWDUIilsKSdvr/acdJ5azAreu2IWNlaJOKphJSsUVWE+yCk6kBMoQyG9ZHCb/krb5K0PEA==", + "cpu": [ + "wasm32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "@napi-rs/wasm-runtime": "^0.2.7" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@unrs/resolver-binding-win32-arm64-msvc": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-arm64-msvc/-/resolver-binding-win32-arm64-msvc-1.3.3.tgz", + "integrity": "sha512-X/42BMNw7cW6xrB9syuP5RusRnWGoq+IqvJO8IDpp/BZg64J1uuIW6qA/1Cl13Y4LyLXbJVYbYNSKwR/FiHEng==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@unrs/resolver-binding-win32-ia32-msvc": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-ia32-msvc/-/resolver-binding-win32-ia32-msvc-1.3.3.tgz", + "integrity": "sha512-EGNnNGQxMU5aTN7js3ETYvuw882zcO+dsVjs+DwO2j/fRVKth87C8e2GzxW1L3+iWAXMyJhvFBKRavk9Og1Z6A==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@unrs/resolver-binding-win32-x64-msvc": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@unrs/resolver-binding-win32-x64-msvc/-/resolver-binding-win32-x64-msvc-1.3.3.tgz", + "integrity": "sha512-GraLbYqOJcmW1qY3osB+2YIiD62nVf2/bVLHZmrb4t/YSUwE03l7TwcDJl08T/Tm3SVhepX8RQkpzWbag/Sb4w==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] + }, "node_modules/@vitest/coverage-istanbul": { - "version": "2.1.9", - "resolved": "https://registry.npmjs.org/@vitest/coverage-istanbul/-/coverage-istanbul-2.1.9.tgz", - "integrity": "sha512-vdYE4FkC/y2lxcN3Dcj54Bw+ericmDwiex0B8LV5F/YNYEYP1mgVwhPnHwWGAXu38qizkjOuyczKbFTALfzFKw==", + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/@vitest/coverage-istanbul/-/coverage-istanbul-3.0.9.tgz", + "integrity": "sha512-/TXh2qmOhclmVPjOnPTpIO4Xr6l2P5EwyXQygenwq4/ZQ/vPsrz+GCRZF9kBeQi6xrGcHv368Si9PGImWQawVg==", "dev": true, "license": "MIT", "dependencies": { "@istanbuljs/schema": "^0.1.3", - "debug": "^4.3.7", + "debug": "^4.4.0", "istanbul-lib-coverage": "^3.2.2", "istanbul-lib-instrument": "^6.0.3", "istanbul-lib-report": "^3.0.1", @@ -2327,48 +3033,48 @@ "istanbul-reports": "^3.1.7", "magicast": "^0.3.5", "test-exclude": "^7.0.1", - "tinyrainbow": "^1.2.0" + "tinyrainbow": "^2.0.0" }, "funding": { "url": "https://opencollective.com/vitest" }, "peerDependencies": { - "vitest": "2.1.9" + "vitest": "3.0.9" } }, "node_modules/@vitest/expect": { - "version": "2.1.9", - "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-2.1.9.tgz", - "integrity": "sha512-UJCIkTBenHeKT1TTlKMJWy1laZewsRIzYighyYiJKZreqtdxSos/S1t+ktRMQWu2CKqaarrkeszJx1cgC5tGZw==", + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-3.0.9.tgz", + "integrity": "sha512-5eCqRItYgIML7NNVgJj6TVCmdzE7ZVgJhruW0ziSQV4V7PvLkDL1bBkBdcTs/VuIz0IxPb5da1IDSqc1TR9eig==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/spy": "2.1.9", - "@vitest/utils": "2.1.9", - "chai": "^5.1.2", - "tinyrainbow": "^1.2.0" + "@vitest/spy": "3.0.9", + "@vitest/utils": "3.0.9", + "chai": "^5.2.0", + "tinyrainbow": "^2.0.0" }, "funding": { "url": "https://opencollective.com/vitest" } }, "node_modules/@vitest/mocker": { - "version": "2.1.9", - "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-2.1.9.tgz", - "integrity": "sha512-tVL6uJgoUdi6icpxmdrn5YNo3g3Dxv+IHJBr0GXHaEdTcw3F+cPKnsXFhli6nO+f/6SDKPHEK1UN+k+TQv0Ehg==", + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/@vitest/mocker/-/mocker-3.0.9.tgz", + "integrity": "sha512-ryERPIBOnvevAkTq+L1lD+DTFBRcjueL9lOUfXsLfwP92h4e+Heb+PjiqS3/OURWPtywfafK0kj++yDFjWUmrA==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/spy": "2.1.9", + "@vitest/spy": "3.0.9", "estree-walker": "^3.0.3", - "magic-string": "^0.30.12" + "magic-string": "^0.30.17" }, "funding": { "url": "https://opencollective.com/vitest" }, "peerDependencies": { "msw": "^2.4.9", - "vite": "^5.0.0" + "vite": "^5.0.0 || ^6.0.0" }, "peerDependenciesMeta": { "msw": { @@ -2380,51 +3086,51 @@ } }, "node_modules/@vitest/pretty-format": { - "version": "2.1.9", - "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-2.1.9.tgz", - "integrity": "sha512-KhRIdGV2U9HOUzxfiHmY8IFHTdqtOhIzCpd8WRdJiE7D/HUcZVD0EgQCVjm+Q9gkUXWgBvMmTtZgIG48wq7sOQ==", + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-3.0.9.tgz", + "integrity": "sha512-OW9F8t2J3AwFEwENg3yMyKWweF7oRJlMyHOMIhO5F3n0+cgQAJZBjNgrF8dLwFTEXl5jUqBLXd9QyyKv8zEcmA==", "dev": true, "license": "MIT", "dependencies": { - "tinyrainbow": "^1.2.0" + "tinyrainbow": "^2.0.0" }, "funding": { "url": "https://opencollective.com/vitest" } }, "node_modules/@vitest/runner": { - "version": "2.1.9", - "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-2.1.9.tgz", - "integrity": "sha512-ZXSSqTFIrzduD63btIfEyOmNcBmQvgOVsPNPe0jYtESiXkhd8u2erDLnMxmGrDCwHCCHE7hxwRDCT3pt0esT4g==", + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-3.0.9.tgz", + "integrity": "sha512-NX9oUXgF9HPfJSwl8tUZCMP1oGx2+Sf+ru6d05QjzQz4OwWg0psEzwY6VexP2tTHWdOkhKHUIZH+fS6nA7jfOw==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/utils": "2.1.9", - "pathe": "^1.1.2" + "@vitest/utils": "3.0.9", + "pathe": "^2.0.3" }, "funding": { "url": "https://opencollective.com/vitest" } }, "node_modules/@vitest/snapshot": { - "version": "2.1.9", - "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-2.1.9.tgz", - "integrity": "sha512-oBO82rEjsxLNJincVhLhaxxZdEtV0EFHMK5Kmx5sJ6H9L183dHECjiefOAdnqpIgT5eZwT04PoggUnW88vOBNQ==", + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-3.0.9.tgz", + "integrity": "sha512-AiLUiuZ0FuA+/8i19mTYd+re5jqjEc2jZbgJ2up0VY0Ddyyxg/uUtBDpIFAy4uzKaQxOW8gMgBdAJJ2ydhu39A==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/pretty-format": "2.1.9", - "magic-string": "^0.30.12", - "pathe": "^1.1.2" + "@vitest/pretty-format": "3.0.9", + "magic-string": "^0.30.17", + "pathe": "^2.0.3" }, "funding": { "url": "https://opencollective.com/vitest" } }, "node_modules/@vitest/spy": { - "version": "2.1.9", - "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-2.1.9.tgz", - "integrity": "sha512-E1B35FwzXXTs9FHNK6bDszs7mtydNi5MIfUWpceJ8Xbfb1gBMscAnwLbEu+B44ed6W3XjL9/ehLPHR1fkf1KLQ==", + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-3.0.9.tgz", + "integrity": "sha512-/CcK2UDl0aQ2wtkp3YVWldrpLRNCfVcIOFGlVGKO4R5eajsH393Z1yiXLVQ7vWsj26JOEjeZI0x5sm5P4OGUNQ==", "dev": true, "license": "MIT", "dependencies": { @@ -2435,15 +3141,15 @@ } }, "node_modules/@vitest/utils": { - "version": "2.1.9", - "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-2.1.9.tgz", - "integrity": "sha512-v0psaMSkNJ3A2NMrUEHFRzJtDPFn+/VWZ5WxImB21T9fjucJRmS7xCS3ppEnARb9y11OAzaD+P2Ps+b+BGX5iQ==", + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-3.0.9.tgz", + "integrity": "sha512-ilHM5fHhZ89MCp5aAaM9uhfl1c2JdxVxl3McqsdVyVNN6JffnEen8UMCdRTzOhGXNQGo5GNL9QugHrz727Wnng==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/pretty-format": "2.1.9", - "loupe": "^3.1.2", - "tinyrainbow": "^1.2.0" + "@vitest/pretty-format": "3.0.9", + "loupe": "^3.1.3", + "tinyrainbow": "^2.0.0" }, "funding": { "url": "https://opencollective.com/vitest" @@ -2504,14 +3210,11 @@ } }, "node_modules/agent-base": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.1.tgz", - "integrity": "sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==", + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-7.1.3.tgz", + "integrity": "sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==", "dev": true, "license": "MIT", - "dependencies": { - "debug": "^4.3.4" - }, "engines": { "node": ">= 14" } @@ -2579,16 +3282,6 @@ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "license": "Python-2.0" }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/assertion-error": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-2.0.1.tgz", @@ -2604,15 +3297,7 @@ "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", "dev": true, - "dependencies": { - "possible-typed-array-names": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } + "license": "MIT" }, "node_modules/balanced-match": { "version": "1.0.2", @@ -2688,16 +3373,44 @@ } }, "node_modules/call-bind": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", - "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", + "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", "license": "MIT", "dependencies": { + "call-bind-apply-helpers": "^1.0.0", "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", "get-intrinsic": "^1.2.4", - "set-function-length": "^1.2.1" + "set-function-length": "^1.2.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/call-bind-apply-helpers": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.2.tgz", + "integrity": "sha512-Sp1ablJ0ivDkSzjcaJdxEunN5/XvksFJ2sMBFfq6x0ryhQV/2b/KwFe21cMpmHtPOSij8K99/wSfoEuTObmuMQ==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/call-bound": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.4.tgz", + "integrity": "sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "get-intrinsic": "^1.3.0" }, "engines": { "node": ">= 0.4" @@ -2738,9 +3451,9 @@ "license": "CC-BY-4.0" }, "node_modules/chai": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/chai/-/chai-5.1.2.tgz", - "integrity": "sha512-aGtmf24DW6MLHHG5gCx4zaI3uBq3KRtxeVs0DjFH6Z0rDNbsvTxFASFvdj79pxjxZ8/5u3PIiN3IwEIQkiiuPw==", + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/chai/-/chai-5.2.0.tgz", + "integrity": "sha512-mCuXncKXk5iCLhfhwTc0izo0gtEmpz5CtG2y8GiOINBlMVS6v8TMRc5TaLWKS6692m9+dVVfzgeVxR5UxWHTYw==", "dev": true, "license": "MIT", "dependencies": { @@ -2893,6 +3606,12 @@ "node": ">=18" } }, + "node_modules/compare-versions": { + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/compare-versions/-/compare-versions-6.1.1.tgz", + "integrity": "sha512-4hm4VPpIecmlg59CHXnRDnqGplJFrbLG4aFEl5vl6cK1u76ws3LLvX7ikFnTDl5vo39sjWD6AaDPYodJp/NNHg==", + "license": "MIT" + }, "node_modules/concat-map": { "version": "0.0.1", "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", @@ -2908,9 +3627,9 @@ "license": "MIT" }, "node_modules/cookie": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", - "integrity": "sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==", + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.7.2.tgz", + "integrity": "sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==", "dev": true, "license": "MIT", "engines": { @@ -2932,9 +3651,9 @@ } }, "node_modules/cross-spawn": { - "version": "7.0.3", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", - "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", "dev": true, "license": "MIT", "dependencies": { @@ -2960,23 +3679,28 @@ "license": "MIT" }, "node_modules/cssstyle": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-4.0.1.tgz", - "integrity": "sha512-8ZYiJ3A/3OkDd093CBT/0UKDWry7ak4BdPTFP2+QEP7cmhouyq/Up709ASSj2cK02BbZiMgk7kYjZNS4QP5qrQ==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/cssstyle/-/cssstyle-4.3.0.tgz", + "integrity": "sha512-6r0NiY0xizYqfBvWp1G7WXJ06/bZyrk7Dc6PHql82C/pKGUTKu4yAX4Y8JPamb1ob9nBKuxWzCGTRuGwU3yxJQ==", "dev": true, "license": "MIT", "dependencies": { - "rrweb-cssom": "^0.6.0" + "@asamuzakjp/css-color": "^3.1.1", + "rrweb-cssom": "^0.8.0" }, "engines": { "node": ">=18" } }, - "node_modules/cssstyle/node_modules/rrweb-cssom": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.6.0.tgz", - "integrity": "sha512-APM0Gt1KoXBz0iIkkdB/kfvGOwC4UuJFeG/c+yV7wSc7q96cG/kJ0HiYCnzivD9SB53cLV1MlHFNfOuPaadYSw==", - "dev": true + "node_modules/dagre": { + "version": "0.8.5", + "resolved": "https://registry.npmjs.org/dagre/-/dagre-0.8.5.tgz", + "integrity": "sha512-/aTqmnRta7x7MCCpExk7HQL2O4owCT2h8NT//9I1OQ9vt29Pa0BzSAkR5lwFUcQ7491yVi/3CXU9jQ5o0Mn2Sw==", + "license": "MIT", + "dependencies": { + "graphlib": "^2.1.8", + "lodash": "^4.17.15" + } }, "node_modules/data-urls": { "version": "5.0.0", @@ -3103,19 +3827,6 @@ "node": "^18.17||>=20" } }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "license": "MIT", - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/doctrine": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", @@ -3129,6 +3840,20 @@ "node": ">=6.0.0" } }, + "node_modules/dunder-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/eastasianwidth": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", @@ -3177,13 +3902,10 @@ } }, "node_modules/es-define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", - "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", "license": "MIT", - "dependencies": { - "get-intrinsic": "^1.2.4" - }, "engines": { "node": ">= 0.4" } @@ -3204,10 +3926,38 @@ "dev": true, "license": "MIT" }, + "node_modules/es-object-atoms": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/es-object-atoms/-/es-object-atoms-1.1.1.tgz", + "integrity": "sha512-FGgH2h8zKNim9ljj7dankFPcICIK9Cp5bm+c2gQSYePhpaG5+esrLODihIorn+Pe6FGJzWhXQotPv73jTaldXA==", + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-set-tostringtag": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.1.0.tgz", + "integrity": "sha512-j6vWzfrGVfyXxge+O0x5sh6cvxAog0a/4Rdd2K36zCMV5eJ+/+tOAngRO8cODMNWbVRdVlmGZQL2YS3yR8bIUA==", + "dev": true, + "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/esbuild": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", - "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", + "version": "0.25.2", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.25.2.tgz", + "integrity": "sha512-16854zccKPnC+toMywC+uKNeYSv+/eXkevRAfwRD/G9Cleq66m8XFIrigkbvauLLlCfDL45Q2cWegSg53gGBnQ==", "dev": true, "hasInstallScript": true, "license": "MIT", @@ -3215,32 +3965,34 @@ "esbuild": "bin/esbuild" }, "engines": { - "node": ">=12" + "node": ">=18" }, "optionalDependencies": { - "@esbuild/aix-ppc64": "0.21.5", - "@esbuild/android-arm": "0.21.5", - "@esbuild/android-arm64": "0.21.5", - "@esbuild/android-x64": "0.21.5", - "@esbuild/darwin-arm64": "0.21.5", - "@esbuild/darwin-x64": "0.21.5", - "@esbuild/freebsd-arm64": "0.21.5", - "@esbuild/freebsd-x64": "0.21.5", - "@esbuild/linux-arm": "0.21.5", - "@esbuild/linux-arm64": "0.21.5", - "@esbuild/linux-ia32": "0.21.5", - "@esbuild/linux-loong64": "0.21.5", - "@esbuild/linux-mips64el": "0.21.5", - "@esbuild/linux-ppc64": "0.21.5", - "@esbuild/linux-riscv64": "0.21.5", - "@esbuild/linux-s390x": "0.21.5", - "@esbuild/linux-x64": "0.21.5", - "@esbuild/netbsd-x64": "0.21.5", - "@esbuild/openbsd-x64": "0.21.5", - "@esbuild/sunos-x64": "0.21.5", - "@esbuild/win32-arm64": "0.21.5", - "@esbuild/win32-ia32": "0.21.5", - "@esbuild/win32-x64": "0.21.5" + "@esbuild/aix-ppc64": "0.25.2", + "@esbuild/android-arm": "0.25.2", + "@esbuild/android-arm64": "0.25.2", + "@esbuild/android-x64": "0.25.2", + "@esbuild/darwin-arm64": "0.25.2", + "@esbuild/darwin-x64": "0.25.2", + "@esbuild/freebsd-arm64": "0.25.2", + "@esbuild/freebsd-x64": "0.25.2", + "@esbuild/linux-arm": "0.25.2", + "@esbuild/linux-arm64": "0.25.2", + "@esbuild/linux-ia32": "0.25.2", + "@esbuild/linux-loong64": "0.25.2", + "@esbuild/linux-mips64el": "0.25.2", + "@esbuild/linux-ppc64": "0.25.2", + "@esbuild/linux-riscv64": "0.25.2", + "@esbuild/linux-s390x": "0.25.2", + "@esbuild/linux-x64": "0.25.2", + "@esbuild/netbsd-arm64": "0.25.2", + "@esbuild/netbsd-x64": "0.25.2", + "@esbuild/openbsd-arm64": "0.25.2", + "@esbuild/openbsd-x64": "0.25.2", + "@esbuild/sunos-x64": "0.25.2", + "@esbuild/win32-arm64": "0.25.2", + "@esbuild/win32-ia32": "0.25.2", + "@esbuild/win32-x64": "0.25.2" } }, "node_modules/escalade": { @@ -3267,28 +4019,33 @@ } }, "node_modules/eslint": { - "version": "9.7.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.7.0.tgz", - "integrity": "sha512-FzJ9D/0nGiCGBf8UXO/IGLTgLVzIxze1zpfA8Ton2mjLovXdAPlYDv+MQDcqj3TmrhAGYfOpz9RfR+ent0AgAw==", + "version": "9.23.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.23.0.tgz", + "integrity": "sha512-jV7AbNoFPAY1EkFYpLq5bslU9NLNO8xnEeQXwErNibVryjk67wHVmddTBilc5srIttJDBrB0eMHKZBFbSIABCw==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.11.0", - "@eslint/config-array": "^0.17.0", - "@eslint/eslintrc": "^3.1.0", - "@eslint/js": "9.7.0", + "@eslint-community/regexpp": "^4.12.1", + "@eslint/config-array": "^0.19.2", + "@eslint/config-helpers": "^0.2.0", + "@eslint/core": "^0.12.0", + "@eslint/eslintrc": "^3.3.1", + "@eslint/js": "9.23.0", + "@eslint/plugin-kit": "^0.2.7", + "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", - "@humanwhocodes/retry": "^0.3.0", - "@nodelib/fs.walk": "^1.2.8", + "@humanwhocodes/retry": "^0.4.2", + "@types/estree": "^1.0.6", + "@types/json-schema": "^7.0.15", "ajv": "^6.12.4", "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", + "cross-spawn": "^7.0.6", "debug": "^4.3.2", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^8.0.2", - "eslint-visitor-keys": "^4.0.0", - "espree": "^10.1.0", + "eslint-scope": "^8.3.0", + "eslint-visitor-keys": "^4.2.0", + "espree": "^10.3.0", "esquery": "^1.5.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", @@ -3298,15 +4055,11 @@ "ignore": "^5.2.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", "lodash.merge": "^4.6.2", "minimatch": "^3.1.2", "natural-compare": "^1.4.0", - "optionator": "^0.9.3", - "strip-ansi": "^6.0.1", - "text-table": "^0.2.0" + "optionator": "^0.9.3" }, "bin": { "eslint": "bin/eslint.js" @@ -3315,7 +4068,15 @@ "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { - "url": "https://opencollective.com/eslint" + "url": "https://eslint.org/donate" + }, + "peerDependencies": { + "jiti": "*" + }, + "peerDependenciesMeta": { + "jiti": { + "optional": true + } } }, "node_modules/eslint-import-resolver-node": { @@ -3341,22 +4102,25 @@ } }, "node_modules/eslint-plugin-import-x": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-import-x/-/eslint-plugin-import-x-4.2.1.tgz", - "integrity": "sha512-WWi2GedccIJa0zXxx3WDnTgouGQTtdYK1nhXMwywbqqAgB0Ov+p1pYBsWh3VaB0bvBOwLse6OfVII7jZD9xo5Q==", + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-import-x/-/eslint-plugin-import-x-4.10.0.tgz", + "integrity": "sha512-5ej+0WILhX3D6wkcdsyYmPp10SUIK6fmuZ6KS8nf9MD8CJ6/S/3Dl7m21g+MLeaTMsvcEXo3JunNAbgHwXxs/g==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/utils": "^8.1.0", - "debug": "^4.3.4", + "@pkgr/core": "^0.2.0", + "@types/doctrine": "^0.0.9", + "@typescript-eslint/utils": "^8.28.0", + "debug": "^4.4.0", "doctrine": "^3.0.0", "eslint-import-resolver-node": "^0.3.9", - "get-tsconfig": "^4.7.3", + "get-tsconfig": "^4.10.0", "is-glob": "^4.0.3", - "minimatch": "^9.0.3", - "semver": "^7.6.3", - "stable-hash": "^0.0.4", - "tslib": "^2.6.3" + "minimatch": "^9.0.3 || ^10.0.1", + "semver": "^7.7.1", + "stable-hash": "^0.0.5", + "tslib": "^2.8.1", + "unrs-resolver": "^1.3.3" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -3365,112 +4129,10 @@ "eslint": "^8.57.0 || ^9.0.0" } }, - "node_modules/eslint-plugin-import-x/node_modules/@typescript-eslint/scope-manager": { - "version": "8.5.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.5.0.tgz", - "integrity": "sha512-06JOQ9Qgj33yvBEx6tpC8ecP9o860rsR22hWMEd12WcTRrfaFgHr2RB/CA/B+7BMhHkXT4chg2MyboGdFGawYg==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "8.5.0", - "@typescript-eslint/visitor-keys": "8.5.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/eslint-plugin-import-x/node_modules/@typescript-eslint/types": { - "version": "8.5.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.5.0.tgz", - "integrity": "sha512-qjkormnQS5wF9pjSi6q60bKUHH44j2APxfh9TQRXK8wbYVeDYYdYJGIROL87LGZZ2gz3Rbmjc736qyL8deVtdw==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/eslint-plugin-import-x/node_modules/@typescript-eslint/typescript-estree": { - "version": "8.5.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.5.0.tgz", - "integrity": "sha512-vEG2Sf9P8BPQ+d0pxdfndw3xIXaoSjliG0/Ejk7UggByZPKXmJmw3GW5jV2gHNQNawBUyfahoSiCFVov0Ruf7Q==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "@typescript-eslint/types": "8.5.0", - "@typescript-eslint/visitor-keys": "8.5.0", - "debug": "^4.3.4", - "fast-glob": "^3.3.2", - "is-glob": "^4.0.3", - "minimatch": "^9.0.4", - "semver": "^7.6.0", - "ts-api-utils": "^1.3.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/eslint-plugin-import-x/node_modules/@typescript-eslint/utils": { - "version": "8.5.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.5.0.tgz", - "integrity": "sha512-6yyGYVL0e+VzGYp60wvkBHiqDWOpT63pdMV2CVG4LVDd5uR6q1qQN/7LafBZtAtNIn/mqXjsSeS5ggv/P0iECw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/eslint-utils": "^4.4.0", - "@typescript-eslint/scope-manager": "8.5.0", - "@typescript-eslint/types": "8.5.0", - "@typescript-eslint/typescript-estree": "8.5.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0" - } - }, - "node_modules/eslint-plugin-import-x/node_modules/@typescript-eslint/visitor-keys": { - "version": "8.5.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.5.0.tgz", - "integrity": "sha512-yTPqMnbAZJNy2Xq2XU8AdtOW9tJIr+UQb64aXB9f3B1498Zx9JorVgFJcZpEc9UBuCCrdzKID2RGAMkYcDtZOw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "8.5.0", - "eslint-visitor-keys": "^3.4.3" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, "node_modules/eslint-scope": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.0.2.tgz", - "integrity": "sha512-6E4xmrTw5wtxnLA5wYL3WDfhZ/1bUBGOXV0zQvVRDOtrR8D0p6W7fs3JweNYhwRYeGvd/1CKX2se0/2s7Q/nJA==", + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.3.0.tgz", + "integrity": "sha512-pUNxi75F8MJ/GdeKtVLSbYg4ZI34J6C0C7sbL4YOp2exGwen7ZsuBqKzUhXd0qMQ362yET3z+uPwKeg/0C2XCQ==", "dev": true, "license": "BSD-2-Clause", "dependencies": { @@ -3526,9 +4188,9 @@ } }, "node_modules/eslint/node_modules/eslint-visitor-keys": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.0.0.tgz", - "integrity": "sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", + "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", "dev": true, "license": "Apache-2.0", "engines": { @@ -3558,15 +4220,15 @@ } }, "node_modules/espree": { - "version": "10.1.0", - "resolved": "https://registry.npmjs.org/espree/-/espree-10.1.0.tgz", - "integrity": "sha512-M1M6CpiE6ffoigIOWYO9UDP8TMUw9kqb21tf+08IgDYjCsOvCuDt4jQcZmoYxx+w7zlKw9/N0KXfto+I8/FrXA==", + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.3.0.tgz", + "integrity": "sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==", "dev": true, "license": "BSD-2-Clause", "dependencies": { - "acorn": "^8.12.0", + "acorn": "^8.14.0", "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^4.0.0" + "eslint-visitor-keys": "^4.2.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -3575,10 +4237,23 @@ "url": "https://opencollective.com/eslint" } }, + "node_modules/espree/node_modules/acorn": { + "version": "8.14.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.1.tgz", + "integrity": "sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==", + "dev": true, + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/espree/node_modules/eslint-visitor-keys": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.0.0.tgz", - "integrity": "sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", + "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", "dev": true, "license": "Apache-2.0", "engines": { @@ -3650,6 +4325,15 @@ "integrity": "sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==", "license": "MIT" }, + "node_modules/events": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/events/-/events-3.3.0.tgz", + "integrity": "sha512-mQw+2fkQbALzQ7V0MY0IqdnXNOeTtP4r0lN9z7AAawCXgqea7bDii20AYrIBrFd/Hx0M2Ocz6S111CaFkUcb0Q==", + "license": "MIT", + "engines": { + "node": ">=0.8.x" + } + }, "node_modules/expect-type": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/expect-type/-/expect-type-1.1.0.tgz", @@ -3683,9 +4367,9 @@ "license": "MIT" }, "node_modules/fast-glob": { - "version": "3.3.2", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", - "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "version": "3.3.3", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.3.tgz", + "integrity": "sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==", "dev": true, "license": "MIT", "dependencies": { @@ -3693,7 +4377,7 @@ "@nodelib/fs.walk": "^1.2.3", "glob-parent": "^5.1.2", "merge2": "^1.3.0", - "micromatch": "^4.0.4" + "micromatch": "^4.0.8" }, "engines": { "node": ">=8.6.0" @@ -3733,9 +4417,9 @@ "dev": true }, "node_modules/fastq": { - "version": "1.17.1", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", - "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", + "version": "1.19.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.19.1.tgz", + "integrity": "sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==", "dev": true, "license": "ISC", "dependencies": { @@ -3824,14 +4508,15 @@ } }, "node_modules/form-data": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", - "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.2.tgz", + "integrity": "sha512-hGfm/slu0ZabnNt4oaRZ6uREyfCj6P4fT/n6A1rGV+Z0VdGXjfOhVUpkn6qVQONHGIFwmveGXyDs75+nr6FM8w==", "dev": true, "license": "MIT", "dependencies": { "asynckit": "^0.4.0", "combined-stream": "^1.0.8", + "es-set-tostringtag": "^2.1.0", "mime-types": "^2.1.12" }, "engines": { @@ -3844,6 +4529,7 @@ "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", "dev": true, "hasInstallScript": true, + "license": "MIT", "optional": true, "os": [ "darwin" @@ -3882,16 +4568,21 @@ } }, "node_modules/get-intrinsic": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", - "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.3.0.tgz", + "integrity": "sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==", "license": "MIT", "dependencies": { + "call-bind-apply-helpers": "^1.0.2", + "es-define-property": "^1.0.1", "es-errors": "^1.3.0", + "es-object-atoms": "^1.1.1", "function-bind": "^1.1.2", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "hasown": "^2.0.0" + "get-proto": "^1.0.1", + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.1.0" }, "engines": { "node": ">= 0.4" @@ -3900,10 +4591,23 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/get-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/get-proto/-/get-proto-1.0.1.tgz", + "integrity": "sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==", + "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.1", + "es-object-atoms": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/get-tsconfig": { - "version": "4.8.0", - "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.8.0.tgz", - "integrity": "sha512-Pgba6TExTZ0FJAn1qkJAjIeKoDJ3CsI2ChuLohJnZl/tTU8MVrq3b+2t5UOPfRa4RMsorClBjJALkJUMjG1PAw==", + "version": "4.10.0", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.10.0.tgz", + "integrity": "sha512-kGzZ3LWWQcGIAmg6iWvXn0ei6WDtV26wzHRMwDSzmAbcXrTEXxHy6IehI6/4eT6VRKyMP1eF1VqwrVUmE/LR7A==", "dev": true, "license": "MIT", "dependencies": { @@ -3955,27 +4659,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, - "license": "MIT", - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/globrex": { "version": "0.1.2", "resolved": "https://registry.npmjs.org/globrex/-/globrex-0.1.2.tgz", @@ -3984,12 +4667,12 @@ "license": "MIT" }, "node_modules/gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", "license": "MIT", - "dependencies": { - "get-intrinsic": "^1.1.3" + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -4009,6 +4692,35 @@ "dev": true, "license": "MIT" }, + "node_modules/graphlib": { + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/graphlib/-/graphlib-2.1.8.tgz", + "integrity": "sha512-jcLLfkpoVGmH7/InMC/1hIvOPSUh38oJtGhvrOFGzioE1DZ+0YW16RgmOJhHiuWTvGiJQ9Z1Ik43JvkRPRvE+A==", + "license": "MIT", + "dependencies": { + "lodash": "^4.17.15" + } + }, + "node_modules/graphology": { + "version": "0.25.4", + "resolved": "https://registry.npmjs.org/graphology/-/graphology-0.25.4.tgz", + "integrity": "sha512-33g0Ol9nkWdD6ulw687viS8YJQBxqG5LWII6FI6nul0pq6iM2t5EKquOTFDbyTblRB3O9I+7KX4xI8u5ffekAQ==", + "license": "MIT", + "dependencies": { + "events": "^3.3.0", + "obliterator": "^2.0.2" + }, + "peerDependencies": { + "graphology-types": ">=0.24.0" + } + }, + "node_modules/graphology-types": { + "version": "0.24.8", + "resolved": "https://registry.npmjs.org/graphology-types/-/graphology-types-0.24.8.tgz", + "integrity": "sha512-hDRKYXa8TsoZHjgEaysSRyPdT6uB78Ci8WnjgbStlQysz7xR52PInxNsmnB7IBOM1BhikxkNyCVEFgmPKnpx3Q==", + "license": "MIT", + "peer": true + }, "node_modules/graphql": { "version": "16.9.0", "resolved": "https://registry.npmjs.org/graphql/-/graphql-16.9.0.tgz", @@ -4040,10 +4752,10 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/has-proto": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", - "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", + "node_modules/has-symbols": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", "license": "MIT", "engines": { "node": ">= 0.4" @@ -4052,11 +4764,15 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "node_modules/has-tostringtag": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.2.tgz", + "integrity": "sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==", + "dev": true, "license": "MIT", + "dependencies": { + "has-symbols": "^1.0.3" + }, "engines": { "node": ">= 0.4" }, @@ -4118,13 +4834,13 @@ } }, "node_modules/https-proxy-agent": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.5.tgz", - "integrity": "sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-7.0.6.tgz", + "integrity": "sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==", "dev": true, "license": "MIT", "dependencies": { - "agent-base": "^7.0.2", + "agent-base": "^7.1.2", "debug": "4" }, "engines": { @@ -4132,9 +4848,9 @@ } }, "node_modules/i18next": { - "version": "23.12.2", - "resolved": "https://registry.npmjs.org/i18next/-/i18next-23.12.2.tgz", - "integrity": "sha512-XIeh5V+bi8SJSWGL3jqbTEBW5oD6rbP5L+E7dVQh1MNTxxYef0x15rhJVcRb7oiuq4jLtgy2SD8eFlf6P2cmqg==", + "version": "24.2.3", + "resolved": "https://registry.npmjs.org/i18next/-/i18next-24.2.3.tgz", + "integrity": "sha512-lfbf80OzkocvX7nmZtu7nSTNbrTYR52sLWxPtlXX1zAhVw8WEnFk4puUkCR4B1dNQwbSpEHHHemcZu//7EcB7A==", "funding": [ { "type": "individual", @@ -4151,22 +4867,30 @@ ], "license": "MIT", "dependencies": { - "@babel/runtime": "^7.23.2" + "@babel/runtime": "^7.26.10" + }, + "peerDependencies": { + "typescript": "^5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, "node_modules/i18next-browser-languagedetector": { - "version": "7.2.1", - "resolved": "https://registry.npmjs.org/i18next-browser-languagedetector/-/i18next-browser-languagedetector-7.2.1.tgz", - "integrity": "sha512-h/pM34bcH6tbz8WgGXcmWauNpQupCGr25XPp9cZwZInR9XHSjIFDYp1SIok7zSPsTOMxdvuLyu86V+g2Kycnfw==", + "version": "8.0.4", + "resolved": "https://registry.npmjs.org/i18next-browser-languagedetector/-/i18next-browser-languagedetector-8.0.4.tgz", + "integrity": "sha512-f3frU3pIxD50/Tz20zx9TD9HobKYg47fmAETb117GKGPrhwcSSPJDoCposXlVycVebQ9GQohC3Efbpq7/nnJ5w==", "license": "MIT", "dependencies": { "@babel/runtime": "^7.23.2" } }, "node_modules/i18next-http-backend": { - "version": "2.6.1", - "resolved": "https://registry.npmjs.org/i18next-http-backend/-/i18next-http-backend-2.6.1.tgz", - "integrity": "sha512-rCilMAnlEQNeKOZY1+x8wLM5IpYOj10guGvEpeC59tNjj6MMreLIjIW8D1RclhD3ifLwn6d/Y9HEM1RUE6DSog==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/i18next-http-backend/-/i18next-http-backend-3.0.2.tgz", + "integrity": "sha512-PdlvPnvIp4E1sYi46Ik4tBYh/v/NbYfFFgTjkwFl0is8A18s7/bx9aXqsrOax9WUbeNS6mD2oix7Z0yGGf6m5g==", "license": "MIT", "dependencies": { "cross-fetch": "4.0.0" @@ -4210,9 +4934,9 @@ "integrity": "sha512-XXOFtyqDjNDAQxVfYxuF7g9Il/IbWmmlQg2MYKOH8ExIT1qg6xc4zyS3HaEEATgs1btfzxq15ciUiY7gjSXRGQ==" }, "node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz", + "integrity": "sha512-TR3KfrTZTYLPB6jUjfx6MF9WcWrHL9su5TObK4ZkYgBdWKPOFoSoQIdEuTuR82pmtxH2spWG9h6etwfr1pLBqQ==", "dev": true, "license": "MIT", "dependencies": { @@ -4252,23 +4976,30 @@ } }, "node_modules/inquirer": { - "version": "11.0.2", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-11.0.2.tgz", - "integrity": "sha512-pnbn3nL+JFrTw/pLhzyE/IQ3+gA3n5JxTAZQDjB6qu4gbjOaiTnpZbxT6HY2DDCT7bzDjTTsd3snRP+B6N//Pg==", + "version": "12.5.0", + "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-12.5.0.tgz", + "integrity": "sha512-aiBBq5aKF1k87MTxXDylLfwpRwToShiHrSv4EmB07EYyLgmnjEz5B3rn0aGw1X3JA/64Ngf2T54oGwc+BCsPIQ==", "dev": true, "license": "MIT", "dependencies": { - "@inquirer/core": "^9.2.1", - "@inquirer/prompts": "^6.0.1", - "@inquirer/type": "^2.0.0", - "@types/mute-stream": "^0.0.4", + "@inquirer/core": "^10.1.9", + "@inquirer/prompts": "^7.4.0", + "@inquirer/type": "^3.0.5", "ansi-escapes": "^4.3.2", - "mute-stream": "^1.0.0", + "mute-stream": "^2.0.0", "run-async": "^3.0.0", - "rxjs": "^7.8.1" + "rxjs": "^7.8.2" }, "engines": { "node": ">=18" + }, + "peerDependencies": { + "@types/node": ">=18" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + } } }, "node_modules/interpret": { @@ -4376,16 +5107,6 @@ "node": ">=0.12.0" } }, - "node_modules/is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/is-potential-custom-element-name": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/is-potential-custom-element-name/-/is-potential-custom-element-name-1.0.1.tgz", @@ -4524,39 +5245,39 @@ } }, "node_modules/jsdom": { - "version": "24.1.0", - "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-24.1.0.tgz", - "integrity": "sha512-6gpM7pRXCwIOKxX47cgOyvyQDN/Eh0f1MeKySBV2xGdKtqJBLj8P25eY3EVCWo2mglDDzozR2r2MW4T+JiNUZA==", + "version": "26.0.0", + "resolved": "https://registry.npmjs.org/jsdom/-/jsdom-26.0.0.tgz", + "integrity": "sha512-BZYDGVAIriBWTpIxYzrXjv3E/4u8+/pSG5bQdIYCbNCGOvsPkDQfTVLAIXAf9ETdCpduCVTkDe2NNZ8NIwUVzw==", "dev": true, "license": "MIT", "dependencies": { - "cssstyle": "^4.0.1", + "cssstyle": "^4.2.1", "data-urls": "^5.0.0", "decimal.js": "^10.4.3", - "form-data": "^4.0.0", + "form-data": "^4.0.1", "html-encoding-sniffer": "^4.0.0", "http-proxy-agent": "^7.0.2", - "https-proxy-agent": "^7.0.4", + "https-proxy-agent": "^7.0.6", "is-potential-custom-element-name": "^1.0.1", - "nwsapi": "^2.2.10", - "parse5": "^7.1.2", - "rrweb-cssom": "^0.7.0", + "nwsapi": "^2.2.16", + "parse5": "^7.2.1", + "rrweb-cssom": "^0.8.0", "saxes": "^6.0.0", "symbol-tree": "^3.2.4", - "tough-cookie": "^4.1.4", + "tough-cookie": "^5.0.0", "w3c-xmlserializer": "^5.0.0", "webidl-conversions": "^7.0.0", "whatwg-encoding": "^3.1.1", "whatwg-mimetype": "^4.0.0", - "whatwg-url": "^14.0.0", - "ws": "^8.17.0", + "whatwg-url": "^14.1.0", + "ws": "^8.18.0", "xml-name-validator": "^5.0.0" }, "engines": { "node": ">=18" }, "peerDependencies": { - "canvas": "^2.11.2" + "canvas": "^3.0.0" }, "peerDependenciesMeta": { "canvas": { @@ -4564,6 +5285,19 @@ } } }, + "node_modules/jsdom/node_modules/tough-cookie": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-5.1.2.tgz", + "integrity": "sha512-FVDYdxtnj0G6Qm/DhNPSb8Ju59ULcup3tuJxkFb5K8Bv2pUXILbf0xZWU8PX8Ov19OXljbUyveOFwRMwkXzO+A==", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "tldts": "^6.1.32" + }, + "engines": { + "node": ">=16" + } + }, "node_modules/jsesc": { "version": "2.5.2", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", @@ -4591,12 +5325,13 @@ "dev": true }, "node_modules/json-stable-stringify": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.1.1.tgz", - "integrity": "sha512-SU/971Kt5qVQfJpyDveVhQ/vya+5hvrjClFOcr8c0Fq5aODJjMwutrOfCU+eCnVD5gpx1Q3fEqkyom77zH1iIg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.2.1.tgz", + "integrity": "sha512-Lp6HbbBgosLmJbjx0pBLbgvx68FaFU1sdkmBuckmhhJ88kL13OA51CDtR2yJB50eCNMH9wRqtQNNiAqQH4YXnA==", "license": "MIT", "dependencies": { - "call-bind": "^1.0.5", + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", "isarray": "^2.0.5", "jsonify": "^0.0.1", "object-keys": "^1.1.1" @@ -4669,9 +5404,9 @@ } }, "node_modules/lefthook": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/lefthook/-/lefthook-1.7.4.tgz", - "integrity": "sha512-lVv3nKH9l3KMDS3bySROvWJSw1+AsBHUO7xaA0rg1IEBZrj3+ePmM+a8elX+GU3Go1OzsZEYjo5AOOeLoZ7FQg==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/lefthook/-/lefthook-1.11.6.tgz", + "integrity": "sha512-j0VmMM50WlPDassmgvapRum9po29Tv1BXzBNFpzGkk9E91CEG9jKik/OHyH/r/na+q8qNIUUyPL6QQuTN/UhQQ==", "dev": true, "hasInstallScript": true, "license": "MIT", @@ -4679,20 +5414,22 @@ "lefthook": "bin/index.js" }, "optionalDependencies": { - "lefthook-darwin-arm64": "1.7.4", - "lefthook-darwin-x64": "1.7.4", - "lefthook-freebsd-arm64": "1.7.4", - "lefthook-freebsd-x64": "1.7.4", - "lefthook-linux-arm64": "1.7.4", - "lefthook-linux-x64": "1.7.4", - "lefthook-windows-arm64": "1.7.4", - "lefthook-windows-x64": "1.7.4" + "lefthook-darwin-arm64": "1.11.6", + "lefthook-darwin-x64": "1.11.6", + "lefthook-freebsd-arm64": "1.11.6", + "lefthook-freebsd-x64": "1.11.6", + "lefthook-linux-arm64": "1.11.6", + "lefthook-linux-x64": "1.11.6", + "lefthook-openbsd-arm64": "1.11.6", + "lefthook-openbsd-x64": "1.11.6", + "lefthook-windows-arm64": "1.11.6", + "lefthook-windows-x64": "1.11.6" } }, "node_modules/lefthook-darwin-arm64": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/lefthook-darwin-arm64/-/lefthook-darwin-arm64-1.7.4.tgz", - "integrity": "sha512-6XpenaP0W7ZYA3lhHey/C1U+KmYz6eCq2cGswQsrTX+xdtHdWW3NbbOKngxATRTF8+CtF6m9UB2afP7qqkCghQ==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/lefthook-darwin-arm64/-/lefthook-darwin-arm64-1.11.6.tgz", + "integrity": "sha512-gWgdWrKgZgX+bKc6Vs/x7JkO+58lLOpRzpteLx//82D0MKVPlNZwjd4zz4AbIBXtM4Hcj+6gSsOzQ7QDXxjVvQ==", "cpu": [ "arm64" ], @@ -4704,9 +5441,9 @@ ] }, "node_modules/lefthook-darwin-x64": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/lefthook-darwin-x64/-/lefthook-darwin-x64-1.7.4.tgz", - "integrity": "sha512-lpQXbPMHiaWE7+9fV+spjuMKiZ3J/+oI6hY1/l48MO3LmSpIv6DNy0VHho1fZVQnHdBU4bDh5c1G0r1f5T0irg==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/lefthook-darwin-x64/-/lefthook-darwin-x64-1.11.6.tgz", + "integrity": "sha512-Ia0TjTKuYcSaDTuoCnbWtpPZ2VEoKzgn33OB90VjNaSVs4ooE0PIdpO+w00x1elqIaf1pbrpq6HgeB26Du8KbQ==", "cpu": [ "x64" ], @@ -4718,9 +5455,9 @@ ] }, "node_modules/lefthook-freebsd-arm64": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/lefthook-freebsd-arm64/-/lefthook-freebsd-arm64-1.7.4.tgz", - "integrity": "sha512-wv+JZgkD1/wi4X5aKKNodvxNcFcYmvL7uyzKkbtd/LgX5ssh9r5pO9J/71ULGtEuTXH4kqORRtez7u/ygqMEew==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/lefthook-freebsd-arm64/-/lefthook-freebsd-arm64-1.11.6.tgz", + "integrity": "sha512-PxIwj+hmjLahyzEmcIfalIBDhgklAQCavwM4sGCgbzDi4/+VQX+4aEs4pQqtd7v3aohmjtO/4n2emzTI8donww==", "cpu": [ "arm64" ], @@ -4732,9 +5469,9 @@ ] }, "node_modules/lefthook-freebsd-x64": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/lefthook-freebsd-x64/-/lefthook-freebsd-x64-1.7.4.tgz", - "integrity": "sha512-xoYR0Ay8pbyY9W9mI+iI9VDkkCVYSXhMf9XyOChSlu2XmjKiqi23hjCXvSOpvHQ7jphGvAVpE3Byijr6Xjuihw==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/lefthook-freebsd-x64/-/lefthook-freebsd-x64-1.11.6.tgz", + "integrity": "sha512-3o1lMKxz1VtWaP/o117wgUn3ZOpefMoSf+8LuiTzI3/PDprIuzgyw2nXKlBZAMDpNPHMNnJeQNts9XLMRmkldg==", "cpu": [ "x64" ], @@ -4746,9 +5483,9 @@ ] }, "node_modules/lefthook-linux-arm64": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/lefthook-linux-arm64/-/lefthook-linux-arm64-1.7.4.tgz", - "integrity": "sha512-WvXWzSM/e08n2f5lcC8j+pUMS0RzZftJK4zuBQ36TstSYXfBjWiw+FMnKCVZk6Q8Zc0icyF8sTmKQAyKCgX+UA==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/lefthook-linux-arm64/-/lefthook-linux-arm64-1.11.6.tgz", + "integrity": "sha512-nKPFZ5cA9f5tVn0ybDVqcXXlpTHZqo05N4KQRhWTj5Nem+JoD2YzJIlvZhdJhUrldERqj6deDMXChH5T3z4Rrw==", "cpu": [ "arm64" ], @@ -4760,9 +5497,9 @@ ] }, "node_modules/lefthook-linux-x64": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/lefthook-linux-x64/-/lefthook-linux-x64-1.7.4.tgz", - "integrity": "sha512-eR5NxGzqPJm3wDTm4HStwGxOZ8Omb0ooodyuQdEOxtYidLrd4U18N14huwCEFd3BAOrjIWYV8plH+ReTZE56eg==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/lefthook-linux-x64/-/lefthook-linux-x64-1.11.6.tgz", + "integrity": "sha512-naN8dllLCOEeP+wznLnq+oXrs1dvt/iMLkcl+pOPWLqFccPfDiHzr8V8GslaTa+rSFsAnvjR7SJIOi5C29xedA==", "cpu": [ "x64" ], @@ -4773,10 +5510,38 @@ "linux" ] }, + "node_modules/lefthook-openbsd-arm64": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/lefthook-openbsd-arm64/-/lefthook-openbsd-arm64-1.11.6.tgz", + "integrity": "sha512-dPxhJfYQ667T+U3pz1+O3mTRNHzXH/BvPlXSH+oy8uiSry4AtVNRXkVvXPUcpLlrAy6HuFYodsrpCIlWFeYwiQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ] + }, + "node_modules/lefthook-openbsd-x64": { + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/lefthook-openbsd-x64/-/lefthook-openbsd-x64-1.11.6.tgz", + "integrity": "sha512-9D26kcSsjiW4D0AuVDdi+0ZqrsOzRWOpMS/kcUbLfrU99yCvma0rMTqKbbDMkVur/znS7qL53oGahXCXDNA+IQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ] + }, "node_modules/lefthook-windows-arm64": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/lefthook-windows-arm64/-/lefthook-windows-arm64-1.7.4.tgz", - "integrity": "sha512-C+MdHH+0ylermetMHwfHsYYNI5HI6QEOx7N4Iw4Ea6c3Yuj3eG3LsAzrhsup7KLSSBmDgIHOCJUx/Mfh2z+ATw==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/lefthook-windows-arm64/-/lefthook-windows-arm64-1.11.6.tgz", + "integrity": "sha512-xdCenr4+BFnfBEhiXj6GJp02EPmcwTAGa7NYm6hVTfDwGXw24tuLv7lpnGjgK3kovN6EukgLH1FYkeyDOBEMnA==", "cpu": [ "arm64" ], @@ -4788,9 +5553,9 @@ ] }, "node_modules/lefthook-windows-x64": { - "version": "1.7.4", - "resolved": "https://registry.npmjs.org/lefthook-windows-x64/-/lefthook-windows-x64-1.7.4.tgz", - "integrity": "sha512-BDQhiRzmMYPFQFtVtkRfUfeZuSlemG1oJfGKYXlCGFskvK9Jm1nGFnG0Ig63FAQaFdW33DFoLdr9ZKFTUQeSwQ==", + "version": "1.11.6", + "resolved": "https://registry.npmjs.org/lefthook-windows-x64/-/lefthook-windows-x64-1.11.6.tgz", + "integrity": "sha512-Fg2GzLhzeDV/GX8+ydrI0wBOytQWpPkNdngx+a8B/feCDbwjAiFklDG5oV4ytuWrtg1JPEEWLJd6nHefj4wtHA==", "cpu": [ "x64" ], @@ -4848,6 +5613,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "license": "MIT" + }, "node_modules/lodash.merge": { "version": "4.6.2", "resolved": "https://registry.npmjs.org/lodash.merge/-/lodash.merge-4.6.2.tgz", @@ -4934,6 +5705,15 @@ "markdown-it": "bin/markdown-it.mjs" } }, + "node_modules/math-intrinsics": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", + "integrity": "sha512-/IXtbwEk5HTPyEwyKX6hGkYXxM9nbj64B+ilVJnC/R6B0pH5G4V3b0pVbL7DBj4tkhBAppbQUlf6F6Xl9LHu1g==", + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, "node_modules/mdurl": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/mdurl/-/mdurl-2.0.0.tgz", @@ -4967,9 +5747,9 @@ } }, "node_modules/micromatch": { - "version": "4.0.7", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.7.tgz", - "integrity": "sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==", + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", "dev": true, "license": "MIT", "dependencies": { @@ -5083,29 +5863,30 @@ "license": "MIT" }, "node_modules/msw": { - "version": "2.4.9", - "resolved": "https://registry.npmjs.org/msw/-/msw-2.4.9.tgz", - "integrity": "sha512-1m8xccT6ipN4PTqLinPwmzhxQREuxaEJYdx4nIbggxP8aM7r1e71vE7RtOUSQoAm1LydjGfZKy7370XD/tsuYg==", + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/msw/-/msw-2.7.3.tgz", + "integrity": "sha512-+mycXv8l2fEAjFZ5sjrtjJDmm2ceKGjrNbBr1durRg6VkU9fNUE/gsmQ51hWbHqs+l35W1iM+ZsmOD9Fd6lspw==", "dev": true, "hasInstallScript": true, "license": "MIT", "dependencies": { - "@bundled-es-modules/cookie": "^2.0.0", + "@bundled-es-modules/cookie": "^2.0.1", "@bundled-es-modules/statuses": "^1.0.1", "@bundled-es-modules/tough-cookie": "^0.1.6", - "@inquirer/confirm": "^3.0.0", - "@mswjs/interceptors": "^0.35.8", + "@inquirer/confirm": "^5.0.0", + "@mswjs/interceptors": "^0.37.0", + "@open-draft/deferred-promise": "^2.2.0", "@open-draft/until": "^2.1.0", "@types/cookie": "^0.6.0", "@types/statuses": "^2.0.4", - "chalk": "^4.1.2", "graphql": "^16.8.1", "headers-polyfill": "^4.0.2", "is-node-process": "^1.2.0", - "outvariant": "^1.4.2", + "outvariant": "^1.4.3", "path-to-regexp": "^6.3.0", + "picocolors": "^1.1.1", "strict-event-emitter": "^0.5.1", - "type-fest": "^4.9.0", + "type-fest": "^4.26.1", "yargs": "^17.7.2" }, "bin": { @@ -5126,32 +5907,12 @@ } } }, - "node_modules/msw/node_modules/@inquirer/confirm": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/@inquirer/confirm/-/confirm-3.2.0.tgz", - "integrity": "sha512-oOIwPs0Dvq5220Z8lGL/6LHRTEr9TgLHmiI99Rj1PJ1p1czTys+olrgBqZk4E2qC0YTzeHprxSQmoHioVdJ7Lw==", + "node_modules/msw/node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", "dev": true, - "license": "MIT", - "dependencies": { - "@inquirer/core": "^9.1.0", - "@inquirer/type": "^1.5.3" - }, - "engines": { - "node": ">=18" - } - }, - "node_modules/msw/node_modules/@inquirer/type": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/@inquirer/type/-/type-1.5.5.tgz", - "integrity": "sha512-MzICLu4yS7V8AA61sANROZ9vT1H3ooca5dSmI1FjZkzq7o/koMsRfQSzRtFo+F3Ao4Sf1C0bpLKejpKB/+j6MA==", - "dev": true, - "license": "MIT", - "dependencies": { - "mute-stream": "^1.0.0" - }, - "engines": { - "node": ">=18" - } + "license": "ISC" }, "node_modules/msw/node_modules/type-fest": { "version": "4.26.1", @@ -5176,19 +5937,19 @@ } }, "node_modules/mute-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-1.0.0.tgz", - "integrity": "sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-2.0.0.tgz", + "integrity": "sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==", "dev": true, "license": "ISC", "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" + "node": "^18.17.0 || >=20.5.0" } }, "node_modules/nanoid": { - "version": "3.3.7", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", - "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", "dev": true, "funding": [ { @@ -5196,6 +5957,7 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "bin": { "nanoid": "bin/nanoid.cjs" }, @@ -5256,10 +6018,11 @@ "dev": true }, "node_modules/nwsapi": { - "version": "2.2.12", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.12.tgz", - "integrity": "sha512-qXDmcVlZV4XRtKFzddidpfVP4oMSGhga+xdMc25mv8kaLUHtgzCDhUxkrN8exkGdTlLNaXj7CV3GtON7zuGZ+w==", - "dev": true + "version": "2.2.20", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.20.tgz", + "integrity": "sha512-/ieB+mDe4MrrKMT8z+mQL8klXydZWGR5Dowt4RAGKbJ3kIGEx3X4ljUo+6V73IXtUPWgfOlU5B9MlGxFO5T+cA==", + "dev": true, + "license": "MIT" }, "node_modules/object-keys": { "version": "1.1.1", @@ -5270,6 +6033,12 @@ "node": ">= 0.4" } }, + "node_modules/obliterator": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/obliterator/-/obliterator-2.0.5.tgz", + "integrity": "sha512-42CPE9AhahZRsMNslczq0ctAEtqk8Eka26QofnqC346BZdHDySk3LWka23LI7ULIw11NmltpiLagIq8gBozxTw==", + "license": "MIT" + }, "node_modules/optionator": { "version": "0.9.4", "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", @@ -5369,13 +6138,13 @@ } }, "node_modules/parse5": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", - "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.2.1.tgz", + "integrity": "sha512-BuBYQYlv1ckiPdQi/ohiivi9Sagc9JG+Ozs0r7b/0iK3sKmrb0b9FdWdBbOdx6hBCM/F9Ir82ofnBhtZOjCRPQ==", "dev": true, "license": "MIT", "dependencies": { - "entities": "^4.4.0" + "entities": "^4.5.0" }, "funding": { "url": "https://github.com/inikulin/parse5?sponsor=1" @@ -5439,20 +6208,10 @@ "dev": true, "license": "MIT" }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/pathe": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.2.tgz", - "integrity": "sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", + "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", "dev": true, "license": "MIT" }, @@ -5476,11 +6235,14 @@ } }, "node_modules/phaser3-rex-plugins": { - "version": "1.80.5", - "resolved": "https://registry.npmjs.org/phaser3-rex-plugins/-/phaser3-rex-plugins-1.80.5.tgz", - "integrity": "sha512-hdL3Cm6dK72w6phQdGnEiqqntlwT8SvjU0yit7DkdqiPy/Io1g3KnsRFqndtY+Hu69zaMEuckpIVeQK6yVwx4A==", + "version": "1.80.14", + "resolved": "https://registry.npmjs.org/phaser3-rex-plugins/-/phaser3-rex-plugins-1.80.14.tgz", + "integrity": "sha512-eHi3VgryO9umNu6D1yQU5IS6tH4TyC2Y6RgJ495nNp37X2fdYnmYpBfgFg+YaumvtaoOvCkUVyi/YqWNPf2X2A==", + "license": "MIT", "dependencies": { + "dagre": "^0.8.5", "eventemitter3": "^3.1.2", + "graphology": "^0.25.4", "i18next": "^22.5.1", "i18next-http-backend": "^2.5.2", "js-yaml": "^4.1.0", @@ -5518,6 +6280,15 @@ "@babel/runtime": "^7.20.6" } }, + "node_modules/phaser3-rex-plugins/node_modules/i18next-http-backend": { + "version": "2.7.3", + "resolved": "https://registry.npmjs.org/i18next-http-backend/-/i18next-http-backend-2.7.3.tgz", + "integrity": "sha512-FgZxrXdRA5u44xfYsJlEBL4/KH3f2IluBpgV/7riW0YW2VEyM8FzVt2XHAOi6id0Ppj7vZvCZVpp5LrGXnc8Ig==", + "license": "MIT", + "dependencies": { + "cross-fetch": "4.0.0" + } + }, "node_modules/phaser3spectorjs": { "version": "0.0.8", "resolved": "https://registry.npmjs.org/phaser3spectorjs/-/phaser3spectorjs-0.0.8.tgz", @@ -5544,19 +6315,10 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/possible-typed-array-names": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", - "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", - "dev": true, - "engines": { - "node": ">= 0.4" - } - }, "node_modules/postcss": { - "version": "8.4.47", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.47.tgz", - "integrity": "sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ==", + "version": "8.5.3", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.3.tgz", + "integrity": "sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==", "dev": true, "funding": [ { @@ -5572,9 +6334,10 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { - "nanoid": "^3.3.7", - "picocolors": "^1.1.0", + "nanoid": "^3.3.8", + "picocolors": "^1.1.1", "source-map-js": "^1.2.1" }, "engines": { @@ -5582,10 +6345,11 @@ } }, "node_modules/postcss/node_modules/picocolors": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.0.tgz", - "integrity": "sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==", - "dev": true + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true, + "license": "ISC" }, "node_modules/prelude-ls": { "version": "1.2.1", @@ -5666,7 +6430,8 @@ "type": "consulting", "url": "https://feross.org/support" } - ] + ], + "license": "MIT" }, "node_modules/readable-stream": { "version": "2.3.8", @@ -5782,9 +6547,9 @@ } }, "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz", + "integrity": "sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==", "dev": true, "license": "MIT", "engines": { @@ -5793,12 +6558,13 @@ } }, "node_modules/rollup": { - "version": "4.22.4", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.22.4.tgz", - "integrity": "sha512-vD8HJ5raRcWOyymsR6Z3o6+RzfEPCnVLMFJ6vRslO1jt4LO6dUo5Qnpg7y4RkZFM2DMe3WUirkI5c16onjrc6A==", + "version": "4.38.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.38.0.tgz", + "integrity": "sha512-5SsIRtJy9bf1ErAOiFMFzl64Ex9X5V7bnJ+WlFMb+zmP459OSWCEG7b0ERZ+PEU7xPt4OG3RHbrp1LJlXxYTrw==", "dev": true, + "license": "MIT", "dependencies": { - "@types/estree": "1.0.5" + "@types/estree": "1.0.7" }, "bin": { "rollup": "dist/bin/rollup" @@ -5808,30 +6574,35 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.22.4", - "@rollup/rollup-android-arm64": "4.22.4", - "@rollup/rollup-darwin-arm64": "4.22.4", - "@rollup/rollup-darwin-x64": "4.22.4", - "@rollup/rollup-linux-arm-gnueabihf": "4.22.4", - "@rollup/rollup-linux-arm-musleabihf": "4.22.4", - "@rollup/rollup-linux-arm64-gnu": "4.22.4", - "@rollup/rollup-linux-arm64-musl": "4.22.4", - "@rollup/rollup-linux-powerpc64le-gnu": "4.22.4", - "@rollup/rollup-linux-riscv64-gnu": "4.22.4", - "@rollup/rollup-linux-s390x-gnu": "4.22.4", - "@rollup/rollup-linux-x64-gnu": "4.22.4", - "@rollup/rollup-linux-x64-musl": "4.22.4", - "@rollup/rollup-win32-arm64-msvc": "4.22.4", - "@rollup/rollup-win32-ia32-msvc": "4.22.4", - "@rollup/rollup-win32-x64-msvc": "4.22.4", + "@rollup/rollup-android-arm-eabi": "4.38.0", + "@rollup/rollup-android-arm64": "4.38.0", + "@rollup/rollup-darwin-arm64": "4.38.0", + "@rollup/rollup-darwin-x64": "4.38.0", + "@rollup/rollup-freebsd-arm64": "4.38.0", + "@rollup/rollup-freebsd-x64": "4.38.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.38.0", + "@rollup/rollup-linux-arm-musleabihf": "4.38.0", + "@rollup/rollup-linux-arm64-gnu": "4.38.0", + "@rollup/rollup-linux-arm64-musl": "4.38.0", + "@rollup/rollup-linux-loongarch64-gnu": "4.38.0", + "@rollup/rollup-linux-powerpc64le-gnu": "4.38.0", + "@rollup/rollup-linux-riscv64-gnu": "4.38.0", + "@rollup/rollup-linux-riscv64-musl": "4.38.0", + "@rollup/rollup-linux-s390x-gnu": "4.38.0", + "@rollup/rollup-linux-x64-gnu": "4.38.0", + "@rollup/rollup-linux-x64-musl": "4.38.0", + "@rollup/rollup-win32-arm64-msvc": "4.38.0", + "@rollup/rollup-win32-ia32-msvc": "4.38.0", + "@rollup/rollup-win32-x64-msvc": "4.38.0", "fsevents": "~2.3.2" } }, "node_modules/rrweb-cssom": { - "version": "0.7.1", - "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.7.1.tgz", - "integrity": "sha512-TrEMa7JGdVm0UThDJSx7ddw5nVm3UJS9o9CCIZ72B1vSyEZoziDqBYP3XIoi/12lKrJR8rE3jeFHMok2F/Mnsg==", - "dev": true + "version": "0.8.0", + "resolved": "https://registry.npmjs.org/rrweb-cssom/-/rrweb-cssom-0.8.0.tgz", + "integrity": "sha512-guoltQEx+9aMf2gDZ0s62EcV8lsXR+0w8915TC3ITdn2YueuNjdAYh/levpU9nFaoChh9RUS5ZdQMrKfVEN9tw==", + "dev": true, + "license": "MIT" }, "node_modules/run-async": { "version": "3.0.0", @@ -5868,9 +6639,9 @@ } }, "node_modules/rxjs": { - "version": "7.8.1", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", - "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", + "version": "7.8.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", + "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==", "dev": true, "license": "Apache-2.0", "dependencies": { @@ -5913,10 +6684,11 @@ } }, "node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "version": "7.7.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.7.1.tgz", + "integrity": "sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" }, @@ -5969,16 +6741,6 @@ "node": ">=8" } }, - "node_modules/shiki": { - "version": "1.12.0", - "resolved": "https://registry.npmjs.org/shiki/-/shiki-1.12.0.tgz", - "integrity": "sha512-BuAxWOm5JhRcbSOl7XCei8wGjgJJonnV0oipUupPY58iULxUGyHhW5CF+9FRMuM1pcJ5cGEJGll1LusX6FwpPA==", - "dev": true, - "dependencies": { - "@shikijs/core": "1.12.0", - "@types/hast": "^3.0.4" - } - }, "node_modules/siginfo": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", @@ -6006,16 +6768,6 @@ "dev": true, "license": "MIT" }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/source-map-js": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", @@ -6026,9 +6778,9 @@ } }, "node_modules/stable-hash": { - "version": "0.0.4", - "resolved": "https://registry.npmjs.org/stable-hash/-/stable-hash-0.0.4.tgz", - "integrity": "sha512-LjdcbuBeLcdETCrPn9i8AYAZ1eCtu4ECAWtP7UleOiZ9LzVxRzzUZEoZ8zB24nhkQnDWyET0I+3sWokSDS3E7g==", + "version": "0.0.5", + "resolved": "https://registry.npmjs.org/stable-hash/-/stable-hash-0.0.5.tgz", + "integrity": "sha512-+L3ccpzibovGXFK+Ap/f8LOS0ahMrHTf3xu7mMLSpEGU0EO9ucaysSylKo9eRDFNhWve/y275iPmIZ4z39a9iA==", "dev": true, "license": "MIT" }, @@ -6276,13 +7028,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/text-table": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", - "integrity": "sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==", - "dev": true, - "license": "MIT" - }, "node_modules/tinybench": { "version": "2.9.0", "resolved": "https://registry.npmjs.org/tinybench/-/tinybench-2.9.0.tgz", @@ -6308,9 +7053,9 @@ } }, "node_modules/tinyrainbow": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-1.2.0.tgz", - "integrity": "sha512-weEDEq7Z5eTHPDh4xjX789+fHfF+P8boiFB+0vbWzpbnbsEr/GRaohi/uMKxg8RZMXnl1ItAi/IUHWMsjDV7kQ==", + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/tinyrainbow/-/tinyrainbow-2.0.0.tgz", + "integrity": "sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==", "dev": true, "license": "MIT", "engines": { @@ -6327,6 +7072,26 @@ "node": ">=14.0.0" } }, + "node_modules/tldts": { + "version": "6.1.85", + "resolved": "https://registry.npmjs.org/tldts/-/tldts-6.1.85.tgz", + "integrity": "sha512-gBdZ1RjCSevRPFix/hpaUWeak2/RNUZB4/8frF1r5uYMHjFptkiT0JXIebWvgI/0ZHXvxaUDDJshiA0j6GdL3w==", + "dev": true, + "license": "MIT", + "dependencies": { + "tldts-core": "^6.1.85" + }, + "bin": { + "tldts": "bin/cli.js" + } + }, + "node_modules/tldts-core": { + "version": "6.1.85", + "resolved": "https://registry.npmjs.org/tldts-core/-/tldts-core-6.1.85.tgz", + "integrity": "sha512-DTjUVvxckL1fIoPSb3KE7ISNtkWSawZdpfxGxwiIrZoO6EbHVDXXUIlIuWympPaeS+BLGyggozX/HTMsRAdsoA==", + "dev": true, + "license": "MIT" + }, "node_modules/tmp": { "version": "0.0.33", "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.33.tgz", @@ -6370,10 +7135,11 @@ } }, "node_modules/tr46": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-5.0.0.tgz", - "integrity": "sha512-tk2G5R2KRwBd+ZN0zaEXpmzdKyOYksXwywulIX95MBODjSzMIuQnQ3m8JxgbhnL1LeVo7lqQKsYa1O3Htl7K5g==", + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/tr46/-/tr46-5.1.0.tgz", + "integrity": "sha512-IUWnUK7ADYR5Sl1fZlO1INDUhVhatWl7BtJWsIhwJ0UAK7ilzzIa8uIqOO/aYVWHZPJkKbEL+362wrzoeRF7bw==", "dev": true, + "license": "MIT", "dependencies": { "punycode": "^2.3.1" }, @@ -6382,16 +7148,16 @@ } }, "node_modules/ts-api-utils": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz", - "integrity": "sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==", + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-2.1.0.tgz", + "integrity": "sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==", "dev": true, "license": "MIT", "engines": { - "node": ">=16" + "node": ">=18.12" }, "peerDependencies": { - "typescript": ">=4.2.0" + "typescript": ">=4.8.4" } }, "node_modules/tsconfck": { @@ -6446,9 +7212,9 @@ } }, "node_modules/tslib": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", - "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", "dev": true, "license": "0BSD" }, @@ -6479,32 +7245,35 @@ } }, "node_modules/typedoc": { - "version": "0.26.5", - "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.26.5.tgz", - "integrity": "sha512-Vn9YKdjKtDZqSk+by7beZ+xzkkr8T8CYoiasqyt4TTRFy5+UHzL/mF/o4wGBjRF+rlWQHDb0t6xCpA3JNL5phg==", + "version": "0.28.1", + "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.28.1.tgz", + "integrity": "sha512-Mn2VPNMaxoe/hlBiLriG4U55oyAa3Xo+8HbtEwV7F5WEOPXqtxzGuMZhJYHaqFJpajeQ6ZDUC2c990NAtTbdgw==", "dev": true, + "license": "Apache-2.0", "dependencies": { + "@gerrit0/mini-shiki": "^3.2.1", "lunr": "^2.3.9", "markdown-it": "^14.1.0", "minimatch": "^9.0.5", - "shiki": "^1.9.1", - "yaml": "^2.4.5" + "yaml": "^2.7.0 " }, "bin": { "typedoc": "bin/typedoc" }, "engines": { - "node": ">= 18" + "node": ">= 18", + "pnpm": ">= 10" }, "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 || 5.5.x" + "typescript": "5.0.x || 5.1.x || 5.2.x || 5.3.x || 5.4.x || 5.5.x || 5.6.x || 5.7.x || 5.8.x" } }, "node_modules/typescript": { - "version": "5.5.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.4.tgz", - "integrity": "sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==", - "dev": true, + "version": "5.8.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.2.tgz", + "integrity": "sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ==", + "devOptional": true, + "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -6514,15 +7283,15 @@ } }, "node_modules/typescript-eslint": { - "version": "8.0.0-alpha.58", - "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.0.0-alpha.58.tgz", - "integrity": "sha512-0mvrodNhExpkWns+5RaZP8YqsAfPyjmPVVM1p+kaJkvApMH58/VFcQ0iSQuun0bFRNCMvW0ZUdulS9AsHqVXkg==", + "version": "8.29.0", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.29.0.tgz", + "integrity": "sha512-ep9rVd9B4kQsZ7ZnWCVxUE/xDLUUUsRzE0poAeNu+4CkFErLfuvPt/qtm2EpnSyfvsR0S6QzDFSrPCFBwf64fg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/eslint-plugin": "8.0.0-alpha.58", - "@typescript-eslint/parser": "8.0.0-alpha.58", - "@typescript-eslint/utils": "8.0.0-alpha.58" + "@typescript-eslint/eslint-plugin": "8.29.0", + "@typescript-eslint/parser": "8.29.0", + "@typescript-eslint/utils": "8.29.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -6531,10 +7300,9 @@ "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.9.0" } }, "node_modules/uc.micro": { @@ -6560,6 +7328,33 @@ "node": ">= 4.0.0" } }, + "node_modules/unrs-resolver": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/unrs-resolver/-/unrs-resolver-1.3.3.tgz", + "integrity": "sha512-PFLAGQzYlyjniXdbmQ3dnGMZJXX5yrl2YS4DLRfR3BhgUsE1zpRIrccp9XMOGRfIHpdFvCn/nr5N1KMVda4x3A==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/JounQin" + }, + "optionalDependencies": { + "@unrs/resolver-binding-darwin-arm64": "1.3.3", + "@unrs/resolver-binding-darwin-x64": "1.3.3", + "@unrs/resolver-binding-freebsd-x64": "1.3.3", + "@unrs/resolver-binding-linux-arm-gnueabihf": "1.3.3", + "@unrs/resolver-binding-linux-arm-musleabihf": "1.3.3", + "@unrs/resolver-binding-linux-arm64-gnu": "1.3.3", + "@unrs/resolver-binding-linux-arm64-musl": "1.3.3", + "@unrs/resolver-binding-linux-ppc64-gnu": "1.3.3", + "@unrs/resolver-binding-linux-s390x-gnu": "1.3.3", + "@unrs/resolver-binding-linux-x64-gnu": "1.3.3", + "@unrs/resolver-binding-linux-x64-musl": "1.3.3", + "@unrs/resolver-binding-wasm32-wasi": "1.3.3", + "@unrs/resolver-binding-win32-arm64-msvc": "1.3.3", + "@unrs/resolver-binding-win32-ia32-msvc": "1.3.3", + "@unrs/resolver-binding-win32-x64-msvc": "1.3.3" + } + }, "node_modules/update-browserslist-db": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz", @@ -6617,21 +7412,21 @@ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" }, "node_modules/vite": { - "version": "5.4.14", - "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.14.tgz", - "integrity": "sha512-EK5cY7Q1D8JNhSaPKVK4pwBFvaTmZxEnoKXLG/U9gmdDcihQGNzFlgIvaxezFR4glP1LsuiedwMBqCXH3wZccA==", + "version": "6.2.4", + "resolved": "https://registry.npmjs.org/vite/-/vite-6.2.4.tgz", + "integrity": "sha512-veHMSew8CcRzhL5o8ONjy8gkfmFJAd5Ac16oxBUjlwgX3Gq2Wqr+qNC3TjPIpy7TPV/KporLga5GT9HqdrCizw==", "dev": true, "license": "MIT", "dependencies": { - "esbuild": "^0.21.3", - "postcss": "^8.4.43", - "rollup": "^4.20.0" + "esbuild": "^0.25.0", + "postcss": "^8.5.3", + "rollup": "^4.30.1" }, "bin": { "vite": "bin/vite.js" }, "engines": { - "node": "^18.0.0 || >=20.0.0" + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" }, "funding": { "url": "https://github.com/vitejs/vite?sponsor=1" @@ -6640,19 +7435,25 @@ "fsevents": "~2.3.3" }, "peerDependencies": { - "@types/node": "^18.0.0 || >=20.0.0", + "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", + "jiti": ">=1.21.0", "less": "*", "lightningcss": "^1.21.0", "sass": "*", "sass-embedded": "*", "stylus": "*", "sugarss": "*", - "terser": "^5.4.0" + "terser": "^5.16.0", + "tsx": "^4.8.1", + "yaml": "^2.4.2" }, "peerDependenciesMeta": { "@types/node": { "optional": true }, + "jiti": { + "optional": true + }, "less": { "optional": true }, @@ -6673,36 +7474,42 @@ }, "terser": { "optional": true + }, + "tsx": { + "optional": true + }, + "yaml": { + "optional": true } } }, "node_modules/vite-node": { - "version": "2.1.9", - "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-2.1.9.tgz", - "integrity": "sha512-AM9aQ/IPrW/6ENLQg3AGY4K1N2TGZdR5e4gu/MmmR2xR3Ll1+dib+nook92g4TV3PXVyeyxdWwtaCAiUL0hMxA==", + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-3.0.9.tgz", + "integrity": "sha512-w3Gdx7jDcuT9cNn9jExXgOyKmf5UOTb6WMHz8LGAm54eS1Elf5OuBhCxl6zJxGhEeIkgsE1WbHuoL0mj/UXqXg==", "dev": true, "license": "MIT", "dependencies": { "cac": "^6.7.14", - "debug": "^4.3.7", - "es-module-lexer": "^1.5.4", - "pathe": "^1.1.2", - "vite": "^5.0.0" + "debug": "^4.4.0", + "es-module-lexer": "^1.6.0", + "pathe": "^2.0.3", + "vite": "^5.0.0 || ^6.0.0" }, "bin": { "vite-node": "vite-node.mjs" }, "engines": { - "node": "^18.0.0 || >=20.0.0" + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" }, "funding": { "url": "https://opencollective.com/vitest" } }, "node_modules/vite-tsconfig-paths": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/vite-tsconfig-paths/-/vite-tsconfig-paths-4.3.2.tgz", - "integrity": "sha512-0Vd/a6po6Q+86rPlntHye7F31zA2URZMbH8M3saAZ/xR9QoGN/L21bxEGfXdWmFdNkqPpRdxFT7nmNe12e9/uA==", + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/vite-tsconfig-paths/-/vite-tsconfig-paths-5.1.4.tgz", + "integrity": "sha512-cYj0LRuLV2c2sMqhqhGpaO3LretdtMn/BVX4cPLanIZuwwrkVl+lK84E/miEXkCHWXuq65rhNN4rXsBcOB3S4w==", "dev": true, "license": "MIT", "dependencies": { @@ -6720,47 +7527,48 @@ } }, "node_modules/vitest": { - "version": "2.1.9", - "resolved": "https://registry.npmjs.org/vitest/-/vitest-2.1.9.tgz", - "integrity": "sha512-MSmPM9REYqDGBI8439mA4mWhV5sKmDlBKWIYbA3lRb2PTHACE0mgKwA8yQ2xq9vxDTuk4iPrECBAEW2aoFXY0Q==", + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-3.0.9.tgz", + "integrity": "sha512-BbcFDqNyBlfSpATmTtXOAOj71RNKDDvjBM/uPfnxxVGrG+FSH2RQIwgeEngTaTkuU/h0ScFvf+tRcKfYXzBybQ==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/expect": "2.1.9", - "@vitest/mocker": "2.1.9", - "@vitest/pretty-format": "^2.1.9", - "@vitest/runner": "2.1.9", - "@vitest/snapshot": "2.1.9", - "@vitest/spy": "2.1.9", - "@vitest/utils": "2.1.9", - "chai": "^5.1.2", - "debug": "^4.3.7", + "@vitest/expect": "3.0.9", + "@vitest/mocker": "3.0.9", + "@vitest/pretty-format": "^3.0.9", + "@vitest/runner": "3.0.9", + "@vitest/snapshot": "3.0.9", + "@vitest/spy": "3.0.9", + "@vitest/utils": "3.0.9", + "chai": "^5.2.0", + "debug": "^4.4.0", "expect-type": "^1.1.0", - "magic-string": "^0.30.12", - "pathe": "^1.1.2", + "magic-string": "^0.30.17", + "pathe": "^2.0.3", "std-env": "^3.8.0", "tinybench": "^2.9.0", - "tinyexec": "^0.3.1", - "tinypool": "^1.0.1", - "tinyrainbow": "^1.2.0", - "vite": "^5.0.0", - "vite-node": "2.1.9", + "tinyexec": "^0.3.2", + "tinypool": "^1.0.2", + "tinyrainbow": "^2.0.0", + "vite": "^5.0.0 || ^6.0.0", + "vite-node": "3.0.9", "why-is-node-running": "^2.3.0" }, "bin": { "vitest": "vitest.mjs" }, "engines": { - "node": "^18.0.0 || >=20.0.0" + "node": "^18.0.0 || ^20.0.0 || >=22.0.0" }, "funding": { "url": "https://opencollective.com/vitest" }, "peerDependencies": { "@edge-runtime/vm": "*", - "@types/node": "^18.0.0 || >=20.0.0", - "@vitest/browser": "2.1.9", - "@vitest/ui": "2.1.9", + "@types/debug": "^4.1.12", + "@types/node": "^18.0.0 || ^20.0.0 || >=22.0.0", + "@vitest/browser": "3.0.9", + "@vitest/ui": "3.0.9", "happy-dom": "*", "jsdom": "*" }, @@ -6768,6 +7576,9 @@ "@edge-runtime/vm": { "optional": true }, + "@types/debug": { + "optional": true + }, "@types/node": { "optional": true }, @@ -6874,12 +7685,13 @@ } }, "node_modules/whatwg-url": { - "version": "14.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-14.0.0.tgz", - "integrity": "sha512-1lfMEm2IEr7RIV+f4lUNPOqfFL+pO+Xw3fJSqmjX9AbXcXcYOkCe1P6+9VBZB6n94af16NfZf+sSk0JCBZC9aw==", + "version": "14.2.0", + "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-14.2.0.tgz", + "integrity": "sha512-De72GdQZzNTUBBChsXueQUnPKDkg/5A5zp7pFDuQAj5UFoENpiACU0wlCvzpAGnTkj++ihpKwKyYewn/XNUbKw==", "dev": true, + "license": "MIT", "dependencies": { - "tr46": "^5.0.0", + "tr46": "^5.1.0", "webidl-conversions": "^7.0.0" }, "engines": { @@ -7087,10 +7899,11 @@ "license": "ISC" }, "node_modules/yaml": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.5.0.tgz", - "integrity": "sha512-2wWLbGbYDiSqqIKoPjar3MPgB94ErzCtrNE1FdqGuaO0pi2JGjmE8aW8TDZwzU7vuxcGRdL/4gPQwQ7hD5AMSw==", + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.7.1.tgz", + "integrity": "sha512-10ULxpnOCQXxJvBgxsn9ptjq6uviG/htZKk9veJGhlqn3w/DxQ631zFF+nlQXLwmImeS5amR2dl2U8sg6U9jsQ==", "dev": true, + "license": "ISC", "bin": { "yaml": "bin.mjs" }, diff --git a/package.json b/package.json index ce9e8b4a07b..c84e926fc35 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "pokemon-rogue-battle", "private": true, - "version": "1.7.7", + "version": "1.8.4", "type": "module", "scripts": { "start": "vite", @@ -9,10 +9,10 @@ "build": "vite build", "build:beta": "vite build --mode beta", "preview": "vite preview", - "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", + "test": "vitest run", + "test:cov": "vitest run --coverage --no-isolate", + "test:watch": "vitest watch --coverage --no-isolate", + "test:silent": "vitest run --silent --no-isolate", "typecheck": "tsc --noEmit", "eslint": "eslint --fix .", "eslint-ci": "eslint .", @@ -29,41 +29,42 @@ }, "devDependencies": { "@biomejs/biome": "1.9.4", - "@eslint/js": "^9.3.0", - "@hpcc-js/wasm": "^2.18.0", - "@stylistic/eslint-plugin-ts": "^2.6.0-beta.0", + "@eslint/js": "^9.23.0", + "@hpcc-js/wasm": "^2.22.4", + "@stylistic/eslint-plugin-ts": "^4.1.0", "@types/jsdom": "^21.1.7", "@types/node": "^20.12.13", - "@typescript-eslint/eslint-plugin": "^8.0.0-alpha.54", - "@typescript-eslint/parser": "^8.0.0-alpha.54", - "@vitest/coverage-istanbul": "^2.1.9", + "@typescript-eslint/eslint-plugin": "^8.28.0", + "@typescript-eslint/parser": "^8.28.0", + "@vitest/coverage-istanbul": "^3.0.9", "dependency-cruiser": "^16.3.10", - "eslint": "^9.7.0", - "eslint-plugin-import-x": "^4.2.1", - "inquirer": "^11.0.2", - "jsdom": "^24.0.0", - "lefthook": "^1.6.12", - "msw": "^2.4.9", + "eslint": "^9.23.0", + "eslint-plugin-import-x": "^4.9.4", + "inquirer": "^12.4.2", + "jsdom": "^26.0.0", + "lefthook": "^1.11.5", + "msw": "^2.7.3", "phaser3spectorjs": "^0.0.8", - "typedoc": "^0.26.4", - "typescript": "^5.5.3", - "typescript-eslint": "^8.0.0-alpha.54", - "vite": "^5.4.14", - "vite-tsconfig-paths": "^4.3.2", - "vitest": "^2.1.9", + "typedoc": "^0.28.1", + "typescript": "^5.8.2", + "typescript-eslint": "^8.28.0", + "vite": "^6.2.0", + "vite-tsconfig-paths": "^5.1.4", + "vitest": "^3.0.9", "vitest-canvas-mock": "^0.3.3" }, "dependencies": { "@material/material-color-utilities": "^0.2.7", + "compare-versions": "^6.1.1", "crypto-js": "^4.2.0", - "i18next": "^23.11.1", - "i18next-browser-languagedetector": "^7.2.1", - "i18next-http-backend": "^2.6.1", + "i18next": "^24.2.2", + "i18next-browser-languagedetector": "^8.0.4", + "i18next-http-backend": "^3.0.2", "i18next-korean-postposition-processor": "^1.0.0", - "json-stable-stringify": "^1.1.0", + "json-stable-stringify": "^1.2.0", "jszip": "^3.10.1", "phaser": "^3.70.0", - "phaser3-rex-plugins": "^1.1.84" + "phaser3-rex-plugins": "^1.80.14" }, "engines": { "node": ">=20.0.0" diff --git a/public/audio/bgm/battle_rival_3_afd.mp3 b/public/audio/bgm/battle_rival_3_afd.mp3 new file mode 100644 index 00000000000..6dec5c861c6 Binary files /dev/null and b/public/audio/bgm/battle_rival_3_afd.mp3 differ diff --git a/public/audio/bgm/title_afd.mp3 b/public/audio/bgm/title_afd.mp3 new file mode 100644 index 00000000000..c427d86b397 Binary files /dev/null and b/public/audio/bgm/title_afd.mp3 differ diff --git a/public/exp-sprites.json b/public/exp-sprites.json index c83fb910010..d6c8534e008 100644 --- a/public/exp-sprites.json +++ b/public/exp-sprites.json @@ -4599,8 +4599,6 @@ "728", "729", "730", - "730_2", - "730_2", "747", "748", "753", diff --git a/public/images/events/aprf25-de.png b/public/images/events/aprf25-de.png new file mode 100644 index 00000000000..d4bb7ebdc50 Binary files /dev/null and b/public/images/events/aprf25-de.png differ diff --git a/public/images/events/aprf25-en.png b/public/images/events/aprf25-en.png new file mode 100644 index 00000000000..8f7268b01b6 Binary files /dev/null and b/public/images/events/aprf25-en.png differ diff --git a/public/images/events/aprf25-es-ES.png b/public/images/events/aprf25-es-ES.png new file mode 100644 index 00000000000..a6136a2c8de Binary files /dev/null and b/public/images/events/aprf25-es-ES.png differ diff --git a/public/images/events/aprf25-es-MX.png b/public/images/events/aprf25-es-MX.png new file mode 100644 index 00000000000..a6136a2c8de Binary files /dev/null and b/public/images/events/aprf25-es-MX.png differ diff --git a/public/images/events/aprf25-fr.png b/public/images/events/aprf25-fr.png new file mode 100644 index 00000000000..c68264c75dd Binary files /dev/null and b/public/images/events/aprf25-fr.png differ diff --git a/public/images/events/aprf25-it.png b/public/images/events/aprf25-it.png new file mode 100644 index 00000000000..01bc0d2a1f0 Binary files /dev/null and b/public/images/events/aprf25-it.png differ diff --git a/public/images/events/aprf25-ja.png b/public/images/events/aprf25-ja.png new file mode 100644 index 00000000000..c6b62a3672e Binary files /dev/null and b/public/images/events/aprf25-ja.png differ diff --git a/public/images/events/aprf25-ko.png b/public/images/events/aprf25-ko.png new file mode 100644 index 00000000000..bcc87e33ac1 Binary files /dev/null and b/public/images/events/aprf25-ko.png differ diff --git a/public/images/events/aprf25-pt-BR.png b/public/images/events/aprf25-pt-BR.png new file mode 100644 index 00000000000..f56f5b5c1e9 Binary files /dev/null and b/public/images/events/aprf25-pt-BR.png differ diff --git a/public/images/events/aprf25-zh-CN.png b/public/images/events/aprf25-zh-CN.png new file mode 100644 index 00000000000..57b2c3ec5be Binary files /dev/null and b/public/images/events/aprf25-zh-CN.png differ diff --git a/public/images/items.json b/public/images/items.json index 9d84476a8a0..5848b02dd6a 100644 --- a/public/images/items.json +++ b/public/images/items.json @@ -4,13 +4,13 @@ "image": "items.png", "format": "RGBA8888", "size": { - "w": 431, - "h": 431 + "w": 435, + "h": 435 }, "scale": 1, "frames": [ { - "filename": "galarica_cuff", + "filename": "relic_gold", "rotated": false, "trimmed": true, "sourceSize": { @@ -18,1612 +18,16 @@ "h": 32 }, "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 29, - "h": 30 - }, - "frame": { - "x": 0, - "y": 0, - "w": 29, - "h": 30 - } - }, - { - "filename": "galarica_wreath", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 32, - "h": 27 - }, - "frame": { - "x": 29, - "y": 0, - "w": 32, - "h": 27 - } - }, - { - "filename": "max_mushrooms", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 29, - "h": 28 - }, - "frame": { - "x": 0, - "y": 30, - "w": 29, - "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": "leaders_crest", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 2, - "y": 3, - "w": 29, - "h": 27 - }, - "frame": { - "x": 61, - "y": 0, - "w": 29, - "h": 27 - } - }, - { - "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, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 1, - "w": 22, - "h": 31 - }, - "frame": { - "x": 0, - "y": 86, - "w": 22, - "h": 31 - } - }, - { - "filename": "great_ribbon", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 1, - "w": 22, - "h": 31 - }, - "frame": { - "x": 0, - "y": 117, - "w": 22, - "h": 31 - } - }, - { - "filename": "linking_cord", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 3, - "y": 3, - "w": 27, - "h": 26 - }, - "frame": { - "x": 59, - "y": 27, - "w": 27, - "h": 26 - } - }, - { - "filename": "master_ribbon", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 1, - "w": 22, - "h": 31 - }, - "frame": { - "x": 0, - "y": 148, - "w": 22, - "h": 31 - } - }, - { - "filename": "rogue_ribbon", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 1, - "w": 22, - "h": 31 - }, - "frame": { - "x": 0, - "y": 179, - "w": 22, - "h": 31 - } - }, - { - "filename": "ultra_ribbon", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 1, - "w": 22, - "h": 31 - }, - "frame": { - "x": 0, - "y": 210, - "w": 22, - "h": 31 - } - }, - { - "filename": "inverse", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 1, - "w": 22, - "h": 30 - }, - "frame": { - "x": 0, - "y": 241, - "w": 22, - "h": 30 - } - }, - { - "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": 271, - "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": 300, - "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": 329, - "w": 22, - "h": 29 - } - }, - { - "filename": "cornerstone_mask", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 3, - "w": 24, - "h": 26 - }, - "frame": { - "x": 90, - "y": 0, - "w": 24, - "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": 358, - "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": 386, - "w": 22, - "h": 28 - } - }, - { - "filename": "black_glasses", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 8, - "w": 23, - "h": 17 - }, - "frame": { - "x": 0, - "y": 414, - "w": 23, - "h": 17 - } - }, - { - "filename": "ability_charm", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 3, - "y": 3, - "w": 23, - "h": 26 - }, - "frame": { - "x": 114, - "y": 0, - "w": 23, - "h": 26 - } - }, - { - "filename": "map", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 3, - "y": 5, - "w": 27, - "h": 22 - }, - "frame": { - "x": 137, - "y": 0, - "w": 27, - "h": 22 - } - }, - { - "filename": "mint_atk", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 2, - "y": 5, - "w": 28, - "h": 21 - }, - "frame": { - "x": 164, - "y": 0, - "w": 28, - "h": 21 - } - }, - { - "filename": "mint_def", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 2, - "y": 5, - "w": 28, - "h": 21 - }, - "frame": { - "x": 192, - "y": 0, - "w": 28, - "h": 21 - } - }, - { - "filename": "mint_neutral", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 2, - "y": 5, - "w": 28, - "h": 21 - }, - "frame": { - "x": 220, - "y": 0, - "w": 28, - "h": 21 - } - }, - { - "filename": "mint_spatk", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 2, - "y": 5, - "w": 28, - "h": 21 - }, - "frame": { - "x": 248, - "y": 0, - "w": 28, - "h": 21 - } - }, - { - "filename": "mint_spd", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 2, - "y": 5, - "w": 28, - "h": 21 - }, - "frame": { - "x": 276, - "y": 0, - "w": 28, - "h": 21 - } - }, - { - "filename": "mint_spdef", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 2, - "y": 5, - "w": 28, - "h": 21 - }, - "frame": { - "x": 304, - "y": 0, - "w": 28, - "h": 21 - } - }, - { - "filename": "chipped_pot", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 3, - "y": 6, - "w": 26, - "h": 20 - }, - "frame": { - "x": 332, - "y": 0, - "w": 26, - "h": 20 - } - }, - { - "filename": "cracked_pot", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 3, - "y": 6, - "w": 26, - "h": 20 - }, - "frame": { - "x": 358, - "y": 0, - "w": 26, - "h": 20 - } - }, - { - "filename": "legend_plate", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 3, - "y": 6, - "w": 25, - "h": 20 - }, - "frame": { - "x": 384, - "y": 0, - "w": 25, - "h": 20 - } - }, - { - "filename": "ribbon_gen6", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 2, - "w": 22, - "h": 28 - }, - "frame": { - "x": 409, - "y": 0, - "w": 22, - "h": 28 - } - }, - { - "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, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 24, - "h": 24 - }, - "frame": { - "x": 22, - "y": 286, - "w": 24, - "h": 24 - } - }, - { - "filename": "choice_scarf", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 24, - "h": 24 - }, - "frame": { - "x": 22, - "y": 310, - "w": 24, - "h": 24 - } - }, - { - "filename": "draco_plate", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 24, - "h": 24 - }, - "frame": { - "x": 22, - "y": 334, - "w": 24, - "h": 24 - } - }, - { - "filename": "dread_plate", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 24, - "h": 24 - }, - "frame": { - "x": 22, - "y": 358, - "w": 24, - "h": 24 - } - }, - { - "filename": "earth_plate", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 24, - "h": 24 - }, - "frame": { - "x": 22, - "y": 382, - "w": 24, - "h": 24 - } - }, - { - "filename": "fist_plate", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 24, - "h": 24 - }, - "frame": { - "x": 23, - "y": 406, - "w": 24, - "h": 24 - } - }, - { - "filename": "ultranecrozium_z", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 1, - "y": 9, - "w": 30, - "h": 15 - }, - "frame": { - "x": 29, - "y": 55, - "w": 30, - "h": 15 - } - }, - { - "filename": "mega_bracelet", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 8, - "w": 20, - "h": 16 - }, - "frame": { - "x": 28, - "y": 70, - "w": 20, - "h": 16 - } - }, - { - "filename": "choice_specs", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 8, - "w": 24, - "h": 18 - }, - "frame": { - "x": 59, - "y": 53, - "w": 24, - "h": 18 - } - }, - { - "filename": "calcium", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 4, - "w": 16, - "h": 24 - }, - "frame": { - "x": 39, - "y": 86, - "w": 16, - "h": 24 - } - }, - { - "filename": "carbos", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 4, - "w": 16, - "h": 24 - }, - "frame": { - "x": 39, - "y": 110, - "w": 16, - "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": 39, - "y": 134, - "w": 21, - "h": 24 - } - }, - { - "filename": "flame_plate", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 24, - "h": 24 - }, - "frame": { - "x": 39, - "y": 158, - "w": 24, - "h": 24 - } - }, - { - "filename": "focus_band", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 24, - "h": 24 - }, - "frame": { - "x": 39, - "y": 182, - "w": 24, - "h": 24 - } - }, - { - "filename": "golden_punch", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 24, - "h": 24 - }, - "frame": { - "x": 44, - "y": 206, - "w": 24, - "h": 24 - } - }, - { - "filename": "gracidea", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 24, - "h": 24 - }, - "frame": { - "x": 44, - "y": 230, - "w": 24, - "h": 24 - } - }, - { - "filename": "grip_claw", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 24, - "h": 24 - }, - "frame": { - "x": 45, - "y": 254, - "w": 24, - "h": 24 - } - }, - { - "filename": "icicle_plate", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 24, - "h": 24 - }, - "frame": { - "x": 46, - "y": 278, - "w": 24, - "h": 24 - } - }, - { - "filename": "insect_plate", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 24, - "h": 24 - }, - "frame": { - "x": 46, - "y": 302, - "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": 46, - "y": 326, - "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": 46, - "y": 350, - "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": 46, - "y": 374, - "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": 47, - "y": 398, - "w": 23, - "h": 24 - } - }, - { - "filename": "silver_powder", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, + "x": 9, "y": 11, - "w": 24, - "h": 15 + "w": 15, + "h": 11 }, "frame": { - "x": 48, - "y": 71, - "w": 24, - "h": 15 - } - }, - { - "filename": "elixir", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 4, - "w": 18, - "h": 24 - }, - "frame": { - "x": 55, - "y": 86, - "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": 55, - "y": 110, - "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": 60, - "y": 134, - "w": 18, - "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": 63, - "y": 158, - "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": 63, - "y": 182, - "w": 16, - "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": 68, - "y": 206, - "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": 68, - "y": 230, - "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": 69, - "y": 254, - "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": 70, - "y": 278, - "w": 24, - "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": 70, - "y": 302, - "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": 70, - "y": 326, - "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": 70, - "y": 350, - "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": 70, - "y": 374, - "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": 70, - "y": 398, - "w": 24, - "h": 24 + "x": 0, + "y": 0, + "w": 15, + "h": 11 } }, { @@ -1641,411 +45,12 @@ "h": 14 }, "frame": { - "x": 137, - "y": 22, + "x": 15, + "y": 0, "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": 86, - "y": 27, - "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": 103, - "y": 26, - "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": 127, - "y": 36, - "w": 24, - "h": 23 - } - }, - { - "filename": "coin_case", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 5, - "w": 24, - "h": 23 - }, - "frame": { - "x": 103, - "y": 50, - "w": 24, - "h": 23 - } - }, - { - "filename": "big_nugget", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 6, - "w": 20, - "h": 20 - }, - "frame": { - "x": 83, - "y": 53, - "w": 20, - "h": 20 - } - }, - { - "filename": "dragon_scale", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 8, - "w": 24, - "h": 18 - }, - "frame": { - "x": 127, - "y": 59, - "w": 24, - "h": 18 - } - }, - { - "filename": "max_elixir", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 4, - "w": 18, - "h": 24 - }, - "frame": { - "x": 151, - "y": 36, - "w": 18, - "h": 24 - } - }, - { - "filename": "adamant_crystal", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 6, - "w": 23, - "h": 21 - }, - "frame": { - "x": 151, - "y": 60, - "w": 23, - "h": 21 - } - }, - { - "filename": "sky_plate", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 24, - "h": 24 - }, - "frame": { - "x": 169, - "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": 193, - "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": 217, - "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": 241, - "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": 265, - "y": 21, - "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": 289, - "y": 21, - "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": 313, - "y": 21, - "w": 22, - "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": 335, - "y": 20, - "w": 24, - "h": 24 - } - }, - { - "filename": "expert_belt", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 24, - "h": 23 - }, - "frame": { - "x": 359, - "y": 20, - "w": 24, - "h": 23 - } - }, - { - "filename": "hearthflame_mask", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 24, - "h": 23 - }, - "frame": { - "x": 383, - "y": 20, - "w": 24, - "h": 23 - } - }, - { - "filename": "leppa_berry", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 5, - "w": 24, - "h": 23 - }, - "frame": { - "x": 407, - "y": 28, - "w": 24, - "h": 23 - } - }, { "filename": "candy_overlay", "rotated": false, @@ -2061,600 +66,12 @@ "h": 15 }, "frame": { - "x": 169, - "y": 45, + "x": 39, + "y": 0, "w": 16, "h": 15 } }, - { - "filename": "exp_balance", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 5, - "w": 24, - "h": 22 - }, - "frame": { - "x": 185, - "y": 45, - "w": 24, - "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": 209, - "y": 45, - "w": 24, - "h": 22 - } - }, - { - "filename": "peat_block", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 5, - "w": 24, - "h": 22 - }, - "frame": { - "x": 233, - "y": 45, - "w": 24, - "h": 22 - } - }, - { - "filename": "scope_lens", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 5, - "w": 24, - "h": 23 - }, - "frame": { - "x": 257, - "y": 45, - "w": 24, - "h": 23 - } - }, - { - "filename": "twisted_spoon", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 5, - "w": 24, - "h": 23 - }, - "frame": { - "x": 281, - "y": 45, - "w": 24, - "h": 23 - } - }, - { - "filename": "berry_pouch", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 5, - "w": 23, - "h": 23 - }, - "frame": { - "x": 305, - "y": 45, - "w": 23, - "h": 23 - } - }, - { - "filename": "black_belt", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 4, - "w": 22, - "h": 23 - }, - "frame": { - "x": 328, - "y": 45, - "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": 350, - "y": 44, - "w": 18, - "h": 24 - } - }, - { - "filename": "reveal_glass", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 23, - "h": 24 - }, - "frame": { - "x": 368, - "y": 43, - "w": 23, - "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": 391, - "y": 43, - "w": 16, - "h": 24 - } - }, - { - "filename": "golden_net", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 5, - "w": 24, - "h": 21 - }, - "frame": { - "x": 407, - "y": 51, - "w": 24, - "h": 21 - } - }, - { - "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": 174, - "y": 67, - "w": 24, - "h": 20 - } - }, - { - "filename": "metal_powder", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 6, - "w": 24, - "h": 20 - }, - "frame": { - "x": 198, - "y": 67, - "w": 24, - "h": 20 - } - }, - { - "filename": "quick_powder", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 6, - "w": 24, - "h": 20 - }, - "frame": { - "x": 222, - "y": 67, - "w": 24, - "h": 20 - } - }, - { - "filename": "rusted_shield", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 6, - "w": 24, - "h": 20 - }, - "frame": { - "x": 246, - "y": 68, - "w": 24, - "h": 20 - } - }, - { - "filename": "sacred_ash", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 7, - "w": 24, - "h": 20 - }, - "frame": { - "x": 270, - "y": 68, - "w": 24, - "h": 20 - } - }, - { - "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": 294, - "y": 68, - "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": 318, - "y": 68, - "w": 24, - "h": 20 - } - }, - { - "filename": "amulet_coin", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 5, - "w": 23, - "h": 21 - }, - "frame": { - "x": 342, - "y": 68, - "w": 23, - "h": 21 - } - }, - { - "filename": "auspicious_armor", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 5, - "w": 23, - "h": 21 - }, - "frame": { - "x": 368, - "y": 67, - "w": 23, - "h": 21 - } - }, - { - "filename": "pp_max", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 4, - "w": 16, - "h": 24 - }, - "frame": { - "x": 391, - "y": 67, - "w": 16, - "h": 24 - } - }, - { - "filename": "binding_band", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 6, - "w": 23, - "h": 20 - }, - "frame": { - "x": 407, - "y": 72, - "w": 23, - "h": 20 - } - }, - { - "filename": "max_lure", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 4, - "w": 17, - "h": 24 - }, - "frame": { - "x": 73, - "y": 87, - "w": 17, - "h": 24 - } - }, - { - "filename": "bug_tera_shard", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 22, - "h": 23 - }, - "frame": { - "x": 73, - "y": 111, - "w": 22, - "h": 23 - } - }, - { - "filename": "max_potion", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 4, - "w": 18, - "h": 24 - }, - "frame": { - "x": 78, - "y": 134, - "w": 18, - "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": 79, - "y": 158, - "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": 79, - "y": 182, - "w": 21, - "h": 24 - } - }, - { - "filename": "dynamax_band", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 23, - "h": 23 - }, - "frame": { - "x": 90, - "y": 73, - "w": 23, - "h": 23 - } - }, { "filename": "eviolite", "rotated": false, @@ -2670,306 +87,12 @@ "h": 15 }, "frame": { - "x": 90, - "y": 96, + "x": 55, + "y": 0, "w": 15, "h": 15 } }, - { - "filename": "dark_tera_shard", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 22, - "h": 23 - }, - "frame": { - "x": 95, - "y": 111, - "w": 22, - "h": 23 - } - }, - { - "filename": "red_orb", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 20, - "h": 24 - }, - "frame": { - "x": 96, - "y": 134, - "w": 20, - "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": 100, - "y": 158, - "w": 16, - "h": 24 - } - }, - { - "filename": "protein", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 4, - "w": 16, - "h": 24 - }, - "frame": { - "x": 100, - "y": 182, - "w": 16, - "h": 24 - } - }, - { - "filename": "griseous_core", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 23, - "h": 23 - }, - "frame": { - "x": 92, - "y": 206, - "w": 23, - "h": 23 - } - }, - { - "filename": "leek", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 5, - "w": 23, - "h": 23 - }, - "frame": { - "x": 92, - "y": 229, - "w": 23, - "h": 23 - } - }, - { - "filename": "dragon_tera_shard", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 22, - "h": 23 - }, - "frame": { - "x": 93, - "y": 252, - "w": 22, - "h": 23 - } - }, - { - "filename": "dragon_fang", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 21, - "h": 23 - }, - "frame": { - "x": 94, - "y": 275, - "w": 21, - "h": 23 - } - }, - { - "filename": "electric_tera_shard", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 22, - "h": 23 - }, - "frame": { - "x": 94, - "y": 298, - "w": 22, - "h": 23 - } - }, - { - "filename": "fairy_tera_shard", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 22, - "h": 23 - }, - "frame": { - "x": 94, - "y": 321, - "w": 22, - "h": 23 - } - }, - { - "filename": "fighting_tera_shard", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 22, - "h": 23 - }, - "frame": { - "x": 94, - "y": 344, - "w": 22, - "h": 23 - } - }, - { - "filename": "fire_stone", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 23 - }, - "frame": { - "x": 94, - "y": 367, - "w": 22, - "h": 23 - } - }, - { - "filename": "fire_tera_shard", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 22, - "h": 23 - }, - "frame": { - "x": 94, - "y": 390, - "w": 22, - "h": 23 - } - }, - { - "filename": "relic_crown", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 7, - "w": 23, - "h": 18 - }, - "frame": { - "x": 94, - "y": 413, - "w": 23, - "h": 18 - } - }, { "filename": "prism_scale", "rotated": false, @@ -2985,14 +108,14 @@ "h": 15 }, "frame": { - "x": 105, - "y": 96, + "x": 70, + "y": 0, "w": 15, "h": 15 } }, { - "filename": "coupon", + "filename": "silver_powder", "rotated": false, "trimmed": true, "sourceSize": { @@ -3001,19 +124,19 @@ }, "spriteSourceSize": { "x": 4, - "y": 7, - "w": 23, - "h": 19 + "y": 11, + "w": 24, + "h": 15 }, "frame": { - "x": 113, - "y": 77, - "w": 23, - "h": 19 + "x": 85, + "y": 0, + "w": 24, + "h": 15 } }, { - "filename": "full_heal", + "filename": "ultranecrozium_z", "rotated": false, "trimmed": true, "sourceSize": { @@ -3021,205 +144,16 @@ "h": 32 }, "spriteSourceSize": { - "x": 9, - "y": 4, - "w": 15, - "h": 23 + "x": 1, + "y": 9, + "w": 30, + "h": 15 }, "frame": { - "x": 136, - "y": 77, - "w": 15, - "h": 23 - } - }, - { - "filename": "golden_mystic_ticket", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 7, - "w": 23, - "h": 19 - }, - "frame": { - "x": 151, - "y": 81, - "w": 23, - "h": 19 - } - }, - { - "filename": "burn_drive", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 8, - "w": 23, - "h": 17 - }, - "frame": { - "x": 174, - "y": 87, - "w": 23, - "h": 17 - } - }, - { - "filename": "chill_drive", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 8, - "w": 23, - "h": 17 - }, - "frame": { - "x": 197, - "y": 87, - "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": 220, - "y": 87, - "w": 23, - "h": 17 - } - }, - { - "filename": "healing_charm", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 23, - "h": 22 - }, - "frame": { - "x": 243, - "y": 88, - "w": 23, - "h": 22 - } - }, - { - "filename": "macho_brace", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 5, - "w": 23, - "h": 23 - }, - "frame": { - "x": 266, - "y": 88, - "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": 289, - "y": 88, - "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": 312, - "y": 88, - "w": 23, - "h": 23 - } - }, - { - "filename": "rusted_sword", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 5, - "w": 23, - "h": 22 - }, - "frame": { - "x": 335, - "y": 89, - "w": 23, - "h": 22 + "x": 109, + "y": 0, + "w": 30, + "h": 15 } }, { @@ -3237,2847 +171,12 @@ "h": 16 }, "frame": { - "x": 120, - "y": 96, + "x": 139, + "y": 0, "w": 16, "h": 16 } }, - { - "filename": "bug_memory", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 117, - "y": 112, - "w": 22, - "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": 116, - "y": 134, - "w": 22, - "h": 23 - } - }, - { - "filename": "focus_sash", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 4, - "w": 22, - "h": 23 - }, - "frame": { - "x": 116, - "y": 157, - "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": 116, - "y": 180, - "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": 139, - "y": 100, - "w": 22, - "h": 23 - } - }, - { - "filename": "berry_juice", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 21 - }, - "frame": { - "x": 139, - "y": 123, - "w": 22, - "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": 138, - "y": 144, - "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": 138, - "y": 167, - "w": 22, - "h": 23 - } - }, - { - "filename": "black_sludge", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 7, - "w": 22, - "h": 19 - }, - "frame": { - "x": 138, - "y": 190, - "w": 22, - "h": 19 - } - }, - { - "filename": "never_melt_ice", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 23 - }, - "frame": { - "x": 161, - "y": 104, - "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": 183, - "y": 104, - "w": 22, - "h": 23 - } - }, - { - "filename": "petaya_berry", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 23 - }, - "frame": { - "x": 205, - "y": 104, - "w": 22, - "h": 23 - } - }, - { - "filename": "repel", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 4, - "w": 16, - "h": 24 - }, - "frame": { - "x": 227, - "y": 104, - "w": 16, - "h": 24 - } - }, - { - "filename": "moon_stone", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 6, - "w": 23, - "h": 21 - }, - "frame": { - "x": 243, - "y": 110, - "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": 266, - "y": 111, - "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": 289, - "y": 111, - "w": 23, - "h": 21 - } - }, - { - "filename": "wellspring_mask", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 5, - "w": 23, - "h": 21 - }, - "frame": { - "x": 312, - "y": 111, - "w": 23, - "h": 21 - } - }, - { - "filename": "charcoal", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 335, - "y": 111, - "w": 22, - "h": 22 - } - }, - { - "filename": "mystic_ticket", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 7, - "w": 23, - "h": 19 - }, - "frame": { - "x": 161, - "y": 127, - "w": 23, - "h": 19 - } - }, - { - "filename": "poison_tera_shard", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 22, - "h": 23 - }, - "frame": { - "x": 160, - "y": 146, - "w": 22, - "h": 23 - } - }, - { - "filename": "psychic_tera_shard", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 22, - "h": 23 - }, - "frame": { - "x": 160, - "y": 169, - "w": 22, - "h": 23 - } - }, - { - "filename": "pair_of_tickets", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 7, - "w": 23, - "h": 19 - }, - "frame": { - "x": 184, - "y": 127, - "w": 23, - "h": 19 - } - }, - { - "filename": "reaper_cloth", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 23 - }, - "frame": { - "x": 182, - "y": 146, - "w": 22, - "h": 23 - } - }, - { - "filename": "rock_tera_shard", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 22, - "h": 23 - }, - "frame": { - "x": 182, - "y": 169, - "w": 22, - "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": 207, - "y": 127, - "w": 20, - "h": 20 - } - }, - { - "filename": "steel_tera_shard", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 22, - "h": 23 - }, - "frame": { - "x": 204, - "y": 147, - "w": 22, - "h": 23 - } - }, - { - "filename": "dark_memory", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 204, - "y": 170, - "w": 22, - "h": 22 - } - }, - { - "filename": "reviver_seed", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 8, - "w": 23, - "h": 20 - }, - "frame": { - "x": 160, - "y": 192, - "w": 23, - "h": 20 - } - }, - { - "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": 192, - "w": 23, - "h": 20 - } - }, - { - "filename": "dawn_stone", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 6, - "w": 20, - "h": 21 - }, - "frame": { - "x": 206, - "y": 192, - "w": 20, - "h": 21 - } - }, - { - "filename": "super_repel", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 4, - "w": 16, - "h": 24 - }, - "frame": { - "x": 227, - "y": 128, - "w": 16, - "h": 24 - } - }, - { - "filename": "deep_sea_tooth", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 6, - "w": 22, - "h": 21 - }, - "frame": { - "x": 243, - "y": 131, - "w": 22, - "h": 21 - } - }, - { - "filename": "stellar_tera_shard", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 22, - "h": 23 - }, - "frame": { - "x": 226, - "y": 152, - "w": 22, - "h": 23 - } - }, - { - "filename": "water_tera_shard", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 22, - "h": 23 - }, - "frame": { - "x": 226, - "y": 175, - "w": 22, - "h": 23 - } - }, - { - "filename": "deep_sea_scale", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 6, - "w": 22, - "h": 20 - }, - "frame": { - "x": 265, - "y": 132, - "w": 22, - "h": 20 - } - }, - { - "filename": "wide_lens", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 4, - "w": 22, - "h": 23 - }, - "frame": { - "x": 248, - "y": 152, - "w": 22, - "h": 23 - } - }, - { - "filename": "dire_hit", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 248, - "y": 175, - "w": 22, - "h": 22 - } - }, - { - "filename": "dna_splicers", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 287, - "y": 132, - "w": 22, - "h": 22 - } - }, - { - "filename": "dragon_memory", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 309, - "y": 132, - "w": 22, - "h": 22 - } - }, - { - "filename": "super_lure", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 4, - "w": 17, - "h": 24 - }, - "frame": { - "x": 270, - "y": 152, - "w": 17, - "h": 24 - } - }, - { - "filename": "electirizer", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 287, - "y": 154, - "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": 309, - "y": 154, - "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": 270, - "y": 176, - "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": 292, - "y": 176, - "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": 331, - "y": 133, - "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": 331, - "y": 155, - "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": 314, - "y": 176, - "w": 17, - "h": 23 - } - }, - { - "filename": "flying_memory", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 331, - "y": 177, - "w": 22, - "h": 22 - } - }, - { - "filename": "blunder_policy", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 6, - "w": 22, - "h": 19 - }, - "frame": { - "x": 226, - "y": 198, - "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": 248, - "y": 197, - "w": 22, - "h": 20 - } - }, - { - "filename": "dubious_disc", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 7, - "w": 22, - "h": 19 - }, - "frame": { - "x": 270, - "y": 198, - "w": 22, - "h": 19 - } - }, - { - "filename": "ganlon_berry", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 292, - "y": 198, - "w": 22, - "h": 22 - } - }, - { - "filename": "ghost_memory", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 314, - "y": 199, - "w": 22, - "h": 22 - } - }, - { - "filename": "berry_pot", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 5, - "w": 18, - "h": 22 - }, - "frame": { - "x": 336, - "y": 199, - "w": 18, - "h": 22 - } - }, - { - "filename": "grass_memory", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 116, - "y": 203, - "w": 22, - "h": 22 - } - }, - { - "filename": "ground_memory", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 115, - "y": 225, - "w": 22, - "h": 22 - } - }, - { - "filename": "guard_spec", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 115, - "y": 247, - "w": 22, - "h": 22 - } - }, - { - "filename": "ice_memory", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 115, - "y": 269, - "w": 22, - "h": 22 - } - }, - { - "filename": "ice_stone", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 138, - "y": 209, - "w": 22, - "h": 22 - } - }, - { - "filename": "lansat_berry", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 4, - "w": 21, - "h": 23 - }, - "frame": { - "x": 137, - "y": 231, - "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": 137, - "y": 254, - "w": 21, - "h": 23 - } - }, - { - "filename": "liechi_berry", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 6, - "w": 22, - "h": 21 - }, - "frame": { - "x": 160, - "y": 212, - "w": 22, - "h": 21 - } - }, - { - "filename": "magmarizer", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 182, - "y": 212, - "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": 204, - "y": 213, - "w": 22, - "h": 22 - } - }, - { - "filename": "moon_flute", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 158, - "y": 233, - "w": 22, - "h": 22 - } - }, - { - "filename": "normal_memory", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 158, - "y": 255, - "w": 22, - "h": 22 - } - }, - { - "filename": "poison_memory", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 180, - "y": 234, - "w": 22, - "h": 22 - } - }, - { - "filename": "protector", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 180, - "y": 256, - "w": 22, - "h": 22 - } - }, - { - "filename": "psychic_memory", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 202, - "y": 235, - "w": 22, - "h": 22 - } - }, - { - "filename": "rock_memory", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 202, - "y": 257, - "w": 22, - "h": 22 - } - }, - { - "filename": "malicious_armor", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 6, - "w": 22, - "h": 20 - }, - "frame": { - "x": 226, - "y": 217, - "w": 22, - "h": 20 - } - }, - { - "filename": "scroll_of_darkness", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 248, - "y": 217, - "w": 22, - "h": 22 - } - }, - { - "filename": "scroll_of_waters", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 270, - "y": 217, - "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": 224, - "y": 237, - "w": 21, - "h": 23 - } - }, - { - "filename": "shed_shell", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 292, - "y": 220, - "w": 22, - "h": 22 - } - }, - { - "filename": "starf_berry", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 314, - "y": 221, - "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": 224, - "y": 260, - "w": 21, - "h": 21 - } - }, - { - "filename": "steel_memory", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 245, - "y": 239, - "w": 22, - "h": 22 - } - }, - { - "filename": "sun_flute", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 267, - "y": 239, - "w": 22, - "h": 22 - } - }, - { - "filename": "sweet_apple", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 6, - "w": 22, - "h": 21 - }, - "frame": { - "x": 245, - "y": 261, - "w": 22, - "h": 21 - } - }, - { - "filename": "syrupy_apple", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 6, - "w": 22, - "h": 21 - }, - "frame": { - "x": 267, - "y": 261, - "w": 22, - "h": 21 - } - }, - { - "filename": "thick_club", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 289, - "y": 242, - "w": 22, - "h": 22 - } - }, - { - "filename": "hard_meteorite", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 5, - "w": 20, - "h": 22 - }, - "frame": { - "x": 336, - "y": 221, - "w": 20, - "h": 22 - } - }, - { - "filename": "tart_apple", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 6, - "w": 22, - "h": 21 - }, - "frame": { - "x": 289, - "y": 264, - "w": 22, - "h": 21 - } - }, - { - "filename": "thunder_stone", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 311, - "y": 243, - "w": 22, - "h": 22 - } - }, - { - "filename": "tm_bug", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 333, - "y": 243, - "w": 22, - "h": 22 - } - }, - { - "filename": "tera_orb", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 6, - "w": 22, - "h": 20 - }, - "frame": { - "x": 311, - "y": 265, - "w": 22, - "h": 20 - } - }, - { - "filename": "tm_dark", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 333, - "y": 265, - "w": 22, - "h": 22 - } - }, - { - "filename": "shock_drive", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 8, - "w": 23, - "h": 17 - }, - "frame": { - "x": 137, - "y": 277, - "w": 23, - "h": 17 - } - }, - { - "filename": "whipped_dream", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 4, - "w": 21, - "h": 23 - }, - "frame": { - "x": 116, - "y": 291, - "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": 116, - "y": 314, - "w": 20, - "h": 23 - } - }, - { - "filename": "sitrus_berry", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 5, - "w": 20, - "h": 22 - }, - "frame": { - "x": 116, - "y": 337, - "w": 20, - "h": 22 - } - }, - { - "filename": "tm_dragon", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 137, - "y": 294, - "w": 22, - "h": 22 - } - }, - { - "filename": "tm_electric", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 136, - "y": 316, - "w": 22, - "h": 22 - } - }, - { - "filename": "tm_fairy", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 136, - "y": 338, - "w": 22, - "h": 22 - } - }, - { - "filename": "gb", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 6, - "w": 20, - "h": 20 - }, - "frame": { - "x": 116, - "y": 359, - "w": 20, - "h": 20 - } - }, - { - "filename": "tm_fighting", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 116, - "y": 379, - "w": 22, - "h": 22 - } - }, - { - "filename": "upgrade", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 7, - "w": 22, - "h": 19 - }, - "frame": { - "x": 136, - "y": 360, - "w": 22, - "h": 19 - } - }, - { - "filename": "tm_fire", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 138, - "y": 379, - "w": 22, - "h": 22 - } - }, - { - "filename": "everstone", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 8, - "w": 20, - "h": 17 - }, - "frame": { - "x": 160, - "y": 277, - "w": 20, - "h": 17 - } - }, - { - "filename": "tm_flying", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 159, - "y": 294, - "w": 22, - "h": 22 - } - }, - { - "filename": "tm_ghost", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 158, - "y": 316, - "w": 22, - "h": 22 - } - }, - { - "filename": "tm_grass", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 158, - "y": 338, - "w": 22, - "h": 22 - } - }, - { - "filename": "metal_alloy", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 7, - "w": 21, - "h": 19 - }, - "frame": { - "x": 158, - "y": 360, - "w": 21, - "h": 19 - } - }, - { - "filename": "lock_capsule", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 5, - "w": 19, - "h": 22 - }, - "frame": { - "x": 160, - "y": 379, - "w": 19, - "h": 22 - } - }, - { - "filename": "relic_band", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 9, - "w": 17, - "h": 16 - }, - "frame": { - "x": 180, - "y": 278, - "w": 17, - "h": 16 - } - }, - { - "filename": "metal_coat", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 5, - "w": 19, - "h": 22 - }, - "frame": { - "x": 181, - "y": 294, - "w": 19, - "h": 22 - } - }, - { - "filename": "tm_ground", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 180, - "y": 316, - "w": 22, - "h": 22 - } - }, - { - "filename": "tm_ice", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 180, - "y": 338, - "w": 22, - "h": 22 - } - }, - { - "filename": "tm_normal", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 179, - "y": 360, - "w": 22, - "h": 22 - } - }, - { - "filename": "tm_poison", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 179, - "y": 382, - "w": 22, - "h": 22 - } - }, - { - "filename": "tm_psychic", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 117, - "y": 401, - "w": 22, - "h": 22 - } - }, - { - "filename": "tm_rock", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 139, - "y": 401, - "w": 22, - "h": 22 - } - }, - { - "filename": "sachet", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 4, - "w": 18, - "h": 23 - }, - "frame": { - "x": 161, - "y": 401, - "w": 18, - "h": 23 - } - }, - { - "filename": "tm_steel", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 179, - "y": 404, - "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": 358, - "y": 89, - "w": 15, - "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": 373, - "y": 88, - "w": 18, - "h": 20 - } - }, - { - "filename": "metronome", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 5, - "w": 17, - "h": 22 - }, - "frame": { - "x": 357, - "y": 111, - "w": 17, - "h": 22 - } - }, - { - "filename": "tm_water", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 353, - "y": 133, - "w": 22, - "h": 22 - } - }, - { - "filename": "water_memory", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 353, - "y": 155, - "w": 22, - "h": 22 - } - }, - { - "filename": "water_stone", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 353, - "y": 177, - "w": 22, - "h": 22 - } - }, - { - "filename": "x_accuracy", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 354, - "y": 199, - "w": 22, - "h": 22 - } - }, - { - "filename": "x_attack", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 356, - "y": 221, - "w": 22, - "h": 22 - } - }, - { - "filename": "x_defense", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 355, - "y": 243, - "w": 22, - "h": 22 - } - }, - { - "filename": "x_sp_atk", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 355, - "y": 265, - "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": 374, - "y": 108, - "w": 17, - "h": 23 - } - }, - { - "filename": "unknown", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 4, - "w": 16, - "h": 24 - }, - "frame": { - "x": 391, - "y": 91, - "w": 16, - "h": 24 - } - }, - { - "filename": "x_sp_def", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 407, - "y": 92, - "w": 22, - "h": 22 - } - }, - { - "filename": "zinc", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 4, - "w": 16, - "h": 24 - }, - "frame": { - "x": 375, - "y": 131, - "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": 391, - "y": 115, - "w": 17, - "h": 23 - } - }, - { - "filename": "wise_glasses", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 4, - "y": 8, - "w": 23, - "h": 17 - }, - "frame": { - "x": 408, - "y": 114, - "w": 23, - "h": 17 - } - }, - { - "filename": "soothe_bell", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 5, - "w": 17, - "h": 22 - }, - "frame": { - "x": 375, - "y": 155, - "w": 17, - "h": 22 - } - }, - { - "filename": "x_speed", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 5, - "w": 22, - "h": 22 - }, - "frame": { - "x": 375, - "y": 177, - "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": 376, - "y": 199, - "w": 21, - "h": 21 - } - }, - { - "filename": "quick_claw", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 6, - "w": 19, - "h": 21 - }, - "frame": { - "x": 378, - "y": 220, - "w": 19, - "h": 21 - } - }, { "filename": "absolite", "rotated": false, @@ -6093,138 +192,12 @@ "h": 16 }, "frame": { - "x": 391, - "y": 138, + "x": 155, + "y": 0, "w": 16, "h": 16 } }, - { - "filename": "shiny_stone", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 6, - "w": 21, - "h": 21 - }, - "frame": { - "x": 392, - "y": 154, - "w": 21, - "h": 21 - } - }, - { - "filename": "oval_stone", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 7, - "w": 18, - "h": 19 - }, - "frame": { - "x": 413, - "y": 131, - "w": 18, - "h": 19 - } - }, - { - "filename": "baton", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 7, - "w": 18, - "h": 18 - }, - "frame": { - "x": 413, - "y": 150, - "w": 18, - "h": 18 - } - }, - { - "filename": "candy", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 11, - "w": 18, - "h": 18 - }, - "frame": { - "x": 413, - "y": 168, - "w": 18, - "h": 18 - } - }, - { - "filename": "mystery_egg", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 8, - "y": 8, - "w": 16, - "h": 18 - }, - "frame": { - "x": 397, - "y": 175, - "w": 16, - "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": 413, - "y": 186, - "w": 18, - "h": 18 - } - }, { "filename": "aerodactylite", "rotated": false, @@ -6240,33 +213,12 @@ "h": 16 }, "frame": { - "x": 397, - "y": 193, + "x": 171, + "y": 0, "w": 16, "h": 16 } }, - { - "filename": "flame_orb", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 7, - "w": 18, - "h": 18 - }, - "frame": { - "x": 413, - "y": 204, - "w": 18, - "h": 18 - } - }, { "filename": "aggronite", "rotated": false, @@ -6282,33 +234,12 @@ "h": 16 }, "frame": { - "x": 397, - "y": 209, + "x": 187, + "y": 0, "w": 16, "h": 16 } }, - { - "filename": "light_ball", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 7, - "w": 18, - "h": 18 - }, - "frame": { - "x": 413, - "y": 222, - "w": 18, - "h": 18 - } - }, { "filename": "alakazite", "rotated": false, @@ -6324,117 +255,12 @@ "h": 16 }, "frame": { - "x": 397, - "y": 225, + "x": 203, + "y": 0, "w": 16, "h": 16 } }, - { - "filename": "light_stone", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 7, - "w": 18, - "h": 18 - }, - "frame": { - "x": 413, - "y": 240, - "w": 18, - "h": 18 - } - }, - { - "filename": "zoom_lens", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 6, - "w": 21, - "h": 21 - }, - "frame": { - "x": 200, - "y": 279, - "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": 221, - "y": 281, - "w": 20, - "h": 19 - } - }, - { - "filename": "masterpiece_teacup", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 5, - "y": 7, - "w": 21, - "h": 18 - }, - "frame": { - "x": 241, - "y": 282, - "w": 21, - "h": 18 - } - }, - { - "filename": "old_gateau", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 8, - "w": 21, - "h": 18 - }, - "frame": { - "x": 262, - "y": 282, - "w": 21, - "h": 18 - } - }, { "filename": "altarianite", "rotated": false, @@ -6450,810 +276,12 @@ "h": 16 }, "frame": { - "x": 200, - "y": 300, + "x": 219, + "y": 0, "w": 16, "h": 16 } }, - { - "filename": "sharp_meteorite", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 8, - "w": 21, - "h": 18 - }, - "frame": { - "x": 216, - "y": 300, - "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": 237, - "y": 300, - "w": 21, - "h": 18 - } - }, - { - "filename": "magnet", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 6, - "w": 20, - "h": 20 - }, - "frame": { - "x": 258, - "y": 300, - "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": 283, - "y": 285, - "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": 303, - "y": 285, - "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": 278, - "y": 305, - "w": 20, - "h": 20 - } - }, - { - "filename": "pb_silver", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 6, - "w": 20, - "h": 20 - }, - "frame": { - "x": 298, - "y": 305, - "w": 20, - "h": 20 - } - }, - { - "filename": "revive", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 10, - "y": 8, - "w": 12, - "h": 17 - }, - "frame": { - "x": 202, - "y": 316, - "w": 12, - "h": 17 - } - }, - { - "filename": "power_herb", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 7, - "w": 20, - "h": 19 - }, - "frame": { - "x": 214, - "y": 318, - "w": 20, - "h": 19 - } - }, - { - "filename": "razor_claw", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 7, - "w": 20, - "h": 19 - }, - "frame": { - "x": 234, - "y": 318, - "w": 20, - "h": 19 - } - }, - { - "filename": "rb", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 6, - "w": 20, - "h": 20 - }, - "frame": { - "x": 254, - "y": 320, - "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": 274, - "y": 325, - "w": 20, - "h": 20 - } - }, - { - "filename": "strange_ball", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 6, - "w": 20, - "h": 20 - }, - "frame": { - "x": 294, - "y": 325, - "w": 20, - "h": 20 - } - }, - { - "filename": "spell_tag", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 6, - "w": 19, - "h": 21 - }, - "frame": { - "x": 202, - "y": 337, - "w": 19, - "h": 21 - } - }, - { - "filename": "ub", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 6, - "w": 20, - "h": 20 - }, - "frame": { - "x": 221, - "y": 337, - "w": 20, - "h": 20 - } - }, - { - "filename": "white_herb", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 7, - "w": 20, - "h": 19 - }, - "frame": { - "x": 323, - "y": 287, - "w": 20, - "h": 19 - } - }, - { - "filename": "apicot_berry", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 6, - "w": 19, - "h": 20 - }, - "frame": { - "x": 343, - "y": 287, - "w": 19, - "h": 20 - } - }, - { - "filename": "candy_jar", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 6, - "w": 19, - "h": 20 - }, - "frame": { - "x": 362, - "y": 287, - "w": 19, - "h": 20 - } - }, - { - "filename": "big_mushroom", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 6, - "w": 19, - "h": 19 - }, - "frame": { - "x": 318, - "y": 306, - "w": 19, - "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": 314, - "y": 325, - "w": 19, - "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": 337, - "y": 307, - "w": 20, - "h": 18 - } - }, - { - "filename": "miracle_seed", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 7, - "w": 19, - "h": 19 - }, - "frame": { - "x": 333, - "y": 325, - "w": 19, - "h": 19 - } - }, - { - "filename": "wl_antidote", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 8, - "w": 20, - "h": 18 - }, - "frame": { - "x": 357, - "y": 307, - "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": 352, - "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": 241, - "y": 340, - "w": 20, - "h": 18 - } - }, - { - "filename": "golden_egg", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 6, - "w": 17, - "h": 20 - }, - "frame": { - "x": 372, - "y": 325, - "w": 17, - "h": 20 - } - }, - { - "filename": "toxic_orb", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 7, - "w": 18, - "h": 18 - }, - "frame": { - "x": 377, - "y": 307, - "w": 18, - "h": 18 - } - }, - { - "filename": "lucky_egg", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 7, - "y": 6, - "w": 17, - "h": 20 - }, - "frame": { - "x": 389, - "y": 325, - "w": 17, - "h": 20 - } - }, - { - "filename": "wl_custom_spliced", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 8, - "w": 20, - "h": 18 - }, - "frame": { - "x": 352, - "y": 343, - "w": 20, - "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": 372, - "y": 345, - "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": 392, - "y": 345, - "w": 20, - "h": 18 - } - }, - { - "filename": "wl_ether", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 8, - "w": 20, - "h": 18 - }, - "frame": { - "x": 378, - "y": 241, - "w": 20, - "h": 18 - } - }, - { - "filename": "relic_gold", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 9, - "y": 11, - "w": 15, - "h": 11 - }, - "frame": { - "x": 398, - "y": 241, - "w": 15, - "h": 11 - } - }, - { - "filename": "wl_full_heal", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 8, - "w": 20, - "h": 18 - }, - "frame": { - "x": 377, - "y": 259, - "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": 381, - "y": 277, - "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": 397, - "y": 259, - "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": 401, - "y": 277, - "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": 395, - "y": 295, - "w": 20, - "h": 18 - } - }, { "filename": "ampharosite", "rotated": false, @@ -7269,8 +297,8 @@ "h": 16 }, "frame": { - "x": 415, - "y": 295, + "x": 235, + "y": 0, "w": 16, "h": 16 } @@ -7290,33 +318,12 @@ "h": 16 }, "frame": { - "x": 415, - "y": 311, + "x": 251, + "y": 0, "w": 16, "h": 16 } }, - { - "filename": "wl_item_drop", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 8, - "w": 20, - "h": 18 - }, - "frame": { - "x": 406, - "y": 327, - "w": 20, - "h": 18 - } - }, { "filename": "banettite", "rotated": false, @@ -7332,201 +339,12 @@ "h": 16 }, "frame": { - "x": 412, - "y": 345, + "x": 267, + "y": 0, "w": 16, "h": 16 } }, - { - "filename": "wl_item_urge", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 8, - "w": 20, - "h": 18 - }, - "frame": { - "x": 221, - "y": 357, - "w": 20, - "h": 18 - } - }, - { - "filename": "wl_max_elixir", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 8, - "w": 20, - "h": 18 - }, - "frame": { - "x": 241, - "y": 358, - "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": 201, - "y": 360, - "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": 201, - "y": 378, - "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": 221, - "y": 375, - "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": 201, - "y": 396, - "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": 221, - "y": 393, - "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": 241, - "y": 376, - "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": 241, - "y": 394, - "w": 20, - "h": 18 - } - }, { "filename": "beedrillite", "rotated": false, @@ -7542,33 +360,12 @@ "h": 16 }, "frame": { - "x": 201, - "y": 414, + "x": 283, + "y": 0, "w": 16, "h": 16 } }, - { - "filename": "wl_super_potion", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 32, - "h": 32 - }, - "spriteSourceSize": { - "x": 6, - "y": 8, - "w": 20, - "h": 18 - }, - "frame": { - "x": 261, - "y": 345, - "w": 20, - "h": 18 - } - }, { "filename": "blastoisinite", "rotated": false, @@ -7584,8 +381,8 @@ "h": 16 }, "frame": { - "x": 261, - "y": 363, + "x": 299, + "y": 0, "w": 16, "h": 16 } @@ -7605,8 +402,8 @@ "h": 16 }, "frame": { - "x": 281, - "y": 345, + "x": 315, + "y": 0, "w": 16, "h": 16 } @@ -7626,8 +423,8 @@ "h": 16 }, "frame": { - "x": 261, - "y": 379, + "x": 331, + "y": 0, "w": 16, "h": 16 } @@ -7647,8 +444,8 @@ "h": 16 }, "frame": { - "x": 297, - "y": 345, + "x": 347, + "y": 0, "w": 16, "h": 16 } @@ -7668,8 +465,8 @@ "h": 16 }, "frame": { - "x": 261, - "y": 395, + "x": 363, + "y": 0, "w": 16, "h": 16 } @@ -7689,8 +486,8 @@ "h": 16 }, "frame": { - "x": 313, - "y": 345, + "x": 379, + "y": 0, "w": 16, "h": 16 } @@ -7710,8 +507,8 @@ "h": 16 }, "frame": { - "x": 217, - "y": 414, + "x": 395, + "y": 0, "w": 16, "h": 16 } @@ -7731,12 +528,33 @@ "h": 16 }, "frame": { - "x": 233, - "y": 412, + "x": 411, + "y": 0, "w": 16, "h": 16 } }, + { + "filename": "revive", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 10, + "y": 8, + "w": 12, + "h": 17 + }, + "frame": { + "x": 0, + "y": 11, + "w": 12, + "h": 17 + } + }, { "filename": "gardevoirite", "rotated": false, @@ -7752,8 +570,8 @@ "h": 16 }, "frame": { - "x": 249, - "y": 412, + "x": 12, + "y": 14, "w": 16, "h": 16 } @@ -7773,8 +591,8 @@ "h": 16 }, "frame": { - "x": 265, - "y": 411, + "x": 28, + "y": 15, "w": 16, "h": 16 } @@ -7794,8 +612,8 @@ "h": 16 }, "frame": { - "x": 329, - "y": 345, + "x": 44, + "y": 15, "w": 16, "h": 16 } @@ -7815,8 +633,8 @@ "h": 16 }, "frame": { - "x": 277, - "y": 363, + "x": 60, + "y": 15, "w": 16, "h": 16 } @@ -7836,8 +654,8 @@ "h": 16 }, "frame": { - "x": 277, - "y": 379, + "x": 76, + "y": 15, "w": 16, "h": 16 } @@ -7857,8 +675,8 @@ "h": 16 }, "frame": { - "x": 277, - "y": 395, + "x": 92, + "y": 15, "w": 16, "h": 16 } @@ -7878,8 +696,8 @@ "h": 16 }, "frame": { - "x": 293, - "y": 361, + "x": 108, + "y": 15, "w": 16, "h": 16 } @@ -7899,8 +717,8 @@ "h": 16 }, "frame": { - "x": 309, - "y": 361, + "x": 124, + "y": 16, "w": 16, "h": 16 } @@ -7920,8 +738,8 @@ "h": 16 }, "frame": { - "x": 293, - "y": 377, + "x": 140, + "y": 16, "w": 16, "h": 16 } @@ -7941,8 +759,8 @@ "h": 16 }, "frame": { - "x": 325, - "y": 361, + "x": 156, + "y": 16, "w": 16, "h": 16 } @@ -7962,8 +780,8 @@ "h": 16 }, "frame": { - "x": 293, - "y": 393, + "x": 172, + "y": 16, "w": 16, "h": 16 } @@ -7983,8 +801,8 @@ "h": 16 }, "frame": { - "x": 309, - "y": 377, + "x": 188, + "y": 16, "w": 16, "h": 16 } @@ -8004,8 +822,8 @@ "h": 16 }, "frame": { - "x": 309, - "y": 393, + "x": 204, + "y": 16, "w": 16, "h": 16 } @@ -8025,12 +843,33 @@ "h": 16 }, "frame": { - "x": 325, - "y": 377, + "x": 220, + "y": 16, "w": 16, "h": 16 } }, + { + "filename": "mega_bracelet", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 8, + "w": 20, + "h": 16 + }, + "frame": { + "x": 236, + "y": 16, + "w": 20, + "h": 16 + } + }, { "filename": "metagrossite", "rotated": false, @@ -8046,8 +885,8 @@ "h": 16 }, "frame": { - "x": 325, - "y": 393, + "x": 256, + "y": 16, "w": 16, "h": 16 } @@ -8067,8 +906,8 @@ "h": 16 }, "frame": { - "x": 281, - "y": 411, + "x": 272, + "y": 16, "w": 16, "h": 16 } @@ -8088,8 +927,8 @@ "h": 16 }, "frame": { - "x": 297, - "y": 409, + "x": 288, + "y": 16, "w": 16, "h": 16 } @@ -8109,8 +948,8 @@ "h": 16 }, "frame": { - "x": 313, - "y": 409, + "x": 304, + "y": 16, "w": 16, "h": 16 } @@ -8130,8 +969,8 @@ "h": 16 }, "frame": { - "x": 329, - "y": 409, + "x": 320, + "y": 16, "w": 16, "h": 16 } @@ -8151,8 +990,8 @@ "h": 16 }, "frame": { - "x": 341, - "y": 361, + "x": 336, + "y": 16, "w": 16, "h": 16 } @@ -8172,12 +1011,33 @@ "h": 16 }, "frame": { - "x": 341, - "y": 377, + "x": 352, + "y": 16, "w": 16, "h": 16 } }, + { + "filename": "relic_band", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 9, + "w": 17, + "h": 16 + }, + "frame": { + "x": 368, + "y": 16, + "w": 17, + "h": 16 + } + }, { "filename": "sablenite", "rotated": false, @@ -8193,8 +1053,8 @@ "h": 16 }, "frame": { - "x": 341, - "y": 393, + "x": 385, + "y": 16, "w": 16, "h": 16 } @@ -8214,8 +1074,8 @@ "h": 16 }, "frame": { - "x": 345, - "y": 409, + "x": 401, + "y": 16, "w": 16, "h": 16 } @@ -8235,8 +1095,8 @@ "h": 16 }, "frame": { - "x": 412, - "y": 361, + "x": 417, + "y": 16, "w": 16, "h": 16 } @@ -8256,8 +1116,8 @@ "h": 16 }, "frame": { - "x": 357, - "y": 363, + "x": 0, + "y": 30, "w": 16, "h": 16 } @@ -8277,8 +1137,8 @@ "h": 16 }, "frame": { - "x": 357, - "y": 379, + "x": 16, + "y": 31, "w": 16, "h": 16 } @@ -8298,8 +1158,8 @@ "h": 16 }, "frame": { - "x": 373, - "y": 363, + "x": 32, + "y": 31, "w": 16, "h": 16 } @@ -8319,8 +1179,8 @@ "h": 16 }, "frame": { - "x": 373, - "y": 379, + "x": 48, + "y": 31, "w": 16, "h": 16 } @@ -8340,8 +1200,8 @@ "h": 16 }, "frame": { - "x": 389, - "y": 363, + "x": 64, + "y": 31, "w": 16, "h": 16 } @@ -8361,8 +1221,8 @@ "h": 16 }, "frame": { - "x": 389, - "y": 379, + "x": 80, + "y": 31, "w": 16, "h": 16 } @@ -8382,8 +1242,8 @@ "h": 16 }, "frame": { - "x": 405, - "y": 377, + "x": 96, + "y": 31, "w": 16, "h": 16 } @@ -8403,8 +1263,8 @@ "h": 16 }, "frame": { - "x": 361, - "y": 395, + "x": 112, + "y": 32, "w": 16, "h": 16 } @@ -8424,11 +1284,7172 @@ "h": 16 }, "frame": { - "x": 377, - "y": 395, + "x": 128, + "y": 32, "w": 16, "h": 16 } + }, + { + "filename": "black_glasses", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 8, + "w": 23, + "h": 17 + }, + "frame": { + "x": 144, + "y": 32, + "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": 167, + "y": 32, + "w": 23, + "h": 17 + } + }, + { + "filename": "chill_drive", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 8, + "w": 23, + "h": 17 + }, + "frame": { + "x": 190, + "y": 32, + "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": 213, + "y": 32, + "w": 23, + "h": 17 + } + }, + { + "filename": "everstone", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 8, + "w": 20, + "h": 17 + }, + "frame": { + "x": 236, + "y": 32, + "w": 20, + "h": 17 + } + }, + { + "filename": "shock_drive", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 8, + "w": 23, + "h": 17 + }, + "frame": { + "x": 256, + "y": 32, + "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": 279, + "y": 32, + "w": 23, + "h": 17 + } + }, + { + "filename": "baton", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 7, + "w": 18, + "h": 18 + }, + "frame": { + "x": 302, + "y": 32, + "w": 18, + "h": 18 + } + }, + { + "filename": "candy", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 11, + "w": 18, + "h": 18 + }, + "frame": { + "x": 320, + "y": 32, + "w": 18, + "h": 18 + } + }, + { + "filename": "choice_specs", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 8, + "w": 24, + "h": 18 + }, + "frame": { + "x": 338, + "y": 32, + "w": 24, + "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": 362, + "y": 32, + "w": 18, + "h": 18 + } + }, + { + "filename": "dragon_scale", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 8, + "w": 24, + "h": 18 + }, + "frame": { + "x": 380, + "y": 32, + "w": 24, + "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": 404, + "y": 32, + "w": 18, + "h": 18 + } + }, + { + "filename": "mystery_egg", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 8, + "w": 16, + "h": 18 + }, + "frame": { + "x": 0, + "y": 46, + "w": 16, + "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": 16, + "y": 47, + "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": 34, + "y": 47, + "w": 18, + "h": 18 + } + }, + { + "filename": "masterpiece_teacup", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 7, + "w": 21, + "h": 18 + }, + "frame": { + "x": 52, + "y": 47, + "w": 21, + "h": 18 + } + }, + { + "filename": "old_gateau", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 8, + "w": 21, + "h": 18 + }, + "frame": { + "x": 73, + "y": 47, + "w": 21, + "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": 94, + "y": 47, + "w": 18, + "h": 18 + } + }, + { + "filename": "relic_crown", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 7, + "w": 23, + "h": 18 + }, + "frame": { + "x": 112, + "y": 48, + "w": 23, + "h": 18 + } + }, + { + "filename": "sharp_meteorite", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 8, + "w": 21, + "h": 18 + }, + "frame": { + "x": 135, + "y": 49, + "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": 156, + "y": 49, + "w": 21, + "h": 18 + } + }, + { + "filename": "wl_ability_urge", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 8, + "w": 20, + "h": 18 + }, + "frame": { + "x": 177, + "y": 49, + "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": 197, + "y": 49, + "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": 217, + "y": 49, + "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": 237, + "y": 49, + "w": 20, + "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": 257, + "y": 49, + "w": 20, + "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": 277, + "y": 49, + "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": 297, + "y": 50, + "w": 20, + "h": 18 + } + }, + { + "filename": "wl_ether", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 8, + "w": 20, + "h": 18 + }, + "frame": { + "x": 317, + "y": 50, + "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": 337, + "y": 50, + "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": 357, + "y": 50, + "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": 377, + "y": 50, + "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": 397, + "y": 50, + "w": 20, + "h": 18 + } + }, + { + "filename": "oval_stone", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 7, + "w": 18, + "h": 19 + }, + "frame": { + "x": 417, + "y": 50, + "w": 18, + "h": 19 + } + }, + { + "filename": "wl_ice_heal", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 8, + "w": 20, + "h": 18 + }, + "frame": { + "x": 0, + "y": 65, + "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": 20, + "y": 65, + "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": 40, + "y": 65, + "w": 20, + "h": 18 + } + }, + { + "filename": "wl_max_elixir", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 8, + "w": 20, + "h": 18 + }, + "frame": { + "x": 60, + "y": 65, + "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": 80, + "y": 65, + "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": 100, + "y": 66, + "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": 120, + "y": 67, + "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": 140, + "y": 67, + "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": 160, + "y": 67, + "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": 180, + "y": 67, + "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": 200, + "y": 67, + "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": 220, + "y": 67, + "w": 20, + "h": 18 + } + }, + { + "filename": "big_mushroom", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 6, + "w": 19, + "h": 19 + }, + "frame": { + "x": 240, + "y": 67, + "w": 19, + "h": 19 + } + }, + { + "filename": "black_sludge", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 7, + "w": 22, + "h": 19 + }, + "frame": { + "x": 259, + "y": 67, + "w": 22, + "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": 281, + "y": 68, + "w": 22, + "h": 19 + } + }, + { + "filename": "coupon", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 7, + "w": 23, + "h": 19 + }, + "frame": { + "x": 303, + "y": 68, + "w": 23, + "h": 19 + } + }, + { + "filename": "dubious_disc", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 7, + "w": 22, + "h": 19 + }, + "frame": { + "x": 326, + "y": 68, + "w": 22, + "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": 348, + "y": 68, + "w": 23, + "h": 19 + } + }, + { + "filename": "lum_berry", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 7, + "w": 20, + "h": 19 + }, + "frame": { + "x": 371, + "y": 68, + "w": 20, + "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": 391, + "y": 68, + "w": 21, + "h": 19 + } + }, + { + "filename": "miracle_seed", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 7, + "w": 19, + "h": 19 + }, + "frame": { + "x": 412, + "y": 69, + "w": 19, + "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": 0, + "y": 83, + "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": 23, + "y": 83, + "w": 23, + "h": 19 + } + }, + { + "filename": "power_herb", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 7, + "w": 20, + "h": 19 + }, + "frame": { + "x": 46, + "y": 83, + "w": 20, + "h": 19 + } + }, + { + "filename": "razor_claw", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 7, + "w": 20, + "h": 19 + }, + "frame": { + "x": 66, + "y": 83, + "w": 20, + "h": 19 + } + }, + { + "filename": "upgrade", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 7, + "w": 22, + "h": 19 + }, + "frame": { + "x": 86, + "y": 84, + "w": 22, + "h": 19 + } + }, + { + "filename": "white_herb", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 7, + "w": 20, + "h": 19 + }, + "frame": { + "x": 108, + "y": 85, + "w": 20, + "h": 19 + } + }, + { + "filename": "apicot_berry", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 6, + "w": 19, + "h": 20 + }, + "frame": { + "x": 128, + "y": 85, + "w": 19, + "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": 147, + "y": 85, + "w": 20, + "h": 20 + } + }, + { + "filename": "binding_band", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 6, + "w": 23, + "h": 20 + }, + "frame": { + "x": 167, + "y": 85, + "w": 23, + "h": 20 + } + }, + { + "filename": "blue_orb", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 6, + "w": 20, + "h": 20 + }, + "frame": { + "x": 190, + "y": 85, + "w": 20, + "h": 20 + } + }, + { + "filename": "candy_jar", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 6, + "w": 19, + "h": 20 + }, + "frame": { + "x": 210, + "y": 85, + "w": 19, + "h": 20 + } + }, + { + "filename": "chipped_pot", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 3, + "y": 6, + "w": 26, + "h": 20 + }, + "frame": { + "x": 229, + "y": 86, + "w": 26, + "h": 20 + } + }, + { + "filename": "cracked_pot", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 3, + "y": 6, + "w": 26, + "h": 20 + }, + "frame": { + "x": 255, + "y": 86, + "w": 26, + "h": 20 + } + }, + { + "filename": "deep_sea_scale", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 6, + "w": 22, + "h": 20 + }, + "frame": { + "x": 281, + "y": 87, + "w": 22, + "h": 20 + } + }, + { + "filename": "fairy_feather", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 7, + "w": 22, + "h": 20 + }, + "frame": { + "x": 303, + "y": 87, + "w": 22, + "h": 20 + } + }, + { + "filename": "gb", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 6, + "w": 20, + "h": 20 + }, + "frame": { + "x": 325, + "y": 87, + "w": 20, + "h": 20 + } + }, + { + "filename": "golden_egg", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 6, + "w": 17, + "h": 20 + }, + "frame": { + "x": 345, + "y": 87, + "w": 17, + "h": 20 + } + }, + { + "filename": "hard_stone", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 6, + "w": 19, + "h": 20 + }, + "frame": { + "x": 362, + "y": 87, + "w": 19, + "h": 20 + } + }, + { + "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": 381, + "y": 87, + "w": 24, + "h": 20 + } + }, + { + "filename": "legend_plate", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 3, + "y": 6, + "w": 25, + "h": 20 + }, + "frame": { + "x": 405, + "y": 88, + "w": 25, + "h": 20 + } + }, + { + "filename": "lucky_egg", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 6, + "w": 17, + "h": 20 + }, + "frame": { + "x": 0, + "y": 102, + "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": 17, + "y": 102, + "w": 20, + "h": 20 + } + }, + { + "filename": "malicious_armor", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 6, + "w": 22, + "h": 20 + }, + "frame": { + "x": 37, + "y": 102, + "w": 22, + "h": 20 + } + }, + { + "filename": "mb", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 6, + "w": 20, + "h": 20 + }, + "frame": { + "x": 59, + "y": 102, + "w": 20, + "h": 20 + } + }, + { + "filename": "metal_powder", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 6, + "w": 24, + "h": 20 + }, + "frame": { + "x": 79, + "y": 103, + "w": 24, + "h": 20 + } + }, + { + "filename": "pb", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 6, + "w": 20, + "h": 20 + }, + "frame": { + "x": 103, + "y": 104, + "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": 123, + "y": 105, + "w": 20, + "h": 20 + } + }, + { + "filename": "pb_silver", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 6, + "w": 20, + "h": 20 + }, + "frame": { + "x": 143, + "y": 105, + "w": 20, + "h": 20 + } + }, + { + "filename": "quick_powder", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 6, + "w": 24, + "h": 20 + }, + "frame": { + "x": 163, + "y": 105, + "w": 24, + "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": 187, + "y": 105, + "w": 18, + "h": 20 + } + }, + { + "filename": "rb", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 6, + "w": 20, + "h": 20 + }, + "frame": { + "x": 205, + "y": 105, + "w": 20, + "h": 20 + } + }, + { + "filename": "reviver_seed", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 8, + "w": 23, + "h": 20 + }, + "frame": { + "x": 225, + "y": 106, + "w": 23, + "h": 20 + } + }, + { + "filename": "rusted_shield", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 6, + "w": 24, + "h": 20 + }, + "frame": { + "x": 248, + "y": 106, + "w": 24, + "h": 20 + } + }, + { + "filename": "sacred_ash", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 7, + "w": 24, + "h": 20 + }, + "frame": { + "x": 272, + "y": 107, + "w": 24, + "h": 20 + } + }, + { + "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": 296, + "y": 107, + "w": 24, + "h": 20 + } + }, + { + "filename": "shell_bell", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 7, + "w": 23, + "h": 20 + }, + "frame": { + "x": 320, + "y": 107, + "w": 23, + "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": 343, + "y": 107, + "w": 20, + "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": 363, + "y": 107, + "w": 24, + "h": 20 + } + }, + { + "filename": "strange_ball", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 6, + "w": 20, + "h": 20 + }, + "frame": { + "x": 387, + "y": 108, + "w": 20, + "h": 20 + } + }, + { + "filename": "tera_orb", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 6, + "w": 22, + "h": 20 + }, + "frame": { + "x": 407, + "y": 108, + "w": 22, + "h": 20 + } + }, + { + "filename": "ub", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 6, + "w": 20, + "h": 20 + }, + "frame": { + "x": 0, + "y": 122, + "w": 20, + "h": 20 + } + }, + { + "filename": "adamant_crystal", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 6, + "w": 23, + "h": 21 + }, + "frame": { + "x": 20, + "y": 122, + "w": 23, + "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": 43, + "y": 122, + "w": 23, + "h": 21 + } + }, + { + "filename": "auspicious_armor", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 5, + "w": 23, + "h": 21 + }, + "frame": { + "x": 66, + "y": 123, + "w": 23, + "h": 21 + } + }, + { + "filename": "berry_juice", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 21 + }, + "frame": { + "x": 89, + "y": 124, + "w": 22, + "h": 21 + } + }, + { + "filename": "dawn_stone", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 6, + "w": 20, + "h": 21 + }, + "frame": { + "x": 111, + "y": 125, + "w": 20, + "h": 21 + } + }, + { + "filename": "deep_sea_tooth", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 6, + "w": 22, + "h": 21 + }, + "frame": { + "x": 131, + "y": 125, + "w": 22, + "h": 21 + } + }, + { + "filename": "dusk_stone", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 6, + "w": 21, + "h": 21 + }, + "frame": { + "x": 153, + "y": 125, + "w": 21, + "h": 21 + } + }, + { + "filename": "flying_tera_shard", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 5, + "w": 20, + "h": 21 + }, + "frame": { + "x": 174, + "y": 125, + "w": 20, + "h": 21 + } + }, + { + "filename": "golden_net", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 5, + "w": 24, + "h": 21 + }, + "frame": { + "x": 194, + "y": 125, + "w": 24, + "h": 21 + } + }, + { + "filename": "liechi_berry", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 6, + "w": 22, + "h": 21 + }, + "frame": { + "x": 218, + "y": 126, + "w": 22, + "h": 21 + } + }, + { + "filename": "mint_atk", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 2, + "y": 5, + "w": 28, + "h": 21 + }, + "frame": { + "x": 240, + "y": 126, + "w": 28, + "h": 21 + } + }, + { + "filename": "mint_def", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 2, + "y": 5, + "w": 28, + "h": 21 + }, + "frame": { + "x": 268, + "y": 127, + "w": 28, + "h": 21 + } + }, + { + "filename": "mint_neutral", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 2, + "y": 5, + "w": 28, + "h": 21 + }, + "frame": { + "x": 296, + "y": 127, + "w": 28, + "h": 21 + } + }, + { + "filename": "mint_spatk", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 2, + "y": 5, + "w": 28, + "h": 21 + }, + "frame": { + "x": 324, + "y": 127, + "w": 28, + "h": 21 + } + }, + { + "filename": "mint_spd", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 2, + "y": 5, + "w": 28, + "h": 21 + }, + "frame": { + "x": 352, + "y": 127, + "w": 28, + "h": 21 + } + }, + { + "filename": "mint_spdef", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 2, + "y": 5, + "w": 28, + "h": 21 + }, + "frame": { + "x": 380, + "y": 128, + "w": 28, + "h": 21 + } + }, + { + "filename": "moon_stone", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 6, + "w": 23, + "h": 21 + }, + "frame": { + "x": 408, + "y": 128, + "w": 23, + "h": 21 + } + }, + { + "filename": "quick_claw", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 6, + "w": 19, + "h": 21 + }, + "frame": { + "x": 0, + "y": 142, + "w": 19, + "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": 19, + "y": 143, + "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": 42, + "y": 143, + "w": 23, + "h": 21 + } + }, + { + "filename": "poison_barb", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 6, + "w": 21, + "h": 21 + }, + "frame": { + "x": 65, + "y": 144, + "w": 21, + "h": 21 + } + }, + { + "filename": "shiny_stone", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 6, + "w": 21, + "h": 21 + }, + "frame": { + "x": 86, + "y": 145, + "w": 21, + "h": 21 + } + }, + { + "filename": "spell_tag", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 6, + "w": 19, + "h": 21 + }, + "frame": { + "x": 107, + "y": 146, + "w": 19, + "h": 21 + } + }, + { + "filename": "sweet_apple", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 6, + "w": 22, + "h": 21 + }, + "frame": { + "x": 126, + "y": 146, + "w": 22, + "h": 21 + } + }, + { + "filename": "syrupy_apple", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 6, + "w": 22, + "h": 21 + }, + "frame": { + "x": 148, + "y": 146, + "w": 22, + "h": 21 + } + }, + { + "filename": "tart_apple", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 6, + "w": 22, + "h": 21 + }, + "frame": { + "x": 170, + "y": 146, + "w": 22, + "h": 21 + } + }, + { + "filename": "wellspring_mask", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 5, + "w": 23, + "h": 21 + }, + "frame": { + "x": 192, + "y": 146, + "w": 23, + "h": 21 + } + }, + { + "filename": "zoom_lens", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 6, + "w": 21, + "h": 21 + }, + "frame": { + "x": 215, + "y": 147, + "w": 21, + "h": 21 + } + }, + { + "filename": "berry_pot", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 5, + "w": 18, + "h": 22 + }, + "frame": { + "x": 236, + "y": 147, + "w": 18, + "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": 254, + "y": 148, + "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": 276, + "y": 148, + "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": 298, + "y": 148, + "w": 22, + "h": 22 + } + }, + { + "filename": "dire_hit", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 320, + "y": 148, + "w": 22, + "h": 22 + } + }, + { + "filename": "dna_splicers", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 342, + "y": 148, + "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": 364, + "y": 148, + "w": 15, + "h": 22 + } + }, + { + "filename": "dragon_memory", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 379, + "y": 149, + "w": 22, + "h": 22 + } + }, + { + "filename": "electirizer", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 401, + "y": 149, + "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": 0, + "y": 163, + "w": 19, + "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": 19, + "y": 164, + "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": 41, + "y": 164, + "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": 63, + "y": 165, + "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": 85, + "y": 166, + "w": 22, + "h": 22 + } + }, + { + "filename": "exp_balance", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 5, + "w": 24, + "h": 22 + }, + "frame": { + "x": 107, + "y": 167, + "w": 24, + "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": 131, + "y": 167, + "w": 24, + "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": 155, + "y": 167, + "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": 177, + "y": 167, + "w": 22, + "h": 22 + } + }, + { + "filename": "full_heal", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 9, + "y": 4, + "w": 15, + "h": 23 + }, + "frame": { + "x": 199, + "y": 167, + "w": 15, + "h": 23 + } + }, + { + "filename": "ganlon_berry", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 214, + "y": 168, + "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": 236, + "y": 169, + "w": 17, + "h": 22 + } + }, + { + "filename": "ghost_memory", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 253, + "y": 170, + "w": 22, + "h": 22 + } + }, + { + "filename": "grass_memory", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 275, + "y": 170, + "w": 22, + "h": 22 + } + }, + { + "filename": "ground_memory", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 297, + "y": 170, + "w": 22, + "h": 22 + } + }, + { + "filename": "guard_spec", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 319, + "y": 170, + "w": 22, + "h": 22 + } + }, + { + "filename": "hard_meteorite", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 5, + "w": 20, + "h": 22 + }, + "frame": { + "x": 341, + "y": 170, + "w": 20, + "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": 361, + "y": 170, + "w": 17, + "h": 22 + } + }, + { + "filename": "healing_charm", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 23, + "h": 22 + }, + "frame": { + "x": 378, + "y": 171, + "w": 23, + "h": 22 + } + }, + { + "filename": "ice_memory", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 401, + "y": 171, + "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": 0, + "y": 185, + "w": 19, + "h": 22 + } + }, + { + "filename": "ice_stone", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 19, + "y": 186, + "w": 22, + "h": 22 + } + }, + { + "filename": "magmarizer", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 41, + "y": 186, + "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": 63, + "y": 187, + "w": 22, + "h": 22 + } + }, + { + "filename": "moon_flute", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 85, + "y": 188, + "w": 22, + "h": 22 + } + }, + { + "filename": "map", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 3, + "y": 5, + "w": 27, + "h": 22 + }, + "frame": { + "x": 107, + "y": 189, + "w": 27, + "h": 22 + } + }, + { + "filename": "normal_memory", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 134, + "y": 189, + "w": 22, + "h": 22 + } + }, + { + "filename": "peat_block", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 5, + "w": 24, + "h": 22 + }, + "frame": { + "x": 156, + "y": 189, + "w": 24, + "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": 180, + "y": 189, + "w": 17, + "h": 23 + } + }, + { + "filename": "poison_memory", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 197, + "y": 190, + "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": 219, + "y": 190, + "w": 17, + "h": 23 + } + }, + { + "filename": "protector", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 236, + "y": 192, + "w": 22, + "h": 22 + } + }, + { + "filename": "psychic_memory", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 258, + "y": 192, + "w": 22, + "h": 22 + } + }, + { + "filename": "rock_memory", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 280, + "y": 192, + "w": 22, + "h": 22 + } + }, + { + "filename": "rusted_sword", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 5, + "w": 23, + "h": 22 + }, + "frame": { + "x": 302, + "y": 192, + "w": 23, + "h": 22 + } + }, + { + "filename": "scroll_of_darkness", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 325, + "y": 192, + "w": 22, + "h": 22 + } + }, + { + "filename": "scroll_of_waters", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 347, + "y": 192, + "w": 22, + "h": 22 + } + }, + { + "filename": "shed_shell", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 369, + "y": 193, + "w": 22, + "h": 22 + } + }, + { + "filename": "sitrus_berry", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 5, + "w": 20, + "h": 22 + }, + "frame": { + "x": 391, + "y": 193, + "w": 20, + "h": 22 + } + }, + { + "filename": "starf_berry", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 411, + "y": 193, + "w": 22, + "h": 22 + } + }, + { + "filename": "sachet", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 4, + "w": 18, + "h": 23 + }, + "frame": { + "x": 0, + "y": 207, + "w": 18, + "h": 23 + } + }, + { + "filename": "steel_memory", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 18, + "y": 208, + "w": 22, + "h": 22 + } + }, + { + "filename": "sun_flute", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 40, + "y": 208, + "w": 22, + "h": 22 + } + }, + { + "filename": "thick_club", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 62, + "y": 209, + "w": 22, + "h": 22 + } + }, + { + "filename": "thunder_stone", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 84, + "y": 210, + "w": 22, + "h": 22 + } + }, + { + "filename": "tm_bug", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 106, + "y": 211, + "w": 22, + "h": 22 + } + }, + { + "filename": "tm_dark", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 128, + "y": 211, + "w": 22, + "h": 22 + } + }, + { + "filename": "tm_dragon", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 150, + "y": 211, + "w": 22, + "h": 22 + } + }, + { + "filename": "tm_electric", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 172, + "y": 212, + "w": 22, + "h": 22 + } + }, + { + "filename": "tm_fairy", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 194, + "y": 212, + "w": 22, + "h": 22 + } + }, + { + "filename": "mystic_water", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 5, + "w": 20, + "h": 23 + }, + "frame": { + "x": 216, + "y": 213, + "w": 20, + "h": 23 + } + }, + { + "filename": "tm_fighting", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 236, + "y": 214, + "w": 22, + "h": 22 + } + }, + { + "filename": "tm_fire", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 258, + "y": 214, + "w": 22, + "h": 22 + } + }, + { + "filename": "tm_flying", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 280, + "y": 214, + "w": 22, + "h": 22 + } + }, + { + "filename": "tm_ghost", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 302, + "y": 214, + "w": 22, + "h": 22 + } + }, + { + "filename": "tm_grass", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 324, + "y": 214, + "w": 22, + "h": 22 + } + }, + { + "filename": "tm_ground", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 346, + "y": 214, + "w": 22, + "h": 22 + } + }, + { + "filename": "tm_ice", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 368, + "y": 215, + "w": 22, + "h": 22 + } + }, + { + "filename": "tm_normal", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 390, + "y": 215, + "w": 22, + "h": 22 + } + }, + { + "filename": "tm_poison", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 412, + "y": 215, + "w": 22, + "h": 22 + } + }, + { + "filename": "tm_psychic", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 0, + "y": 230, + "w": 22, + "h": 22 + } + }, + { + "filename": "tm_rock", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 22, + "y": 230, + "w": 22, + "h": 22 + } + }, + { + "filename": "super_potion", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 5, + "w": 17, + "h": 23 + }, + "frame": { + "x": 44, + "y": 230, + "w": 17, + "h": 23 + } + }, + { + "filename": "tm_steel", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 61, + "y": 231, + "w": 22, + "h": 22 + } + }, + { + "filename": "tm_water", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 83, + "y": 232, + "w": 22, + "h": 22 + } + }, + { + "filename": "water_memory", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 105, + "y": 233, + "w": 22, + "h": 22 + } + }, + { + "filename": "water_stone", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 127, + "y": 233, + "w": 22, + "h": 22 + } + }, + { + "filename": "x_accuracy", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 149, + "y": 233, + "w": 22, + "h": 22 + } + }, + { + "filename": "x_attack", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 171, + "y": 234, + "w": 22, + "h": 22 + } + }, + { + "filename": "x_defense", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 193, + "y": 234, + "w": 22, + "h": 22 + } + }, + { + "filename": "x_sp_atk", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 215, + "y": 236, + "w": 22, + "h": 22 + } + }, + { + "filename": "x_sp_def", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 237, + "y": 236, + "w": 22, + "h": 22 + } + }, + { + "filename": "x_speed", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 22 + }, + "frame": { + "x": 259, + "y": 236, + "w": 22, + "h": 22 + } + }, + { + "filename": "berry_pouch", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 5, + "w": 23, + "h": 23 + }, + "frame": { + "x": 281, + "y": 236, + "w": 23, + "h": 23 + } + }, + { + "filename": "black_belt", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 4, + "w": 22, + "h": 23 + }, + "frame": { + "x": 304, + "y": 236, + "w": 22, + "h": 23 + } + }, + { + "filename": "bug_tera_shard", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 4, + "w": 22, + "h": 23 + }, + "frame": { + "x": 326, + "y": 236, + "w": 22, + "h": 23 + } + }, + { + "filename": "calcium", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 4, + "w": 16, + "h": 24 + }, + "frame": { + "x": 348, + "y": 236, + "w": 16, + "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": 364, + "y": 237, + "w": 24, + "h": 23 + } + }, + { + "filename": "coin_case", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 5, + "w": 24, + "h": 23 + }, + "frame": { + "x": 388, + "y": 237, + "w": 24, + "h": 23 + } + }, + { + "filename": "dark_tera_shard", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 4, + "w": 22, + "h": 23 + }, + "frame": { + "x": 412, + "y": 237, + "w": 22, + "h": 23 + } + }, + { + "filename": "dragon_fang", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 21, + "h": 23 + }, + "frame": { + "x": 0, + "y": 252, + "w": 21, + "h": 23 + } + }, + { + "filename": "dragon_tera_shard", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 4, + "w": 22, + "h": 23 + }, + "frame": { + "x": 21, + "y": 252, + "w": 22, + "h": 23 + } + }, + { + "filename": "dynamax_band", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 4, + "w": 23, + "h": 23 + }, + "frame": { + "x": 43, + "y": 253, + "w": 23, + "h": 23 + } + }, + { + "filename": "carbos", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 4, + "w": 16, + "h": 24 + }, + "frame": { + "x": 66, + "y": 253, + "w": 16, + "h": 24 + } + }, + { + "filename": "electric_tera_shard", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 4, + "w": 22, + "h": 23 + }, + "frame": { + "x": 82, + "y": 254, + "w": 22, + "h": 23 + } + }, + { + "filename": "expert_belt", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 4, + "w": 24, + "h": 23 + }, + "frame": { + "x": 104, + "y": 255, + "w": 24, + "h": 23 + } + }, + { + "filename": "fairy_tera_shard", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 4, + "w": 22, + "h": 23 + }, + "frame": { + "x": 128, + "y": 255, + "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": 150, + "y": 255, + "w": 21, + "h": 23 + } + }, + { + "filename": "fighting_tera_shard", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 4, + "w": 22, + "h": 23 + }, + "frame": { + "x": 171, + "y": 256, + "w": 22, + "h": 23 + } + }, + { + "filename": "fire_stone", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 23 + }, + "frame": { + "x": 193, + "y": 256, + "w": 22, + "h": 23 + } + }, + { + "filename": "fire_tera_shard", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 4, + "w": 22, + "h": 23 + }, + "frame": { + "x": 215, + "y": 258, + "w": 22, + "h": 23 + } + }, + { + "filename": "focus_sash", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 4, + "w": 22, + "h": 23 + }, + "frame": { + "x": 237, + "y": 258, + "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": 259, + "y": 258, + "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": 281, + "y": 259, + "w": 22, + "h": 23 + } + }, + { + "filename": "griseous_core", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 23, + "h": 23 + }, + "frame": { + "x": 303, + "y": 259, + "w": 23, + "h": 23 + } + }, + { + "filename": "ground_tera_shard", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 4, + "w": 22, + "h": 23 + }, + "frame": { + "x": 326, + "y": 259, + "w": 22, + "h": 23 + } + }, + { + "filename": "hearthflame_mask", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 4, + "w": 24, + "h": 23 + }, + "frame": { + "x": 348, + "y": 260, + "w": 24, + "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": 372, + "y": 260, + "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": 394, + "y": 260, + "w": 21, + "h": 23 + } + }, + { + "filename": "elixir", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 4, + "w": 18, + "h": 24 + }, + "frame": { + "x": 415, + "y": 260, + "w": 18, + "h": 24 + } + }, + { + "filename": "leek", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 5, + "w": 23, + "h": 23 + }, + "frame": { + "x": 0, + "y": 275, + "w": 23, + "h": 23 + } + }, + { + "filename": "ether", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 4, + "w": 18, + "h": 24 + }, + "frame": { + "x": 23, + "y": 275, + "w": 18, + "h": 24 + } + }, + { + "filename": "leppa_berry", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 5, + "w": 24, + "h": 23 + }, + "frame": { + "x": 41, + "y": 276, + "w": 24, + "h": 23 + } + }, + { + "filename": "macho_brace", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 5, + "w": 23, + "h": 23 + }, + "frame": { + "x": 65, + "y": 277, + "w": 23, + "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": 88, + "y": 277, + "w": 16, + "h": 24 + } + }, + { + "filename": "never_melt_ice", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 23 + }, + "frame": { + "x": 104, + "y": 278, + "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": 126, + "y": 278, + "w": 22, + "h": 23 + } + }, + { + "filename": "petaya_berry", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 23 + }, + "frame": { + "x": 148, + "y": 278, + "w": 22, + "h": 23 + } + }, + { + "filename": "poison_tera_shard", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 4, + "w": 22, + "h": 23 + }, + "frame": { + "x": 170, + "y": 279, + "w": 22, + "h": 23 + } + }, + { + "filename": "psychic_tera_shard", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 4, + "w": 22, + "h": 23 + }, + "frame": { + "x": 192, + "y": 279, + "w": 22, + "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": 214, + "y": 281, + "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": 237, + "y": 281, + "w": 23, + "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": 260, + "y": 281, + "w": 21, + "h": 23 + } + }, + { + "filename": "reaper_cloth", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 5, + "w": 22, + "h": 23 + }, + "frame": { + "x": 281, + "y": 282, + "w": 22, + "h": 23 + } + }, + { + "filename": "rock_tera_shard", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 4, + "w": 22, + "h": 23 + }, + "frame": { + "x": 303, + "y": 282, + "w": 22, + "h": 23 + } + }, + { + "filename": "steel_tera_shard", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 4, + "w": 22, + "h": 23 + }, + "frame": { + "x": 325, + "y": 282, + "w": 22, + "h": 23 + } + }, + { + "filename": "scope_lens", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 5, + "w": 24, + "h": 23 + }, + "frame": { + "x": 347, + "y": 283, + "w": 24, + "h": 23 + } + }, + { + "filename": "stellar_tera_shard", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 4, + "w": 22, + "h": 23 + }, + "frame": { + "x": 371, + "y": 283, + "w": 22, + "h": 23 + } + }, + { + "filename": "water_tera_shard", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 6, + "y": 4, + "w": 22, + "h": 23 + }, + "frame": { + "x": 393, + "y": 283, + "w": 22, + "h": 23 + } + }, + { + "filename": "full_restore", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 4, + "w": 18, + "h": 24 + }, + "frame": { + "x": 415, + "y": 284, + "w": 18, + "h": 24 + } + }, + { + "filename": "whipped_dream", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 4, + "w": 21, + "h": 23 + }, + "frame": { + "x": 0, + "y": 298, + "w": 21, + "h": 23 + } + }, + { + "filename": "twisted_spoon", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 5, + "w": 24, + "h": 23 + }, + "frame": { + "x": 21, + "y": 299, + "w": 24, + "h": 23 + } + }, + { + "filename": "iron", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 4, + "w": 16, + "h": 24 + }, + "frame": { + "x": 45, + "y": 299, + "w": 16, + "h": 24 + } + }, + { + "filename": "wide_lens", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 4, + "w": 22, + "h": 23 + }, + "frame": { + "x": 61, + "y": 300, + "w": 22, + "h": 23 + } + }, + { + "filename": "big_root", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 4, + "w": 23, + "h": 24 + }, + "frame": { + "x": 83, + "y": 301, + "w": 23, + "h": 24 + } + }, + { + "filename": "blank_plate", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 4, + "w": 24, + "h": 24 + }, + "frame": { + "x": 106, + "y": 301, + "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": 130, + "y": 301, + "w": 21, + "h": 24 + } + }, + { + "filename": "lure", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 4, + "w": 17, + "h": 24 + }, + "frame": { + "x": 151, + "y": 301, + "w": 17, + "h": 24 + } + }, + { + "filename": "choice_scarf", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 4, + "w": 24, + "h": 24 + }, + "frame": { + "x": 168, + "y": 302, + "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": 192, + "y": 302, + "w": 18, + "h": 24 + } + }, + { + "filename": "draco_plate", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 4, + "w": 24, + "h": 24 + }, + "frame": { + "x": 210, + "y": 304, + "w": 24, + "h": 24 + } + }, + { + "filename": "dread_plate", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 4, + "w": 24, + "h": 24 + }, + "frame": { + "x": 234, + "y": 304, + "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": 258, + "y": 304, + "w": 23, + "h": 24 + } + }, + { + "filename": "earth_plate", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 4, + "w": 24, + "h": 24 + }, + "frame": { + "x": 281, + "y": 305, + "w": 24, + "h": 24 + } + }, + { + "filename": "fist_plate", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 4, + "w": 24, + "h": 24 + }, + "frame": { + "x": 305, + "y": 305, + "w": 24, + "h": 24 + } + }, + { + "filename": "max_ether", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 4, + "w": 18, + "h": 24 + }, + "frame": { + "x": 329, + "y": 305, + "w": 18, + "h": 24 + } + }, + { + "filename": "flame_plate", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 4, + "w": 24, + "h": 24 + }, + "frame": { + "x": 347, + "y": 306, + "w": 24, + "h": 24 + } + }, + { + "filename": "focus_band", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 4, + "w": 24, + "h": 24 + }, + "frame": { + "x": 371, + "y": 306, + "w": 24, + "h": 24 + } + }, + { + "filename": "max_lure", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 4, + "w": 17, + "h": 24 + }, + "frame": { + "x": 395, + "y": 306, + "w": 17, + "h": 24 + } + }, + { + "filename": "max_potion", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 4, + "w": 18, + "h": 24 + }, + "frame": { + "x": 412, + "y": 308, + "w": 18, + "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": 0, + "y": 321, + "w": 16, + "h": 24 + } + }, + { + "filename": "golden_punch", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 4, + "w": 24, + "h": 24 + }, + "frame": { + "x": 16, + "y": 322, + "w": 24, + "h": 24 + } + }, + { + "filename": "gracidea", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 4, + "w": 24, + "h": 24 + }, + "frame": { + "x": 40, + "y": 323, + "w": 24, + "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": 64, + "y": 323, + "w": 16, + "h": 24 + } + }, + { + "filename": "grip_claw", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 4, + "w": 24, + "h": 24 + }, + "frame": { + "x": 80, + "y": 325, + "w": 24, + "h": 24 + } + }, + { + "filename": "icicle_plate", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 4, + "w": 24, + "h": 24 + }, + "frame": { + "x": 104, + "y": 325, + "w": 24, + "h": 24 + } + }, + { + "filename": "insect_plate", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 4, + "w": 24, + "h": 24 + }, + "frame": { + "x": 128, + "y": 325, + "w": 24, + "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": 152, + "y": 325, + "w": 16, + "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": 168, + "y": 326, + "w": 24, + "h": 24 + } + }, + { + "filename": "protein", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 4, + "w": 16, + "h": 24 + }, + "frame": { + "x": 192, + "y": 326, + "w": 16, + "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": 208, + "y": 328, + "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": 232, + "y": 328, + "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": 256, + "y": 328, + "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": 280, + "y": 329, + "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": 304, + "y": 329, + "w": 24, + "h": 24 + } + }, + { + "filename": "repel", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 4, + "w": 16, + "h": 24 + }, + "frame": { + "x": 328, + "y": 329, + "w": 16, + "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": 344, + "y": 330, + "w": 22, + "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": 366, + "y": 330, + "w": 24, + "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": 390, + "y": 330, + "w": 21, + "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": 411, + "y": 332, + "w": 24, + "h": 24 + } + }, + { + "filename": "super_repel", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 4, + "w": 16, + "h": 24 + }, + "frame": { + "x": 0, + "y": 345, + "w": 16, + "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": 16, + "y": 346, + "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": 40, + "y": 347, + "w": 24, + "h": 24 + } + }, + { + "filename": "unknown", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 4, + "w": 16, + "h": 24 + }, + "frame": { + "x": 64, + "y": 347, + "w": 16, + "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": 80, + "y": 349, + "w": 20, + "h": 24 + } + }, + { + "filename": "reveal_glass", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 4, + "w": 23, + "h": 24 + }, + "frame": { + "x": 100, + "y": 349, + "w": 23, + "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": 123, + "y": 349, + "w": 24, + "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": 147, + "y": 349, + "w": 21, + "h": 24 + } + }, + { + "filename": "scanner", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 4, + "w": 24, + "h": 24 + }, + "frame": { + "x": 168, + "y": 350, + "w": 24, + "h": 24 + } + }, + { + "filename": "zinc", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 8, + "y": 4, + "w": 16, + "h": 24 + }, + "frame": { + "x": 192, + "y": 350, + "w": 16, + "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": 208, + "y": 352, + "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": 232, + "y": 352, + "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": 256, + "y": 352, + "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": 280, + "y": 353, + "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": 304, + "y": 353, + "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": 328, + "y": 354, + "w": 24, + "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": 352, + "y": 354, + "w": 17, + "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": 369, + "y": 354, + "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": 393, + "y": 356, + "w": 24, + "h": 24 + } + }, + { + "filename": "prison_bottle", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 1, + "w": 17, + "h": 30 + }, + "frame": { + "x": 417, + "y": 356, + "w": 17, + "h": 30 + } + }, + { + "filename": "black_augurite", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 3, + "w": 22, + "h": 25 + }, + "frame": { + "x": 0, + "y": 370, + "w": 22, + "h": 25 + } + }, + { + "filename": "ability_charm", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 3, + "y": 3, + "w": 23, + "h": 26 + }, + "frame": { + "x": 22, + "y": 371, + "w": 23, + "h": 26 + } + }, + { + "filename": "cornerstone_mask", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 4, + "y": 3, + "w": 24, + "h": 26 + }, + "frame": { + "x": 45, + "y": 371, + "w": 24, + "h": 26 + } + }, + { + "filename": "linking_cord", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 3, + "y": 3, + "w": 27, + "h": 26 + }, + "frame": { + "x": 69, + "y": 373, + "w": 27, + "h": 26 + } + }, + { + "filename": "mystical_rock", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 2, + "y": 3, + "w": 28, + "h": 26 + }, + "frame": { + "x": 96, + "y": 373, + "w": 28, + "h": 26 + } + }, + { + "filename": "galarica_wreath", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 0, + "y": 3, + "w": 32, + "h": 27 + }, + "frame": { + "x": 124, + "y": 373, + "w": 32, + "h": 27 + } + }, + { + "filename": "leaders_crest", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 2, + "y": 3, + "w": 29, + "h": 27 + }, + "frame": { + "x": 156, + "y": 374, + "w": 29, + "h": 27 + } + }, + { + "filename": "ribbon_gen1", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 2, + "w": 22, + "h": 28 + }, + "frame": { + "x": 185, + "y": 374, + "w": 22, + "h": 28 + } + }, + { + "filename": "max_mushrooms", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 1, + "y": 3, + "w": 29, + "h": 28 + }, + "frame": { + "x": 207, + "y": 376, + "w": 29, + "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": 236, + "y": 376, + "w": 28, + "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": 264, + "y": 377, + "w": 30, + "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": 294, + "y": 377, + "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": 316, + "y": 378, + "w": 22, + "h": 28 + } + }, + { + "filename": "ribbon_gen8", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 2, + "w": 22, + "h": 28 + }, + "frame": { + "x": 338, + "y": 378, + "w": 22, + "h": 28 + } + }, + { + "filename": "ribbon_gen3", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 1, + "w": 22, + "h": 29 + }, + "frame": { + "x": 360, + "y": 378, + "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": 382, + "y": 380, + "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": 404, + "y": 386, + "w": 22, + "h": 29 + } + }, + { + "filename": "inverse", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 1, + "w": 22, + "h": 30 + }, + "frame": { + "x": 0, + "y": 395, + "w": 22, + "h": 30 + } + }, + { + "filename": "galarica_cuff", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 1, + "y": 1, + "w": 29, + "h": 30 + }, + "frame": { + "x": 22, + "y": 397, + "w": 29, + "h": 30 + } + }, + { + "filename": "exp_charm", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 7, + "y": 1, + "w": 17, + "h": 31 + }, + "frame": { + "x": 51, + "y": 397, + "w": 17, + "h": 31 + } + }, + { + "filename": "bronze_ribbon", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 1, + "w": 22, + "h": 31 + }, + "frame": { + "x": 68, + "y": 399, + "w": 22, + "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": 90, + "y": 399, + "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": 107, + "y": 399, + "w": 17, + "h": 31 + } + }, + { + "filename": "great_ribbon", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 1, + "w": 22, + "h": 31 + }, + "frame": { + "x": 124, + "y": 400, + "w": 22, + "h": 31 + } + }, + { + "filename": "master_ribbon", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 1, + "w": 22, + "h": 31 + }, + "frame": { + "x": 146, + "y": 401, + "w": 22, + "h": 31 + } + }, + { + "filename": "rogue_ribbon", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 1, + "w": 22, + "h": 31 + }, + "frame": { + "x": 168, + "y": 402, + "w": 22, + "h": 31 + } + }, + { + "filename": "ultra_ribbon", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 32, + "h": 32 + }, + "spriteSourceSize": { + "x": 5, + "y": 1, + "w": 22, + "h": 31 + }, + "frame": { + "x": 190, + "y": 404, + "w": 22, + "h": 31 + } } ] } @@ -8436,6 +8457,6 @@ "meta": { "app": "https://www.codeandweb.com/texturepacker", "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:d91a46c431ace3f09f5ca68916a2171e:1e84369d9a13e1416fa58028d629d116:110e074689c9edd2c54833ce2e4d9270$" + "smartupdate": "$TexturePacker:SmartUpdate:7b927dc715c6335dfca9e369b61374b2:fb24603dd37bbe0cbdf1d74fcbcbd223:110e074689c9edd2c54833ce2e4d9270$" } } diff --git a/public/images/items.png b/public/images/items.png index 191766f520e..4433ce43a40 100644 Binary files a/public/images/items.png and b/public/images/items.png differ diff --git a/public/images/items/ability_capsule.png b/public/images/items/ability_capsule.png index 06b6b3e173d..ee8aec6b346 100644 Binary files a/public/images/items/ability_capsule.png and b/public/images/items/ability_capsule.png differ diff --git a/public/images/items/ability_charm.png b/public/images/items/ability_charm.png index 943783ba348..2e9e0368667 100644 Binary files a/public/images/items/ability_charm.png and b/public/images/items/ability_charm.png differ diff --git a/public/images/items/abomasite.png b/public/images/items/abomasite.png index 09177d97a44..0758786bb0f 100644 Binary files a/public/images/items/abomasite.png and b/public/images/items/abomasite.png differ diff --git a/public/images/items/absolite.png b/public/images/items/absolite.png index 617969f6037..f7fe8b7ac12 100644 Binary files a/public/images/items/absolite.png and b/public/images/items/absolite.png differ diff --git a/public/images/items/adamant_crystal.png b/public/images/items/adamant_crystal.png index d729c40ce25..eb35af1540e 100644 Binary files a/public/images/items/adamant_crystal.png and b/public/images/items/adamant_crystal.png differ diff --git a/public/images/items/aerodactylite.png b/public/images/items/aerodactylite.png index 1cf5e028d6f..4feb04f3702 100644 Binary files a/public/images/items/aerodactylite.png and b/public/images/items/aerodactylite.png differ diff --git a/public/images/items/aggronite.png b/public/images/items/aggronite.png index 18eb9d86270..8feb64633ec 100644 Binary files a/public/images/items/aggronite.png and b/public/images/items/aggronite.png differ diff --git a/public/images/items/alakazite.png b/public/images/items/alakazite.png index 02d8ff580f4..ed6acab02ca 100644 Binary files a/public/images/items/alakazite.png and b/public/images/items/alakazite.png differ diff --git a/public/images/items/altarianite.png b/public/images/items/altarianite.png index 8d2436bc24a..0bb6be23819 100644 Binary files a/public/images/items/altarianite.png and b/public/images/items/altarianite.png differ diff --git a/public/images/items/ampharosite.png b/public/images/items/ampharosite.png index 5ff26217d23..3084c05c1a9 100644 Binary files a/public/images/items/ampharosite.png and b/public/images/items/ampharosite.png differ diff --git a/public/images/items/amulet_coin.png b/public/images/items/amulet_coin.png index 88ce369def5..3cda2b2a53b 100644 Binary files a/public/images/items/amulet_coin.png and b/public/images/items/amulet_coin.png differ diff --git a/public/images/items/apicot_berry.png b/public/images/items/apicot_berry.png index 2cfa66acdfa..4719671eaf3 100644 Binary files a/public/images/items/apicot_berry.png and b/public/images/items/apicot_berry.png differ diff --git a/public/images/items/audinite.png b/public/images/items/audinite.png index 51fdc9310b0..f7c21bf8e3b 100644 Binary files a/public/images/items/audinite.png and b/public/images/items/audinite.png differ diff --git a/public/images/items/auspicious_armor.png b/public/images/items/auspicious_armor.png index e3620bb6054..27c40ae0bd0 100644 Binary files a/public/images/items/auspicious_armor.png and b/public/images/items/auspicious_armor.png differ diff --git a/public/images/items/banettite.png b/public/images/items/banettite.png index 20704d624c2..b6bcadd72fc 100644 Binary files a/public/images/items/banettite.png and b/public/images/items/banettite.png differ diff --git a/public/images/items/baton.png b/public/images/items/baton.png index 8e9ebfae06d..ece81f82b2f 100644 Binary files a/public/images/items/baton.png and b/public/images/items/baton.png differ diff --git a/public/images/items/beedrillite.png b/public/images/items/beedrillite.png index 3dd1444bf76..99e516446d7 100644 Binary files a/public/images/items/beedrillite.png and b/public/images/items/beedrillite.png differ diff --git a/public/images/items/berry_juice.png b/public/images/items/berry_juice.png index 127fa458906..2f6272eca7c 100644 Binary files a/public/images/items/berry_juice.png and b/public/images/items/berry_juice.png differ diff --git a/public/images/items/berry_pot.png b/public/images/items/berry_pot.png index 5841ef1c324..3cb9b90dc53 100644 Binary files a/public/images/items/berry_pot.png and b/public/images/items/berry_pot.png differ diff --git a/public/images/items/berry_pouch.png b/public/images/items/berry_pouch.png index 878ef600239..d14d71358a9 100644 Binary files a/public/images/items/berry_pouch.png and b/public/images/items/berry_pouch.png differ diff --git a/public/images/items/big_mushroom.png b/public/images/items/big_mushroom.png index 4384c7933b3..eb203a7374c 100644 Binary files a/public/images/items/big_mushroom.png and b/public/images/items/big_mushroom.png differ diff --git a/public/images/items/big_nugget.png b/public/images/items/big_nugget.png index 54a5456ad60..e8839daa0b6 100644 Binary files a/public/images/items/big_nugget.png and b/public/images/items/big_nugget.png differ diff --git a/public/images/items/big_root.png b/public/images/items/big_root.png index 37eeb5c2f93..24b863ee238 100644 Binary files a/public/images/items/big_root.png and b/public/images/items/big_root.png differ diff --git a/public/images/items/binding_band.png b/public/images/items/binding_band.png index f634b02053d..b33256b7b8c 100644 Binary files a/public/images/items/binding_band.png and b/public/images/items/binding_band.png differ diff --git a/public/images/items/black_augurite.png b/public/images/items/black_augurite.png index e8531a1a8cf..b34127e2942 100644 Binary files a/public/images/items/black_augurite.png and b/public/images/items/black_augurite.png differ diff --git a/public/images/items/black_belt.png b/public/images/items/black_belt.png index 70d13097882..9dde3ff83cd 100644 Binary files a/public/images/items/black_belt.png and b/public/images/items/black_belt.png differ diff --git a/public/images/items/black_glasses.png b/public/images/items/black_glasses.png index 52fe0e60a1e..4b18d828964 100644 Binary files a/public/images/items/black_glasses.png and b/public/images/items/black_glasses.png differ diff --git a/public/images/items/black_sludge.png b/public/images/items/black_sludge.png index 37aa31de43e..fe308586dd3 100644 Binary files a/public/images/items/black_sludge.png and b/public/images/items/black_sludge.png differ diff --git a/public/images/items/blank_plate.png b/public/images/items/blank_plate.png index ec82203340c..c08d25aa3c3 100644 Binary files a/public/images/items/blank_plate.png and b/public/images/items/blank_plate.png differ diff --git a/public/images/items/blastoisinite.png b/public/images/items/blastoisinite.png index 6b8310610e8..ea2ddef0640 100644 Binary files a/public/images/items/blastoisinite.png and b/public/images/items/blastoisinite.png differ diff --git a/public/images/items/blazikenite.png b/public/images/items/blazikenite.png index f14b108de60..9b6e9e59212 100644 Binary files a/public/images/items/blazikenite.png and b/public/images/items/blazikenite.png differ diff --git a/public/images/items/blue_orb.png b/public/images/items/blue_orb.png index 91094d82147..34c19c8aea8 100644 Binary files a/public/images/items/blue_orb.png and b/public/images/items/blue_orb.png differ diff --git a/public/images/items/blunder_policy.png b/public/images/items/blunder_policy.png index c1e2e380648..8d5b11cb3f6 100644 Binary files a/public/images/items/blunder_policy.png and b/public/images/items/blunder_policy.png differ diff --git a/public/images/items/bronze_ribbon.png b/public/images/items/bronze_ribbon.png index eb9b926c50c..cab218e09f5 100644 Binary files a/public/images/items/bronze_ribbon.png and b/public/images/items/bronze_ribbon.png differ diff --git a/public/images/items/bug_memory.png b/public/images/items/bug_memory.png index e166636c780..004b499ba7a 100644 Binary files a/public/images/items/bug_memory.png and b/public/images/items/bug_memory.png differ diff --git a/public/images/items/bug_tera_shard.png b/public/images/items/bug_tera_shard.png index c08a3f29ffd..5711fe193bd 100644 Binary files a/public/images/items/bug_tera_shard.png and b/public/images/items/bug_tera_shard.png differ diff --git a/public/images/items/burn_drive.png b/public/images/items/burn_drive.png index 47ad9cc8f38..02ee18c02bd 100644 Binary files a/public/images/items/burn_drive.png and b/public/images/items/burn_drive.png differ diff --git a/public/images/items/calcium.png b/public/images/items/calcium.png index e98416f6280..4c42228d724 100644 Binary files a/public/images/items/calcium.png and b/public/images/items/calcium.png differ diff --git a/public/images/items/cameruptite.png b/public/images/items/cameruptite.png index 5410fc85a39..9eda37e14e1 100644 Binary files a/public/images/items/cameruptite.png and b/public/images/items/cameruptite.png differ diff --git a/public/images/items/candy.png b/public/images/items/candy.png index 9a68bdab606..81cf5e19ee2 100644 Binary files a/public/images/items/candy.png and b/public/images/items/candy.png differ diff --git a/public/images/items/candy_jar.png b/public/images/items/candy_jar.png index 2718b9fa083..0338b64a86d 100644 Binary files a/public/images/items/candy_jar.png and b/public/images/items/candy_jar.png differ diff --git a/public/images/items/candy_overlay.png b/public/images/items/candy_overlay.png index 67df546a633..a1cb428cdee 100644 Binary files a/public/images/items/candy_overlay.png and b/public/images/items/candy_overlay.png differ diff --git a/public/images/items/carbos.png b/public/images/items/carbos.png index beb31dcea9e..7dd09f2ec12 100644 Binary files a/public/images/items/carbos.png and b/public/images/items/carbos.png differ diff --git a/public/images/items/catching_charm.png b/public/images/items/catching_charm.png index c220ff70c03..57545622131 100644 Binary files a/public/images/items/catching_charm.png and b/public/images/items/catching_charm.png differ diff --git a/public/images/items/charcoal.png b/public/images/items/charcoal.png index 4d2511773ef..e10f8f20fd6 100644 Binary files a/public/images/items/charcoal.png and b/public/images/items/charcoal.png differ diff --git a/public/images/items/charizardite_x.png b/public/images/items/charizardite_x.png index 81590bb86da..d238a77a9e2 100644 Binary files a/public/images/items/charizardite_x.png and b/public/images/items/charizardite_x.png differ diff --git a/public/images/items/charizardite_y.png b/public/images/items/charizardite_y.png index 784eed51ace..5a3ea59d091 100644 Binary files a/public/images/items/charizardite_y.png and b/public/images/items/charizardite_y.png differ diff --git a/public/images/items/chill_drive.png b/public/images/items/chill_drive.png index d5ef99b1686..fbf7462479a 100644 Binary files a/public/images/items/chill_drive.png and b/public/images/items/chill_drive.png differ diff --git a/public/images/items/chipped_pot.png b/public/images/items/chipped_pot.png index a2f35f9aed9..969c3dc3c16 100644 Binary files a/public/images/items/chipped_pot.png and b/public/images/items/chipped_pot.png differ diff --git a/public/images/items/choice_scarf.png b/public/images/items/choice_scarf.png index a83fd1f4b30..2ddf7d3be16 100644 Binary files a/public/images/items/choice_scarf.png and b/public/images/items/choice_scarf.png differ diff --git a/public/images/items/choice_specs.png b/public/images/items/choice_specs.png index 513986c524e..09b58f64381 100644 Binary files a/public/images/items/choice_specs.png and b/public/images/items/choice_specs.png differ diff --git a/public/images/items/clefairy_doll.png b/public/images/items/clefairy_doll.png index 8e1691dddfa..3b54c83df47 100644 Binary files a/public/images/items/clefairy_doll.png and b/public/images/items/clefairy_doll.png differ diff --git a/public/images/items/coin_case.png b/public/images/items/coin_case.png index 14f9878e5c4..3c17c2b13f8 100644 Binary files a/public/images/items/coin_case.png and b/public/images/items/coin_case.png differ diff --git a/public/images/items/cornerstone_mask.png b/public/images/items/cornerstone_mask.png index 441af6607a5..205bdef9805 100644 Binary files a/public/images/items/cornerstone_mask.png and b/public/images/items/cornerstone_mask.png differ diff --git a/public/images/items/coupon.png b/public/images/items/coupon.png index b1e8089b485..b08fa65fecc 100644 Binary files a/public/images/items/coupon.png and b/public/images/items/coupon.png differ diff --git a/public/images/items/cracked_pot.png b/public/images/items/cracked_pot.png index 61cad0d85b7..4afc2caf2c8 100644 Binary files a/public/images/items/cracked_pot.png and b/public/images/items/cracked_pot.png differ diff --git a/public/images/items/dark_memory.png b/public/images/items/dark_memory.png index 4349ba8f8cd..e1e503bd036 100644 Binary files a/public/images/items/dark_memory.png and b/public/images/items/dark_memory.png differ diff --git a/public/images/items/dark_stone.png b/public/images/items/dark_stone.png index eb8eaa13ba8..c28a93ecabc 100644 Binary files a/public/images/items/dark_stone.png and b/public/images/items/dark_stone.png differ diff --git a/public/images/items/dark_tera_shard.png b/public/images/items/dark_tera_shard.png index 4060f9142f6..ca24664b74e 100644 Binary files a/public/images/items/dark_tera_shard.png and b/public/images/items/dark_tera_shard.png differ diff --git a/public/images/items/dawn_stone.png b/public/images/items/dawn_stone.png index 0e3da086649..b29d2016a56 100644 Binary files a/public/images/items/dawn_stone.png and b/public/images/items/dawn_stone.png differ diff --git a/public/images/items/deep_sea_scale.png b/public/images/items/deep_sea_scale.png index 6a84b01c99e..cf40e652319 100644 Binary files a/public/images/items/deep_sea_scale.png and b/public/images/items/deep_sea_scale.png differ diff --git a/public/images/items/deep_sea_tooth.png b/public/images/items/deep_sea_tooth.png index 448c8406867..2cd1980aeb4 100644 Binary files a/public/images/items/deep_sea_tooth.png and b/public/images/items/deep_sea_tooth.png differ diff --git a/public/images/items/diancite.png b/public/images/items/diancite.png index 6fff5008673..293d327524e 100644 Binary files a/public/images/items/diancite.png and b/public/images/items/diancite.png differ diff --git a/public/images/items/dire_hit.png b/public/images/items/dire_hit.png index 5917fd02d99..0c060710ff2 100644 Binary files a/public/images/items/dire_hit.png and b/public/images/items/dire_hit.png differ diff --git a/public/images/items/dna_splicers.png b/public/images/items/dna_splicers.png index 5a3c7fed75b..51c1524076e 100644 Binary files a/public/images/items/dna_splicers.png and b/public/images/items/dna_splicers.png differ diff --git a/public/images/items/douse_drive.png b/public/images/items/douse_drive.png index 0f9f780e5cb..fb8e7623184 100644 Binary files a/public/images/items/douse_drive.png and b/public/images/items/douse_drive.png differ diff --git a/public/images/items/draco_plate.png b/public/images/items/draco_plate.png index b25df530171..b4702aadba3 100644 Binary files a/public/images/items/draco_plate.png and b/public/images/items/draco_plate.png differ diff --git a/public/images/items/dragon_fang.png b/public/images/items/dragon_fang.png index 33659e50307..4a9904e0ef3 100644 Binary files a/public/images/items/dragon_fang.png and b/public/images/items/dragon_fang.png differ diff --git a/public/images/items/dragon_memory.png b/public/images/items/dragon_memory.png index 15a3cd170cd..01a14cadf3e 100644 Binary files a/public/images/items/dragon_memory.png and b/public/images/items/dragon_memory.png differ diff --git a/public/images/items/dragon_scale.png b/public/images/items/dragon_scale.png index bb8bb028db7..9cec39b22f6 100644 Binary files a/public/images/items/dragon_scale.png and b/public/images/items/dragon_scale.png differ diff --git a/public/images/items/dragon_tera_shard.png b/public/images/items/dragon_tera_shard.png index 8c16e2f8eb6..51f20d9f5cb 100644 Binary files a/public/images/items/dragon_tera_shard.png and b/public/images/items/dragon_tera_shard.png differ diff --git a/public/images/items/dread_plate.png b/public/images/items/dread_plate.png index 4cdbb76f180..6537320bc0a 100644 Binary files a/public/images/items/dread_plate.png and b/public/images/items/dread_plate.png differ diff --git a/public/images/items/dubious_disc.png b/public/images/items/dubious_disc.png index 8bb23497462..122958f9550 100644 Binary files a/public/images/items/dubious_disc.png and b/public/images/items/dubious_disc.png differ diff --git a/public/images/items/dusk_stone.png b/public/images/items/dusk_stone.png index 12ad19505d0..e2cf73d04f3 100644 Binary files a/public/images/items/dusk_stone.png and b/public/images/items/dusk_stone.png differ diff --git a/public/images/items/dynamax_band.png b/public/images/items/dynamax_band.png index 633da7bdc90..57b9a0caef5 100644 Binary files a/public/images/items/dynamax_band.png and b/public/images/items/dynamax_band.png differ diff --git a/public/images/items/earth_plate.png b/public/images/items/earth_plate.png index d40da06f6b6..79fbbad5a84 100644 Binary files a/public/images/items/earth_plate.png and b/public/images/items/earth_plate.png differ diff --git a/public/images/items/electirizer.png b/public/images/items/electirizer.png index 7d4488d0ff3..a5589a27e42 100644 Binary files a/public/images/items/electirizer.png and b/public/images/items/electirizer.png differ diff --git a/public/images/items/electric_memory.png b/public/images/items/electric_memory.png index 494b0d0d653..d0595356482 100644 Binary files a/public/images/items/electric_memory.png and b/public/images/items/electric_memory.png differ diff --git a/public/images/items/electric_tera_shard.png b/public/images/items/electric_tera_shard.png index e4e1003edbc..2195be32929 100644 Binary files a/public/images/items/electric_tera_shard.png and b/public/images/items/electric_tera_shard.png differ diff --git a/public/images/items/elixir.png b/public/images/items/elixir.png index 694b07f34b6..b4bf7834e17 100644 Binary files a/public/images/items/elixir.png and b/public/images/items/elixir.png differ diff --git a/public/images/items/enigma_berry.png b/public/images/items/enigma_berry.png index 26c7f11ee9c..1a1a20854ed 100644 Binary files a/public/images/items/enigma_berry.png and b/public/images/items/enigma_berry.png differ diff --git a/public/images/items/ether.png b/public/images/items/ether.png index 970c9a27778..44a6e79de8e 100644 Binary files a/public/images/items/ether.png and b/public/images/items/ether.png differ diff --git a/public/images/items/everstone.png b/public/images/items/everstone.png index 07b32e8850e..194f7b63baf 100644 Binary files a/public/images/items/everstone.png and b/public/images/items/everstone.png differ diff --git a/public/images/items/eviolite.png b/public/images/items/eviolite.png index 8eb195ece2a..8591791a5a1 100644 Binary files a/public/images/items/eviolite.png and b/public/images/items/eviolite.png differ diff --git a/public/images/items/exp_balance.png b/public/images/items/exp_balance.png index 56c645b70fc..6a03556a3a2 100644 Binary files a/public/images/items/exp_balance.png and b/public/images/items/exp_balance.png differ diff --git a/public/images/items/exp_charm.png b/public/images/items/exp_charm.png index b42da73301e..2635e4d8020 100644 Binary files a/public/images/items/exp_charm.png and b/public/images/items/exp_charm.png differ diff --git a/public/images/items/exp_share.png b/public/images/items/exp_share.png index d7f4e4d04fb..6b866c63427 100644 Binary files a/public/images/items/exp_share.png and b/public/images/items/exp_share.png differ diff --git a/public/images/items/expert_belt.png b/public/images/items/expert_belt.png index 225756626da..86cfd7170de 100644 Binary files a/public/images/items/expert_belt.png and b/public/images/items/expert_belt.png differ diff --git a/public/images/items/fairy_feather.png b/public/images/items/fairy_feather.png index 64cabec7500..44923a1db94 100644 Binary files a/public/images/items/fairy_feather.png and b/public/images/items/fairy_feather.png differ diff --git a/public/images/items/fairy_memory.png b/public/images/items/fairy_memory.png index 598f3c804ce..b5d0b32ff95 100644 Binary files a/public/images/items/fairy_memory.png and b/public/images/items/fairy_memory.png differ diff --git a/public/images/items/fairy_tera_shard.png b/public/images/items/fairy_tera_shard.png index 83e19aeaeba..36fb5e88f1c 100644 Binary files a/public/images/items/fairy_tera_shard.png and b/public/images/items/fairy_tera_shard.png differ diff --git a/public/images/items/fighting_memory.png b/public/images/items/fighting_memory.png index 3c152f43900..13789836880 100644 Binary files a/public/images/items/fighting_memory.png and b/public/images/items/fighting_memory.png differ diff --git a/public/images/items/fighting_tera_shard.png b/public/images/items/fighting_tera_shard.png index 4241a901902..8423a41cbe8 100644 Binary files a/public/images/items/fighting_tera_shard.png and b/public/images/items/fighting_tera_shard.png differ diff --git a/public/images/items/fire_memory.png b/public/images/items/fire_memory.png index 8778baa5f56..4f341417b6e 100644 Binary files a/public/images/items/fire_memory.png and b/public/images/items/fire_memory.png differ diff --git a/public/images/items/fire_stone.png b/public/images/items/fire_stone.png index 7fc77cd5975..3db1942dfed 100644 Binary files a/public/images/items/fire_stone.png and b/public/images/items/fire_stone.png differ diff --git a/public/images/items/fire_tera_shard.png b/public/images/items/fire_tera_shard.png index 74a04df1680..5783a5e9720 100644 Binary files a/public/images/items/fire_tera_shard.png and b/public/images/items/fire_tera_shard.png differ diff --git a/public/images/items/fist_plate.png b/public/images/items/fist_plate.png index 6892d821da6..d992e4ab1c2 100644 Binary files a/public/images/items/fist_plate.png and b/public/images/items/fist_plate.png differ diff --git a/public/images/items/flame_orb.png b/public/images/items/flame_orb.png index 32f11719a5d..5132bbb6153 100644 Binary files a/public/images/items/flame_orb.png and b/public/images/items/flame_orb.png differ diff --git a/public/images/items/flame_plate.png b/public/images/items/flame_plate.png index 26a56f18462..7633773eee1 100644 Binary files a/public/images/items/flame_plate.png and b/public/images/items/flame_plate.png differ diff --git a/public/images/items/flying_memory.png b/public/images/items/flying_memory.png index d4b31e2c240..8d3efbf1401 100644 Binary files a/public/images/items/flying_memory.png and b/public/images/items/flying_memory.png differ diff --git a/public/images/items/flying_tera_shard.png b/public/images/items/flying_tera_shard.png index bee18637918..97d3013f70b 100644 Binary files a/public/images/items/flying_tera_shard.png and b/public/images/items/flying_tera_shard.png differ diff --git a/public/images/items/focus_band.png b/public/images/items/focus_band.png index 830e1294213..3a04ae17023 100644 Binary files a/public/images/items/focus_band.png and b/public/images/items/focus_band.png differ diff --git a/public/images/items/focus_sash.png b/public/images/items/focus_sash.png index 6dcd0f2f146..7700ceecf6b 100644 Binary files a/public/images/items/focus_sash.png and b/public/images/items/focus_sash.png differ diff --git a/public/images/items/full_heal.png b/public/images/items/full_heal.png index 61663fd5e2d..4e59dcf44fa 100644 Binary files a/public/images/items/full_heal.png and b/public/images/items/full_heal.png differ diff --git a/public/images/items/full_restore.png b/public/images/items/full_restore.png index bd3ebfd3022..ba64f2edad8 100644 Binary files a/public/images/items/full_restore.png and b/public/images/items/full_restore.png differ diff --git a/public/images/items/galarica_cuff.png b/public/images/items/galarica_cuff.png index 1b3f9c69296..56523da5230 100644 Binary files a/public/images/items/galarica_cuff.png and b/public/images/items/galarica_cuff.png differ diff --git a/public/images/items/galarica_wreath.png b/public/images/items/galarica_wreath.png index 7fe319f20cf..20356bafd8a 100644 Binary files a/public/images/items/galarica_wreath.png and b/public/images/items/galarica_wreath.png differ diff --git a/public/images/items/galladite.png b/public/images/items/galladite.png index b204209a91c..15c93cd9c7e 100644 Binary files a/public/images/items/galladite.png and b/public/images/items/galladite.png differ diff --git a/public/images/items/ganlon_berry.png b/public/images/items/ganlon_berry.png index 81aecd83011..f9b88fc563a 100644 Binary files a/public/images/items/ganlon_berry.png and b/public/images/items/ganlon_berry.png differ diff --git a/public/images/items/garchompite.png b/public/images/items/garchompite.png index 045fc815b27..4276146a858 100644 Binary files a/public/images/items/garchompite.png and b/public/images/items/garchompite.png differ diff --git a/public/images/items/gardevoirite.png b/public/images/items/gardevoirite.png index d29ee3eab03..66a90b93bce 100644 Binary files a/public/images/items/gardevoirite.png and b/public/images/items/gardevoirite.png differ diff --git a/public/images/items/gb.png b/public/images/items/gb.png index 5a69585f5cd..4b437277849 100644 Binary files a/public/images/items/gb.png and b/public/images/items/gb.png differ diff --git a/public/images/items/gengarite.png b/public/images/items/gengarite.png index dcbaf4bf13a..4ccaae6ee8d 100644 Binary files a/public/images/items/gengarite.png and b/public/images/items/gengarite.png differ diff --git a/public/images/items/ghost_memory.png b/public/images/items/ghost_memory.png index d3f174de758..cb3c31ea4de 100644 Binary files a/public/images/items/ghost_memory.png and b/public/images/items/ghost_memory.png differ diff --git a/public/images/items/ghost_tera_shard.png b/public/images/items/ghost_tera_shard.png index fd3557e5534..8b9c6e750a9 100644 Binary files a/public/images/items/ghost_tera_shard.png and b/public/images/items/ghost_tera_shard.png differ diff --git a/public/images/items/glalitite.png b/public/images/items/glalitite.png index 83e05f132fa..ed7858c631c 100644 Binary files a/public/images/items/glalitite.png and b/public/images/items/glalitite.png differ diff --git a/public/images/items/golden_egg.png b/public/images/items/golden_egg.png index bfc517c6632..5727b4cb513 100644 Binary files a/public/images/items/golden_egg.png and b/public/images/items/golden_egg.png differ diff --git a/public/images/items/golden_exp_charm.png b/public/images/items/golden_exp_charm.png index 199832159d6..1895bfaa6b9 100644 Binary files a/public/images/items/golden_exp_charm.png and b/public/images/items/golden_exp_charm.png differ diff --git a/public/images/items/golden_mystic_ticket.png b/public/images/items/golden_mystic_ticket.png index ff44d3307b6..57f5b9efca6 100644 Binary files a/public/images/items/golden_mystic_ticket.png and b/public/images/items/golden_mystic_ticket.png differ diff --git a/public/images/items/golden_net.png b/public/images/items/golden_net.png index 5fea1ee7dba..3205d545e27 100644 Binary files a/public/images/items/golden_net.png and b/public/images/items/golden_net.png differ diff --git a/public/images/items/golden_punch.png b/public/images/items/golden_punch.png index 25c2233e714..291ff7e248f 100644 Binary files a/public/images/items/golden_punch.png and b/public/images/items/golden_punch.png differ diff --git a/public/images/items/gracidea.png b/public/images/items/gracidea.png index 0552d11b01b..6e464390f17 100644 Binary files a/public/images/items/gracidea.png and b/public/images/items/gracidea.png differ diff --git a/public/images/items/grass_memory.png b/public/images/items/grass_memory.png index 28ffc343c66..9d7d27de770 100644 Binary files a/public/images/items/grass_memory.png and b/public/images/items/grass_memory.png differ diff --git a/public/images/items/grass_tera_shard.png b/public/images/items/grass_tera_shard.png index 01bf4bde640..30e8762b5b6 100644 Binary files a/public/images/items/grass_tera_shard.png and b/public/images/items/grass_tera_shard.png differ diff --git a/public/images/items/great_ribbon.png b/public/images/items/great_ribbon.png index 720c0d85366..e7d7e452122 100644 Binary files a/public/images/items/great_ribbon.png and b/public/images/items/great_ribbon.png differ diff --git a/public/images/items/grip_claw.png b/public/images/items/grip_claw.png index e37e2a2eaf3..61cbb89e9b2 100644 Binary files a/public/images/items/grip_claw.png and b/public/images/items/grip_claw.png differ diff --git a/public/images/items/griseous_core.png b/public/images/items/griseous_core.png index fa131cccfda..7f3f683eda8 100644 Binary files a/public/images/items/griseous_core.png and b/public/images/items/griseous_core.png differ diff --git a/public/images/items/ground_memory.png b/public/images/items/ground_memory.png index 8ab042c02ff..808a4e13eeb 100644 Binary files a/public/images/items/ground_memory.png and b/public/images/items/ground_memory.png differ diff --git a/public/images/items/ground_tera_shard.png b/public/images/items/ground_tera_shard.png index 153bbd9058c..d7760f7dc1b 100644 Binary files a/public/images/items/ground_tera_shard.png and b/public/images/items/ground_tera_shard.png differ diff --git a/public/images/items/guard_spec.png b/public/images/items/guard_spec.png index 3efc9448404..95a37d0d28e 100644 Binary files a/public/images/items/guard_spec.png and b/public/images/items/guard_spec.png differ diff --git a/public/images/items/gyaradosite.png b/public/images/items/gyaradosite.png index bc8e6d6b115..e4cae1366ab 100644 Binary files a/public/images/items/gyaradosite.png and b/public/images/items/gyaradosite.png differ diff --git a/public/images/items/hard_meteorite.png b/public/images/items/hard_meteorite.png index d8f3490c581..8e8a2b5688b 100644 Binary files a/public/images/items/hard_meteorite.png and b/public/images/items/hard_meteorite.png differ diff --git a/public/images/items/hard_stone.png b/public/images/items/hard_stone.png index 604b44f9915..571d96afaa8 100644 Binary files a/public/images/items/hard_stone.png and b/public/images/items/hard_stone.png differ diff --git a/public/images/items/healing_charm.png b/public/images/items/healing_charm.png index b6f4c593c53..4601eeef593 100644 Binary files a/public/images/items/healing_charm.png and b/public/images/items/healing_charm.png differ diff --git a/public/images/items/hearthflame_mask.png b/public/images/items/hearthflame_mask.png index cd2ecdf1949..deed3d0cde8 100644 Binary files a/public/images/items/hearthflame_mask.png and b/public/images/items/hearthflame_mask.png differ diff --git a/public/images/items/heracronite.png b/public/images/items/heracronite.png index 164da1c9d30..ffcfc440c19 100644 Binary files a/public/images/items/heracronite.png and b/public/images/items/heracronite.png differ diff --git a/public/images/items/houndoominite.png b/public/images/items/houndoominite.png index 9e2e5f2eacd..c9ea1954dfa 100644 Binary files a/public/images/items/houndoominite.png and b/public/images/items/houndoominite.png differ diff --git a/public/images/items/hp_up.png b/public/images/items/hp_up.png index ff456d25289..5c6baff0673 100644 Binary files a/public/images/items/hp_up.png and b/public/images/items/hp_up.png differ diff --git a/public/images/items/hyper_potion.png b/public/images/items/hyper_potion.png index fa1c1432795..197aaac690c 100644 Binary files a/public/images/items/hyper_potion.png and b/public/images/items/hyper_potion.png differ diff --git a/public/images/items/ice_memory.png b/public/images/items/ice_memory.png index 01e68c08f82..812548cf36c 100644 Binary files a/public/images/items/ice_memory.png and b/public/images/items/ice_memory.png differ diff --git a/public/images/items/ice_stone.png b/public/images/items/ice_stone.png index a0fc0c12c5d..945714b759c 100644 Binary files a/public/images/items/ice_stone.png and b/public/images/items/ice_stone.png differ diff --git a/public/images/items/ice_tera_shard.png b/public/images/items/ice_tera_shard.png index 3e07acee397..5644d647c2b 100644 Binary files a/public/images/items/ice_tera_shard.png and b/public/images/items/ice_tera_shard.png differ diff --git a/public/images/items/icicle_plate.png b/public/images/items/icicle_plate.png index 67b5138e3e6..f9797d91f6a 100644 Binary files a/public/images/items/icicle_plate.png and b/public/images/items/icicle_plate.png differ diff --git a/public/images/items/icy_reins_of_unity.png b/public/images/items/icy_reins_of_unity.png index 84ec94a1d87..b7af48d6a81 100644 Binary files a/public/images/items/icy_reins_of_unity.png and b/public/images/items/icy_reins_of_unity.png differ diff --git a/public/images/items/insect_plate.png b/public/images/items/insect_plate.png index 75b44640a1b..5bcc0eebaf5 100644 Binary files a/public/images/items/insect_plate.png and b/public/images/items/insect_plate.png differ diff --git a/public/images/items/inverse.png b/public/images/items/inverse.png index b1ad5d2c00e..0d77ce77dde 100644 Binary files a/public/images/items/inverse.png and b/public/images/items/inverse.png differ diff --git a/public/images/items/iron.png b/public/images/items/iron.png index 3bb8ab15a8f..5cfff11b059 100644 Binary files a/public/images/items/iron.png and b/public/images/items/iron.png differ diff --git a/public/images/items/iron_plate.png b/public/images/items/iron_plate.png index ee892755660..65d660e34eb 100644 Binary files a/public/images/items/iron_plate.png and b/public/images/items/iron_plate.png differ diff --git a/public/images/items/kangaskhanite.png b/public/images/items/kangaskhanite.png index b7eb6849729..3d65d2cc5ca 100644 Binary files a/public/images/items/kangaskhanite.png and b/public/images/items/kangaskhanite.png differ diff --git a/public/images/items/kings_rock.png b/public/images/items/kings_rock.png index 0ea43c267bc..bfda9d559d3 100644 Binary files a/public/images/items/kings_rock.png and b/public/images/items/kings_rock.png differ diff --git a/public/images/items/lansat_berry.png b/public/images/items/lansat_berry.png index 6b2a8fb4760..223bff3eb26 100644 Binary files a/public/images/items/lansat_berry.png and b/public/images/items/lansat_berry.png differ diff --git a/public/images/items/latiasite.png b/public/images/items/latiasite.png index 6b92d1851cc..486a542576f 100644 Binary files a/public/images/items/latiasite.png and b/public/images/items/latiasite.png differ diff --git a/public/images/items/latiosite.png b/public/images/items/latiosite.png index 0d2af34781f..69708835c7b 100644 Binary files a/public/images/items/latiosite.png and b/public/images/items/latiosite.png differ diff --git a/public/images/items/leaders_crest.png b/public/images/items/leaders_crest.png index 45cf1656374..86b71f1eb6d 100644 Binary files a/public/images/items/leaders_crest.png and b/public/images/items/leaders_crest.png differ diff --git a/public/images/items/leaf_stone.png b/public/images/items/leaf_stone.png index a384af2a9c7..dc68e916bcf 100644 Binary files a/public/images/items/leaf_stone.png and b/public/images/items/leaf_stone.png differ diff --git a/public/images/items/leek.png b/public/images/items/leek.png index 7ef3fb989a4..1cb136aa78c 100644 Binary files a/public/images/items/leek.png and b/public/images/items/leek.png differ diff --git a/public/images/items/leftovers.png b/public/images/items/leftovers.png index 48ff07fbed3..4732d149b64 100644 Binary files a/public/images/items/leftovers.png and b/public/images/items/leftovers.png differ diff --git a/public/images/items/legend_plate.png b/public/images/items/legend_plate.png index 5b8681ebfe7..e96f12b45f5 100644 Binary files a/public/images/items/legend_plate.png and b/public/images/items/legend_plate.png differ diff --git a/public/images/items/leppa_berry.png b/public/images/items/leppa_berry.png index 4bc1349fe94..7a0f13b5199 100644 Binary files a/public/images/items/leppa_berry.png and b/public/images/items/leppa_berry.png differ diff --git a/public/images/items/liechi_berry.png b/public/images/items/liechi_berry.png index 492ef7e86f1..192d8f001ef 100644 Binary files a/public/images/items/liechi_berry.png and b/public/images/items/liechi_berry.png differ diff --git a/public/images/items/light_ball.png b/public/images/items/light_ball.png index cd421446608..7748f735d37 100644 Binary files a/public/images/items/light_ball.png and b/public/images/items/light_ball.png differ diff --git a/public/images/items/light_stone.png b/public/images/items/light_stone.png index 2b2be824020..97258cf3970 100644 Binary files a/public/images/items/light_stone.png and b/public/images/items/light_stone.png differ diff --git a/public/images/items/linking_cord.png b/public/images/items/linking_cord.png index ab695ae1fc8..4cde9da3f14 100644 Binary files a/public/images/items/linking_cord.png and b/public/images/items/linking_cord.png differ diff --git a/public/images/items/lock_capsule.png b/public/images/items/lock_capsule.png index b2e64dfdbfd..25d0cc14cff 100644 Binary files a/public/images/items/lock_capsule.png and b/public/images/items/lock_capsule.png differ diff --git a/public/images/items/lopunnite.png b/public/images/items/lopunnite.png index 416807c0c81..bd67cf159ed 100644 Binary files a/public/images/items/lopunnite.png and b/public/images/items/lopunnite.png differ diff --git a/public/images/items/lucarionite.png b/public/images/items/lucarionite.png index 82d3b19129d..b97161df68c 100644 Binary files a/public/images/items/lucarionite.png and b/public/images/items/lucarionite.png differ diff --git a/public/images/items/lucky_egg.png b/public/images/items/lucky_egg.png index 2760c303d37..fa9a1e4b390 100644 Binary files a/public/images/items/lucky_egg.png and b/public/images/items/lucky_egg.png differ diff --git a/public/images/items/lucky_punch.png b/public/images/items/lucky_punch.png index ed783c43e9a..97887631d9a 100644 Binary files a/public/images/items/lucky_punch.png and b/public/images/items/lucky_punch.png differ diff --git a/public/images/items/lucky_punch_great.png b/public/images/items/lucky_punch_great.png index c66df778210..77c77daf535 100644 Binary files a/public/images/items/lucky_punch_great.png and b/public/images/items/lucky_punch_great.png differ diff --git a/public/images/items/lucky_punch_master.png b/public/images/items/lucky_punch_master.png index d48fdf04bae..89fc1b67cf4 100644 Binary files a/public/images/items/lucky_punch_master.png and b/public/images/items/lucky_punch_master.png differ diff --git a/public/images/items/lucky_punch_ultra.png b/public/images/items/lucky_punch_ultra.png index aee27600f5c..a95c23666bb 100644 Binary files a/public/images/items/lucky_punch_ultra.png and b/public/images/items/lucky_punch_ultra.png differ diff --git a/public/images/items/lum_berry.png b/public/images/items/lum_berry.png index 8feb811e411..d19c4fba583 100644 Binary files a/public/images/items/lum_berry.png and b/public/images/items/lum_berry.png differ diff --git a/public/images/items/lure.png b/public/images/items/lure.png index a148aa70db9..1c3ea6cc8e8 100644 Binary files a/public/images/items/lure.png and b/public/images/items/lure.png differ diff --git a/public/images/items/lustrous_globe.png b/public/images/items/lustrous_globe.png index a16cf80c350..2a854db742b 100644 Binary files a/public/images/items/lustrous_globe.png and b/public/images/items/lustrous_globe.png differ diff --git a/public/images/items/macho_brace.png b/public/images/items/macho_brace.png index 2085829e1ce..760139cf7f8 100644 Binary files a/public/images/items/macho_brace.png and b/public/images/items/macho_brace.png differ diff --git a/public/images/items/magmarizer.png b/public/images/items/magmarizer.png index 0fca34c1e28..4f4d5f45851 100644 Binary files a/public/images/items/magmarizer.png and b/public/images/items/magmarizer.png differ diff --git a/public/images/items/magnet.png b/public/images/items/magnet.png index 7a07f557ec4..9ce8b686e9f 100644 Binary files a/public/images/items/magnet.png and b/public/images/items/magnet.png differ diff --git a/public/images/items/malicious_armor.png b/public/images/items/malicious_armor.png index 495024ced20..b7bfb55195b 100644 Binary files a/public/images/items/malicious_armor.png and b/public/images/items/malicious_armor.png differ diff --git a/public/images/items/manectite.png b/public/images/items/manectite.png index 0dd7406cdc4..c9df61669bc 100644 Binary files a/public/images/items/manectite.png and b/public/images/items/manectite.png differ diff --git a/public/images/items/map.png b/public/images/items/map.png index a641a7e8a69..dc2fc6b95d8 100644 Binary files a/public/images/items/map.png and b/public/images/items/map.png differ diff --git a/public/images/items/master_ribbon.png b/public/images/items/master_ribbon.png index 86be493b74a..0443215c1f9 100644 Binary files a/public/images/items/master_ribbon.png and b/public/images/items/master_ribbon.png differ diff --git a/public/images/items/masterpiece_teacup.png b/public/images/items/masterpiece_teacup.png index 36b8c39dcc7..ec2455c0763 100644 Binary files a/public/images/items/masterpiece_teacup.png and b/public/images/items/masterpiece_teacup.png differ diff --git a/public/images/items/mawilite.png b/public/images/items/mawilite.png index 95ddf987f12..60ea4017f56 100644 Binary files a/public/images/items/mawilite.png and b/public/images/items/mawilite.png differ diff --git a/public/images/items/max_elixir.png b/public/images/items/max_elixir.png index a4f134dd13c..1f528c2bb61 100644 Binary files a/public/images/items/max_elixir.png and b/public/images/items/max_elixir.png differ diff --git a/public/images/items/max_ether.png b/public/images/items/max_ether.png index 0ecdf09397a..8cee7152a86 100644 Binary files a/public/images/items/max_ether.png and b/public/images/items/max_ether.png differ diff --git a/public/images/items/max_lure.png b/public/images/items/max_lure.png index 384db7d7df8..812229d140a 100644 Binary files a/public/images/items/max_lure.png and b/public/images/items/max_lure.png differ diff --git a/public/images/items/max_mushrooms.png b/public/images/items/max_mushrooms.png index 443f1d5c369..8d5c015c963 100644 Binary files a/public/images/items/max_mushrooms.png and b/public/images/items/max_mushrooms.png differ diff --git a/public/images/items/max_potion.png b/public/images/items/max_potion.png index f51e7bde976..d8fadc9cb93 100644 Binary files a/public/images/items/max_potion.png and b/public/images/items/max_potion.png differ diff --git a/public/images/items/max_repel.png b/public/images/items/max_repel.png index d8bef707913..4d88ae6d0b5 100644 Binary files a/public/images/items/max_repel.png and b/public/images/items/max_repel.png differ diff --git a/public/images/items/max_revive.png b/public/images/items/max_revive.png index 25849a3b940..609fd17c3b9 100644 Binary files a/public/images/items/max_revive.png and b/public/images/items/max_revive.png differ diff --git a/public/images/items/mb.png b/public/images/items/mb.png index cfa421d6219..d80b3b89108 100644 Binary files a/public/images/items/mb.png and b/public/images/items/mb.png differ diff --git a/public/images/items/meadow_plate.png b/public/images/items/meadow_plate.png index a687cb7920d..e2b991776ba 100644 Binary files a/public/images/items/meadow_plate.png and b/public/images/items/meadow_plate.png differ diff --git a/public/images/items/medichamite.png b/public/images/items/medichamite.png index 4dd57f10bed..42f22ed6cd6 100644 Binary files a/public/images/items/medichamite.png and b/public/images/items/medichamite.png differ diff --git a/public/images/items/mega_bracelet.png b/public/images/items/mega_bracelet.png index e593b907631..5e8ff02be8c 100644 Binary files a/public/images/items/mega_bracelet.png and b/public/images/items/mega_bracelet.png differ diff --git a/public/images/items/metagrossite.png b/public/images/items/metagrossite.png index 445deff40c1..c245368758d 100644 Binary files a/public/images/items/metagrossite.png and b/public/images/items/metagrossite.png differ diff --git a/public/images/items/metal_alloy.png b/public/images/items/metal_alloy.png index 1201f58b463..41f22df4254 100644 Binary files a/public/images/items/metal_alloy.png and b/public/images/items/metal_alloy.png differ diff --git a/public/images/items/metal_coat.png b/public/images/items/metal_coat.png index f016d48bd2e..88f055c3fb3 100644 Binary files a/public/images/items/metal_coat.png and b/public/images/items/metal_coat.png differ diff --git a/public/images/items/metal_powder.png b/public/images/items/metal_powder.png index 11c3a39314c..64af0b144fe 100644 Binary files a/public/images/items/metal_powder.png and b/public/images/items/metal_powder.png differ diff --git a/public/images/items/metronome.png b/public/images/items/metronome.png index dfde7e365eb..837d75b4c03 100644 Binary files a/public/images/items/metronome.png and b/public/images/items/metronome.png differ diff --git a/public/images/items/mewtwonite_x.png b/public/images/items/mewtwonite_x.png index 3ec18a1c683..507d17e54e8 100644 Binary files a/public/images/items/mewtwonite_x.png and b/public/images/items/mewtwonite_x.png differ diff --git a/public/images/items/mewtwonite_y.png b/public/images/items/mewtwonite_y.png index eb9b1d0dc55..ff0c53396d2 100644 Binary files a/public/images/items/mewtwonite_y.png and b/public/images/items/mewtwonite_y.png differ diff --git a/public/images/items/mind_plate.png b/public/images/items/mind_plate.png index 04001796831..ff6fcc4f3af 100644 Binary files a/public/images/items/mind_plate.png and b/public/images/items/mind_plate.png differ diff --git a/public/images/items/mini_black_hole.png b/public/images/items/mini_black_hole.png index dd7458b8b2a..6edcaad16e3 100644 Binary files a/public/images/items/mini_black_hole.png and b/public/images/items/mini_black_hole.png differ diff --git a/public/images/items/mint_atk.png b/public/images/items/mint_atk.png index 727a7b3f792..88315c0cd07 100644 Binary files a/public/images/items/mint_atk.png and b/public/images/items/mint_atk.png differ diff --git a/public/images/items/mint_def.png b/public/images/items/mint_def.png index 9cd92eac07e..584c610ffd7 100644 Binary files a/public/images/items/mint_def.png and b/public/images/items/mint_def.png differ diff --git a/public/images/items/mint_neutral.png b/public/images/items/mint_neutral.png index e2e556d475b..f5287539e78 100644 Binary files a/public/images/items/mint_neutral.png and b/public/images/items/mint_neutral.png differ diff --git a/public/images/items/mint_spatk.png b/public/images/items/mint_spatk.png index 191ba6c4a1a..90a57c5608b 100644 Binary files a/public/images/items/mint_spatk.png and b/public/images/items/mint_spatk.png differ diff --git a/public/images/items/mint_spd.png b/public/images/items/mint_spd.png index 687119f2502..5420b0997b3 100644 Binary files a/public/images/items/mint_spd.png and b/public/images/items/mint_spd.png differ diff --git a/public/images/items/mint_spdef.png b/public/images/items/mint_spdef.png index cd902ce0984..54a1b4ed21d 100644 Binary files a/public/images/items/mint_spdef.png and b/public/images/items/mint_spdef.png differ diff --git a/public/images/items/miracle_seed.png b/public/images/items/miracle_seed.png index f5bc766545a..8be7ba72d33 100644 Binary files a/public/images/items/miracle_seed.png and b/public/images/items/miracle_seed.png differ diff --git a/public/images/items/moon_flute.png b/public/images/items/moon_flute.png index 893cb6a7579..5d3c0caf5f2 100644 Binary files a/public/images/items/moon_flute.png and b/public/images/items/moon_flute.png differ diff --git a/public/images/items/moon_stone.png b/public/images/items/moon_stone.png index b4af61969a2..f002fb18073 100644 Binary files a/public/images/items/moon_stone.png and b/public/images/items/moon_stone.png differ diff --git a/public/images/items/muscle_band.png b/public/images/items/muscle_band.png index 011716e7124..0be9d010767 100644 Binary files a/public/images/items/muscle_band.png and b/public/images/items/muscle_band.png differ diff --git a/public/images/items/mystery_egg.png b/public/images/items/mystery_egg.png index bb117a137b0..ac631cec7c8 100644 Binary files a/public/images/items/mystery_egg.png and b/public/images/items/mystery_egg.png differ diff --git a/public/images/items/mystic_ticket.png b/public/images/items/mystic_ticket.png index bd206998fed..cab03fa5470 100644 Binary files a/public/images/items/mystic_ticket.png and b/public/images/items/mystic_ticket.png differ diff --git a/public/images/items/mystic_water.png b/public/images/items/mystic_water.png index f944fac1a9c..2128895b385 100644 Binary files a/public/images/items/mystic_water.png and b/public/images/items/mystic_water.png differ diff --git a/public/images/items/mystical_rock.png b/public/images/items/mystical_rock.png new file mode 100644 index 00000000000..f87fe2a9dcb Binary files /dev/null and b/public/images/items/mystical_rock.png differ diff --git a/public/images/items/n_lunarizer.png b/public/images/items/n_lunarizer.png index e45fb8ecf8d..a03b48ad387 100644 Binary files a/public/images/items/n_lunarizer.png and b/public/images/items/n_lunarizer.png differ diff --git a/public/images/items/n_solarizer.png b/public/images/items/n_solarizer.png index e706a42c973..69153fd38dd 100644 Binary files a/public/images/items/n_solarizer.png and b/public/images/items/n_solarizer.png differ diff --git a/public/images/items/never_melt_ice.png b/public/images/items/never_melt_ice.png index bec7cc0e5d4..35b1ada771d 100644 Binary files a/public/images/items/never_melt_ice.png and b/public/images/items/never_melt_ice.png differ diff --git a/public/images/items/normal_memory.png b/public/images/items/normal_memory.png index ddc22d1d4ab..e1ff89a9993 100644 Binary files a/public/images/items/normal_memory.png and b/public/images/items/normal_memory.png differ diff --git a/public/images/items/normal_tera_shard.png b/public/images/items/normal_tera_shard.png index fe2b9b93fd6..1c7a41ea0ec 100644 Binary files a/public/images/items/normal_tera_shard.png and b/public/images/items/normal_tera_shard.png differ diff --git a/public/images/items/nugget.png b/public/images/items/nugget.png index e8d39912349..0340f5d4000 100644 Binary files a/public/images/items/nugget.png and b/public/images/items/nugget.png differ diff --git a/public/images/items/old_gateau.png b/public/images/items/old_gateau.png index c910e90f101..dd5f0e05a94 100644 Binary files a/public/images/items/old_gateau.png and b/public/images/items/old_gateau.png differ diff --git a/public/images/items/oval_charm.png b/public/images/items/oval_charm.png index dc791175588..fcdb914ec22 100644 Binary files a/public/images/items/oval_charm.png and b/public/images/items/oval_charm.png differ diff --git a/public/images/items/oval_stone.png b/public/images/items/oval_stone.png index d48b0688821..d58ffde18e3 100644 Binary files a/public/images/items/oval_stone.png and b/public/images/items/oval_stone.png differ diff --git a/public/images/items/pair_of_tickets.png b/public/images/items/pair_of_tickets.png index b4b6ececbd2..b06c9a8727f 100644 Binary files a/public/images/items/pair_of_tickets.png and b/public/images/items/pair_of_tickets.png differ diff --git a/public/images/items/pb.png b/public/images/items/pb.png index ec4fe69c86f..37c37edb8c1 100644 Binary files a/public/images/items/pb.png and b/public/images/items/pb.png differ diff --git a/public/images/items/pb_gold.png b/public/images/items/pb_gold.png index fd71feb8e55..6dff6824158 100644 Binary files a/public/images/items/pb_gold.png and b/public/images/items/pb_gold.png differ diff --git a/public/images/items/pb_silver.png b/public/images/items/pb_silver.png index f60a8348a94..9528517a77a 100644 Binary files a/public/images/items/pb_silver.png and b/public/images/items/pb_silver.png differ diff --git a/public/images/items/peat_block.png b/public/images/items/peat_block.png index b62e94d523f..f3c65449b87 100644 Binary files a/public/images/items/peat_block.png and b/public/images/items/peat_block.png differ diff --git a/public/images/items/petaya_berry.png b/public/images/items/petaya_berry.png index e1dae467187..0fba884c2e2 100644 Binary files a/public/images/items/petaya_berry.png and b/public/images/items/petaya_berry.png differ diff --git a/public/images/items/pidgeotite.png b/public/images/items/pidgeotite.png index 86d1b23558c..52cb40852d6 100644 Binary files a/public/images/items/pidgeotite.png and b/public/images/items/pidgeotite.png differ diff --git a/public/images/items/pinsirite.png b/public/images/items/pinsirite.png index 2616cf6dfe1..88ecc8e9ea9 100644 Binary files a/public/images/items/pinsirite.png and b/public/images/items/pinsirite.png differ diff --git a/public/images/items/pixie_plate.png b/public/images/items/pixie_plate.png index dcc829c107f..e123ae6a49a 100644 Binary files a/public/images/items/pixie_plate.png and b/public/images/items/pixie_plate.png differ diff --git a/public/images/items/poison_barb.png b/public/images/items/poison_barb.png index 913ede4d819..3f9d714b08c 100644 Binary files a/public/images/items/poison_barb.png and b/public/images/items/poison_barb.png differ diff --git a/public/images/items/poison_memory.png b/public/images/items/poison_memory.png index 2b0036201d9..6c2b0aea77b 100644 Binary files a/public/images/items/poison_memory.png and b/public/images/items/poison_memory.png differ diff --git a/public/images/items/poison_tera_shard.png b/public/images/items/poison_tera_shard.png index b124fa051b9..4f21d158a41 100644 Binary files a/public/images/items/poison_tera_shard.png and b/public/images/items/poison_tera_shard.png differ diff --git a/public/images/items/potion.png b/public/images/items/potion.png index 10a7d5848db..f69c3210f03 100644 Binary files a/public/images/items/potion.png and b/public/images/items/potion.png differ diff --git a/public/images/items/power_herb.png b/public/images/items/power_herb.png index 15a581490a0..ba156c62122 100644 Binary files a/public/images/items/power_herb.png and b/public/images/items/power_herb.png differ diff --git a/public/images/items/pp_max.png b/public/images/items/pp_max.png index 48752829557..787641e26ac 100644 Binary files a/public/images/items/pp_max.png and b/public/images/items/pp_max.png differ diff --git a/public/images/items/pp_up.png b/public/images/items/pp_up.png index 1334d228bc3..463c3a0578d 100644 Binary files a/public/images/items/pp_up.png and b/public/images/items/pp_up.png differ diff --git a/public/images/items/prism_scale.png b/public/images/items/prism_scale.png index 5a0d45c686b..2436e96bf73 100644 Binary files a/public/images/items/prism_scale.png and b/public/images/items/prism_scale.png differ diff --git a/public/images/items/prison_bottle.png b/public/images/items/prison_bottle.png index da733bb14bb..06217988364 100644 Binary files a/public/images/items/prison_bottle.png and b/public/images/items/prison_bottle.png differ diff --git a/public/images/items/protector.png b/public/images/items/protector.png index a7b01a8c53d..8f65be09b2f 100644 Binary files a/public/images/items/protector.png and b/public/images/items/protector.png differ diff --git a/public/images/items/protein.png b/public/images/items/protein.png index b3386a8841b..54df13c6753 100644 Binary files a/public/images/items/protein.png and b/public/images/items/protein.png differ diff --git a/public/images/items/psychic_memory.png b/public/images/items/psychic_memory.png index a17afa4a617..21d62daa483 100644 Binary files a/public/images/items/psychic_memory.png and b/public/images/items/psychic_memory.png differ diff --git a/public/images/items/psychic_tera_shard.png b/public/images/items/psychic_tera_shard.png index 0a5656ccea1..f4b1cf7b259 100644 Binary files a/public/images/items/psychic_tera_shard.png and b/public/images/items/psychic_tera_shard.png differ diff --git a/public/images/items/quick_claw.png b/public/images/items/quick_claw.png index e6317898e2a..ff4f76d0576 100644 Binary files a/public/images/items/quick_claw.png and b/public/images/items/quick_claw.png differ diff --git a/public/images/items/quick_powder.png b/public/images/items/quick_powder.png index c73ec09eb05..58a8a1187a9 100644 Binary files a/public/images/items/quick_powder.png and b/public/images/items/quick_powder.png differ diff --git a/public/images/items/rare_candy.png b/public/images/items/rare_candy.png index d81e7ad0844..a860a116905 100644 Binary files a/public/images/items/rare_candy.png and b/public/images/items/rare_candy.png differ diff --git a/public/images/items/rarer_candy.png b/public/images/items/rarer_candy.png index b8432bd8216..4424caa659a 100644 Binary files a/public/images/items/rarer_candy.png and b/public/images/items/rarer_candy.png differ diff --git a/public/images/items/rayquazite.png b/public/images/items/rayquazite.png index 068f02936be..b39957b857d 100644 Binary files a/public/images/items/rayquazite.png and b/public/images/items/rayquazite.png differ diff --git a/public/images/items/razor_claw.png b/public/images/items/razor_claw.png index a9541c4d251..0ba506e8706 100644 Binary files a/public/images/items/razor_claw.png and b/public/images/items/razor_claw.png differ diff --git a/public/images/items/razor_fang.png b/public/images/items/razor_fang.png index 77c3da44c92..75306db5c4c 100644 Binary files a/public/images/items/razor_fang.png and b/public/images/items/razor_fang.png differ diff --git a/public/images/items/rb.png b/public/images/items/rb.png index 440ab8bf1b4..020f2ff878b 100644 Binary files a/public/images/items/rb.png and b/public/images/items/rb.png differ diff --git a/public/images/items/reaper_cloth.png b/public/images/items/reaper_cloth.png index a86714bfc4f..9caf7665e95 100644 Binary files a/public/images/items/reaper_cloth.png and b/public/images/items/reaper_cloth.png differ diff --git a/public/images/items/red_orb.png b/public/images/items/red_orb.png index b982649c9b3..cee83740ca5 100644 Binary files a/public/images/items/red_orb.png and b/public/images/items/red_orb.png differ diff --git a/public/images/items/relic_band.png b/public/images/items/relic_band.png index 634b91e41b3..adbd73bc46b 100644 Binary files a/public/images/items/relic_band.png and b/public/images/items/relic_band.png differ diff --git a/public/images/items/relic_crown.png b/public/images/items/relic_crown.png index d8c4552ea3c..de090041c1c 100644 Binary files a/public/images/items/relic_crown.png and b/public/images/items/relic_crown.png differ diff --git a/public/images/items/relic_gold.png b/public/images/items/relic_gold.png index da3f33fdfa1..af5b1797938 100644 Binary files a/public/images/items/relic_gold.png and b/public/images/items/relic_gold.png differ diff --git a/public/images/items/repel.png b/public/images/items/repel.png index 3d1359e688e..80c7738e9ff 100644 Binary files a/public/images/items/repel.png and b/public/images/items/repel.png differ diff --git a/public/images/items/reveal_glass.png b/public/images/items/reveal_glass.png index 3fae3bdf934..469d20a2752 100644 Binary files a/public/images/items/reveal_glass.png and b/public/images/items/reveal_glass.png differ diff --git a/public/images/items/revive.png b/public/images/items/revive.png index d7952b7653f..e84659867d8 100644 Binary files a/public/images/items/revive.png and b/public/images/items/revive.png differ diff --git a/public/images/items/reviver_seed.png b/public/images/items/reviver_seed.png index 31cfae46f94..10bc5c32451 100644 Binary files a/public/images/items/reviver_seed.png and b/public/images/items/reviver_seed.png differ diff --git a/public/images/items/ribbon_gen1.png b/public/images/items/ribbon_gen1.png index a9774d18ad0..1d731cf2e98 100644 Binary files a/public/images/items/ribbon_gen1.png and b/public/images/items/ribbon_gen1.png differ diff --git a/public/images/items/ribbon_gen2.png b/public/images/items/ribbon_gen2.png index a04f6a32a62..2ff54112105 100644 Binary files a/public/images/items/ribbon_gen2.png and b/public/images/items/ribbon_gen2.png differ diff --git a/public/images/items/ribbon_gen3.png b/public/images/items/ribbon_gen3.png index 0cf20ed92ee..14a5eb09f7d 100644 Binary files a/public/images/items/ribbon_gen3.png and b/public/images/items/ribbon_gen3.png differ diff --git a/public/images/items/ribbon_gen4.png b/public/images/items/ribbon_gen4.png index aa24433b71b..c482ac1d04a 100644 Binary files a/public/images/items/ribbon_gen4.png and b/public/images/items/ribbon_gen4.png differ diff --git a/public/images/items/ribbon_gen5.png b/public/images/items/ribbon_gen5.png index 7bb7800671f..52560cde636 100644 Binary files a/public/images/items/ribbon_gen5.png and b/public/images/items/ribbon_gen5.png differ diff --git a/public/images/items/ribbon_gen6.png b/public/images/items/ribbon_gen6.png index e466eb78842..3dd04927acd 100644 Binary files a/public/images/items/ribbon_gen6.png and b/public/images/items/ribbon_gen6.png differ diff --git a/public/images/items/ribbon_gen7.png b/public/images/items/ribbon_gen7.png index 9c156ebd1c6..225b40da419 100644 Binary files a/public/images/items/ribbon_gen7.png and b/public/images/items/ribbon_gen7.png differ diff --git a/public/images/items/ribbon_gen8.png b/public/images/items/ribbon_gen8.png index 86b3748e348..32aaa803699 100644 Binary files a/public/images/items/ribbon_gen8.png and b/public/images/items/ribbon_gen8.png differ diff --git a/public/images/items/ribbon_gen9.png b/public/images/items/ribbon_gen9.png index e9609daf3cd..ad489005e23 100644 Binary files a/public/images/items/ribbon_gen9.png and b/public/images/items/ribbon_gen9.png differ diff --git a/public/images/items/rock_memory.png b/public/images/items/rock_memory.png index 01f436dd461..cfa71c851c0 100644 Binary files a/public/images/items/rock_memory.png and b/public/images/items/rock_memory.png differ diff --git a/public/images/items/rock_tera_shard.png b/public/images/items/rock_tera_shard.png index b4e6f8a29cf..a07ca7955a4 100644 Binary files a/public/images/items/rock_tera_shard.png and b/public/images/items/rock_tera_shard.png differ diff --git a/public/images/items/rogue_ribbon.png b/public/images/items/rogue_ribbon.png index 85986d93c8a..c3cfdcd85f3 100644 Binary files a/public/images/items/rogue_ribbon.png and b/public/images/items/rogue_ribbon.png differ diff --git a/public/images/items/rusted_shield.png b/public/images/items/rusted_shield.png index 569f86c15c7..3748f13dc4b 100644 Binary files a/public/images/items/rusted_shield.png and b/public/images/items/rusted_shield.png differ diff --git a/public/images/items/rusted_sword.png b/public/images/items/rusted_sword.png index c42e669441c..249233374e0 100644 Binary files a/public/images/items/rusted_sword.png and b/public/images/items/rusted_sword.png differ diff --git a/public/images/items/sablenite.png b/public/images/items/sablenite.png index 904abea5ce4..48eac2d5875 100644 Binary files a/public/images/items/sablenite.png and b/public/images/items/sablenite.png differ diff --git a/public/images/items/sachet.png b/public/images/items/sachet.png index 1ec6010f1af..6d91fa210fc 100644 Binary files a/public/images/items/sachet.png and b/public/images/items/sachet.png differ diff --git a/public/images/items/sacred_ash.png b/public/images/items/sacred_ash.png index 389b2605b93..4fab9dc0dc7 100644 Binary files a/public/images/items/sacred_ash.png and b/public/images/items/sacred_ash.png differ diff --git a/public/images/items/salac_berry.png b/public/images/items/salac_berry.png index ac0d29f2159..846dbb4f160 100644 Binary files a/public/images/items/salac_berry.png and b/public/images/items/salac_berry.png differ diff --git a/public/images/items/salamencite.png b/public/images/items/salamencite.png index 1a0096b4de5..f175f39d351 100644 Binary files a/public/images/items/salamencite.png and b/public/images/items/salamencite.png differ diff --git a/public/images/items/scanner.png b/public/images/items/scanner.png index 27a67484f19..a291d3f43f8 100644 Binary files a/public/images/items/scanner.png and b/public/images/items/scanner.png differ diff --git a/public/images/items/sceptilite.png b/public/images/items/sceptilite.png index 123e79d9893..ff81c4a55fe 100644 Binary files a/public/images/items/sceptilite.png and b/public/images/items/sceptilite.png differ diff --git a/public/images/items/scizorite.png b/public/images/items/scizorite.png index ce86b80701c..8ffca143835 100644 Binary files a/public/images/items/scizorite.png and b/public/images/items/scizorite.png differ diff --git a/public/images/items/scope_lens.png b/public/images/items/scope_lens.png index 57ec2c4148e..d3b1f354313 100644 Binary files a/public/images/items/scope_lens.png and b/public/images/items/scope_lens.png differ diff --git a/public/images/items/scroll_of_darkness.png b/public/images/items/scroll_of_darkness.png index 19be0feb6dc..ff6a6065e40 100644 Binary files a/public/images/items/scroll_of_darkness.png and b/public/images/items/scroll_of_darkness.png differ diff --git a/public/images/items/scroll_of_waters.png b/public/images/items/scroll_of_waters.png index d1e6a0388b6..e4a0cb725eb 100644 Binary files a/public/images/items/scroll_of_waters.png and b/public/images/items/scroll_of_waters.png differ diff --git a/public/images/items/shadow_reins_of_unity.png b/public/images/items/shadow_reins_of_unity.png index 929aeac6fb4..85cbc446851 100644 Binary files a/public/images/items/shadow_reins_of_unity.png and b/public/images/items/shadow_reins_of_unity.png differ diff --git a/public/images/items/sharp_beak.png b/public/images/items/sharp_beak.png index 3ce8d83e3aa..f22019e658b 100644 Binary files a/public/images/items/sharp_beak.png and b/public/images/items/sharp_beak.png differ diff --git a/public/images/items/sharp_meteorite.png b/public/images/items/sharp_meteorite.png index 1a135b64980..61a139fab05 100644 Binary files a/public/images/items/sharp_meteorite.png and b/public/images/items/sharp_meteorite.png differ diff --git a/public/images/items/sharpedonite.png b/public/images/items/sharpedonite.png index 3a71f7258ce..b3eabd5650f 100644 Binary files a/public/images/items/sharpedonite.png and b/public/images/items/sharpedonite.png differ diff --git a/public/images/items/shed_shell.png b/public/images/items/shed_shell.png index a0570cf29c4..17981864897 100644 Binary files a/public/images/items/shed_shell.png and b/public/images/items/shed_shell.png differ diff --git a/public/images/items/shell_bell.png b/public/images/items/shell_bell.png index a185be50188..6367d134672 100644 Binary files a/public/images/items/shell_bell.png and b/public/images/items/shell_bell.png differ diff --git a/public/images/items/shiny_charm.png b/public/images/items/shiny_charm.png index d0c8197f7c4..9f692828d04 100644 Binary files a/public/images/items/shiny_charm.png and b/public/images/items/shiny_charm.png differ diff --git a/public/images/items/shiny_stone.png b/public/images/items/shiny_stone.png index d9d1e8b77ca..d2fabe6ec8b 100644 Binary files a/public/images/items/shiny_stone.png and b/public/images/items/shiny_stone.png differ diff --git a/public/images/items/shock_drive.png b/public/images/items/shock_drive.png index e0bcc66f202..592b0085a8f 100644 Binary files a/public/images/items/shock_drive.png and b/public/images/items/shock_drive.png differ diff --git a/public/images/items/silk_scarf.png b/public/images/items/silk_scarf.png index 2eaea7aa435..83f056c8b41 100644 Binary files a/public/images/items/silk_scarf.png and b/public/images/items/silk_scarf.png differ diff --git a/public/images/items/silver_powder.png b/public/images/items/silver_powder.png index 03f62b45250..eb717fc6776 100644 Binary files a/public/images/items/silver_powder.png and b/public/images/items/silver_powder.png differ diff --git a/public/images/items/sitrus_berry.png b/public/images/items/sitrus_berry.png index 8e9463a80c2..703657ad8dd 100644 Binary files a/public/images/items/sitrus_berry.png and b/public/images/items/sitrus_berry.png differ diff --git a/public/images/items/sky_plate.png b/public/images/items/sky_plate.png index 1fed973142b..293bb8f5dc2 100644 Binary files a/public/images/items/sky_plate.png and b/public/images/items/sky_plate.png differ diff --git a/public/images/items/slowbronite.png b/public/images/items/slowbronite.png index 7eac1fb82d5..3dc21ffb550 100644 Binary files a/public/images/items/slowbronite.png and b/public/images/items/slowbronite.png differ diff --git a/public/images/items/smooth_meteorite.png b/public/images/items/smooth_meteorite.png index 4c2e5e07978..059e8e91a30 100644 Binary files a/public/images/items/smooth_meteorite.png and b/public/images/items/smooth_meteorite.png differ diff --git a/public/images/items/soft_sand.png b/public/images/items/soft_sand.png index c627bc10a8e..feda8cd3858 100644 Binary files a/public/images/items/soft_sand.png and b/public/images/items/soft_sand.png differ diff --git a/public/images/items/soothe_bell.png b/public/images/items/soothe_bell.png index 62fd6ff26c5..fbceb808c56 100644 Binary files a/public/images/items/soothe_bell.png and b/public/images/items/soothe_bell.png differ diff --git a/public/images/items/soul_dew.png b/public/images/items/soul_dew.png index 9c0abfdef9a..56b9655714b 100644 Binary files a/public/images/items/soul_dew.png and b/public/images/items/soul_dew.png differ diff --git a/public/images/items/spell_tag.png b/public/images/items/spell_tag.png index ccf071e122d..f9270c6e0a6 100644 Binary files a/public/images/items/spell_tag.png and b/public/images/items/spell_tag.png differ diff --git a/public/images/items/splash_plate.png b/public/images/items/splash_plate.png index a832f3dbf8a..d86ae5eab57 100644 Binary files a/public/images/items/splash_plate.png and b/public/images/items/splash_plate.png differ diff --git a/public/images/items/spooky_plate.png b/public/images/items/spooky_plate.png index b5794713d0d..d7df7d25e32 100644 Binary files a/public/images/items/spooky_plate.png and b/public/images/items/spooky_plate.png differ diff --git a/public/images/items/starf_berry.png b/public/images/items/starf_berry.png index 71fe1ac116f..cbf423e8343 100644 Binary files a/public/images/items/starf_berry.png and b/public/images/items/starf_berry.png differ diff --git a/public/images/items/steel_memory.png b/public/images/items/steel_memory.png index fbc13016c00..8c45bc8b640 100644 Binary files a/public/images/items/steel_memory.png and b/public/images/items/steel_memory.png differ diff --git a/public/images/items/steel_tera_shard.png b/public/images/items/steel_tera_shard.png index b0b2ccb1737..c93f8c52f60 100644 Binary files a/public/images/items/steel_tera_shard.png and b/public/images/items/steel_tera_shard.png differ diff --git a/public/images/items/steelixite.png b/public/images/items/steelixite.png index 62f688f0842..429c668e656 100644 Binary files a/public/images/items/steelixite.png and b/public/images/items/steelixite.png differ diff --git a/public/images/items/stellar_tera_shard.png b/public/images/items/stellar_tera_shard.png index b6625066e16..1d5982f5b94 100644 Binary files a/public/images/items/stellar_tera_shard.png and b/public/images/items/stellar_tera_shard.png differ diff --git a/public/images/items/stone_plate.png b/public/images/items/stone_plate.png index 44653583e60..dfc3a0cd132 100644 Binary files a/public/images/items/stone_plate.png and b/public/images/items/stone_plate.png differ diff --git a/public/images/items/strange_ball.png b/public/images/items/strange_ball.png index 64246f031ee..2ddce33d7ac 100644 Binary files a/public/images/items/strange_ball.png and b/public/images/items/strange_ball.png differ diff --git a/public/images/items/strawberry_sweet.png b/public/images/items/strawberry_sweet.png index b08fece34cc..5df6e1cd8be 100644 Binary files a/public/images/items/strawberry_sweet.png and b/public/images/items/strawberry_sweet.png differ diff --git a/public/images/items/sun_flute.png b/public/images/items/sun_flute.png index 7010c9fefbd..f81d35fde9c 100644 Binary files a/public/images/items/sun_flute.png and b/public/images/items/sun_flute.png differ diff --git a/public/images/items/sun_stone.png b/public/images/items/sun_stone.png index d22b24792fb..33a7e8f8387 100644 Binary files a/public/images/items/sun_stone.png and b/public/images/items/sun_stone.png differ diff --git a/public/images/items/super_exp_charm.png b/public/images/items/super_exp_charm.png index 8697edf4be6..ccd73f558cc 100644 Binary files a/public/images/items/super_exp_charm.png and b/public/images/items/super_exp_charm.png differ diff --git a/public/images/items/super_lure.png b/public/images/items/super_lure.png index 1a80c8ea309..9c2213cd964 100644 Binary files a/public/images/items/super_lure.png and b/public/images/items/super_lure.png differ diff --git a/public/images/items/super_potion.png b/public/images/items/super_potion.png index bfd1868b545..16205cb0fff 100644 Binary files a/public/images/items/super_potion.png and b/public/images/items/super_potion.png differ diff --git a/public/images/items/super_repel.png b/public/images/items/super_repel.png index db09ded8a26..628cdbc5c1d 100644 Binary files a/public/images/items/super_repel.png and b/public/images/items/super_repel.png differ diff --git a/public/images/items/swampertite.png b/public/images/items/swampertite.png index bfcdd99606b..d4d6415f6f4 100644 Binary files a/public/images/items/swampertite.png and b/public/images/items/swampertite.png differ diff --git a/public/images/items/sweet_apple.png b/public/images/items/sweet_apple.png index 5070af6ae64..cfdf79a9eac 100644 Binary files a/public/images/items/sweet_apple.png and b/public/images/items/sweet_apple.png differ diff --git a/public/images/items/syrupy_apple.png b/public/images/items/syrupy_apple.png index 99a0b7b5627..9c9d05e2e0a 100644 Binary files a/public/images/items/syrupy_apple.png and b/public/images/items/syrupy_apple.png differ diff --git a/public/images/items/tart_apple.png b/public/images/items/tart_apple.png index 8f9cf89da9f..ad9a1728bb5 100644 Binary files a/public/images/items/tart_apple.png and b/public/images/items/tart_apple.png differ diff --git a/public/images/items/tera_orb.png b/public/images/items/tera_orb.png index f4b6e47398e..d8720e41669 100644 Binary files a/public/images/items/tera_orb.png and b/public/images/items/tera_orb.png differ diff --git a/public/images/items/thick_club.png b/public/images/items/thick_club.png index a4459aa7701..f15885f0190 100644 Binary files a/public/images/items/thick_club.png and b/public/images/items/thick_club.png differ diff --git a/public/images/items/thunder_stone.png b/public/images/items/thunder_stone.png index 8b853b2f758..9e87909516b 100644 Binary files a/public/images/items/thunder_stone.png and b/public/images/items/thunder_stone.png differ diff --git a/public/images/items/tm_bug.png b/public/images/items/tm_bug.png index 56278cf2f66..229230198c4 100644 Binary files a/public/images/items/tm_bug.png and b/public/images/items/tm_bug.png differ diff --git a/public/images/items/tm_dark.png b/public/images/items/tm_dark.png index 6168cd2f070..6856b1d5444 100644 Binary files a/public/images/items/tm_dark.png and b/public/images/items/tm_dark.png differ diff --git a/public/images/items/tm_dragon.png b/public/images/items/tm_dragon.png index 9e1866cc2d6..62405519132 100644 Binary files a/public/images/items/tm_dragon.png and b/public/images/items/tm_dragon.png differ diff --git a/public/images/items/tm_electric.png b/public/images/items/tm_electric.png index 0610c3f3337..34e4fe8de7b 100644 Binary files a/public/images/items/tm_electric.png and b/public/images/items/tm_electric.png differ diff --git a/public/images/items/tm_fairy.png b/public/images/items/tm_fairy.png index de6335acbc8..056783a8d63 100644 Binary files a/public/images/items/tm_fairy.png and b/public/images/items/tm_fairy.png differ diff --git a/public/images/items/tm_fighting.png b/public/images/items/tm_fighting.png index b9f812767e3..144d75826cd 100644 Binary files a/public/images/items/tm_fighting.png and b/public/images/items/tm_fighting.png differ diff --git a/public/images/items/tm_fire.png b/public/images/items/tm_fire.png index 1de4b7a4a64..ae19e381873 100644 Binary files a/public/images/items/tm_fire.png and b/public/images/items/tm_fire.png differ diff --git a/public/images/items/tm_flying.png b/public/images/items/tm_flying.png index 4d738edb57f..3db06a69e68 100644 Binary files a/public/images/items/tm_flying.png and b/public/images/items/tm_flying.png differ diff --git a/public/images/items/tm_ghost.png b/public/images/items/tm_ghost.png index 71a6b558fae..a7e8928aa7e 100644 Binary files a/public/images/items/tm_ghost.png and b/public/images/items/tm_ghost.png differ diff --git a/public/images/items/tm_grass.png b/public/images/items/tm_grass.png index 6811d354fd9..42f11f590eb 100644 Binary files a/public/images/items/tm_grass.png and b/public/images/items/tm_grass.png differ diff --git a/public/images/items/tm_ground.png b/public/images/items/tm_ground.png index 0408eb71125..ff9dc7c7384 100644 Binary files a/public/images/items/tm_ground.png and b/public/images/items/tm_ground.png differ diff --git a/public/images/items/tm_ice.png b/public/images/items/tm_ice.png index b628d39f801..4edbb447a3e 100644 Binary files a/public/images/items/tm_ice.png and b/public/images/items/tm_ice.png differ diff --git a/public/images/items/tm_normal.png b/public/images/items/tm_normal.png index ab6e5e82729..19afe85d442 100644 Binary files a/public/images/items/tm_normal.png and b/public/images/items/tm_normal.png differ diff --git a/public/images/items/tm_poison.png b/public/images/items/tm_poison.png index f9f31b015dc..83cb4488f33 100644 Binary files a/public/images/items/tm_poison.png and b/public/images/items/tm_poison.png differ diff --git a/public/images/items/tm_psychic.png b/public/images/items/tm_psychic.png index 3c3becc0af2..4296914eda2 100644 Binary files a/public/images/items/tm_psychic.png and b/public/images/items/tm_psychic.png differ diff --git a/public/images/items/tm_rock.png b/public/images/items/tm_rock.png index d05ee8c1a7c..6e13a1835e7 100644 Binary files a/public/images/items/tm_rock.png and b/public/images/items/tm_rock.png differ diff --git a/public/images/items/tm_steel.png b/public/images/items/tm_steel.png index 840caff9ace..32071b0843b 100644 Binary files a/public/images/items/tm_steel.png and b/public/images/items/tm_steel.png differ diff --git a/public/images/items/tm_water.png b/public/images/items/tm_water.png index 2082766777d..85403f20be7 100644 Binary files a/public/images/items/tm_water.png and b/public/images/items/tm_water.png differ diff --git a/public/images/items/toxic_orb.png b/public/images/items/toxic_orb.png index 7fb36db516e..3483c13ba2b 100644 Binary files a/public/images/items/toxic_orb.png and b/public/images/items/toxic_orb.png differ diff --git a/public/images/items/toxic_plate.png b/public/images/items/toxic_plate.png index 8538e9fce2a..efb2cff129c 100644 Binary files a/public/images/items/toxic_plate.png and b/public/images/items/toxic_plate.png differ diff --git a/public/images/items/twisted_spoon.png b/public/images/items/twisted_spoon.png index 54a96de7d03..9bb23b04386 100644 Binary files a/public/images/items/twisted_spoon.png and b/public/images/items/twisted_spoon.png differ diff --git a/public/images/items/tyranitarite.png b/public/images/items/tyranitarite.png index 3d94f05c35f..691f8c6123d 100644 Binary files a/public/images/items/tyranitarite.png and b/public/images/items/tyranitarite.png differ diff --git a/public/images/items/ub.png b/public/images/items/ub.png index 964fb6b25c3..6ad0702223a 100644 Binary files a/public/images/items/ub.png and b/public/images/items/ub.png differ diff --git a/public/images/items/ultra_ribbon.png b/public/images/items/ultra_ribbon.png index 69dc7365bb4..a63ec63e394 100644 Binary files a/public/images/items/ultra_ribbon.png and b/public/images/items/ultra_ribbon.png differ diff --git a/public/images/items/ultranecrozium_z.png b/public/images/items/ultranecrozium_z.png index 208f3fb173d..cdcb29e6c26 100644 Binary files a/public/images/items/ultranecrozium_z.png and b/public/images/items/ultranecrozium_z.png differ diff --git a/public/images/items/unknown.png b/public/images/items/unknown.png index 4e01608daed..2d0637048ae 100644 Binary files a/public/images/items/unknown.png and b/public/images/items/unknown.png differ diff --git a/public/images/items/unremarkable_teacup.png b/public/images/items/unremarkable_teacup.png index fd4298b6a59..340214b6a5c 100644 Binary files a/public/images/items/unremarkable_teacup.png and b/public/images/items/unremarkable_teacup.png differ diff --git a/public/images/items/upgrade.png b/public/images/items/upgrade.png index 38db96a1792..11a7ade4d6a 100644 Binary files a/public/images/items/upgrade.png and b/public/images/items/upgrade.png differ diff --git a/public/images/items/venusaurite.png b/public/images/items/venusaurite.png index b8118a6c02d..845d1cef75a 100644 Binary files a/public/images/items/venusaurite.png and b/public/images/items/venusaurite.png differ diff --git a/public/images/items/water_memory.png b/public/images/items/water_memory.png index 4586a618836..a0cf8b3c5c9 100644 Binary files a/public/images/items/water_memory.png and b/public/images/items/water_memory.png differ diff --git a/public/images/items/water_stone.png b/public/images/items/water_stone.png index ab4543ee61a..fa3d924960b 100644 Binary files a/public/images/items/water_stone.png and b/public/images/items/water_stone.png differ diff --git a/public/images/items/water_tera_shard.png b/public/images/items/water_tera_shard.png index c00c1b5c1cb..eec8caf1245 100644 Binary files a/public/images/items/water_tera_shard.png and b/public/images/items/water_tera_shard.png differ diff --git a/public/images/items/wellspring_mask.png b/public/images/items/wellspring_mask.png index d5546cdb8da..921c71e1493 100644 Binary files a/public/images/items/wellspring_mask.png and b/public/images/items/wellspring_mask.png differ diff --git a/public/images/items/whipped_dream.png b/public/images/items/whipped_dream.png index 94628a443d1..16090ccaac0 100644 Binary files a/public/images/items/whipped_dream.png and b/public/images/items/whipped_dream.png differ diff --git a/public/images/items/white_herb.png b/public/images/items/white_herb.png index 56ca7c6aeb2..829c64f188e 100644 Binary files a/public/images/items/white_herb.png and b/public/images/items/white_herb.png differ diff --git a/public/images/items/wide_lens.png b/public/images/items/wide_lens.png index bf622521a9a..f7dbe9843fa 100644 Binary files a/public/images/items/wide_lens.png and b/public/images/items/wide_lens.png differ diff --git a/public/images/items/wise_glasses.png b/public/images/items/wise_glasses.png index 49a95761afd..b48d2cb3ffd 100644 Binary files a/public/images/items/wise_glasses.png and b/public/images/items/wise_glasses.png differ diff --git a/public/images/items/wl_ability_urge.png b/public/images/items/wl_ability_urge.png index a9eaa834313..b6b2c8bd398 100644 Binary files a/public/images/items/wl_ability_urge.png and b/public/images/items/wl_ability_urge.png differ diff --git a/public/images/items/wl_antidote.png b/public/images/items/wl_antidote.png index dbe0d5b94ea..93e4757938b 100644 Binary files a/public/images/items/wl_antidote.png and b/public/images/items/wl_antidote.png differ diff --git a/public/images/items/wl_awakening.png b/public/images/items/wl_awakening.png index 9a0adcda904..57e83b30cda 100644 Binary files a/public/images/items/wl_awakening.png and b/public/images/items/wl_awakening.png differ diff --git a/public/images/items/wl_burn_heal.png b/public/images/items/wl_burn_heal.png index d2f65e7da4c..3565af12d62 100644 Binary files a/public/images/items/wl_burn_heal.png and b/public/images/items/wl_burn_heal.png differ diff --git a/public/images/items/wl_custom_spliced.png b/public/images/items/wl_custom_spliced.png index 6a0ad4f8349..8aef30edb27 100644 Binary files a/public/images/items/wl_custom_spliced.png and b/public/images/items/wl_custom_spliced.png differ diff --git a/public/images/items/wl_custom_thief.png b/public/images/items/wl_custom_thief.png index cc1302ffb35..de6d62a48bc 100644 Binary files a/public/images/items/wl_custom_thief.png and b/public/images/items/wl_custom_thief.png differ diff --git a/public/images/items/wl_elixir.png b/public/images/items/wl_elixir.png index 29e413aa634..05eb590c484 100644 Binary files a/public/images/items/wl_elixir.png and b/public/images/items/wl_elixir.png differ diff --git a/public/images/items/wl_ether.png b/public/images/items/wl_ether.png index d3c0fe85918..114e8ffc941 100644 Binary files a/public/images/items/wl_ether.png and b/public/images/items/wl_ether.png differ diff --git a/public/images/items/wl_full_heal.png b/public/images/items/wl_full_heal.png index 68b8272c08f..215f9801d65 100644 Binary files a/public/images/items/wl_full_heal.png and b/public/images/items/wl_full_heal.png differ diff --git a/public/images/items/wl_guard_spec.png b/public/images/items/wl_guard_spec.png index b494123e92e..9d22029e927 100644 Binary files a/public/images/items/wl_guard_spec.png and b/public/images/items/wl_guard_spec.png differ diff --git a/public/images/items/wl_hyper_potion.png b/public/images/items/wl_hyper_potion.png index 51e81461da9..1eb075445e4 100644 Binary files a/public/images/items/wl_hyper_potion.png and b/public/images/items/wl_hyper_potion.png differ diff --git a/public/images/items/wl_ice_heal.png b/public/images/items/wl_ice_heal.png index e28f3205a80..9ac297c0e7c 100644 Binary files a/public/images/items/wl_ice_heal.png and b/public/images/items/wl_ice_heal.png differ diff --git a/public/images/items/wl_item_drop.png b/public/images/items/wl_item_drop.png index fe7ffdbdc1f..73425749670 100644 Binary files a/public/images/items/wl_item_drop.png and b/public/images/items/wl_item_drop.png differ diff --git a/public/images/items/wl_item_urge.png b/public/images/items/wl_item_urge.png index 5c291188dee..17a6343058f 100644 Binary files a/public/images/items/wl_item_urge.png and b/public/images/items/wl_item_urge.png differ diff --git a/public/images/items/wl_max_elixir.png b/public/images/items/wl_max_elixir.png index ba900bc2e97..4a33dc853fd 100644 Binary files a/public/images/items/wl_max_elixir.png and b/public/images/items/wl_max_elixir.png differ diff --git a/public/images/items/wl_max_ether.png b/public/images/items/wl_max_ether.png index 3cd58498fa7..d3f69ce053d 100644 Binary files a/public/images/items/wl_max_ether.png and b/public/images/items/wl_max_ether.png differ diff --git a/public/images/items/wl_max_potion.png b/public/images/items/wl_max_potion.png index cf92810943c..6b58c07e86a 100644 Binary files a/public/images/items/wl_max_potion.png and b/public/images/items/wl_max_potion.png differ diff --git a/public/images/items/wl_max_revive.png b/public/images/items/wl_max_revive.png index 12e3b263c21..f2eabaa8d5b 100644 Binary files a/public/images/items/wl_max_revive.png and b/public/images/items/wl_max_revive.png differ diff --git a/public/images/items/wl_paralyze_heal.png b/public/images/items/wl_paralyze_heal.png index 9a741c705d4..8e89e54c156 100644 Binary files a/public/images/items/wl_paralyze_heal.png and b/public/images/items/wl_paralyze_heal.png differ diff --git a/public/images/items/wl_potion.png b/public/images/items/wl_potion.png index 42086fc20ba..619c5d2b014 100644 Binary files a/public/images/items/wl_potion.png and b/public/images/items/wl_potion.png differ diff --git a/public/images/items/wl_reset_urge.png b/public/images/items/wl_reset_urge.png index 25ba0dfcdb9..0d2f94504f0 100644 Binary files a/public/images/items/wl_reset_urge.png and b/public/images/items/wl_reset_urge.png differ diff --git a/public/images/items/wl_revive.png b/public/images/items/wl_revive.png index c0881125c52..c01b5f68853 100644 Binary files a/public/images/items/wl_revive.png and b/public/images/items/wl_revive.png differ diff --git a/public/images/items/wl_super_potion.png b/public/images/items/wl_super_potion.png index da9ccec78ce..eaf60d6c882 100644 Binary files a/public/images/items/wl_super_potion.png and b/public/images/items/wl_super_potion.png differ diff --git a/public/images/items/x_accuracy.png b/public/images/items/x_accuracy.png index d119a75f1bb..e7af52fc684 100644 Binary files a/public/images/items/x_accuracy.png and b/public/images/items/x_accuracy.png differ diff --git a/public/images/items/x_attack.png b/public/images/items/x_attack.png index 36c76da9486..711aca7269c 100644 Binary files a/public/images/items/x_attack.png and b/public/images/items/x_attack.png differ diff --git a/public/images/items/x_defense.png b/public/images/items/x_defense.png index 2eb14b06ffb..ee8d3fa5e2d 100644 Binary files a/public/images/items/x_defense.png and b/public/images/items/x_defense.png differ diff --git a/public/images/items/x_sp_atk.png b/public/images/items/x_sp_atk.png index 772f9fe3315..f0e674e4d45 100644 Binary files a/public/images/items/x_sp_atk.png and b/public/images/items/x_sp_atk.png differ diff --git a/public/images/items/x_sp_def.png b/public/images/items/x_sp_def.png index 8c9baf03a4c..2ab43574af9 100644 Binary files a/public/images/items/x_sp_def.png and b/public/images/items/x_sp_def.png differ diff --git a/public/images/items/x_speed.png b/public/images/items/x_speed.png index cbd1747142f..daebb295d77 100644 Binary files a/public/images/items/x_speed.png and b/public/images/items/x_speed.png differ diff --git a/public/images/items/zap_plate.png b/public/images/items/zap_plate.png index e582b41937f..a966fb76cd3 100644 Binary files a/public/images/items/zap_plate.png and b/public/images/items/zap_plate.png differ diff --git a/public/images/items/zinc.png b/public/images/items/zinc.png index d2602f43328..c1dfd47a9fc 100644 Binary files a/public/images/items/zinc.png and b/public/images/items/zinc.png differ diff --git a/public/images/items/zoom_lens.png b/public/images/items/zoom_lens.png index f46855135bf..30b3ed55bdf 100644 Binary files a/public/images/items/zoom_lens.png and b/public/images/items/zoom_lens.png differ diff --git a/public/images/pokemon/728.png b/public/images/pokemon/728.png index 414ccd7b0b8..4c7f3f94f27 100644 Binary files a/public/images/pokemon/728.png and b/public/images/pokemon/728.png differ diff --git a/public/images/pokemon/730.png b/public/images/pokemon/730.png index 3438d9fc63f..92090460124 100644 Binary files a/public/images/pokemon/730.png and b/public/images/pokemon/730.png differ diff --git a/public/images/pokemon/749.png b/public/images/pokemon/749.png index 5e51f2f017a..28c2f5ce4e3 100644 Binary files a/public/images/pokemon/749.png and b/public/images/pokemon/749.png differ diff --git a/public/images/pokemon/750.png b/public/images/pokemon/750.png index bfd7e20743d..f0ca7b407dd 100644 Binary files a/public/images/pokemon/750.png and b/public/images/pokemon/750.png differ diff --git a/public/images/pokemon/back/2075.json b/public/images/pokemon/back/2075.json index 4c8365eeddb..3dd46debe2f 100644 --- a/public/images/pokemon/back/2075.json +++ b/public/images/pokemon/back/2075.json @@ -1,41 +1,812 @@ -{ - "textures": [ - { - "image": "2075.png", - "format": "RGBA8888", - "size": { - "w": 71, - "h": 71 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 71, - "h": 43 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 71, - "h": 43 - }, - "frame": { - "x": 0, - "y": 0, - "w": 71, - "h": 43 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:0f1bcbf28a4b69c4dc92a48c8faf81da:0130dd5f38c7e72cc16e62dd634dc3a2:732805cb123f88b2d403da0dec709706$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 147, "y": 1, "w": 71, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 0, "w": 71, "h": 43 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 219, "y": 1, "w": 71, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 0, "w": 71, "h": 43 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 418, "y": 90, "w": 69, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 0, "w": 69, "h": 42 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 213, "y": 215, "w": 67, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 0, "w": 67, "h": 42 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 1, "y": 256, "w": 65, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 0, "w": 65, "h": 42 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 213, "y": 215, "w": 67, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 0, "w": 67, "h": 42 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 418, "y": 90, "w": 69, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 0, "w": 69, "h": 42 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 219, "y": 1, "w": 71, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 0, "w": 71, "h": 43 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 147, "y": 1, "w": 71, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 0, "w": 71, "h": 43 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 435, "y": 1, "w": 71, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 0, "w": 71, "h": 43 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 74, "y": 1, "w": 72, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 0, "w": 72, "h": 43 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0012.png", + "frame": { "x": 1, "y": 1, "w": 72, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 0, "w": 72, "h": 43 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0013.png", + "frame": { "x": 291, "y": 1, "w": 71, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 0, "w": 71, "h": 43 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0014.png", + "frame": { "x": 1, "y": 1, "w": 72, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 0, "w": 72, "h": 43 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0015.png", + "frame": { "x": 74, "y": 1, "w": 72, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 0, "w": 72, "h": 43 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0016.png", + "frame": { "x": 435, "y": 1, "w": 71, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 0, "w": 71, "h": 43 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0017.png", + "frame": { "x": 147, "y": 1, "w": 71, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 0, "w": 71, "h": 43 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0018.png", + "frame": { "x": 219, "y": 1, "w": 71, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 0, "w": 71, "h": 43 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0019.png", + "frame": { "x": 418, "y": 90, "w": 69, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 0, "w": 69, "h": 42 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0020.png", + "frame": { "x": 213, "y": 215, "w": 67, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 0, "w": 67, "h": 42 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0021.png", + "frame": { "x": 1, "y": 256, "w": 65, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 0, "w": 65, "h": 42 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0022.png", + "frame": { "x": 213, "y": 215, "w": 67, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 0, "w": 67, "h": 42 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0023.png", + "frame": { "x": 418, "y": 90, "w": 69, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 0, "w": 69, "h": 42 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0024.png", + "frame": { "x": 219, "y": 1, "w": 71, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 0, "w": 71, "h": 43 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0025.png", + "frame": { "x": 147, "y": 1, "w": 71, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 0, "w": 71, "h": 43 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0026.png", + "frame": { "x": 435, "y": 1, "w": 71, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 0, "w": 71, "h": 43 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0027.png", + "frame": { "x": 74, "y": 1, "w": 72, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 0, "w": 72, "h": 43 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0028.png", + "frame": { "x": 1, "y": 1, "w": 72, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 0, "w": 72, "h": 43 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0029.png", + "frame": { "x": 291, "y": 1, "w": 71, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 0, "w": 71, "h": 43 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0030.png", + "frame": { "x": 1, "y": 1, "w": 72, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 0, "w": 72, "h": 43 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0031.png", + "frame": { "x": 74, "y": 1, "w": 72, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 0, "w": 72, "h": 43 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0032.png", + "frame": { "x": 435, "y": 1, "w": 71, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 0, "w": 71, "h": 43 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0033.png", + "frame": { "x": 147, "y": 1, "w": 71, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 0, "w": 71, "h": 43 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0034.png", + "frame": { "x": 219, "y": 1, "w": 71, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 0, "w": 71, "h": 43 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0035.png", + "frame": { "x": 418, "y": 90, "w": 69, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 0, "w": 69, "h": 42 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0036.png", + "frame": { "x": 213, "y": 215, "w": 67, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 0, "w": 67, "h": 42 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0037.png", + "frame": { "x": 1, "y": 256, "w": 65, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 0, "w": 65, "h": 42 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0038.png", + "frame": { "x": 213, "y": 215, "w": 67, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 0, "w": 67, "h": 42 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0039.png", + "frame": { "x": 418, "y": 90, "w": 69, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 0, "w": 69, "h": 42 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0040.png", + "frame": { "x": 219, "y": 1, "w": 71, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 0, "w": 71, "h": 43 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0041.png", + "frame": { "x": 147, "y": 1, "w": 71, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 0, "w": 71, "h": 43 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0042.png", + "frame": { "x": 435, "y": 1, "w": 71, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 0, "w": 71, "h": 43 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0043.png", + "frame": { "x": 74, "y": 1, "w": 72, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 0, "w": 72, "h": 43 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0044.png", + "frame": { "x": 1, "y": 1, "w": 72, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 0, "w": 72, "h": 43 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0045.png", + "frame": { "x": 291, "y": 1, "w": 71, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 0, "w": 71, "h": 43 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0046.png", + "frame": { "x": 1, "y": 1, "w": 72, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 0, "w": 72, "h": 43 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0047.png", + "frame": { "x": 74, "y": 1, "w": 72, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 0, "w": 72, "h": 43 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0048.png", + "frame": { "x": 435, "y": 1, "w": 71, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 0, "w": 71, "h": 43 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0049.png", + "frame": { "x": 147, "y": 1, "w": 71, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 0, "w": 71, "h": 43 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0050.png", + "frame": { "x": 346, "y": 89, "w": 71, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 1, "w": 71, "h": 41 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0051.png", + "frame": { "x": 425, "y": 133, "w": 71, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 71, "h": 40 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0052.png", + "frame": { "x": 425, "y": 133, "w": 71, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 1, "w": 71, "h": 40 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0053.png", + "frame": { "x": 425, "y": 133, "w": 71, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 71, "h": 40 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0054.png", + "frame": { "x": 289, "y": 175, "w": 71, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 71, "h": 40 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0055.png", + "frame": { "x": 497, "y": 174, "w": 71, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 2, "w": 71, "h": 40 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0056.png", + "frame": { "x": 1, "y": 174, "w": 71, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 2, "w": 71, "h": 40 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0057.png", + "frame": { "x": 497, "y": 133, "w": 71, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 2, "w": 71, "h": 40 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0058.png", + "frame": { "x": 503, "y": 215, "w": 70, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 2, "w": 70, "h": 40 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0059.png", + "frame": { "x": 73, "y": 215, "w": 69, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 2, "w": 69, "h": 41 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0060.png", + "frame": { "x": 486, "y": 46, "w": 68, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 2, "w": 68, "h": 43 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0061.png", + "frame": { "x": 210, "y": 45, "w": 67, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 2, "w": 67, "h": 44 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0062.png", + "frame": { "x": 1, "y": 45, "w": 66, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 15, "y": 1, "w": 66, "h": 46 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0063.png", + "frame": { "x": 278, "y": 45, "w": 67, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 2, "w": 67, "h": 44 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0064.png", + "frame": { "x": 284, "y": 131, "w": 69, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 2, "w": 69, "h": 42 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0065.png", + "frame": { "x": 143, "y": 215, "w": 69, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 2, "w": 69, "h": 41 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0066.png", + "frame": { "x": 281, "y": 216, "w": 70, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 2, "w": 70, "h": 40 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0067.png", + "frame": { "x": 432, "y": 215, "w": 70, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 2, "w": 70, "h": 40 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0068.png", + "frame": { "x": 361, "y": 215, "w": 70, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 2, "w": 70, "h": 40 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0069.png", + "frame": { "x": 73, "y": 174, "w": 71, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 2, "w": 71, "h": 40 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0070.png", + "frame": { "x": 1, "y": 215, "w": 71, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 71, "h": 40 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0071.png", + "frame": { "x": 145, "y": 174, "w": 71, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 71, "h": 40 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0072.png", + "frame": { "x": 71, "y": 132, "w": 70, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 70, "h": 41 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0073.png", + "frame": { "x": 140, "y": 90, "w": 71, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 71, "h": 41 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0074.png", + "frame": { "x": 68, "y": 88, "w": 71, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 71, "h": 41 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0075.png", + "frame": { "x": 346, "y": 45, "w": 70, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 70, "h": 42 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0076.png", + "frame": { "x": 1, "y": 130, "w": 69, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 69, "h": 42 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0077.png", + "frame": { "x": 417, "y": 45, "w": 68, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 68, "h": 43 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0078.png", + "frame": { "x": 507, "y": 1, "w": 69, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 69, "h": 44 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0079.png", + "frame": { "x": 140, "y": 45, "w": 69, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 69, "h": 43 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0080.png", + "frame": { "x": 488, "y": 90, "w": 69, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 69, "h": 42 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0081.png", + "frame": { "x": 142, "y": 132, "w": 70, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 70, "h": 41 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0082.png", + "frame": { "x": 213, "y": 132, "w": 70, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 70, "h": 41 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0083.png", + "frame": { "x": 354, "y": 133, "w": 70, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 70, "h": 41 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0084.png", + "frame": { "x": 217, "y": 174, "w": 71, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 71, "h": 40 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0085.png", + "frame": { "x": 425, "y": 174, "w": 71, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 71, "h": 40 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0086.png", + "frame": { "x": 212, "y": 90, "w": 71, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 71, "h": 41 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0087.png", + "frame": { "x": 346, "y": 89, "w": 71, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 71, "h": 41 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0088.png", + "frame": { "x": 68, "y": 45, "w": 71, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 1, "w": 71, "h": 42 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0089.png", + "frame": { "x": 363, "y": 1, "w": 71, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 0, "w": 71, "h": 43 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.13-x64", + "image": "2075.png", + "format": "I8", + "size": { "w": 577, "h": 299 }, + "scale": "1" + } } diff --git a/public/images/pokemon/back/2075.png b/public/images/pokemon/back/2075.png index 98e86ccfe81..6c11c18bd1d 100644 Binary files a/public/images/pokemon/back/2075.png and b/public/images/pokemon/back/2075.png differ diff --git a/public/images/pokemon/back/728.png b/public/images/pokemon/back/728.png index 36633bf4174..fa04ca2bdbb 100644 Binary files a/public/images/pokemon/back/728.png and b/public/images/pokemon/back/728.png differ diff --git a/public/images/pokemon/back/730.png b/public/images/pokemon/back/730.png index 75499065e47..5c150efb08c 100644 Binary files a/public/images/pokemon/back/730.png and b/public/images/pokemon/back/730.png differ diff --git a/public/images/pokemon/back/749.png b/public/images/pokemon/back/749.png index 8a14933a52e..0f28ee107c9 100644 Binary files a/public/images/pokemon/back/749.png and b/public/images/pokemon/back/749.png differ diff --git a/public/images/pokemon/back/750.png b/public/images/pokemon/back/750.png index caa6b0c4eef..62015e8714e 100644 Binary files a/public/images/pokemon/back/750.png and b/public/images/pokemon/back/750.png differ diff --git a/public/images/pokemon/back/shiny/730.png b/public/images/pokemon/back/shiny/730.png index 1a988baaa92..7a6c4d4fc73 100644 Binary files a/public/images/pokemon/back/shiny/730.png and b/public/images/pokemon/back/shiny/730.png differ diff --git a/public/images/pokemon/exp/2037.json b/public/images/pokemon/exp/2037.json index 2e3362314c9..201e8eaa174 100644 --- a/public/images/pokemon/exp/2037.json +++ b/public/images/pokemon/exp/2037.json @@ -1,1112 +1,101 @@ -{ - "textures": [ - { - "image": "2037.png", - "format": "RGBA8888", - "size": { - "w": 224, - "h": 224 - }, - "scale": 1, - "frames": [ - { - "filename": "0040.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 47 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 52, - "h": 47 - }, - "frame": { - "x": 0, - "y": 0, - "w": 52, - "h": 47 - } - }, - { - "filename": "0041.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 47 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 52, - "h": 47 - }, - "frame": { - "x": 0, - "y": 47, - "w": 52, - "h": 47 - } - }, - { - "filename": "0042.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 47 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 52, - "h": 47 - }, - "frame": { - "x": 52, - "y": 0, - "w": 52, - "h": 47 - } - }, - { - "filename": "0044.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 47 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 53, - "h": 46 - }, - "frame": { - "x": 104, - "y": 0, - "w": 53, - "h": 46 - } - }, - { - "filename": "0045.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 47 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 53, - "h": 46 - }, - "frame": { - "x": 157, - "y": 0, - "w": 53, - "h": 46 - } - }, - { - "filename": "0039.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 47 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 52, - "h": 46 - }, - "frame": { - "x": 0, - "y": 94, - "w": 52, - "h": 46 - } - }, - { - "filename": "0043.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 47 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 52, - "h": 46 - }, - "frame": { - "x": 52, - "y": 47, - "w": 52, - "h": 46 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 47 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 53, - "h": 45 - }, - "frame": { - "x": 104, - "y": 46, - "w": 53, - "h": 45 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 47 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 53, - "h": 45 - }, - "frame": { - "x": 104, - "y": 46, - "w": 53, - "h": 45 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 47 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 53, - "h": 45 - }, - "frame": { - "x": 104, - "y": 46, - "w": 53, - "h": 45 - } - }, - { - "filename": "0024.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 47 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 53, - "h": 45 - }, - "frame": { - "x": 104, - "y": 46, - "w": 53, - "h": 45 - } - }, - { - "filename": "0026.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 47 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 53, - "h": 45 - }, - "frame": { - "x": 104, - "y": 46, - "w": 53, - "h": 45 - } - }, - { - "filename": "0036.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 47 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 53, - "h": 45 - }, - "frame": { - "x": 104, - "y": 46, - "w": 53, - "h": 45 - } - }, - { - "filename": "0047.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 47 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 52, - "h": 46 - }, - "frame": { - "x": 0, - "y": 140, - "w": 52, - "h": 46 - } - }, - { - "filename": "0048.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 47 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 53, - "h": 45 - }, - "frame": { - "x": 157, - "y": 46, - "w": 53, - "h": 45 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 47 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 52, - "h": 45 - }, - "frame": { - "x": 52, - "y": 93, - "w": 52, - "h": 45 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 47 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 52, - "h": 45 - }, - "frame": { - "x": 52, - "y": 93, - "w": 52, - "h": 45 - } - }, - { - "filename": "0025.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 47 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 52, - "h": 45 - }, - "frame": { - "x": 52, - "y": 93, - "w": 52, - "h": 45 - } - }, - { - "filename": "0037.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 47 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 52, - "h": 45 - }, - "frame": { - "x": 52, - "y": 93, - "w": 52, - "h": 45 - } - }, - { - "filename": "0046.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 47 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 52, - "h": 45 - }, - "frame": { - "x": 52, - "y": 93, - "w": 52, - "h": 45 - } - }, - { - "filename": "0051.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 47 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 52, - "h": 45 - }, - "frame": { - "x": 52, - "y": 93, - "w": 52, - "h": 45 - } - }, - { - "filename": "0052.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 47 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 52, - "h": 45 - }, - "frame": { - "x": 52, - "y": 93, - "w": 52, - "h": 45 - } - }, - { - "filename": "0049.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 47 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 53, - "h": 45 - }, - "frame": { - "x": 104, - "y": 91, - "w": 53, - "h": 45 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 47 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 53, - "h": 44 - }, - "frame": { - "x": 157, - "y": 91, - "w": 53, - "h": 44 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 47 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 53, - "h": 44 - }, - "frame": { - "x": 157, - "y": 91, - "w": 53, - "h": 44 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 47 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 53, - "h": 44 - }, - "frame": { - "x": 157, - "y": 91, - "w": 53, - "h": 44 - } - }, - { - "filename": "0023.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 47 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 53, - "h": 44 - }, - "frame": { - "x": 157, - "y": 91, - "w": 53, - "h": 44 - } - }, - { - "filename": "0027.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 47 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 53, - "h": 44 - }, - "frame": { - "x": 157, - "y": 91, - "w": 53, - "h": 44 - } - }, - { - "filename": "0035.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 47 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 53, - "h": 44 - }, - "frame": { - "x": 157, - "y": 91, - "w": 53, - "h": 44 - } - }, - { - "filename": "0038.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 47 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 52, - "h": 45 - }, - "frame": { - "x": 52, - "y": 138, - "w": 52, - "h": 45 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 47 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 54, - "h": 41 - }, - "frame": { - "x": 52, - "y": 183, - "w": 54, - "h": 41 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 47 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 54, - "h": 41 - }, - "frame": { - "x": 52, - "y": 183, - "w": 54, - "h": 41 - } - }, - { - "filename": "0018.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 47 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 54, - "h": 41 - }, - "frame": { - "x": 52, - "y": 183, - "w": 54, - "h": 41 - } - }, - { - "filename": "0020.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 47 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 54, - "h": 41 - }, - "frame": { - "x": 52, - "y": 183, - "w": 54, - "h": 41 - } - }, - { - "filename": "0030.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 47 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 54, - "h": 41 - }, - "frame": { - "x": 52, - "y": 183, - "w": 54, - "h": 41 - } - }, - { - "filename": "0032.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 47 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 54, - "h": 41 - }, - "frame": { - "x": 52, - "y": 183, - "w": 54, - "h": 41 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 47 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 53, - "h": 44 - }, - "frame": { - "x": 104, - "y": 136, - "w": 53, - "h": 44 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 47 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 53, - "h": 44 - }, - "frame": { - "x": 104, - "y": 136, - "w": 53, - "h": 44 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 47 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 53, - "h": 44 - }, - "frame": { - "x": 104, - "y": 136, - "w": 53, - "h": 44 - } - }, - { - "filename": "0022.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 47 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 53, - "h": 44 - }, - "frame": { - "x": 104, - "y": 136, - "w": 53, - "h": 44 - } - }, - { - "filename": "0028.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 47 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 53, - "h": 44 - }, - "frame": { - "x": 104, - "y": 136, - "w": 53, - "h": 44 - } - }, - { - "filename": "0034.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 47 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 53, - "h": 44 - }, - "frame": { - "x": 104, - "y": 136, - "w": 53, - "h": 44 - } - }, - { - "filename": "0050.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 47 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 52, - "h": 45 - }, - "frame": { - "x": 157, - "y": 135, - "w": 52, - "h": 45 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 47 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 54, - "h": 42 - }, - "frame": { - "x": 106, - "y": 180, - "w": 54, - "h": 42 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 47 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 54, - "h": 42 - }, - "frame": { - "x": 106, - "y": 180, - "w": 54, - "h": 42 - } - }, - { - "filename": "0017.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 47 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 54, - "h": 42 - }, - "frame": { - "x": 106, - "y": 180, - "w": 54, - "h": 42 - } - }, - { - "filename": "0021.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 47 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 54, - "h": 42 - }, - "frame": { - "x": 106, - "y": 180, - "w": 54, - "h": 42 - } - }, - { - "filename": "0029.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 47 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 54, - "h": 42 - }, - "frame": { - "x": 106, - "y": 180, - "w": 54, - "h": 42 - } - }, - { - "filename": "0033.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 47 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 54, - "h": 42 - }, - "frame": { - "x": 106, - "y": 180, - "w": 54, - "h": 42 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 47 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 54, - "h": 42 - }, - "frame": { - "x": 160, - "y": 180, - "w": 54, - "h": 42 - } - }, - { - "filename": "0019.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 47 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 54, - "h": 42 - }, - "frame": { - "x": 160, - "y": 180, - "w": 54, - "h": 42 - } - }, - { - "filename": "0031.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 47 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 54, - "h": 42 - }, - "frame": { - "x": 160, - "y": 180, - "w": 54, - "h": 42 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:cb371bc4c4d65115dbfd5277a8b37fae:f235d22648ca7d0f60ca039b1e3915e7:c679847d1c2ddf91caeaa5ebb76a6664$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 0, "y": 45, "w": 55, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 55, "h": 46 }, + "sourceSize": { "w": 59, "h": 46 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 173, "y": 45, "w": 54, "h": 45 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 54, "h": 45 }, + "sourceSize": { "w": 59, "h": 46 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 112, "y": 46, "w": 54, "h": 45 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 54, "h": 45 }, + "sourceSize": { "w": 59, "h": 46 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 55, "y": 89, "w": 54, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 54, "h": 44 }, + "sourceSize": { "w": 59, "h": 46 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 166, "y": 90, "w": 54, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 54, "h": 44 }, + "sourceSize": { "w": 59, "h": 46 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 55, "y": 45, "w": 57, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 57, "h": 44 }, + "sourceSize": { "w": 59, "h": 46 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 0, "y": 0, "w": 59, "h": 45 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 59, "h": 45 }, + "sourceSize": { "w": 59, "h": 46 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 59, "y": 0, "w": 58, "h": 45 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 58, "h": 45 }, + "sourceSize": { "w": 59, "h": 46 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 173, "y": 0, "w": 57, "h": 45 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 57, "h": 45 }, + "sourceSize": { "w": 59, "h": 46 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 117, "y": 0, "w": 56, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 56, "h": 46 }, + "sourceSize": { "w": 59, "h": 46 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.13-x64", + "image": "2037.png", + "format": "I8", + "size": { "w": 230, "h": 134 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/2037.png b/public/images/pokemon/exp/2037.png index a892d43c70b..b1ebd401e5f 100644 Binary files a/public/images/pokemon/exp/2037.png and b/public/images/pokemon/exp/2037.png differ diff --git a/public/images/pokemon/exp/2038.json b/public/images/pokemon/exp/2038.json index b7d26753f24..90b36cbc795 100644 --- a/public/images/pokemon/exp/2038.json +++ b/public/images/pokemon/exp/2038.json @@ -1,692 +1,155 @@ -{ - "textures": [ - { - "image": "2038.png", - "format": "RGBA8888", - "size": { - "w": 516, - "h": 516 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 94, - "h": 87 - }, - "spriteSourceSize": { - "x": 3, - "y": 9, - "w": 86, - "h": 74 - }, - "frame": { - "x": 0, - "y": 0, - "w": 86, - "h": 74 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 94, - "h": 87 - }, - "spriteSourceSize": { - "x": 3, - "y": 8, - "w": 84, - "h": 75 - }, - "frame": { - "x": 86, - "y": 0, - "w": 84, - "h": 75 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 94, - "h": 87 - }, - "spriteSourceSize": { - "x": 2, - "y": 8, - "w": 85, - "h": 75 - }, - "frame": { - "x": 170, - "y": 0, - "w": 85, - "h": 75 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 94, - "h": 87 - }, - "spriteSourceSize": { - "x": 2, - "y": 8, - "w": 85, - "h": 75 - }, - "frame": { - "x": 255, - "y": 0, - "w": 85, - "h": 75 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 94, - "h": 87 - }, - "spriteSourceSize": { - "x": 1, - "y": 8, - "w": 86, - "h": 75 - }, - "frame": { - "x": 340, - "y": 0, - "w": 86, - "h": 75 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 94, - "h": 87 - }, - "spriteSourceSize": { - "x": 1, - "y": 8, - "w": 86, - "h": 75 - }, - "frame": { - "x": 426, - "y": 0, - "w": 86, - "h": 75 - } - }, - { - "filename": "0031.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 94, - "h": 87 - }, - "spriteSourceSize": { - "x": 3, - "y": 8, - "w": 88, - "h": 75 - }, - "frame": { - "x": 0, - "y": 75, - "w": 88, - "h": 75 - } - }, - { - "filename": "0032.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 94, - "h": 87 - }, - "spriteSourceSize": { - "x": 3, - "y": 8, - "w": 87, - "h": 75 - }, - "frame": { - "x": 88, - "y": 75, - "w": 87, - "h": 75 - } - }, - { - "filename": "0030.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 94, - "h": 87 - }, - "spriteSourceSize": { - "x": 3, - "y": 7, - "w": 89, - "h": 76 - }, - "frame": { - "x": 175, - "y": 75, - "w": 89, - "h": 76 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 94, - "h": 87 - }, - "spriteSourceSize": { - "x": 0, - "y": 8, - "w": 87, - "h": 77 - }, - "frame": { - "x": 264, - "y": 75, - "w": 87, - "h": 77 - } - }, - { - "filename": "0029.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 94, - "h": 87 - }, - "spriteSourceSize": { - "x": 3, - "y": 6, - "w": 90, - "h": 77 - }, - "frame": { - "x": 351, - "y": 75, - "w": 90, - "h": 77 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 94, - "h": 87 - }, - "spriteSourceSize": { - "x": 0, - "y": 8, - "w": 86, - "h": 78 - }, - "frame": { - "x": 0, - "y": 150, - "w": 86, - "h": 78 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 94, - "h": 87 - }, - "spriteSourceSize": { - "x": 0, - "y": 9, - "w": 85, - "h": 78 - }, - "frame": { - "x": 86, - "y": 150, - "w": 85, - "h": 78 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 94, - "h": 87 - }, - "spriteSourceSize": { - "x": 0, - "y": 9, - "w": 85, - "h": 78 - }, - "frame": { - "x": 171, - "y": 151, - "w": 85, - "h": 78 - } - }, - { - "filename": "0028.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 94, - "h": 87 - }, - "spriteSourceSize": { - "x": 3, - "y": 5, - "w": 91, - "h": 78 - }, - "frame": { - "x": 256, - "y": 152, - "w": 91, - "h": 78 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 94, - "h": 87 - }, - "spriteSourceSize": { - "x": 0, - "y": 8, - "w": 86, - "h": 79 - }, - "frame": { - "x": 347, - "y": 152, - "w": 86, - "h": 79 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 94, - "h": 87 - }, - "spriteSourceSize": { - "x": 0, - "y": 8, - "w": 86, - "h": 79 - }, - "frame": { - "x": 0, - "y": 228, - "w": 86, - "h": 79 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 94, - "h": 87 - }, - "spriteSourceSize": { - "x": 0, - "y": 8, - "w": 85, - "h": 79 - }, - "frame": { - "x": 86, - "y": 228, - "w": 85, - "h": 79 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 94, - "h": 87 - }, - "spriteSourceSize": { - "x": 0, - "y": 8, - "w": 85, - "h": 79 - }, - "frame": { - "x": 171, - "y": 229, - "w": 85, - "h": 79 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 94, - "h": 87 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 85, - "h": 79 - }, - "frame": { - "x": 256, - "y": 230, - "w": 85, - "h": 79 - } - }, - { - "filename": "0027.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 94, - "h": 87 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 90, - "h": 79 - }, - "frame": { - "x": 341, - "y": 231, - "w": 90, - "h": 79 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 94, - "h": 87 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 85, - "h": 80 - }, - "frame": { - "x": 431, - "y": 231, - "w": 85, - "h": 80 - } - }, - { - "filename": "0017.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 94, - "h": 87 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 86, - "h": 80 - }, - "frame": { - "x": 0, - "y": 307, - "w": 86, - "h": 80 - } - }, - { - "filename": "0018.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 94, - "h": 87 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 87, - "h": 81 - }, - "frame": { - "x": 86, - "y": 308, - "w": 87, - "h": 81 - } - }, - { - "filename": "0026.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 94, - "h": 87 - }, - "spriteSourceSize": { - "x": 4, - "y": 2, - "w": 90, - "h": 81 - }, - "frame": { - "x": 173, - "y": 309, - "w": 90, - "h": 81 - } - }, - { - "filename": "0019.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 94, - "h": 87 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 88, - "h": 82 - }, - "frame": { - "x": 263, - "y": 310, - "w": 88, - "h": 82 - } - }, - { - "filename": "0025.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 94, - "h": 87 - }, - "spriteSourceSize": { - "x": 4, - "y": 1, - "w": 90, - "h": 82 - }, - "frame": { - "x": 351, - "y": 311, - "w": 90, - "h": 82 - } - }, - { - "filename": "0020.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 94, - "h": 87 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 88, - "h": 83 - }, - "frame": { - "x": 0, - "y": 389, - "w": 88, - "h": 83 - } - }, - { - "filename": "0021.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 94, - "h": 87 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 89, - "h": 83 - }, - "frame": { - "x": 88, - "y": 390, - "w": 89, - "h": 83 - } - }, - { - "filename": "0022.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 94, - "h": 87 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 89, - "h": 83 - }, - "frame": { - "x": 177, - "y": 392, - "w": 89, - "h": 83 - } - }, - { - "filename": "0023.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 94, - "h": 87 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 89, - "h": 83 - }, - "frame": { - "x": 266, - "y": 393, - "w": 89, - "h": 83 - } - }, - { - "filename": "0024.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 94, - "h": 87 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 90, - "h": 83 - }, - "frame": { - "x": 355, - "y": 393, - "w": 90, - "h": 83 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:3548b7394d2a2d4370b938ffb12dbe96:5ccdea89bf7be09a529efae090aea261:51bcdbb4fa6a1a9e90a83c2a4132ee1b$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 157, "y": 194, "w": 76, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 76, "h": 65 }, + "sourceSize": { "w": 86, "h": 67 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 164, "y": 128, "w": 80, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 80, "h": 66 }, + "sourceSize": { "w": 86, "h": 67 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 244, "y": 128, "w": 80, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 80, "h": 64 }, + "sourceSize": { "w": 86, "h": 67 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 0, "y": 130, "w": 80, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 80, "h": 64 }, + "sourceSize": { "w": 86, "h": 67 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 78, "y": 194, "w": 79, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 79, "h": 64 }, + "sourceSize": { "w": 86, "h": 67 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 170, "y": 0, "w": 84, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 84, "h": 64 }, + "sourceSize": { "w": 86, "h": 67 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 254, "y": 0, "w": 84, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 84, "h": 64 }, + "sourceSize": { "w": 86, "h": 67 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 86, "y": 0, "w": 84, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 84, "h": 65 }, + "sourceSize": { "w": 86, "h": 67 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 170, "y": 64, "w": 84, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 84, "h": 64 }, + "sourceSize": { "w": 86, "h": 67 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 0, "y": 0, "w": 86, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 86, "h": 65 }, + "sourceSize": { "w": 86, "h": 67 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 254, "y": 64, "w": 84, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 84, "h": 64 }, + "sourceSize": { "w": 86, "h": 67 }, + "duration": 100 + }, + { + "filename": "0012.png", + "frame": { "x": 0, "y": 65, "w": 82, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 0, "w": 82, "h": 65 }, + "sourceSize": { "w": 86, "h": 67 }, + "duration": 100 + }, + { + "filename": "0013.png", + "frame": { "x": 80, "y": 130, "w": 80, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 80, "h": 64 }, + "sourceSize": { "w": 86, "h": 67 }, + "duration": 100 + }, + { + "filename": "0014.png", + "frame": { "x": 82, "y": 65, "w": 82, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 82, "h": 65 }, + "sourceSize": { "w": 86, "h": 67 }, + "duration": 100 + }, + { + "filename": "0015.png", + "frame": { "x": 244, "y": 192, "w": 80, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 80, "h": 64 }, + "sourceSize": { "w": 86, "h": 67 }, + "duration": 100 + }, + { + "filename": "0016.png", + "frame": { "x": 0, "y": 194, "w": 78, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 1, "w": 78, "h": 65 }, + "sourceSize": { "w": 86, "h": 67 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.13-x64", + "image": "2038.png", + "format": "I8", + "size": { "w": 338, "h": 259 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/2038.png b/public/images/pokemon/exp/2038.png index 8e2e9435eee..c6fdb999df3 100644 Binary files a/public/images/pokemon/exp/2038.png and b/public/images/pokemon/exp/2038.png differ diff --git a/public/images/pokemon/exp/2074.json b/public/images/pokemon/exp/2074.json index 7ee41553243..7512afe50ac 100644 --- a/public/images/pokemon/exp/2074.json +++ b/public/images/pokemon/exp/2074.json @@ -1,272 +1,425 @@ -{ - "textures": [ - { - "image": "2074.png", - "format": "RGBA8888", - "size": { - "w": 142, - "h": 142 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 63, - "h": 44 - }, - "spriteSourceSize": { - "x": 0, - "y": 16, - "w": 63, - "h": 28 - }, - "frame": { - "x": 0, - "y": 0, - "w": 63, - "h": 28 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 63, - "h": 44 - }, - "spriteSourceSize": { - "x": 1, - "y": 12, - "w": 61, - "h": 30 - }, - "frame": { - "x": 63, - "y": 0, - "w": 61, - "h": 30 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 63, - "h": 44 - }, - "spriteSourceSize": { - "x": 1, - "y": 12, - "w": 61, - "h": 30 - }, - "frame": { - "x": 63, - "y": 0, - "w": 61, - "h": 30 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 63, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 8, - "w": 57, - "h": 32 - }, - "frame": { - "x": 0, - "y": 28, - "w": 57, - "h": 32 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 63, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 8, - "w": 57, - "h": 32 - }, - "frame": { - "x": 0, - "y": 28, - "w": 57, - "h": 32 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 63, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 4, - "w": 56, - "h": 35 - }, - "frame": { - "x": 57, - "y": 30, - "w": 56, - "h": 35 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 63, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 4, - "w": 56, - "h": 35 - }, - "frame": { - "x": 57, - "y": 30, - "w": 56, - "h": 35 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 63, - "h": 44 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 52, - "h": 37 - }, - "frame": { - "x": 0, - "y": 60, - "w": 52, - "h": 37 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 63, - "h": 44 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 52, - "h": 37 - }, - "frame": { - "x": 0, - "y": 60, - "w": 52, - "h": 37 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 63, - "h": 44 - }, - "spriteSourceSize": { - "x": 8, - "y": 0, - "w": 47, - "h": 40 - }, - "frame": { - "x": 0, - "y": 97, - "w": 47, - "h": 40 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 63, - "h": 44 - }, - "spriteSourceSize": { - "x": 8, - "y": 0, - "w": 48, - "h": 39 - }, - "frame": { - "x": 47, - "y": 97, - "w": 48, - "h": 39 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 63, - "h": 44 - }, - "spriteSourceSize": { - "x": 8, - "y": 0, - "w": 47, - "h": 39 - }, - "frame": { - "x": 95, - "y": 65, - "w": 47, - "h": 39 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:17eb999510749cb5bf44945ce0e6af23:03e8369dbf7ea1c1898cee8cc1b989b3:ad137687a877f55f096b7447bfdfe295$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 120, "y": 124, "w": 55, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 4, "w": 55, "h": 30 }, + "sourceSize": { "w": 70, "h": 42 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 65, "y": 94, "w": 58, "h": 29 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 7, "w": 58, "h": 29 }, + "sourceSize": { "w": 70, "h": 42 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 124, "y": 95, "w": 60, "h": 28 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 11, "w": 60, "h": 28 }, + "sourceSize": { "w": 70, "h": 42 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 1, "y": 93, "w": 63, "h": 28 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 14, "w": 63, "h": 28 }, + "sourceSize": { "w": 70, "h": 42 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 255, "y": 33, "w": 65, "h": 29 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 13, "w": 65, "h": 29 }, + "sourceSize": { "w": 70, "h": 42 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 1, "y": 33, "w": 67, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 12, "w": 67, "h": 30 }, + "sourceSize": { "w": 70, "h": 42 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 255, "y": 63, "w": 65, "h": 29 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 11, "w": 65, "h": 29 }, + "sourceSize": { "w": 70, "h": 42 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 135, "y": 66, "w": 64, "h": 28 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 11, "w": 64, "h": 28 }, + "sourceSize": { "w": 70, "h": 42 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 260, "y": 122, "w": 62, "h": 27 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 10, "w": 62, "h": 27 }, + "sourceSize": { "w": 70, "h": 42 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 1, "y": 122, "w": 60, "h": 28 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 8, "w": 60, "h": 28 }, + "sourceSize": { "w": 70, "h": 42 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 62, "y": 124, "w": 57, "h": 29 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 6, "w": 57, "h": 29 }, + "sourceSize": { "w": 70, "h": 42 }, + "duration": 100 + }, + { + "filename": "0012.png", + "frame": { "x": 120, "y": 124, "w": 55, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 4, "w": 55, "h": 30 }, + "sourceSize": { "w": 70, "h": 42 }, + "duration": 100 + }, + { + "filename": "0013.png", + "frame": { "x": 65, "y": 94, "w": 58, "h": 29 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 7, "w": 58, "h": 29 }, + "sourceSize": { "w": 70, "h": 42 }, + "duration": 100 + }, + { + "filename": "0014.png", + "frame": { "x": 124, "y": 95, "w": 60, "h": 28 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 11, "w": 60, "h": 28 }, + "sourceSize": { "w": 70, "h": 42 }, + "duration": 100 + }, + { + "filename": "0015.png", + "frame": { "x": 1, "y": 93, "w": 63, "h": 28 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 14, "w": 63, "h": 28 }, + "sourceSize": { "w": 70, "h": 42 }, + "duration": 100 + }, + { + "filename": "0016.png", + "frame": { "x": 255, "y": 33, "w": 65, "h": 29 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 13, "w": 65, "h": 29 }, + "sourceSize": { "w": 70, "h": 42 }, + "duration": 100 + }, + { + "filename": "0017.png", + "frame": { "x": 1, "y": 33, "w": 67, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 12, "w": 67, "h": 30 }, + "sourceSize": { "w": 70, "h": 42 }, + "duration": 100 + }, + { + "filename": "0018.png", + "frame": { "x": 255, "y": 63, "w": 65, "h": 29 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 11, "w": 65, "h": 29 }, + "sourceSize": { "w": 70, "h": 42 }, + "duration": 100 + }, + { + "filename": "0019.png", + "frame": { "x": 135, "y": 66, "w": 64, "h": 28 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 11, "w": 64, "h": 28 }, + "sourceSize": { "w": 70, "h": 42 }, + "duration": 100 + }, + { + "filename": "0020.png", + "frame": { "x": 185, "y": 123, "w": 62, "h": 27 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 10, "w": 62, "h": 27 }, + "sourceSize": { "w": 70, "h": 42 }, + "duration": 100 + }, + { + "filename": "0021.png", + "frame": { "x": 1, "y": 122, "w": 60, "h": 28 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 8, "w": 60, "h": 28 }, + "sourceSize": { "w": 70, "h": 42 }, + "duration": 100 + }, + { + "filename": "0022.png", + "frame": { "x": 62, "y": 124, "w": 57, "h": 29 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 6, "w": 57, "h": 29 }, + "sourceSize": { "w": 70, "h": 42 }, + "duration": 100 + }, + { + "filename": "0023.png", + "frame": { "x": 120, "y": 124, "w": 55, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 4, "w": 55, "h": 30 }, + "sourceSize": { "w": 70, "h": 42 }, + "duration": 100 + }, + { + "filename": "0024.png", + "frame": { "x": 65, "y": 94, "w": 58, "h": 29 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 7, "w": 58, "h": 29 }, + "sourceSize": { "w": 70, "h": 42 }, + "duration": 100 + }, + { + "filename": "0025.png", + "frame": { "x": 124, "y": 95, "w": 60, "h": 28 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 11, "w": 60, "h": 28 }, + "sourceSize": { "w": 70, "h": 42 }, + "duration": 100 + }, + { + "filename": "0026.png", + "frame": { "x": 1, "y": 93, "w": 63, "h": 28 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 14, "w": 63, "h": 28 }, + "sourceSize": { "w": 70, "h": 42 }, + "duration": 100 + }, + { + "filename": "0027.png", + "frame": { "x": 255, "y": 33, "w": 65, "h": 29 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 13, "w": 65, "h": 29 }, + "sourceSize": { "w": 70, "h": 42 }, + "duration": 100 + }, + { + "filename": "0028.png", + "frame": { "x": 1, "y": 33, "w": 67, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 12, "w": 67, "h": 30 }, + "sourceSize": { "w": 70, "h": 42 }, + "duration": 100 + }, + { + "filename": "0029.png", + "frame": { "x": 255, "y": 63, "w": 65, "h": 29 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 11, "w": 65, "h": 29 }, + "sourceSize": { "w": 70, "h": 42 }, + "duration": 100 + }, + { + "filename": "0030.png", + "frame": { "x": 135, "y": 66, "w": 64, "h": 28 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 11, "w": 64, "h": 28 }, + "sourceSize": { "w": 70, "h": 42 }, + "duration": 100 + }, + { + "filename": "0031.png", + "frame": { "x": 185, "y": 123, "w": 62, "h": 27 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 10, "w": 62, "h": 27 }, + "sourceSize": { "w": 70, "h": 42 }, + "duration": 100 + }, + { + "filename": "0032.png", + "frame": { "x": 1, "y": 122, "w": 60, "h": 28 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 8, "w": 60, "h": 28 }, + "sourceSize": { "w": 70, "h": 42 }, + "duration": 100 + }, + { + "filename": "0033.png", + "frame": { "x": 62, "y": 124, "w": 57, "h": 29 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 6, "w": 57, "h": 29 }, + "sourceSize": { "w": 70, "h": 42 }, + "duration": 100 + }, + { + "filename": "0034.png", + "frame": { "x": 120, "y": 124, "w": 55, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 4, "w": 55, "h": 30 }, + "sourceSize": { "w": 70, "h": 42 }, + "duration": 100 + }, + { + "filename": "0035.png", + "frame": { "x": 200, "y": 93, "w": 59, "h": 29 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 8, "w": 59, "h": 29 }, + "sourceSize": { "w": 70, "h": 42 }, + "duration": 100 + }, + { + "filename": "0036.png", + "frame": { "x": 260, "y": 93, "w": 61, "h": 28 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 11, "w": 61, "h": 28 }, + "sourceSize": { "w": 70, "h": 42 }, + "duration": 100 + }, + { + "filename": "0037.png", + "frame": { "x": 69, "y": 65, "w": 65, "h": 28 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 11, "w": 65, "h": 28 }, + "sourceSize": { "w": 70, "h": 42 }, + "duration": 100 + }, + { + "filename": "0038.png", + "frame": { "x": 1, "y": 64, "w": 67, "h": 28 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 67, "h": 28 }, + "sourceSize": { "w": 70, "h": 42 }, + "duration": 100 + }, + { + "filename": "0039.png", + "frame": { "x": 72, "y": 1, "w": 69, "h": 31 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 69, "h": 31 }, + "sourceSize": { "w": 70, "h": 42 }, + "duration": 100 + }, + { + "filename": "0040.png", + "frame": { "x": 1, "y": 1, "w": 70, "h": 31 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 70, "h": 31 }, + "sourceSize": { "w": 70, "h": 42 }, + "duration": 100 + }, + { + "filename": "0041.png", + "frame": { "x": 142, "y": 1, "w": 69, "h": 31 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 69, "h": 31 }, + "sourceSize": { "w": 70, "h": 42 }, + "duration": 100 + }, + { + "filename": "0042.png", + "frame": { "x": 212, "y": 1, "w": 67, "h": 31 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 67, "h": 31 }, + "sourceSize": { "w": 70, "h": 42 }, + "duration": 100 + }, + { + "filename": "0043.png", + "frame": { "x": 280, "y": 1, "w": 65, "h": 31 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 65, "h": 31 }, + "sourceSize": { "w": 70, "h": 42 }, + "duration": 100 + }, + { + "filename": "0044.png", + "frame": { "x": 131, "y": 33, "w": 63, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 63, "h": 30 }, + "sourceSize": { "w": 70, "h": 42 }, + "duration": 100 + }, + { + "filename": "0045.png", + "frame": { "x": 69, "y": 33, "w": 61, "h": 31 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 61, "h": 31 }, + "sourceSize": { "w": 70, "h": 42 }, + "duration": 100 + }, + { + "filename": "0046.png", + "frame": { "x": 195, "y": 33, "w": 59, "h": 32 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 4, "w": 59, "h": 32 }, + "sourceSize": { "w": 70, "h": 42 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.13-x64", + "image": "2074.png", + "format": "I8", + "size": { "w": 346, "h": 155 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/2074.png b/public/images/pokemon/exp/2074.png index 6544f5aeb17..158120ac79f 100644 Binary files a/public/images/pokemon/exp/2074.png and b/public/images/pokemon/exp/2074.png differ diff --git a/public/images/pokemon/exp/2075.json b/public/images/pokemon/exp/2075.json index f9619dcf315..e3d08f5fae1 100644 --- a/public/images/pokemon/exp/2075.json +++ b/public/images/pokemon/exp/2075.json @@ -1,272 +1,812 @@ -{ - "textures": [ - { - "image": "2075.png", - "format": "RGBA8888", - "size": { - "w": 184, - "h": 184 - }, - "scale": 1, - "frames": [ - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 87, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 84, - "h": 50 - }, - "frame": { - "x": 0, - "y": 0, - "w": 84, - "h": 50 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 87, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 84, - "h": 50 - }, - "frame": { - "x": 0, - "y": 0, - "w": 84, - "h": 50 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 87, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 83, - "h": 50 - }, - "frame": { - "x": 84, - "y": 0, - "w": 83, - "h": 50 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 87, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 83, - "h": 50 - }, - "frame": { - "x": 84, - "y": 0, - "w": 83, - "h": 50 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 87, - "h": 52 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 82, - "h": 51 - }, - "frame": { - "x": 0, - "y": 50, - "w": 82, - "h": 51 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 87, - "h": 52 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 82, - "h": 51 - }, - "frame": { - "x": 0, - "y": 50, - "w": 82, - "h": 51 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 87, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 83, - "h": 46 - }, - "frame": { - "x": 82, - "y": 50, - "w": 83, - "h": 46 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 87, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 83, - "h": 46 - }, - "frame": { - "x": 82, - "y": 50, - "w": 83, - "h": 46 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 87, - "h": 52 - }, - "spriteSourceSize": { - "x": 1, - "y": 7, - "w": 81, - "h": 45 - }, - "frame": { - "x": 82, - "y": 96, - "w": 81, - "h": 45 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 87, - "h": 52 - }, - "spriteSourceSize": { - "x": 1, - "y": 7, - "w": 81, - "h": 45 - }, - "frame": { - "x": 82, - "y": 96, - "w": 81, - "h": 45 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 87, - "h": 52 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 80, - "h": 51 - }, - "frame": { - "x": 0, - "y": 101, - "w": 80, - "h": 51 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 87, - "h": 52 - }, - "spriteSourceSize": { - "x": 3, - "y": 9, - "w": 78, - "h": 43 - }, - "frame": { - "x": 80, - "y": 141, - "w": 78, - "h": 43 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:f5372b99c8b100650a10a4e8cc6e059e:c743748b938ba16e4c5253d5c5444252:732805cb123f88b2d403da0dec709706$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 228, "y": 1, "w": 73, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 2, "w": 73, "h": 44 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 448, "y": 1, "w": 72, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 2, "w": 72, "h": 44 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 146, "y": 90, "w": 71, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 2, "w": 71, "h": 43 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 363, "y": 91, "w": 69, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 1, "w": 69, "h": 44 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 147, "y": 223, "w": 65, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 0, "w": 65, "h": 44 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 363, "y": 91, "w": 69, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 1, "w": 69, "h": 44 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 146, "y": 90, "w": 71, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 2, "w": 71, "h": 43 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 448, "y": 1, "w": 72, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 2, "w": 72, "h": 44 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 228, "y": 1, "w": 73, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 2, "w": 73, "h": 44 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 1, "y": 1, "w": 75, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 2, "w": 75, "h": 44 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 77, "y": 1, "w": 75, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 75, "h": 44 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + }, + { + "filename": "0012.png", + "frame": { "x": 153, "y": 1, "w": 74, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 74, "h": 44 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + }, + { + "filename": "0013.png", + "frame": { "x": 302, "y": 1, "w": 73, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 73, "h": 44 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + }, + { + "filename": "0014.png", + "frame": { "x": 153, "y": 1, "w": 74, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 74, "h": 44 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + }, + { + "filename": "0015.png", + "frame": { "x": 77, "y": 1, "w": 75, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 75, "h": 44 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + }, + { + "filename": "0016.png", + "frame": { "x": 1, "y": 1, "w": 75, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 2, "w": 75, "h": 44 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + }, + { + "filename": "0017.png", + "frame": { "x": 228, "y": 1, "w": 73, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 2, "w": 73, "h": 44 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + }, + { + "filename": "0018.png", + "frame": { "x": 448, "y": 1, "w": 72, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 2, "w": 72, "h": 44 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + }, + { + "filename": "0019.png", + "frame": { "x": 146, "y": 90, "w": 71, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 2, "w": 71, "h": 43 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + }, + { + "filename": "0020.png", + "frame": { "x": 363, "y": 91, "w": 69, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 1, "w": 69, "h": 44 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + }, + { + "filename": "0021.png", + "frame": { "x": 147, "y": 223, "w": 65, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 0, "w": 65, "h": 44 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + }, + { + "filename": "0022.png", + "frame": { "x": 363, "y": 91, "w": 69, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 1, "w": 69, "h": 44 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + }, + { + "filename": "0023.png", + "frame": { "x": 146, "y": 90, "w": 71, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 2, "w": 71, "h": 43 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + }, + { + "filename": "0024.png", + "frame": { "x": 448, "y": 1, "w": 72, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 2, "w": 72, "h": 44 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + }, + { + "filename": "0025.png", + "frame": { "x": 228, "y": 1, "w": 73, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 2, "w": 73, "h": 44 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + }, + { + "filename": "0026.png", + "frame": { "x": 1, "y": 1, "w": 75, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 2, "w": 75, "h": 44 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + }, + { + "filename": "0027.png", + "frame": { "x": 77, "y": 1, "w": 75, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 75, "h": 44 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + }, + { + "filename": "0028.png", + "frame": { "x": 153, "y": 1, "w": 74, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 74, "h": 44 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + }, + { + "filename": "0029.png", + "frame": { "x": 302, "y": 1, "w": 73, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 73, "h": 44 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + }, + { + "filename": "0030.png", + "frame": { "x": 153, "y": 1, "w": 74, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 74, "h": 44 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + }, + { + "filename": "0031.png", + "frame": { "x": 77, "y": 1, "w": 75, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 75, "h": 44 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + }, + { + "filename": "0032.png", + "frame": { "x": 1, "y": 1, "w": 75, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 2, "w": 75, "h": 44 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + }, + { + "filename": "0033.png", + "frame": { "x": 228, "y": 1, "w": 73, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 2, "w": 73, "h": 44 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + }, + { + "filename": "0034.png", + "frame": { "x": 448, "y": 1, "w": 72, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 2, "w": 72, "h": 44 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + }, + { + "filename": "0035.png", + "frame": { "x": 146, "y": 90, "w": 71, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 2, "w": 71, "h": 43 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + }, + { + "filename": "0036.png", + "frame": { "x": 363, "y": 91, "w": 69, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 1, "w": 69, "h": 44 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + }, + { + "filename": "0037.png", + "frame": { "x": 147, "y": 223, "w": 65, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 0, "w": 65, "h": 44 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + }, + { + "filename": "0038.png", + "frame": { "x": 363, "y": 91, "w": 69, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 1, "w": 69, "h": 44 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + }, + { + "filename": "0039.png", + "frame": { "x": 146, "y": 90, "w": 71, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 2, "w": 71, "h": 43 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + }, + { + "filename": "0040.png", + "frame": { "x": 448, "y": 1, "w": 72, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 2, "w": 72, "h": 44 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + }, + { + "filename": "0041.png", + "frame": { "x": 228, "y": 1, "w": 73, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 2, "w": 73, "h": 44 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + }, + { + "filename": "0042.png", + "frame": { "x": 1, "y": 1, "w": 75, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 2, "w": 75, "h": 44 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + }, + { + "filename": "0043.png", + "frame": { "x": 77, "y": 1, "w": 75, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 75, "h": 44 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + }, + { + "filename": "0044.png", + "frame": { "x": 153, "y": 1, "w": 74, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 74, "h": 44 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + }, + { + "filename": "0045.png", + "frame": { "x": 302, "y": 1, "w": 73, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 73, "h": 44 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + }, + { + "filename": "0046.png", + "frame": { "x": 153, "y": 1, "w": 74, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 74, "h": 44 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + }, + { + "filename": "0047.png", + "frame": { "x": 77, "y": 1, "w": 75, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 75, "h": 44 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + }, + { + "filename": "0048.png", + "frame": { "x": 1, "y": 1, "w": 75, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 2, "w": 75, "h": 44 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + }, + { + "filename": "0049.png", + "frame": { "x": 228, "y": 1, "w": 73, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 2, "w": 73, "h": 44 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + }, + { + "filename": "0050.png", + "frame": { "x": 440, "y": 89, "w": 73, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 3, "w": 73, "h": 42 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + }, + { + "filename": "0051.png", + "frame": { "x": 363, "y": 173, "w": 73, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 4, "w": 73, "h": 40 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + }, + { + "filename": "0052.png", + "frame": { "x": 363, "y": 173, "w": 73, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 3, "w": 73, "h": 40 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + }, + { + "filename": "0053.png", + "frame": { "x": 363, "y": 173, "w": 73, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 4, "w": 73, "h": 40 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + }, + { + "filename": "0054.png", + "frame": { "x": 437, "y": 173, "w": 73, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 4, "w": 73, "h": 40 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + }, + { + "filename": "0055.png", + "frame": { "x": 1, "y": 174, "w": 73, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 4, "w": 73, "h": 40 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + }, + { + "filename": "0056.png", + "frame": { "x": 433, "y": 132, "w": 74, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 4, "w": 74, "h": 40 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + }, + { + "filename": "0057.png", + "frame": { "x": 75, "y": 176, "w": 73, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 4, "w": 73, "h": 40 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + }, + { + "filename": "0058.png", + "frame": { "x": 448, "y": 46, "w": 74, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 74, "h": 42 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + }, + { + "filename": "0059.png", + "frame": { "x": 367, "y": 47, "w": 72, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 72, "h": 43 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + }, + { + "filename": "0060.png", + "frame": { "x": 220, "y": 46, "w": 71, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 71, "h": 44 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + }, + { + "filename": "0061.png", + "frame": { "x": 376, "y": 1, "w": 71, "h": 45 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 71, "h": 45 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + }, + { + "filename": "0062.png", + "frame": { "x": 1, "y": 46, "w": 70, "h": 45 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 70, "h": 45 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + }, + { + "filename": "0063.png", + "frame": { "x": 292, "y": 89, "w": 70, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 70, "h": 44 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + }, + { + "filename": "0064.png", + "frame": { "x": 218, "y": 91, "w": 71, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 71, "h": 43 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + }, + { + "filename": "0065.png", + "frame": { "x": 146, "y": 46, "w": 73, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 73, "h": 43 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + }, + { + "filename": "0066.png", + "frame": { "x": 292, "y": 46, "w": 74, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 74, "h": 42 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + }, + { + "filename": "0067.png", + "frame": { "x": 218, "y": 176, "w": 73, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 4, "w": 73, "h": 40 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + }, + { + "filename": "0068.png", + "frame": { "x": 1, "y": 133, "w": 74, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 4, "w": 74, "h": 40 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + }, + { + "filename": "0069.png", + "frame": { "x": 292, "y": 214, "w": 73, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 4, "w": 73, "h": 40 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + }, + { + "filename": "0070.png", + "frame": { "x": 366, "y": 214, "w": 73, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 4, "w": 73, "h": 40 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + }, + { + "filename": "0071.png", + "frame": { "x": 1, "y": 215, "w": 72, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 4, "w": 72, "h": 40 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + }, + { + "filename": "0072.png", + "frame": { "x": 1, "y": 256, "w": 72, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 4, "w": 72, "h": 39 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + }, + { + "filename": "0073.png", + "frame": { "x": 213, "y": 259, "w": 71, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 4, "w": 71, "h": 39 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + }, + { + "filename": "0074.png", + "frame": { "x": 218, "y": 135, "w": 71, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 4, "w": 71, "h": 40 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + }, + { + "filename": "0075.png", + "frame": { "x": 353, "y": 255, "w": 69, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 3, "w": 69, "h": 41 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + }, + { + "filename": "0076.png", + "frame": { "x": 149, "y": 134, "w": 68, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 16, "y": 2, "w": 68, "h": 43 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + }, + { + "filename": "0077.png", + "frame": { "x": 149, "y": 178, "w": 66, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 1, "w": 66, "h": 44 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + }, + { + "filename": "0078.png", + "frame": { "x": 287, "y": 255, "w": 65, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 19, "y": 1, "w": 65, "h": 44 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + }, + { + "filename": "0079.png", + "frame": { "x": 440, "y": 214, "w": 67, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 17, "y": 2, "w": 67, "h": 43 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + }, + { + "filename": "0080.png", + "frame": { "x": 423, "y": 258, "w": 68, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 15, "y": 3, "w": 68, "h": 41 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + }, + { + "filename": "0081.png", + "frame": { "x": 216, "y": 217, "w": 70, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 3, "w": 70, "h": 41 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + }, + { + "filename": "0082.png", + "frame": { "x": 1, "y": 92, "w": 70, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 4, "w": 70, "h": 39 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + }, + { + "filename": "0083.png", + "frame": { "x": 74, "y": 258, "w": 72, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 4, "w": 72, "h": 39 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + }, + { + "filename": "0084.png", + "frame": { "x": 74, "y": 217, "w": 72, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 4, "w": 72, "h": 40 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + }, + { + "filename": "0085.png", + "frame": { "x": 76, "y": 134, "w": 72, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 4, "w": 72, "h": 41 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + }, + { + "filename": "0086.png", + "frame": { "x": 290, "y": 134, "w": 72, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 4, "w": 72, "h": 41 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + }, + { + "filename": "0087.png", + "frame": { "x": 72, "y": 90, "w": 73, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 4, "w": 73, "h": 42 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + }, + { + "filename": "0088.png", + "frame": { "x": 72, "y": 46, "w": 73, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 3, "w": 73, "h": 43 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + }, + { + "filename": "0089.png", + "frame": { "x": 228, "y": 1, "w": 73, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 2, "w": 73, "h": 44 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.13-x64", + "image": "2075.png", + "format": "I8", + "size": { "w": 523, "h": 300 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/2075.png b/public/images/pokemon/exp/2075.png index b3d72062e64..243be9bb7b0 100644 Binary files a/public/images/pokemon/exp/2075.png and b/public/images/pokemon/exp/2075.png differ diff --git a/public/images/pokemon/exp/2076.json b/public/images/pokemon/exp/2076.json index 7a69b66c3e0..c0f495bcca0 100644 --- a/public/images/pokemon/exp/2076.json +++ b/public/images/pokemon/exp/2076.json @@ -1,272 +1,965 @@ -{ - "textures": [ - { - "image": "2076.png", - "format": "RGBA8888", - "size": { - "w": 204, - "h": 204 - }, - "scale": 1, - "frames": [ - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 73 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 60, - "h": 73 - }, - "frame": { - "x": 0, - "y": 0, - "w": 60, - "h": 73 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 73 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 60, - "h": 73 - }, - "frame": { - "x": 0, - "y": 0, - "w": 60, - "h": 73 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 73 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 58, - "h": 73 - }, - "frame": { - "x": 0, - "y": 73, - "w": 58, - "h": 73 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 73 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 58, - "h": 73 - }, - "frame": { - "x": 0, - "y": 73, - "w": 58, - "h": 73 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 73 - }, - "spriteSourceSize": { - "x": 4, - "y": 0, - "w": 58, - "h": 73 - }, - "frame": { - "x": 58, - "y": 73, - "w": 58, - "h": 73 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 73 - }, - "spriteSourceSize": { - "x": 4, - "y": 0, - "w": 58, - "h": 73 - }, - "frame": { - "x": 58, - "y": 73, - "w": 58, - "h": 73 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 73 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 57, - "h": 73 - }, - "frame": { - "x": 60, - "y": 0, - "w": 57, - "h": 73 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 73 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 56, - "h": 70 - }, - "frame": { - "x": 117, - "y": 0, - "w": 56, - "h": 70 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 73 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 56, - "h": 70 - }, - "frame": { - "x": 117, - "y": 0, - "w": 56, - "h": 70 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 73 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 56, - "h": 68 - }, - "frame": { - "x": 117, - "y": 70, - "w": 56, - "h": 68 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 73 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 56, - "h": 68 - }, - "frame": { - "x": 117, - "y": 70, - "w": 56, - "h": 68 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 73 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 56, - "h": 66 - }, - "frame": { - "x": 116, - "y": 138, - "w": 56, - "h": 66 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:66d4eb31967e6cdb8dd33a8c1e1b838e:7d44749d00b35e3fbdae08d5a062828f:719cdf7324091edbb7b1d6e2d7254a1a$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 341, "y": 346, "w": 54, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 5, "w": 54, "h": 69 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 411, "y": 71, "w": 54, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 5, "w": 54, "h": 69 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 410, "y": 207, "w": 55, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 55, "h": 69 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 353, "y": 207, "w": 56, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 56, "h": 69 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 118, "y": 208, "w": 56, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 56, "h": 69 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 177, "y": 70, "w": 57, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 57, "h": 69 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 235, "y": 70, "w": 57, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 57, "h": 69 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 60, "y": 207, "w": 57, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 57, "h": 68 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 237, "y": 207, "w": 57, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 57, "h": 68 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 237, "y": 1, "w": 58, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 58, "h": 68 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 119, "y": 1, "w": 58, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 58, "h": 68 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0012.png", + "frame": { "x": 354, "y": 1, "w": 57, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 57, "h": 69 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0013.png", + "frame": { "x": 119, "y": 70, "w": 57, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 57, "h": 69 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0014.png", + "frame": { "x": 403, "y": 277, "w": 55, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 55, "h": 69 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0015.png", + "frame": { "x": 117, "y": 278, "w": 55, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 55, "h": 69 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0016.png", + "frame": { "x": 396, "y": 347, "w": 54, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 5, "w": 54, "h": 69 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0017.png", + "frame": { "x": 341, "y": 346, "w": 54, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 5, "w": 54, "h": 69 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0018.png", + "frame": { "x": 411, "y": 71, "w": 54, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 5, "w": 54, "h": 69 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0019.png", + "frame": { "x": 410, "y": 207, "w": 55, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 55, "h": 69 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0020.png", + "frame": { "x": 353, "y": 207, "w": 56, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 56, "h": 69 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0021.png", + "frame": { "x": 118, "y": 208, "w": 56, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 56, "h": 69 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0022.png", + "frame": { "x": 177, "y": 70, "w": 57, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 57, "h": 69 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0023.png", + "frame": { "x": 235, "y": 70, "w": 57, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 57, "h": 69 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0024.png", + "frame": { "x": 60, "y": 207, "w": 57, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 57, "h": 68 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0025.png", + "frame": { "x": 237, "y": 207, "w": 57, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 57, "h": 68 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0026.png", + "frame": { "x": 237, "y": 1, "w": 58, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 58, "h": 68 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0027.png", + "frame": { "x": 119, "y": 1, "w": 58, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 58, "h": 68 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0028.png", + "frame": { "x": 354, "y": 1, "w": 57, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 57, "h": 69 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0029.png", + "frame": { "x": 119, "y": 70, "w": 57, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 57, "h": 69 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0030.png", + "frame": { "x": 403, "y": 277, "w": 55, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 55, "h": 69 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0031.png", + "frame": { "x": 117, "y": 278, "w": 55, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 55, "h": 69 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0032.png", + "frame": { "x": 396, "y": 347, "w": 54, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 5, "w": 54, "h": 69 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0033.png", + "frame": { "x": 341, "y": 346, "w": 54, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 5, "w": 54, "h": 69 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0034.png", + "frame": { "x": 411, "y": 71, "w": 54, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 5, "w": 54, "h": 69 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0035.png", + "frame": { "x": 410, "y": 207, "w": 55, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 55, "h": 69 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0036.png", + "frame": { "x": 353, "y": 207, "w": 56, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 56, "h": 69 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0037.png", + "frame": { "x": 118, "y": 208, "w": 56, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 56, "h": 69 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0038.png", + "frame": { "x": 177, "y": 70, "w": 57, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 57, "h": 69 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0039.png", + "frame": { "x": 235, "y": 70, "w": 57, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 57, "h": 69 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0040.png", + "frame": { "x": 60, "y": 207, "w": 57, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 57, "h": 68 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0041.png", + "frame": { "x": 237, "y": 207, "w": 57, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 57, "h": 68 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0042.png", + "frame": { "x": 237, "y": 1, "w": 58, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 58, "h": 68 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0043.png", + "frame": { "x": 119, "y": 1, "w": 58, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 58, "h": 68 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0044.png", + "frame": { "x": 354, "y": 1, "w": 57, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 57, "h": 69 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0045.png", + "frame": { "x": 119, "y": 70, "w": 57, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 57, "h": 69 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0046.png", + "frame": { "x": 403, "y": 277, "w": 55, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 55, "h": 69 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0047.png", + "frame": { "x": 117, "y": 278, "w": 55, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 55, "h": 69 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0048.png", + "frame": { "x": 396, "y": 347, "w": 54, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 5, "w": 54, "h": 69 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0049.png", + "frame": { "x": 341, "y": 346, "w": 54, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 5, "w": 54, "h": 69 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0050.png", + "frame": { "x": 411, "y": 71, "w": 54, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 5, "w": 54, "h": 69 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0051.png", + "frame": { "x": 410, "y": 207, "w": 55, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 55, "h": 69 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0052.png", + "frame": { "x": 353, "y": 207, "w": 56, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 56, "h": 69 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0053.png", + "frame": { "x": 118, "y": 208, "w": 56, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 56, "h": 69 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0054.png", + "frame": { "x": 177, "y": 70, "w": 57, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 57, "h": 69 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0055.png", + "frame": { "x": 235, "y": 70, "w": 57, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 57, "h": 69 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0056.png", + "frame": { "x": 60, "y": 207, "w": 57, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 57, "h": 68 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0057.png", + "frame": { "x": 237, "y": 207, "w": 57, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 57, "h": 68 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0058.png", + "frame": { "x": 237, "y": 1, "w": 58, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 58, "h": 68 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0059.png", + "frame": { "x": 119, "y": 1, "w": 58, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 58, "h": 68 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0060.png", + "frame": { "x": 354, "y": 1, "w": 57, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 57, "h": 69 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0061.png", + "frame": { "x": 119, "y": 70, "w": 57, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 57, "h": 69 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0062.png", + "frame": { "x": 403, "y": 277, "w": 55, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 55, "h": 69 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0063.png", + "frame": { "x": 117, "y": 278, "w": 55, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 55, "h": 69 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0064.png", + "frame": { "x": 396, "y": 347, "w": 54, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 5, "w": 54, "h": 69 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0065.png", + "frame": { "x": 114, "y": 348, "w": 54, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 5, "w": 54, "h": 69 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0066.png", + "frame": { "x": 175, "y": 208, "w": 56, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 56, "h": 69 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0067.png", + "frame": { "x": 293, "y": 71, "w": 58, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 58, "h": 67 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0068.png", + "frame": { "x": 60, "y": 1, "w": 58, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 58, "h": 69 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0069.png", + "frame": { "x": 57, "y": 344, "w": 56, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 56, "h": 67 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0070.png", + "frame": { "x": 412, "y": 1, "w": 53, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 7, "w": 53, "h": 67 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0071.png", + "frame": { "x": 169, "y": 348, "w": 54, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 5, "w": 54, "h": 69 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0072.png", + "frame": { "x": 1, "y": 343, "w": 55, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 5, "w": 55, "h": 69 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0073.png", + "frame": { "x": 173, "y": 278, "w": 55, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 5, "w": 55, "h": 69 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0074.png", + "frame": { "x": 296, "y": 1, "w": 57, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 57, "h": 69 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0075.png", + "frame": { "x": 1, "y": 1, "w": 58, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 58, "h": 69 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0076.png", + "frame": { "x": 295, "y": 207, "w": 57, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 6, "w": 57, "h": 68 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0077.png", + "frame": { "x": 178, "y": 1, "w": 58, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 58, "h": 68 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0078.png", + "frame": { "x": 352, "y": 71, "w": 58, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 7, "w": 58, "h": 67 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0079.png", + "frame": { "x": 352, "y": 71, "w": 58, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 7, "w": 58, "h": 67 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0080.png", + "frame": { "x": 1, "y": 139, "w": 58, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 7, "w": 58, "h": 67 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0081.png", + "frame": { "x": 1, "y": 139, "w": 58, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 7, "w": 58, "h": 67 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0082.png", + "frame": { "x": 60, "y": 139, "w": 58, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 7, "w": 58, "h": 67 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0083.png", + "frame": { "x": 60, "y": 139, "w": 58, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 7, "w": 58, "h": 67 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0084.png", + "frame": { "x": 293, "y": 139, "w": 58, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 7, "w": 58, "h": 67 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0085.png", + "frame": { "x": 293, "y": 139, "w": 58, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 7, "w": 58, "h": 67 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0086.png", + "frame": { "x": 352, "y": 139, "w": 58, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 7, "w": 58, "h": 67 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0087.png", + "frame": { "x": 352, "y": 139, "w": 58, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 7, "w": 58, "h": 67 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0088.png", + "frame": { "x": 352, "y": 139, "w": 58, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 7, "w": 58, "h": 67 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0089.png", + "frame": { "x": 119, "y": 140, "w": 58, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 7, "w": 58, "h": 67 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0090.png", + "frame": { "x": 178, "y": 140, "w": 58, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 7, "w": 58, "h": 67 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0091.png", + "frame": { "x": 1, "y": 207, "w": 58, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 7, "w": 58, "h": 67 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0092.png", + "frame": { "x": 1, "y": 71, "w": 58, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 7, "w": 58, "h": 67 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0093.png", + "frame": { "x": 1, "y": 207, "w": 58, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 7, "w": 58, "h": 67 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0094.png", + "frame": { "x": 1, "y": 71, "w": 58, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 7, "w": 58, "h": 67 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0095.png", + "frame": { "x": 1, "y": 207, "w": 58, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 7, "w": 58, "h": 67 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0096.png", + "frame": { "x": 1, "y": 71, "w": 58, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 7, "w": 58, "h": 67 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0097.png", + "frame": { "x": 1, "y": 207, "w": 58, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 7, "w": 58, "h": 67 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0098.png", + "frame": { "x": 60, "y": 71, "w": 58, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 7, "w": 58, "h": 67 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0099.png", + "frame": { "x": 1, "y": 275, "w": 57, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 7, "w": 57, "h": 67 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0100.png", + "frame": { "x": 59, "y": 276, "w": 57, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 7, "w": 57, "h": 67 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0101.png", + "frame": { "x": 232, "y": 276, "w": 56, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 6, "w": 56, "h": 68 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0102.png", + "frame": { "x": 289, "y": 276, "w": 56, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 6, "w": 56, "h": 68 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0103.png", + "frame": { "x": 346, "y": 277, "w": 56, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 6, "w": 56, "h": 68 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0104.png", + "frame": { "x": 229, "y": 345, "w": 55, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 55, "h": 68 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0105.png", + "frame": { "x": 285, "y": 345, "w": 55, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 55, "h": 68 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0106.png", + "frame": { "x": 57, "y": 412, "w": 54, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 6, "w": 54, "h": 68 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.13-x64", + "image": "2076.png", + "format": "I8", + "size": { "w": 466, "h": 481 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/2076.png b/public/images/pokemon/exp/2076.png index 5bd0c466464..f1fcda5113f 100644 Binary files a/public/images/pokemon/exp/2076.png and b/public/images/pokemon/exp/2076.png differ diff --git a/public/images/pokemon/exp/2088.json b/public/images/pokemon/exp/2088.json index e209e005822..3dc69f1024c 100644 --- a/public/images/pokemon/exp/2088.json +++ b/public/images/pokemon/exp/2088.json @@ -1,272 +1,173 @@ -{ - "textures": [ - { - "image": "2088.png", - "format": "RGBA8888", - "size": { - "w": 114, - "h": 114 - }, - "scale": 1, - "frames": [ - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 60, - "h": 37 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 60, - "h": 36 - }, - "frame": { - "x": 0, - "y": 0, - "w": 60, - "h": 36 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 60, - "h": 37 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 60, - "h": 36 - }, - "frame": { - "x": 0, - "y": 0, - "w": 60, - "h": 36 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 60, - "h": 37 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 60, - "h": 36 - }, - "frame": { - "x": 0, - "y": 0, - "w": 60, - "h": 36 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 60, - "h": 37 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 60, - "h": 36 - }, - "frame": { - "x": 0, - "y": 0, - "w": 60, - "h": 36 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 60, - "h": 37 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 58, - "h": 37 - }, - "frame": { - "x": 0, - "y": 36, - "w": 58, - "h": 37 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 60, - "h": 37 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 58, - "h": 37 - }, - "frame": { - "x": 0, - "y": 36, - "w": 58, - "h": 37 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 60, - "h": 37 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 58, - "h": 37 - }, - "frame": { - "x": 0, - "y": 36, - "w": 58, - "h": 37 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 60, - "h": 37 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 58, - "h": 37 - }, - "frame": { - "x": 0, - "y": 36, - "w": 58, - "h": 37 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 60, - "h": 37 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 56, - "h": 37 - }, - "frame": { - "x": 58, - "y": 36, - "w": 56, - "h": 37 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 60, - "h": 37 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 56, - "h": 37 - }, - "frame": { - "x": 58, - "y": 36, - "w": 56, - "h": 37 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 60, - "h": 37 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 60, - "h": 35 - }, - "frame": { - "x": 0, - "y": 73, - "w": 60, - "h": 35 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 60, - "h": 37 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 60, - "h": 35 - }, - "frame": { - "x": 0, - "y": 73, - "w": 60, - "h": 35 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:7d65358280b6fd8fd0351d1933aec389:4371ea558d78deb87b5511996f658c0c:b8df8f168871505f42fdc6d3c5b106f0$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 53, "y": 114, "w": 51, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 51, "h": 40 }, + "sourceSize": { "w": 61, "h": 40 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 231, "y": 75, "w": 52, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 52, "h": 40 }, + "sourceSize": { "w": 61, "h": 40 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 111, "y": 79, "w": 53, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 53, "h": 39 }, + "sourceSize": { "w": 61, "h": 40 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 57, "y": 75, "w": 54, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 54, "h": 39 }, + "sourceSize": { "w": 61, "h": 40 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 234, "y": 36, "w": 56, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 56, "h": 39 }, + "sourceSize": { "w": 61, "h": 40 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 0, "y": 75, "w": 57, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 57, "h": 37 }, + "sourceSize": { "w": 61, "h": 40 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 59, "y": 38, "w": 58, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 3, "w": 58, "h": 37 }, + "sourceSize": { "w": 61, "h": 40 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 0, "y": 38, "w": 59, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 3, "w": 59, "h": 37 }, + "sourceSize": { "w": 61, "h": 40 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 234, "y": 0, "w": 61, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 61, "h": 36 }, + "sourceSize": { "w": 61, "h": 40 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 0, "y": 0, "w": 60, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 60, "h": 38 }, + "sourceSize": { "w": 61, "h": 40 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 60, "y": 0, "w": 59, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 59, "h": 38 }, + "sourceSize": { "w": 61, "h": 40 }, + "duration": 100 + }, + { + "filename": "0012.png", + "frame": { "x": 176, "y": 0, "w": 58, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 58, "h": 38 }, + "sourceSize": { "w": 61, "h": 40 }, + "duration": 100 + }, + { + "filename": "0013.png", + "frame": { "x": 119, "y": 0, "w": 57, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 57, "h": 39 }, + "sourceSize": { "w": 61, "h": 40 }, + "duration": 100 + }, + { + "filename": "0014.png", + "frame": { "x": 176, "y": 38, "w": 55, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 55, "h": 39 }, + "sourceSize": { "w": 61, "h": 40 }, + "duration": 100 + }, + { + "filename": "0015.png", + "frame": { "x": 0, "y": 112, "w": 53, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 53, "h": 39 }, + "sourceSize": { "w": 61, "h": 40 }, + "duration": 100 + }, + { + "filename": "0016.png", + "frame": { "x": 117, "y": 39, "w": 53, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 53, "h": 40 }, + "sourceSize": { "w": 61, "h": 40 }, + "duration": 100 + }, + { + "filename": "0017.png", + "frame": { "x": 170, "y": 77, "w": 52, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 52, "h": 40 }, + "sourceSize": { "w": 61, "h": 40 }, + "duration": 100 + }, + { + "filename": "0018.png", + "frame": { "x": 222, "y": 115, "w": 51, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 51, "h": 40 }, + "sourceSize": { "w": 61, "h": 40 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.13-x64", + "image": "2088.png", + "format": "I8", + "size": { "w": 295, "h": 155 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/2088.png b/public/images/pokemon/exp/2088.png index 1f40127c1c7..71ddd8a7e15 100644 Binary files a/public/images/pokemon/exp/2088.png and b/public/images/pokemon/exp/2088.png differ diff --git a/public/images/pokemon/exp/2089.json b/public/images/pokemon/exp/2089.json index 363c17843e8..3f8b618af75 100644 --- a/public/images/pokemon/exp/2089.json +++ b/public/images/pokemon/exp/2089.json @@ -1,1343 +1,1091 @@ -{ - "textures": [ - { - "image": "2089.png", - "format": "RGBA8888", - "size": { - "w": 349, - "h": 349 - }, - "scale": 1, - "frames": [ - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 67 - }, - "spriteSourceSize": { - "x": 2, - "y": 8, - "w": 94, - "h": 58 - }, - "frame": { - "x": 0, - "y": 0, - "w": 94, - "h": 58 - } - }, - { - "filename": "0017.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 67 - }, - "spriteSourceSize": { - "x": 2, - "y": 8, - "w": 94, - "h": 58 - }, - "frame": { - "x": 0, - "y": 0, - "w": 94, - "h": 58 - } - }, - { - "filename": "0030.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 67 - }, - "spriteSourceSize": { - "x": 2, - "y": 8, - "w": 94, - "h": 58 - }, - "frame": { - "x": 0, - "y": 0, - "w": 94, - "h": 58 - } - }, - { - "filename": "0043.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 67 - }, - "spriteSourceSize": { - "x": 2, - "y": 8, - "w": 94, - "h": 58 - }, - "frame": { - "x": 0, - "y": 0, - "w": 94, - "h": 58 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 67 - }, - "spriteSourceSize": { - "x": 1, - "y": 6, - "w": 92, - "h": 60 - }, - "frame": { - "x": 94, - "y": 0, - "w": 92, - "h": 60 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 67 - }, - "spriteSourceSize": { - "x": 1, - "y": 6, - "w": 92, - "h": 60 - }, - "frame": { - "x": 94, - "y": 0, - "w": 92, - "h": 60 - } - }, - { - "filename": "0029.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 67 - }, - "spriteSourceSize": { - "x": 1, - "y": 6, - "w": 92, - "h": 60 - }, - "frame": { - "x": 94, - "y": 0, - "w": 92, - "h": 60 - } - }, - { - "filename": "0042.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 67 - }, - "spriteSourceSize": { - "x": 1, - "y": 6, - "w": 92, - "h": 60 - }, - "frame": { - "x": 94, - "y": 0, - "w": 92, - "h": 60 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 67 - }, - "spriteSourceSize": { - "x": 4, - "y": 5, - "w": 91, - "h": 61 - }, - "frame": { - "x": 0, - "y": 58, - "w": 91, - "h": 61 - } - }, - { - "filename": "0018.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 67 - }, - "spriteSourceSize": { - "x": 4, - "y": 5, - "w": 91, - "h": 61 - }, - "frame": { - "x": 0, - "y": 58, - "w": 91, - "h": 61 - } - }, - { - "filename": "0031.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 67 - }, - "spriteSourceSize": { - "x": 4, - "y": 5, - "w": 91, - "h": 61 - }, - "frame": { - "x": 0, - "y": 58, - "w": 91, - "h": 61 - } - }, - { - "filename": "0044.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 67 - }, - "spriteSourceSize": { - "x": 4, - "y": 5, - "w": 91, - "h": 61 - }, - "frame": { - "x": 0, - "y": 58, - "w": 91, - "h": 61 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 67 - }, - "spriteSourceSize": { - "x": 2, - "y": 4, - "w": 90, - "h": 63 - }, - "frame": { - "x": 186, - "y": 0, - "w": 90, - "h": 63 - } - }, - { - "filename": "0019.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 67 - }, - "spriteSourceSize": { - "x": 2, - "y": 4, - "w": 90, - "h": 63 - }, - "frame": { - "x": 186, - "y": 0, - "w": 90, - "h": 63 - } - }, - { - "filename": "0032.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 67 - }, - "spriteSourceSize": { - "x": 2, - "y": 4, - "w": 90, - "h": 63 - }, - "frame": { - "x": 186, - "y": 0, - "w": 90, - "h": 63 - } - }, - { - "filename": "0045.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 67 - }, - "spriteSourceSize": { - "x": 2, - "y": 4, - "w": 90, - "h": 63 - }, - "frame": { - "x": 186, - "y": 0, - "w": 90, - "h": 63 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 67 - }, - "spriteSourceSize": { - "x": 1, - "y": 5, - "w": 90, - "h": 61 - }, - "frame": { - "x": 91, - "y": 60, - "w": 90, - "h": 61 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 67 - }, - "spriteSourceSize": { - "x": 1, - "y": 5, - "w": 90, - "h": 61 - }, - "frame": { - "x": 91, - "y": 60, - "w": 90, - "h": 61 - } - }, - { - "filename": "0028.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 67 - }, - "spriteSourceSize": { - "x": 1, - "y": 5, - "w": 90, - "h": 61 - }, - "frame": { - "x": 91, - "y": 60, - "w": 90, - "h": 61 - } - }, - { - "filename": "0041.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 67 - }, - "spriteSourceSize": { - "x": 1, - "y": 5, - "w": 90, - "h": 61 - }, - "frame": { - "x": 91, - "y": 60, - "w": 90, - "h": 61 - } - }, - { - "filename": "0058.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 67 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 89, - "h": 60 - }, - "frame": { - "x": 0, - "y": 119, - "w": 89, - "h": 60 - } - }, - { - "filename": "0057.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 67 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 89, - "h": 59 - }, - "frame": { - "x": 181, - "y": 63, - "w": 89, - "h": 59 - } - }, - { - "filename": "0059.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 67 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 89, - "h": 59 - }, - "frame": { - "x": 181, - "y": 63, - "w": 89, - "h": 59 - } - }, - { - "filename": "0055.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 67 - }, - "spriteSourceSize": { - "x": 0, - "y": 8, - "w": 89, - "h": 58 - }, - "frame": { - "x": 89, - "y": 121, - "w": 89, - "h": 58 - } - }, - { - "filename": "0061.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 67 - }, - "spriteSourceSize": { - "x": 0, - "y": 8, - "w": 89, - "h": 58 - }, - "frame": { - "x": 89, - "y": 121, - "w": 89, - "h": 58 - } - }, - { - "filename": "0056.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 67 - }, - "spriteSourceSize": { - "x": 0, - "y": 8, - "w": 89, - "h": 58 - }, - "frame": { - "x": 178, - "y": 122, - "w": 89, - "h": 58 - } - }, - { - "filename": "0060.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 67 - }, - "spriteSourceSize": { - "x": 0, - "y": 8, - "w": 89, - "h": 58 - }, - "frame": { - "x": 178, - "y": 122, - "w": 89, - "h": 58 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 67 - }, - "spriteSourceSize": { - "x": 3, - "y": 2, - "w": 82, - "h": 64 - }, - "frame": { - "x": 267, - "y": 122, - "w": 82, - "h": 64 - } - }, - { - "filename": "0024.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 67 - }, - "spriteSourceSize": { - "x": 3, - "y": 2, - "w": 82, - "h": 64 - }, - "frame": { - "x": 267, - "y": 122, - "w": 82, - "h": 64 - } - }, - { - "filename": "0037.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 67 - }, - "spriteSourceSize": { - "x": 3, - "y": 2, - "w": 82, - "h": 64 - }, - "frame": { - "x": 267, - "y": 122, - "w": 82, - "h": 64 - } - }, - { - "filename": "0050.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 67 - }, - "spriteSourceSize": { - "x": 3, - "y": 2, - "w": 82, - "h": 64 - }, - "frame": { - "x": 267, - "y": 122, - "w": 82, - "h": 64 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 67 - }, - "spriteSourceSize": { - "x": 2, - "y": 2, - "w": 88, - "h": 65 - }, - "frame": { - "x": 0, - "y": 179, - "w": 88, - "h": 65 - } - }, - { - "filename": "0020.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 67 - }, - "spriteSourceSize": { - "x": 2, - "y": 2, - "w": 88, - "h": 65 - }, - "frame": { - "x": 0, - "y": 179, - "w": 88, - "h": 65 - } - }, - { - "filename": "0033.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 67 - }, - "spriteSourceSize": { - "x": 2, - "y": 2, - "w": 88, - "h": 65 - }, - "frame": { - "x": 0, - "y": 179, - "w": 88, - "h": 65 - } - }, - { - "filename": "0046.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 67 - }, - "spriteSourceSize": { - "x": 2, - "y": 2, - "w": 88, - "h": 65 - }, - "frame": { - "x": 0, - "y": 179, - "w": 88, - "h": 65 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 67 - }, - "spriteSourceSize": { - "x": 1, - "y": 5, - "w": 88, - "h": 61 - }, - "frame": { - "x": 88, - "y": 179, - "w": 88, - "h": 61 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 67 - }, - "spriteSourceSize": { - "x": 1, - "y": 5, - "w": 88, - "h": 61 - }, - "frame": { - "x": 88, - "y": 179, - "w": 88, - "h": 61 - } - }, - { - "filename": "0027.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 67 - }, - "spriteSourceSize": { - "x": 1, - "y": 5, - "w": 88, - "h": 61 - }, - "frame": { - "x": 88, - "y": 179, - "w": 88, - "h": 61 - } - }, - { - "filename": "0040.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 67 - }, - "spriteSourceSize": { - "x": 1, - "y": 5, - "w": 88, - "h": 61 - }, - "frame": { - "x": 88, - "y": 179, - "w": 88, - "h": 61 - } - }, - { - "filename": "0053.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 67 - }, - "spriteSourceSize": { - "x": 1, - "y": 5, - "w": 88, - "h": 61 - }, - "frame": { - "x": 88, - "y": 179, - "w": 88, - "h": 61 - } - }, - { - "filename": "0063.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 67 - }, - "spriteSourceSize": { - "x": 1, - "y": 5, - "w": 88, - "h": 61 - }, - "frame": { - "x": 88, - "y": 179, - "w": 88, - "h": 61 - } - }, - { - "filename": "0054.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 67 - }, - "spriteSourceSize": { - "x": 1, - "y": 6, - "w": 88, - "h": 60 - }, - "frame": { - "x": 176, - "y": 180, - "w": 88, - "h": 60 - } - }, - { - "filename": "0062.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 67 - }, - "spriteSourceSize": { - "x": 1, - "y": 6, - "w": 88, - "h": 60 - }, - "frame": { - "x": 176, - "y": 180, - "w": 88, - "h": 60 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 67 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 85, - "h": 67 - }, - "frame": { - "x": 264, - "y": 186, - "w": 85, - "h": 67 - } - }, - { - "filename": "0021.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 67 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 85, - "h": 67 - }, - "frame": { - "x": 264, - "y": 186, - "w": 85, - "h": 67 - } - }, - { - "filename": "0034.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 67 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 85, - "h": 67 - }, - "frame": { - "x": 264, - "y": 186, - "w": 85, - "h": 67 - } - }, - { - "filename": "0047.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 67 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 85, - "h": 67 - }, - "frame": { - "x": 264, - "y": 186, - "w": 85, - "h": 67 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 67 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 83, - "h": 66 - }, - "frame": { - "x": 0, - "y": 253, - "w": 83, - "h": 66 - } - }, - { - "filename": "0022.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 67 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 83, - "h": 66 - }, - "frame": { - "x": 0, - "y": 253, - "w": 83, - "h": 66 - } - }, - { - "filename": "0035.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 67 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 83, - "h": 66 - }, - "frame": { - "x": 0, - "y": 253, - "w": 83, - "h": 66 - } - }, - { - "filename": "0048.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 67 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 83, - "h": 66 - }, - "frame": { - "x": 0, - "y": 253, - "w": 83, - "h": 66 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 67 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 83, - "h": 66 - }, - "frame": { - "x": 83, - "y": 253, - "w": 83, - "h": 66 - } - }, - { - "filename": "0023.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 67 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 83, - "h": 66 - }, - "frame": { - "x": 83, - "y": 253, - "w": 83, - "h": 66 - } - }, - { - "filename": "0036.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 67 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 83, - "h": 66 - }, - "frame": { - "x": 83, - "y": 253, - "w": 83, - "h": 66 - } - }, - { - "filename": "0049.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 67 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 83, - "h": 66 - }, - "frame": { - "x": 83, - "y": 253, - "w": 83, - "h": 66 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 67 - }, - "spriteSourceSize": { - "x": 1, - "y": 4, - "w": 86, - "h": 62 - }, - "frame": { - "x": 166, - "y": 240, - "w": 86, - "h": 62 - } - }, - { - "filename": "0026.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 67 - }, - "spriteSourceSize": { - "x": 1, - "y": 4, - "w": 86, - "h": 62 - }, - "frame": { - "x": 166, - "y": 240, - "w": 86, - "h": 62 - } - }, - { - "filename": "0039.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 67 - }, - "spriteSourceSize": { - "x": 1, - "y": 4, - "w": 86, - "h": 62 - }, - "frame": { - "x": 166, - "y": 240, - "w": 86, - "h": 62 - } - }, - { - "filename": "0052.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 67 - }, - "spriteSourceSize": { - "x": 1, - "y": 4, - "w": 86, - "h": 62 - }, - "frame": { - "x": 166, - "y": 240, - "w": 86, - "h": 62 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 67 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 84, - "h": 63 - }, - "frame": { - "x": 252, - "y": 253, - "w": 84, - "h": 63 - } - }, - { - "filename": "0025.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 67 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 84, - "h": 63 - }, - "frame": { - "x": 252, - "y": 253, - "w": 84, - "h": 63 - } - }, - { - "filename": "0038.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 67 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 84, - "h": 63 - }, - "frame": { - "x": 252, - "y": 253, - "w": 84, - "h": 63 - } - }, - { - "filename": "0051.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 67 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 84, - "h": 63 - }, - "frame": { - "x": 252, - "y": 253, - "w": 84, - "h": 63 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:4b0a68b63523081f6420f4bbdbf7eb38:c61a79944d0322548ea0e1b404a63e40:49ee9ed0dd32c5ba33977741b45fc3f4$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 463, "y": 58, "w": 73, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 73, "h": 64 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 536, "y": 58, "w": 73, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 73, "h": 64 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 151, "y": 61, "w": 73, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 73, "h": 64 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 370, "y": 61, "w": 75, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 75, "h": 62 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 236, "y": 125, "w": 76, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 76, "h": 61 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 1, "y": 183, "w": 77, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 77, "h": 60 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 151, "y": 1, "w": 78, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 78, "h": 60 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 76, "y": 125, "w": 80, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 80, "h": 58 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 540, "y": 238, "w": 81, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 7, "w": 81, "h": 57 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 463, "y": 1, "w": 82, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 7, "w": 82, "h": 57 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 445, "y": 122, "w": 83, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 8, "w": 83, "h": 56 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0012.png", + "frame": { "x": 499, "y": 295, "w": 83, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 9, "w": 83, "h": 55 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0013.png", + "frame": { "x": 333, "y": 295, "w": 83, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 9, "w": 83, "h": 55 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0014.png", + "frame": { "x": 250, "y": 295, "w": 83, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 9, "w": 83, "h": 55 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0015.png", + "frame": { "x": 167, "y": 243, "w": 83, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 9, "w": 83, "h": 55 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0016.png", + "frame": { "x": 84, "y": 243, "w": 83, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 9, "w": 83, "h": 55 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0017.png", + "frame": { "x": 1, "y": 243, "w": 83, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 9, "w": 83, "h": 55 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0018.png", + "frame": { "x": 321, "y": 239, "w": 82, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 8, "w": 82, "h": 56 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0019.png", + "frame": { "x": 78, "y": 183, "w": 81, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 7, "w": 81, "h": 57 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0020.png", + "frame": { "x": 250, "y": 350, "w": 80, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 7, "w": 80, "h": 57 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0021.png", + "frame": { "x": 488, "y": 350, "w": 78, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 6, "w": 78, "h": 58 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0022.png", + "frame": { "x": 385, "y": 1, "w": 78, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 78, "h": 60 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0023.png", + "frame": { "x": 312, "y": 125, "w": 76, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 76, "h": 61 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0024.png", + "frame": { "x": 76, "y": 1, "w": 75, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 75, "h": 63 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0025.png", + "frame": { "x": 463, "y": 58, "w": 73, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 73, "h": 64 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0026.png", + "frame": { "x": 536, "y": 58, "w": 73, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 73, "h": 64 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0027.png", + "frame": { "x": 151, "y": 61, "w": 73, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 73, "h": 64 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0028.png", + "frame": { "x": 370, "y": 61, "w": 75, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 75, "h": 62 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0029.png", + "frame": { "x": 236, "y": 125, "w": 76, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 76, "h": 61 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0030.png", + "frame": { "x": 1, "y": 183, "w": 77, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 77, "h": 60 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0031.png", + "frame": { "x": 151, "y": 1, "w": 78, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 78, "h": 60 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0032.png", + "frame": { "x": 76, "y": 125, "w": 80, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 80, "h": 58 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0033.png", + "frame": { "x": 540, "y": 238, "w": 81, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 7, "w": 81, "h": 57 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0034.png", + "frame": { "x": 463, "y": 1, "w": 82, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 7, "w": 82, "h": 57 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0035.png", + "frame": { "x": 445, "y": 122, "w": 83, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 8, "w": 83, "h": 56 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0036.png", + "frame": { "x": 499, "y": 295, "w": 83, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 9, "w": 83, "h": 55 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0037.png", + "frame": { "x": 333, "y": 295, "w": 83, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 9, "w": 83, "h": 55 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0038.png", + "frame": { "x": 250, "y": 295, "w": 83, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 9, "w": 83, "h": 55 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0039.png", + "frame": { "x": 167, "y": 243, "w": 83, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 9, "w": 83, "h": 55 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0040.png", + "frame": { "x": 84, "y": 243, "w": 83, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 9, "w": 83, "h": 55 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0041.png", + "frame": { "x": 1, "y": 243, "w": 83, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 9, "w": 83, "h": 55 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0042.png", + "frame": { "x": 321, "y": 239, "w": 82, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 8, "w": 82, "h": 56 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0043.png", + "frame": { "x": 78, "y": 183, "w": 81, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 7, "w": 81, "h": 57 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0044.png", + "frame": { "x": 250, "y": 350, "w": 80, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 7, "w": 80, "h": 57 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0045.png", + "frame": { "x": 488, "y": 350, "w": 78, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 6, "w": 78, "h": 58 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0046.png", + "frame": { "x": 385, "y": 1, "w": 78, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 78, "h": 60 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0047.png", + "frame": { "x": 312, "y": 125, "w": 76, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 76, "h": 61 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0048.png", + "frame": { "x": 76, "y": 1, "w": 75, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 75, "h": 63 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0049.png", + "frame": { "x": 463, "y": 58, "w": 73, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 73, "h": 64 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0050.png", + "frame": { "x": 536, "y": 58, "w": 73, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 73, "h": 64 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0051.png", + "frame": { "x": 151, "y": 61, "w": 73, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 73, "h": 64 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0052.png", + "frame": { "x": 370, "y": 61, "w": 75, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 75, "h": 62 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0053.png", + "frame": { "x": 236, "y": 125, "w": 76, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 76, "h": 61 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0054.png", + "frame": { "x": 1, "y": 183, "w": 77, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 77, "h": 60 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0055.png", + "frame": { "x": 151, "y": 1, "w": 78, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 78, "h": 60 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0056.png", + "frame": { "x": 76, "y": 125, "w": 80, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 80, "h": 58 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0057.png", + "frame": { "x": 540, "y": 238, "w": 81, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 7, "w": 81, "h": 57 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0058.png", + "frame": { "x": 463, "y": 1, "w": 82, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 7, "w": 82, "h": 57 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0059.png", + "frame": { "x": 445, "y": 122, "w": 83, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 8, "w": 83, "h": 56 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0060.png", + "frame": { "x": 499, "y": 295, "w": 83, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 9, "w": 83, "h": 55 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0061.png", + "frame": { "x": 333, "y": 295, "w": 83, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 9, "w": 83, "h": 55 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0062.png", + "frame": { "x": 250, "y": 295, "w": 83, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 9, "w": 83, "h": 55 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0063.png", + "frame": { "x": 167, "y": 243, "w": 83, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 9, "w": 83, "h": 55 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0064.png", + "frame": { "x": 84, "y": 243, "w": 83, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 9, "w": 83, "h": 55 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0065.png", + "frame": { "x": 1, "y": 243, "w": 83, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 9, "w": 83, "h": 55 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0066.png", + "frame": { "x": 321, "y": 239, "w": 82, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 8, "w": 82, "h": 56 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0067.png", + "frame": { "x": 78, "y": 183, "w": 81, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 7, "w": 81, "h": 57 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0068.png", + "frame": { "x": 250, "y": 350, "w": 80, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 7, "w": 80, "h": 57 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0069.png", + "frame": { "x": 488, "y": 350, "w": 78, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 6, "w": 78, "h": 58 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0070.png", + "frame": { "x": 385, "y": 1, "w": 78, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 78, "h": 60 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0071.png", + "frame": { "x": 312, "y": 125, "w": 76, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 76, "h": 61 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0072.png", + "frame": { "x": 76, "y": 1, "w": 75, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 75, "h": 63 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0073.png", + "frame": { "x": 463, "y": 58, "w": 73, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 73, "h": 64 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0074.png", + "frame": { "x": 536, "y": 58, "w": 73, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 73, "h": 64 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0075.png", + "frame": { "x": 151, "y": 61, "w": 73, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 73, "h": 64 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0076.png", + "frame": { "x": 370, "y": 61, "w": 75, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 75, "h": 62 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0077.png", + "frame": { "x": 236, "y": 125, "w": 76, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 76, "h": 61 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0078.png", + "frame": { "x": 1, "y": 183, "w": 77, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 77, "h": 60 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0079.png", + "frame": { "x": 151, "y": 1, "w": 78, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 78, "h": 60 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0080.png", + "frame": { "x": 76, "y": 125, "w": 80, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 80, "h": 58 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0081.png", + "frame": { "x": 540, "y": 238, "w": 81, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 7, "w": 81, "h": 57 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0082.png", + "frame": { "x": 463, "y": 1, "w": 82, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 7, "w": 82, "h": 57 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0083.png", + "frame": { "x": 445, "y": 122, "w": 83, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 8, "w": 83, "h": 56 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0084.png", + "frame": { "x": 499, "y": 295, "w": 83, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 9, "w": 83, "h": 55 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0085.png", + "frame": { "x": 333, "y": 295, "w": 83, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 9, "w": 83, "h": 55 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0086.png", + "frame": { "x": 250, "y": 295, "w": 83, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 9, "w": 83, "h": 55 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0087.png", + "frame": { "x": 167, "y": 243, "w": 83, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 9, "w": 83, "h": 55 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0088.png", + "frame": { "x": 84, "y": 243, "w": 83, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 9, "w": 83, "h": 55 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0089.png", + "frame": { "x": 1, "y": 243, "w": 83, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 9, "w": 83, "h": 55 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0090.png", + "frame": { "x": 321, "y": 239, "w": 82, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 8, "w": 82, "h": 56 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0091.png", + "frame": { "x": 78, "y": 183, "w": 81, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 7, "w": 81, "h": 57 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0092.png", + "frame": { "x": 250, "y": 350, "w": 80, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 7, "w": 80, "h": 57 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0093.png", + "frame": { "x": 488, "y": 350, "w": 78, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 6, "w": 78, "h": 58 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0094.png", + "frame": { "x": 385, "y": 1, "w": 78, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 78, "h": 60 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0095.png", + "frame": { "x": 312, "y": 125, "w": 76, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 76, "h": 61 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0096.png", + "frame": { "x": 76, "y": 1, "w": 75, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 75, "h": 63 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0097.png", + "frame": { "x": 463, "y": 58, "w": 73, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 73, "h": 64 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0098.png", + "frame": { "x": 297, "y": 61, "w": 73, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 73, "h": 64 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0099.png", + "frame": { "x": 224, "y": 61, "w": 73, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 73, "h": 64 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0100.png", + "frame": { "x": 1, "y": 64, "w": 75, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 75, "h": 62 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0101.png", + "frame": { "x": 388, "y": 178, "w": 76, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 76, "h": 61 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0102.png", + "frame": { "x": 540, "y": 178, "w": 77, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 77, "h": 60 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0103.png", + "frame": { "x": 307, "y": 1, "w": 78, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 78, "h": 60 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0104.png", + "frame": { "x": 156, "y": 125, "w": 80, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 80, "h": 58 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0105.png", + "frame": { "x": 159, "y": 186, "w": 81, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 7, "w": 81, "h": 57 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0106.png", + "frame": { "x": 545, "y": 1, "w": 82, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 7, "w": 82, "h": 57 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0107.png", + "frame": { "x": 528, "y": 122, "w": 83, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 8, "w": 83, "h": 56 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0108.png", + "frame": { "x": 416, "y": 295, "w": 83, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 9, "w": 83, "h": 55 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0109.png", + "frame": { "x": 333, "y": 295, "w": 83, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 9, "w": 83, "h": 55 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0110.png", + "frame": { "x": 167, "y": 298, "w": 83, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 9, "w": 83, "h": 55 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0111.png", + "frame": { "x": 582, "y": 295, "w": 83, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 9, "w": 83, "h": 55 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0112.png", + "frame": { "x": 1, "y": 298, "w": 83, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 9, "w": 83, "h": 55 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0113.png", + "frame": { "x": 84, "y": 298, "w": 83, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 9, "w": 83, "h": 55 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0114.png", + "frame": { "x": 403, "y": 239, "w": 82, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 8, "w": 82, "h": 56 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0115.png", + "frame": { "x": 240, "y": 186, "w": 81, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 7, "w": 81, "h": 57 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0116.png", + "frame": { "x": 330, "y": 350, "w": 80, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 7, "w": 80, "h": 57 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0117.png", + "frame": { "x": 410, "y": 350, "w": 78, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 6, "w": 78, "h": 58 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0118.png", + "frame": { "x": 229, "y": 1, "w": 78, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 78, "h": 60 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0119.png", + "frame": { "x": 464, "y": 178, "w": 76, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 76, "h": 61 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0120.png", + "frame": { "x": 1, "y": 1, "w": 75, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 75, "h": 63 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.13-x64", + "image": "2089.png", + "format": "I8", + "size": { "w": 666, "h": 409 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/2089.png b/public/images/pokemon/exp/2089.png index 380e517136c..fc4f2d2a353 100644 Binary files a/public/images/pokemon/exp/2089.png and b/public/images/pokemon/exp/2089.png differ diff --git a/public/images/pokemon/exp/728.json b/public/images/pokemon/exp/728.json index e9ca9c51315..c30ff4b6d18 100644 --- a/public/images/pokemon/exp/728.json +++ b/public/images/pokemon/exp/728.json @@ -1,1112 +1,776 @@ -{ - "textures": [ - { - "image": "728.png", - "format": "RGBA8888", - "size": { - "w": 165, - "h": 165 - }, - "scale": 1, - "frames": [ - { - "filename": "0039.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 44, - "h": 40 - }, - "frame": { - "x": 0, - "y": 0, - "w": 44, - "h": 40 - } - }, - { - "filename": "0051.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 44, - "h": 40 - }, - "frame": { - "x": 0, - "y": 0, - "w": 44, - "h": 40 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 42, - "h": 41 - }, - "frame": { - "x": 0, - "y": 40, - "w": 42, - "h": 41 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 42, - "h": 41 - }, - "frame": { - "x": 0, - "y": 40, - "w": 42, - "h": 41 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 42, - "h": 41 - }, - "frame": { - "x": 0, - "y": 40, - "w": 42, - "h": 41 - } - }, - { - "filename": "0024.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 42, - "h": 41 - }, - "frame": { - "x": 0, - "y": 40, - "w": 42, - "h": 41 - } - }, - { - "filename": "0026.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 42, - "h": 41 - }, - "frame": { - "x": 0, - "y": 40, - "w": 42, - "h": 41 - } - }, - { - "filename": "0036.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 42, - "h": 41 - }, - "frame": { - "x": 0, - "y": 40, - "w": 42, - "h": 41 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 42, - "h": 41 - }, - "frame": { - "x": 0, - "y": 81, - "w": 42, - "h": 41 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 42, - "h": 41 - }, - "frame": { - "x": 0, - "y": 81, - "w": 42, - "h": 41 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 42, - "h": 41 - }, - "frame": { - "x": 0, - "y": 81, - "w": 42, - "h": 41 - } - }, - { - "filename": "0023.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 42, - "h": 41 - }, - "frame": { - "x": 0, - "y": 81, - "w": 42, - "h": 41 - } - }, - { - "filename": "0027.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 42, - "h": 41 - }, - "frame": { - "x": 0, - "y": 81, - "w": 42, - "h": 41 - } - }, - { - "filename": "0035.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 42, - "h": 41 - }, - "frame": { - "x": 0, - "y": 81, - "w": 42, - "h": 41 - } - }, - { - "filename": "0040.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 44, - "h": 39 - }, - "frame": { - "x": 44, - "y": 0, - "w": 44, - "h": 39 - } - }, - { - "filename": "0050.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 44, - "h": 39 - }, - "frame": { - "x": 44, - "y": 0, - "w": 44, - "h": 39 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 42, - "h": 40 - }, - "frame": { - "x": 0, - "y": 122, - "w": 42, - "h": 40 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 42, - "h": 40 - }, - "frame": { - "x": 0, - "y": 122, - "w": 42, - "h": 40 - } - }, - { - "filename": "0025.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 42, - "h": 40 - }, - "frame": { - "x": 0, - "y": 122, - "w": 42, - "h": 40 - } - }, - { - "filename": "0037.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 42, - "h": 40 - }, - "frame": { - "x": 0, - "y": 122, - "w": 42, - "h": 40 - } - }, - { - "filename": "0041.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 45, - "h": 37 - }, - "frame": { - "x": 88, - "y": 0, - "w": 45, - "h": 37 - } - }, - { - "filename": "0045.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 45, - "h": 37 - }, - "frame": { - "x": 88, - "y": 0, - "w": 45, - "h": 37 - } - }, - { - "filename": "0049.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 45, - "h": 37 - }, - "frame": { - "x": 88, - "y": 0, - "w": 45, - "h": 37 - } - }, - { - "filename": "0042.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 45, - "h": 37 - }, - "frame": { - "x": 88, - "y": 37, - "w": 45, - "h": 37 - } - }, - { - "filename": "0044.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 45, - "h": 37 - }, - "frame": { - "x": 88, - "y": 37, - "w": 45, - "h": 37 - } - }, - { - "filename": "0046.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 45, - "h": 37 - }, - "frame": { - "x": 88, - "y": 37, - "w": 45, - "h": 37 - } - }, - { - "filename": "0048.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 45, - "h": 37 - }, - "frame": { - "x": 88, - "y": 37, - "w": 45, - "h": 37 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 42, - "h": 40 - }, - "frame": { - "x": 44, - "y": 39, - "w": 42, - "h": 40 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 42, - "h": 40 - }, - "frame": { - "x": 44, - "y": 39, - "w": 42, - "h": 40 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 42, - "h": 40 - }, - "frame": { - "x": 44, - "y": 39, - "w": 42, - "h": 40 - } - }, - { - "filename": "0022.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 42, - "h": 40 - }, - "frame": { - "x": 44, - "y": 39, - "w": 42, - "h": 40 - } - }, - { - "filename": "0028.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 42, - "h": 40 - }, - "frame": { - "x": 44, - "y": 39, - "w": 42, - "h": 40 - } - }, - { - "filename": "0034.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 42, - "h": 40 - }, - "frame": { - "x": 44, - "y": 39, - "w": 42, - "h": 40 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 42, - "h": 40 - }, - "frame": { - "x": 42, - "y": 79, - "w": 42, - "h": 40 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 42, - "h": 40 - }, - "frame": { - "x": 42, - "y": 79, - "w": 42, - "h": 40 - } - }, - { - "filename": "0017.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 42, - "h": 40 - }, - "frame": { - "x": 42, - "y": 79, - "w": 42, - "h": 40 - } - }, - { - "filename": "0021.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 42, - "h": 40 - }, - "frame": { - "x": 42, - "y": 79, - "w": 42, - "h": 40 - } - }, - { - "filename": "0029.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 42, - "h": 40 - }, - "frame": { - "x": 42, - "y": 79, - "w": 42, - "h": 40 - } - }, - { - "filename": "0033.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 42, - "h": 40 - }, - "frame": { - "x": 42, - "y": 79, - "w": 42, - "h": 40 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 42, - "h": 39 - }, - "frame": { - "x": 42, - "y": 119, - "w": 42, - "h": 39 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 42, - "h": 39 - }, - "frame": { - "x": 42, - "y": 119, - "w": 42, - "h": 39 - } - }, - { - "filename": "0018.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 42, - "h": 39 - }, - "frame": { - "x": 42, - "y": 119, - "w": 42, - "h": 39 - } - }, - { - "filename": "0020.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 42, - "h": 39 - }, - "frame": { - "x": 42, - "y": 119, - "w": 42, - "h": 39 - } - }, - { - "filename": "0030.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 42, - "h": 39 - }, - "frame": { - "x": 42, - "y": 119, - "w": 42, - "h": 39 - } - }, - { - "filename": "0032.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 42, - "h": 39 - }, - "frame": { - "x": 42, - "y": 119, - "w": 42, - "h": 39 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 42, - "h": 39 - }, - "frame": { - "x": 86, - "y": 74, - "w": 42, - "h": 39 - } - }, - { - "filename": "0019.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 42, - "h": 39 - }, - "frame": { - "x": 86, - "y": 74, - "w": 42, - "h": 39 - } - }, - { - "filename": "0031.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 42, - "h": 39 - }, - "frame": { - "x": 86, - "y": 74, - "w": 42, - "h": 39 - } - }, - { - "filename": "0038.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 42 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 40, - "h": 40 - }, - "frame": { - "x": 84, - "y": 113, - "w": 40, - "h": 40 - } - }, - { - "filename": "0052.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 42 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 40, - "h": 40 - }, - "frame": { - "x": 84, - "y": 113, - "w": 40, - "h": 40 - } - }, - { - "filename": "0043.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 41, - "h": 37 - }, - "frame": { - "x": 124, - "y": 113, - "w": 41, - "h": 37 - } - }, - { - "filename": "0047.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 41, - "h": 37 - }, - "frame": { - "x": 124, - "y": 113, - "w": 41, - "h": 37 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:aca6840c416df6edb5630db2ccfd6b44:c238f59207b625e83d441c2da913ee60:74218c18c9d392741666ee5c0c28d306$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 43, "y": 99, "w": 40, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 15, "w": 40, "h": 39 }, + "sourceSize": { "w": 46, "h": 55 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 85, "y": 141, "w": 40, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 16, "w": 40, "h": 38 }, + "sourceSize": { "w": 46, "h": 55 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 43, "y": 181, "w": 40, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 17, "w": 40, "h": 37 }, + "sourceSize": { "w": 46, "h": 55 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 127, "y": 182, "w": 39, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 18, "w": 39, "h": 36 }, + "sourceSize": { "w": 46, "h": 55 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 168, "y": 218, "w": 39, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 19, "w": 39, "h": 36 }, + "sourceSize": { "w": 46, "h": 55 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 1, "y": 221, "w": 38, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 20, "w": 38, "h": 35 }, + "sourceSize": { "w": 46, "h": 55 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 43, "y": 220, "w": 39, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 19, "w": 39, "h": 36 }, + "sourceSize": { "w": 46, "h": 55 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 125, "y": 220, "w": 39, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 19, "w": 39, "h": 35 }, + "sourceSize": { "w": 46, "h": 55 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 84, "y": 220, "w": 39, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 18, "w": 39, "h": 36 }, + "sourceSize": { "w": 46, "h": 55 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 85, "y": 181, "w": 40, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 17, "w": 40, "h": 37 }, + "sourceSize": { "w": 46, "h": 55 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 168, "y": 178, "w": 40, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 16, "w": 40, "h": 38 }, + "sourceSize": { "w": 46, "h": 55 }, + "duration": 100 + }, + { + "filename": "0012.png", + "frame": { "x": 1, "y": 181, "w": 40, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 16, "w": 40, "h": 38 }, + "sourceSize": { "w": 46, "h": 55 }, + "duration": 100 + }, + { + "filename": "0013.png", + "frame": { "x": 85, "y": 100, "w": 40, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 15, "w": 40, "h": 39 }, + "sourceSize": { "w": 46, "h": 55 }, + "duration": 100 + }, + { + "filename": "0014.png", + "frame": { "x": 85, "y": 141, "w": 40, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 16, "w": 40, "h": 38 }, + "sourceSize": { "w": 46, "h": 55 }, + "duration": 100 + }, + { + "filename": "0015.png", + "frame": { "x": 43, "y": 181, "w": 40, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 17, "w": 40, "h": 37 }, + "sourceSize": { "w": 46, "h": 55 }, + "duration": 100 + }, + { + "filename": "0016.png", + "frame": { "x": 127, "y": 182, "w": 39, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 18, "w": 39, "h": 36 }, + "sourceSize": { "w": 46, "h": 55 }, + "duration": 100 + }, + { + "filename": "0017.png", + "frame": { "x": 168, "y": 218, "w": 39, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 19, "w": 39, "h": 36 }, + "sourceSize": { "w": 46, "h": 55 }, + "duration": 100 + }, + { + "filename": "0018.png", + "frame": { "x": 1, "y": 221, "w": 38, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 20, "w": 38, "h": 35 }, + "sourceSize": { "w": 46, "h": 55 }, + "duration": 100 + }, + { + "filename": "0019.png", + "frame": { "x": 43, "y": 220, "w": 39, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 19, "w": 39, "h": 36 }, + "sourceSize": { "w": 46, "h": 55 }, + "duration": 100 + }, + { + "filename": "0020.png", + "frame": { "x": 125, "y": 220, "w": 39, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 19, "w": 39, "h": 35 }, + "sourceSize": { "w": 46, "h": 55 }, + "duration": 100 + }, + { + "filename": "0021.png", + "frame": { "x": 84, "y": 220, "w": 39, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 18, "w": 39, "h": 36 }, + "sourceSize": { "w": 46, "h": 55 }, + "duration": 100 + }, + { + "filename": "0022.png", + "frame": { "x": 85, "y": 181, "w": 40, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 17, "w": 40, "h": 37 }, + "sourceSize": { "w": 46, "h": 55 }, + "duration": 100 + }, + { + "filename": "0023.png", + "frame": { "x": 168, "y": 178, "w": 40, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 16, "w": 40, "h": 38 }, + "sourceSize": { "w": 46, "h": 55 }, + "duration": 100 + }, + { + "filename": "0024.png", + "frame": { "x": 1, "y": 181, "w": 40, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 16, "w": 40, "h": 38 }, + "sourceSize": { "w": 46, "h": 55 }, + "duration": 100 + }, + { + "filename": "0025.png", + "frame": { "x": 85, "y": 100, "w": 40, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 15, "w": 40, "h": 39 }, + "sourceSize": { "w": 46, "h": 55 }, + "duration": 100 + }, + { + "filename": "0026.png", + "frame": { "x": 85, "y": 141, "w": 40, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 16, "w": 40, "h": 38 }, + "sourceSize": { "w": 46, "h": 55 }, + "duration": 100 + }, + { + "filename": "0027.png", + "frame": { "x": 43, "y": 181, "w": 40, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 17, "w": 40, "h": 37 }, + "sourceSize": { "w": 46, "h": 55 }, + "duration": 100 + }, + { + "filename": "0028.png", + "frame": { "x": 127, "y": 182, "w": 39, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 18, "w": 39, "h": 36 }, + "sourceSize": { "w": 46, "h": 55 }, + "duration": 100 + }, + { + "filename": "0029.png", + "frame": { "x": 168, "y": 218, "w": 39, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 19, "w": 39, "h": 36 }, + "sourceSize": { "w": 46, "h": 55 }, + "duration": 100 + }, + { + "filename": "0030.png", + "frame": { "x": 1, "y": 221, "w": 38, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 20, "w": 38, "h": 35 }, + "sourceSize": { "w": 46, "h": 55 }, + "duration": 100 + }, + { + "filename": "0031.png", + "frame": { "x": 43, "y": 220, "w": 39, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 19, "w": 39, "h": 36 }, + "sourceSize": { "w": 46, "h": 55 }, + "duration": 100 + }, + { + "filename": "0032.png", + "frame": { "x": 125, "y": 220, "w": 39, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 19, "w": 39, "h": 35 }, + "sourceSize": { "w": 46, "h": 55 }, + "duration": 100 + }, + { + "filename": "0033.png", + "frame": { "x": 84, "y": 220, "w": 39, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 18, "w": 39, "h": 36 }, + "sourceSize": { "w": 46, "h": 55 }, + "duration": 100 + }, + { + "filename": "0034.png", + "frame": { "x": 85, "y": 181, "w": 40, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 17, "w": 40, "h": 37 }, + "sourceSize": { "w": 46, "h": 55 }, + "duration": 100 + }, + { + "filename": "0035.png", + "frame": { "x": 168, "y": 178, "w": 40, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 16, "w": 40, "h": 38 }, + "sourceSize": { "w": 46, "h": 55 }, + "duration": 100 + }, + { + "filename": "0036.png", + "frame": { "x": 1, "y": 181, "w": 40, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 16, "w": 40, "h": 38 }, + "sourceSize": { "w": 46, "h": 55 }, + "duration": 100 + }, + { + "filename": "0037.png", + "frame": { "x": 85, "y": 100, "w": 40, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 15, "w": 40, "h": 39 }, + "sourceSize": { "w": 46, "h": 55 }, + "duration": 100 + }, + { + "filename": "0038.png", + "frame": { "x": 85, "y": 141, "w": 40, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 16, "w": 40, "h": 38 }, + "sourceSize": { "w": 46, "h": 55 }, + "duration": 100 + }, + { + "filename": "0039.png", + "frame": { "x": 43, "y": 181, "w": 40, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 17, "w": 40, "h": 37 }, + "sourceSize": { "w": 46, "h": 55 }, + "duration": 100 + }, + { + "filename": "0040.png", + "frame": { "x": 127, "y": 182, "w": 39, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 18, "w": 39, "h": 36 }, + "sourceSize": { "w": 46, "h": 55 }, + "duration": 100 + }, + { + "filename": "0041.png", + "frame": { "x": 168, "y": 218, "w": 39, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 19, "w": 39, "h": 36 }, + "sourceSize": { "w": 46, "h": 55 }, + "duration": 100 + }, + { + "filename": "0042.png", + "frame": { "x": 1, "y": 221, "w": 38, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 20, "w": 38, "h": 35 }, + "sourceSize": { "w": 46, "h": 55 }, + "duration": 100 + }, + { + "filename": "0043.png", + "frame": { "x": 43, "y": 220, "w": 39, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 19, "w": 39, "h": 36 }, + "sourceSize": { "w": 46, "h": 55 }, + "duration": 100 + }, + { + "filename": "0044.png", + "frame": { "x": 125, "y": 220, "w": 39, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 19, "w": 39, "h": 35 }, + "sourceSize": { "w": 46, "h": 55 }, + "duration": 100 + }, + { + "filename": "0045.png", + "frame": { "x": 84, "y": 220, "w": 39, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 18, "w": 39, "h": 36 }, + "sourceSize": { "w": 46, "h": 55 }, + "duration": 100 + }, + { + "filename": "0046.png", + "frame": { "x": 85, "y": 181, "w": 40, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 17, "w": 40, "h": 37 }, + "sourceSize": { "w": 46, "h": 55 }, + "duration": 100 + }, + { + "filename": "0047.png", + "frame": { "x": 168, "y": 178, "w": 40, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 16, "w": 40, "h": 38 }, + "sourceSize": { "w": 46, "h": 55 }, + "duration": 100 + }, + { + "filename": "0048.png", + "frame": { "x": 1, "y": 181, "w": 40, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 16, "w": 40, "h": 38 }, + "sourceSize": { "w": 46, "h": 55 }, + "duration": 100 + }, + { + "filename": "0049.png", + "frame": { "x": 85, "y": 100, "w": 40, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 15, "w": 40, "h": 39 }, + "sourceSize": { "w": 46, "h": 55 }, + "duration": 100 + }, + { + "filename": "0050.png", + "frame": { "x": 85, "y": 141, "w": 40, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 16, "w": 40, "h": 38 }, + "sourceSize": { "w": 46, "h": 55 }, + "duration": 100 + }, + { + "filename": "0051.png", + "frame": { "x": 43, "y": 181, "w": 40, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 17, "w": 40, "h": 37 }, + "sourceSize": { "w": 46, "h": 55 }, + "duration": 100 + }, + { + "filename": "0052.png", + "frame": { "x": 127, "y": 182, "w": 39, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 18, "w": 39, "h": 36 }, + "sourceSize": { "w": 46, "h": 55 }, + "duration": 100 + }, + { + "filename": "0053.png", + "frame": { "x": 168, "y": 218, "w": 39, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 19, "w": 39, "h": 36 }, + "sourceSize": { "w": 46, "h": 55 }, + "duration": 100 + }, + { + "filename": "0054.png", + "frame": { "x": 1, "y": 221, "w": 38, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 20, "w": 38, "h": 35 }, + "sourceSize": { "w": 46, "h": 55 }, + "duration": 100 + }, + { + "filename": "0055.png", + "frame": { "x": 43, "y": 220, "w": 39, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 19, "w": 39, "h": 36 }, + "sourceSize": { "w": 46, "h": 55 }, + "duration": 100 + }, + { + "filename": "0056.png", + "frame": { "x": 125, "y": 220, "w": 39, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 19, "w": 39, "h": 35 }, + "sourceSize": { "w": 46, "h": 55 }, + "duration": 100 + }, + { + "filename": "0057.png", + "frame": { "x": 84, "y": 220, "w": 39, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 18, "w": 39, "h": 36 }, + "sourceSize": { "w": 46, "h": 55 }, + "duration": 100 + }, + { + "filename": "0058.png", + "frame": { "x": 85, "y": 181, "w": 40, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 17, "w": 40, "h": 37 }, + "sourceSize": { "w": 46, "h": 55 }, + "duration": 100 + }, + { + "filename": "0059.png", + "frame": { "x": 168, "y": 178, "w": 40, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 16, "w": 40, "h": 38 }, + "sourceSize": { "w": 46, "h": 55 }, + "duration": 100 + }, + { + "filename": "0060.png", + "frame": { "x": 1, "y": 181, "w": 40, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 16, "w": 40, "h": 38 }, + "sourceSize": { "w": 46, "h": 55 }, + "duration": 100 + }, + { + "filename": "0061.png", + "frame": { "x": 43, "y": 99, "w": 40, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 15, "w": 40, "h": 39 }, + "sourceSize": { "w": 46, "h": 55 }, + "duration": 100 + }, + { + "filename": "0062.png", + "frame": { "x": 179, "y": 137, "w": 40, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 15, "w": 40, "h": 39 }, + "sourceSize": { "w": 46, "h": 55 }, + "duration": 100 + }, + { + "filename": "0063.png", + "frame": { "x": 1, "y": 140, "w": 40, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 15, "w": 40, "h": 39 }, + "sourceSize": { "w": 46, "h": 55 }, + "duration": 100 + }, + { + "filename": "0064.png", + "frame": { "x": 43, "y": 140, "w": 40, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 15, "w": 40, "h": 39 }, + "sourceSize": { "w": 46, "h": 55 }, + "duration": 100 + }, + { + "filename": "0065.png", + "frame": { "x": 1, "y": 56, "w": 40, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 14, "w": 40, "h": 40 }, + "sourceSize": { "w": 46, "h": 55 }, + "duration": 100 + }, + { + "filename": "0066.png", + "frame": { "x": 43, "y": 57, "w": 40, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 14, "w": 40, "h": 40 }, + "sourceSize": { "w": 46, "h": 55 }, + "duration": 100 + }, + { + "filename": "0067.png", + "frame": { "x": 179, "y": 95, "w": 40, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 14, "w": 40, "h": 40 }, + "sourceSize": { "w": 46, "h": 55 }, + "duration": 100 + }, + { + "filename": "0068.png", + "frame": { "x": 1, "y": 98, "w": 40, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 14, "w": 40, "h": 40 }, + "sourceSize": { "w": 46, "h": 55 }, + "duration": 100 + }, + { + "filename": "0069.png", + "frame": { "x": 137, "y": 55, "w": 40, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 13, "w": 40, "h": 41 }, + "sourceSize": { "w": 46, "h": 55 }, + "duration": 100 + }, + { + "filename": "0070.png", + "frame": { "x": 95, "y": 55, "w": 40, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 11, "w": 40, "h": 43 }, + "sourceSize": { "w": 46, "h": 55 }, + "duration": 100 + }, + { + "filename": "0071.png", + "frame": { "x": 186, "y": 49, "w": 40, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 10, "w": 40, "h": 44 }, + "sourceSize": { "w": 46, "h": 55 }, + "duration": 100 + }, + { + "filename": "0072.png", + "frame": { "x": 186, "y": 1, "w": 40, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 8, "w": 40, "h": 46 }, + "sourceSize": { "w": 46, "h": 55 }, + "duration": 100 + }, + { + "filename": "0073.png", + "frame": { "x": 95, "y": 1, "w": 45, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 45, "h": 52 }, + "sourceSize": { "w": 46, "h": 55 }, + "duration": 100 + }, + { + "filename": "0074.png", + "frame": { "x": 1, "y": 1, "w": 46, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 46, "h": 53 }, + "sourceSize": { "w": 46, "h": 55 }, + "duration": 100 + }, + { + "filename": "0075.png", + "frame": { "x": 1, "y": 1, "w": 46, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 46, "h": 53 }, + "sourceSize": { "w": 46, "h": 55 }, + "duration": 100 + }, + { + "filename": "0076.png", + "frame": { "x": 1, "y": 1, "w": 46, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 46, "h": 53 }, + "sourceSize": { "w": 46, "h": 55 }, + "duration": 100 + }, + { + "filename": "0077.png", + "frame": { "x": 1, "y": 1, "w": 46, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 46, "h": 53 }, + "sourceSize": { "w": 46, "h": 55 }, + "duration": 100 + }, + { + "filename": "0078.png", + "frame": { "x": 142, "y": 1, "w": 42, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 42, "h": 52 }, + "sourceSize": { "w": 46, "h": 55 }, + "duration": 100 + }, + { + "filename": "0079.png", + "frame": { "x": 49, "y": 1, "w": 44, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 44, "h": 54 }, + "sourceSize": { "w": 46, "h": 55 }, + "duration": 100 + }, + { + "filename": "0080.png", + "frame": { "x": 127, "y": 140, "w": 39, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 14, "w": 39, "h": 40 }, + "sourceSize": { "w": 46, "h": 55 }, + "duration": 100 + }, + { + "filename": "0081.png", + "frame": { "x": 137, "y": 98, "w": 40, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 14, "w": 40, "h": 40 }, + "sourceSize": { "w": 46, "h": 55 }, + "duration": 100 + }, + { + "filename": "0082.png", + "frame": { "x": 1, "y": 56, "w": 40, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 14, "w": 40, "h": 40 }, + "sourceSize": { "w": 46, "h": 55 }, + "duration": 100 + }, + { + "filename": "0083.png", + "frame": { "x": 43, "y": 140, "w": 40, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 15, "w": 40, "h": 39 }, + "sourceSize": { "w": 46, "h": 55 }, + "duration": 100 + }, + { + "filename": "0084.png", + "frame": { "x": 1, "y": 140, "w": 40, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 15, "w": 40, "h": 39 }, + "sourceSize": { "w": 46, "h": 55 }, + "duration": 100 + }, + { + "filename": "0085.png", + "frame": { "x": 179, "y": 137, "w": 40, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 15, "w": 40, "h": 39 }, + "sourceSize": { "w": 46, "h": 55 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.13-x64", + "image": "728.png", + "format": "I8", + "size": { "w": 227, "h": 257 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/728.png b/public/images/pokemon/exp/728.png index a057058aab8..e7fbfa19d1e 100644 Binary files a/public/images/pokemon/exp/728.png and b/public/images/pokemon/exp/728.png differ diff --git a/public/images/pokemon/exp/729.json b/public/images/pokemon/exp/729.json index baa1260a0f7..ed22b70455c 100644 --- a/public/images/pokemon/exp/729.json +++ b/public/images/pokemon/exp/729.json @@ -1,272 +1,1055 @@ -{ - "textures": [ - { - "image": "729.png", - "format": "RGBA8888", - "size": { - "w": 141, - "h": 141 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 51 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 49, - "h": 51 - }, - "frame": { - "x": 0, - "y": 0, - "w": 49, - "h": 51 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 51 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 49, - "h": 51 - }, - "frame": { - "x": 0, - "y": 51, - "w": 49, - "h": 51 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 51 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 49, - "h": 51 - }, - "frame": { - "x": 0, - "y": 51, - "w": 49, - "h": 51 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 51 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 48, - "h": 50 - }, - "frame": { - "x": 49, - "y": 0, - "w": 48, - "h": 50 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 51 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 48, - "h": 50 - }, - "frame": { - "x": 49, - "y": 0, - "w": 48, - "h": 50 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 51 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 42, - "h": 47 - }, - "frame": { - "x": 97, - "y": 0, - "w": 42, - "h": 47 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 51 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 42, - "h": 47 - }, - "frame": { - "x": 97, - "y": 0, - "w": 42, - "h": 47 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 51 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 40, - "h": 47 - }, - "frame": { - "x": 97, - "y": 47, - "w": 40, - "h": 47 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 51 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 46, - "h": 48 - }, - "frame": { - "x": 49, - "y": 50, - "w": 46, - "h": 48 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 51 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 46, - "h": 48 - }, - "frame": { - "x": 49, - "y": 50, - "w": 46, - "h": 48 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 51 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 45, - "h": 47 - }, - "frame": { - "x": 95, - "y": 94, - "w": 45, - "h": 47 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 51 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 45, - "h": 47 - }, - "frame": { - "x": 95, - "y": 94, - "w": 45, - "h": 47 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:4df3ec883b357e664a50e3015060795f:29a8d34f9df9fa51691fda1da5961207:b2d5dd692ec79c7357afdffa7b3670a9$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 53, "y": 283, "w": 52, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 9, "w": 52, "h": 55 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 105, "y": 286, "w": 51, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 9, "w": 51, "h": 55 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 429, "y": 336, "w": 50, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 10, "w": 50, "h": 54 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 263, "y": 337, "w": 49, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 10, "w": 49, "h": 54 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 0, "y": 345, "w": 48, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 11, "w": 48, "h": 53 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 408, "y": 390, "w": 46, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 10, "w": 46, "h": 55 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 454, "y": 390, "w": 46, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 11, "w": 46, "h": 54 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 48, "y": 391, "w": 46, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 11, "w": 46, "h": 53 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 204, "y": 390, "w": 47, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 10, "w": 47, "h": 54 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 156, "y": 339, "w": 48, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 10, "w": 48, "h": 54 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 462, "y": 226, "w": 50, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 9, "w": 50, "h": 55 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0012.png", + "frame": { "x": 0, "y": 290, "w": 51, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 9, "w": 51, "h": 55 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0013.png", + "frame": { "x": 326, "y": 282, "w": 52, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 9, "w": 52, "h": 55 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0014.png", + "frame": { "x": 164, "y": 229, "w": 53, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 8, "w": 53, "h": 56 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0015.png", + "frame": { "x": 0, "y": 178, "w": 54, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 8, "w": 54, "h": 56 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0016.png", + "frame": { "x": 55, "y": 117, "w": 55, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 8, "w": 55, "h": 56 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0017.png", + "frame": { "x": 109, "y": 175, "w": 55, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 9, "w": 55, "h": 55 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0018.png", + "frame": { "x": 164, "y": 174, "w": 55, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 9, "w": 55, "h": 55 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0019.png", + "frame": { "x": 54, "y": 173, "w": 55, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 9, "w": 55, "h": 55 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0020.png", + "frame": { "x": 236, "y": 171, "w": 55, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 9, "w": 55, "h": 55 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0021.png", + "frame": { "x": 54, "y": 228, "w": 54, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 9, "w": 54, "h": 55 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0022.png", + "frame": { "x": 327, "y": 227, "w": 54, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 9, "w": 54, "h": 55 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0023.png", + "frame": { "x": 381, "y": 281, "w": 53, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 9, "w": 53, "h": 55 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0024.png", + "frame": { "x": 434, "y": 281, "w": 53, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 9, "w": 53, "h": 55 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0025.png", + "frame": { "x": 53, "y": 283, "w": 52, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 9, "w": 52, "h": 55 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0026.png", + "frame": { "x": 105, "y": 286, "w": 51, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 9, "w": 51, "h": 55 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0027.png", + "frame": { "x": 429, "y": 336, "w": 50, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 10, "w": 50, "h": 54 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0028.png", + "frame": { "x": 263, "y": 337, "w": 49, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 10, "w": 49, "h": 54 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0029.png", + "frame": { "x": 0, "y": 345, "w": 48, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 11, "w": 48, "h": 53 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0030.png", + "frame": { "x": 408, "y": 390, "w": 46, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 10, "w": 46, "h": 55 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0031.png", + "frame": { "x": 454, "y": 390, "w": 46, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 11, "w": 46, "h": 54 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0032.png", + "frame": { "x": 48, "y": 391, "w": 46, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 11, "w": 46, "h": 53 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0033.png", + "frame": { "x": 204, "y": 390, "w": 47, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 10, "w": 47, "h": 54 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0034.png", + "frame": { "x": 156, "y": 339, "w": 48, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 10, "w": 48, "h": 54 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0035.png", + "frame": { "x": 462, "y": 226, "w": 50, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 9, "w": 50, "h": 55 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0036.png", + "frame": { "x": 0, "y": 290, "w": 51, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 9, "w": 51, "h": 55 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0037.png", + "frame": { "x": 326, "y": 282, "w": 52, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 9, "w": 52, "h": 55 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0038.png", + "frame": { "x": 164, "y": 229, "w": 53, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 8, "w": 53, "h": 56 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0039.png", + "frame": { "x": 0, "y": 178, "w": 54, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 8, "w": 54, "h": 56 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0040.png", + "frame": { "x": 55, "y": 117, "w": 55, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 8, "w": 55, "h": 56 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0041.png", + "frame": { "x": 109, "y": 175, "w": 55, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 9, "w": 55, "h": 55 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0042.png", + "frame": { "x": 164, "y": 174, "w": 55, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 9, "w": 55, "h": 55 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0043.png", + "frame": { "x": 54, "y": 173, "w": 55, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 9, "w": 55, "h": 55 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0044.png", + "frame": { "x": 236, "y": 171, "w": 55, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 9, "w": 55, "h": 55 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0045.png", + "frame": { "x": 54, "y": 228, "w": 54, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 9, "w": 54, "h": 55 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0046.png", + "frame": { "x": 327, "y": 227, "w": 54, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 9, "w": 54, "h": 55 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0047.png", + "frame": { "x": 381, "y": 281, "w": 53, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 9, "w": 53, "h": 55 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0048.png", + "frame": { "x": 434, "y": 281, "w": 53, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 9, "w": 53, "h": 55 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0049.png", + "frame": { "x": 53, "y": 283, "w": 52, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 9, "w": 52, "h": 55 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0050.png", + "frame": { "x": 105, "y": 286, "w": 51, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 9, "w": 51, "h": 55 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0051.png", + "frame": { "x": 429, "y": 336, "w": 50, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 10, "w": 50, "h": 54 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0052.png", + "frame": { "x": 263, "y": 337, "w": 49, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 10, "w": 49, "h": 54 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0053.png", + "frame": { "x": 0, "y": 345, "w": 48, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 11, "w": 48, "h": 53 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0054.png", + "frame": { "x": 408, "y": 390, "w": 46, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 10, "w": 46, "h": 55 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0055.png", + "frame": { "x": 454, "y": 390, "w": 46, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 11, "w": 46, "h": 54 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0056.png", + "frame": { "x": 48, "y": 391, "w": 46, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 11, "w": 46, "h": 53 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0057.png", + "frame": { "x": 204, "y": 390, "w": 47, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 10, "w": 47, "h": 54 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0058.png", + "frame": { "x": 156, "y": 339, "w": 48, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 10, "w": 48, "h": 54 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0059.png", + "frame": { "x": 462, "y": 226, "w": 50, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 9, "w": 50, "h": 55 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0060.png", + "frame": { "x": 0, "y": 290, "w": 51, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 9, "w": 51, "h": 55 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0061.png", + "frame": { "x": 326, "y": 282, "w": 52, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 9, "w": 52, "h": 55 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0062.png", + "frame": { "x": 164, "y": 229, "w": 53, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 8, "w": 53, "h": 56 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0063.png", + "frame": { "x": 0, "y": 178, "w": 54, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 8, "w": 54, "h": 56 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0064.png", + "frame": { "x": 55, "y": 117, "w": 55, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 8, "w": 55, "h": 56 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0065.png", + "frame": { "x": 109, "y": 175, "w": 55, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 9, "w": 55, "h": 55 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0066.png", + "frame": { "x": 164, "y": 174, "w": 55, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 9, "w": 55, "h": 55 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0067.png", + "frame": { "x": 54, "y": 173, "w": 55, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 9, "w": 55, "h": 55 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0068.png", + "frame": { "x": 236, "y": 171, "w": 55, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 9, "w": 55, "h": 55 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0069.png", + "frame": { "x": 54, "y": 228, "w": 54, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 9, "w": 54, "h": 55 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0070.png", + "frame": { "x": 327, "y": 227, "w": 54, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 9, "w": 54, "h": 55 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0071.png", + "frame": { "x": 381, "y": 281, "w": 53, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 9, "w": 53, "h": 55 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0072.png", + "frame": { "x": 434, "y": 281, "w": 53, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 9, "w": 53, "h": 55 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0073.png", + "frame": { "x": 53, "y": 283, "w": 52, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 9, "w": 52, "h": 55 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0074.png", + "frame": { "x": 408, "y": 226, "w": 54, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 9, "w": 54, "h": 55 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0075.png", + "frame": { "x": 312, "y": 56, "w": 57, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 8, "w": 57, "h": 56 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0076.png", + "frame": { "x": 312, "y": 0, "w": 59, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 8, "w": 59, "h": 56 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0077.png", + "frame": { "x": 244, "y": 116, "w": 56, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 9, "w": 56, "h": 55 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0078.png", + "frame": { "x": 416, "y": 114, "w": 56, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 9, "w": 56, "h": 55 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0079.png", + "frame": { "x": 64, "y": 62, "w": 57, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 9, "w": 57, "h": 55 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0080.png", + "frame": { "x": 371, "y": 0, "w": 58, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 8, "w": 58, "h": 56 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0081.png", + "frame": { "x": 273, "y": 226, "w": 54, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 9, "w": 54, "h": 55 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0082.png", + "frame": { "x": 53, "y": 283, "w": 52, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 9, "w": 52, "h": 55 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0083.png", + "frame": { "x": 161, "y": 285, "w": 52, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 9, "w": 52, "h": 54 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0084.png", + "frame": { "x": 312, "y": 337, "w": 50, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 10, "w": 50, "h": 52 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0085.png", + "frame": { "x": 312, "y": 389, "w": 48, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 10, "w": 48, "h": 53 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0086.png", + "frame": { "x": 51, "y": 338, "w": 49, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 10, "w": 49, "h": 53 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0087.png", + "frame": { "x": 378, "y": 336, "w": 51, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 10, "w": 51, "h": 53 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0088.png", + "frame": { "x": 213, "y": 337, "w": 50, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 10, "w": 50, "h": 53 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0089.png", + "frame": { "x": 360, "y": 389, "w": 48, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 9, "w": 48, "h": 53 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0090.png", + "frame": { "x": 100, "y": 341, "w": 49, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 10, "w": 49, "h": 52 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0091.png", + "frame": { "x": 53, "y": 283, "w": 52, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 9, "w": 52, "h": 55 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0092.png", + "frame": { "x": 217, "y": 282, "w": 52, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 9, "w": 52, "h": 55 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0093.png", + "frame": { "x": 108, "y": 230, "w": 53, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 8, "w": 53, "h": 56 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0094.png", + "frame": { "x": 300, "y": 169, "w": 54, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 7, "w": 54, "h": 57 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0095.png", + "frame": { "x": 182, "y": 117, "w": 54, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 7, "w": 54, "h": 57 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0096.png", + "frame": { "x": 0, "y": 121, "w": 54, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 7, "w": 54, "h": 57 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0097.png", + "frame": { "x": 189, "y": 60, "w": 55, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 7, "w": 55, "h": 57 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0098.png", + "frame": { "x": 110, "y": 118, "w": 54, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 7, "w": 54, "h": 57 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0099.png", + "frame": { "x": 369, "y": 56, "w": 55, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 7, "w": 55, "h": 57 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0100.png", + "frame": { "x": 424, "y": 57, "w": 55, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 7, "w": 55, "h": 57 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0101.png", + "frame": { "x": 429, "y": 0, "w": 56, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 7, "w": 56, "h": 57 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0102.png", + "frame": { "x": 127, "y": 0, "w": 62, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 62, "h": 61 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0103.png", + "frame": { "x": 64, "y": 0, "w": 63, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 63, "h": 62 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0104.png", + "frame": { "x": 0, "y": 0, "w": 64, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 64, "h": 64 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0105.png", + "frame": { "x": 251, "y": 0, "w": 61, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 61, "h": 59 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0106.png", + "frame": { "x": 189, "y": 0, "w": 62, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 62, "h": 60 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0107.png", + "frame": { "x": 0, "y": 64, "w": 55, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 7, "w": 55, "h": 57 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0108.png", + "frame": { "x": 127, "y": 61, "w": 55, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 7, "w": 55, "h": 57 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0109.png", + "frame": { "x": 306, "y": 112, "w": 55, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 7, "w": 55, "h": 57 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0110.png", + "frame": { "x": 361, "y": 113, "w": 55, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 7, "w": 55, "h": 57 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0111.png", + "frame": { "x": 251, "y": 59, "w": 55, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 7, "w": 55, "h": 57 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0112.png", + "frame": { "x": 416, "y": 169, "w": 54, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 7, "w": 54, "h": 57 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0113.png", + "frame": { "x": 354, "y": 170, "w": 54, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 7, "w": 54, "h": 57 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0114.png", + "frame": { "x": 219, "y": 226, "w": 54, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 8, "w": 54, "h": 56 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0115.png", + "frame": { "x": 0, "y": 234, "w": 53, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 8, "w": 53, "h": 56 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0116.png", + "frame": { "x": 273, "y": 281, "w": 53, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 8, "w": 53, "h": 56 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.13-x64", + "image": "729.png", + "format": "I8", + "size": { "w": 512, "h": 445 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/729.png b/public/images/pokemon/exp/729.png index 31cd2f7e1fa..33af53ebc16 100644 Binary files a/public/images/pokemon/exp/729.png and b/public/images/pokemon/exp/729.png differ diff --git a/public/images/pokemon/exp/730.json b/public/images/pokemon/exp/730.json index ff2d76644f9..b1b6c5189bc 100644 --- a/public/images/pokemon/exp/730.json +++ b/public/images/pokemon/exp/730.json @@ -1,2309 +1,839 @@ -{ - "textures": [ - { - "image": "730.png", - "format": "RGBA8888", - "size": { - "w": 615, - "h": 615 - }, - "scale": 1, - "frames": [ - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 83, - "h": 81 - }, - "frame": { - "x": 0, - "y": 0, - "w": 83, - "h": 81 - } - }, - { - "filename": "0038.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 83, - "h": 81 - }, - "frame": { - "x": 0, - "y": 0, - "w": 83, - "h": 81 - } - }, - { - "filename": "0086.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 83, - "h": 81 - }, - "frame": { - "x": 0, - "y": 0, - "w": 83, - "h": 81 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 78, - "h": 85 - }, - "frame": { - "x": 0, - "y": 81, - "w": 78, - "h": 85 - } - }, - { - "filename": "0035.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 78, - "h": 85 - }, - "frame": { - "x": 0, - "y": 81, - "w": 78, - "h": 85 - } - }, - { - "filename": "0083.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 78, - "h": 85 - }, - "frame": { - "x": 0, - "y": 81, - "w": 78, - "h": 85 - } - }, - { - "filename": "0062.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 83, - "h": 80 - }, - "frame": { - "x": 83, - "y": 0, - "w": 83, - "h": 80 - } - }, - { - "filename": "0107.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 8, - "w": 83, - "h": 80 - }, - "frame": { - "x": 166, - "y": 0, - "w": 83, - "h": 80 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 74, - "h": 88 - }, - "frame": { - "x": 0, - "y": 166, - "w": 74, - "h": 88 - } - }, - { - "filename": "0034.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 74, - "h": 88 - }, - "frame": { - "x": 0, - "y": 166, - "w": 74, - "h": 88 - } - }, - { - "filename": "0082.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 74, - "h": 88 - }, - "frame": { - "x": 0, - "y": 166, - "w": 74, - "h": 88 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 9, - "w": 83, - "h": 79 - }, - "frame": { - "x": 249, - "y": 0, - "w": 83, - "h": 79 - } - }, - { - "filename": "0039.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 9, - "w": 83, - "h": 79 - }, - "frame": { - "x": 249, - "y": 0, - "w": 83, - "h": 79 - } - }, - { - "filename": "0087.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 9, - "w": 83, - "h": 79 - }, - "frame": { - "x": 249, - "y": 0, - "w": 83, - "h": 79 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 10, - "w": 84, - "h": 78 - }, - "frame": { - "x": 332, - "y": 0, - "w": 84, - "h": 78 - } - }, - { - "filename": "0040.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 10, - "w": 84, - "h": 78 - }, - "frame": { - "x": 332, - "y": 0, - "w": 84, - "h": 78 - } - }, - { - "filename": "0088.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 10, - "w": 84, - "h": 78 - }, - "frame": { - "x": 332, - "y": 0, - "w": 84, - "h": 78 - } - }, - { - "filename": "0064.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 10, - "w": 84, - "h": 78 - }, - "frame": { - "x": 416, - "y": 0, - "w": 84, - "h": 78 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 73, - "h": 88 - }, - "frame": { - "x": 0, - "y": 254, - "w": 73, - "h": 88 - } - }, - { - "filename": "0033.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 73, - "h": 88 - }, - "frame": { - "x": 0, - "y": 254, - "w": 73, - "h": 88 - } - }, - { - "filename": "0081.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 73, - "h": 88 - }, - "frame": { - "x": 0, - "y": 254, - "w": 73, - "h": 88 - } - }, - { - "filename": "0063.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 9, - "w": 83, - "h": 79 - }, - "frame": { - "x": 500, - "y": 0, - "w": 83, - "h": 79 - } - }, - { - "filename": "0057.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 73, - "h": 87 - }, - "frame": { - "x": 0, - "y": 342, - "w": 73, - "h": 87 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 75, - "h": 86 - }, - "frame": { - "x": 0, - "y": 429, - "w": 75, - "h": 86 - } - }, - { - "filename": "0032.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 75, - "h": 86 - }, - "frame": { - "x": 0, - "y": 429, - "w": 75, - "h": 86 - } - }, - { - "filename": "0080.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 75, - "h": 86 - }, - "frame": { - "x": 0, - "y": 429, - "w": 75, - "h": 86 - } - }, - { - "filename": "0056.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 75, - "h": 86 - }, - "frame": { - "x": 0, - "y": 515, - "w": 75, - "h": 86 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 75, - "h": 85 - }, - "frame": { - "x": 78, - "y": 81, - "w": 75, - "h": 85 - } - }, - { - "filename": "0031.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 75, - "h": 85 - }, - "frame": { - "x": 78, - "y": 81, - "w": 75, - "h": 85 - } - }, - { - "filename": "0079.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 75, - "h": 85 - }, - "frame": { - "x": 78, - "y": 81, - "w": 75, - "h": 85 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 81, - "h": 82 - }, - "frame": { - "x": 153, - "y": 80, - "w": 81, - "h": 82 - } - }, - { - "filename": "0037.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 81, - "h": 82 - }, - "frame": { - "x": 153, - "y": 80, - "w": 81, - "h": 82 - } - }, - { - "filename": "0085.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 81, - "h": 82 - }, - "frame": { - "x": 153, - "y": 80, - "w": 81, - "h": 82 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 80, - "h": 82 - }, - "frame": { - "x": 74, - "y": 166, - "w": 80, - "h": 82 - } - }, - { - "filename": "0036.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 80, - "h": 82 - }, - "frame": { - "x": 74, - "y": 166, - "w": 80, - "h": 82 - } - }, - { - "filename": "0084.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 80, - "h": 82 - }, - "frame": { - "x": 74, - "y": 166, - "w": 80, - "h": 82 - } - }, - { - "filename": "0108.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 80, - "h": 81 - }, - "frame": { - "x": 154, - "y": 162, - "w": 80, - "h": 81 - } - }, - { - "filename": "0055.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 75, - "h": 85 - }, - "frame": { - "x": 234, - "y": 80, - "w": 75, - "h": 85 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 78, - "h": 81 - }, - "frame": { - "x": 234, - "y": 165, - "w": 78, - "h": 81 - } - }, - { - "filename": "0025.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 78, - "h": 81 - }, - "frame": { - "x": 234, - "y": 165, - "w": 78, - "h": 81 - } - }, - { - "filename": "0049.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 78, - "h": 81 - }, - "frame": { - "x": 234, - "y": 165, - "w": 78, - "h": 81 - } - }, - { - "filename": "0073.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 78, - "h": 81 - }, - "frame": { - "x": 234, - "y": 165, - "w": 78, - "h": 81 - } - }, - { - "filename": "0097.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 78, - "h": 81 - }, - "frame": { - "x": 234, - "y": 165, - "w": 78, - "h": 81 - } - }, - { - "filename": "0058.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 74, - "h": 85 - }, - "frame": { - "x": 309, - "y": 79, - "w": 74, - "h": 85 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 78, - "h": 82 - }, - "frame": { - "x": 383, - "y": 78, - "w": 78, - "h": 82 - } - }, - { - "filename": "0028.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 78, - "h": 82 - }, - "frame": { - "x": 383, - "y": 78, - "w": 78, - "h": 82 - } - }, - { - "filename": "0052.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 78, - "h": 82 - }, - "frame": { - "x": 383, - "y": 78, - "w": 78, - "h": 82 - } - }, - { - "filename": "0076.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 78, - "h": 82 - }, - "frame": { - "x": 383, - "y": 78, - "w": 78, - "h": 82 - } - }, - { - "filename": "0059.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 78, - "h": 82 - }, - "frame": { - "x": 312, - "y": 164, - "w": 78, - "h": 82 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 78, - "h": 81 - }, - "frame": { - "x": 390, - "y": 160, - "w": 78, - "h": 81 - } - }, - { - "filename": "0026.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 78, - "h": 81 - }, - "frame": { - "x": 390, - "y": 160, - "w": 78, - "h": 81 - } - }, - { - "filename": "0050.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 78, - "h": 81 - }, - "frame": { - "x": 390, - "y": 160, - "w": 78, - "h": 81 - } - }, - { - "filename": "0074.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 78, - "h": 81 - }, - "frame": { - "x": 390, - "y": 160, - "w": 78, - "h": 81 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 78, - "h": 81 - }, - "frame": { - "x": 461, - "y": 79, - "w": 78, - "h": 81 - } - }, - { - "filename": "0027.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 78, - "h": 81 - }, - "frame": { - "x": 461, - "y": 79, - "w": 78, - "h": 81 - } - }, - { - "filename": "0051.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 78, - "h": 81 - }, - "frame": { - "x": 461, - "y": 79, - "w": 78, - "h": 81 - } - }, - { - "filename": "0075.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 78, - "h": 81 - }, - "frame": { - "x": 461, - "y": 79, - "w": 78, - "h": 81 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 76, - "h": 81 - }, - "frame": { - "x": 539, - "y": 79, - "w": 76, - "h": 81 - } - }, - { - "filename": "0030.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 76, - "h": 81 - }, - "frame": { - "x": 539, - "y": 79, - "w": 76, - "h": 81 - } - }, - { - "filename": "0054.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 76, - "h": 81 - }, - "frame": { - "x": 539, - "y": 79, - "w": 76, - "h": 81 - } - }, - { - "filename": "0078.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 76, - "h": 81 - }, - "frame": { - "x": 539, - "y": 79, - "w": 76, - "h": 81 - } - }, - { - "filename": "0061.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 81, - "h": 79 - }, - "frame": { - "x": 468, - "y": 160, - "w": 81, - "h": 79 - } - }, - { - "filename": "0023.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 13, - "w": 80, - "h": 75 - }, - "frame": { - "x": 154, - "y": 243, - "w": 80, - "h": 75 - } - }, - { - "filename": "0047.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 13, - "w": 80, - "h": 75 - }, - "frame": { - "x": 154, - "y": 243, - "w": 80, - "h": 75 - } - }, - { - "filename": "0095.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 13, - "w": 80, - "h": 75 - }, - "frame": { - "x": 154, - "y": 243, - "w": 80, - "h": 75 - } - }, - { - "filename": "0017.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 14, - "w": 84, - "h": 74 - }, - "frame": { - "x": 234, - "y": 246, - "w": 84, - "h": 74 - } - }, - { - "filename": "0041.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 14, - "w": 84, - "h": 74 - }, - "frame": { - "x": 234, - "y": 246, - "w": 84, - "h": 74 - } - }, - { - "filename": "0089.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 14, - "w": 84, - "h": 74 - }, - "frame": { - "x": 234, - "y": 246, - "w": 84, - "h": 74 - } - }, - { - "filename": "0060.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 80, - "h": 79 - }, - "frame": { - "x": 74, - "y": 248, - "w": 80, - "h": 79 - } - }, - { - "filename": "0109.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 78, - "h": 81 - }, - "frame": { - "x": 73, - "y": 327, - "w": 78, - "h": 81 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 77, - "h": 81 - }, - "frame": { - "x": 318, - "y": 246, - "w": 77, - "h": 81 - } - }, - { - "filename": "0029.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 77, - "h": 81 - }, - "frame": { - "x": 318, - "y": 246, - "w": 77, - "h": 81 - } - }, - { - "filename": "0053.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 77, - "h": 81 - }, - "frame": { - "x": 318, - "y": 246, - "w": 77, - "h": 81 - } - }, - { - "filename": "0077.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 77, - "h": 81 - }, - "frame": { - "x": 318, - "y": 246, - "w": 77, - "h": 81 - } - }, - { - "filename": "0098.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 9, - "w": 78, - "h": 79 - }, - "frame": { - "x": 395, - "y": 241, - "w": 78, - "h": 79 - } - }, - { - "filename": "0024.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 10, - "w": 78, - "h": 78 - }, - "frame": { - "x": 473, - "y": 239, - "w": 78, - "h": 78 - } - }, - { - "filename": "0048.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 10, - "w": 78, - "h": 78 - }, - "frame": { - "x": 473, - "y": 239, - "w": 78, - "h": 78 - } - }, - { - "filename": "0096.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 10, - "w": 78, - "h": 78 - }, - "frame": { - "x": 473, - "y": 239, - "w": 78, - "h": 78 - } - }, - { - "filename": "0072.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 10, - "w": 78, - "h": 78 - }, - "frame": { - "x": 75, - "y": 408, - "w": 78, - "h": 78 - } - }, - { - "filename": "0099.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 11, - "w": 79, - "h": 77 - }, - "frame": { - "x": 75, - "y": 486, - "w": 79, - "h": 77 - } - }, - { - "filename": "0071.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 13, - "w": 80, - "h": 75 - }, - "frame": { - "x": 154, - "y": 318, - "w": 80, - "h": 75 - } - }, - { - "filename": "0018.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 15, - "w": 84, - "h": 73 - }, - "frame": { - "x": 234, - "y": 320, - "w": 84, - "h": 73 - } - }, - { - "filename": "0042.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 15, - "w": 84, - "h": 73 - }, - "frame": { - "x": 234, - "y": 320, - "w": 84, - "h": 73 - } - }, - { - "filename": "0090.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 15, - "w": 84, - "h": 73 - }, - "frame": { - "x": 234, - "y": 320, - "w": 84, - "h": 73 - } - }, - { - "filename": "0019.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 16, - "w": 84, - "h": 72 - }, - "frame": { - "x": 318, - "y": 327, - "w": 84, - "h": 72 - } - }, - { - "filename": "0043.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 16, - "w": 84, - "h": 72 - }, - "frame": { - "x": 318, - "y": 327, - "w": 84, - "h": 72 - } - }, - { - "filename": "0091.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 16, - "w": 84, - "h": 72 - }, - "frame": { - "x": 318, - "y": 327, - "w": 84, - "h": 72 - } - }, - { - "filename": "0065.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 14, - "w": 84, - "h": 74 - }, - "frame": { - "x": 153, - "y": 393, - "w": 84, - "h": 74 - } - }, - { - "filename": "0101.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 17, - "w": 81, - "h": 71 - }, - "frame": { - "x": 237, - "y": 393, - "w": 81, - "h": 71 - } - }, - { - "filename": "0066.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 15, - "w": 84, - "h": 73 - }, - "frame": { - "x": 318, - "y": 399, - "w": 84, - "h": 73 - } - }, - { - "filename": "0106.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 13, - "w": 83, - "h": 75 - }, - "frame": { - "x": 402, - "y": 320, - "w": 83, - "h": 75 - } - }, - { - "filename": "0105.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 14, - "w": 84, - "h": 74 - }, - "frame": { - "x": 402, - "y": 395, - "w": 84, - "h": 74 - } - }, - { - "filename": "0100.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 14, - "w": 80, - "h": 74 - }, - "frame": { - "x": 485, - "y": 317, - "w": 80, - "h": 74 - } - }, - { - "filename": "0104.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 15, - "w": 83, - "h": 73 - }, - "frame": { - "x": 486, - "y": 391, - "w": 83, - "h": 73 - } - }, - { - "filename": "0067.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 16, - "w": 84, - "h": 72 - }, - "frame": { - "x": 154, - "y": 467, - "w": 84, - "h": 72 - } - }, - { - "filename": "0021.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 17, - "w": 83, - "h": 71 - }, - "frame": { - "x": 154, - "y": 539, - "w": 83, - "h": 71 - } - }, - { - "filename": "0045.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 17, - "w": 83, - "h": 71 - }, - "frame": { - "x": 154, - "y": 539, - "w": 83, - "h": 71 - } - }, - { - "filename": "0093.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 17, - "w": 83, - "h": 71 - }, - "frame": { - "x": 154, - "y": 539, - "w": 83, - "h": 71 - } - }, - { - "filename": "0022.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 17, - "w": 83, - "h": 71 - }, - "frame": { - "x": 486, - "y": 464, - "w": 83, - "h": 71 - } - }, - { - "filename": "0046.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 17, - "w": 83, - "h": 71 - }, - "frame": { - "x": 486, - "y": 464, - "w": 83, - "h": 71 - } - }, - { - "filename": "0094.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 17, - "w": 83, - "h": 71 - }, - "frame": { - "x": 486, - "y": 464, - "w": 83, - "h": 71 - } - }, - { - "filename": "0069.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 17, - "w": 83, - "h": 71 - }, - "frame": { - "x": 402, - "y": 469, - "w": 83, - "h": 71 - } - }, - { - "filename": "0070.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 17, - "w": 83, - "h": 71 - }, - "frame": { - "x": 485, - "y": 535, - "w": 83, - "h": 71 - } - }, - { - "filename": "0020.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 16, - "w": 82, - "h": 72 - }, - "frame": { - "x": 237, - "y": 539, - "w": 82, - "h": 72 - } - }, - { - "filename": "0044.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 16, - "w": 82, - "h": 72 - }, - "frame": { - "x": 237, - "y": 539, - "w": 82, - "h": 72 - } - }, - { - "filename": "0092.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 16, - "w": 82, - "h": 72 - }, - "frame": { - "x": 237, - "y": 539, - "w": 82, - "h": 72 - } - }, - { - "filename": "0103.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 16, - "w": 83, - "h": 72 - }, - "frame": { - "x": 319, - "y": 472, - "w": 83, - "h": 72 - } - }, - { - "filename": "0102.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 18, - "w": 82, - "h": 70 - }, - "frame": { - "x": 319, - "y": 544, - "w": 82, - "h": 70 - } - }, - { - "filename": "0068.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 16, - "w": 82, - "h": 72 - }, - "frame": { - "x": 402, - "y": 540, - "w": 82, - "h": 72 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:4329c19087eab420ea4188f3ebf013ba:3f36a5e65803b0f012c6fee4aeaf5df7:fcd0d2cb6b26724e796ae0dcb71fae3f$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 491, "y": 0, "w": 79, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 13, "w": 79, "h": 71 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 341, "y": 0, "w": 77, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 11, "w": 77, "h": 73 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 265, "y": 0, "w": 76, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 9, "w": 76, "h": 75 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 418, "y": 0, "w": 73, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 7, "w": 73, "h": 77 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 159, "y": 68, "w": 69, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 4, "w": 69, "h": 80 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 309, "y": 143, "w": 64, "h": 83 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 1, "w": 64, "h": 83 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 0, "y": 145, "w": 63, "h": 84 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 0, "w": 63, "h": 84 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 63, "y": 147, "w": 63, "h": 84 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 0, "w": 63, "h": 84 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 446, "y": 203, "w": 63, "h": 82 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 2, "w": 63, "h": 82 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 509, "y": 335, "w": 63, "h": 79 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 5, "w": 63, "h": 79 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 74, "y": 375, "w": 66, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 10, "w": 66, "h": 74 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0012.png", + "frame": { "x": 140, "y": 409, "w": 69, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 15, "w": 69, "h": 69 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0013.png", + "frame": { "x": 280, "y": 428, "w": 72, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 18, "w": 72, "h": 66 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0014.png", + "frame": { "x": 353, "y": 416, "w": 74, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 19, "w": 74, "h": 65 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0015.png", + "frame": { "x": 536, "y": 414, "w": 74, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 19, "w": 74, "h": 65 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0016.png", + "frame": { "x": 461, "y": 414, "w": 75, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 19, "w": 75, "h": 65 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0017.png", + "frame": { "x": 385, "y": 351, "w": 76, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 19, "w": 76, "h": 65 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0018.png", + "frame": { "x": 231, "y": 291, "w": 78, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 19, "w": 78, "h": 65 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0019.png", + "frame": { "x": 277, "y": 226, "w": 79, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 19, "w": 79, "h": 65 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0020.png", + "frame": { "x": 485, "y": 137, "w": 81, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 18, "w": 81, "h": 66 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0021.png", + "frame": { "x": 228, "y": 143, "w": 81, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 18, "w": 81, "h": 66 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0022.png", + "frame": { "x": 228, "y": 75, "w": 80, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 16, "w": 80, "h": 68 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0023.png", + "frame": { "x": 491, "y": 0, "w": 79, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 13, "w": 79, "h": 71 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0024.png", + "frame": { "x": 341, "y": 0, "w": 77, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 11, "w": 77, "h": 73 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0025.png", + "frame": { "x": 265, "y": 0, "w": 76, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 9, "w": 76, "h": 75 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0026.png", + "frame": { "x": 418, "y": 0, "w": 73, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 7, "w": 73, "h": 77 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0027.png", + "frame": { "x": 159, "y": 68, "w": 69, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 4, "w": 69, "h": 80 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0028.png", + "frame": { "x": 309, "y": 143, "w": 64, "h": 83 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 1, "w": 64, "h": 83 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0029.png", + "frame": { "x": 0, "y": 145, "w": 63, "h": 84 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 0, "w": 63, "h": 84 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0030.png", + "frame": { "x": 63, "y": 147, "w": 63, "h": 84 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 0, "w": 63, "h": 84 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0031.png", + "frame": { "x": 446, "y": 203, "w": 63, "h": 82 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 2, "w": 63, "h": 82 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0032.png", + "frame": { "x": 509, "y": 335, "w": 63, "h": 79 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 5, "w": 63, "h": 79 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0033.png", + "frame": { "x": 74, "y": 375, "w": 66, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 10, "w": 66, "h": 74 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0034.png", + "frame": { "x": 140, "y": 409, "w": 69, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 15, "w": 69, "h": 69 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0035.png", + "frame": { "x": 280, "y": 428, "w": 72, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 18, "w": 72, "h": 66 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0036.png", + "frame": { "x": 353, "y": 416, "w": 74, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 19, "w": 74, "h": 65 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0037.png", + "frame": { "x": 536, "y": 414, "w": 74, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 19, "w": 74, "h": 65 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0038.png", + "frame": { "x": 461, "y": 414, "w": 75, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 19, "w": 75, "h": 65 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0039.png", + "frame": { "x": 385, "y": 351, "w": 76, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 19, "w": 76, "h": 65 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0040.png", + "frame": { "x": 231, "y": 291, "w": 78, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 19, "w": 78, "h": 65 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0041.png", + "frame": { "x": 277, "y": 226, "w": 79, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 19, "w": 79, "h": 65 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0042.png", + "frame": { "x": 485, "y": 137, "w": 81, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 18, "w": 81, "h": 66 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0043.png", + "frame": { "x": 228, "y": 143, "w": 81, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 18, "w": 81, "h": 66 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0044.png", + "frame": { "x": 228, "y": 75, "w": 80, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 16, "w": 80, "h": 68 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0045.png", + "frame": { "x": 491, "y": 0, "w": 79, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 13, "w": 79, "h": 71 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0046.png", + "frame": { "x": 341, "y": 0, "w": 77, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 11, "w": 77, "h": 73 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0047.png", + "frame": { "x": 265, "y": 0, "w": 76, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 9, "w": 76, "h": 75 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0048.png", + "frame": { "x": 418, "y": 0, "w": 73, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 7, "w": 73, "h": 77 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0049.png", + "frame": { "x": 159, "y": 68, "w": 69, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 4, "w": 69, "h": 80 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0050.png", + "frame": { "x": 309, "y": 143, "w": 64, "h": 83 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 1, "w": 64, "h": 83 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0051.png", + "frame": { "x": 0, "y": 145, "w": 63, "h": 84 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 0, "w": 63, "h": 84 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0052.png", + "frame": { "x": 63, "y": 147, "w": 63, "h": 84 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 0, "w": 63, "h": 84 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0053.png", + "frame": { "x": 446, "y": 203, "w": 63, "h": 82 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 2, "w": 63, "h": 82 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0054.png", + "frame": { "x": 509, "y": 335, "w": 63, "h": 79 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 5, "w": 63, "h": 79 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0055.png", + "frame": { "x": 74, "y": 375, "w": 66, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 10, "w": 66, "h": 74 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0056.png", + "frame": { "x": 140, "y": 409, "w": 69, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 15, "w": 69, "h": 69 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0057.png", + "frame": { "x": 280, "y": 428, "w": 72, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 18, "w": 72, "h": 66 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0058.png", + "frame": { "x": 353, "y": 416, "w": 74, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 19, "w": 74, "h": 65 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0059.png", + "frame": { "x": 536, "y": 414, "w": 74, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 19, "w": 74, "h": 65 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0060.png", + "frame": { "x": 461, "y": 414, "w": 75, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 19, "w": 75, "h": 65 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0061.png", + "frame": { "x": 385, "y": 351, "w": 76, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 19, "w": 76, "h": 65 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0062.png", + "frame": { "x": 231, "y": 291, "w": 78, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 19, "w": 78, "h": 65 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0063.png", + "frame": { "x": 277, "y": 226, "w": 79, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 19, "w": 79, "h": 65 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0064.png", + "frame": { "x": 485, "y": 137, "w": 81, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 18, "w": 81, "h": 66 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0065.png", + "frame": { "x": 228, "y": 143, "w": 81, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 18, "w": 81, "h": 66 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0066.png", + "frame": { "x": 228, "y": 75, "w": 80, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 16, "w": 80, "h": 68 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0067.png", + "frame": { "x": 341, "y": 73, "w": 77, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 14, "w": 77, "h": 70 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0068.png", + "frame": { "x": 373, "y": 157, "w": 73, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 12, "w": 73, "h": 72 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0069.png", + "frame": { "x": 213, "y": 356, "w": 67, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 11, "w": 67, "h": 73 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0070.png", + "frame": { "x": 0, "y": 429, "w": 63, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 9, "w": 63, "h": 75 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0071.png", + "frame": { "x": 76, "y": 297, "w": 64, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 6, "w": 64, "h": 78 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0072.png", + "frame": { "x": 418, "y": 77, "w": 67, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 4, "w": 67, "h": 80 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0073.png", + "frame": { "x": 89, "y": 67, "w": 70, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 70, "h": 80 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0074.png", + "frame": { "x": 0, "y": 68, "w": 72, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 7, "w": 72, "h": 77 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0075.png", + "frame": { "x": 126, "y": 148, "w": 73, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 12, "w": 73, "h": 72 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0076.png", + "frame": { "x": 140, "y": 341, "w": 73, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 16, "w": 73, "h": 68 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0077.png", + "frame": { "x": 280, "y": 361, "w": 73, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 17, "w": 73, "h": 67 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0078.png", + "frame": { "x": 0, "y": 363, "w": 74, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 18, "w": 74, "h": 66 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0079.png", + "frame": { "x": 433, "y": 285, "w": 76, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 18, "w": 76, "h": 66 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0080.png", + "frame": { "x": 509, "y": 269, "w": 77, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 18, "w": 77, "h": 66 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0081.png", + "frame": { "x": 356, "y": 229, "w": 77, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 18, "w": 77, "h": 66 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0082.png", + "frame": { "x": 199, "y": 209, "w": 78, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 18, "w": 78, "h": 66 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0083.png", + "frame": { "x": 509, "y": 203, "w": 78, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 18, "w": 78, "h": 66 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0084.png", + "frame": { "x": 0, "y": 231, "w": 77, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 18, "w": 77, "h": 66 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0085.png", + "frame": { "x": 77, "y": 231, "w": 77, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 18, "w": 77, "h": 66 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0086.png", + "frame": { "x": 0, "y": 297, "w": 76, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 18, "w": 76, "h": 66 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0087.png", + "frame": { "x": 309, "y": 295, "w": 76, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 18, "w": 76, "h": 66 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0088.png", + "frame": { "x": 154, "y": 275, "w": 77, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 18, "w": 77, "h": 66 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0089.png", + "frame": { "x": 491, "y": 71, "w": 83, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 18, "w": 83, "h": 66 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0090.png", + "frame": { "x": 89, "y": 0, "w": 89, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 17, "w": 89, "h": 67 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0091.png", + "frame": { "x": 0, "y": 0, "w": 89, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 16, "w": 89, "h": 68 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0092.png", + "frame": { "x": 178, "y": 0, "w": 87, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 16, "w": 87, "h": 68 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.13-x64", + "image": "730.png", + "format": "I8", + "size": { "w": 610, "h": 504 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/730.png b/public/images/pokemon/exp/730.png index 69244f9dff0..2d274bcf606 100644 Binary files a/public/images/pokemon/exp/730.png and b/public/images/pokemon/exp/730.png differ diff --git a/public/images/pokemon/exp/746-school.json b/public/images/pokemon/exp/746-school.json index 5081ae50573..5c972da9255 100644 --- a/public/images/pokemon/exp/746-school.json +++ b/public/images/pokemon/exp/746-school.json @@ -1,272 +1,191 @@ -{ - "textures": [ - { - "image": "746-school.png", - "format": "RGBA8888", - "size": { - "w": 268, - "h": 268 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 102, - "h": 73 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 95, - "h": 73 - }, - "frame": { - "x": 0, - "y": 0, - "w": 95, - "h": 73 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 102, - "h": 73 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 94, - "h": 73 - }, - "frame": { - "x": 0, - "y": 73, - "w": 94, - "h": 73 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 102, - "h": 73 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 94, - "h": 73 - }, - "frame": { - "x": 0, - "y": 73, - "w": 94, - "h": 73 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 102, - "h": 73 - }, - "spriteSourceSize": { - "x": 5, - "y": 1, - "w": 93, - "h": 71 - }, - "frame": { - "x": 95, - "y": 0, - "w": 93, - "h": 71 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 102, - "h": 73 - }, - "spriteSourceSize": { - "x": 5, - "y": 1, - "w": 93, - "h": 71 - }, - "frame": { - "x": 95, - "y": 0, - "w": 93, - "h": 71 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 102, - "h": 73 - }, - "spriteSourceSize": { - "x": 3, - "y": 3, - "w": 92, - "h": 69 - }, - "frame": { - "x": 0, - "y": 146, - "w": 92, - "h": 69 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 102, - "h": 73 - }, - "spriteSourceSize": { - "x": 3, - "y": 3, - "w": 92, - "h": 69 - }, - "frame": { - "x": 0, - "y": 146, - "w": 92, - "h": 69 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 102, - "h": 73 - }, - "spriteSourceSize": { - "x": 1, - "y": 5, - "w": 91, - "h": 67 - }, - "frame": { - "x": 95, - "y": 71, - "w": 91, - "h": 67 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 102, - "h": 73 - }, - "spriteSourceSize": { - "x": 1, - "y": 5, - "w": 91, - "h": 67 - }, - "frame": { - "x": 95, - "y": 71, - "w": 91, - "h": 67 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 102, - "h": 73 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 91, - "h": 66 - }, - "frame": { - "x": 94, - "y": 138, - "w": 91, - "h": 66 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 102, - "h": 73 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 91, - "h": 66 - }, - "frame": { - "x": 94, - "y": 138, - "w": 91, - "h": 66 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 102, - "h": 73 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 90, - "h": 64 - }, - "frame": { - "x": 92, - "y": 204, - "w": 90, - "h": 64 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:081944ebe67318e4a46f44a408e2f8ad:3d1760eb9efa179defcf703a35dde41b:10f3c9d1f1118f8f9f6e40f37a0eb499$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 408, "y": 257, "w": 96, "h": 83 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 7, "w": 94, "h": 81 }, + "sourceSize": { "w": 104, "h": 89 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 411, "y": 174, "w": 99, "h": 83 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 6, "w": 97, "h": 81 }, + "sourceSize": { "w": 104, "h": 89 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 311, "y": 175, "w": 97, "h": 84 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 6, "w": 95, "h": 82 }, + "sourceSize": { "w": 104, "h": 89 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 411, "y": 89, "w": 101, "h": 85 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 5, "w": 99, "h": 83 }, + "sourceSize": { "w": 104, "h": 89 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 311, "y": 89, "w": 100, "h": 86 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 98, "h": 84 }, + "sourceSize": { "w": 104, "h": 89 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 213, "y": 1, "w": 104, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 102, "h": 86 }, + "sourceSize": { "w": 104, "h": 89 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 317, "y": 1, "w": 104, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 102, "h": 86 }, + "sourceSize": { "w": 104, "h": 89 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 1, "y": 1, "w": 106, "h": 89 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 104, "h": 87 }, + "sourceSize": { "w": 104, "h": 89 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 421, "y": 1, "w": 104, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 102, "h": 86 }, + "sourceSize": { "w": 104, "h": 89 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 107, "y": 1, "w": 106, "h": 88 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 104, "h": 86 }, + "sourceSize": { "w": 104, "h": 89 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 107, "y": 89, "w": 102, "h": 87 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 100, "h": 85 }, + "sourceSize": { "w": 104, "h": 89 }, + "duration": 100 + }, + { + "filename": "0012.png", + "frame": { "x": 209, "y": 89, "w": 102, "h": 87 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 100, "h": 85 }, + "sourceSize": { "w": 104, "h": 89 }, + "duration": 100 + }, + { + "filename": "0013.png", + "frame": { "x": 1, "y": 90, "w": 97, "h": 85 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 95, "h": 83 }, + "sourceSize": { "w": 104, "h": 89 }, + "duration": 100 + }, + { + "filename": "0014.png", + "frame": { "x": 1, "y": 175, "w": 96, "h": 85 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 94, "h": 83 }, + "sourceSize": { "w": 104, "h": 89 }, + "duration": 100 + }, + { + "filename": "0015.png", + "frame": { "x": 289, "y": 259, "w": 92, "h": 85 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 90, "h": 83 }, + "sourceSize": { "w": 104, "h": 89 }, + "duration": 100 + }, + { + "filename": "0016.png", + "frame": { "x": 192, "y": 260, "w": 91, "h": 84 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 5, "w": 89, "h": 82 }, + "sourceSize": { "w": 104, "h": 89 }, + "duration": 100 + }, + { + "filename": "0017.png", + "frame": { "x": 194, "y": 176, "w": 95, "h": 84 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 6, "w": 93, "h": 82 }, + "sourceSize": { "w": 104, "h": 89 }, + "duration": 100 + }, + { + "filename": "0018.png", + "frame": { "x": 1, "y": 260, "w": 93, "h": 83 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 6, "w": 91, "h": 81 }, + "sourceSize": { "w": 104, "h": 89 }, + "duration": 100 + }, + { + "filename": "0019.png", + "frame": { "x": 97, "y": 259, "w": 95, "h": 83 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 6, "w": 93, "h": 81 }, + "sourceSize": { "w": 104, "h": 89 }, + "duration": 100 + }, + { + "filename": "0020.png", + "frame": { "x": 97, "y": 176, "w": 97, "h": 83 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 7, "w": 95, "h": 81 }, + "sourceSize": { "w": 104, "h": 89 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.13-x64", + "image": "746-school.png", + "format": "I8", + "size": { "w": 526, "h": 345 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/746-school.png b/public/images/pokemon/exp/746-school.png index 4732a307f96..3b2b5e42dd5 100644 Binary files a/public/images/pokemon/exp/746-school.png and b/public/images/pokemon/exp/746-school.png differ diff --git a/public/images/pokemon/exp/746.json b/public/images/pokemon/exp/746.json index 43f4f67fc2b..f4967f59669 100644 --- a/public/images/pokemon/exp/746.json +++ b/public/images/pokemon/exp/746.json @@ -1,272 +1,641 @@ -{ - "textures": [ - { - "image": "746.png", - "format": "RGBA8888", - "size": { - "w": 134, - "h": 134 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 46, - "h": 28 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 46, - "h": 28 - }, - "frame": { - "x": 0, - "y": 0, - "w": 46, - "h": 28 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 46, - "h": 28 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 46, - "h": 28 - }, - "frame": { - "x": 0, - "y": 28, - "w": 46, - "h": 28 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 46, - "h": 28 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 46, - "h": 28 - }, - "frame": { - "x": 0, - "y": 56, - "w": 46, - "h": 28 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 46, - "h": 28 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 46, - "h": 28 - }, - "frame": { - "x": 0, - "y": 56, - "w": 46, - "h": 28 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 46, - "h": 28 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 46, - "h": 28 - }, - "frame": { - "x": 0, - "y": 84, - "w": 46, - "h": 28 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 28 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 46, - "h": 27 - }, - "frame": { - "x": 46, - "y": 0, - "w": 46, - "h": 27 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 28 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 46, - "h": 27 - }, - "frame": { - "x": 46, - "y": 0, - "w": 46, - "h": 27 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 28 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 46, - "h": 27 - }, - "frame": { - "x": 46, - "y": 27, - "w": 46, - "h": 27 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 28 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 46, - "h": 27 - }, - "frame": { - "x": 46, - "y": 27, - "w": 46, - "h": 27 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 28 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 46, - "h": 27 - }, - "frame": { - "x": 46, - "y": 54, - "w": 46, - "h": 27 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 28 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 46, - "h": 27 - }, - "frame": { - "x": 46, - "y": 81, - "w": 46, - "h": 27 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 28 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 46, - "h": 26 - }, - "frame": { - "x": 46, - "y": 108, - "w": 46, - "h": 26 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:ed115b8b30c0e1285651afd1dde147d7:57cc34f3531fe7225c220731468a52f3:1a4f7e535d823202c4828f963d5b4404$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 1, "y": 1, "w": 39, "h": 25 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 41, "w": 37, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0002.png", + "frame": { "x": 40, "y": 26, "w": 35, "h": 25 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 41, "w": 33, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0003.png", + "frame": { "x": 1, "y": 1, "w": 39, "h": 25 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 41, "w": 37, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0004.png", + "frame": { "x": 40, "y": 26, "w": 35, "h": 25 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 41, "w": 33, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0005.png", + "frame": { "x": 1, "y": 1, "w": 39, "h": 25 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 41, "w": 37, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0006.png", + "frame": { "x": 40, "y": 26, "w": 35, "h": 25 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 42, "w": 33, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0007.png", + "frame": { "x": 1, "y": 1, "w": 39, "h": 25 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 44, "w": 37, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0008.png", + "frame": { "x": 40, "y": 26, "w": 35, "h": 25 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 46, "w": 33, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0009.png", + "frame": { "x": 1, "y": 1, "w": 39, "h": 25 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 47, "w": 37, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0010.png", + "frame": { "x": 40, "y": 26, "w": 35, "h": 25 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 48, "w": 33, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0011.png", + "frame": { "x": 1, "y": 1, "w": 39, "h": 25 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 48, "w": 37, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0012.png", + "frame": { "x": 40, "y": 26, "w": 35, "h": 25 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 48, "w": 33, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0013.png", + "frame": { "x": 1, "y": 1, "w": 39, "h": 25 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 48, "w": 37, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0014.png", + "frame": { "x": 40, "y": 26, "w": 35, "h": 25 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 48, "w": 33, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0015.png", + "frame": { "x": 1, "y": 1, "w": 39, "h": 25 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 47, "w": 37, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0016.png", + "frame": { "x": 40, "y": 26, "w": 35, "h": 25 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 46, "w": 33, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0017.png", + "frame": { "x": 1, "y": 1, "w": 39, "h": 25 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 44, "w": 37, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0018.png", + "frame": { "x": 40, "y": 26, "w": 35, "h": 25 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 42, "w": 33, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0019.png", + "frame": { "x": 1, "y": 1, "w": 39, "h": 25 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 41, "w": 37, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0020.png", + "frame": { "x": 40, "y": 26, "w": 35, "h": 25 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 41, "w": 33, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0021.png", + "frame": { "x": 1, "y": 1, "w": 39, "h": 25 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 41, "w": 37, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0022.png", + "frame": { "x": 40, "y": 26, "w": 35, "h": 25 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 41, "w": 33, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0023.png", + "frame": { "x": 1, "y": 1, "w": 39, "h": 25 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 41, "w": 37, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0024.png", + "frame": { "x": 40, "y": 26, "w": 35, "h": 25 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 42, "w": 33, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0025.png", + "frame": { "x": 1, "y": 1, "w": 39, "h": 25 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 44, "w": 37, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0026.png", + "frame": { "x": 40, "y": 26, "w": 35, "h": 25 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 46, "w": 33, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0027.png", + "frame": { "x": 1, "y": 1, "w": 39, "h": 25 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 47, "w": 37, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0028.png", + "frame": { "x": 40, "y": 26, "w": 35, "h": 25 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 48, "w": 33, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0029.png", + "frame": { "x": 1, "y": 1, "w": 39, "h": 25 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 48, "w": 37, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0030.png", + "frame": { "x": 40, "y": 26, "w": 35, "h": 25 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 48, "w": 33, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0031.png", + "frame": { "x": 1, "y": 1, "w": 39, "h": 25 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 48, "w": 37, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0032.png", + "frame": { "x": 40, "y": 26, "w": 35, "h": 25 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 48, "w": 33, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0033.png", + "frame": { "x": 1, "y": 1, "w": 39, "h": 25 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 47, "w": 37, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0034.png", + "frame": { "x": 40, "y": 26, "w": 35, "h": 25 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 46, "w": 33, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0035.png", + "frame": { "x": 1, "y": 1, "w": 39, "h": 25 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 44, "w": 37, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0036.png", + "frame": { "x": 40, "y": 26, "w": 35, "h": 25 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 42, "w": 33, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0037.png", + "frame": { "x": 40, "y": 1, "w": 39, "h": 25 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 41, "w": 37, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0038.png", + "frame": { "x": 75, "y": 26, "w": 35, "h": 25 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 41, "w": 33, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0039.png", + "frame": { "x": 79, "y": 1, "w": 39, "h": 25 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 41, "w": 37, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0040.png", + "frame": { "x": 1, "y": 51, "w": 35, "h": 25 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 41, "w": 33, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0041.png", + "frame": { "x": 79, "y": 1, "w": 39, "h": 25 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 41, "w": 37, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0042.png", + "frame": { "x": 1, "y": 51, "w": 35, "h": 25 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 42, "w": 33, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0043.png", + "frame": { "x": 79, "y": 1, "w": 39, "h": 25 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 44, "w": 37, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0044.png", + "frame": { "x": 1, "y": 51, "w": 35, "h": 25 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 46, "w": 33, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0045.png", + "frame": { "x": 79, "y": 1, "w": 39, "h": 25 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 47, "w": 37, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0046.png", + "frame": { "x": 1, "y": 51, "w": 35, "h": 25 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 48, "w": 33, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0047.png", + "frame": { "x": 79, "y": 1, "w": 39, "h": 25 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 48, "w": 37, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0048.png", + "frame": { "x": 1, "y": 51, "w": 35, "h": 25 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 48, "w": 33, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0049.png", + "frame": { "x": 79, "y": 1, "w": 39, "h": 25 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 48, "w": 37, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0050.png", + "frame": { "x": 1, "y": 51, "w": 35, "h": 25 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 48, "w": 33, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0051.png", + "frame": { "x": 79, "y": 1, "w": 39, "h": 25 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 47, "w": 37, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0052.png", + "frame": { "x": 1, "y": 51, "w": 35, "h": 25 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 46, "w": 33, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0053.png", + "frame": { "x": 79, "y": 1, "w": 39, "h": 25 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 44, "w": 37, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0054.png", + "frame": { "x": 1, "y": 51, "w": 35, "h": 25 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 41, "w": 33, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0055.png", + "frame": { "x": 79, "y": 1, "w": 39, "h": 25 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 41, "w": 37, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0056.png", + "frame": { "x": 1, "y": 51, "w": 35, "h": 25 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 41, "w": 33, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0057.png", + "frame": { "x": 79, "y": 1, "w": 39, "h": 25 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 41, "w": 37, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0058.png", + "frame": { "x": 1, "y": 51, "w": 35, "h": 25 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 42, "w": 33, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0059.png", + "frame": { "x": 79, "y": 1, "w": 39, "h": 25 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 44, "w": 37, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0060.png", + "frame": { "x": 1, "y": 51, "w": 35, "h": 25 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 46, "w": 33, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0061.png", + "frame": { "x": 79, "y": 1, "w": 39, "h": 25 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 47, "w": 37, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0062.png", + "frame": { "x": 1, "y": 51, "w": 35, "h": 25 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 48, "w": 33, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0063.png", + "frame": { "x": 79, "y": 1, "w": 39, "h": 25 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 48, "w": 37, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0064.png", + "frame": { "x": 1, "y": 51, "w": 35, "h": 25 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 48, "w": 33, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0065.png", + "frame": { "x": 79, "y": 1, "w": 39, "h": 25 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 48, "w": 37, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0066.png", + "frame": { "x": 1, "y": 51, "w": 35, "h": 25 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 48, "w": 33, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0067.png", + "frame": { "x": 79, "y": 1, "w": 39, "h": 25 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 47, "w": 37, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0068.png", + "frame": { "x": 1, "y": 51, "w": 35, "h": 25 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 46, "w": 33, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0069.png", + "frame": { "x": 1, "y": 26, "w": 39, "h": 25 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 44, "w": 37, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0070.png", + "frame": { "x": 36, "y": 51, "w": 35, "h": 25 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 42, "w": 33, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.13-x64", + "image": "746.png", + "format": "I8", + "size": { "w": 119, "h": 77 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/746.png b/public/images/pokemon/exp/746.png index 564f620edc9..e2be0f27de7 100644 Binary files a/public/images/pokemon/exp/746.png and b/public/images/pokemon/exp/746.png differ diff --git a/public/images/pokemon/exp/749.json b/public/images/pokemon/exp/749.json index 69ac390edc1..da3a5a552a9 100644 --- a/public/images/pokemon/exp/749.json +++ b/public/images/pokemon/exp/749.json @@ -1,272 +1,1028 @@ -{ - "textures": [ - { - "image": "749.png", - "format": "RGBA8888", - "size": { - "w": 170, - "h": 170 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 45, - "h": 58 - }, - "frame": { - "x": 0, - "y": 0, - "w": 45, - "h": 58 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 45, - "h": 58 - }, - "frame": { - "x": 45, - "y": 0, - "w": 45, - "h": 58 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 45, - "h": 58 - }, - "frame": { - "x": 45, - "y": 0, - "w": 45, - "h": 58 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 44, - "h": 58 - }, - "frame": { - "x": 90, - "y": 0, - "w": 44, - "h": 58 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 44, - "h": 58 - }, - "frame": { - "x": 90, - "y": 0, - "w": 44, - "h": 58 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 43, - "h": 58 - }, - "frame": { - "x": 0, - "y": 58, - "w": 43, - "h": 58 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 43, - "h": 58 - }, - "frame": { - "x": 0, - "y": 58, - "w": 43, - "h": 58 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 43, - "h": 58 - }, - "frame": { - "x": 43, - "y": 58, - "w": 43, - "h": 58 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 43, - "h": 58 - }, - "frame": { - "x": 43, - "y": 58, - "w": 43, - "h": 58 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 42, - "h": 58 - }, - "frame": { - "x": 86, - "y": 58, - "w": 42, - "h": 58 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 42, - "h": 58 - }, - "frame": { - "x": 86, - "y": 58, - "w": 42, - "h": 58 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 42, - "h": 58 - }, - "frame": { - "x": 128, - "y": 58, - "w": 42, - "h": 58 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:7f255a5a247eaf707c21fe9318b95606:5043a3dd96e0a55f3564a745c5bf699f:d52e05c524384ef985e6339a08b2f938$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 197, "y": 240, "w": 48, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 15, "w": 46, "h": 56 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 204, "y": 182, "w": 49, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 15, "w": 47, "h": 56 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 195, "y": 124, "w": 51, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 16, "w": 49, "h": 55 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 246, "y": 127, "w": 52, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 18, "w": 50, "h": 53 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 250, "y": 72, "w": 53, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 18, "w": 51, "h": 53 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 49, "y": 72, "w": 53, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 18, "w": 51, "h": 53 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 298, "y": 143, "w": 52, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 18, "w": 50, "h": 53 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 102, "y": 125, "w": 51, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 16, "w": 49, "h": 55 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 1, "y": 187, "w": 49, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 15, "w": 47, "h": 56 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 49, "y": 127, "w": 48, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 13, "w": 46, "h": 58 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 50, "y": 187, "w": 47, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 13, "w": 45, "h": 58 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0012.png", + "frame": { "x": 49, "y": 247, "w": 46, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 13, "w": 44, "h": 58 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0013.png", + "frame": { "x": 145, "y": 349, "w": 46, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 14, "w": 44, "h": 57 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0014.png", + "frame": { "x": 253, "y": 198, "w": 48, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 14, "w": 46, "h": 57 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0015.png", + "frame": { "x": 197, "y": 240, "w": 48, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 15, "w": 46, "h": 56 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0016.png", + "frame": { "x": 204, "y": 182, "w": 49, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 15, "w": 47, "h": 56 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0017.png", + "frame": { "x": 195, "y": 124, "w": 51, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 16, "w": 49, "h": 55 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0018.png", + "frame": { "x": 246, "y": 127, "w": 52, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 18, "w": 50, "h": 53 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0019.png", + "frame": { "x": 250, "y": 72, "w": 53, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 18, "w": 51, "h": 53 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0020.png", + "frame": { "x": 49, "y": 72, "w": 53, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 18, "w": 51, "h": 53 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0021.png", + "frame": { "x": 298, "y": 143, "w": 52, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 18, "w": 50, "h": 53 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0022.png", + "frame": { "x": 102, "y": 125, "w": 51, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 16, "w": 49, "h": 55 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0023.png", + "frame": { "x": 1, "y": 187, "w": 49, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 15, "w": 47, "h": 56 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0024.png", + "frame": { "x": 49, "y": 127, "w": 48, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 13, "w": 46, "h": 58 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0025.png", + "frame": { "x": 50, "y": 187, "w": 47, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 13, "w": 45, "h": 58 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0026.png", + "frame": { "x": 49, "y": 247, "w": 46, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 13, "w": 44, "h": 58 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0027.png", + "frame": { "x": 145, "y": 349, "w": 46, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 14, "w": 44, "h": 57 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0028.png", + "frame": { "x": 253, "y": 198, "w": 48, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 14, "w": 46, "h": 57 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0029.png", + "frame": { "x": 197, "y": 240, "w": 48, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 15, "w": 46, "h": 56 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0030.png", + "frame": { "x": 1, "y": 130, "w": 48, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 17, "w": 46, "h": 54 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0031.png", + "frame": { "x": 146, "y": 294, "w": 50, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 18, "w": 48, "h": 53 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0032.png", + "frame": { "x": 191, "y": 359, "w": 47, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 13, "w": 45, "h": 55 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0033.png", + "frame": { "x": 50, "y": 307, "w": 45, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 9, "w": 43, "h": 58 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0034.png", + "frame": { "x": 1, "y": 363, "w": 43, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 4, "w": 41, "h": 60 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0035.png", + "frame": { "x": 95, "y": 350, "w": 47, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 8, "w": 45, "h": 55 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0036.png", + "frame": { "x": 245, "y": 257, "w": 50, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 12, "w": 48, "h": 53 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0037.png", + "frame": { "x": 301, "y": 255, "w": 50, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 15, "w": 48, "h": 53 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0038.png", + "frame": { "x": 95, "y": 295, "w": 50, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 18, "w": 48, "h": 53 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0039.png", + "frame": { "x": 1, "y": 307, "w": 49, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 17, "w": 47, "h": 54 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0040.png", + "frame": { "x": 97, "y": 238, "w": 49, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 16, "w": 47, "h": 55 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0041.png", + "frame": { "x": 197, "y": 240, "w": 48, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 15, "w": 46, "h": 56 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0042.png", + "frame": { "x": 204, "y": 182, "w": 49, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 15, "w": 47, "h": 56 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0043.png", + "frame": { "x": 195, "y": 124, "w": 51, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 16, "w": 49, "h": 55 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0044.png", + "frame": { "x": 246, "y": 127, "w": 52, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 18, "w": 50, "h": 53 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0045.png", + "frame": { "x": 250, "y": 72, "w": 53, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 18, "w": 51, "h": 53 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0046.png", + "frame": { "x": 49, "y": 72, "w": 53, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 18, "w": 51, "h": 53 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0047.png", + "frame": { "x": 298, "y": 143, "w": 52, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 18, "w": 50, "h": 53 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0048.png", + "frame": { "x": 102, "y": 125, "w": 51, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 16, "w": 49, "h": 55 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0049.png", + "frame": { "x": 1, "y": 187, "w": 49, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 15, "w": 47, "h": 56 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0050.png", + "frame": { "x": 49, "y": 127, "w": 48, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 13, "w": 46, "h": 58 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0051.png", + "frame": { "x": 50, "y": 187, "w": 47, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 13, "w": 45, "h": 58 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0052.png", + "frame": { "x": 49, "y": 247, "w": 46, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 13, "w": 44, "h": 58 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0053.png", + "frame": { "x": 145, "y": 349, "w": 46, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 14, "w": 44, "h": 57 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0054.png", + "frame": { "x": 253, "y": 198, "w": 48, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 14, "w": 46, "h": 57 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0055.png", + "frame": { "x": 197, "y": 240, "w": 48, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 15, "w": 46, "h": 56 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0056.png", + "frame": { "x": 1, "y": 130, "w": 48, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 17, "w": 46, "h": 54 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0057.png", + "frame": { "x": 146, "y": 294, "w": 50, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 18, "w": 48, "h": 53 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0058.png", + "frame": { "x": 191, "y": 359, "w": 47, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 13, "w": 45, "h": 55 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0059.png", + "frame": { "x": 50, "y": 307, "w": 45, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 9, "w": 43, "h": 58 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0060.png", + "frame": { "x": 1, "y": 363, "w": 43, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 4, "w": 41, "h": 60 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0061.png", + "frame": { "x": 95, "y": 350, "w": 47, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 8, "w": 45, "h": 55 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0062.png", + "frame": { "x": 245, "y": 257, "w": 50, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 12, "w": 48, "h": 53 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0063.png", + "frame": { "x": 301, "y": 255, "w": 50, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 15, "w": 48, "h": 53 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0064.png", + "frame": { "x": 95, "y": 295, "w": 50, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 18, "w": 48, "h": 53 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0065.png", + "frame": { "x": 1, "y": 307, "w": 49, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 17, "w": 47, "h": 54 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0066.png", + "frame": { "x": 97, "y": 238, "w": 49, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 16, "w": 47, "h": 55 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0067.png", + "frame": { "x": 197, "y": 240, "w": 48, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 15, "w": 46, "h": 56 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0068.png", + "frame": { "x": 1, "y": 130, "w": 48, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 17, "w": 46, "h": 54 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0069.png", + "frame": { "x": 146, "y": 294, "w": 50, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 18, "w": 48, "h": 53 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0070.png", + "frame": { "x": 191, "y": 359, "w": 47, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 13, "w": 45, "h": 55 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0071.png", + "frame": { "x": 50, "y": 307, "w": 45, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 9, "w": 43, "h": 58 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0072.png", + "frame": { "x": 1, "y": 363, "w": 43, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 4, "w": 41, "h": 60 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0073.png", + "frame": { "x": 95, "y": 350, "w": 47, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 8, "w": 45, "h": 55 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0074.png", + "frame": { "x": 245, "y": 257, "w": 50, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 12, "w": 48, "h": 53 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0075.png", + "frame": { "x": 301, "y": 255, "w": 50, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 15, "w": 48, "h": 53 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0076.png", + "frame": { "x": 95, "y": 295, "w": 50, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 18, "w": 48, "h": 53 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0077.png", + "frame": { "x": 1, "y": 307, "w": 49, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 17, "w": 47, "h": 54 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0078.png", + "frame": { "x": 97, "y": 238, "w": 49, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 16, "w": 47, "h": 55 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0079.png", + "frame": { "x": 197, "y": 240, "w": 48, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 15, "w": 46, "h": 56 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0080.png", + "frame": { "x": 204, "y": 182, "w": 49, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 15, "w": 47, "h": 56 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0081.png", + "frame": { "x": 195, "y": 124, "w": 51, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 16, "w": 49, "h": 55 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0082.png", + "frame": { "x": 246, "y": 127, "w": 52, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 18, "w": 50, "h": 53 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0083.png", + "frame": { "x": 250, "y": 72, "w": 53, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 18, "w": 51, "h": 53 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0084.png", + "frame": { "x": 49, "y": 72, "w": 53, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 18, "w": 51, "h": 53 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0085.png", + "frame": { "x": 298, "y": 143, "w": 52, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 18, "w": 50, "h": 53 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0086.png", + "frame": { "x": 102, "y": 125, "w": 51, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 16, "w": 49, "h": 55 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0087.png", + "frame": { "x": 1, "y": 187, "w": 49, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 15, "w": 47, "h": 56 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0088.png", + "frame": { "x": 49, "y": 127, "w": 48, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 13, "w": 46, "h": 58 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0089.png", + "frame": { "x": 50, "y": 187, "w": 47, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 13, "w": 45, "h": 58 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0090.png", + "frame": { "x": 49, "y": 247, "w": 46, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 13, "w": 44, "h": 58 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0091.png", + "frame": { "x": 145, "y": 349, "w": 46, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 14, "w": 44, "h": 57 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0092.png", + "frame": { "x": 253, "y": 198, "w": 48, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 14, "w": 46, "h": 57 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0093.png", + "frame": { "x": 1, "y": 245, "w": 48, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 15, "w": 46, "h": 56 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0094.png", + "frame": { "x": 301, "y": 198, "w": 49, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 16, "w": 47, "h": 55 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0095.png", + "frame": { "x": 153, "y": 181, "w": 51, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 17, "w": 49, "h": 54 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0096.png", + "frame": { "x": 141, "y": 70, "w": 54, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 18, "w": 52, "h": 53 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0097.png", + "frame": { "x": 195, "y": 70, "w": 55, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 19, "w": 53, "h": 52 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0098.png", + "frame": { "x": 234, "y": 1, "w": 52, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 14, "w": 50, "h": 57 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0099.png", + "frame": { "x": 1, "y": 69, "w": 48, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 10, "w": 46, "h": 59 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0100.png", + "frame": { "x": 141, "y": 1, "w": 48, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 6, "w": 46, "h": 63 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0101.png", + "frame": { "x": 1, "y": 1, "w": 49, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 3, "w": 47, "h": 66 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0102.png", + "frame": { "x": 329, "y": 1, "w": 42, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 0, "w": 40, "h": 69 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0103.png", + "frame": { "x": 96, "y": 1, "w": 45, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 0, "w": 43, "h": 69 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0104.png", + "frame": { "x": 303, "y": 72, "w": 41, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 0, "w": 39, "h": 69 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0105.png", + "frame": { "x": 50, "y": 1, "w": 46, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 0, "w": 44, "h": 69 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0106.png", + "frame": { "x": 286, "y": 1, "w": 43, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 0, "w": 41, "h": 69 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0107.png", + "frame": { "x": 189, "y": 1, "w": 45, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 2, "w": 43, "h": 67 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0108.png", + "frame": { "x": 344, "y": 72, "w": 42, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 6, "w": 40, "h": 63 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0109.png", + "frame": { "x": 196, "y": 298, "w": 45, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 10, "w": 43, "h": 59 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0110.png", + "frame": { "x": 241, "y": 312, "w": 47, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 14, "w": 45, "h": 56 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0111.png", + "frame": { "x": 295, "y": 310, "w": 49, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 17, "w": 47, "h": 54 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0112.png", + "frame": { "x": 97, "y": 182, "w": 51, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 17, "w": 49, "h": 54 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0113.png", + "frame": { "x": 148, "y": 237, "w": 49, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 16, "w": 47, "h": 55 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.13-x64", + "image": "749.png", + "format": "I8", + "size": { "w": 387, "h": 426 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/749.png b/public/images/pokemon/exp/749.png index 3ff9a80592a..8d188b69a55 100644 Binary files a/public/images/pokemon/exp/749.png and b/public/images/pokemon/exp/749.png differ diff --git a/public/images/pokemon/exp/750.json b/public/images/pokemon/exp/750.json index 1acc93e6c42..f8817cf7770 100644 --- a/public/images/pokemon/exp/750.json +++ b/public/images/pokemon/exp/750.json @@ -1,272 +1,929 @@ -{ - "textures": [ - { - "image": "750.png", - "format": "RGBA8888", - "size": { - "w": 230, - "h": 230 - }, - "scale": 1, - "frames": [ - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 78 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 60, - "h": 78 - }, - "frame": { - "x": 0, - "y": 0, - "w": 60, - "h": 78 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 78 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 60, - "h": 78 - }, - "frame": { - "x": 0, - "y": 0, - "w": 60, - "h": 78 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 78 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 57, - "h": 78 - }, - "frame": { - "x": 0, - "y": 78, - "w": 57, - "h": 78 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 78 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 57, - "h": 78 - }, - "frame": { - "x": 0, - "y": 78, - "w": 57, - "h": 78 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 78 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 55, - "h": 78 - }, - "frame": { - "x": 57, - "y": 78, - "w": 55, - "h": 78 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 78 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 65, - "h": 77 - }, - "frame": { - "x": 60, - "y": 0, - "w": 65, - "h": 77 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 78 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 65, - "h": 77 - }, - "frame": { - "x": 60, - "y": 0, - "w": 65, - "h": 77 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 78 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 65, - "h": 77 - }, - "frame": { - "x": 125, - "y": 0, - "w": 65, - "h": 77 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 78 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 64, - "h": 76 - }, - "frame": { - "x": 112, - "y": 77, - "w": 64, - "h": 76 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 78 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 64, - "h": 76 - }, - "frame": { - "x": 112, - "y": 77, - "w": 64, - "h": 76 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 78 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 62, - "h": 77 - }, - "frame": { - "x": 112, - "y": 153, - "w": 62, - "h": 77 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 78 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 62, - "h": 77 - }, - "frame": { - "x": 112, - "y": 153, - "w": 62, - "h": 77 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:bd70c3cd0fb03a598c57d5cb0c94e175:820365fc5d0d7a145bacef3ec0815440:4ad6abb5f7a40182d2391bde900ad082$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 394, "y": 218, "w": 76, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 16, "w": 74, "h": 68 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 231, "y": 163, "w": 78, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 16, "w": 76, "h": 68 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 476, "y": 217, "w": 79, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 17, "w": 77, "h": 67 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 151, "y": 163, "w": 80, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 17, "w": 78, "h": 67 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 394, "y": 150, "w": 82, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 18, "w": 80, "h": 66 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 1, "y": 150, "w": 83, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 18, "w": 81, "h": 66 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 327, "y": 81, "w": 85, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 18, "w": 83, "h": 66 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 1, "y": 83, "w": 86, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 19, "w": 84, "h": 65 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 87, "y": 83, "w": 86, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 19, "w": 84, "h": 65 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 412, "y": 83, "w": 86, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 19, "w": 84, "h": 65 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 498, "y": 83, "w": 85, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 19, "w": 83, "h": 65 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0012.png", + "frame": { "x": 476, "y": 150, "w": 83, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 19, "w": 81, "h": 65 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0013.png", + "frame": { "x": 64, "y": 234, "w": 79, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 19, "w": 77, "h": 65 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0014.png", + "frame": { "x": 202, "y": 311, "w": 77, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 19, "w": 75, "h": 65 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0015.png", + "frame": { "x": 279, "y": 357, "w": 74, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 18, "w": 72, "h": 66 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0016.png", + "frame": { "x": 201, "y": 448, "w": 70, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 17, "w": 68, "h": 67 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0017.png", + "frame": { "x": 1, "y": 448, "w": 70, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 17, "w": 68, "h": 67 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0018.png", + "frame": { "x": 271, "y": 494, "w": 69, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 17, "w": 67, "h": 67 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0019.png", + "frame": { "x": 509, "y": 489, "w": 69, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 17, "w": 67, "h": 67 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0020.png", + "frame": { "x": 345, "y": 435, "w": 70, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 17, "w": 68, "h": 67 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0021.png", + "frame": { "x": 438, "y": 426, "w": 71, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 17, "w": 69, "h": 67 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0022.png", + "frame": { "x": 438, "y": 356, "w": 73, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 16, "w": 71, "h": 68 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0023.png", + "frame": { "x": 64, "y": 301, "w": 75, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 17, "w": 73, "h": 67 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0024.png", + "frame": { "x": 394, "y": 218, "w": 76, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 16, "w": 74, "h": 68 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0025.png", + "frame": { "x": 231, "y": 163, "w": 78, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 16, "w": 76, "h": 68 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0026.png", + "frame": { "x": 476, "y": 217, "w": 79, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 17, "w": 77, "h": 67 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0027.png", + "frame": { "x": 151, "y": 163, "w": 80, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 17, "w": 78, "h": 67 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0028.png", + "frame": { "x": 394, "y": 150, "w": 82, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 18, "w": 80, "h": 66 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0029.png", + "frame": { "x": 1, "y": 150, "w": 83, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 18, "w": 81, "h": 66 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0030.png", + "frame": { "x": 327, "y": 81, "w": 85, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 18, "w": 83, "h": 66 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0031.png", + "frame": { "x": 1, "y": 83, "w": 86, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 19, "w": 84, "h": 65 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0032.png", + "frame": { "x": 87, "y": 83, "w": 86, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 19, "w": 84, "h": 65 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0033.png", + "frame": { "x": 412, "y": 83, "w": 86, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 19, "w": 84, "h": 65 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0034.png", + "frame": { "x": 498, "y": 83, "w": 85, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 19, "w": 83, "h": 65 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0035.png", + "frame": { "x": 476, "y": 150, "w": 83, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 19, "w": 81, "h": 65 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0036.png", + "frame": { "x": 64, "y": 234, "w": 79, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 19, "w": 77, "h": 65 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0037.png", + "frame": { "x": 202, "y": 311, "w": 77, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 19, "w": 75, "h": 65 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0038.png", + "frame": { "x": 279, "y": 357, "w": 74, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 18, "w": 72, "h": 66 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0039.png", + "frame": { "x": 201, "y": 448, "w": 70, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 17, "w": 68, "h": 67 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0040.png", + "frame": { "x": 1, "y": 448, "w": 70, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 17, "w": 68, "h": 67 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0041.png", + "frame": { "x": 271, "y": 494, "w": 69, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 17, "w": 67, "h": 67 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0042.png", + "frame": { "x": 509, "y": 489, "w": 69, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 17, "w": 67, "h": 67 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0043.png", + "frame": { "x": 345, "y": 435, "w": 70, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 17, "w": 68, "h": 67 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0044.png", + "frame": { "x": 438, "y": 426, "w": 71, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 17, "w": 69, "h": 67 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0045.png", + "frame": { "x": 438, "y": 356, "w": 73, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 16, "w": 71, "h": 68 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0046.png", + "frame": { "x": 64, "y": 301, "w": 75, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 17, "w": 73, "h": 67 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0047.png", + "frame": { "x": 394, "y": 218, "w": 76, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 16, "w": 74, "h": 68 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0048.png", + "frame": { "x": 231, "y": 163, "w": 78, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 16, "w": 76, "h": 68 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0049.png", + "frame": { "x": 476, "y": 217, "w": 79, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 17, "w": 77, "h": 67 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0050.png", + "frame": { "x": 151, "y": 163, "w": 80, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 17, "w": 78, "h": 67 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0051.png", + "frame": { "x": 394, "y": 150, "w": 82, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 18, "w": 80, "h": 66 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0052.png", + "frame": { "x": 1, "y": 150, "w": 83, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 18, "w": 81, "h": 66 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0053.png", + "frame": { "x": 327, "y": 81, "w": 85, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 18, "w": 83, "h": 66 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0054.png", + "frame": { "x": 1, "y": 83, "w": 86, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 19, "w": 84, "h": 65 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0055.png", + "frame": { "x": 87, "y": 83, "w": 86, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 19, "w": 84, "h": 65 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0056.png", + "frame": { "x": 412, "y": 83, "w": 86, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 19, "w": 84, "h": 65 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0057.png", + "frame": { "x": 498, "y": 83, "w": 85, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 19, "w": 83, "h": 65 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0058.png", + "frame": { "x": 476, "y": 150, "w": 83, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 19, "w": 81, "h": 65 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0059.png", + "frame": { "x": 64, "y": 234, "w": 79, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 19, "w": 77, "h": 65 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0060.png", + "frame": { "x": 202, "y": 311, "w": 77, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 19, "w": 75, "h": 65 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0061.png", + "frame": { "x": 279, "y": 357, "w": 74, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 18, "w": 72, "h": 66 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0062.png", + "frame": { "x": 201, "y": 448, "w": 70, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 17, "w": 68, "h": 67 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0063.png", + "frame": { "x": 1, "y": 448, "w": 70, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 17, "w": 68, "h": 67 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0064.png", + "frame": { "x": 271, "y": 494, "w": 69, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 17, "w": 67, "h": 67 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0065.png", + "frame": { "x": 509, "y": 489, "w": 69, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 17, "w": 67, "h": 67 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0066.png", + "frame": { "x": 345, "y": 435, "w": 70, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 17, "w": 68, "h": 67 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0067.png", + "frame": { "x": 438, "y": 426, "w": 71, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 17, "w": 69, "h": 67 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0068.png", + "frame": { "x": 438, "y": 356, "w": 73, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 16, "w": 71, "h": 68 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0069.png", + "frame": { "x": 64, "y": 301, "w": 75, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 17, "w": 73, "h": 67 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0070.png", + "frame": { "x": 394, "y": 218, "w": 76, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 16, "w": 74, "h": 68 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0071.png", + "frame": { "x": 309, "y": 220, "w": 76, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 16, "w": 74, "h": 68 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0072.png", + "frame": { "x": 385, "y": 288, "w": 77, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 18, "w": 75, "h": 66 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0073.png", + "frame": { "x": 295, "y": 290, "w": 78, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 20, "w": 76, "h": 65 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0074.png", + "frame": { "x": 1, "y": 384, "w": 78, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 22, "w": 76, "h": 62 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0075.png", + "frame": { "x": 511, "y": 425, "w": 77, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 22, "w": 75, "h": 62 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0076.png", + "frame": { "x": 340, "y": 504, "w": 72, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 20, "w": 70, "h": 64 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0077.png", + "frame": { "x": 1, "y": 517, "w": 64, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 15, "w": 62, "h": 68 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0078.png", + "frame": { "x": 139, "y": 384, "w": 62, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 7, "w": 60, "h": 76 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0079.png", + "frame": { "x": 79, "y": 370, "w": 60, "h": 83 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 2, "w": 58, "h": 81 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0080.png", + "frame": { "x": 1, "y": 218, "w": 63, "h": 85 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 0, "w": 61, "h": 83 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0081.png", + "frame": { "x": 84, "y": 150, "w": 67, "h": 84 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 1, "w": 65, "h": 82 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0082.png", + "frame": { "x": 479, "y": 1, "w": 71, "h": 82 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 3, "w": 69, "h": 80 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0083.png", + "frame": { "x": 406, "y": 1, "w": 73, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 5, "w": 71, "h": 78 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0084.png", + "frame": { "x": 242, "y": 84, "w": 72, "h": 79 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 6, "w": 70, "h": 77 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0085.png", + "frame": { "x": 227, "y": 233, "w": 68, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 15, "y": 7, "w": 66, "h": 76 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0086.png", + "frame": { "x": 373, "y": 356, "w": 65, "h": 79 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 16, "y": 6, "w": 63, "h": 77 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0087.png", + "frame": { "x": 1, "y": 303, "w": 62, "h": 81 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 16, "y": 4, "w": 60, "h": 79 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0088.png", + "frame": { "x": 139, "y": 302, "w": 63, "h": 82 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 3, "w": 61, "h": 80 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0089.png", + "frame": { "x": 173, "y": 80, "w": 69, "h": 83 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 2, "w": 67, "h": 81 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0090.png", + "frame": { "x": 249, "y": 1, "w": 78, "h": 83 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 2, "w": 76, "h": 81 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0091.png", + "frame": { "x": 85, "y": 1, "w": 82, "h": 82 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 3, "w": 80, "h": 80 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0092.png", + "frame": { "x": 1, "y": 1, "w": 84, "h": 82 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 3, "w": 82, "h": 80 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0093.png", + "frame": { "x": 167, "y": 1, "w": 82, "h": 79 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 6, "w": 80, "h": 77 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0094.png", + "frame": { "x": 327, "y": 1, "w": 79, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 10, "w": 77, "h": 73 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0095.png", + "frame": { "x": 314, "y": 149, "w": 80, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 14, "w": 78, "h": 69 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0096.png", + "frame": { "x": 470, "y": 286, "w": 75, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 15, "w": 73, "h": 68 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0097.png", + "frame": { "x": 415, "y": 495, "w": 69, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 17, "w": 67, "h": 67 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0098.png", + "frame": { "x": 71, "y": 462, "w": 70, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 17, "w": 68, "h": 67 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0099.png", + "frame": { "x": 202, "y": 378, "w": 71, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 16, "w": 69, "h": 68 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0100.png", + "frame": { "x": 273, "y": 425, "w": 72, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 17, "w": 70, "h": 67 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0101.png", + "frame": { "x": 511, "y": 356, "w": 74, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 17, "w": 72, "h": 67 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0102.png", + "frame": { "x": 151, "y": 232, "w": 76, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 16, "w": 74, "h": 68 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.13-x64", + "image": "750.png", + "format": "I8", + "size": { "w": 589, "h": 588 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/750.png b/public/images/pokemon/exp/750.png index 9c9d6047887..4f3d6dbaa68 100644 Binary files a/public/images/pokemon/exp/750.png and b/public/images/pokemon/exp/750.png differ diff --git a/public/images/pokemon/exp/780.json b/public/images/pokemon/exp/780.json index f8ad9f3fabf..9aaf27d0d99 100644 --- a/public/images/pokemon/exp/780.json +++ b/public/images/pokemon/exp/780.json @@ -1,272 +1,884 @@ -{ - "textures": [ - { - "image": "780.png", - "format": "RGBA8888", - "size": { - "w": 244, - "h": 244 - }, - "scale": 1, - "frames": [ - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 61 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 93, - "h": 61 - }, - "frame": { - "x": 0, - "y": 0, - "w": 93, - "h": 61 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 61 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 93, - "h": 61 - }, - "frame": { - "x": 0, - "y": 0, - "w": 93, - "h": 61 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 61 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 91, - "h": 61 - }, - "frame": { - "x": 93, - "y": 0, - "w": 91, - "h": 61 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 61 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 91, - "h": 61 - }, - "frame": { - "x": 0, - "y": 61, - "w": 91, - "h": 61 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 61 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 91, - "h": 61 - }, - "frame": { - "x": 0, - "y": 61, - "w": 91, - "h": 61 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 61 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 89, - "h": 61 - }, - "frame": { - "x": 0, - "y": 122, - "w": 89, - "h": 61 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 61 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 89, - "h": 61 - }, - "frame": { - "x": 0, - "y": 122, - "w": 89, - "h": 61 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 61 - }, - "spriteSourceSize": { - "x": 10, - "y": 0, - "w": 86, - "h": 61 - }, - "frame": { - "x": 0, - "y": 183, - "w": 86, - "h": 61 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 61 - }, - "spriteSourceSize": { - "x": 10, - "y": 0, - "w": 86, - "h": 61 - }, - "frame": { - "x": 0, - "y": 183, - "w": 86, - "h": 61 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 61 - }, - "spriteSourceSize": { - "x": 13, - "y": 0, - "w": 83, - "h": 61 - }, - "frame": { - "x": 86, - "y": 183, - "w": 83, - "h": 61 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 61 - }, - "spriteSourceSize": { - "x": 13, - "y": 0, - "w": 83, - "h": 61 - }, - "frame": { - "x": 86, - "y": 183, - "w": 83, - "h": 61 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 61 - }, - "spriteSourceSize": { - "x": 15, - "y": 0, - "w": 81, - "h": 61 - }, - "frame": { - "x": 89, - "y": 122, - "w": 81, - "h": 61 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:fe34fb6d380349d40565cc0028a1e450:fc8d4060739ce529ee2874e9cb8d68ed:9470182902340de73b2565411cb0ab89$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 303, "y": 72, "w": 72, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 72, "h": 70 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 376, "y": 72, "w": 72, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 72, "h": 70 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 449, "y": 72, "w": 72, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 72, "h": 70 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 1, "y": 214, "w": 72, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 72, "h": 69 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 365, "y": 214, "w": 73, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 73, "h": 68 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 292, "y": 284, "w": 72, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 72, "h": 68 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 439, "y": 214, "w": 73, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 73, "h": 68 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 439, "y": 350, "w": 73, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 73, "h": 67 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 223, "y": 353, "w": 74, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 74, "h": 66 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 439, "y": 283, "w": 75, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 75, "h": 66 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 148, "y": 353, "w": 74, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 6, "w": 74, "h": 66 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0012.png", + "frame": { "x": 73, "y": 351, "w": 74, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 74, "h": 66 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0013.png", + "frame": { "x": 145, "y": 214, "w": 75, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 75, "h": 67 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0014.png", + "frame": { "x": 219, "y": 144, "w": 74, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 74, "h": 68 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0015.png", + "frame": { "x": 365, "y": 283, "w": 73, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 73, "h": 68 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0016.png", + "frame": { "x": 74, "y": 282, "w": 73, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 73, "h": 68 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0017.png", + "frame": { "x": 292, "y": 214, "w": 72, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 72, "h": 69 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0018.png", + "frame": { "x": 367, "y": 143, "w": 72, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 72, "h": 70 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0019.png", + "frame": { "x": 303, "y": 72, "w": 72, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 72, "h": 70 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0020.png", + "frame": { "x": 376, "y": 72, "w": 72, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 72, "h": 70 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0021.png", + "frame": { "x": 449, "y": 72, "w": 72, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 72, "h": 70 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0022.png", + "frame": { "x": 1, "y": 214, "w": 72, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 72, "h": 69 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0023.png", + "frame": { "x": 365, "y": 214, "w": 73, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 73, "h": 68 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0024.png", + "frame": { "x": 292, "y": 284, "w": 72, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 72, "h": 68 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0025.png", + "frame": { "x": 439, "y": 214, "w": 73, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 73, "h": 68 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0026.png", + "frame": { "x": 439, "y": 350, "w": 73, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 73, "h": 67 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0027.png", + "frame": { "x": 223, "y": 353, "w": 74, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 74, "h": 66 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0028.png", + "frame": { "x": 439, "y": 283, "w": 75, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 75, "h": 66 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0029.png", + "frame": { "x": 148, "y": 353, "w": 74, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 6, "w": 74, "h": 66 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0030.png", + "frame": { "x": 73, "y": 351, "w": 74, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 74, "h": 66 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0031.png", + "frame": { "x": 145, "y": 214, "w": 75, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 75, "h": 67 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0032.png", + "frame": { "x": 219, "y": 144, "w": 74, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 74, "h": 68 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0033.png", + "frame": { "x": 365, "y": 283, "w": 73, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 73, "h": 68 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0034.png", + "frame": { "x": 74, "y": 282, "w": 73, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 73, "h": 68 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0035.png", + "frame": { "x": 292, "y": 214, "w": 72, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 72, "h": 69 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0036.png", + "frame": { "x": 367, "y": 143, "w": 72, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 72, "h": 70 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0037.png", + "frame": { "x": 303, "y": 72, "w": 72, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 72, "h": 70 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0038.png", + "frame": { "x": 376, "y": 72, "w": 72, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 72, "h": 70 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0039.png", + "frame": { "x": 449, "y": 72, "w": 72, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 72, "h": 70 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0040.png", + "frame": { "x": 1, "y": 214, "w": 72, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 72, "h": 69 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0041.png", + "frame": { "x": 365, "y": 214, "w": 73, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 73, "h": 68 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0042.png", + "frame": { "x": 292, "y": 284, "w": 72, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 72, "h": 68 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0043.png", + "frame": { "x": 439, "y": 214, "w": 73, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 73, "h": 68 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0044.png", + "frame": { "x": 439, "y": 350, "w": 73, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 73, "h": 67 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0045.png", + "frame": { "x": 223, "y": 353, "w": 74, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 74, "h": 66 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0046.png", + "frame": { "x": 439, "y": 283, "w": 75, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 75, "h": 66 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0047.png", + "frame": { "x": 148, "y": 353, "w": 74, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 6, "w": 74, "h": 66 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0048.png", + "frame": { "x": 73, "y": 351, "w": 74, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 74, "h": 66 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0049.png", + "frame": { "x": 145, "y": 214, "w": 75, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 75, "h": 67 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0050.png", + "frame": { "x": 219, "y": 144, "w": 74, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 74, "h": 68 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0051.png", + "frame": { "x": 365, "y": 283, "w": 73, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 73, "h": 68 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0052.png", + "frame": { "x": 74, "y": 282, "w": 73, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 73, "h": 68 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0053.png", + "frame": { "x": 292, "y": 214, "w": 72, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 72, "h": 69 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0054.png", + "frame": { "x": 367, "y": 143, "w": 72, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 72, "h": 70 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0055.png", + "frame": { "x": 303, "y": 72, "w": 72, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 72, "h": 70 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0056.png", + "frame": { "x": 376, "y": 72, "w": 72, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 72, "h": 70 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0057.png", + "frame": { "x": 449, "y": 72, "w": 72, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 72, "h": 70 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0058.png", + "frame": { "x": 1, "y": 214, "w": 72, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 72, "h": 69 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0059.png", + "frame": { "x": 365, "y": 214, "w": 73, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 73, "h": 68 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0060.png", + "frame": { "x": 292, "y": 284, "w": 72, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 72, "h": 68 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0061.png", + "frame": { "x": 439, "y": 214, "w": 73, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 73, "h": 68 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0062.png", + "frame": { "x": 439, "y": 350, "w": 73, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 73, "h": 67 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0063.png", + "frame": { "x": 223, "y": 353, "w": 74, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 74, "h": 66 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0064.png", + "frame": { "x": 439, "y": 283, "w": 75, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 75, "h": 66 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0065.png", + "frame": { "x": 148, "y": 353, "w": 74, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 6, "w": 74, "h": 66 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0066.png", + "frame": { "x": 73, "y": 351, "w": 74, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 74, "h": 66 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0067.png", + "frame": { "x": 145, "y": 214, "w": 75, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 75, "h": 67 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0068.png", + "frame": { "x": 219, "y": 144, "w": 74, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 74, "h": 68 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0069.png", + "frame": { "x": 365, "y": 283, "w": 73, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 73, "h": 68 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0070.png", + "frame": { "x": 74, "y": 282, "w": 73, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 73, "h": 68 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0071.png", + "frame": { "x": 292, "y": 214, "w": 72, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 72, "h": 69 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0072.png", + "frame": { "x": 367, "y": 143, "w": 72, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 72, "h": 70 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0073.png", + "frame": { "x": 440, "y": 143, "w": 72, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 72, "h": 70 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0074.png", + "frame": { "x": 221, "y": 73, "w": 72, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 72, "h": 70 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0075.png", + "frame": { "x": 377, "y": 1, "w": 73, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 73, "h": 70 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0076.png", + "frame": { "x": 303, "y": 1, "w": 73, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 73, "h": 70 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0077.png", + "frame": { "x": 154, "y": 1, "w": 75, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 75, "h": 70 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0078.png", + "frame": { "x": 78, "y": 1, "w": 75, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 75, "h": 70 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0079.png", + "frame": { "x": 1, "y": 1, "w": 76, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 76, "h": 70 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0080.png", + "frame": { "x": 1, "y": 143, "w": 72, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 72, "h": 70 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0081.png", + "frame": { "x": 230, "y": 1, "w": 72, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 72, "h": 71 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0082.png", + "frame": { "x": 221, "y": 213, "w": 70, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 70, "h": 71 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0083.png", + "frame": { "x": 149, "y": 72, "w": 71, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 71, "h": 71 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0084.png", + "frame": { "x": 74, "y": 143, "w": 70, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 70, "h": 72 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0085.png", + "frame": { "x": 149, "y": 72, "w": 71, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 71, "h": 71 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0086.png", + "frame": { "x": 74, "y": 143, "w": 70, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 70, "h": 72 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0087.png", + "frame": { "x": 149, "y": 72, "w": 71, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 71, "h": 71 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0088.png", + "frame": { "x": 74, "y": 143, "w": 70, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 70, "h": 72 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0089.png", + "frame": { "x": 149, "y": 72, "w": 71, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 71, "h": 71 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0090.png", + "frame": { "x": 148, "y": 282, "w": 70, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 70, "h": 70 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0091.png", + "frame": { "x": 365, "y": 352, "w": 71, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 71, "h": 68 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0092.png", + "frame": { "x": 1, "y": 284, "w": 71, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 71, "h": 69 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0093.png", + "frame": { "x": 145, "y": 144, "w": 73, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 3, "w": 73, "h": 69 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0094.png", + "frame": { "x": 75, "y": 72, "w": 73, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 73, "h": 70 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0095.png", + "frame": { "x": 1, "y": 72, "w": 73, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 73, "h": 70 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0096.png", + "frame": { "x": 451, "y": 1, "w": 73, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 73, "h": 70 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0097.png", + "frame": { "x": 294, "y": 143, "w": 72, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 72, "h": 70 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.13-x64", + "image": "780.png", + "format": "I8", + "size": { "w": 525, "h": 421 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/780.png b/public/images/pokemon/exp/780.png index 2c92fe61df1..3453365f154 100644 Binary files a/public/images/pokemon/exp/780.png and b/public/images/pokemon/exp/780.png differ diff --git a/public/images/pokemon/exp/back/2037.json b/public/images/pokemon/exp/back/2037.json index 15e851c69e6..bd9c903fede 100644 --- a/public/images/pokemon/exp/back/2037.json +++ b/public/images/pokemon/exp/back/2037.json @@ -1,188 +1,101 @@ -{ - "textures": [ - { - "image": "2037.png", - "format": "RGBA8888", - "size": { - "w": 150, - "h": 150 - }, - "scale": 1, - "frames": [ - { - "filename": "0004.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 61, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 61, - "h": 50 - }, - "frame": { - "x": 0, - "y": 0, - "w": 61, - "h": 50 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 61, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 61, - "h": 50 - }, - "frame": { - "x": 61, - "y": 0, - "w": 61, - "h": 50 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 61, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 60, - "h": 50 - }, - "frame": { - "x": 0, - "y": 50, - "w": 60, - "h": 50 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 61, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 60, - "h": 50 - }, - "frame": { - "x": 0, - "y": 50, - "w": 60, - "h": 50 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 61, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 59, - "h": 50 - }, - "frame": { - "x": 0, - "y": 100, - "w": 59, - "h": 50 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 61, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 59, - "h": 50 - }, - "frame": { - "x": 59, - "y": 100, - "w": 59, - "h": 50 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 61, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 59, - "h": 50 - }, - "frame": { - "x": 59, - "y": 100, - "w": 59, - "h": 50 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 61, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 61, - "h": 48 - }, - "frame": { - "x": 60, - "y": 50, - "w": 61, - "h": 48 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:b0b51d6624079d060ef8895666c251a5:a4d98b9d3c1f076758f8595cceddc8c2:c679847d1c2ddf91caeaa5ebb76a6664$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 0, "y": 48, "w": 58, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 0, "w": 58, "h": 49 }, + "sourceSize": { "w": 63, "h": 49 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 58, "y": 48, "w": 58, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 1, "w": 58, "h": 48 }, + "sourceSize": { "w": 63, "h": 49 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 116, "y": 48, "w": 58, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 1, "w": 58, "h": 48 }, + "sourceSize": { "w": 63, "h": 49 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 58, "y": 96, "w": 56, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 3, "w": 56, "h": 46 }, + "sourceSize": { "w": 63, "h": 49 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 174, "y": 95, "w": 58, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 58, "h": 46 }, + "sourceSize": { "w": 63, "h": 49 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 174, "y": 49, "w": 60, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 60, "h": 46 }, + "sourceSize": { "w": 63, "h": 49 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 0, "y": 0, "w": 63, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 63, "h": 48 }, + "sourceSize": { "w": 63, "h": 49 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 63, "y": 0, "w": 62, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 62, "h": 48 }, + "sourceSize": { "w": 63, "h": 49 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 125, "y": 0, "w": 61, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 61, "h": 48 }, + "sourceSize": { "w": 63, "h": 49 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 186, "y": 0, "w": 59, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 59, "h": 49 }, + "sourceSize": { "w": 63, "h": 49 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.13-x64", + "image": "2037.png", + "format": "I8", + "size": { "w": 245, "h": 142 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/back/2037.png b/public/images/pokemon/exp/back/2037.png index 7a945877fe1..7c5d688b020 100644 Binary files a/public/images/pokemon/exp/back/2037.png and b/public/images/pokemon/exp/back/2037.png differ diff --git a/public/images/pokemon/exp/back/2038.json b/public/images/pokemon/exp/back/2038.json index 902ed5c4863..af164a77c57 100644 --- a/public/images/pokemon/exp/back/2038.json +++ b/public/images/pokemon/exp/back/2038.json @@ -1,692 +1,155 @@ -{ - "textures": [ - { - "image": "2038.png", - "format": "RGBA8888", - "size": { - "w": 514, - "h": 514 - }, - "scale": 1, - "frames": [ - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 111, - "h": 73 - }, - "spriteSourceSize": { - "x": 10, - "y": 8, - "w": 101, - "h": 63 - }, - "frame": { - "x": 0, - "y": 0, - "w": 101, - "h": 63 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 111, - "h": 73 - }, - "spriteSourceSize": { - "x": 9, - "y": 8, - "w": 102, - "h": 64 - }, - "frame": { - "x": 101, - "y": 0, - "w": 102, - "h": 64 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 111, - "h": 73 - }, - "spriteSourceSize": { - "x": 12, - "y": 7, - "w": 99, - "h": 64 - }, - "frame": { - "x": 203, - "y": 0, - "w": 99, - "h": 64 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 111, - "h": 73 - }, - "spriteSourceSize": { - "x": 12, - "y": 7, - "w": 99, - "h": 64 - }, - "frame": { - "x": 302, - "y": 0, - "w": 99, - "h": 64 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 111, - "h": 73 - }, - "spriteSourceSize": { - "x": 12, - "y": 7, - "w": 98, - "h": 64 - }, - "frame": { - "x": 401, - "y": 0, - "w": 98, - "h": 64 - } - }, - { - "filename": "0017.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 111, - "h": 73 - }, - "spriteSourceSize": { - "x": 12, - "y": 6, - "w": 98, - "h": 65 - }, - "frame": { - "x": 0, - "y": 63, - "w": 98, - "h": 65 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 111, - "h": 73 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 111, - "h": 65 - }, - "frame": { - "x": 98, - "y": 64, - "w": 111, - "h": 65 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 111, - "h": 73 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 111, - "h": 65 - }, - "frame": { - "x": 209, - "y": 64, - "w": 111, - "h": 65 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 111, - "h": 73 - }, - "spriteSourceSize": { - "x": 7, - "y": 8, - "w": 104, - "h": 65 - }, - "frame": { - "x": 320, - "y": 64, - "w": 104, - "h": 65 - } - }, - { - "filename": "0018.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 111, - "h": 73 - }, - "spriteSourceSize": { - "x": 12, - "y": 6, - "w": 97, - "h": 65 - }, - "frame": { - "x": 0, - "y": 128, - "w": 97, - "h": 65 - } - }, - { - "filename": "0019.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 111, - "h": 73 - }, - "spriteSourceSize": { - "x": 12, - "y": 6, - "w": 97, - "h": 65 - }, - "frame": { - "x": 97, - "y": 129, - "w": 97, - "h": 65 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 111, - "h": 73 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 111, - "h": 66 - }, - "frame": { - "x": 194, - "y": 129, - "w": 111, - "h": 66 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 111, - "h": 73 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 111, - "h": 66 - }, - "frame": { - "x": 305, - "y": 129, - "w": 111, - "h": 66 - } - }, - { - "filename": "0020.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 111, - "h": 73 - }, - "spriteSourceSize": { - "x": 11, - "y": 5, - "w": 98, - "h": 66 - }, - "frame": { - "x": 416, - "y": 129, - "w": 98, - "h": 66 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 111, - "h": 73 - }, - "spriteSourceSize": { - "x": 1, - "y": 7, - "w": 110, - "h": 66 - }, - "frame": { - "x": 0, - "y": 194, - "w": 110, - "h": 66 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 111, - "h": 73 - }, - "spriteSourceSize": { - "x": 3, - "y": 7, - "w": 108, - "h": 66 - }, - "frame": { - "x": 110, - "y": 195, - "w": 108, - "h": 66 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 111, - "h": 73 - }, - "spriteSourceSize": { - "x": 5, - "y": 7, - "w": 106, - "h": 66 - }, - "frame": { - "x": 218, - "y": 195, - "w": 106, - "h": 66 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 111, - "h": 73 - }, - "spriteSourceSize": { - "x": 2, - "y": 4, - "w": 109, - "h": 67 - }, - "frame": { - "x": 324, - "y": 195, - "w": 109, - "h": 67 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 111, - "h": 73 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 111, - "h": 67 - }, - "frame": { - "x": 0, - "y": 261, - "w": 111, - "h": 67 - } - }, - { - "filename": "0021.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 111, - "h": 73 - }, - "spriteSourceSize": { - "x": 10, - "y": 3, - "w": 98, - "h": 68 - }, - "frame": { - "x": 111, - "y": 261, - "w": 98, - "h": 68 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 111, - "h": 73 - }, - "spriteSourceSize": { - "x": 3, - "y": 2, - "w": 108, - "h": 69 - }, - "frame": { - "x": 209, - "y": 261, - "w": 108, - "h": 69 - } - }, - { - "filename": "0022.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 111, - "h": 73 - }, - "spriteSourceSize": { - "x": 10, - "y": 2, - "w": 98, - "h": 69 - }, - "frame": { - "x": 317, - "y": 262, - "w": 98, - "h": 69 - } - }, - { - "filename": "0023.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 111, - "h": 73 - }, - "spriteSourceSize": { - "x": 9, - "y": 1, - "w": 98, - "h": 70 - }, - "frame": { - "x": 415, - "y": 262, - "w": 98, - "h": 70 - } - }, - { - "filename": "0031.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 111, - "h": 73 - }, - "spriteSourceSize": { - "x": 4, - "y": 1, - "w": 106, - "h": 70 - }, - "frame": { - "x": 0, - "y": 328, - "w": 106, - "h": 70 - } - }, - { - "filename": "0024.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 111, - "h": 73 - }, - "spriteSourceSize": { - "x": 8, - "y": 0, - "w": 99, - "h": 71 - }, - "frame": { - "x": 106, - "y": 329, - "w": 99, - "h": 71 - } - }, - { - "filename": "0032.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 111, - "h": 73 - }, - "spriteSourceSize": { - "x": 5, - "y": 1, - "w": 106, - "h": 70 - }, - "frame": { - "x": 205, - "y": 330, - "w": 106, - "h": 70 - } - }, - { - "filename": "0025.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 111, - "h": 73 - }, - "spriteSourceSize": { - "x": 8, - "y": 0, - "w": 98, - "h": 71 - }, - "frame": { - "x": 311, - "y": 331, - "w": 98, - "h": 71 - } - }, - { - "filename": "0026.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 111, - "h": 73 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 100, - "h": 71 - }, - "frame": { - "x": 409, - "y": 332, - "w": 100, - "h": 71 - } - }, - { - "filename": "0027.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 111, - "h": 73 - }, - "spriteSourceSize": { - "x": 6, - "y": 0, - "w": 102, - "h": 71 - }, - "frame": { - "x": 0, - "y": 398, - "w": 102, - "h": 71 - } - }, - { - "filename": "0028.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 111, - "h": 73 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 103, - "h": 71 - }, - "frame": { - "x": 102, - "y": 400, - "w": 103, - "h": 71 - } - }, - { - "filename": "0029.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 111, - "h": 73 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 104, - "h": 71 - }, - "frame": { - "x": 205, - "y": 400, - "w": 104, - "h": 71 - } - }, - { - "filename": "0030.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 111, - "h": 73 - }, - "spriteSourceSize": { - "x": 4, - "y": 0, - "w": 106, - "h": 71 - }, - "frame": { - "x": 309, - "y": 403, - "w": 106, - "h": 71 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:612f29cb3148d3054c6515b49bbbd16a:431a4f3395b63c472bcd1086332ea861:51bcdbb4fa6a1a9e90a83c2a4132ee1b$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 232, "y": 198, "w": 74, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 2, "w": 74, "h": 62 }, + "sourceSize": { "w": 82, "h": 69 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 155, "y": 132, "w": 78, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 78, "h": 65 }, + "sourceSize": { "w": 82, "h": 69 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 156, "y": 66, "w": 78, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 78, "h": 66 }, + "sourceSize": { "w": 82, "h": 69 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 78, "y": 134, "w": 77, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 77, "h": 64 }, + "sourceSize": { "w": 82, "h": 69 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 75, "y": 198, "w": 77, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 77, "h": 61 }, + "sourceSize": { "w": 82, "h": 69 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 0, "y": 134, "w": 78, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 78, "h": 64 }, + "sourceSize": { "w": 82, "h": 69 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 234, "y": 67, "w": 78, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 78, "h": 66 }, + "sourceSize": { "w": 82, "h": 69 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 233, "y": 133, "w": 78, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 78, "h": 65 }, + "sourceSize": { "w": 82, "h": 69 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 155, "y": 197, "w": 77, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 77, "h": 63 }, + "sourceSize": { "w": 82, "h": 69 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 156, "y": 0, "w": 79, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 79, "h": 66 }, + "sourceSize": { "w": 82, "h": 69 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 0, "y": 0, "w": 78, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 78, "h": 68 }, + "sourceSize": { "w": 82, "h": 69 }, + "duration": 100 + }, + { + "filename": "0012.png", + "frame": { "x": 235, "y": 0, "w": 77, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 0, "w": 77, "h": 67 }, + "sourceSize": { "w": 82, "h": 69 }, + "duration": 100 + }, + { + "filename": "0013.png", + "frame": { "x": 0, "y": 198, "w": 75, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 75, "h": 64 }, + "sourceSize": { "w": 82, "h": 69 }, + "duration": 100 + }, + { + "filename": "0014.png", + "frame": { "x": 0, "y": 68, "w": 78, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 78, "h": 66 }, + "sourceSize": { "w": 82, "h": 69 }, + "duration": 100 + }, + { + "filename": "0015.png", + "frame": { "x": 78, "y": 0, "w": 78, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 1, "w": 78, "h": 68 }, + "sourceSize": { "w": 82, "h": 69 }, + "duration": 100 + }, + { + "filename": "0016.png", + "frame": { "x": 78, "y": 68, "w": 77, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 1, "w": 77, "h": 66 }, + "sourceSize": { "w": 82, "h": 69 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.13-x64", + "image": "2038.png", + "format": "I8", + "size": { "w": 312, "h": 262 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/back/2038.png b/public/images/pokemon/exp/back/2038.png index 90f487089a9..9ad8025933a 100644 Binary files a/public/images/pokemon/exp/back/2038.png and b/public/images/pokemon/exp/back/2038.png differ diff --git a/public/images/pokemon/exp/back/2074.json b/public/images/pokemon/exp/back/2074.json index 953cc076151..d7500c522e9 100644 --- a/public/images/pokemon/exp/back/2074.json +++ b/public/images/pokemon/exp/back/2074.json @@ -1,230 +1,398 @@ -{ - "textures": [ - { - "image": "2074.png", - "format": "RGBA8888", - "size": { - "w": 108, - "h": 108 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 57, - "h": 43 - }, - "spriteSourceSize": { - "x": 0, - "y": 11, - "w": 57, - "h": 32 - }, - "frame": { - "x": 0, - "y": 0, - "w": 57, - "h": 32 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 57, - "h": 43 - }, - "spriteSourceSize": { - "x": 1, - "y": 9, - "w": 56, - "h": 33 - }, - "frame": { - "x": 0, - "y": 32, - "w": 56, - "h": 33 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 57, - "h": 43 - }, - "spriteSourceSize": { - "x": 1, - "y": 9, - "w": 56, - "h": 33 - }, - "frame": { - "x": 0, - "y": 32, - "w": 56, - "h": 33 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 57, - "h": 43 - }, - "spriteSourceSize": { - "x": 1, - "y": 6, - "w": 54, - "h": 34 - }, - "frame": { - "x": 0, - "y": 65, - "w": 54, - "h": 34 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 57, - "h": 43 - }, - "spriteSourceSize": { - "x": 1, - "y": 6, - "w": 54, - "h": 34 - }, - "frame": { - "x": 0, - "y": 65, - "w": 54, - "h": 34 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 57, - "h": 43 - }, - "spriteSourceSize": { - "x": 2, - "y": 4, - "w": 51, - "h": 34 - }, - "frame": { - "x": 57, - "y": 0, - "w": 51, - "h": 34 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 57, - "h": 43 - }, - "spriteSourceSize": { - "x": 2, - "y": 4, - "w": 51, - "h": 34 - }, - "frame": { - "x": 57, - "y": 0, - "w": 51, - "h": 34 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 57, - "h": 43 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 51, - "h": 35 - }, - "frame": { - "x": 56, - "y": 34, - "w": 51, - "h": 35 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 57, - "h": 43 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 51, - "h": 35 - }, - "frame": { - "x": 56, - "y": 34, - "w": 51, - "h": 35 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 57, - "h": 43 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 51, - "h": 34 - }, - "frame": { - "x": 54, - "y": 69, - "w": 51, - "h": 34 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:fdf01f8cadd6949c73cf35b994ae45ba:5c71945b84f6c35163c62bc518f57fb5:ad137687a877f55f096b7447bfdfe295$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 63, "y": 100, "w": 59, "h": 32 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 2, "w": 59, "h": 32 }, + "sourceSize": { "w": 71, "h": 44 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 195, "y": 99, "w": 61, "h": 32 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 5, "w": 61, "h": 32 }, + "sourceSize": { "w": 71, "h": 44 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 131, "y": 68, "w": 64, "h": 32 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 9, "w": 64, "h": 32 }, + "sourceSize": { "w": 71, "h": 44 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 203, "y": 67, "w": 65, "h": 32 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 12, "w": 65, "h": 32 }, + "sourceSize": { "w": 71, "h": 44 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 1, "y": 35, "w": 66, "h": 32 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 12, "w": 66, "h": 32 }, + "sourceSize": { "w": 71, "h": 44 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 1, "y": 67, "w": 66, "h": 32 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 12, "w": 66, "h": 32 }, + "sourceSize": { "w": 71, "h": 44 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 1, "y": 35, "w": 66, "h": 32 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 10, "w": 66, "h": 32 }, + "sourceSize": { "w": 71, "h": 44 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 203, "y": 67, "w": 65, "h": 32 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 8, "w": 65, "h": 32 }, + "sourceSize": { "w": 71, "h": 44 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 131, "y": 68, "w": 64, "h": 32 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 6, "w": 64, "h": 32 }, + "sourceSize": { "w": 71, "h": 44 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 195, "y": 99, "w": 61, "h": 32 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 4, "w": 61, "h": 32 }, + "sourceSize": { "w": 71, "h": 44 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 63, "y": 100, "w": 59, "h": 32 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 2, "w": 59, "h": 32 }, + "sourceSize": { "w": 71, "h": 44 }, + "duration": 100 + }, + { + "filename": "0012.png", + "frame": { "x": 195, "y": 99, "w": 61, "h": 32 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 5, "w": 61, "h": 32 }, + "sourceSize": { "w": 71, "h": 44 }, + "duration": 100 + }, + { + "filename": "0013.png", + "frame": { "x": 131, "y": 68, "w": 64, "h": 32 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 9, "w": 64, "h": 32 }, + "sourceSize": { "w": 71, "h": 44 }, + "duration": 100 + }, + { + "filename": "0014.png", + "frame": { "x": 203, "y": 67, "w": 65, "h": 32 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 12, "w": 65, "h": 32 }, + "sourceSize": { "w": 71, "h": 44 }, + "duration": 100 + }, + { + "filename": "0015.png", + "frame": { "x": 1, "y": 35, "w": 66, "h": 32 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 12, "w": 66, "h": 32 }, + "sourceSize": { "w": 71, "h": 44 }, + "duration": 100 + }, + { + "filename": "0016.png", + "frame": { "x": 1, "y": 67, "w": 66, "h": 32 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 12, "w": 66, "h": 32 }, + "sourceSize": { "w": 71, "h": 44 }, + "duration": 100 + }, + { + "filename": "0017.png", + "frame": { "x": 1, "y": 35, "w": 66, "h": 32 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 10, "w": 66, "h": 32 }, + "sourceSize": { "w": 71, "h": 44 }, + "duration": 100 + }, + { + "filename": "0018.png", + "frame": { "x": 203, "y": 67, "w": 65, "h": 32 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 8, "w": 65, "h": 32 }, + "sourceSize": { "w": 71, "h": 44 }, + "duration": 100 + }, + { + "filename": "0019.png", + "frame": { "x": 131, "y": 68, "w": 64, "h": 32 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 6, "w": 64, "h": 32 }, + "sourceSize": { "w": 71, "h": 44 }, + "duration": 100 + }, + { + "filename": "0020.png", + "frame": { "x": 195, "y": 99, "w": 61, "h": 32 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 4, "w": 61, "h": 32 }, + "sourceSize": { "w": 71, "h": 44 }, + "duration": 100 + }, + { + "filename": "0021.png", + "frame": { "x": 63, "y": 100, "w": 59, "h": 32 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 2, "w": 59, "h": 32 }, + "sourceSize": { "w": 71, "h": 44 }, + "duration": 100 + }, + { + "filename": "0022.png", + "frame": { "x": 195, "y": 99, "w": 61, "h": 32 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 5, "w": 61, "h": 32 }, + "sourceSize": { "w": 71, "h": 44 }, + "duration": 100 + }, + { + "filename": "0023.png", + "frame": { "x": 131, "y": 68, "w": 64, "h": 32 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 9, "w": 64, "h": 32 }, + "sourceSize": { "w": 71, "h": 44 }, + "duration": 100 + }, + { + "filename": "0024.png", + "frame": { "x": 203, "y": 67, "w": 65, "h": 32 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 12, "w": 65, "h": 32 }, + "sourceSize": { "w": 71, "h": 44 }, + "duration": 100 + }, + { + "filename": "0025.png", + "frame": { "x": 1, "y": 35, "w": 66, "h": 32 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 12, "w": 66, "h": 32 }, + "sourceSize": { "w": 71, "h": 44 }, + "duration": 100 + }, + { + "filename": "0026.png", + "frame": { "x": 1, "y": 67, "w": 66, "h": 32 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 12, "w": 66, "h": 32 }, + "sourceSize": { "w": 71, "h": 44 }, + "duration": 100 + }, + { + "filename": "0027.png", + "frame": { "x": 1, "y": 35, "w": 66, "h": 32 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 10, "w": 66, "h": 32 }, + "sourceSize": { "w": 71, "h": 44 }, + "duration": 100 + }, + { + "filename": "0028.png", + "frame": { "x": 203, "y": 67, "w": 65, "h": 32 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 8, "w": 65, "h": 32 }, + "sourceSize": { "w": 71, "h": 44 }, + "duration": 100 + }, + { + "filename": "0029.png", + "frame": { "x": 131, "y": 68, "w": 64, "h": 32 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 6, "w": 64, "h": 32 }, + "sourceSize": { "w": 71, "h": 44 }, + "duration": 100 + }, + { + "filename": "0030.png", + "frame": { "x": 195, "y": 99, "w": 61, "h": 32 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 4, "w": 61, "h": 32 }, + "sourceSize": { "w": 71, "h": 44 }, + "duration": 100 + }, + { + "filename": "0031.png", + "frame": { "x": 63, "y": 100, "w": 59, "h": 32 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 2, "w": 59, "h": 32 }, + "sourceSize": { "w": 71, "h": 44 }, + "duration": 100 + }, + { + "filename": "0032.png", + "frame": { "x": 268, "y": 68, "w": 62, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 5, "w": 62, "h": 33 }, + "sourceSize": { "w": 71, "h": 44 }, + "duration": 100 + }, + { + "filename": "0033.png", + "frame": { "x": 67, "y": 67, "w": 64, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 8, "w": 64, "h": 33 }, + "sourceSize": { "w": 71, "h": 44 }, + "duration": 100 + }, + { + "filename": "0034.png", + "frame": { "x": 203, "y": 34, "w": 66, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 8, "w": 66, "h": 33 }, + "sourceSize": { "w": 71, "h": 44 }, + "duration": 100 + }, + { + "filename": "0035.png", + "frame": { "x": 275, "y": 1, "w": 67, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 67, "h": 33 }, + "sourceSize": { "w": 71, "h": 44 }, + "duration": 100 + }, + { + "filename": "0036.png", + "frame": { "x": 71, "y": 1, "w": 68, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 68, "h": 33 }, + "sourceSize": { "w": 71, "h": 44 }, + "duration": 100 + }, + { + "filename": "0037.png", + "frame": { "x": 1, "y": 1, "w": 70, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 70, "h": 34 }, + "sourceSize": { "w": 71, "h": 44 }, + "duration": 100 + }, + { + "filename": "0038.png", + "frame": { "x": 139, "y": 1, "w": 68, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 0, "w": 68, "h": 33 }, + "sourceSize": { "w": 71, "h": 44 }, + "duration": 100 + }, + { + "filename": "0039.png", + "frame": { "x": 207, "y": 1, "w": 68, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 68, "h": 33 }, + "sourceSize": { "w": 71, "h": 44 }, + "duration": 100 + }, + { + "filename": "0040.png", + "frame": { "x": 71, "y": 34, "w": 67, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 67, "h": 33 }, + "sourceSize": { "w": 71, "h": 44 }, + "duration": 100 + }, + { + "filename": "0041.png", + "frame": { "x": 138, "y": 34, "w": 65, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 0, "w": 65, "h": 34 }, + "sourceSize": { "w": 71, "h": 44 }, + "duration": 100 + }, + { + "filename": "0042.png", + "frame": { "x": 269, "y": 34, "w": 64, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 0, "w": 64, "h": 34 }, + "sourceSize": { "w": 71, "h": 44 }, + "duration": 100 + }, + { + "filename": "0043.png", + "frame": { "x": 1, "y": 99, "w": 62, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 1, "w": 62, "h": 33 }, + "sourceSize": { "w": 71, "h": 44 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.13-x64", + "image": "2074.png", + "format": "I8", + "size": { "w": 343, "h": 133 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/back/2074.png b/public/images/pokemon/exp/back/2074.png index ebf58bf2f76..e8e2dc5ad22 100644 Binary files a/public/images/pokemon/exp/back/2074.png and b/public/images/pokemon/exp/back/2074.png differ diff --git a/public/images/pokemon/exp/back/2075.json b/public/images/pokemon/exp/back/2075.json index accac7c7dcf..3dd46debe2f 100644 --- a/public/images/pokemon/exp/back/2075.json +++ b/public/images/pokemon/exp/back/2075.json @@ -1,188 +1,812 @@ -{ - "textures": [ - { - "image": "2075.png", - "format": "RGBA8888", - "size": { - "w": 131, - "h": 131 - }, - "scale": 1, - "frames": [ - { - "filename": "0002.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 67, - "h": 44 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 67, - "h": 44 - }, - "frame": { - "x": 0, - "y": 0, - "w": 67, - "h": 44 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 67, - "h": 44 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 67, - "h": 44 - }, - "frame": { - "x": 0, - "y": 0, - "w": 67, - "h": 44 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 44 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 67, - "h": 43 - }, - "frame": { - "x": 0, - "y": 44, - "w": 67, - "h": 43 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 44 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 65, - "h": 44 - }, - "frame": { - "x": 0, - "y": 87, - "w": 65, - "h": 44 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 44 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 65, - "h": 44 - }, - "frame": { - "x": 0, - "y": 87, - "w": 65, - "h": 44 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 44 - }, - "spriteSourceSize": { - "x": 4, - "y": 0, - "w": 63, - "h": 44 - }, - "frame": { - "x": 65, - "y": 87, - "w": 63, - "h": 44 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 44 - }, - "spriteSourceSize": { - "x": 4, - "y": 0, - "w": 63, - "h": 44 - }, - "frame": { - "x": 65, - "y": 87, - "w": 63, - "h": 44 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 44 - }, - "spriteSourceSize": { - "x": 6, - "y": 0, - "w": 61, - "h": 44 - }, - "frame": { - "x": 67, - "y": 0, - "w": 61, - "h": 44 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:0b4413911e6a410c634fb5925e19fb50:d060400f7fc28ab507bb0c4ef37df223:732805cb123f88b2d403da0dec709706$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 147, "y": 1, "w": 71, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 0, "w": 71, "h": 43 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 219, "y": 1, "w": 71, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 0, "w": 71, "h": 43 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 418, "y": 90, "w": 69, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 0, "w": 69, "h": 42 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 213, "y": 215, "w": 67, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 0, "w": 67, "h": 42 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 1, "y": 256, "w": 65, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 0, "w": 65, "h": 42 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 213, "y": 215, "w": 67, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 0, "w": 67, "h": 42 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 418, "y": 90, "w": 69, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 0, "w": 69, "h": 42 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 219, "y": 1, "w": 71, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 0, "w": 71, "h": 43 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 147, "y": 1, "w": 71, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 0, "w": 71, "h": 43 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 435, "y": 1, "w": 71, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 0, "w": 71, "h": 43 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 74, "y": 1, "w": 72, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 0, "w": 72, "h": 43 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0012.png", + "frame": { "x": 1, "y": 1, "w": 72, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 0, "w": 72, "h": 43 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0013.png", + "frame": { "x": 291, "y": 1, "w": 71, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 0, "w": 71, "h": 43 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0014.png", + "frame": { "x": 1, "y": 1, "w": 72, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 0, "w": 72, "h": 43 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0015.png", + "frame": { "x": 74, "y": 1, "w": 72, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 0, "w": 72, "h": 43 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0016.png", + "frame": { "x": 435, "y": 1, "w": 71, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 0, "w": 71, "h": 43 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0017.png", + "frame": { "x": 147, "y": 1, "w": 71, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 0, "w": 71, "h": 43 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0018.png", + "frame": { "x": 219, "y": 1, "w": 71, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 0, "w": 71, "h": 43 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0019.png", + "frame": { "x": 418, "y": 90, "w": 69, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 0, "w": 69, "h": 42 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0020.png", + "frame": { "x": 213, "y": 215, "w": 67, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 0, "w": 67, "h": 42 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0021.png", + "frame": { "x": 1, "y": 256, "w": 65, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 0, "w": 65, "h": 42 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0022.png", + "frame": { "x": 213, "y": 215, "w": 67, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 0, "w": 67, "h": 42 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0023.png", + "frame": { "x": 418, "y": 90, "w": 69, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 0, "w": 69, "h": 42 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0024.png", + "frame": { "x": 219, "y": 1, "w": 71, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 0, "w": 71, "h": 43 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0025.png", + "frame": { "x": 147, "y": 1, "w": 71, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 0, "w": 71, "h": 43 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0026.png", + "frame": { "x": 435, "y": 1, "w": 71, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 0, "w": 71, "h": 43 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0027.png", + "frame": { "x": 74, "y": 1, "w": 72, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 0, "w": 72, "h": 43 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0028.png", + "frame": { "x": 1, "y": 1, "w": 72, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 0, "w": 72, "h": 43 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0029.png", + "frame": { "x": 291, "y": 1, "w": 71, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 0, "w": 71, "h": 43 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0030.png", + "frame": { "x": 1, "y": 1, "w": 72, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 0, "w": 72, "h": 43 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0031.png", + "frame": { "x": 74, "y": 1, "w": 72, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 0, "w": 72, "h": 43 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0032.png", + "frame": { "x": 435, "y": 1, "w": 71, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 0, "w": 71, "h": 43 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0033.png", + "frame": { "x": 147, "y": 1, "w": 71, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 0, "w": 71, "h": 43 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0034.png", + "frame": { "x": 219, "y": 1, "w": 71, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 0, "w": 71, "h": 43 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0035.png", + "frame": { "x": 418, "y": 90, "w": 69, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 0, "w": 69, "h": 42 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0036.png", + "frame": { "x": 213, "y": 215, "w": 67, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 0, "w": 67, "h": 42 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0037.png", + "frame": { "x": 1, "y": 256, "w": 65, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 0, "w": 65, "h": 42 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0038.png", + "frame": { "x": 213, "y": 215, "w": 67, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 0, "w": 67, "h": 42 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0039.png", + "frame": { "x": 418, "y": 90, "w": 69, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 0, "w": 69, "h": 42 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0040.png", + "frame": { "x": 219, "y": 1, "w": 71, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 0, "w": 71, "h": 43 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0041.png", + "frame": { "x": 147, "y": 1, "w": 71, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 0, "w": 71, "h": 43 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0042.png", + "frame": { "x": 435, "y": 1, "w": 71, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 0, "w": 71, "h": 43 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0043.png", + "frame": { "x": 74, "y": 1, "w": 72, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 0, "w": 72, "h": 43 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0044.png", + "frame": { "x": 1, "y": 1, "w": 72, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 0, "w": 72, "h": 43 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0045.png", + "frame": { "x": 291, "y": 1, "w": 71, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 0, "w": 71, "h": 43 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0046.png", + "frame": { "x": 1, "y": 1, "w": 72, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 0, "w": 72, "h": 43 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0047.png", + "frame": { "x": 74, "y": 1, "w": 72, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 0, "w": 72, "h": 43 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0048.png", + "frame": { "x": 435, "y": 1, "w": 71, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 0, "w": 71, "h": 43 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0049.png", + "frame": { "x": 147, "y": 1, "w": 71, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 0, "w": 71, "h": 43 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0050.png", + "frame": { "x": 346, "y": 89, "w": 71, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 1, "w": 71, "h": 41 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0051.png", + "frame": { "x": 425, "y": 133, "w": 71, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 71, "h": 40 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0052.png", + "frame": { "x": 425, "y": 133, "w": 71, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 1, "w": 71, "h": 40 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0053.png", + "frame": { "x": 425, "y": 133, "w": 71, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 71, "h": 40 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0054.png", + "frame": { "x": 289, "y": 175, "w": 71, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 71, "h": 40 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0055.png", + "frame": { "x": 497, "y": 174, "w": 71, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 2, "w": 71, "h": 40 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0056.png", + "frame": { "x": 1, "y": 174, "w": 71, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 2, "w": 71, "h": 40 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0057.png", + "frame": { "x": 497, "y": 133, "w": 71, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 2, "w": 71, "h": 40 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0058.png", + "frame": { "x": 503, "y": 215, "w": 70, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 2, "w": 70, "h": 40 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0059.png", + "frame": { "x": 73, "y": 215, "w": 69, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 2, "w": 69, "h": 41 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0060.png", + "frame": { "x": 486, "y": 46, "w": 68, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 2, "w": 68, "h": 43 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0061.png", + "frame": { "x": 210, "y": 45, "w": 67, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 2, "w": 67, "h": 44 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0062.png", + "frame": { "x": 1, "y": 45, "w": 66, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 15, "y": 1, "w": 66, "h": 46 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0063.png", + "frame": { "x": 278, "y": 45, "w": 67, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 2, "w": 67, "h": 44 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0064.png", + "frame": { "x": 284, "y": 131, "w": 69, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 2, "w": 69, "h": 42 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0065.png", + "frame": { "x": 143, "y": 215, "w": 69, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 2, "w": 69, "h": 41 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0066.png", + "frame": { "x": 281, "y": 216, "w": 70, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 2, "w": 70, "h": 40 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0067.png", + "frame": { "x": 432, "y": 215, "w": 70, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 2, "w": 70, "h": 40 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0068.png", + "frame": { "x": 361, "y": 215, "w": 70, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 2, "w": 70, "h": 40 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0069.png", + "frame": { "x": 73, "y": 174, "w": 71, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 2, "w": 71, "h": 40 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0070.png", + "frame": { "x": 1, "y": 215, "w": 71, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 71, "h": 40 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0071.png", + "frame": { "x": 145, "y": 174, "w": 71, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 71, "h": 40 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0072.png", + "frame": { "x": 71, "y": 132, "w": 70, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 70, "h": 41 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0073.png", + "frame": { "x": 140, "y": 90, "w": 71, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 71, "h": 41 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0074.png", + "frame": { "x": 68, "y": 88, "w": 71, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 71, "h": 41 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0075.png", + "frame": { "x": 346, "y": 45, "w": 70, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 70, "h": 42 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0076.png", + "frame": { "x": 1, "y": 130, "w": 69, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 69, "h": 42 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0077.png", + "frame": { "x": 417, "y": 45, "w": 68, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 68, "h": 43 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0078.png", + "frame": { "x": 507, "y": 1, "w": 69, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 69, "h": 44 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0079.png", + "frame": { "x": 140, "y": 45, "w": 69, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 69, "h": 43 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0080.png", + "frame": { "x": 488, "y": 90, "w": 69, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 69, "h": 42 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0081.png", + "frame": { "x": 142, "y": 132, "w": 70, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 70, "h": 41 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0082.png", + "frame": { "x": 213, "y": 132, "w": 70, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 70, "h": 41 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0083.png", + "frame": { "x": 354, "y": 133, "w": 70, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 70, "h": 41 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0084.png", + "frame": { "x": 217, "y": 174, "w": 71, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 71, "h": 40 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0085.png", + "frame": { "x": 425, "y": 174, "w": 71, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 71, "h": 40 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0086.png", + "frame": { "x": 212, "y": 90, "w": 71, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 71, "h": 41 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0087.png", + "frame": { "x": 346, "y": 89, "w": 71, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 71, "h": 41 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0088.png", + "frame": { "x": 68, "y": 45, "w": 71, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 1, "w": 71, "h": 42 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0089.png", + "frame": { "x": 363, "y": 1, "w": 71, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 0, "w": 71, "h": 43 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.13-x64", + "image": "2075.png", + "format": "I8", + "size": { "w": 577, "h": 299 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/back/2075.png b/public/images/pokemon/exp/back/2075.png index 8d3bea8a7e2..6c11c18bd1d 100644 Binary files a/public/images/pokemon/exp/back/2075.png and b/public/images/pokemon/exp/back/2075.png differ diff --git a/public/images/pokemon/exp/back/2076.json b/public/images/pokemon/exp/back/2076.json index 35dc582bd1f..11a4999b41d 100644 --- a/public/images/pokemon/exp/back/2076.json +++ b/public/images/pokemon/exp/back/2076.json @@ -1,209 +1,965 @@ -{ - "textures": [ - { - "image": "2076.png", - "format": "RGBA8888", - "size": { - "w": 206, - "h": 206 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 55, - "h": 70 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 55, - "h": 67 - }, - "frame": { - "x": 0, - "y": 0, - "w": 55, - "h": 67 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 55, - "h": 70 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 55, - "h": 67 - }, - "frame": { - "x": 55, - "y": 0, - "w": 55, - "h": 67 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 55, - "h": 70 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 55, - "h": 67 - }, - "frame": { - "x": 110, - "y": 0, - "w": 55, - "h": 67 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 55, - "h": 70 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 55, - "h": 67 - }, - "frame": { - "x": 0, - "y": 67, - "w": 55, - "h": 67 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 55, - "h": 70 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 54, - "h": 69 - }, - "frame": { - "x": 55, - "y": 67, - "w": 54, - "h": 69 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 55, - "h": 70 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 55, - "h": 69 - }, - "frame": { - "x": 109, - "y": 67, - "w": 55, - "h": 69 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 55, - "h": 70 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 55, - "h": 69 - }, - "frame": { - "x": 0, - "y": 134, - "w": 55, - "h": 69 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 55, - "h": 70 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 55, - "h": 70 - }, - "frame": { - "x": 55, - "y": 136, - "w": 55, - "h": 70 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 55, - "h": 70 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 55, - "h": 70 - }, - "frame": { - "x": 110, - "y": 136, - "w": 55, - "h": 70 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:43a87c427fa88140ff282cd96661b87b:3134e1dbacb6621feff55273f34d3386:719cdf7324091edbb7b1d6e2d7254a1a$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 1, "y": 322, "w": 53, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 53, "h": 65 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 165, "y": 318, "w": 53, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 53, "h": 65 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 218, "y": 318, "w": 53, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 53, "h": 65 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 271, "y": 254, "w": 54, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 54, "h": 65 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 163, "y": 193, "w": 54, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 54, "h": 65 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 57, "y": 64, "w": 55, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 55, "h": 65 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 56, "y": 129, "w": 55, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 5, "w": 55, "h": 64 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 111, "y": 129, "w": 55, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 55, "h": 64 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 348, "y": 63, "w": 56, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 56, "h": 64 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 1, "y": 64, "w": 56, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 56, "h": 64 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 221, "y": 189, "w": 55, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 55, "h": 64 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0012.png", + "frame": { "x": 166, "y": 129, "w": 55, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 55, "h": 64 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0013.png", + "frame": { "x": 167, "y": 64, "w": 55, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 55, "h": 65 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0014.png", + "frame": { "x": 55, "y": 193, "w": 54, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 54, "h": 65 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0015.png", + "frame": { "x": 324, "y": 321, "w": 53, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 53, "h": 65 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0016.png", + "frame": { "x": 1, "y": 192, "w": 54, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 54, "h": 65 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0017.png", + "frame": { "x": 1, "y": 322, "w": 53, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 53, "h": 65 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0018.png", + "frame": { "x": 165, "y": 318, "w": 53, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 53, "h": 65 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0019.png", + "frame": { "x": 218, "y": 318, "w": 53, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 53, "h": 65 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0020.png", + "frame": { "x": 271, "y": 254, "w": 54, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 54, "h": 65 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0021.png", + "frame": { "x": 163, "y": 193, "w": 54, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 54, "h": 65 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0022.png", + "frame": { "x": 57, "y": 64, "w": 55, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 55, "h": 65 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0023.png", + "frame": { "x": 56, "y": 129, "w": 55, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 5, "w": 55, "h": 64 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0024.png", + "frame": { "x": 111, "y": 129, "w": 55, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 55, "h": 64 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0025.png", + "frame": { "x": 348, "y": 63, "w": 56, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 56, "h": 64 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0026.png", + "frame": { "x": 1, "y": 64, "w": 56, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 56, "h": 64 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0027.png", + "frame": { "x": 221, "y": 189, "w": 55, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 55, "h": 64 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0028.png", + "frame": { "x": 166, "y": 129, "w": 55, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 55, "h": 64 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0029.png", + "frame": { "x": 167, "y": 64, "w": 55, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 55, "h": 65 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0030.png", + "frame": { "x": 55, "y": 193, "w": 54, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 54, "h": 65 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0031.png", + "frame": { "x": 324, "y": 321, "w": 53, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 53, "h": 65 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0032.png", + "frame": { "x": 1, "y": 192, "w": 54, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 54, "h": 65 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0033.png", + "frame": { "x": 1, "y": 322, "w": 53, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 53, "h": 65 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0034.png", + "frame": { "x": 165, "y": 318, "w": 53, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 53, "h": 65 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0035.png", + "frame": { "x": 218, "y": 318, "w": 53, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 53, "h": 65 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0036.png", + "frame": { "x": 271, "y": 254, "w": 54, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 54, "h": 65 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0037.png", + "frame": { "x": 163, "y": 193, "w": 54, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 54, "h": 65 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0038.png", + "frame": { "x": 57, "y": 64, "w": 55, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 55, "h": 65 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0039.png", + "frame": { "x": 56, "y": 129, "w": 55, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 5, "w": 55, "h": 64 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0040.png", + "frame": { "x": 111, "y": 129, "w": 55, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 55, "h": 64 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0041.png", + "frame": { "x": 348, "y": 63, "w": 56, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 56, "h": 64 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0042.png", + "frame": { "x": 1, "y": 64, "w": 56, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 56, "h": 64 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0043.png", + "frame": { "x": 221, "y": 189, "w": 55, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 55, "h": 64 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0044.png", + "frame": { "x": 166, "y": 129, "w": 55, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 55, "h": 64 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0045.png", + "frame": { "x": 167, "y": 64, "w": 55, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 55, "h": 65 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0046.png", + "frame": { "x": 55, "y": 193, "w": 54, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 54, "h": 65 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0047.png", + "frame": { "x": 324, "y": 321, "w": 53, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 53, "h": 65 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0048.png", + "frame": { "x": 1, "y": 192, "w": 54, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 54, "h": 65 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0049.png", + "frame": { "x": 1, "y": 322, "w": 53, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 53, "h": 65 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0050.png", + "frame": { "x": 165, "y": 318, "w": 53, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 53, "h": 65 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0051.png", + "frame": { "x": 218, "y": 318, "w": 53, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 53, "h": 65 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0052.png", + "frame": { "x": 271, "y": 254, "w": 54, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 54, "h": 65 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0053.png", + "frame": { "x": 163, "y": 193, "w": 54, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 54, "h": 65 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0054.png", + "frame": { "x": 57, "y": 64, "w": 55, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 55, "h": 65 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0055.png", + "frame": { "x": 56, "y": 129, "w": 55, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 5, "w": 55, "h": 64 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0056.png", + "frame": { "x": 111, "y": 129, "w": 55, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 55, "h": 64 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0057.png", + "frame": { "x": 348, "y": 63, "w": 56, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 56, "h": 64 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0058.png", + "frame": { "x": 1, "y": 64, "w": 56, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 56, "h": 64 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0059.png", + "frame": { "x": 221, "y": 189, "w": 55, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 55, "h": 64 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0060.png", + "frame": { "x": 166, "y": 129, "w": 55, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 55, "h": 64 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0061.png", + "frame": { "x": 167, "y": 64, "w": 55, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 55, "h": 65 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0062.png", + "frame": { "x": 55, "y": 193, "w": 54, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 54, "h": 65 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0063.png", + "frame": { "x": 324, "y": 321, "w": 53, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 53, "h": 65 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0064.png", + "frame": { "x": 1, "y": 192, "w": 54, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 54, "h": 65 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0065.png", + "frame": { "x": 1, "y": 322, "w": 53, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 53, "h": 65 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0066.png", + "frame": { "x": 109, "y": 193, "w": 54, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 54, "h": 65 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0067.png", + "frame": { "x": 111, "y": 258, "w": 54, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 54, "h": 64 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0068.png", + "frame": { "x": 330, "y": 191, "w": 54, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 54, "h": 65 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0069.png", + "frame": { "x": 108, "y": 322, "w": 53, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 53, "h": 64 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0070.png", + "frame": { "x": 161, "y": 383, "w": 53, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 6, "w": 53, "h": 63 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0071.png", + "frame": { "x": 1, "y": 322, "w": 53, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 53, "h": 65 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0072.png", + "frame": { "x": 55, "y": 320, "w": 53, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 53, "h": 65 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0073.png", + "frame": { "x": 271, "y": 319, "w": 53, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 53, "h": 65 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0074.png", + "frame": { "x": 217, "y": 253, "w": 54, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 54, "h": 65 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0075.png", + "frame": { "x": 276, "y": 189, "w": 54, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 54, "h": 65 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0076.png", + "frame": { "x": 334, "y": 127, "w": 55, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 55, "h": 64 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0077.png", + "frame": { "x": 222, "y": 126, "w": 56, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 56, "h": 63 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0078.png", + "frame": { "x": 175, "y": 1, "w": 58, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 58, "h": 63 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0079.png", + "frame": { "x": 175, "y": 1, "w": 58, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 58, "h": 63 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0080.png", + "frame": { "x": 117, "y": 1, "w": 58, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 58, "h": 63 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0081.png", + "frame": { "x": 117, "y": 1, "w": 58, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 58, "h": 63 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0082.png", + "frame": { "x": 59, "y": 1, "w": 58, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 58, "h": 63 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0083.png", + "frame": { "x": 59, "y": 1, "w": 58, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 58, "h": 63 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0084.png", + "frame": { "x": 1, "y": 1, "w": 58, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 58, "h": 63 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0085.png", + "frame": { "x": 1, "y": 1, "w": 58, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 58, "h": 63 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0086.png", + "frame": { "x": 1, "y": 1, "w": 58, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 58, "h": 63 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0087.png", + "frame": { "x": 233, "y": 1, "w": 58, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 58, "h": 63 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0088.png", + "frame": { "x": 233, "y": 1, "w": 58, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 58, "h": 63 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0089.png", + "frame": { "x": 349, "y": 1, "w": 58, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 7, "w": 58, "h": 62 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0090.png", + "frame": { "x": 233, "y": 1, "w": 58, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 58, "h": 63 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0091.png", + "frame": { "x": 349, "y": 1, "w": 58, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 7, "w": 58, "h": 62 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0092.png", + "frame": { "x": 233, "y": 1, "w": 58, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 58, "h": 63 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0093.png", + "frame": { "x": 349, "y": 1, "w": 58, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 7, "w": 58, "h": 62 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0094.png", + "frame": { "x": 233, "y": 1, "w": 58, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 58, "h": 63 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0095.png", + "frame": { "x": 349, "y": 1, "w": 58, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 7, "w": 58, "h": 62 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0096.png", + "frame": { "x": 233, "y": 1, "w": 58, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 58, "h": 63 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0097.png", + "frame": { "x": 349, "y": 1, "w": 58, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 7, "w": 58, "h": 62 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0098.png", + "frame": { "x": 291, "y": 1, "w": 58, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 7, "w": 58, "h": 62 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0099.png", + "frame": { "x": 222, "y": 64, "w": 57, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 7, "w": 57, "h": 62 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0100.png", + "frame": { "x": 55, "y": 258, "w": 56, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 7, "w": 56, "h": 62 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0101.png", + "frame": { "x": 291, "y": 63, "w": 57, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 6, "w": 57, "h": 63 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0102.png", + "frame": { "x": 278, "y": 126, "w": 56, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 6, "w": 56, "h": 63 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0103.png", + "frame": { "x": 1, "y": 128, "w": 55, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 55, "h": 64 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0104.png", + "frame": { "x": 112, "y": 64, "w": 55, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 55, "h": 65 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0105.png", + "frame": { "x": 325, "y": 256, "w": 54, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 54, "h": 65 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0106.png", + "frame": { "x": 1, "y": 257, "w": 54, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 54, "h": 65 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.13-x64", + "image": "2076.png", + "format": "I8", + "size": { "w": 408, "h": 447 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/back/2076.png b/public/images/pokemon/exp/back/2076.png index 327aed5d485..a3e203ac669 100644 Binary files a/public/images/pokemon/exp/back/2076.png and b/public/images/pokemon/exp/back/2076.png differ diff --git a/public/images/pokemon/exp/back/2088.json b/public/images/pokemon/exp/back/2088.json index 72673c949ba..bc5207262b9 100644 --- a/public/images/pokemon/exp/back/2088.json +++ b/public/images/pokemon/exp/back/2088.json @@ -1,230 +1,173 @@ -{ - "textures": [ - { - "image": "2088.png", - "format": "RGBA8888", - "size": { - "w": 123, - "h": 123 - }, - "scale": 1, - "frames": [ - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 41 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 47, - "h": 41 - }, - "frame": { - "x": 0, - "y": 0, - "w": 47, - "h": 41 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 41 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 47, - "h": 41 - }, - "frame": { - "x": 0, - "y": 0, - "w": 47, - "h": 41 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 41 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 48, - "h": 40 - }, - "frame": { - "x": 0, - "y": 41, - "w": 48, - "h": 40 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 41 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 45, - "h": 41 - }, - "frame": { - "x": 47, - "y": 0, - "w": 45, - "h": 41 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 41 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 45, - "h": 41 - }, - "frame": { - "x": 47, - "y": 0, - "w": 45, - "h": 41 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 41 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 45, - "h": 41 - }, - "frame": { - "x": 48, - "y": 41, - "w": 45, - "h": 41 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 41 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 45, - "h": 41 - }, - "frame": { - "x": 48, - "y": 41, - "w": 45, - "h": 41 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 41 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 45, - "h": 41 - }, - "frame": { - "x": 0, - "y": 81, - "w": 45, - "h": 41 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 41 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 44, - "h": 41 - }, - "frame": { - "x": 45, - "y": 82, - "w": 44, - "h": 41 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 41 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 44, - "h": 41 - }, - "frame": { - "x": 45, - "y": 82, - "w": 44, - "h": 41 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:e484c868865b60e304dbc1fe02c5c476:0f1d94616ba91025b99edb3470c9c467:b8df8f168871505f42fdc6d3c5b106f0$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 49, "y": 111, "w": 48, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 0, "w": 48, "h": 39 }, + "sourceSize": { "w": 58, "h": 39 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 0, "y": 75, "w": 49, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 0, "w": 49, "h": 39 }, + "sourceSize": { "w": 58, "h": 39 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 216, "y": 75, "w": 50, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 1, "w": 50, "h": 38 }, + "sourceSize": { "w": 58, "h": 39 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 54, "y": 73, "w": 52, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 52, "h": 38 }, + "sourceSize": { "w": 58, "h": 39 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 0, "y": 37, "w": 54, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 54, "h": 38 }, + "sourceSize": { "w": 58, "h": 39 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 111, "y": 38, "w": 54, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 54, "h": 37 }, + "sourceSize": { "w": 58, "h": 39 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 169, "y": 0, "w": 56, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 56, "h": 37 }, + "sourceSize": { "w": 58, "h": 39 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 225, "y": 0, "w": 56, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 56, "h": 37 }, + "sourceSize": { "w": 58, "h": 39 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 54, "y": 37, "w": 57, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 57, "h": 36 }, + "sourceSize": { "w": 58, "h": 39 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 0, "y": 0, "w": 57, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 57, "h": 37 }, + "sourceSize": { "w": 58, "h": 39 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 57, "y": 0, "w": 57, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 57, "h": 37 }, + "sourceSize": { "w": 58, "h": 39 }, + "duration": 100 + }, + { + "filename": "0012.png", + "frame": { "x": 169, "y": 37, "w": 55, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 55, "h": 37 }, + "sourceSize": { "w": 58, "h": 39 }, + "duration": 100 + }, + { + "filename": "0013.png", + "frame": { "x": 114, "y": 0, "w": 55, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 55, "h": 38 }, + "sourceSize": { "w": 58, "h": 39 }, + "duration": 100 + }, + { + "filename": "0014.png", + "frame": { "x": 224, "y": 37, "w": 53, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 53, "h": 38 }, + "sourceSize": { "w": 58, "h": 39 }, + "duration": 100 + }, + { + "filename": "0015.png", + "frame": { "x": 165, "y": 74, "w": 51, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 1, "w": 51, "h": 38 }, + "sourceSize": { "w": 58, "h": 39 }, + "duration": 100 + }, + { + "filename": "0016.png", + "frame": { "x": 106, "y": 75, "w": 49, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 0, "w": 49, "h": 39 }, + "sourceSize": { "w": 58, "h": 39 }, + "duration": 100 + }, + { + "filename": "0017.png", + "frame": { "x": 155, "y": 112, "w": 48, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 0, "w": 48, "h": 39 }, + "sourceSize": { "w": 58, "h": 39 }, + "duration": 100 + }, + { + "filename": "0018.png", + "frame": { "x": 203, "y": 113, "w": 48, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 0, "w": 48, "h": 39 }, + "sourceSize": { "w": 58, "h": 39 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.13-x64", + "image": "2088.png", + "format": "I8", + "size": { "w": 281, "h": 152 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/back/2088.png b/public/images/pokemon/exp/back/2088.png index e98936663f3..24bf7f0f893 100644 Binary files a/public/images/pokemon/exp/back/2088.png and b/public/images/pokemon/exp/back/2088.png differ diff --git a/public/images/pokemon/exp/back/2089.json b/public/images/pokemon/exp/back/2089.json index 96334438eeb..c0416f08b26 100644 --- a/public/images/pokemon/exp/back/2089.json +++ b/public/images/pokemon/exp/back/2089.json @@ -1,230 +1,1091 @@ -{ - "textures": [ - { - "image": "2089.png", - "format": "RGBA8888", - "size": { - "w": 178, - "h": 178 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 82, - "h": 63 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 82, - "h": 63 - }, - "frame": { - "x": 0, - "y": 0, - "w": 82, - "h": 63 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 82, - "h": 63 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 82, - "h": 63 - }, - "frame": { - "x": 82, - "y": 0, - "w": 82, - "h": 63 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 82, - "h": 63 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 82, - "h": 63 - }, - "frame": { - "x": 82, - "y": 0, - "w": 82, - "h": 63 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 82, - "h": 63 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 82, - "h": 62 - }, - "frame": { - "x": 0, - "y": 63, - "w": 82, - "h": 62 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 82, - "h": 63 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 82, - "h": 62 - }, - "frame": { - "x": 0, - "y": 63, - "w": 82, - "h": 62 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 82, - "h": 63 - }, - "spriteSourceSize": { - "x": 0, - "y": 10, - "w": 82, - "h": 53 - }, - "frame": { - "x": 0, - "y": 125, - "w": 82, - "h": 53 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 82, - "h": 63 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 82, - "h": 59 - }, - "frame": { - "x": 82, - "y": 63, - "w": 82, - "h": 59 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 82, - "h": 63 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 82, - "h": 59 - }, - "frame": { - "x": 82, - "y": 63, - "w": 82, - "h": 59 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 82, - "h": 63 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 82, - "h": 56 - }, - "frame": { - "x": 82, - "y": 122, - "w": 82, - "h": 56 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 82, - "h": 63 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 82, - "h": 56 - }, - "frame": { - "x": 82, - "y": 122, - "w": 82, - "h": 56 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:0605853b2d9e9b9ce3c2246177880cad:22cda080d52bc16ce02f7cf908ef31b6:49ee9ed0dd32c5ba33977741b45fc3f4$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 1, "y": 1, "w": 81, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 0, "w": 81, "h": 62 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 82, "y": 1, "w": 82, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 1, "w": 82, "h": 61 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 246, "y": 1, "w": 83, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 83, "h": 60 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 246, "y": 61, "w": 84, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 4, "w": 84, "h": 58 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 414, "y": 61, "w": 85, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 5, "w": 85, "h": 57 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 499, "y": 118, "w": 86, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 6, "w": 86, "h": 56 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 259, "y": 119, "w": 87, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 8, "w": 87, "h": 54 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 87, "y": 174, "w": 88, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 9, "w": 88, "h": 53 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 88, "y": 227, "w": 89, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 11, "w": 89, "h": 51 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 266, "y": 228, "w": 90, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 12, "w": 90, "h": 50 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 358, "y": 278, "w": 91, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 13, "w": 91, "h": 49 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0012.png", + "frame": { "x": 1, "y": 328, "w": 92, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 15, "w": 92, "h": 47 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0013.png", + "frame": { "x": 93, "y": 375, "w": 93, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 16, "w": 93, "h": 46 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0014.png", + "frame": { "x": 186, "y": 375, "w": 93, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 16, "w": 93, "h": 46 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0015.png", + "frame": { "x": 542, "y": 375, "w": 92, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 16, "w": 92, "h": 46 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0016.png", + "frame": { "x": 1, "y": 375, "w": 92, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 15, "w": 92, "h": 47 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0017.png", + "frame": { "x": 449, "y": 327, "w": 92, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 14, "w": 92, "h": 48 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0018.png", + "frame": { "x": 449, "y": 278, "w": 91, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 13, "w": 91, "h": 49 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0019.png", + "frame": { "x": 88, "y": 278, "w": 90, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 12, "w": 90, "h": 50 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0020.png", + "frame": { "x": 177, "y": 227, "w": 89, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 11, "w": 89, "h": 51 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0021.png", + "frame": { "x": 346, "y": 175, "w": 87, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 9, "w": 87, "h": 53 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0022.png", + "frame": { "x": 87, "y": 119, "w": 86, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 7, "w": 86, "h": 55 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0023.png", + "frame": { "x": 499, "y": 61, "w": 85, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 5, "w": 85, "h": 57 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0024.png", + "frame": { "x": 412, "y": 1, "w": 83, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 83, "h": 60 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0025.png", + "frame": { "x": 1, "y": 1, "w": 81, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 0, "w": 81, "h": 62 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0026.png", + "frame": { "x": 82, "y": 1, "w": 82, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 1, "w": 82, "h": 61 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0027.png", + "frame": { "x": 246, "y": 1, "w": 83, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 83, "h": 60 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0028.png", + "frame": { "x": 246, "y": 61, "w": 84, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 4, "w": 84, "h": 58 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0029.png", + "frame": { "x": 414, "y": 61, "w": 85, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 5, "w": 85, "h": 57 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0030.png", + "frame": { "x": 499, "y": 118, "w": 86, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 6, "w": 86, "h": 56 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0031.png", + "frame": { "x": 259, "y": 119, "w": 87, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 8, "w": 87, "h": 54 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0032.png", + "frame": { "x": 87, "y": 174, "w": 88, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 9, "w": 88, "h": 53 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0033.png", + "frame": { "x": 88, "y": 227, "w": 89, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 11, "w": 89, "h": 51 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0034.png", + "frame": { "x": 266, "y": 228, "w": 90, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 12, "w": 90, "h": 50 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0035.png", + "frame": { "x": 358, "y": 278, "w": 91, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 13, "w": 91, "h": 49 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0036.png", + "frame": { "x": 1, "y": 328, "w": 92, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 15, "w": 92, "h": 47 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0037.png", + "frame": { "x": 93, "y": 375, "w": 93, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 16, "w": 93, "h": 46 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0038.png", + "frame": { "x": 186, "y": 375, "w": 93, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 16, "w": 93, "h": 46 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0039.png", + "frame": { "x": 542, "y": 375, "w": 92, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 16, "w": 92, "h": 46 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0040.png", + "frame": { "x": 1, "y": 375, "w": 92, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 15, "w": 92, "h": 47 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0041.png", + "frame": { "x": 449, "y": 327, "w": 92, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 14, "w": 92, "h": 48 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0042.png", + "frame": { "x": 449, "y": 278, "w": 91, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 13, "w": 91, "h": 49 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0043.png", + "frame": { "x": 88, "y": 278, "w": 90, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 12, "w": 90, "h": 50 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0044.png", + "frame": { "x": 177, "y": 227, "w": 89, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 11, "w": 89, "h": 51 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0045.png", + "frame": { "x": 346, "y": 175, "w": 87, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 9, "w": 87, "h": 53 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0046.png", + "frame": { "x": 87, "y": 119, "w": 86, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 7, "w": 86, "h": 55 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0047.png", + "frame": { "x": 499, "y": 61, "w": 85, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 5, "w": 85, "h": 57 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0048.png", + "frame": { "x": 412, "y": 1, "w": 83, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 83, "h": 60 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0049.png", + "frame": { "x": 1, "y": 1, "w": 81, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 0, "w": 81, "h": 62 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0050.png", + "frame": { "x": 82, "y": 1, "w": 82, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 1, "w": 82, "h": 61 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0051.png", + "frame": { "x": 246, "y": 1, "w": 83, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 83, "h": 60 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0052.png", + "frame": { "x": 246, "y": 61, "w": 84, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 4, "w": 84, "h": 58 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0053.png", + "frame": { "x": 414, "y": 61, "w": 85, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 5, "w": 85, "h": 57 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0054.png", + "frame": { "x": 499, "y": 118, "w": 86, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 6, "w": 86, "h": 56 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0055.png", + "frame": { "x": 259, "y": 119, "w": 87, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 8, "w": 87, "h": 54 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0056.png", + "frame": { "x": 87, "y": 174, "w": 88, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 9, "w": 88, "h": 53 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0057.png", + "frame": { "x": 88, "y": 227, "w": 89, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 11, "w": 89, "h": 51 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0058.png", + "frame": { "x": 266, "y": 228, "w": 90, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 12, "w": 90, "h": 50 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0059.png", + "frame": { "x": 358, "y": 278, "w": 91, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 13, "w": 91, "h": 49 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0060.png", + "frame": { "x": 1, "y": 328, "w": 92, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 15, "w": 92, "h": 47 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0061.png", + "frame": { "x": 93, "y": 375, "w": 93, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 16, "w": 93, "h": 46 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0062.png", + "frame": { "x": 186, "y": 375, "w": 93, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 16, "w": 93, "h": 46 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0063.png", + "frame": { "x": 542, "y": 375, "w": 92, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 16, "w": 92, "h": 46 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0064.png", + "frame": { "x": 1, "y": 375, "w": 92, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 15, "w": 92, "h": 47 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0065.png", + "frame": { "x": 449, "y": 327, "w": 92, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 14, "w": 92, "h": 48 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0066.png", + "frame": { "x": 449, "y": 278, "w": 91, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 13, "w": 91, "h": 49 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0067.png", + "frame": { "x": 88, "y": 278, "w": 90, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 12, "w": 90, "h": 50 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0068.png", + "frame": { "x": 177, "y": 227, "w": 89, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 11, "w": 89, "h": 51 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0069.png", + "frame": { "x": 346, "y": 175, "w": 87, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 9, "w": 87, "h": 53 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0070.png", + "frame": { "x": 87, "y": 119, "w": 86, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 7, "w": 86, "h": 55 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0071.png", + "frame": { "x": 499, "y": 61, "w": 85, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 5, "w": 85, "h": 57 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0072.png", + "frame": { "x": 412, "y": 1, "w": 83, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 83, "h": 60 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0073.png", + "frame": { "x": 1, "y": 1, "w": 81, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 0, "w": 81, "h": 62 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0074.png", + "frame": { "x": 82, "y": 1, "w": 82, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 1, "w": 82, "h": 61 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0075.png", + "frame": { "x": 246, "y": 1, "w": 83, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 83, "h": 60 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0076.png", + "frame": { "x": 246, "y": 61, "w": 84, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 4, "w": 84, "h": 58 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0077.png", + "frame": { "x": 414, "y": 61, "w": 85, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 5, "w": 85, "h": 57 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0078.png", + "frame": { "x": 499, "y": 118, "w": 86, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 6, "w": 86, "h": 56 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0079.png", + "frame": { "x": 259, "y": 119, "w": 87, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 8, "w": 87, "h": 54 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0080.png", + "frame": { "x": 87, "y": 174, "w": 88, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 9, "w": 88, "h": 53 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0081.png", + "frame": { "x": 88, "y": 227, "w": 89, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 11, "w": 89, "h": 51 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0082.png", + "frame": { "x": 266, "y": 228, "w": 90, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 12, "w": 90, "h": 50 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0083.png", + "frame": { "x": 358, "y": 278, "w": 91, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 13, "w": 91, "h": 49 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0084.png", + "frame": { "x": 1, "y": 328, "w": 92, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 15, "w": 92, "h": 47 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0085.png", + "frame": { "x": 93, "y": 375, "w": 93, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 16, "w": 93, "h": 46 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0086.png", + "frame": { "x": 186, "y": 375, "w": 93, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 16, "w": 93, "h": 46 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0087.png", + "frame": { "x": 542, "y": 375, "w": 92, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 16, "w": 92, "h": 46 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0088.png", + "frame": { "x": 1, "y": 375, "w": 92, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 15, "w": 92, "h": 47 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0089.png", + "frame": { "x": 449, "y": 327, "w": 92, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 14, "w": 92, "h": 48 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0090.png", + "frame": { "x": 449, "y": 278, "w": 91, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 13, "w": 91, "h": 49 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0091.png", + "frame": { "x": 88, "y": 278, "w": 90, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 12, "w": 90, "h": 50 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0092.png", + "frame": { "x": 177, "y": 227, "w": 89, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 11, "w": 89, "h": 51 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0093.png", + "frame": { "x": 346, "y": 175, "w": 87, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 9, "w": 87, "h": 53 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0094.png", + "frame": { "x": 87, "y": 119, "w": 86, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 7, "w": 86, "h": 55 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0095.png", + "frame": { "x": 499, "y": 61, "w": 85, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 5, "w": 85, "h": 57 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0096.png", + "frame": { "x": 412, "y": 1, "w": 83, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 83, "h": 60 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0097.png", + "frame": { "x": 1, "y": 1, "w": 81, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 0, "w": 81, "h": 62 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0098.png", + "frame": { "x": 164, "y": 1, "w": 82, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 1, "w": 82, "h": 61 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0099.png", + "frame": { "x": 495, "y": 1, "w": 83, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 83, "h": 60 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0100.png", + "frame": { "x": 330, "y": 61, "w": 84, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 4, "w": 84, "h": 58 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0101.png", + "frame": { "x": 414, "y": 118, "w": 85, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 5, "w": 85, "h": 57 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0102.png", + "frame": { "x": 1, "y": 119, "w": 86, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 6, "w": 86, "h": 56 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0103.png", + "frame": { "x": 259, "y": 173, "w": 87, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 8, "w": 87, "h": 54 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0104.png", + "frame": { "x": 499, "y": 174, "w": 88, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 9, "w": 88, "h": 53 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0105.png", + "frame": { "x": 433, "y": 227, "w": 89, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 11, "w": 89, "h": 51 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0106.png", + "frame": { "x": 178, "y": 278, "w": 90, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 12, "w": 90, "h": 50 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0107.png", + "frame": { "x": 540, "y": 278, "w": 91, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 13, "w": 91, "h": 49 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0108.png", + "frame": { "x": 93, "y": 328, "w": 92, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 15, "w": 92, "h": 47 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0109.png", + "frame": { "x": 93, "y": 375, "w": 93, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 16, "w": 93, "h": 46 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0110.png", + "frame": { "x": 449, "y": 375, "w": 93, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 16, "w": 93, "h": 46 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0111.png", + "frame": { "x": 279, "y": 376, "w": 92, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 16, "w": 92, "h": 46 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0112.png", + "frame": { "x": 185, "y": 328, "w": 92, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 15, "w": 92, "h": 47 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0113.png", + "frame": { "x": 541, "y": 327, "w": 92, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 14, "w": 92, "h": 48 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0114.png", + "frame": { "x": 358, "y": 327, "w": 91, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 13, "w": 91, "h": 49 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0115.png", + "frame": { "x": 268, "y": 278, "w": 90, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 12, "w": 90, "h": 50 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0116.png", + "frame": { "x": 522, "y": 227, "w": 89, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 11, "w": 89, "h": 51 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0117.png", + "frame": { "x": 1, "y": 227, "w": 87, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 9, "w": 87, "h": 53 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0118.png", + "frame": { "x": 173, "y": 119, "w": 86, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 7, "w": 86, "h": 55 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0119.png", + "frame": { "x": 82, "y": 62, "w": 85, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 5, "w": 85, "h": 57 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0120.png", + "frame": { "x": 329, "y": 1, "w": 83, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 83, "h": 60 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.13-x64", + "image": "2089.png", + "format": "I8", + "size": { "w": 635, "h": 423 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/back/2089.png b/public/images/pokemon/exp/back/2089.png index 2fbf7d8b1f4..244aeeed5a9 100644 Binary files a/public/images/pokemon/exp/back/2089.png and b/public/images/pokemon/exp/back/2089.png differ diff --git a/public/images/pokemon/exp/back/728.json b/public/images/pokemon/exp/back/728.json index 5f57c1fcd44..58c482252ec 100644 --- a/public/images/pokemon/exp/back/728.json +++ b/public/images/pokemon/exp/back/728.json @@ -1,230 +1,776 @@ -{ - "textures": [ - { - "image": "728.png", - "format": "RGBA8888", - "size": { - "w": 117, - "h": 117 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 41, - "h": 39 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 41, - "h": 39 - }, - "frame": { - "x": 0, - "y": 0, - "w": 41, - "h": 39 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 41, - "h": 39 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 41, - "h": 39 - }, - "frame": { - "x": 0, - "y": 39, - "w": 41, - "h": 39 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 41, - "h": 39 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 41, - "h": 39 - }, - "frame": { - "x": 0, - "y": 39, - "w": 41, - "h": 39 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 41, - "h": 39 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 41, - "h": 39 - }, - "frame": { - "x": 0, - "y": 78, - "w": 41, - "h": 39 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 41, - "h": 39 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 41, - "h": 39 - }, - "frame": { - "x": 0, - "y": 78, - "w": 41, - "h": 39 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 41, - "h": 39 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 41, - "h": 39 - }, - "frame": { - "x": 41, - "y": 0, - "w": 41, - "h": 39 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 41, - "h": 39 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 41, - "h": 39 - }, - "frame": { - "x": 41, - "y": 0, - "w": 41, - "h": 39 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 41, - "h": 39 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 41, - "h": 39 - }, - "frame": { - "x": 41, - "y": 39, - "w": 41, - "h": 39 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 41, - "h": 39 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 41, - "h": 39 - }, - "frame": { - "x": 41, - "y": 39, - "w": 41, - "h": 39 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 41, - "h": 39 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 41, - "h": 39 - }, - "frame": { - "x": 41, - "y": 78, - "w": 41, - "h": 39 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:0c090e4088db927644a68af712498874:155a43cf4b3a603228f72b6aea7f5fa8:74218c18c9d392741666ee5c0c28d306$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 130, "y": 151, "w": 40, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 20, "w": 40, "h": 39 }, + "sourceSize": { "w": 43, "h": 59 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 85, "y": 152, "w": 40, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 20, "w": 40, "h": 39 }, + "sourceSize": { "w": 43, "h": 59 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 43, "y": 194, "w": 40, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 21, "w": 40, "h": 37 }, + "sourceSize": { "w": 43, "h": 59 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 169, "y": 194, "w": 39, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 21, "w": 39, "h": 37 }, + "sourceSize": { "w": 43, "h": 59 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 166, "y": 233, "w": 39, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 22, "w": 39, "h": 36 }, + "sourceSize": { "w": 43, "h": 59 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 1, "y": 234, "w": 39, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 22, "w": 39, "h": 36 }, + "sourceSize": { "w": 43, "h": 59 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 43, "y": 233, "w": 39, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 21, "w": 39, "h": 37 }, + "sourceSize": { "w": 43, "h": 59 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 84, "y": 233, "w": 39, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 21, "w": 39, "h": 37 }, + "sourceSize": { "w": 43, "h": 59 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 125, "y": 233, "w": 39, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 21, "w": 39, "h": 37 }, + "sourceSize": { "w": 43, "h": 59 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 85, "y": 193, "w": 40, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 20, "w": 40, "h": 38 }, + "sourceSize": { "w": 43, "h": 59 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 43, "y": 153, "w": 40, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 20, "w": 40, "h": 39 }, + "sourceSize": { "w": 43, "h": 59 }, + "duration": 100 + }, + { + "filename": "0012.png", + "frame": { "x": 127, "y": 192, "w": 40, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 20, "w": 40, "h": 39 }, + "sourceSize": { "w": 43, "h": 59 }, + "duration": 100 + }, + { + "filename": "0013.png", + "frame": { "x": 130, "y": 151, "w": 40, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 20, "w": 40, "h": 39 }, + "sourceSize": { "w": 43, "h": 59 }, + "duration": 100 + }, + { + "filename": "0014.png", + "frame": { "x": 85, "y": 152, "w": 40, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 20, "w": 40, "h": 39 }, + "sourceSize": { "w": 43, "h": 59 }, + "duration": 100 + }, + { + "filename": "0015.png", + "frame": { "x": 43, "y": 194, "w": 40, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 21, "w": 40, "h": 37 }, + "sourceSize": { "w": 43, "h": 59 }, + "duration": 100 + }, + { + "filename": "0016.png", + "frame": { "x": 169, "y": 194, "w": 39, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 21, "w": 39, "h": 37 }, + "sourceSize": { "w": 43, "h": 59 }, + "duration": 100 + }, + { + "filename": "0017.png", + "frame": { "x": 166, "y": 233, "w": 39, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 22, "w": 39, "h": 36 }, + "sourceSize": { "w": 43, "h": 59 }, + "duration": 100 + }, + { + "filename": "0018.png", + "frame": { "x": 1, "y": 234, "w": 39, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 22, "w": 39, "h": 36 }, + "sourceSize": { "w": 43, "h": 59 }, + "duration": 100 + }, + { + "filename": "0019.png", + "frame": { "x": 43, "y": 233, "w": 39, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 21, "w": 39, "h": 37 }, + "sourceSize": { "w": 43, "h": 59 }, + "duration": 100 + }, + { + "filename": "0020.png", + "frame": { "x": 84, "y": 233, "w": 39, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 21, "w": 39, "h": 37 }, + "sourceSize": { "w": 43, "h": 59 }, + "duration": 100 + }, + { + "filename": "0021.png", + "frame": { "x": 125, "y": 233, "w": 39, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 21, "w": 39, "h": 37 }, + "sourceSize": { "w": 43, "h": 59 }, + "duration": 100 + }, + { + "filename": "0022.png", + "frame": { "x": 85, "y": 193, "w": 40, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 20, "w": 40, "h": 38 }, + "sourceSize": { "w": 43, "h": 59 }, + "duration": 100 + }, + { + "filename": "0023.png", + "frame": { "x": 43, "y": 153, "w": 40, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 20, "w": 40, "h": 39 }, + "sourceSize": { "w": 43, "h": 59 }, + "duration": 100 + }, + { + "filename": "0024.png", + "frame": { "x": 127, "y": 192, "w": 40, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 20, "w": 40, "h": 39 }, + "sourceSize": { "w": 43, "h": 59 }, + "duration": 100 + }, + { + "filename": "0025.png", + "frame": { "x": 130, "y": 151, "w": 40, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 20, "w": 40, "h": 39 }, + "sourceSize": { "w": 43, "h": 59 }, + "duration": 100 + }, + { + "filename": "0026.png", + "frame": { "x": 85, "y": 152, "w": 40, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 20, "w": 40, "h": 39 }, + "sourceSize": { "w": 43, "h": 59 }, + "duration": 100 + }, + { + "filename": "0027.png", + "frame": { "x": 43, "y": 194, "w": 40, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 21, "w": 40, "h": 37 }, + "sourceSize": { "w": 43, "h": 59 }, + "duration": 100 + }, + { + "filename": "0028.png", + "frame": { "x": 169, "y": 194, "w": 39, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 21, "w": 39, "h": 37 }, + "sourceSize": { "w": 43, "h": 59 }, + "duration": 100 + }, + { + "filename": "0029.png", + "frame": { "x": 166, "y": 233, "w": 39, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 22, "w": 39, "h": 36 }, + "sourceSize": { "w": 43, "h": 59 }, + "duration": 100 + }, + { + "filename": "0030.png", + "frame": { "x": 1, "y": 234, "w": 39, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 22, "w": 39, "h": 36 }, + "sourceSize": { "w": 43, "h": 59 }, + "duration": 100 + }, + { + "filename": "0031.png", + "frame": { "x": 43, "y": 233, "w": 39, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 21, "w": 39, "h": 37 }, + "sourceSize": { "w": 43, "h": 59 }, + "duration": 100 + }, + { + "filename": "0032.png", + "frame": { "x": 84, "y": 233, "w": 39, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 21, "w": 39, "h": 37 }, + "sourceSize": { "w": 43, "h": 59 }, + "duration": 100 + }, + { + "filename": "0033.png", + "frame": { "x": 125, "y": 233, "w": 39, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 21, "w": 39, "h": 37 }, + "sourceSize": { "w": 43, "h": 59 }, + "duration": 100 + }, + { + "filename": "0034.png", + "frame": { "x": 85, "y": 193, "w": 40, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 20, "w": 40, "h": 38 }, + "sourceSize": { "w": 43, "h": 59 }, + "duration": 100 + }, + { + "filename": "0035.png", + "frame": { "x": 43, "y": 153, "w": 40, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 20, "w": 40, "h": 39 }, + "sourceSize": { "w": 43, "h": 59 }, + "duration": 100 + }, + { + "filename": "0036.png", + "frame": { "x": 127, "y": 192, "w": 40, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 20, "w": 40, "h": 39 }, + "sourceSize": { "w": 43, "h": 59 }, + "duration": 100 + }, + { + "filename": "0037.png", + "frame": { "x": 130, "y": 151, "w": 40, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 20, "w": 40, "h": 39 }, + "sourceSize": { "w": 43, "h": 59 }, + "duration": 100 + }, + { + "filename": "0038.png", + "frame": { "x": 85, "y": 152, "w": 40, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 20, "w": 40, "h": 39 }, + "sourceSize": { "w": 43, "h": 59 }, + "duration": 100 + }, + { + "filename": "0039.png", + "frame": { "x": 43, "y": 194, "w": 40, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 21, "w": 40, "h": 37 }, + "sourceSize": { "w": 43, "h": 59 }, + "duration": 100 + }, + { + "filename": "0040.png", + "frame": { "x": 169, "y": 194, "w": 39, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 21, "w": 39, "h": 37 }, + "sourceSize": { "w": 43, "h": 59 }, + "duration": 100 + }, + { + "filename": "0041.png", + "frame": { "x": 166, "y": 233, "w": 39, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 22, "w": 39, "h": 36 }, + "sourceSize": { "w": 43, "h": 59 }, + "duration": 100 + }, + { + "filename": "0042.png", + "frame": { "x": 1, "y": 234, "w": 39, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 22, "w": 39, "h": 36 }, + "sourceSize": { "w": 43, "h": 59 }, + "duration": 100 + }, + { + "filename": "0043.png", + "frame": { "x": 43, "y": 233, "w": 39, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 21, "w": 39, "h": 37 }, + "sourceSize": { "w": 43, "h": 59 }, + "duration": 100 + }, + { + "filename": "0044.png", + "frame": { "x": 84, "y": 233, "w": 39, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 21, "w": 39, "h": 37 }, + "sourceSize": { "w": 43, "h": 59 }, + "duration": 100 + }, + { + "filename": "0045.png", + "frame": { "x": 125, "y": 233, "w": 39, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 21, "w": 39, "h": 37 }, + "sourceSize": { "w": 43, "h": 59 }, + "duration": 100 + }, + { + "filename": "0046.png", + "frame": { "x": 85, "y": 193, "w": 40, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 20, "w": 40, "h": 38 }, + "sourceSize": { "w": 43, "h": 59 }, + "duration": 100 + }, + { + "filename": "0047.png", + "frame": { "x": 43, "y": 153, "w": 40, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 20, "w": 40, "h": 39 }, + "sourceSize": { "w": 43, "h": 59 }, + "duration": 100 + }, + { + "filename": "0048.png", + "frame": { "x": 127, "y": 192, "w": 40, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 20, "w": 40, "h": 39 }, + "sourceSize": { "w": 43, "h": 59 }, + "duration": 100 + }, + { + "filename": "0049.png", + "frame": { "x": 130, "y": 151, "w": 40, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 20, "w": 40, "h": 39 }, + "sourceSize": { "w": 43, "h": 59 }, + "duration": 100 + }, + { + "filename": "0050.png", + "frame": { "x": 85, "y": 152, "w": 40, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 20, "w": 40, "h": 39 }, + "sourceSize": { "w": 43, "h": 59 }, + "duration": 100 + }, + { + "filename": "0051.png", + "frame": { "x": 43, "y": 194, "w": 40, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 21, "w": 40, "h": 37 }, + "sourceSize": { "w": 43, "h": 59 }, + "duration": 100 + }, + { + "filename": "0052.png", + "frame": { "x": 169, "y": 194, "w": 39, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 21, "w": 39, "h": 37 }, + "sourceSize": { "w": 43, "h": 59 }, + "duration": 100 + }, + { + "filename": "0053.png", + "frame": { "x": 166, "y": 233, "w": 39, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 22, "w": 39, "h": 36 }, + "sourceSize": { "w": 43, "h": 59 }, + "duration": 100 + }, + { + "filename": "0054.png", + "frame": { "x": 1, "y": 234, "w": 39, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 22, "w": 39, "h": 36 }, + "sourceSize": { "w": 43, "h": 59 }, + "duration": 100 + }, + { + "filename": "0055.png", + "frame": { "x": 43, "y": 233, "w": 39, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 21, "w": 39, "h": 37 }, + "sourceSize": { "w": 43, "h": 59 }, + "duration": 100 + }, + { + "filename": "0056.png", + "frame": { "x": 84, "y": 233, "w": 39, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 21, "w": 39, "h": 37 }, + "sourceSize": { "w": 43, "h": 59 }, + "duration": 100 + }, + { + "filename": "0057.png", + "frame": { "x": 125, "y": 233, "w": 39, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 21, "w": 39, "h": 37 }, + "sourceSize": { "w": 43, "h": 59 }, + "duration": 100 + }, + { + "filename": "0058.png", + "frame": { "x": 85, "y": 193, "w": 40, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 20, "w": 40, "h": 38 }, + "sourceSize": { "w": 43, "h": 59 }, + "duration": 100 + }, + { + "filename": "0059.png", + "frame": { "x": 43, "y": 153, "w": 40, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 20, "w": 40, "h": 39 }, + "sourceSize": { "w": 43, "h": 59 }, + "duration": 100 + }, + { + "filename": "0060.png", + "frame": { "x": 127, "y": 192, "w": 40, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 20, "w": 40, "h": 39 }, + "sourceSize": { "w": 43, "h": 59 }, + "duration": 100 + }, + { + "filename": "0061.png", + "frame": { "x": 1, "y": 193, "w": 40, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 20, "w": 40, "h": 39 }, + "sourceSize": { "w": 43, "h": 59 }, + "duration": 100 + }, + { + "filename": "0062.png", + "frame": { "x": 1, "y": 151, "w": 40, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 19, "w": 40, "h": 40 }, + "sourceSize": { "w": 43, "h": 59 }, + "duration": 100 + }, + { + "filename": "0063.png", + "frame": { "x": 43, "y": 110, "w": 40, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 18, "w": 40, "h": 41 }, + "sourceSize": { "w": 43, "h": 59 }, + "duration": 100 + }, + { + "filename": "0064.png", + "frame": { "x": 1, "y": 107, "w": 40, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 17, "w": 40, "h": 42 }, + "sourceSize": { "w": 43, "h": 59 }, + "duration": 100 + }, + { + "filename": "0065.png", + "frame": { "x": 130, "y": 107, "w": 40, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 17, "w": 40, "h": 42 }, + "sourceSize": { "w": 43, "h": 59 }, + "duration": 100 + }, + { + "filename": "0066.png", + "frame": { "x": 172, "y": 105, "w": 40, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 16, "w": 40, "h": 43 }, + "sourceSize": { "w": 43, "h": 59 }, + "duration": 100 + }, + { + "filename": "0067.png", + "frame": { "x": 1, "y": 61, "w": 40, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 15, "w": 40, "h": 44 }, + "sourceSize": { "w": 43, "h": 59 }, + "duration": 100 + }, + { + "filename": "0068.png", + "frame": { "x": 130, "y": 60, "w": 40, "h": 45 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 14, "w": 40, "h": 45 }, + "sourceSize": { "w": 43, "h": 59 }, + "duration": 100 + }, + { + "filename": "0069.png", + "frame": { "x": 88, "y": 60, "w": 40, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 13, "w": 40, "h": 46 }, + "sourceSize": { "w": 43, "h": 59 }, + "duration": 100 + }, + { + "filename": "0070.png", + "frame": { "x": 46, "y": 60, "w": 40, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 11, "w": 40, "h": 48 }, + "sourceSize": { "w": 43, "h": 59 }, + "duration": 100 + }, + { + "filename": "0071.png", + "frame": { "x": 174, "y": 54, "w": 40, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 10, "w": 40, "h": 49 }, + "sourceSize": { "w": 43, "h": 59 }, + "duration": 100 + }, + { + "filename": "0072.png", + "frame": { "x": 174, "y": 1, "w": 40, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 8, "w": 40, "h": 51 }, + "sourceSize": { "w": 43, "h": 59 }, + "duration": 100 + }, + { + "filename": "0073.png", + "frame": { "x": 46, "y": 1, "w": 42, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 42, "h": 57 }, + "sourceSize": { "w": 43, "h": 59 }, + "duration": 100 + }, + { + "filename": "0074.png", + "frame": { "x": 1, "y": 1, "w": 43, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 43, "h": 58 }, + "sourceSize": { "w": 43, "h": 59 }, + "duration": 100 + }, + { + "filename": "0075.png", + "frame": { "x": 1, "y": 1, "w": 43, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 43, "h": 58 }, + "sourceSize": { "w": 43, "h": 59 }, + "duration": 100 + }, + { + "filename": "0076.png", + "frame": { "x": 1, "y": 1, "w": 43, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 43, "h": 58 }, + "sourceSize": { "w": 43, "h": 59 }, + "duration": 100 + }, + { + "filename": "0077.png", + "frame": { "x": 1, "y": 1, "w": 43, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 43, "h": 58 }, + "sourceSize": { "w": 43, "h": 59 }, + "duration": 100 + }, + { + "filename": "0078.png", + "frame": { "x": 133, "y": 1, "w": 39, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 39, "h": 55 }, + "sourceSize": { "w": 43, "h": 59 }, + "duration": 100 + }, + { + "filename": "0079.png", + "frame": { "x": 90, "y": 1, "w": 41, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 0, "w": 41, "h": 57 }, + "sourceSize": { "w": 43, "h": 59 }, + "duration": 100 + }, + { + "filename": "0080.png", + "frame": { "x": 172, "y": 150, "w": 39, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 16, "w": 39, "h": 42 }, + "sourceSize": { "w": 43, "h": 59 }, + "duration": 100 + }, + { + "filename": "0081.png", + "frame": { "x": 88, "y": 108, "w": 40, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 16, "w": 40, "h": 42 }, + "sourceSize": { "w": 43, "h": 59 }, + "duration": 100 + }, + { + "filename": "0082.png", + "frame": { "x": 130, "y": 107, "w": 40, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 17, "w": 40, "h": 42 }, + "sourceSize": { "w": 43, "h": 59 }, + "duration": 100 + }, + { + "filename": "0083.png", + "frame": { "x": 1, "y": 107, "w": 40, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 17, "w": 40, "h": 42 }, + "sourceSize": { "w": 43, "h": 59 }, + "duration": 100 + }, + { + "filename": "0084.png", + "frame": { "x": 43, "y": 110, "w": 40, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 18, "w": 40, "h": 41 }, + "sourceSize": { "w": 43, "h": 59 }, + "duration": 100 + }, + { + "filename": "0085.png", + "frame": { "x": 1, "y": 151, "w": 40, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 19, "w": 40, "h": 40 }, + "sourceSize": { "w": 43, "h": 59 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.13-x64", + "image": "728.png", + "format": "I8", + "size": { "w": 215, "h": 271 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/back/728.png b/public/images/pokemon/exp/back/728.png index 7564e0eceac..d3534c8f37b 100644 Binary files a/public/images/pokemon/exp/back/728.png and b/public/images/pokemon/exp/back/728.png differ diff --git a/public/images/pokemon/exp/back/729.json b/public/images/pokemon/exp/back/729.json index a8859e39a33..97deebe472e 100644 --- a/public/images/pokemon/exp/back/729.json +++ b/public/images/pokemon/exp/back/729.json @@ -1,230 +1,1055 @@ -{ - "textures": [ - { - "image": "729.png", - "format": "RGBA8888", - "size": { - "w": 148, - "h": 148 - }, - "scale": 1, - "frames": [ - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 71, - "h": 50 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 70, - "h": 50 - }, - "frame": { - "x": 0, - "y": 0, - "w": 70, - "h": 50 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 71, - "h": 50 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 70, - "h": 49 - }, - "frame": { - "x": 0, - "y": 50, - "w": 70, - "h": 49 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 71, - "h": 50 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 70, - "h": 49 - }, - "frame": { - "x": 0, - "y": 50, - "w": 70, - "h": 49 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 71, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 69, - "h": 49 - }, - "frame": { - "x": 0, - "y": 99, - "w": 69, - "h": 49 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 71, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 69, - "h": 49 - }, - "frame": { - "x": 0, - "y": 99, - "w": 69, - "h": 49 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 71, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 68, - "h": 50 - }, - "frame": { - "x": 70, - "y": 0, - "w": 68, - "h": 50 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 71, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 68, - "h": 50 - }, - "frame": { - "x": 70, - "y": 0, - "w": 68, - "h": 50 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 71, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 67, - "h": 50 - }, - "frame": { - "x": 70, - "y": 50, - "w": 67, - "h": 50 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 71, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 70, - "h": 48 - }, - "frame": { - "x": 69, - "y": 100, - "w": 70, - "h": 48 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 71, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 70, - "h": 48 - }, - "frame": { - "x": 69, - "y": 100, - "w": 70, - "h": 48 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:ca6603181d5c8644f2bdbeecb46551b0:09ccc951204ac93cf598ed13a34f0429:b2d5dd692ec79c7357afdffa7b3670a9$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 348, "y": 280, "w": 56, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 9, "w": 56, "h": 54 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 166, "y": 283, "w": 55, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 10, "w": 55, "h": 53 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 0, "y": 284, "w": 54, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 10, "w": 54, "h": 53 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 348, "y": 334, "w": 52, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 11, "w": 52, "h": 52 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 49, "y": 337, "w": 49, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 11, "w": 49, "h": 52 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 49, "y": 389, "w": 47, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 12, "w": 47, "h": 51 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 265, "y": 388, "w": 47, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 11, "w": 47, "h": 52 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 386, "y": 386, "w": 47, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 11, "w": 47, "h": 52 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 98, "y": 337, "w": 49, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 11, "w": 49, "h": 52 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 287, "y": 335, "w": 51, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 10, "w": 51, "h": 53 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 491, "y": 224, "w": 53, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 10, "w": 53, "h": 53 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0012.png", + "frame": { "x": 112, "y": 283, "w": 54, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 9, "w": 54, "h": 54 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0013.png", + "frame": { "x": 292, "y": 280, "w": 56, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 8, "w": 56, "h": 55 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0014.png", + "frame": { "x": 174, "y": 228, "w": 57, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 8, "w": 57, "h": 55 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0015.png", + "frame": { "x": 328, "y": 114, "w": 59, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 7, "w": 59, "h": 56 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0016.png", + "frame": { "x": 195, "y": 61, "w": 59, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 7, "w": 59, "h": 57 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0017.png", + "frame": { "x": 334, "y": 57, "w": 60, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 7, "w": 60, "h": 57 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0018.png", + "frame": { "x": 394, "y": 57, "w": 60, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 7, "w": 60, "h": 57 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0019.png", + "frame": { "x": 268, "y": 60, "w": 60, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 7, "w": 60, "h": 57 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0020.png", + "frame": { "x": 68, "y": 62, "w": 60, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 7, "w": 60, "h": 56 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0021.png", + "frame": { "x": 234, "y": 172, "w": 59, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 8, "w": 59, "h": 55 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0022.png", + "frame": { "x": 293, "y": 225, "w": 59, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 8, "w": 59, "h": 55 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0023.png", + "frame": { "x": 234, "y": 227, "w": 58, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 8, "w": 58, "h": 55 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0024.png", + "frame": { "x": 59, "y": 174, "w": 57, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 9, "w": 57, "h": 54 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0025.png", + "frame": { "x": 348, "y": 280, "w": 56, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 9, "w": 56, "h": 54 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0026.png", + "frame": { "x": 166, "y": 283, "w": 55, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 10, "w": 55, "h": 53 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0027.png", + "frame": { "x": 0, "y": 284, "w": 54, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 10, "w": 54, "h": 53 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0028.png", + "frame": { "x": 348, "y": 334, "w": 52, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 11, "w": 52, "h": 52 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0029.png", + "frame": { "x": 49, "y": 337, "w": 49, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 11, "w": 49, "h": 52 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0030.png", + "frame": { "x": 49, "y": 389, "w": 47, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 12, "w": 47, "h": 51 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0031.png", + "frame": { "x": 265, "y": 388, "w": 47, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 11, "w": 47, "h": 52 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0032.png", + "frame": { "x": 386, "y": 386, "w": 47, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 11, "w": 47, "h": 52 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0033.png", + "frame": { "x": 98, "y": 337, "w": 49, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 11, "w": 49, "h": 52 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0034.png", + "frame": { "x": 287, "y": 335, "w": 51, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 10, "w": 51, "h": 53 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0035.png", + "frame": { "x": 491, "y": 224, "w": 53, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 10, "w": 53, "h": 53 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0036.png", + "frame": { "x": 112, "y": 283, "w": 54, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 9, "w": 54, "h": 54 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0037.png", + "frame": { "x": 292, "y": 280, "w": 56, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 8, "w": 56, "h": 55 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0038.png", + "frame": { "x": 174, "y": 228, "w": 57, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 8, "w": 57, "h": 55 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0039.png", + "frame": { "x": 328, "y": 114, "w": 59, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 7, "w": 59, "h": 56 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0040.png", + "frame": { "x": 195, "y": 61, "w": 59, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 7, "w": 59, "h": 57 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0041.png", + "frame": { "x": 334, "y": 57, "w": 60, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 7, "w": 60, "h": 57 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0042.png", + "frame": { "x": 394, "y": 57, "w": 60, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 7, "w": 60, "h": 57 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0043.png", + "frame": { "x": 268, "y": 60, "w": 60, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 7, "w": 60, "h": 57 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0044.png", + "frame": { "x": 68, "y": 62, "w": 60, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 7, "w": 60, "h": 56 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0045.png", + "frame": { "x": 234, "y": 172, "w": 59, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 8, "w": 59, "h": 55 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0046.png", + "frame": { "x": 293, "y": 225, "w": 59, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 8, "w": 59, "h": 55 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0047.png", + "frame": { "x": 234, "y": 227, "w": 58, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 8, "w": 58, "h": 55 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0048.png", + "frame": { "x": 59, "y": 174, "w": 57, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 9, "w": 57, "h": 54 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0049.png", + "frame": { "x": 348, "y": 280, "w": 56, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 9, "w": 56, "h": 54 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0050.png", + "frame": { "x": 166, "y": 283, "w": 55, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 10, "w": 55, "h": 53 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0051.png", + "frame": { "x": 0, "y": 284, "w": 54, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 10, "w": 54, "h": 53 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0052.png", + "frame": { "x": 348, "y": 334, "w": 52, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 11, "w": 52, "h": 52 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0053.png", + "frame": { "x": 49, "y": 337, "w": 49, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 11, "w": 49, "h": 52 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0054.png", + "frame": { "x": 49, "y": 389, "w": 47, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 12, "w": 47, "h": 51 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0055.png", + "frame": { "x": 265, "y": 388, "w": 47, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 11, "w": 47, "h": 52 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0056.png", + "frame": { "x": 386, "y": 386, "w": 47, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 11, "w": 47, "h": 52 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0057.png", + "frame": { "x": 98, "y": 337, "w": 49, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 11, "w": 49, "h": 52 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0058.png", + "frame": { "x": 287, "y": 335, "w": 51, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 10, "w": 51, "h": 53 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0059.png", + "frame": { "x": 491, "y": 224, "w": 53, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 10, "w": 53, "h": 53 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0060.png", + "frame": { "x": 112, "y": 283, "w": 54, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 9, "w": 54, "h": 54 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0061.png", + "frame": { "x": 292, "y": 280, "w": 56, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 8, "w": 56, "h": 55 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0062.png", + "frame": { "x": 174, "y": 228, "w": 57, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 8, "w": 57, "h": 55 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0063.png", + "frame": { "x": 328, "y": 114, "w": 59, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 7, "w": 59, "h": 56 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0064.png", + "frame": { "x": 195, "y": 61, "w": 59, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 7, "w": 59, "h": 57 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0065.png", + "frame": { "x": 334, "y": 57, "w": 60, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 7, "w": 60, "h": 57 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0066.png", + "frame": { "x": 394, "y": 57, "w": 60, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 7, "w": 60, "h": 57 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0067.png", + "frame": { "x": 268, "y": 60, "w": 60, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 7, "w": 60, "h": 57 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0068.png", + "frame": { "x": 68, "y": 62, "w": 60, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 7, "w": 60, "h": 56 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0069.png", + "frame": { "x": 234, "y": 172, "w": 59, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 8, "w": 59, "h": 55 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0070.png", + "frame": { "x": 293, "y": 225, "w": 59, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 8, "w": 59, "h": 55 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0071.png", + "frame": { "x": 234, "y": 227, "w": 58, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 8, "w": 58, "h": 55 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0072.png", + "frame": { "x": 59, "y": 174, "w": 57, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 9, "w": 57, "h": 54 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0073.png", + "frame": { "x": 348, "y": 280, "w": 56, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 9, "w": 56, "h": 54 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0074.png", + "frame": { "x": 467, "y": 279, "w": 58, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 9, "w": 58, "h": 54 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0075.png", + "frame": { "x": 0, "y": 63, "w": 61, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 8, "w": 61, "h": 55 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0076.png", + "frame": { "x": 334, "y": 0, "w": 63, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 7, "w": 63, "h": 57 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0077.png", + "frame": { "x": 135, "y": 61, "w": 60, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 7, "w": 60, "h": 57 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0078.png", + "frame": { "x": 458, "y": 56, "w": 59, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 8, "w": 59, "h": 58 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0079.png", + "frame": { "x": 397, "y": 0, "w": 61, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 8, "w": 61, "h": 57 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0080.png", + "frame": { "x": 458, "y": 0, "w": 62, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 7, "w": 62, "h": 56 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0081.png", + "frame": { "x": 446, "y": 169, "w": 59, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 8, "w": 59, "h": 55 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0082.png", + "frame": { "x": 348, "y": 280, "w": 56, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 9, "w": 56, "h": 54 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0083.png", + "frame": { "x": 57, "y": 283, "w": 55, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 9, "w": 55, "h": 54 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0084.png", + "frame": { "x": 467, "y": 333, "w": 53, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 11, "w": 53, "h": 52 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0085.png", + "frame": { "x": 338, "y": 386, "w": 48, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 11, "w": 48, "h": 52 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0086.png", + "frame": { "x": 216, "y": 336, "w": 49, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 11, "w": 49, "h": 53 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0087.png", + "frame": { "x": 166, "y": 336, "w": 50, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 15, "y": 11, "w": 50, "h": 53 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0088.png", + "frame": { "x": 0, "y": 337, "w": 49, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 11, "w": 49, "h": 53 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0089.png", + "frame": { "x": 452, "y": 385, "w": 48, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 10, "w": 48, "h": 53 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0090.png", + "frame": { "x": 400, "y": 334, "w": 52, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 11, "w": 52, "h": 52 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0091.png", + "frame": { "x": 348, "y": 280, "w": 56, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 9, "w": 56, "h": 54 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0092.png", + "frame": { "x": 231, "y": 282, "w": 56, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 9, "w": 56, "h": 54 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0093.png", + "frame": { "x": 117, "y": 228, "w": 57, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 8, "w": 57, "h": 55 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0094.png", + "frame": { "x": 58, "y": 118, "w": 58, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 7, "w": 58, "h": 56 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0095.png", + "frame": { "x": 352, "y": 225, "w": 58, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 8, "w": 58, "h": 55 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0096.png", + "frame": { "x": 0, "y": 118, "w": 58, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 7, "w": 58, "h": 56 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0097.png", + "frame": { "x": 314, "y": 170, "w": 59, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 8, "w": 59, "h": 55 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0098.png", + "frame": { "x": 175, "y": 118, "w": 59, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 8, "w": 59, "h": 55 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0099.png", + "frame": { "x": 373, "y": 170, "w": 59, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 8, "w": 59, "h": 55 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0100.png", + "frame": { "x": 116, "y": 118, "w": 59, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 8, "w": 59, "h": 55 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0101.png", + "frame": { "x": 446, "y": 114, "w": 60, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 8, "w": 60, "h": 55 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0102.png", + "frame": { "x": 202, "y": 0, "w": 66, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 66, "h": 61 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0103.png", + "frame": { "x": 68, "y": 0, "w": 67, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 67, "h": 62 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0104.png", + "frame": { "x": 0, "y": 0, "w": 68, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 68, "h": 63 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0105.png", + "frame": { "x": 268, "y": 0, "w": 66, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 66, "h": 60 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0106.png", + "frame": { "x": 135, "y": 0, "w": 67, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 67, "h": 61 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0107.png", + "frame": { "x": 254, "y": 117, "w": 60, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 8, "w": 60, "h": 55 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0108.png", + "frame": { "x": 116, "y": 173, "w": 59, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 8, "w": 59, "h": 55 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0109.png", + "frame": { "x": 116, "y": 173, "w": 59, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 8, "w": 59, "h": 55 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0110.png", + "frame": { "x": 175, "y": 173, "w": 59, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 8, "w": 59, "h": 55 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0111.png", + "frame": { "x": 0, "y": 174, "w": 59, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 8, "w": 59, "h": 55 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0112.png", + "frame": { "x": 432, "y": 224, "w": 59, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 8, "w": 59, "h": 55 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0113.png", + "frame": { "x": 387, "y": 114, "w": 59, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 7, "w": 59, "h": 56 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0114.png", + "frame": { "x": 59, "y": 228, "w": 58, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 8, "w": 58, "h": 55 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0115.png", + "frame": { "x": 0, "y": 229, "w": 57, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 8, "w": 57, "h": 55 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0116.png", + "frame": { "x": 410, "y": 279, "w": 57, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 8, "w": 57, "h": 55 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.13-x64", + "image": "729.png", + "format": "I8", + "size": { "w": 544, "h": 440 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/back/729.png b/public/images/pokemon/exp/back/729.png index 08135d50267..b303934d595 100644 Binary files a/public/images/pokemon/exp/back/729.png and b/public/images/pokemon/exp/back/729.png differ diff --git a/public/images/pokemon/exp/back/730.json b/public/images/pokemon/exp/back/730.json index 867195486fa..5e3c835b381 100644 --- a/public/images/pokemon/exp/back/730.json +++ b/public/images/pokemon/exp/back/730.json @@ -1,230 +1,839 @@ -{ - "textures": [ - { - "image": "730.png", - "format": "RGBA8888", - "size": { - "w": 206, - "h": 206 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 69, - "h": 82 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 69, - "h": 79 - }, - "frame": { - "x": 0, - "y": 0, - "w": 69, - "h": 79 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 69, - "h": 82 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 68, - "h": 81 - }, - "frame": { - "x": 69, - "y": 0, - "w": 68, - "h": 81 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 69, - "h": 82 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 68, - "h": 81 - }, - "frame": { - "x": 69, - "y": 0, - "w": 68, - "h": 81 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 69, - "h": 82 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 68, - "h": 81 - }, - "frame": { - "x": 0, - "y": 79, - "w": 68, - "h": 81 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 69, - "h": 82 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 69, - "h": 79 - }, - "frame": { - "x": 68, - "y": 81, - "w": 69, - "h": 79 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 69, - "h": 82 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 69, - "h": 79 - }, - "frame": { - "x": 68, - "y": 81, - "w": 69, - "h": 79 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 69, - "h": 82 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 69, - "h": 79 - }, - "frame": { - "x": 137, - "y": 0, - "w": 69, - "h": 79 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 69, - "h": 82 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 69, - "h": 79 - }, - "frame": { - "x": 137, - "y": 0, - "w": 69, - "h": 79 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 69, - "h": 82 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 69, - "h": 78 - }, - "frame": { - "x": 137, - "y": 79, - "w": 69, - "h": 78 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 69, - "h": 82 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 69, - "h": 78 - }, - "frame": { - "x": 137, - "y": 79, - "w": 69, - "h": 78 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:2717094fe274718326c9b0fe3237866b:3ad96e0a8adb3bab17597f2996c3f5cc:fcd0d2cb6b26724e796ae0dcb71fae3f$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 397, "y": 0, "w": 75, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 13, "w": 75, "h": 71 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 324, "y": 0, "w": 73, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 11, "w": 73, "h": 73 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 397, "y": 71, "w": 69, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 8, "w": 69, "h": 76 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 70, "y": 135, "w": 66, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 5, "w": 66, "h": 78 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 278, "y": 401, "w": 61, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 3, "w": 61, "h": 78 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 137, "y": 400, "w": 60, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 19, "y": 1, "w": 60, "h": 80 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 77, "y": 394, "w": 60, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 19, "y": 1, "w": 60, "h": 80 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 217, "y": 335, "w": 61, "h": 79 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 2, "w": 61, "h": 79 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 415, "y": 418, "w": 61, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 4, "w": 61, "h": 77 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 351, "y": 359, "w": 64, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 16, "y": 8, "w": 64, "h": 76 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 505, "y": 288, "w": 69, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 13, "w": 69, "h": 71 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0012.png", + "frame": { "x": 278, "y": 334, "w": 73, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 17, "w": 73, "h": 67 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0013.png", + "frame": { "x": 124, "y": 265, "w": 76, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 18, "w": 76, "h": 66 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0014.png", + "frame": { "x": 292, "y": 269, "w": 77, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 19, "w": 77, "h": 65 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0015.png", + "frame": { "x": 200, "y": 271, "w": 78, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 19, "w": 78, "h": 64 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0016.png", + "frame": { "x": 197, "y": 414, "w": 77, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 19, "w": 77, "h": 62 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0017.png", + "frame": { "x": 0, "y": 394, "w": 77, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 18, "w": 77, "h": 63 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0018.png", + "frame": { "x": 64, "y": 331, "w": 78, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 18, "w": 78, "h": 63 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0019.png", + "frame": { "x": 385, "y": 212, "w": 79, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 17, "w": 79, "h": 64 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0020.png", + "frame": { "x": 213, "y": 207, "w": 79, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 17, "w": 79, "h": 64 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0021.png", + "frame": { "x": 156, "y": 67, "w": 79, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 17, "w": 79, "h": 67 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0022.png", + "frame": { "x": 78, "y": 67, "w": 78, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 16, "w": 78, "h": 68 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0023.png", + "frame": { "x": 397, "y": 0, "w": 75, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 13, "w": 75, "h": 71 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0024.png", + "frame": { "x": 324, "y": 0, "w": 73, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 11, "w": 73, "h": 73 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0025.png", + "frame": { "x": 397, "y": 71, "w": 69, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 8, "w": 69, "h": 76 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0026.png", + "frame": { "x": 70, "y": 135, "w": 66, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 5, "w": 66, "h": 78 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0027.png", + "frame": { "x": 278, "y": 401, "w": 61, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 3, "w": 61, "h": 78 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0028.png", + "frame": { "x": 137, "y": 400, "w": 60, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 19, "y": 1, "w": 60, "h": 80 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0029.png", + "frame": { "x": 77, "y": 394, "w": 60, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 19, "y": 1, "w": 60, "h": 80 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0030.png", + "frame": { "x": 217, "y": 335, "w": 61, "h": 79 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 2, "w": 61, "h": 79 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0031.png", + "frame": { "x": 415, "y": 418, "w": 61, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 4, "w": 61, "h": 77 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0032.png", + "frame": { "x": 351, "y": 359, "w": 64, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 16, "y": 8, "w": 64, "h": 76 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0033.png", + "frame": { "x": 505, "y": 288, "w": 69, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 13, "w": 69, "h": 71 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0034.png", + "frame": { "x": 278, "y": 334, "w": 73, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 17, "w": 73, "h": 67 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0035.png", + "frame": { "x": 124, "y": 265, "w": 76, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 18, "w": 76, "h": 66 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0036.png", + "frame": { "x": 292, "y": 269, "w": 77, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 19, "w": 77, "h": 65 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0037.png", + "frame": { "x": 200, "y": 271, "w": 78, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 19, "w": 78, "h": 64 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0038.png", + "frame": { "x": 197, "y": 414, "w": 77, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 19, "w": 77, "h": 62 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0039.png", + "frame": { "x": 0, "y": 394, "w": 77, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 18, "w": 77, "h": 63 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0040.png", + "frame": { "x": 64, "y": 331, "w": 78, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 18, "w": 78, "h": 63 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0041.png", + "frame": { "x": 385, "y": 212, "w": 79, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 17, "w": 79, "h": 64 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0042.png", + "frame": { "x": 213, "y": 207, "w": 79, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 17, "w": 79, "h": 64 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0043.png", + "frame": { "x": 156, "y": 67, "w": 79, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 17, "w": 79, "h": 67 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0044.png", + "frame": { "x": 78, "y": 67, "w": 78, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 16, "w": 78, "h": 68 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0045.png", + "frame": { "x": 397, "y": 0, "w": 75, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 13, "w": 75, "h": 71 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0046.png", + "frame": { "x": 324, "y": 0, "w": 73, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 11, "w": 73, "h": 73 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0047.png", + "frame": { "x": 397, "y": 71, "w": 69, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 8, "w": 69, "h": 76 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0048.png", + "frame": { "x": 70, "y": 135, "w": 66, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 5, "w": 66, "h": 78 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0049.png", + "frame": { "x": 278, "y": 401, "w": 61, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 3, "w": 61, "h": 78 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0050.png", + "frame": { "x": 137, "y": 400, "w": 60, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 19, "y": 1, "w": 60, "h": 80 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0051.png", + "frame": { "x": 77, "y": 394, "w": 60, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 19, "y": 1, "w": 60, "h": 80 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0052.png", + "frame": { "x": 217, "y": 335, "w": 61, "h": 79 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 2, "w": 61, "h": 79 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0053.png", + "frame": { "x": 415, "y": 418, "w": 61, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 4, "w": 61, "h": 77 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0054.png", + "frame": { "x": 351, "y": 359, "w": 64, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 16, "y": 8, "w": 64, "h": 76 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0055.png", + "frame": { "x": 505, "y": 288, "w": 69, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 13, "w": 69, "h": 71 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0056.png", + "frame": { "x": 278, "y": 334, "w": 73, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 17, "w": 73, "h": 67 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0057.png", + "frame": { "x": 124, "y": 265, "w": 76, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 18, "w": 76, "h": 66 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0058.png", + "frame": { "x": 292, "y": 269, "w": 77, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 19, "w": 77, "h": 65 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0059.png", + "frame": { "x": 200, "y": 271, "w": 78, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 19, "w": 78, "h": 64 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0060.png", + "frame": { "x": 197, "y": 414, "w": 77, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 19, "w": 77, "h": 62 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0061.png", + "frame": { "x": 0, "y": 394, "w": 77, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 18, "w": 77, "h": 63 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0062.png", + "frame": { "x": 64, "y": 331, "w": 78, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 18, "w": 78, "h": 63 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0063.png", + "frame": { "x": 385, "y": 212, "w": 79, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 17, "w": 79, "h": 64 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0064.png", + "frame": { "x": 213, "y": 207, "w": 79, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 17, "w": 79, "h": 64 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0065.png", + "frame": { "x": 156, "y": 67, "w": 79, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 17, "w": 79, "h": 67 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0066.png", + "frame": { "x": 78, "y": 67, "w": 78, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 16, "w": 78, "h": 68 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0067.png", + "frame": { "x": 472, "y": 0, "w": 75, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 13, "w": 75, "h": 71 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0068.png", + "frame": { "x": 0, "y": 135, "w": 70, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 10, "w": 70, "h": 74 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0069.png", + "frame": { "x": 0, "y": 288, "w": 64, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 16, "y": 7, "w": 64, "h": 77 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0070.png", + "frame": { "x": 504, "y": 359, "w": 60, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 20, "y": 4, "w": 60, "h": 80 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0071.png", + "frame": { "x": 369, "y": 276, "w": 60, "h": 83 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 20, "y": 1, "w": 60, "h": 83 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0072.png", + "frame": { "x": 64, "y": 213, "w": 60, "h": 84 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 20, "y": 0, "w": 60, "h": 84 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0073.png", + "frame": { "x": 466, "y": 139, "w": 62, "h": 83 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 20, "y": 1, "w": 62, "h": 83 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0074.png", + "frame": { "x": 0, "y": 209, "w": 64, "h": 79 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 19, "y": 5, "w": 64, "h": 79 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0075.png", + "frame": { "x": 236, "y": 134, "w": 71, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 11, "w": 71, "h": 73 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0076.png", + "frame": { "x": 136, "y": 199, "w": 77, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 18, "w": 77, "h": 66 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0077.png", + "frame": { "x": 156, "y": 134, "w": 80, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 19, "w": 80, "h": 65 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0078.png", + "frame": { "x": 315, "y": 73, "w": 80, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 19, "w": 80, "h": 65 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0079.png", + "frame": { "x": 385, "y": 147, "w": 79, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 19, "w": 79, "h": 65 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0080.png", + "frame": { "x": 307, "y": 204, "w": 78, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 19, "w": 78, "h": 65 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0081.png", + "frame": { "x": 429, "y": 288, "w": 76, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 19, "w": 76, "h": 65 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0082.png", + "frame": { "x": 142, "y": 335, "w": 75, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 19, "w": 75, "h": 65 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0083.png", + "frame": { "x": 429, "y": 353, "w": 75, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 19, "w": 75, "h": 65 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0084.png", + "frame": { "x": 464, "y": 222, "w": 76, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 18, "w": 76, "h": 66 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0085.png", + "frame": { "x": 307, "y": 138, "w": 78, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 18, "w": 78, "h": 66 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0086.png", + "frame": { "x": 235, "y": 68, "w": 80, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 18, "w": 80, "h": 66 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0087.png", + "frame": { "x": 82, "y": 0, "w": 82, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 17, "w": 82, "h": 67 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0088.png", + "frame": { "x": 0, "y": 0, "w": 82, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 17, "w": 82, "h": 67 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0089.png", + "frame": { "x": 164, "y": 0, "w": 81, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 17, "w": 81, "h": 67 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0090.png", + "frame": { "x": 245, "y": 0, "w": 79, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 16, "w": 79, "h": 68 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0091.png", + "frame": { "x": 0, "y": 67, "w": 78, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 16, "w": 78, "h": 68 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0092.png", + "frame": { "x": 466, "y": 71, "w": 77, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 16, "w": 77, "h": 68 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.13-x64", + "image": "730.png", + "format": "I8", + "size": { "w": 574, "h": 495 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/back/730.png b/public/images/pokemon/exp/back/730.png index 155152edd08..4a91464e076 100644 Binary files a/public/images/pokemon/exp/back/730.png and b/public/images/pokemon/exp/back/730.png differ diff --git a/public/images/pokemon/exp/back/746-school.json b/public/images/pokemon/exp/back/746-school.json index deea4a085b4..5874f93c128 100644 --- a/public/images/pokemon/exp/back/746-school.json +++ b/public/images/pokemon/exp/back/746-school.json @@ -1,230 +1,171 @@ -{ - "textures": [ - { - "image": "746-school.png", - "format": "RGBA8888", - "size": { - "w": 261, - "h": 261 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 97, - "h": 84 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 97, - "h": 80 - }, - "frame": { - "x": 0, - "y": 0, - "w": 97, - "h": 80 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 97, - "h": 84 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 96, - "h": 81 - }, - "frame": { - "x": 97, - "y": 0, - "w": 96, - "h": 81 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 97, - "h": 84 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 96, - "h": 81 - }, - "frame": { - "x": 97, - "y": 0, - "w": 96, - "h": 81 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 97, - "h": 84 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 93, - "h": 80 - }, - "frame": { - "x": 0, - "y": 80, - "w": 93, - "h": 80 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 97, - "h": 84 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 93, - "h": 80 - }, - "frame": { - "x": 0, - "y": 80, - "w": 93, - "h": 80 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 97, - "h": 84 - }, - "spriteSourceSize": { - "x": 2, - "y": 5, - "w": 87, - "h": 79 - }, - "frame": { - "x": 0, - "y": 160, - "w": 87, - "h": 79 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 97, - "h": 84 - }, - "spriteSourceSize": { - "x": 2, - "y": 5, - "w": 87, - "h": 79 - }, - "frame": { - "x": 87, - "y": 160, - "w": 87, - "h": 79 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 97, - "h": 84 - }, - "spriteSourceSize": { - "x": 3, - "y": 4, - "w": 89, - "h": 78 - }, - "frame": { - "x": 93, - "y": 81, - "w": 89, - "h": 78 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 97, - "h": 84 - }, - "spriteSourceSize": { - "x": 3, - "y": 4, - "w": 89, - "h": 78 - }, - "frame": { - "x": 93, - "y": 81, - "w": 89, - "h": 78 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 97, - "h": 84 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 87, - "h": 77 - }, - "frame": { - "x": 174, - "y": 159, - "w": 87, - "h": 77 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:30cb66415aef361ed227b9b95c6e059e:691d98e44070749abe13d4a0a6ceb7a7:10f3c9d1f1118f8f9f6e40f37a0eb499$" - } +{ "frames": { + "0001.png": { + "frame": { "x": 279, "y": 206, "w": 96, "h": 97 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 7, "w": 96, "h": 97 }, + "sourceSize": { "w": 100, "h": 111 }, + "duration": 100 + }, + "0002.png": { + "frame": { "x": 288, "y": 108, "w": 96, "h": 98 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 6, "w": 96, "h": 98 }, + "sourceSize": { "w": 100, "h": 111 }, + "duration": 100 + }, + "0003.png": { + "frame": { "x": 95, "y": 107, "w": 94, "h": 100 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 6, "w": 94, "h": 100 }, + "sourceSize": { "w": 100, "h": 111 }, + "duration": 100 + }, + "0004.png": { + "frame": { "x": 94, "y": 207, "w": 93, "h": 99 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 6, "w": 93, "h": 99 }, + "sourceSize": { "w": 100, "h": 111 }, + "duration": 100 + }, + "0005.png": { + "frame": { "x": 1, "y": 104, "w": 94, "h": 102 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 5, "w": 94, "h": 102 }, + "sourceSize": { "w": 100, "h": 111 }, + "duration": 100 + }, + "0006.png": { + "frame": { "x": 189, "y": 203, "w": 90, "h": 104 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 5, "w": 90, "h": 104 }, + "sourceSize": { "w": 100, "h": 111 }, + "duration": 100 + }, + "0007.png": { + "frame": { "x": 283, "y": 1, "w": 92, "h": 105 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 92, "h": 105 }, + "sourceSize": { "w": 100, "h": 111 }, + "duration": 100 + }, + "0008.png": { + "frame": { "x": 375, "y": 1, "w": 90, "h": 107 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 4, "w": 90, "h": 107 }, + "sourceSize": { "w": 100, "h": 111 }, + "duration": 100 + }, + "0009.png": { + "frame": { "x": 97, "y": 1, "w": 93, "h": 106 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 93, "h": 106 }, + "sourceSize": { "w": 100, "h": 111 }, + "duration": 100 + }, + "0010.png": { + "frame": { "x": 190, "y": 1, "w": 93, "h": 105 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 93, "h": 105 }, + "sourceSize": { "w": 100, "h": 111 }, + "duration": 100 + }, + "0011.png": { + "frame": { "x": 1, "y": 1, "w": 96, "h": 103 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 96, "h": 103 }, + "sourceSize": { "w": 100, "h": 111 }, + "duration": 100 + }, + "0012.png": { + "frame": { "x": 1, "y": 206, "w": 93, "h": 100 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 93, "h": 100 }, + "sourceSize": { "w": 100, "h": 111 }, + "duration": 100 + }, + "0013.png": { + "frame": { "x": 384, "y": 108, "w": 96, "h": 98 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 96, "h": 98 }, + "sourceSize": { "w": 100, "h": 111 }, + "duration": 100 + }, + "0014.png": { + "frame": { "x": 279, "y": 303, "w": 95, "h": 96 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 95, "h": 96 }, + "sourceSize": { "w": 100, "h": 111 }, + "duration": 100 + }, + "0015.png": { + "frame": { "x": 96, "y": 307, "w": 97, "h": 94 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 97, "h": 94 }, + "sourceSize": { "w": 100, "h": 111 }, + "duration": 100 + }, + "0016.png": { + "frame": { "x": 375, "y": 301, "w": 98, "h": 94 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 98, "h": 94 }, + "sourceSize": { "w": 100, "h": 111 }, + "duration": 100 + }, + "0017.png": { + "frame": { "x": 1, "y": 306, "w": 95, "h": 96 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 95, "h": 96 }, + "sourceSize": { "w": 100, "h": 111 }, + "duration": 100 + }, + "0018.png": { + "frame": { "x": 375, "y": 206, "w": 97, "h": 95 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 5, "w": 97, "h": 95 }, + "sourceSize": { "w": 100, "h": 111 }, + "duration": 100 + }, + "0019.png": { + "frame": { "x": 374, "y": 395, "w": 94, "h": 97 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 94, "h": 97 }, + "sourceSize": { "w": 100, "h": 111 }, + "duration": 100 + }, + "0020.png": { + "frame": { "x": 190, "y": 106, "w": 98, "h": 97 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 7, "w": 98, "h": 97 }, + "sourceSize": { "w": 100, "h": 111 }, + "duration": 100 + } + }, + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.13-x64", + "image": "746-school.png", + "format": "I8", + "size": { "w": 481, "h": 493 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/back/746-school.png b/public/images/pokemon/exp/back/746-school.png index 808f0d993db..baa5fde8219 100644 Binary files a/public/images/pokemon/exp/back/746-school.png and b/public/images/pokemon/exp/back/746-school.png differ diff --git a/public/images/pokemon/exp/back/746.json b/public/images/pokemon/exp/back/746.json index 971e045fbf4..1f15d713330 100644 --- a/public/images/pokemon/exp/back/746.json +++ b/public/images/pokemon/exp/back/746.json @@ -1,314 +1,641 @@ -{ - "textures": [ - { - "image": "746.png", - "format": "RGBA8888", - "size": { - "w": 132, - "h": 132 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 29 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 46, - "h": 27 - }, - "frame": { - "x": 0, - "y": 0, - "w": 46, - "h": 27 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 29 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 46, - "h": 27 - }, - "frame": { - "x": 0, - "y": 0, - "w": 46, - "h": 27 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 29 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 45, - "h": 27 - }, - "frame": { - "x": 46, - "y": 0, - "w": 45, - "h": 27 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 29 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 41, - "h": 27 - }, - "frame": { - "x": 91, - "y": 0, - "w": 41, - "h": 27 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 29 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 45, - "h": 27 - }, - "frame": { - "x": 0, - "y": 27, - "w": 45, - "h": 27 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 29 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 45, - "h": 27 - }, - "frame": { - "x": 45, - "y": 27, - "w": 45, - "h": 27 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 29 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 42, - "h": 27 - }, - "frame": { - "x": 90, - "y": 27, - "w": 42, - "h": 27 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 29 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 42, - "h": 27 - }, - "frame": { - "x": 90, - "y": 27, - "w": 42, - "h": 27 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 29 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 44, - "h": 27 - }, - "frame": { - "x": 0, - "y": 54, - "w": 44, - "h": 27 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 29 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 44, - "h": 27 - }, - "frame": { - "x": 0, - "y": 81, - "w": 44, - "h": 27 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 29 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 45, - "h": 26 - }, - "frame": { - "x": 44, - "y": 54, - "w": 45, - "h": 26 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 29 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 43, - "h": 27 - }, - "frame": { - "x": 89, - "y": 54, - "w": 43, - "h": 27 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 29 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 44, - "h": 26 - }, - "frame": { - "x": 44, - "y": 80, - "w": 44, - "h": 26 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 29 - }, - "spriteSourceSize": { - "x": 3, - "y": 3, - "w": 41, - "h": 26 - }, - "frame": { - "x": 44, - "y": 106, - "w": 41, - "h": 26 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:93d33f4a5b3862a769ebca021367624a:963e4390d528585dcdd0e7068e5ec568:1a4f7e535d823202c4828f963d5b4404$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 1, "y": 1, "w": 40, "h": 25 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 38, "w": 38, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0002.png", + "frame": { "x": 1, "y": 26, "w": 36, "h": 25 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 30, "y": 38, "w": 34, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0003.png", + "frame": { "x": 1, "y": 1, "w": 40, "h": 25 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 38, "w": 38, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0004.png", + "frame": { "x": 1, "y": 26, "w": 36, "h": 25 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 30, "y": 38, "w": 34, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0005.png", + "frame": { "x": 1, "y": 1, "w": 40, "h": 25 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 38, "w": 38, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0006.png", + "frame": { "x": 1, "y": 26, "w": 36, "h": 25 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 30, "y": 39, "w": 34, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0007.png", + "frame": { "x": 1, "y": 1, "w": 40, "h": 25 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 41, "w": 38, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0008.png", + "frame": { "x": 1, "y": 26, "w": 36, "h": 25 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 30, "y": 43, "w": 34, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0009.png", + "frame": { "x": 1, "y": 1, "w": 40, "h": 25 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 44, "w": 38, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0010.png", + "frame": { "x": 1, "y": 26, "w": 36, "h": 25 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 30, "y": 45, "w": 34, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0011.png", + "frame": { "x": 1, "y": 1, "w": 40, "h": 25 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 45, "w": 38, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0012.png", + "frame": { "x": 1, "y": 26, "w": 36, "h": 25 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 30, "y": 45, "w": 34, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0013.png", + "frame": { "x": 1, "y": 1, "w": 40, "h": 25 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 45, "w": 38, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0014.png", + "frame": { "x": 1, "y": 26, "w": 36, "h": 25 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 30, "y": 45, "w": 34, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0015.png", + "frame": { "x": 1, "y": 1, "w": 40, "h": 25 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 44, "w": 38, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0016.png", + "frame": { "x": 1, "y": 26, "w": 36, "h": 25 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 30, "y": 43, "w": 34, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0017.png", + "frame": { "x": 1, "y": 1, "w": 40, "h": 25 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 41, "w": 38, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0018.png", + "frame": { "x": 1, "y": 26, "w": 36, "h": 25 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 30, "y": 39, "w": 34, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0019.png", + "frame": { "x": 1, "y": 1, "w": 40, "h": 25 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 38, "w": 38, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0020.png", + "frame": { "x": 1, "y": 26, "w": 36, "h": 25 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 30, "y": 38, "w": 34, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0021.png", + "frame": { "x": 1, "y": 1, "w": 40, "h": 25 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 38, "w": 38, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0022.png", + "frame": { "x": 1, "y": 26, "w": 36, "h": 25 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 30, "y": 38, "w": 34, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0023.png", + "frame": { "x": 1, "y": 1, "w": 40, "h": 25 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 38, "w": 38, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0024.png", + "frame": { "x": 1, "y": 26, "w": 36, "h": 25 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 30, "y": 39, "w": 34, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0025.png", + "frame": { "x": 1, "y": 1, "w": 40, "h": 25 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 41, "w": 38, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0026.png", + "frame": { "x": 1, "y": 26, "w": 36, "h": 25 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 30, "y": 43, "w": 34, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0027.png", + "frame": { "x": 1, "y": 1, "w": 40, "h": 25 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 44, "w": 38, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0028.png", + "frame": { "x": 1, "y": 26, "w": 36, "h": 25 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 30, "y": 45, "w": 34, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0029.png", + "frame": { "x": 1, "y": 1, "w": 40, "h": 25 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 45, "w": 38, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0030.png", + "frame": { "x": 1, "y": 26, "w": 36, "h": 25 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 30, "y": 45, "w": 34, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0031.png", + "frame": { "x": 1, "y": 1, "w": 40, "h": 25 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 45, "w": 38, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0032.png", + "frame": { "x": 1, "y": 26, "w": 36, "h": 25 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 30, "y": 45, "w": 34, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0033.png", + "frame": { "x": 1, "y": 1, "w": 40, "h": 25 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 44, "w": 38, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0034.png", + "frame": { "x": 1, "y": 26, "w": 36, "h": 25 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 30, "y": 43, "w": 34, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0035.png", + "frame": { "x": 1, "y": 1, "w": 40, "h": 25 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 41, "w": 38, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0036.png", + "frame": { "x": 1, "y": 26, "w": 36, "h": 25 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 30, "y": 39, "w": 34, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0037.png", + "frame": { "x": 41, "y": 1, "w": 40, "h": 25 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 38, "w": 38, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0038.png", + "frame": { "x": 37, "y": 26, "w": 36, "h": 25 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 30, "y": 38, "w": 34, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0039.png", + "frame": { "x": 81, "y": 1, "w": 40, "h": 25 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 38, "w": 38, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0040.png", + "frame": { "x": 37, "y": 26, "w": 36, "h": 25 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 30, "y": 38, "w": 34, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0041.png", + "frame": { "x": 81, "y": 1, "w": 40, "h": 25 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 38, "w": 38, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0042.png", + "frame": { "x": 37, "y": 26, "w": 36, "h": 25 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 30, "y": 39, "w": 34, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0043.png", + "frame": { "x": 81, "y": 1, "w": 40, "h": 25 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 41, "w": 38, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0044.png", + "frame": { "x": 37, "y": 26, "w": 36, "h": 25 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 30, "y": 43, "w": 34, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0045.png", + "frame": { "x": 81, "y": 1, "w": 40, "h": 25 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 44, "w": 38, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0046.png", + "frame": { "x": 37, "y": 26, "w": 36, "h": 25 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 30, "y": 45, "w": 34, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0047.png", + "frame": { "x": 81, "y": 1, "w": 40, "h": 25 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 45, "w": 38, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0048.png", + "frame": { "x": 37, "y": 26, "w": 36, "h": 25 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 30, "y": 45, "w": 34, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0049.png", + "frame": { "x": 81, "y": 1, "w": 40, "h": 25 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 45, "w": 38, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0050.png", + "frame": { "x": 37, "y": 26, "w": 36, "h": 25 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 30, "y": 45, "w": 34, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0051.png", + "frame": { "x": 81, "y": 1, "w": 40, "h": 25 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 44, "w": 38, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0052.png", + "frame": { "x": 37, "y": 26, "w": 36, "h": 25 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 30, "y": 43, "w": 34, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0053.png", + "frame": { "x": 81, "y": 1, "w": 40, "h": 25 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 41, "w": 38, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0054.png", + "frame": { "x": 37, "y": 26, "w": 36, "h": 25 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 30, "y": 38, "w": 34, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0055.png", + "frame": { "x": 81, "y": 1, "w": 40, "h": 25 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 38, "w": 38, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0056.png", + "frame": { "x": 37, "y": 26, "w": 36, "h": 25 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 30, "y": 38, "w": 34, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0057.png", + "frame": { "x": 81, "y": 1, "w": 40, "h": 25 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 38, "w": 38, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0058.png", + "frame": { "x": 37, "y": 26, "w": 36, "h": 25 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 30, "y": 39, "w": 34, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0059.png", + "frame": { "x": 81, "y": 1, "w": 40, "h": 25 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 41, "w": 38, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0060.png", + "frame": { "x": 37, "y": 26, "w": 36, "h": 25 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 30, "y": 43, "w": 34, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0061.png", + "frame": { "x": 81, "y": 1, "w": 40, "h": 25 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 44, "w": 38, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0062.png", + "frame": { "x": 37, "y": 26, "w": 36, "h": 25 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 30, "y": 45, "w": 34, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0063.png", + "frame": { "x": 81, "y": 1, "w": 40, "h": 25 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 45, "w": 38, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0064.png", + "frame": { "x": 37, "y": 26, "w": 36, "h": 25 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 30, "y": 45, "w": 34, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0065.png", + "frame": { "x": 81, "y": 1, "w": 40, "h": 25 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 45, "w": 38, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0066.png", + "frame": { "x": 37, "y": 26, "w": 36, "h": 25 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 30, "y": 45, "w": 34, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0067.png", + "frame": { "x": 81, "y": 1, "w": 40, "h": 25 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 44, "w": 38, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0068.png", + "frame": { "x": 37, "y": 26, "w": 36, "h": 25 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 30, "y": 43, "w": 34, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0069.png", + "frame": { "x": 81, "y": 1, "w": 40, "h": 25 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 41, "w": 38, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0070.png", + "frame": { "x": 73, "y": 26, "w": 36, "h": 25 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 30, "y": 39, "w": 34, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.13-x64", + "image": "746.png", + "format": "I8", + "size": { "w": 122, "h": 52 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/back/746.png b/public/images/pokemon/exp/back/746.png index b9b84821eee..33cfa5ffec8 100644 Binary files a/public/images/pokemon/exp/back/746.png and b/public/images/pokemon/exp/back/746.png differ diff --git a/public/images/pokemon/exp/back/749.json b/public/images/pokemon/exp/back/749.json index d7851eaa797..ae6773c4296 100644 --- a/public/images/pokemon/exp/back/749.json +++ b/public/images/pokemon/exp/back/749.json @@ -1,230 +1,1037 @@ -{ - "textures": [ - { - "image": "749.png", - "format": "RGBA8888", - "size": { - "w": 171, - "h": 171 - }, - "scale": 1, - "frames": [ - { - "filename": "0005.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 59, - "h": 66 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 59, - "h": 66 - }, - "frame": { - "x": 0, - "y": 0, - "w": 59, - "h": 66 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 59, - "h": 66 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 59, - "h": 66 - }, - "frame": { - "x": 0, - "y": 0, - "w": 59, - "h": 66 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 59, - "h": 66 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 58, - "h": 66 - }, - "frame": { - "x": 59, - "y": 0, - "w": 58, - "h": 66 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 59, - "h": 66 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 58, - "h": 66 - }, - "frame": { - "x": 59, - "y": 0, - "w": 58, - "h": 66 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 59, - "h": 66 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 54, - "h": 66 - }, - "frame": { - "x": 117, - "y": 0, - "w": 54, - "h": 66 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 59, - "h": 66 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 59, - "h": 65 - }, - "frame": { - "x": 0, - "y": 66, - "w": 59, - "h": 65 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 59, - "h": 66 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 56, - "h": 66 - }, - "frame": { - "x": 59, - "y": 66, - "w": 56, - "h": 66 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 59, - "h": 66 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 56, - "h": 66 - }, - "frame": { - "x": 59, - "y": 66, - "w": 56, - "h": 66 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 59, - "h": 66 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 55, - "h": 66 - }, - "frame": { - "x": 115, - "y": 66, - "w": 55, - "h": 66 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 59, - "h": 66 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 55, - "h": 66 - }, - "frame": { - "x": 115, - "y": 66, - "w": 55, - "h": 66 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:6de951f837f3cd5e1f402431f0377838:262bd4a6b62a63a60897a16743d96663:d52e05c524384ef985e6339a08b2f938$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 146, "y": 297, "w": 48, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 11, "w": 46, "h": 56 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 149, "y": 181, "w": 49, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 11, "w": 47, "h": 56 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 1, "y": 183, "w": 49, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 11, "w": 47, "h": 56 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 203, "y": 70, "w": 51, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 12, "w": 49, "h": 55 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 98, "y": 127, "w": 51, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 13, "w": 49, "h": 54 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 150, "y": 125, "w": 51, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 13, "w": 49, "h": 54 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 99, "y": 69, "w": 51, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 11, "w": 49, "h": 56 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 1, "y": 125, "w": 50, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 11, "w": 48, "h": 56 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 50, "y": 186, "w": 48, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 10, "w": 46, "h": 57 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 1, "y": 241, "w": 48, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 10, "w": 46, "h": 57 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 243, "y": 243, "w": 47, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 9, "w": 45, "h": 58 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0012.png", + "frame": { "x": 286, "y": 356, "w": 46, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 10, "w": 44, "h": 57 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0013.png", + "frame": { "x": 144, "y": 355, "w": 46, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 10, "w": 44, "h": 57 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0014.png", + "frame": { "x": 97, "y": 355, "w": 47, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 11, "w": 45, "h": 56 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0015.png", + "frame": { "x": 146, "y": 297, "w": 48, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 11, "w": 46, "h": 56 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0016.png", + "frame": { "x": 149, "y": 181, "w": 49, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 11, "w": 47, "h": 56 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0017.png", + "frame": { "x": 1, "y": 183, "w": 49, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 11, "w": 47, "h": 56 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0018.png", + "frame": { "x": 203, "y": 70, "w": 51, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 12, "w": 49, "h": 55 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0019.png", + "frame": { "x": 98, "y": 127, "w": 51, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 13, "w": 49, "h": 54 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0020.png", + "frame": { "x": 150, "y": 125, "w": 51, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 13, "w": 49, "h": 54 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0021.png", + "frame": { "x": 99, "y": 69, "w": 51, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 11, "w": 49, "h": 56 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0022.png", + "frame": { "x": 1, "y": 125, "w": 50, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 11, "w": 48, "h": 56 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0023.png", + "frame": { "x": 50, "y": 186, "w": 48, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 10, "w": 46, "h": 57 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0024.png", + "frame": { "x": 1, "y": 241, "w": 48, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 10, "w": 46, "h": 57 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0025.png", + "frame": { "x": 243, "y": 243, "w": 47, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 9, "w": 45, "h": 58 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0026.png", + "frame": { "x": 286, "y": 356, "w": 46, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 10, "w": 44, "h": 57 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0027.png", + "frame": { "x": 144, "y": 355, "w": 46, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 10, "w": 44, "h": 57 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0028.png", + "frame": { "x": 97, "y": 355, "w": 47, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 11, "w": 45, "h": 56 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0029.png", + "frame": { "x": 146, "y": 297, "w": 48, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 11, "w": 46, "h": 56 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0030.png", + "frame": { "x": 190, "y": 357, "w": 48, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 13, "w": 46, "h": 54 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0031.png", + "frame": { "x": 238, "y": 365, "w": 48, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 14, "w": 46, "h": 53 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0032.png", + "frame": { "x": 196, "y": 239, "w": 47, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 9, "w": 45, "h": 58 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0033.png", + "frame": { "x": 49, "y": 245, "w": 45, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 43, "h": 60 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0034.png", + "frame": { "x": 242, "y": 303, "w": 44, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 42, "h": 60 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0035.png", + "frame": { "x": 1, "y": 300, "w": 47, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 45, "h": 57 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0036.png", + "frame": { "x": 94, "y": 300, "w": 50, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 7, "w": 48, "h": 53 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0037.png", + "frame": { "x": 290, "y": 300, "w": 49, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 10, "w": 47, "h": 54 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0038.png", + "frame": { "x": 290, "y": 244, "w": 50, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 13, "w": 48, "h": 54 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0039.png", + "frame": { "x": 48, "y": 355, "w": 49, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 13, "w": 47, "h": 54 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0040.png", + "frame": { "x": 98, "y": 183, "w": 49, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 11, "w": 47, "h": 56 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0041.png", + "frame": { "x": 146, "y": 297, "w": 48, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 11, "w": 46, "h": 56 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0042.png", + "frame": { "x": 149, "y": 181, "w": 49, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 11, "w": 47, "h": 56 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0043.png", + "frame": { "x": 1, "y": 183, "w": 49, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 11, "w": 47, "h": 56 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0044.png", + "frame": { "x": 203, "y": 70, "w": 51, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 12, "w": 49, "h": 55 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0045.png", + "frame": { "x": 98, "y": 127, "w": 51, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 13, "w": 49, "h": 54 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0046.png", + "frame": { "x": 150, "y": 125, "w": 51, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 13, "w": 49, "h": 54 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0047.png", + "frame": { "x": 99, "y": 69, "w": 51, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 11, "w": 49, "h": 56 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0048.png", + "frame": { "x": 1, "y": 125, "w": 50, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 11, "w": 48, "h": 56 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0049.png", + "frame": { "x": 50, "y": 186, "w": 48, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 10, "w": 46, "h": 57 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0050.png", + "frame": { "x": 1, "y": 241, "w": 48, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 10, "w": 46, "h": 57 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0051.png", + "frame": { "x": 243, "y": 243, "w": 47, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 9, "w": 45, "h": 58 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0052.png", + "frame": { "x": 286, "y": 356, "w": 46, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 10, "w": 44, "h": 57 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0053.png", + "frame": { "x": 144, "y": 355, "w": 46, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 10, "w": 44, "h": 57 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0054.png", + "frame": { "x": 97, "y": 355, "w": 47, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 11, "w": 45, "h": 56 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0055.png", + "frame": { "x": 146, "y": 297, "w": 48, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 11, "w": 46, "h": 56 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0056.png", + "frame": { "x": 190, "y": 357, "w": 48, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 13, "w": 46, "h": 54 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0057.png", + "frame": { "x": 238, "y": 365, "w": 48, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 14, "w": 46, "h": 53 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0058.png", + "frame": { "x": 196, "y": 239, "w": 47, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 9, "w": 45, "h": 58 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0059.png", + "frame": { "x": 49, "y": 245, "w": 45, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 43, "h": 60 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0060.png", + "frame": { "x": 242, "y": 303, "w": 44, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 42, "h": 60 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0061.png", + "frame": { "x": 1, "y": 300, "w": 47, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 45, "h": 57 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0062.png", + "frame": { "x": 94, "y": 300, "w": 50, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 7, "w": 48, "h": 53 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0063.png", + "frame": { "x": 290, "y": 300, "w": 49, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 10, "w": 47, "h": 54 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0064.png", + "frame": { "x": 290, "y": 244, "w": 50, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 13, "w": 48, "h": 54 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0065.png", + "frame": { "x": 48, "y": 355, "w": 49, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 13, "w": 47, "h": 54 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0066.png", + "frame": { "x": 98, "y": 183, "w": 49, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 11, "w": 47, "h": 56 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0067.png", + "frame": { "x": 146, "y": 297, "w": 48, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 11, "w": 46, "h": 56 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0068.png", + "frame": { "x": 190, "y": 357, "w": 48, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 13, "w": 46, "h": 54 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0069.png", + "frame": { "x": 238, "y": 365, "w": 48, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 14, "w": 46, "h": 53 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0070.png", + "frame": { "x": 196, "y": 239, "w": 47, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 9, "w": 45, "h": 58 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0071.png", + "frame": { "x": 49, "y": 245, "w": 45, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 43, "h": 60 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0072.png", + "frame": { "x": 242, "y": 303, "w": 44, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 42, "h": 60 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0073.png", + "frame": { "x": 1, "y": 300, "w": 47, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 45, "h": 57 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0074.png", + "frame": { "x": 94, "y": 300, "w": 50, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 7, "w": 48, "h": 53 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0075.png", + "frame": { "x": 290, "y": 300, "w": 49, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 10, "w": 47, "h": 54 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0076.png", + "frame": { "x": 290, "y": 244, "w": 50, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 13, "w": 48, "h": 54 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0077.png", + "frame": { "x": 48, "y": 355, "w": 49, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 13, "w": 47, "h": 54 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0078.png", + "frame": { "x": 98, "y": 183, "w": 49, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 11, "w": 47, "h": 56 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0079.png", + "frame": { "x": 146, "y": 297, "w": 48, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 11, "w": 46, "h": 56 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0080.png", + "frame": { "x": 149, "y": 181, "w": 49, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 11, "w": 47, "h": 56 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0081.png", + "frame": { "x": 1, "y": 183, "w": 49, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 11, "w": 47, "h": 56 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0082.png", + "frame": { "x": 203, "y": 70, "w": 51, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 12, "w": 49, "h": 55 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0083.png", + "frame": { "x": 98, "y": 127, "w": 51, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 13, "w": 49, "h": 54 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0084.png", + "frame": { "x": 150, "y": 125, "w": 51, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 13, "w": 49, "h": 54 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0085.png", + "frame": { "x": 99, "y": 69, "w": 51, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 11, "w": 49, "h": 56 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0086.png", + "frame": { "x": 1, "y": 125, "w": 50, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 11, "w": 48, "h": 56 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0087.png", + "frame": { "x": 50, "y": 186, "w": 48, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 10, "w": 46, "h": 57 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0088.png", + "frame": { "x": 1, "y": 241, "w": 48, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 10, "w": 46, "h": 57 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0089.png", + "frame": { "x": 243, "y": 243, "w": 47, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 9, "w": 45, "h": 58 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0090.png", + "frame": { "x": 286, "y": 356, "w": 46, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 10, "w": 44, "h": 57 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0091.png", + "frame": { "x": 144, "y": 355, "w": 46, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 10, "w": 44, "h": 57 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0092.png", + "frame": { "x": 97, "y": 355, "w": 47, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 11, "w": 45, "h": 56 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0093.png", + "frame": { "x": 194, "y": 299, "w": 48, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 11, "w": 46, "h": 56 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0094.png", + "frame": { "x": 243, "y": 185, "w": 49, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 11, "w": 47, "h": 56 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0095.png", + "frame": { "x": 294, "y": 129, "w": 50, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 12, "w": 48, "h": 55 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0096.png", + "frame": { "x": 243, "y": 129, "w": 51, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 13, "w": 49, "h": 54 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0097.png", + "frame": { "x": 150, "y": 70, "w": 53, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 14, "w": 51, "h": 53 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0098.png", + "frame": { "x": 48, "y": 66, "w": 51, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 10, "w": 49, "h": 57 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0099.png", + "frame": { "x": 279, "y": 68, "w": 49, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 8, "w": 47, "h": 59 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0100.png", + "frame": { "x": 97, "y": 1, "w": 49, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 47, "h": 61 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0101.png", + "frame": { "x": 48, "y": 1, "w": 49, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 47, "h": 63 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0102.png", + "frame": { "x": 235, "y": 1, "w": 44, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 42, "h": 67 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0103.png", + "frame": { "x": 201, "y": 127, "w": 42, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 40, "h": 66 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0104.png", + "frame": { "x": 191, "y": 1, "w": 44, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 42, "h": 67 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0105.png", + "frame": { "x": 1, "y": 1, "w": 47, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 45, "h": 66 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0106.png", + "frame": { "x": 146, "y": 1, "w": 45, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 43, "h": 66 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0107.png", + "frame": { "x": 279, "y": 1, "w": 45, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 43, "h": 65 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0108.png", + "frame": { "x": 328, "y": 63, "w": 44, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 42, "h": 63 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0109.png", + "frame": { "x": 324, "y": 1, "w": 47, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 7, "w": 45, "h": 60 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0110.png", + "frame": { "x": 51, "y": 125, "w": 47, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 8, "w": 45, "h": 59 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0111.png", + "frame": { "x": 98, "y": 241, "w": 48, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 10, "w": 46, "h": 57 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0112.png", + "frame": { "x": 292, "y": 186, "w": 49, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 11, "w": 47, "h": 56 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0113.png", + "frame": { "x": 147, "y": 239, "w": 49, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 11, "w": 47, "h": 56 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0114.png", + "frame": { "x": 146, "y": 297, "w": 48, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 11, "w": 46, "h": 56 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.13-x64", + "image": "749.png", + "format": "I8", + "size": { "w": 373, "h": 421 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/back/749.png b/public/images/pokemon/exp/back/749.png index d0194d3cf8a..ce8d43db939 100644 Binary files a/public/images/pokemon/exp/back/749.png and b/public/images/pokemon/exp/back/749.png differ diff --git a/public/images/pokemon/exp/back/750.json b/public/images/pokemon/exp/back/750.json index c9d0713c741..fad02642748 100644 --- a/public/images/pokemon/exp/back/750.json +++ b/public/images/pokemon/exp/back/750.json @@ -1,230 +1,929 @@ -{ - "textures": [ - { - "image": "750.png", - "format": "RGBA8888", - "size": { - "w": 253, - "h": 253 - }, - "scale": 1, - "frames": [ - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 73 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 88, - "h": 69 - }, - "frame": { - "x": 0, - "y": 0, - "w": 88, - "h": 69 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 73 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 87, - "h": 71 - }, - "frame": { - "x": 88, - "y": 0, - "w": 87, - "h": 71 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 73 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 87, - "h": 71 - }, - "frame": { - "x": 0, - "y": 69, - "w": 87, - "h": 71 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 73 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 86, - "h": 72 - }, - "frame": { - "x": 87, - "y": 71, - "w": 86, - "h": 72 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 73 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 79, - "h": 73 - }, - "frame": { - "x": 173, - "y": 71, - "w": 79, - "h": 73 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 73 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 86, - "h": 72 - }, - "frame": { - "x": 0, - "y": 140, - "w": 86, - "h": 72 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 73 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 83, - "h": 73 - }, - "frame": { - "x": 86, - "y": 143, - "w": 83, - "h": 73 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 73 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 83, - "h": 73 - }, - "frame": { - "x": 86, - "y": 143, - "w": 83, - "h": 73 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 73 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 84, - "h": 73 - }, - "frame": { - "x": 169, - "y": 144, - "w": 84, - "h": 73 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 73 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 84, - "h": 73 - }, - "frame": { - "x": 169, - "y": 144, - "w": 84, - "h": 73 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:f47cf7a324fea46ff24490e5f9ff75b2:b9e77a95b48977f27c24067d0f519108:4ad6abb5f7a40182d2391bde900ad082$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 565, "y": 215, "w": 78, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 11, "w": 76, "h": 67 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 324, "y": 213, "w": 79, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 11, "w": 77, "h": 67 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 80, "y": 214, "w": 80, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 12, "w": 78, "h": 66 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 581, "y": 147, "w": 81, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 12, "w": 79, "h": 66 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 333, "y": 146, "w": 84, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 13, "w": 82, "h": 65 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 1, "y": 147, "w": 84, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 13, "w": 82, "h": 65 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 499, "y": 81, "w": 86, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 14, "w": 84, "h": 64 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 333, "y": 80, "w": 87, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 14, "w": 85, "h": 64 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 1, "y": 81, "w": 87, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 14, "w": 85, "h": 64 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 88, "y": 81, "w": 87, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 14, "w": 85, "h": 64 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 585, "y": 81, "w": 86, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 14, "w": 84, "h": 64 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0012.png", + "frame": { "x": 85, "y": 147, "w": 84, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 13, "w": 82, "h": 65 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0013.png", + "frame": { "x": 499, "y": 147, "w": 82, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 12, "w": 80, "h": 66 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0014.png", + "frame": { "x": 1, "y": 214, "w": 79, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 11, "w": 77, "h": 67 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0015.png", + "frame": { "x": 246, "y": 152, "w": 78, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 15, "y": 10, "w": 76, "h": 68 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0016.png", + "frame": { "x": 169, "y": 159, "w": 77, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 10, "w": 75, "h": 68 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0017.png", + "frame": { "x": 77, "y": 350, "w": 74, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 19, "y": 10, "w": 72, "h": 68 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0018.png", + "frame": { "x": 466, "y": 353, "w": 73, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 19, "y": 10, "w": 71, "h": 68 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0019.png", + "frame": { "x": 1, "y": 352, "w": 73, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 10, "w": 71, "h": 68 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0020.png", + "frame": { "x": 306, "y": 360, "w": 73, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 17, "y": 11, "w": 71, "h": 67 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0021.png", + "frame": { "x": 392, "y": 304, "w": 74, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 15, "y": 10, "w": 72, "h": 68 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0022.png", + "frame": { "x": 1, "y": 283, "w": 76, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 11, "w": 74, "h": 67 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0023.png", + "frame": { "x": 403, "y": 235, "w": 77, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 11, "w": 75, "h": 67 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0024.png", + "frame": { "x": 565, "y": 215, "w": 78, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 11, "w": 76, "h": 67 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0025.png", + "frame": { "x": 324, "y": 213, "w": 79, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 11, "w": 77, "h": 67 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0026.png", + "frame": { "x": 80, "y": 214, "w": 80, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 12, "w": 78, "h": 66 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0027.png", + "frame": { "x": 581, "y": 147, "w": 81, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 12, "w": 79, "h": 66 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0028.png", + "frame": { "x": 333, "y": 146, "w": 84, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 13, "w": 82, "h": 65 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0029.png", + "frame": { "x": 1, "y": 147, "w": 84, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 13, "w": 82, "h": 65 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0030.png", + "frame": { "x": 499, "y": 81, "w": 86, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 14, "w": 84, "h": 64 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0031.png", + "frame": { "x": 333, "y": 80, "w": 87, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 14, "w": 85, "h": 64 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0032.png", + "frame": { "x": 1, "y": 81, "w": 87, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 14, "w": 85, "h": 64 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0033.png", + "frame": { "x": 88, "y": 81, "w": 87, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 14, "w": 85, "h": 64 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0034.png", + "frame": { "x": 585, "y": 81, "w": 86, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 14, "w": 84, "h": 64 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0035.png", + "frame": { "x": 85, "y": 147, "w": 84, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 13, "w": 82, "h": 65 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0036.png", + "frame": { "x": 499, "y": 147, "w": 82, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 12, "w": 80, "h": 66 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0037.png", + "frame": { "x": 1, "y": 214, "w": 79, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 11, "w": 77, "h": 67 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0038.png", + "frame": { "x": 246, "y": 152, "w": 78, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 15, "y": 10, "w": 76, "h": 68 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0039.png", + "frame": { "x": 169, "y": 159, "w": 77, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 10, "w": 75, "h": 68 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0040.png", + "frame": { "x": 77, "y": 350, "w": 74, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 19, "y": 10, "w": 72, "h": 68 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0041.png", + "frame": { "x": 466, "y": 353, "w": 73, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 19, "y": 10, "w": 71, "h": 68 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0042.png", + "frame": { "x": 1, "y": 352, "w": 73, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 10, "w": 71, "h": 68 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0043.png", + "frame": { "x": 306, "y": 360, "w": 73, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 17, "y": 11, "w": 71, "h": 67 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0044.png", + "frame": { "x": 392, "y": 304, "w": 74, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 15, "y": 10, "w": 72, "h": 68 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0045.png", + "frame": { "x": 1, "y": 283, "w": 76, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 11, "w": 74, "h": 67 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0046.png", + "frame": { "x": 403, "y": 235, "w": 77, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 11, "w": 75, "h": 67 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0047.png", + "frame": { "x": 565, "y": 215, "w": 78, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 11, "w": 76, "h": 67 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0048.png", + "frame": { "x": 324, "y": 213, "w": 79, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 11, "w": 77, "h": 67 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0049.png", + "frame": { "x": 80, "y": 214, "w": 80, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 12, "w": 78, "h": 66 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0050.png", + "frame": { "x": 581, "y": 147, "w": 81, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 12, "w": 79, "h": 66 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0051.png", + "frame": { "x": 333, "y": 146, "w": 84, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 13, "w": 82, "h": 65 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0052.png", + "frame": { "x": 1, "y": 147, "w": 84, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 13, "w": 82, "h": 65 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0053.png", + "frame": { "x": 499, "y": 81, "w": 86, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 14, "w": 84, "h": 64 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0054.png", + "frame": { "x": 333, "y": 80, "w": 87, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 14, "w": 85, "h": 64 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0055.png", + "frame": { "x": 1, "y": 81, "w": 87, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 14, "w": 85, "h": 64 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0056.png", + "frame": { "x": 88, "y": 81, "w": 87, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 14, "w": 85, "h": 64 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0057.png", + "frame": { "x": 585, "y": 81, "w": 86, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 14, "w": 84, "h": 64 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0058.png", + "frame": { "x": 85, "y": 147, "w": 84, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 13, "w": 82, "h": 65 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0059.png", + "frame": { "x": 499, "y": 147, "w": 82, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 12, "w": 80, "h": 66 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0060.png", + "frame": { "x": 1, "y": 214, "w": 79, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 11, "w": 77, "h": 67 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0061.png", + "frame": { "x": 246, "y": 152, "w": 78, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 15, "y": 10, "w": 76, "h": 68 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0062.png", + "frame": { "x": 169, "y": 159, "w": 77, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 10, "w": 75, "h": 68 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0063.png", + "frame": { "x": 77, "y": 350, "w": 74, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 19, "y": 10, "w": 72, "h": 68 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0064.png", + "frame": { "x": 466, "y": 353, "w": 73, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 19, "y": 10, "w": 71, "h": 68 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0065.png", + "frame": { "x": 1, "y": 352, "w": 73, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 10, "w": 71, "h": 68 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0066.png", + "frame": { "x": 306, "y": 360, "w": 73, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 17, "y": 11, "w": 71, "h": 67 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0067.png", + "frame": { "x": 392, "y": 304, "w": 74, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 15, "y": 10, "w": 72, "h": 68 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0068.png", + "frame": { "x": 1, "y": 283, "w": 76, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 11, "w": 74, "h": 67 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0069.png", + "frame": { "x": 403, "y": 235, "w": 77, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 11, "w": 75, "h": 67 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0070.png", + "frame": { "x": 565, "y": 215, "w": 78, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 11, "w": 76, "h": 67 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0071.png", + "frame": { "x": 246, "y": 222, "w": 78, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 11, "w": 76, "h": 67 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0072.png", + "frame": { "x": 80, "y": 282, "w": 78, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 12, "w": 76, "h": 66 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0073.png", + "frame": { "x": 227, "y": 291, "w": 78, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 13, "w": 76, "h": 65 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0074.png", + "frame": { "x": 556, "y": 352, "w": 80, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 16, "w": 78, "h": 62 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0075.png", + "frame": { "x": 226, "y": 358, "w": 80, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 17, "w": 78, "h": 61 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0076.png", + "frame": { "x": 74, "y": 420, "w": 76, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 16, "y": 16, "w": 74, "h": 62 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0077.png", + "frame": { "x": 452, "y": 423, "w": 68, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 20, "y": 13, "w": 66, "h": 65 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0078.png", + "frame": { "x": 1, "y": 422, "w": 65, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 21, "y": 8, "w": 63, "h": 70 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0079.png", + "frame": { "x": 539, "y": 416, "w": 64, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 20, "y": 3, "w": 62, "h": 75 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0080.png", + "frame": { "x": 160, "y": 229, "w": 67, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 0, "w": 65, "h": 78 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0081.png", + "frame": { "x": 427, "y": 77, "w": 72, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 15, "y": 0, "w": 70, "h": 78 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0082.png", + "frame": { "x": 588, "y": 1, "w": 76, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 0, "w": 74, "h": 78 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0083.png", + "frame": { "x": 511, "y": 1, "w": 77, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 0, "w": 75, "h": 78 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0084.png", + "frame": { "x": 258, "y": 74, "w": 75, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 2, "w": 73, "h": 76 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0085.png", + "frame": { "x": 417, "y": 157, "w": 70, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 2, "w": 68, "h": 76 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0086.png", + "frame": { "x": 324, "y": 282, "w": 68, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 2, "w": 66, "h": 76 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0087.png", + "frame": { "x": 636, "y": 284, "w": 65, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 15, "y": 2, "w": 63, "h": 76 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0088.png", + "frame": { "x": 636, "y": 362, "w": 63, "h": 79 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 1, "w": 61, "h": 77 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0089.png", + "frame": { "x": 175, "y": 80, "w": 71, "h": 79 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 1, "w": 69, "h": 77 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0090.png", + "frame": { "x": 346, "y": 1, "w": 81, "h": 79 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 1, "w": 79, "h": 77 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0091.png", + "frame": { "x": 88, "y": 1, "w": 86, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 84, "h": 78 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0092.png", + "frame": { "x": 1, "y": 1, "w": 87, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 85, "h": 78 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0093.png", + "frame": { "x": 174, "y": 1, "w": 84, "h": 79 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 82, "h": 77 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0094.png", + "frame": { "x": 427, "y": 1, "w": 84, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 82, "h": 74 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0095.png", + "frame": { "x": 258, "y": 1, "w": 88, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 7, "w": 86, "h": 71 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0096.png", + "frame": { "x": 556, "y": 284, "w": 77, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 12, "w": 75, "h": 66 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0097.png", + "frame": { "x": 151, "y": 419, "w": 71, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 12, "w": 69, "h": 66 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0098.png", + "frame": { "x": 222, "y": 421, "w": 71, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 12, "w": 69, "h": 66 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0099.png", + "frame": { "x": 379, "y": 374, "w": 73, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 16, "y": 12, "w": 71, "h": 66 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0100.png", + "frame": { "x": 151, "y": 350, "w": 75, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 11, "w": 73, "h": 67 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0101.png", + "frame": { "x": 480, "y": 284, "w": 76, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 11, "w": 74, "h": 67 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0102.png", + "frame": { "x": 487, "y": 215, "w": 78, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 11, "w": 76, "h": 67 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.13-x64", + "image": "750.png", + "format": "I8", + "size": { "w": 702, "h": 495 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/back/750.png b/public/images/pokemon/exp/back/750.png index 4ac4682a955..1c9391b5f7a 100644 Binary files a/public/images/pokemon/exp/back/750.png and b/public/images/pokemon/exp/back/750.png differ diff --git a/public/images/pokemon/exp/back/780.json b/public/images/pokemon/exp/back/780.json index 6a6dc7a0f38..af67efba2a0 100644 --- a/public/images/pokemon/exp/back/780.json +++ b/public/images/pokemon/exp/back/780.json @@ -1,230 +1,884 @@ -{ - "textures": [ - { - "image": "780.png", - "format": "RGBA8888", - "size": { - "w": 183, - "h": 183 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 86, - "h": 62 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 86, - "h": 62 - }, - "frame": { - "x": 0, - "y": 0, - "w": 86, - "h": 62 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 62 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 85, - "h": 62 - }, - "frame": { - "x": 0, - "y": 62, - "w": 85, - "h": 62 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 62 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 85, - "h": 62 - }, - "frame": { - "x": 0, - "y": 62, - "w": 85, - "h": 62 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 62 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 83, - "h": 62 - }, - "frame": { - "x": 85, - "y": 62, - "w": 83, - "h": 62 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 62 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 83, - "h": 62 - }, - "frame": { - "x": 85, - "y": 62, - "w": 83, - "h": 62 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 62 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 82, - "h": 61 - }, - "frame": { - "x": 86, - "y": 0, - "w": 82, - "h": 61 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 62 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 82, - "h": 61 - }, - "frame": { - "x": 86, - "y": 0, - "w": 82, - "h": 61 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 62 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 81, - "h": 59 - }, - "frame": { - "x": 0, - "y": 124, - "w": 81, - "h": 59 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 62 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 81, - "h": 59 - }, - "frame": { - "x": 0, - "y": 124, - "w": 81, - "h": 59 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 62 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 79, - "h": 59 - }, - "frame": { - "x": 81, - "y": 124, - "w": 79, - "h": 59 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:248a786810697270e14c6ebc74f4c011:d66b0c13068d3a83b9b49f5d2fdc42b5:9470182902340de73b2565411cb0ab89$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 1, "y": 153, "w": 82, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 9, "w": 82, "h": 70 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 490, "y": 147, "w": 82, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 9, "w": 82, "h": 70 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 246, "y": 148, "w": 82, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 9, "w": 82, "h": 70 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 329, "y": 148, "w": 82, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 9, "w": 82, "h": 70 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 167, "y": 219, "w": 82, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 10, "w": 82, "h": 69 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 250, "y": 219, "w": 82, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 10, "w": 82, "h": 69 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 84, "y": 221, "w": 82, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 10, "w": 82, "h": 69 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 1, "y": 294, "w": 82, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 11, "w": 82, "h": 68 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 331, "y": 359, "w": 81, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 11, "w": 81, "h": 68 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 249, "y": 359, "w": 81, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 11, "w": 81, "h": 68 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 83, "y": 428, "w": 81, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 12, "w": 81, "h": 67 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0012.png", + "frame": { "x": 1, "y": 363, "w": 81, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 12, "w": 81, "h": 67 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0013.png", + "frame": { "x": 84, "y": 360, "w": 81, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 12, "w": 81, "h": 67 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0014.png", + "frame": { "x": 167, "y": 359, "w": 81, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 11, "w": 81, "h": 68 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0015.png", + "frame": { "x": 415, "y": 289, "w": 81, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 10, "w": 81, "h": 69 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0016.png", + "frame": { "x": 333, "y": 289, "w": 81, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 10, "w": 81, "h": 69 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0017.png", + "frame": { "x": 250, "y": 289, "w": 82, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 10, "w": 82, "h": 69 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0018.png", + "frame": { "x": 84, "y": 150, "w": 82, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 9, "w": 82, "h": 70 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0019.png", + "frame": { "x": 1, "y": 153, "w": 82, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 9, "w": 82, "h": 70 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0020.png", + "frame": { "x": 490, "y": 147, "w": 82, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 9, "w": 82, "h": 70 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0021.png", + "frame": { "x": 246, "y": 148, "w": 82, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 9, "w": 82, "h": 70 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0022.png", + "frame": { "x": 329, "y": 148, "w": 82, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 9, "w": 82, "h": 70 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0023.png", + "frame": { "x": 167, "y": 219, "w": 82, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 10, "w": 82, "h": 69 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0024.png", + "frame": { "x": 250, "y": 219, "w": 82, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 10, "w": 82, "h": 69 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0025.png", + "frame": { "x": 84, "y": 221, "w": 82, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 10, "w": 82, "h": 69 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0026.png", + "frame": { "x": 1, "y": 294, "w": 82, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 11, "w": 82, "h": 68 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0027.png", + "frame": { "x": 331, "y": 359, "w": 81, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 11, "w": 81, "h": 68 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0028.png", + "frame": { "x": 249, "y": 359, "w": 81, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 11, "w": 81, "h": 68 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0029.png", + "frame": { "x": 83, "y": 428, "w": 81, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 12, "w": 81, "h": 67 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0030.png", + "frame": { "x": 1, "y": 363, "w": 81, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 12, "w": 81, "h": 67 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0031.png", + "frame": { "x": 84, "y": 360, "w": 81, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 12, "w": 81, "h": 67 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0032.png", + "frame": { "x": 167, "y": 359, "w": 81, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 11, "w": 81, "h": 68 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0033.png", + "frame": { "x": 415, "y": 289, "w": 81, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 10, "w": 81, "h": 69 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0034.png", + "frame": { "x": 333, "y": 289, "w": 81, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 10, "w": 81, "h": 69 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0035.png", + "frame": { "x": 250, "y": 289, "w": 82, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 10, "w": 82, "h": 69 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0036.png", + "frame": { "x": 84, "y": 150, "w": 82, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 9, "w": 82, "h": 70 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0037.png", + "frame": { "x": 1, "y": 153, "w": 82, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 9, "w": 82, "h": 70 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0038.png", + "frame": { "x": 490, "y": 147, "w": 82, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 9, "w": 82, "h": 70 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0039.png", + "frame": { "x": 246, "y": 148, "w": 82, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 9, "w": 82, "h": 70 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0040.png", + "frame": { "x": 329, "y": 148, "w": 82, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 9, "w": 82, "h": 70 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0041.png", + "frame": { "x": 167, "y": 219, "w": 82, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 10, "w": 82, "h": 69 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0042.png", + "frame": { "x": 250, "y": 219, "w": 82, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 10, "w": 82, "h": 69 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0043.png", + "frame": { "x": 84, "y": 221, "w": 82, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 10, "w": 82, "h": 69 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0044.png", + "frame": { "x": 1, "y": 294, "w": 82, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 11, "w": 82, "h": 68 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0045.png", + "frame": { "x": 331, "y": 359, "w": 81, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 11, "w": 81, "h": 68 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0046.png", + "frame": { "x": 249, "y": 359, "w": 81, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 11, "w": 81, "h": 68 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0047.png", + "frame": { "x": 83, "y": 428, "w": 81, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 12, "w": 81, "h": 67 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0048.png", + "frame": { "x": 1, "y": 363, "w": 81, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 12, "w": 81, "h": 67 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0049.png", + "frame": { "x": 84, "y": 360, "w": 81, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 12, "w": 81, "h": 67 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0050.png", + "frame": { "x": 167, "y": 359, "w": 81, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 11, "w": 81, "h": 68 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0051.png", + "frame": { "x": 415, "y": 289, "w": 81, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 10, "w": 81, "h": 69 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0052.png", + "frame": { "x": 333, "y": 289, "w": 81, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 10, "w": 81, "h": 69 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0053.png", + "frame": { "x": 250, "y": 289, "w": 82, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 10, "w": 82, "h": 69 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0054.png", + "frame": { "x": 84, "y": 150, "w": 82, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 9, "w": 82, "h": 70 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0055.png", + "frame": { "x": 1, "y": 153, "w": 82, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 9, "w": 82, "h": 70 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0056.png", + "frame": { "x": 490, "y": 147, "w": 82, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 9, "w": 82, "h": 70 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0057.png", + "frame": { "x": 246, "y": 148, "w": 82, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 9, "w": 82, "h": 70 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0058.png", + "frame": { "x": 329, "y": 148, "w": 82, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 9, "w": 82, "h": 70 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0059.png", + "frame": { "x": 167, "y": 219, "w": 82, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 10, "w": 82, "h": 69 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0060.png", + "frame": { "x": 250, "y": 219, "w": 82, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 10, "w": 82, "h": 69 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0061.png", + "frame": { "x": 84, "y": 221, "w": 82, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 10, "w": 82, "h": 69 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0062.png", + "frame": { "x": 1, "y": 294, "w": 82, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 11, "w": 82, "h": 68 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0063.png", + "frame": { "x": 331, "y": 359, "w": 81, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 11, "w": 81, "h": 68 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0064.png", + "frame": { "x": 249, "y": 359, "w": 81, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 11, "w": 81, "h": 68 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0065.png", + "frame": { "x": 83, "y": 428, "w": 81, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 12, "w": 81, "h": 67 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0066.png", + "frame": { "x": 1, "y": 363, "w": 81, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 12, "w": 81, "h": 67 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0067.png", + "frame": { "x": 84, "y": 360, "w": 81, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 12, "w": 81, "h": 67 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0068.png", + "frame": { "x": 167, "y": 359, "w": 81, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 11, "w": 81, "h": 68 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0069.png", + "frame": { "x": 415, "y": 289, "w": 81, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 10, "w": 81, "h": 69 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0070.png", + "frame": { "x": 333, "y": 289, "w": 81, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 10, "w": 81, "h": 69 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0071.png", + "frame": { "x": 250, "y": 289, "w": 82, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 10, "w": 82, "h": 69 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0072.png", + "frame": { "x": 84, "y": 150, "w": 82, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 9, "w": 82, "h": 70 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0073.png", + "frame": { "x": 1, "y": 153, "w": 82, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 9, "w": 82, "h": 70 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0074.png", + "frame": { "x": 1, "y": 81, "w": 82, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 8, "w": 82, "h": 71 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0075.png", + "frame": { "x": 490, "y": 75, "w": 82, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 8, "w": 82, "h": 71 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0076.png", + "frame": { "x": 325, "y": 75, "w": 82, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 7, "w": 82, "h": 72 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0077.png", + "frame": { "x": 408, "y": 75, "w": 81, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 7, "w": 81, "h": 72 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0078.png", + "frame": { "x": 407, "y": 1, "w": 81, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 6, "w": 81, "h": 73 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0079.png", + "frame": { "x": 325, "y": 1, "w": 81, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 6, "w": 81, "h": 73 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0080.png", + "frame": { "x": 163, "y": 78, "w": 82, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 8, "w": 82, "h": 71 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0081.png", + "frame": { "x": 84, "y": 291, "w": 82, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 11, "w": 82, "h": 68 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0082.png", + "frame": { "x": 495, "y": 218, "w": 80, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 10, "w": 80, "h": 69 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0083.png", + "frame": { "x": 243, "y": 1, "w": 81, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 5, "w": 81, "h": 74 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0084.png", + "frame": { "x": 83, "y": 1, "w": 79, "h": 79 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 79, "h": 79 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0085.png", + "frame": { "x": 1, "y": 1, "w": 81, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 81, "h": 78 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0086.png", + "frame": { "x": 83, "y": 1, "w": 79, "h": 79 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 79, "h": 79 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0087.png", + "frame": { "x": 1, "y": 1, "w": 81, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 81, "h": 78 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0088.png", + "frame": { "x": 83, "y": 1, "w": 79, "h": 79 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 79, "h": 79 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0089.png", + "frame": { "x": 1, "y": 1, "w": 81, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 81, "h": 78 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0090.png", + "frame": { "x": 163, "y": 1, "w": 79, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 79, "h": 76 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0091.png", + "frame": { "x": 489, "y": 1, "w": 81, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 6, "w": 81, "h": 73 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0092.png", + "frame": { "x": 247, "y": 428, "w": 82, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 14, "w": 82, "h": 65 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0093.png", + "frame": { "x": 165, "y": 428, "w": 81, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 12, "w": 81, "h": 67 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0094.png", + "frame": { "x": 413, "y": 359, "w": 81, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 11, "w": 81, "h": 68 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0095.png", + "frame": { "x": 1, "y": 224, "w": 82, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 10, "w": 82, "h": 69 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0096.png", + "frame": { "x": 167, "y": 289, "w": 82, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 10, "w": 82, "h": 69 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0097.png", + "frame": { "x": 412, "y": 218, "w": 82, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 9, "w": 82, "h": 70 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.13-x64", + "image": "780.png", + "format": "I8", + "size": { "w": 576, "h": 496 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/back/780.png b/public/images/pokemon/exp/back/780.png index aa85f9ed535..595476cf717 100644 Binary files a/public/images/pokemon/exp/back/780.png and b/public/images/pokemon/exp/back/780.png differ diff --git a/public/images/pokemon/exp/back/shiny/2037.json b/public/images/pokemon/exp/back/shiny/2037.json index 01259c3dc3d..790321704de 100644 --- a/public/images/pokemon/exp/back/shiny/2037.json +++ b/public/images/pokemon/exp/back/shiny/2037.json @@ -1,188 +1,101 @@ -{ - "textures": [ - { - "image": "2037.png", - "format": "RGBA8888", - "size": { - "w": 150, - "h": 150 - }, - "scale": 1, - "frames": [ - { - "filename": "0004.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 61, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 61, - "h": 50 - }, - "frame": { - "x": 0, - "y": 0, - "w": 61, - "h": 50 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 61, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 61, - "h": 50 - }, - "frame": { - "x": 61, - "y": 0, - "w": 61, - "h": 50 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 61, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 60, - "h": 50 - }, - "frame": { - "x": 0, - "y": 50, - "w": 60, - "h": 50 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 61, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 60, - "h": 50 - }, - "frame": { - "x": 0, - "y": 50, - "w": 60, - "h": 50 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 61, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 59, - "h": 50 - }, - "frame": { - "x": 0, - "y": 100, - "w": 59, - "h": 50 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 61, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 59, - "h": 50 - }, - "frame": { - "x": 59, - "y": 100, - "w": 59, - "h": 50 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 61, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 59, - "h": 50 - }, - "frame": { - "x": 59, - "y": 100, - "w": 59, - "h": 50 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 61, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 61, - "h": 48 - }, - "frame": { - "x": 60, - "y": 50, - "w": 61, - "h": 48 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:c26c3a06a7e949ac3da512bb0c218169:1561eac8f519c7efd877f2e03ea21708:c679847d1c2ddf91caeaa5ebb76a6664$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 1, "y": 50, "w": 58, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 0, "w": 58, "h": 49 }, + "sourceSize": { "w": 63, "h": 49 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 60, "y": 50, "w": 58, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 1, "w": 58, "h": 48 }, + "sourceSize": { "w": 63, "h": 49 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 119, "y": 50, "w": 58, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 1, "w": 58, "h": 48 }, + "sourceSize": { "w": 63, "h": 49 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 60, "y": 99, "w": 56, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 3, "w": 56, "h": 46 }, + "sourceSize": { "w": 63, "h": 49 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 178, "y": 98, "w": 58, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 58, "h": 46 }, + "sourceSize": { "w": 63, "h": 49 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 178, "y": 51, "w": 60, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 60, "h": 46 }, + "sourceSize": { "w": 63, "h": 49 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 1, "y": 1, "w": 63, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 63, "h": 48 }, + "sourceSize": { "w": 63, "h": 49 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 65, "y": 1, "w": 62, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 62, "h": 48 }, + "sourceSize": { "w": 63, "h": 49 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 128, "y": 1, "w": 61, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 61, "h": 48 }, + "sourceSize": { "w": 63, "h": 49 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 190, "y": 1, "w": 59, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 59, "h": 49 }, + "sourceSize": { "w": 63, "h": 49 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.13-x64", + "image": "2037.png", + "format": "I8", + "size": { "w": 250, "h": 146 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/back/shiny/2037.png b/public/images/pokemon/exp/back/shiny/2037.png index af9318d53b1..d5443e7d642 100644 Binary files a/public/images/pokemon/exp/back/shiny/2037.png and b/public/images/pokemon/exp/back/shiny/2037.png differ diff --git a/public/images/pokemon/exp/back/shiny/2038.json b/public/images/pokemon/exp/back/shiny/2038.json index 28b88e1c5d5..af164a77c57 100644 --- a/public/images/pokemon/exp/back/shiny/2038.json +++ b/public/images/pokemon/exp/back/shiny/2038.json @@ -1,692 +1,155 @@ -{ - "textures": [ - { - "image": "2038.png", - "format": "RGBA8888", - "size": { - "w": 514, - "h": 514 - }, - "scale": 1, - "frames": [ - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 111, - "h": 73 - }, - "spriteSourceSize": { - "x": 10, - "y": 8, - "w": 101, - "h": 63 - }, - "frame": { - "x": 0, - "y": 0, - "w": 101, - "h": 63 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 111, - "h": 73 - }, - "spriteSourceSize": { - "x": 9, - "y": 8, - "w": 102, - "h": 64 - }, - "frame": { - "x": 101, - "y": 0, - "w": 102, - "h": 64 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 111, - "h": 73 - }, - "spriteSourceSize": { - "x": 12, - "y": 7, - "w": 99, - "h": 64 - }, - "frame": { - "x": 203, - "y": 0, - "w": 99, - "h": 64 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 111, - "h": 73 - }, - "spriteSourceSize": { - "x": 12, - "y": 7, - "w": 99, - "h": 64 - }, - "frame": { - "x": 302, - "y": 0, - "w": 99, - "h": 64 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 111, - "h": 73 - }, - "spriteSourceSize": { - "x": 12, - "y": 7, - "w": 98, - "h": 64 - }, - "frame": { - "x": 401, - "y": 0, - "w": 98, - "h": 64 - } - }, - { - "filename": "0017.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 111, - "h": 73 - }, - "spriteSourceSize": { - "x": 12, - "y": 6, - "w": 98, - "h": 65 - }, - "frame": { - "x": 0, - "y": 63, - "w": 98, - "h": 65 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 111, - "h": 73 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 111, - "h": 65 - }, - "frame": { - "x": 98, - "y": 64, - "w": 111, - "h": 65 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 111, - "h": 73 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 111, - "h": 65 - }, - "frame": { - "x": 209, - "y": 64, - "w": 111, - "h": 65 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 111, - "h": 73 - }, - "spriteSourceSize": { - "x": 7, - "y": 8, - "w": 104, - "h": 65 - }, - "frame": { - "x": 320, - "y": 64, - "w": 104, - "h": 65 - } - }, - { - "filename": "0018.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 111, - "h": 73 - }, - "spriteSourceSize": { - "x": 12, - "y": 6, - "w": 97, - "h": 65 - }, - "frame": { - "x": 0, - "y": 128, - "w": 97, - "h": 65 - } - }, - { - "filename": "0019.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 111, - "h": 73 - }, - "spriteSourceSize": { - "x": 12, - "y": 6, - "w": 97, - "h": 65 - }, - "frame": { - "x": 97, - "y": 129, - "w": 97, - "h": 65 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 111, - "h": 73 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 111, - "h": 66 - }, - "frame": { - "x": 194, - "y": 129, - "w": 111, - "h": 66 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 111, - "h": 73 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 111, - "h": 66 - }, - "frame": { - "x": 305, - "y": 129, - "w": 111, - "h": 66 - } - }, - { - "filename": "0020.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 111, - "h": 73 - }, - "spriteSourceSize": { - "x": 11, - "y": 5, - "w": 98, - "h": 66 - }, - "frame": { - "x": 416, - "y": 129, - "w": 98, - "h": 66 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 111, - "h": 73 - }, - "spriteSourceSize": { - "x": 1, - "y": 7, - "w": 110, - "h": 66 - }, - "frame": { - "x": 0, - "y": 194, - "w": 110, - "h": 66 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 111, - "h": 73 - }, - "spriteSourceSize": { - "x": 3, - "y": 7, - "w": 108, - "h": 66 - }, - "frame": { - "x": 110, - "y": 195, - "w": 108, - "h": 66 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 111, - "h": 73 - }, - "spriteSourceSize": { - "x": 5, - "y": 7, - "w": 106, - "h": 66 - }, - "frame": { - "x": 218, - "y": 195, - "w": 106, - "h": 66 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 111, - "h": 73 - }, - "spriteSourceSize": { - "x": 2, - "y": 4, - "w": 109, - "h": 67 - }, - "frame": { - "x": 324, - "y": 195, - "w": 109, - "h": 67 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 111, - "h": 73 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 111, - "h": 67 - }, - "frame": { - "x": 0, - "y": 261, - "w": 111, - "h": 67 - } - }, - { - "filename": "0021.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 111, - "h": 73 - }, - "spriteSourceSize": { - "x": 10, - "y": 3, - "w": 98, - "h": 68 - }, - "frame": { - "x": 111, - "y": 261, - "w": 98, - "h": 68 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 111, - "h": 73 - }, - "spriteSourceSize": { - "x": 3, - "y": 2, - "w": 108, - "h": 69 - }, - "frame": { - "x": 209, - "y": 261, - "w": 108, - "h": 69 - } - }, - { - "filename": "0022.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 111, - "h": 73 - }, - "spriteSourceSize": { - "x": 10, - "y": 2, - "w": 98, - "h": 69 - }, - "frame": { - "x": 317, - "y": 262, - "w": 98, - "h": 69 - } - }, - { - "filename": "0023.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 111, - "h": 73 - }, - "spriteSourceSize": { - "x": 9, - "y": 1, - "w": 98, - "h": 70 - }, - "frame": { - "x": 415, - "y": 262, - "w": 98, - "h": 70 - } - }, - { - "filename": "0031.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 111, - "h": 73 - }, - "spriteSourceSize": { - "x": 4, - "y": 1, - "w": 106, - "h": 70 - }, - "frame": { - "x": 0, - "y": 328, - "w": 106, - "h": 70 - } - }, - { - "filename": "0024.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 111, - "h": 73 - }, - "spriteSourceSize": { - "x": 8, - "y": 0, - "w": 99, - "h": 71 - }, - "frame": { - "x": 106, - "y": 329, - "w": 99, - "h": 71 - } - }, - { - "filename": "0032.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 111, - "h": 73 - }, - "spriteSourceSize": { - "x": 5, - "y": 1, - "w": 106, - "h": 70 - }, - "frame": { - "x": 205, - "y": 330, - "w": 106, - "h": 70 - } - }, - { - "filename": "0025.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 111, - "h": 73 - }, - "spriteSourceSize": { - "x": 8, - "y": 0, - "w": 98, - "h": 71 - }, - "frame": { - "x": 311, - "y": 331, - "w": 98, - "h": 71 - } - }, - { - "filename": "0026.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 111, - "h": 73 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 100, - "h": 71 - }, - "frame": { - "x": 409, - "y": 332, - "w": 100, - "h": 71 - } - }, - { - "filename": "0027.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 111, - "h": 73 - }, - "spriteSourceSize": { - "x": 6, - "y": 0, - "w": 102, - "h": 71 - }, - "frame": { - "x": 0, - "y": 398, - "w": 102, - "h": 71 - } - }, - { - "filename": "0028.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 111, - "h": 73 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 103, - "h": 71 - }, - "frame": { - "x": 102, - "y": 400, - "w": 103, - "h": 71 - } - }, - { - "filename": "0029.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 111, - "h": 73 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 104, - "h": 71 - }, - "frame": { - "x": 205, - "y": 400, - "w": 104, - "h": 71 - } - }, - { - "filename": "0030.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 111, - "h": 73 - }, - "spriteSourceSize": { - "x": 4, - "y": 0, - "w": 106, - "h": 71 - }, - "frame": { - "x": 309, - "y": 403, - "w": 106, - "h": 71 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:daba98eede1b4cafdaf3d2c2d7ef907f:c4d90754ddb58ba739191c8fc94a8f24:51bcdbb4fa6a1a9e90a83c2a4132ee1b$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 232, "y": 198, "w": 74, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 2, "w": 74, "h": 62 }, + "sourceSize": { "w": 82, "h": 69 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 155, "y": 132, "w": 78, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 78, "h": 65 }, + "sourceSize": { "w": 82, "h": 69 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 156, "y": 66, "w": 78, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 78, "h": 66 }, + "sourceSize": { "w": 82, "h": 69 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 78, "y": 134, "w": 77, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 77, "h": 64 }, + "sourceSize": { "w": 82, "h": 69 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 75, "y": 198, "w": 77, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 3, "w": 77, "h": 61 }, + "sourceSize": { "w": 82, "h": 69 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 0, "y": 134, "w": 78, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 78, "h": 64 }, + "sourceSize": { "w": 82, "h": 69 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 234, "y": 67, "w": 78, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 78, "h": 66 }, + "sourceSize": { "w": 82, "h": 69 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 233, "y": 133, "w": 78, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 78, "h": 65 }, + "sourceSize": { "w": 82, "h": 69 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 155, "y": 197, "w": 77, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 77, "h": 63 }, + "sourceSize": { "w": 82, "h": 69 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 156, "y": 0, "w": 79, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 79, "h": 66 }, + "sourceSize": { "w": 82, "h": 69 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 0, "y": 0, "w": 78, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 78, "h": 68 }, + "sourceSize": { "w": 82, "h": 69 }, + "duration": 100 + }, + { + "filename": "0012.png", + "frame": { "x": 235, "y": 0, "w": 77, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 0, "w": 77, "h": 67 }, + "sourceSize": { "w": 82, "h": 69 }, + "duration": 100 + }, + { + "filename": "0013.png", + "frame": { "x": 0, "y": 198, "w": 75, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 75, "h": 64 }, + "sourceSize": { "w": 82, "h": 69 }, + "duration": 100 + }, + { + "filename": "0014.png", + "frame": { "x": 0, "y": 68, "w": 78, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 78, "h": 66 }, + "sourceSize": { "w": 82, "h": 69 }, + "duration": 100 + }, + { + "filename": "0015.png", + "frame": { "x": 78, "y": 0, "w": 78, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 1, "w": 78, "h": 68 }, + "sourceSize": { "w": 82, "h": 69 }, + "duration": 100 + }, + { + "filename": "0016.png", + "frame": { "x": 78, "y": 68, "w": 77, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 1, "w": 77, "h": 66 }, + "sourceSize": { "w": 82, "h": 69 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.13-x64", + "image": "2038.png", + "format": "I8", + "size": { "w": 312, "h": 262 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/back/shiny/2038.png b/public/images/pokemon/exp/back/shiny/2038.png index 7452a07959e..33c5406bbb7 100644 Binary files a/public/images/pokemon/exp/back/shiny/2038.png and b/public/images/pokemon/exp/back/shiny/2038.png differ diff --git a/public/images/pokemon/exp/back/shiny/2074.json b/public/images/pokemon/exp/back/shiny/2074.json index 3750e354036..d7500c522e9 100644 --- a/public/images/pokemon/exp/back/shiny/2074.json +++ b/public/images/pokemon/exp/back/shiny/2074.json @@ -1,230 +1,398 @@ -{ - "textures": [ - { - "image": "2074.png", - "format": "RGBA8888", - "size": { - "w": 108, - "h": 108 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 57, - "h": 43 - }, - "spriteSourceSize": { - "x": 0, - "y": 11, - "w": 57, - "h": 32 - }, - "frame": { - "x": 0, - "y": 0, - "w": 57, - "h": 32 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 57, - "h": 43 - }, - "spriteSourceSize": { - "x": 1, - "y": 9, - "w": 56, - "h": 33 - }, - "frame": { - "x": 0, - "y": 32, - "w": 56, - "h": 33 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 57, - "h": 43 - }, - "spriteSourceSize": { - "x": 1, - "y": 9, - "w": 56, - "h": 33 - }, - "frame": { - "x": 0, - "y": 32, - "w": 56, - "h": 33 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 57, - "h": 43 - }, - "spriteSourceSize": { - "x": 1, - "y": 6, - "w": 54, - "h": 34 - }, - "frame": { - "x": 0, - "y": 65, - "w": 54, - "h": 34 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 57, - "h": 43 - }, - "spriteSourceSize": { - "x": 1, - "y": 6, - "w": 54, - "h": 34 - }, - "frame": { - "x": 0, - "y": 65, - "w": 54, - "h": 34 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 57, - "h": 43 - }, - "spriteSourceSize": { - "x": 2, - "y": 4, - "w": 51, - "h": 34 - }, - "frame": { - "x": 57, - "y": 0, - "w": 51, - "h": 34 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 57, - "h": 43 - }, - "spriteSourceSize": { - "x": 2, - "y": 4, - "w": 51, - "h": 34 - }, - "frame": { - "x": 57, - "y": 0, - "w": 51, - "h": 34 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 57, - "h": 43 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 51, - "h": 35 - }, - "frame": { - "x": 56, - "y": 34, - "w": 51, - "h": 35 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 57, - "h": 43 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 51, - "h": 35 - }, - "frame": { - "x": 56, - "y": 34, - "w": 51, - "h": 35 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 57, - "h": 43 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 51, - "h": 34 - }, - "frame": { - "x": 54, - "y": 69, - "w": 51, - "h": 34 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:83d00ed4c6a02e60a38ac9aee06d8c3c:775f78f8cdeebcc0ae0338af2fc1f6c7:ad137687a877f55f096b7447bfdfe295$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 63, "y": 100, "w": 59, "h": 32 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 2, "w": 59, "h": 32 }, + "sourceSize": { "w": 71, "h": 44 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 195, "y": 99, "w": 61, "h": 32 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 5, "w": 61, "h": 32 }, + "sourceSize": { "w": 71, "h": 44 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 131, "y": 68, "w": 64, "h": 32 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 9, "w": 64, "h": 32 }, + "sourceSize": { "w": 71, "h": 44 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 203, "y": 67, "w": 65, "h": 32 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 12, "w": 65, "h": 32 }, + "sourceSize": { "w": 71, "h": 44 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 1, "y": 35, "w": 66, "h": 32 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 12, "w": 66, "h": 32 }, + "sourceSize": { "w": 71, "h": 44 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 1, "y": 67, "w": 66, "h": 32 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 12, "w": 66, "h": 32 }, + "sourceSize": { "w": 71, "h": 44 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 1, "y": 35, "w": 66, "h": 32 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 10, "w": 66, "h": 32 }, + "sourceSize": { "w": 71, "h": 44 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 203, "y": 67, "w": 65, "h": 32 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 8, "w": 65, "h": 32 }, + "sourceSize": { "w": 71, "h": 44 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 131, "y": 68, "w": 64, "h": 32 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 6, "w": 64, "h": 32 }, + "sourceSize": { "w": 71, "h": 44 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 195, "y": 99, "w": 61, "h": 32 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 4, "w": 61, "h": 32 }, + "sourceSize": { "w": 71, "h": 44 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 63, "y": 100, "w": 59, "h": 32 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 2, "w": 59, "h": 32 }, + "sourceSize": { "w": 71, "h": 44 }, + "duration": 100 + }, + { + "filename": "0012.png", + "frame": { "x": 195, "y": 99, "w": 61, "h": 32 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 5, "w": 61, "h": 32 }, + "sourceSize": { "w": 71, "h": 44 }, + "duration": 100 + }, + { + "filename": "0013.png", + "frame": { "x": 131, "y": 68, "w": 64, "h": 32 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 9, "w": 64, "h": 32 }, + "sourceSize": { "w": 71, "h": 44 }, + "duration": 100 + }, + { + "filename": "0014.png", + "frame": { "x": 203, "y": 67, "w": 65, "h": 32 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 12, "w": 65, "h": 32 }, + "sourceSize": { "w": 71, "h": 44 }, + "duration": 100 + }, + { + "filename": "0015.png", + "frame": { "x": 1, "y": 35, "w": 66, "h": 32 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 12, "w": 66, "h": 32 }, + "sourceSize": { "w": 71, "h": 44 }, + "duration": 100 + }, + { + "filename": "0016.png", + "frame": { "x": 1, "y": 67, "w": 66, "h": 32 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 12, "w": 66, "h": 32 }, + "sourceSize": { "w": 71, "h": 44 }, + "duration": 100 + }, + { + "filename": "0017.png", + "frame": { "x": 1, "y": 35, "w": 66, "h": 32 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 10, "w": 66, "h": 32 }, + "sourceSize": { "w": 71, "h": 44 }, + "duration": 100 + }, + { + "filename": "0018.png", + "frame": { "x": 203, "y": 67, "w": 65, "h": 32 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 8, "w": 65, "h": 32 }, + "sourceSize": { "w": 71, "h": 44 }, + "duration": 100 + }, + { + "filename": "0019.png", + "frame": { "x": 131, "y": 68, "w": 64, "h": 32 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 6, "w": 64, "h": 32 }, + "sourceSize": { "w": 71, "h": 44 }, + "duration": 100 + }, + { + "filename": "0020.png", + "frame": { "x": 195, "y": 99, "w": 61, "h": 32 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 4, "w": 61, "h": 32 }, + "sourceSize": { "w": 71, "h": 44 }, + "duration": 100 + }, + { + "filename": "0021.png", + "frame": { "x": 63, "y": 100, "w": 59, "h": 32 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 2, "w": 59, "h": 32 }, + "sourceSize": { "w": 71, "h": 44 }, + "duration": 100 + }, + { + "filename": "0022.png", + "frame": { "x": 195, "y": 99, "w": 61, "h": 32 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 5, "w": 61, "h": 32 }, + "sourceSize": { "w": 71, "h": 44 }, + "duration": 100 + }, + { + "filename": "0023.png", + "frame": { "x": 131, "y": 68, "w": 64, "h": 32 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 9, "w": 64, "h": 32 }, + "sourceSize": { "w": 71, "h": 44 }, + "duration": 100 + }, + { + "filename": "0024.png", + "frame": { "x": 203, "y": 67, "w": 65, "h": 32 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 12, "w": 65, "h": 32 }, + "sourceSize": { "w": 71, "h": 44 }, + "duration": 100 + }, + { + "filename": "0025.png", + "frame": { "x": 1, "y": 35, "w": 66, "h": 32 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 12, "w": 66, "h": 32 }, + "sourceSize": { "w": 71, "h": 44 }, + "duration": 100 + }, + { + "filename": "0026.png", + "frame": { "x": 1, "y": 67, "w": 66, "h": 32 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 12, "w": 66, "h": 32 }, + "sourceSize": { "w": 71, "h": 44 }, + "duration": 100 + }, + { + "filename": "0027.png", + "frame": { "x": 1, "y": 35, "w": 66, "h": 32 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 10, "w": 66, "h": 32 }, + "sourceSize": { "w": 71, "h": 44 }, + "duration": 100 + }, + { + "filename": "0028.png", + "frame": { "x": 203, "y": 67, "w": 65, "h": 32 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 8, "w": 65, "h": 32 }, + "sourceSize": { "w": 71, "h": 44 }, + "duration": 100 + }, + { + "filename": "0029.png", + "frame": { "x": 131, "y": 68, "w": 64, "h": 32 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 6, "w": 64, "h": 32 }, + "sourceSize": { "w": 71, "h": 44 }, + "duration": 100 + }, + { + "filename": "0030.png", + "frame": { "x": 195, "y": 99, "w": 61, "h": 32 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 4, "w": 61, "h": 32 }, + "sourceSize": { "w": 71, "h": 44 }, + "duration": 100 + }, + { + "filename": "0031.png", + "frame": { "x": 63, "y": 100, "w": 59, "h": 32 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 2, "w": 59, "h": 32 }, + "sourceSize": { "w": 71, "h": 44 }, + "duration": 100 + }, + { + "filename": "0032.png", + "frame": { "x": 268, "y": 68, "w": 62, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 5, "w": 62, "h": 33 }, + "sourceSize": { "w": 71, "h": 44 }, + "duration": 100 + }, + { + "filename": "0033.png", + "frame": { "x": 67, "y": 67, "w": 64, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 8, "w": 64, "h": 33 }, + "sourceSize": { "w": 71, "h": 44 }, + "duration": 100 + }, + { + "filename": "0034.png", + "frame": { "x": 203, "y": 34, "w": 66, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 8, "w": 66, "h": 33 }, + "sourceSize": { "w": 71, "h": 44 }, + "duration": 100 + }, + { + "filename": "0035.png", + "frame": { "x": 275, "y": 1, "w": 67, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 67, "h": 33 }, + "sourceSize": { "w": 71, "h": 44 }, + "duration": 100 + }, + { + "filename": "0036.png", + "frame": { "x": 71, "y": 1, "w": 68, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 68, "h": 33 }, + "sourceSize": { "w": 71, "h": 44 }, + "duration": 100 + }, + { + "filename": "0037.png", + "frame": { "x": 1, "y": 1, "w": 70, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 70, "h": 34 }, + "sourceSize": { "w": 71, "h": 44 }, + "duration": 100 + }, + { + "filename": "0038.png", + "frame": { "x": 139, "y": 1, "w": 68, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 0, "w": 68, "h": 33 }, + "sourceSize": { "w": 71, "h": 44 }, + "duration": 100 + }, + { + "filename": "0039.png", + "frame": { "x": 207, "y": 1, "w": 68, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 68, "h": 33 }, + "sourceSize": { "w": 71, "h": 44 }, + "duration": 100 + }, + { + "filename": "0040.png", + "frame": { "x": 71, "y": 34, "w": 67, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 67, "h": 33 }, + "sourceSize": { "w": 71, "h": 44 }, + "duration": 100 + }, + { + "filename": "0041.png", + "frame": { "x": 138, "y": 34, "w": 65, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 0, "w": 65, "h": 34 }, + "sourceSize": { "w": 71, "h": 44 }, + "duration": 100 + }, + { + "filename": "0042.png", + "frame": { "x": 269, "y": 34, "w": 64, "h": 34 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 0, "w": 64, "h": 34 }, + "sourceSize": { "w": 71, "h": 44 }, + "duration": 100 + }, + { + "filename": "0043.png", + "frame": { "x": 1, "y": 99, "w": 62, "h": 33 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 1, "w": 62, "h": 33 }, + "sourceSize": { "w": 71, "h": 44 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.13-x64", + "image": "2074.png", + "format": "I8", + "size": { "w": 343, "h": 133 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/back/shiny/2074.png b/public/images/pokemon/exp/back/shiny/2074.png index 84f0eea9eea..9db2c9ea0b0 100644 Binary files a/public/images/pokemon/exp/back/shiny/2074.png and b/public/images/pokemon/exp/back/shiny/2074.png differ diff --git a/public/images/pokemon/exp/back/shiny/2075.json b/public/images/pokemon/exp/back/shiny/2075.json index 94e0db4a192..76c9932c417 100644 --- a/public/images/pokemon/exp/back/shiny/2075.json +++ b/public/images/pokemon/exp/back/shiny/2075.json @@ -1,188 +1,812 @@ -{ - "textures": [ - { - "image": "2075.png", - "format": "RGBA8888", - "size": { - "w": 131, - "h": 131 - }, - "scale": 1, - "frames": [ - { - "filename": "0002.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 67, - "h": 44 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 67, - "h": 44 - }, - "frame": { - "x": 0, - "y": 0, - "w": 67, - "h": 44 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 67, - "h": 44 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 67, - "h": 44 - }, - "frame": { - "x": 0, - "y": 0, - "w": 67, - "h": 44 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 44 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 67, - "h": 43 - }, - "frame": { - "x": 0, - "y": 44, - "w": 67, - "h": 43 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 44 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 65, - "h": 44 - }, - "frame": { - "x": 0, - "y": 87, - "w": 65, - "h": 44 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 44 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 65, - "h": 44 - }, - "frame": { - "x": 0, - "y": 87, - "w": 65, - "h": 44 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 44 - }, - "spriteSourceSize": { - "x": 4, - "y": 0, - "w": 63, - "h": 44 - }, - "frame": { - "x": 65, - "y": 87, - "w": 63, - "h": 44 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 44 - }, - "spriteSourceSize": { - "x": 4, - "y": 0, - "w": 63, - "h": 44 - }, - "frame": { - "x": 65, - "y": 87, - "w": 63, - "h": 44 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 67, - "h": 44 - }, - "spriteSourceSize": { - "x": 6, - "y": 0, - "w": 61, - "h": 44 - }, - "frame": { - "x": 67, - "y": 0, - "w": 61, - "h": 44 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:e29904dcd6139adeb45191492d71f1e5:4dd0caa839bbbfbf24d378cf60fffd1b:732805cb123f88b2d403da0dec709706$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 145, "y": 1, "w": 71, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 0, "w": 71, "h": 43 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 216, "y": 1, "w": 71, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 0, "w": 71, "h": 43 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 412, "y": 88, "w": 69, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 0, "w": 69, "h": 42 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 210, "y": 210, "w": 67, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 0, "w": 67, "h": 42 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 1, "y": 250, "w": 65, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 0, "w": 65, "h": 42 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 210, "y": 210, "w": 67, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 0, "w": 67, "h": 42 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 412, "y": 88, "w": 69, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 0, "w": 69, "h": 42 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 216, "y": 1, "w": 71, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 0, "w": 71, "h": 43 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 145, "y": 1, "w": 71, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 0, "w": 71, "h": 43 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 429, "y": 1, "w": 71, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 0, "w": 71, "h": 43 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 73, "y": 1, "w": 72, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 0, "w": 72, "h": 43 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0012.png", + "frame": { "x": 1, "y": 1, "w": 72, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 0, "w": 72, "h": 43 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0013.png", + "frame": { "x": 287, "y": 1, "w": 71, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 0, "w": 71, "h": 43 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0014.png", + "frame": { "x": 1, "y": 1, "w": 72, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 0, "w": 72, "h": 43 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0015.png", + "frame": { "x": 73, "y": 1, "w": 72, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 0, "w": 72, "h": 43 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0016.png", + "frame": { "x": 429, "y": 1, "w": 71, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 0, "w": 71, "h": 43 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0017.png", + "frame": { "x": 145, "y": 1, "w": 71, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 0, "w": 71, "h": 43 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0018.png", + "frame": { "x": 216, "y": 1, "w": 71, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 0, "w": 71, "h": 43 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0019.png", + "frame": { "x": 412, "y": 88, "w": 69, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 0, "w": 69, "h": 42 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0020.png", + "frame": { "x": 210, "y": 210, "w": 67, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 0, "w": 67, "h": 42 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0021.png", + "frame": { "x": 1, "y": 250, "w": 65, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 0, "w": 65, "h": 42 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0022.png", + "frame": { "x": 210, "y": 210, "w": 67, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 0, "w": 67, "h": 42 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0023.png", + "frame": { "x": 412, "y": 88, "w": 69, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 0, "w": 69, "h": 42 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0024.png", + "frame": { "x": 216, "y": 1, "w": 71, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 0, "w": 71, "h": 43 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0025.png", + "frame": { "x": 145, "y": 1, "w": 71, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 0, "w": 71, "h": 43 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0026.png", + "frame": { "x": 429, "y": 1, "w": 71, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 0, "w": 71, "h": 43 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0027.png", + "frame": { "x": 73, "y": 1, "w": 72, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 0, "w": 72, "h": 43 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0028.png", + "frame": { "x": 1, "y": 1, "w": 72, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 0, "w": 72, "h": 43 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0029.png", + "frame": { "x": 287, "y": 1, "w": 71, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 0, "w": 71, "h": 43 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0030.png", + "frame": { "x": 1, "y": 1, "w": 72, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 0, "w": 72, "h": 43 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0031.png", + "frame": { "x": 73, "y": 1, "w": 72, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 0, "w": 72, "h": 43 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0032.png", + "frame": { "x": 429, "y": 1, "w": 71, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 0, "w": 71, "h": 43 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0033.png", + "frame": { "x": 145, "y": 1, "w": 71, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 0, "w": 71, "h": 43 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0034.png", + "frame": { "x": 216, "y": 1, "w": 71, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 0, "w": 71, "h": 43 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0035.png", + "frame": { "x": 412, "y": 88, "w": 69, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 0, "w": 69, "h": 42 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0036.png", + "frame": { "x": 210, "y": 210, "w": 67, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 0, "w": 67, "h": 42 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0037.png", + "frame": { "x": 1, "y": 250, "w": 65, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 0, "w": 65, "h": 42 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0038.png", + "frame": { "x": 210, "y": 210, "w": 67, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 0, "w": 67, "h": 42 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0039.png", + "frame": { "x": 412, "y": 88, "w": 69, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 0, "w": 69, "h": 42 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0040.png", + "frame": { "x": 216, "y": 1, "w": 71, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 0, "w": 71, "h": 43 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0041.png", + "frame": { "x": 145, "y": 1, "w": 71, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 0, "w": 71, "h": 43 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0042.png", + "frame": { "x": 429, "y": 1, "w": 71, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 0, "w": 71, "h": 43 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0043.png", + "frame": { "x": 73, "y": 1, "w": 72, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 0, "w": 72, "h": 43 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0044.png", + "frame": { "x": 1, "y": 1, "w": 72, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 0, "w": 72, "h": 43 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0045.png", + "frame": { "x": 287, "y": 1, "w": 71, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 0, "w": 71, "h": 43 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0046.png", + "frame": { "x": 1, "y": 1, "w": 72, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 0, "w": 72, "h": 43 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0047.png", + "frame": { "x": 73, "y": 1, "w": 72, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 0, "w": 72, "h": 43 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0048.png", + "frame": { "x": 429, "y": 1, "w": 71, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 0, "w": 71, "h": 43 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0049.png", + "frame": { "x": 145, "y": 1, "w": 71, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 0, "w": 71, "h": 43 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0050.png", + "frame": { "x": 341, "y": 87, "w": 71, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 1, "w": 71, "h": 41 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0051.png", + "frame": { "x": 419, "y": 130, "w": 71, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 71, "h": 40 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0052.png", + "frame": { "x": 419, "y": 130, "w": 71, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 1, "w": 71, "h": 40 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0053.png", + "frame": { "x": 419, "y": 130, "w": 71, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 71, "h": 40 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0054.png", + "frame": { "x": 285, "y": 171, "w": 71, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 71, "h": 40 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0055.png", + "frame": { "x": 490, "y": 170, "w": 71, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 2, "w": 71, "h": 40 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0056.png", + "frame": { "x": 1, "y": 170, "w": 71, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 2, "w": 71, "h": 40 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0057.png", + "frame": { "x": 490, "y": 130, "w": 71, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 2, "w": 71, "h": 40 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0058.png", + "frame": { "x": 496, "y": 210, "w": 70, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 2, "w": 70, "h": 40 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0059.png", + "frame": { "x": 72, "y": 210, "w": 69, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 2, "w": 69, "h": 41 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0060.png", + "frame": { "x": 479, "y": 45, "w": 68, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 2, "w": 68, "h": 43 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0061.png", + "frame": { "x": 207, "y": 44, "w": 67, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 2, "w": 67, "h": 44 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0062.png", + "frame": { "x": 1, "y": 44, "w": 66, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 15, "y": 1, "w": 66, "h": 46 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0063.png", + "frame": { "x": 274, "y": 44, "w": 67, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 2, "w": 67, "h": 44 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0064.png", + "frame": { "x": 280, "y": 128, "w": 69, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 2, "w": 69, "h": 42 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0065.png", + "frame": { "x": 141, "y": 210, "w": 69, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 2, "w": 69, "h": 41 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0066.png", + "frame": { "x": 277, "y": 211, "w": 70, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 2, "w": 70, "h": 40 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0067.png", + "frame": { "x": 426, "y": 210, "w": 70, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 2, "w": 70, "h": 40 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0068.png", + "frame": { "x": 356, "y": 210, "w": 70, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 2, "w": 70, "h": 40 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0069.png", + "frame": { "x": 72, "y": 170, "w": 71, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 2, "w": 71, "h": 40 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0070.png", + "frame": { "x": 1, "y": 210, "w": 71, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 71, "h": 40 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0071.png", + "frame": { "x": 143, "y": 170, "w": 71, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 71, "h": 40 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0072.png", + "frame": { "x": 70, "y": 129, "w": 70, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 70, "h": 41 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0073.png", + "frame": { "x": 138, "y": 88, "w": 71, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 71, "h": 41 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0074.png", + "frame": { "x": 67, "y": 86, "w": 71, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 71, "h": 41 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0075.png", + "frame": { "x": 341, "y": 44, "w": 70, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 70, "h": 42 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0076.png", + "frame": { "x": 1, "y": 127, "w": 69, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 69, "h": 42 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0077.png", + "frame": { "x": 411, "y": 44, "w": 68, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 68, "h": 43 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0078.png", + "frame": { "x": 500, "y": 1, "w": 69, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 69, "h": 44 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0079.png", + "frame": { "x": 138, "y": 44, "w": 69, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 69, "h": 43 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0080.png", + "frame": { "x": 481, "y": 88, "w": 69, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 69, "h": 42 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0081.png", + "frame": { "x": 140, "y": 129, "w": 70, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 70, "h": 41 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0082.png", + "frame": { "x": 210, "y": 129, "w": 70, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 70, "h": 41 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0083.png", + "frame": { "x": 349, "y": 130, "w": 70, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 70, "h": 41 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0084.png", + "frame": { "x": 214, "y": 170, "w": 71, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 71, "h": 40 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0085.png", + "frame": { "x": 419, "y": 170, "w": 71, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 71, "h": 40 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0086.png", + "frame": { "x": 209, "y": 88, "w": 71, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 71, "h": 41 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0087.png", + "frame": { "x": 341, "y": 87, "w": 71, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 71, "h": 41 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0088.png", + "frame": { "x": 67, "y": 44, "w": 71, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 1, "w": 71, "h": 42 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + }, + { + "filename": "0089.png", + "frame": { "x": 358, "y": 1, "w": 71, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 0, "w": 71, "h": 43 }, + "sourceSize": { "w": 81, "h": 47 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.13-x64", + "image": "2075.png", + "format": "I8", + "size": { "w": 570, "h": 293 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/back/shiny/2075.png b/public/images/pokemon/exp/back/shiny/2075.png index cdcfd55d4ba..6fbe68dd727 100644 Binary files a/public/images/pokemon/exp/back/shiny/2075.png and b/public/images/pokemon/exp/back/shiny/2075.png differ diff --git a/public/images/pokemon/exp/back/shiny/2076.json b/public/images/pokemon/exp/back/shiny/2076.json index aa499f537be..11a4999b41d 100644 --- a/public/images/pokemon/exp/back/shiny/2076.json +++ b/public/images/pokemon/exp/back/shiny/2076.json @@ -1,209 +1,965 @@ -{ - "textures": [ - { - "image": "2076.png", - "format": "RGBA8888", - "size": { - "w": 206, - "h": 206 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 55, - "h": 70 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 55, - "h": 67 - }, - "frame": { - "x": 0, - "y": 0, - "w": 55, - "h": 67 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 55, - "h": 70 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 55, - "h": 67 - }, - "frame": { - "x": 55, - "y": 0, - "w": 55, - "h": 67 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 55, - "h": 70 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 55, - "h": 67 - }, - "frame": { - "x": 110, - "y": 0, - "w": 55, - "h": 67 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 55, - "h": 70 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 55, - "h": 67 - }, - "frame": { - "x": 0, - "y": 67, - "w": 55, - "h": 67 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 55, - "h": 70 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 54, - "h": 69 - }, - "frame": { - "x": 55, - "y": 67, - "w": 54, - "h": 69 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 55, - "h": 70 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 55, - "h": 69 - }, - "frame": { - "x": 109, - "y": 67, - "w": 55, - "h": 69 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 55, - "h": 70 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 55, - "h": 69 - }, - "frame": { - "x": 0, - "y": 134, - "w": 55, - "h": 69 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 55, - "h": 70 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 55, - "h": 70 - }, - "frame": { - "x": 55, - "y": 136, - "w": 55, - "h": 70 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 55, - "h": 70 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 55, - "h": 70 - }, - "frame": { - "x": 110, - "y": 136, - "w": 55, - "h": 70 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:4e9f4d6cd9939d8af2f26d93c51cca84:ba5f3bd7a848240c136dc6e321666792:719cdf7324091edbb7b1d6e2d7254a1a$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 1, "y": 322, "w": 53, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 53, "h": 65 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 165, "y": 318, "w": 53, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 53, "h": 65 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 218, "y": 318, "w": 53, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 53, "h": 65 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 271, "y": 254, "w": 54, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 54, "h": 65 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 163, "y": 193, "w": 54, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 54, "h": 65 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 57, "y": 64, "w": 55, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 55, "h": 65 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 56, "y": 129, "w": 55, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 5, "w": 55, "h": 64 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 111, "y": 129, "w": 55, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 55, "h": 64 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 348, "y": 63, "w": 56, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 56, "h": 64 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 1, "y": 64, "w": 56, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 56, "h": 64 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 221, "y": 189, "w": 55, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 55, "h": 64 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0012.png", + "frame": { "x": 166, "y": 129, "w": 55, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 55, "h": 64 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0013.png", + "frame": { "x": 167, "y": 64, "w": 55, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 55, "h": 65 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0014.png", + "frame": { "x": 55, "y": 193, "w": 54, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 54, "h": 65 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0015.png", + "frame": { "x": 324, "y": 321, "w": 53, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 53, "h": 65 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0016.png", + "frame": { "x": 1, "y": 192, "w": 54, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 54, "h": 65 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0017.png", + "frame": { "x": 1, "y": 322, "w": 53, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 53, "h": 65 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0018.png", + "frame": { "x": 165, "y": 318, "w": 53, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 53, "h": 65 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0019.png", + "frame": { "x": 218, "y": 318, "w": 53, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 53, "h": 65 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0020.png", + "frame": { "x": 271, "y": 254, "w": 54, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 54, "h": 65 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0021.png", + "frame": { "x": 163, "y": 193, "w": 54, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 54, "h": 65 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0022.png", + "frame": { "x": 57, "y": 64, "w": 55, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 55, "h": 65 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0023.png", + "frame": { "x": 56, "y": 129, "w": 55, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 5, "w": 55, "h": 64 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0024.png", + "frame": { "x": 111, "y": 129, "w": 55, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 55, "h": 64 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0025.png", + "frame": { "x": 348, "y": 63, "w": 56, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 56, "h": 64 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0026.png", + "frame": { "x": 1, "y": 64, "w": 56, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 56, "h": 64 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0027.png", + "frame": { "x": 221, "y": 189, "w": 55, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 55, "h": 64 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0028.png", + "frame": { "x": 166, "y": 129, "w": 55, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 55, "h": 64 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0029.png", + "frame": { "x": 167, "y": 64, "w": 55, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 55, "h": 65 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0030.png", + "frame": { "x": 55, "y": 193, "w": 54, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 54, "h": 65 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0031.png", + "frame": { "x": 324, "y": 321, "w": 53, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 53, "h": 65 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0032.png", + "frame": { "x": 1, "y": 192, "w": 54, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 54, "h": 65 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0033.png", + "frame": { "x": 1, "y": 322, "w": 53, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 53, "h": 65 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0034.png", + "frame": { "x": 165, "y": 318, "w": 53, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 53, "h": 65 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0035.png", + "frame": { "x": 218, "y": 318, "w": 53, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 53, "h": 65 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0036.png", + "frame": { "x": 271, "y": 254, "w": 54, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 54, "h": 65 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0037.png", + "frame": { "x": 163, "y": 193, "w": 54, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 54, "h": 65 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0038.png", + "frame": { "x": 57, "y": 64, "w": 55, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 55, "h": 65 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0039.png", + "frame": { "x": 56, "y": 129, "w": 55, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 5, "w": 55, "h": 64 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0040.png", + "frame": { "x": 111, "y": 129, "w": 55, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 55, "h": 64 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0041.png", + "frame": { "x": 348, "y": 63, "w": 56, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 56, "h": 64 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0042.png", + "frame": { "x": 1, "y": 64, "w": 56, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 56, "h": 64 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0043.png", + "frame": { "x": 221, "y": 189, "w": 55, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 55, "h": 64 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0044.png", + "frame": { "x": 166, "y": 129, "w": 55, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 55, "h": 64 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0045.png", + "frame": { "x": 167, "y": 64, "w": 55, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 55, "h": 65 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0046.png", + "frame": { "x": 55, "y": 193, "w": 54, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 54, "h": 65 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0047.png", + "frame": { "x": 324, "y": 321, "w": 53, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 53, "h": 65 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0048.png", + "frame": { "x": 1, "y": 192, "w": 54, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 54, "h": 65 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0049.png", + "frame": { "x": 1, "y": 322, "w": 53, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 53, "h": 65 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0050.png", + "frame": { "x": 165, "y": 318, "w": 53, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 53, "h": 65 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0051.png", + "frame": { "x": 218, "y": 318, "w": 53, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 53, "h": 65 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0052.png", + "frame": { "x": 271, "y": 254, "w": 54, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 54, "h": 65 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0053.png", + "frame": { "x": 163, "y": 193, "w": 54, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 54, "h": 65 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0054.png", + "frame": { "x": 57, "y": 64, "w": 55, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 55, "h": 65 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0055.png", + "frame": { "x": 56, "y": 129, "w": 55, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 5, "w": 55, "h": 64 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0056.png", + "frame": { "x": 111, "y": 129, "w": 55, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 55, "h": 64 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0057.png", + "frame": { "x": 348, "y": 63, "w": 56, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 56, "h": 64 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0058.png", + "frame": { "x": 1, "y": 64, "w": 56, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 56, "h": 64 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0059.png", + "frame": { "x": 221, "y": 189, "w": 55, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 55, "h": 64 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0060.png", + "frame": { "x": 166, "y": 129, "w": 55, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 55, "h": 64 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0061.png", + "frame": { "x": 167, "y": 64, "w": 55, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 55, "h": 65 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0062.png", + "frame": { "x": 55, "y": 193, "w": 54, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 54, "h": 65 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0063.png", + "frame": { "x": 324, "y": 321, "w": 53, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 53, "h": 65 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0064.png", + "frame": { "x": 1, "y": 192, "w": 54, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 54, "h": 65 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0065.png", + "frame": { "x": 1, "y": 322, "w": 53, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 53, "h": 65 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0066.png", + "frame": { "x": 109, "y": 193, "w": 54, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 54, "h": 65 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0067.png", + "frame": { "x": 111, "y": 258, "w": 54, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 54, "h": 64 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0068.png", + "frame": { "x": 330, "y": 191, "w": 54, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 54, "h": 65 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0069.png", + "frame": { "x": 108, "y": 322, "w": 53, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 53, "h": 64 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0070.png", + "frame": { "x": 161, "y": 383, "w": 53, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 6, "w": 53, "h": 63 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0071.png", + "frame": { "x": 1, "y": 322, "w": 53, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 53, "h": 65 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0072.png", + "frame": { "x": 55, "y": 320, "w": 53, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 53, "h": 65 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0073.png", + "frame": { "x": 271, "y": 319, "w": 53, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 53, "h": 65 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0074.png", + "frame": { "x": 217, "y": 253, "w": 54, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 54, "h": 65 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0075.png", + "frame": { "x": 276, "y": 189, "w": 54, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 54, "h": 65 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0076.png", + "frame": { "x": 334, "y": 127, "w": 55, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 55, "h": 64 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0077.png", + "frame": { "x": 222, "y": 126, "w": 56, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 56, "h": 63 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0078.png", + "frame": { "x": 175, "y": 1, "w": 58, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 58, "h": 63 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0079.png", + "frame": { "x": 175, "y": 1, "w": 58, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 58, "h": 63 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0080.png", + "frame": { "x": 117, "y": 1, "w": 58, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 58, "h": 63 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0081.png", + "frame": { "x": 117, "y": 1, "w": 58, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 58, "h": 63 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0082.png", + "frame": { "x": 59, "y": 1, "w": 58, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 58, "h": 63 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0083.png", + "frame": { "x": 59, "y": 1, "w": 58, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 58, "h": 63 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0084.png", + "frame": { "x": 1, "y": 1, "w": 58, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 58, "h": 63 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0085.png", + "frame": { "x": 1, "y": 1, "w": 58, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 58, "h": 63 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0086.png", + "frame": { "x": 1, "y": 1, "w": 58, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 58, "h": 63 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0087.png", + "frame": { "x": 233, "y": 1, "w": 58, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 58, "h": 63 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0088.png", + "frame": { "x": 233, "y": 1, "w": 58, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 58, "h": 63 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0089.png", + "frame": { "x": 349, "y": 1, "w": 58, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 7, "w": 58, "h": 62 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0090.png", + "frame": { "x": 233, "y": 1, "w": 58, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 58, "h": 63 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0091.png", + "frame": { "x": 349, "y": 1, "w": 58, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 7, "w": 58, "h": 62 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0092.png", + "frame": { "x": 233, "y": 1, "w": 58, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 58, "h": 63 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0093.png", + "frame": { "x": 349, "y": 1, "w": 58, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 7, "w": 58, "h": 62 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0094.png", + "frame": { "x": 233, "y": 1, "w": 58, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 58, "h": 63 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0095.png", + "frame": { "x": 349, "y": 1, "w": 58, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 7, "w": 58, "h": 62 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0096.png", + "frame": { "x": 233, "y": 1, "w": 58, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 58, "h": 63 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0097.png", + "frame": { "x": 349, "y": 1, "w": 58, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 7, "w": 58, "h": 62 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0098.png", + "frame": { "x": 291, "y": 1, "w": 58, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 7, "w": 58, "h": 62 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0099.png", + "frame": { "x": 222, "y": 64, "w": 57, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 7, "w": 57, "h": 62 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0100.png", + "frame": { "x": 55, "y": 258, "w": 56, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 7, "w": 56, "h": 62 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0101.png", + "frame": { "x": 291, "y": 63, "w": 57, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 6, "w": 57, "h": 63 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0102.png", + "frame": { "x": 278, "y": 126, "w": 56, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 6, "w": 56, "h": 63 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0103.png", + "frame": { "x": 1, "y": 128, "w": 55, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 55, "h": 64 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0104.png", + "frame": { "x": 112, "y": 64, "w": 55, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 55, "h": 65 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0105.png", + "frame": { "x": 325, "y": 256, "w": 54, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 54, "h": 65 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + }, + { + "filename": "0106.png", + "frame": { "x": 1, "y": 257, "w": 54, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 54, "h": 65 }, + "sourceSize": { "w": 61, "h": 69 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.13-x64", + "image": "2076.png", + "format": "I8", + "size": { "w": 408, "h": 447 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/back/shiny/2076.png b/public/images/pokemon/exp/back/shiny/2076.png index 54294d688a7..69424220267 100644 Binary files a/public/images/pokemon/exp/back/shiny/2076.png and b/public/images/pokemon/exp/back/shiny/2076.png differ diff --git a/public/images/pokemon/exp/back/shiny/2088.json b/public/images/pokemon/exp/back/shiny/2088.json index d83a5e80b9f..bc5207262b9 100644 --- a/public/images/pokemon/exp/back/shiny/2088.json +++ b/public/images/pokemon/exp/back/shiny/2088.json @@ -1,230 +1,173 @@ -{ - "textures": [ - { - "image": "2088.png", - "format": "RGBA8888", - "size": { - "w": 123, - "h": 123 - }, - "scale": 1, - "frames": [ - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 41 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 47, - "h": 41 - }, - "frame": { - "x": 0, - "y": 0, - "w": 47, - "h": 41 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 41 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 47, - "h": 41 - }, - "frame": { - "x": 0, - "y": 0, - "w": 47, - "h": 41 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 41 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 48, - "h": 40 - }, - "frame": { - "x": 0, - "y": 41, - "w": 48, - "h": 40 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 41 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 45, - "h": 41 - }, - "frame": { - "x": 47, - "y": 0, - "w": 45, - "h": 41 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 41 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 45, - "h": 41 - }, - "frame": { - "x": 47, - "y": 0, - "w": 45, - "h": 41 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 41 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 45, - "h": 41 - }, - "frame": { - "x": 48, - "y": 41, - "w": 45, - "h": 41 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 41 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 45, - "h": 41 - }, - "frame": { - "x": 48, - "y": 41, - "w": 45, - "h": 41 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 41 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 45, - "h": 41 - }, - "frame": { - "x": 0, - "y": 81, - "w": 45, - "h": 41 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 41 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 44, - "h": 41 - }, - "frame": { - "x": 45, - "y": 82, - "w": 44, - "h": 41 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 48, - "h": 41 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 44, - "h": 41 - }, - "frame": { - "x": 45, - "y": 82, - "w": 44, - "h": 41 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:ba890bb81fa834ddd0788233d167fc52:cbdce6f244382f200e05794e64d74837:b8df8f168871505f42fdc6d3c5b106f0$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 49, "y": 111, "w": 48, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 0, "w": 48, "h": 39 }, + "sourceSize": { "w": 58, "h": 39 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 0, "y": 75, "w": 49, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 0, "w": 49, "h": 39 }, + "sourceSize": { "w": 58, "h": 39 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 216, "y": 75, "w": 50, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 1, "w": 50, "h": 38 }, + "sourceSize": { "w": 58, "h": 39 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 54, "y": 73, "w": 52, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 52, "h": 38 }, + "sourceSize": { "w": 58, "h": 39 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 0, "y": 37, "w": 54, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 54, "h": 38 }, + "sourceSize": { "w": 58, "h": 39 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 111, "y": 38, "w": 54, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 54, "h": 37 }, + "sourceSize": { "w": 58, "h": 39 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 169, "y": 0, "w": 56, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 56, "h": 37 }, + "sourceSize": { "w": 58, "h": 39 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 225, "y": 0, "w": 56, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 56, "h": 37 }, + "sourceSize": { "w": 58, "h": 39 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 54, "y": 37, "w": 57, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 57, "h": 36 }, + "sourceSize": { "w": 58, "h": 39 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 0, "y": 0, "w": 57, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 57, "h": 37 }, + "sourceSize": { "w": 58, "h": 39 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 57, "y": 0, "w": 57, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 57, "h": 37 }, + "sourceSize": { "w": 58, "h": 39 }, + "duration": 100 + }, + { + "filename": "0012.png", + "frame": { "x": 169, "y": 37, "w": 55, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 55, "h": 37 }, + "sourceSize": { "w": 58, "h": 39 }, + "duration": 100 + }, + { + "filename": "0013.png", + "frame": { "x": 114, "y": 0, "w": 55, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 55, "h": 38 }, + "sourceSize": { "w": 58, "h": 39 }, + "duration": 100 + }, + { + "filename": "0014.png", + "frame": { "x": 224, "y": 37, "w": 53, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 53, "h": 38 }, + "sourceSize": { "w": 58, "h": 39 }, + "duration": 100 + }, + { + "filename": "0015.png", + "frame": { "x": 165, "y": 74, "w": 51, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 1, "w": 51, "h": 38 }, + "sourceSize": { "w": 58, "h": 39 }, + "duration": 100 + }, + { + "filename": "0016.png", + "frame": { "x": 106, "y": 75, "w": 49, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 0, "w": 49, "h": 39 }, + "sourceSize": { "w": 58, "h": 39 }, + "duration": 100 + }, + { + "filename": "0017.png", + "frame": { "x": 155, "y": 112, "w": 48, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 0, "w": 48, "h": 39 }, + "sourceSize": { "w": 58, "h": 39 }, + "duration": 100 + }, + { + "filename": "0018.png", + "frame": { "x": 203, "y": 113, "w": 48, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 0, "w": 48, "h": 39 }, + "sourceSize": { "w": 58, "h": 39 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.13-x64", + "image": "2088.png", + "format": "I8", + "size": { "w": 281, "h": 152 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/back/shiny/2088.png b/public/images/pokemon/exp/back/shiny/2088.png index 89227ccbb55..1f939f63d70 100644 Binary files a/public/images/pokemon/exp/back/shiny/2088.png and b/public/images/pokemon/exp/back/shiny/2088.png differ diff --git a/public/images/pokemon/exp/back/shiny/2089.json b/public/images/pokemon/exp/back/shiny/2089.json index 43d6fa141b3..c0416f08b26 100644 --- a/public/images/pokemon/exp/back/shiny/2089.json +++ b/public/images/pokemon/exp/back/shiny/2089.json @@ -1,230 +1,1091 @@ -{ - "textures": [ - { - "image": "2089.png", - "format": "RGBA8888", - "size": { - "w": 178, - "h": 178 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 82, - "h": 63 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 82, - "h": 63 - }, - "frame": { - "x": 0, - "y": 0, - "w": 82, - "h": 63 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 82, - "h": 63 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 82, - "h": 63 - }, - "frame": { - "x": 82, - "y": 0, - "w": 82, - "h": 63 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 82, - "h": 63 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 82, - "h": 63 - }, - "frame": { - "x": 82, - "y": 0, - "w": 82, - "h": 63 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 82, - "h": 63 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 82, - "h": 62 - }, - "frame": { - "x": 0, - "y": 63, - "w": 82, - "h": 62 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 82, - "h": 63 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 82, - "h": 62 - }, - "frame": { - "x": 0, - "y": 63, - "w": 82, - "h": 62 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 82, - "h": 63 - }, - "spriteSourceSize": { - "x": 0, - "y": 10, - "w": 82, - "h": 53 - }, - "frame": { - "x": 0, - "y": 125, - "w": 82, - "h": 53 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 82, - "h": 63 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 82, - "h": 59 - }, - "frame": { - "x": 82, - "y": 63, - "w": 82, - "h": 59 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 82, - "h": 63 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 82, - "h": 59 - }, - "frame": { - "x": 82, - "y": 63, - "w": 82, - "h": 59 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 82, - "h": 63 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 82, - "h": 56 - }, - "frame": { - "x": 82, - "y": 122, - "w": 82, - "h": 56 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 82, - "h": 63 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 82, - "h": 56 - }, - "frame": { - "x": 82, - "y": 122, - "w": 82, - "h": 56 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:6de3971a726023157c38b599fa8651b9:a11b234c76dc80c742c8c4b3d7e37c73:49ee9ed0dd32c5ba33977741b45fc3f4$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 1, "y": 1, "w": 81, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 0, "w": 81, "h": 62 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 82, "y": 1, "w": 82, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 1, "w": 82, "h": 61 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 246, "y": 1, "w": 83, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 83, "h": 60 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 246, "y": 61, "w": 84, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 4, "w": 84, "h": 58 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 414, "y": 61, "w": 85, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 5, "w": 85, "h": 57 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 499, "y": 118, "w": 86, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 6, "w": 86, "h": 56 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 259, "y": 119, "w": 87, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 8, "w": 87, "h": 54 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 87, "y": 174, "w": 88, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 9, "w": 88, "h": 53 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 88, "y": 227, "w": 89, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 11, "w": 89, "h": 51 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 266, "y": 228, "w": 90, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 12, "w": 90, "h": 50 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 358, "y": 278, "w": 91, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 13, "w": 91, "h": 49 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0012.png", + "frame": { "x": 1, "y": 328, "w": 92, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 15, "w": 92, "h": 47 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0013.png", + "frame": { "x": 93, "y": 375, "w": 93, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 16, "w": 93, "h": 46 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0014.png", + "frame": { "x": 186, "y": 375, "w": 93, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 16, "w": 93, "h": 46 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0015.png", + "frame": { "x": 542, "y": 375, "w": 92, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 16, "w": 92, "h": 46 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0016.png", + "frame": { "x": 1, "y": 375, "w": 92, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 15, "w": 92, "h": 47 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0017.png", + "frame": { "x": 449, "y": 327, "w": 92, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 14, "w": 92, "h": 48 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0018.png", + "frame": { "x": 449, "y": 278, "w": 91, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 13, "w": 91, "h": 49 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0019.png", + "frame": { "x": 88, "y": 278, "w": 90, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 12, "w": 90, "h": 50 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0020.png", + "frame": { "x": 177, "y": 227, "w": 89, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 11, "w": 89, "h": 51 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0021.png", + "frame": { "x": 346, "y": 175, "w": 87, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 9, "w": 87, "h": 53 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0022.png", + "frame": { "x": 87, "y": 119, "w": 86, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 7, "w": 86, "h": 55 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0023.png", + "frame": { "x": 499, "y": 61, "w": 85, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 5, "w": 85, "h": 57 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0024.png", + "frame": { "x": 412, "y": 1, "w": 83, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 83, "h": 60 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0025.png", + "frame": { "x": 1, "y": 1, "w": 81, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 0, "w": 81, "h": 62 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0026.png", + "frame": { "x": 82, "y": 1, "w": 82, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 1, "w": 82, "h": 61 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0027.png", + "frame": { "x": 246, "y": 1, "w": 83, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 83, "h": 60 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0028.png", + "frame": { "x": 246, "y": 61, "w": 84, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 4, "w": 84, "h": 58 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0029.png", + "frame": { "x": 414, "y": 61, "w": 85, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 5, "w": 85, "h": 57 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0030.png", + "frame": { "x": 499, "y": 118, "w": 86, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 6, "w": 86, "h": 56 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0031.png", + "frame": { "x": 259, "y": 119, "w": 87, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 8, "w": 87, "h": 54 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0032.png", + "frame": { "x": 87, "y": 174, "w": 88, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 9, "w": 88, "h": 53 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0033.png", + "frame": { "x": 88, "y": 227, "w": 89, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 11, "w": 89, "h": 51 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0034.png", + "frame": { "x": 266, "y": 228, "w": 90, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 12, "w": 90, "h": 50 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0035.png", + "frame": { "x": 358, "y": 278, "w": 91, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 13, "w": 91, "h": 49 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0036.png", + "frame": { "x": 1, "y": 328, "w": 92, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 15, "w": 92, "h": 47 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0037.png", + "frame": { "x": 93, "y": 375, "w": 93, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 16, "w": 93, "h": 46 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0038.png", + "frame": { "x": 186, "y": 375, "w": 93, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 16, "w": 93, "h": 46 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0039.png", + "frame": { "x": 542, "y": 375, "w": 92, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 16, "w": 92, "h": 46 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0040.png", + "frame": { "x": 1, "y": 375, "w": 92, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 15, "w": 92, "h": 47 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0041.png", + "frame": { "x": 449, "y": 327, "w": 92, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 14, "w": 92, "h": 48 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0042.png", + "frame": { "x": 449, "y": 278, "w": 91, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 13, "w": 91, "h": 49 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0043.png", + "frame": { "x": 88, "y": 278, "w": 90, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 12, "w": 90, "h": 50 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0044.png", + "frame": { "x": 177, "y": 227, "w": 89, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 11, "w": 89, "h": 51 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0045.png", + "frame": { "x": 346, "y": 175, "w": 87, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 9, "w": 87, "h": 53 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0046.png", + "frame": { "x": 87, "y": 119, "w": 86, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 7, "w": 86, "h": 55 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0047.png", + "frame": { "x": 499, "y": 61, "w": 85, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 5, "w": 85, "h": 57 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0048.png", + "frame": { "x": 412, "y": 1, "w": 83, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 83, "h": 60 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0049.png", + "frame": { "x": 1, "y": 1, "w": 81, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 0, "w": 81, "h": 62 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0050.png", + "frame": { "x": 82, "y": 1, "w": 82, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 1, "w": 82, "h": 61 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0051.png", + "frame": { "x": 246, "y": 1, "w": 83, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 83, "h": 60 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0052.png", + "frame": { "x": 246, "y": 61, "w": 84, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 4, "w": 84, "h": 58 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0053.png", + "frame": { "x": 414, "y": 61, "w": 85, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 5, "w": 85, "h": 57 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0054.png", + "frame": { "x": 499, "y": 118, "w": 86, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 6, "w": 86, "h": 56 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0055.png", + "frame": { "x": 259, "y": 119, "w": 87, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 8, "w": 87, "h": 54 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0056.png", + "frame": { "x": 87, "y": 174, "w": 88, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 9, "w": 88, "h": 53 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0057.png", + "frame": { "x": 88, "y": 227, "w": 89, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 11, "w": 89, "h": 51 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0058.png", + "frame": { "x": 266, "y": 228, "w": 90, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 12, "w": 90, "h": 50 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0059.png", + "frame": { "x": 358, "y": 278, "w": 91, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 13, "w": 91, "h": 49 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0060.png", + "frame": { "x": 1, "y": 328, "w": 92, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 15, "w": 92, "h": 47 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0061.png", + "frame": { "x": 93, "y": 375, "w": 93, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 16, "w": 93, "h": 46 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0062.png", + "frame": { "x": 186, "y": 375, "w": 93, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 16, "w": 93, "h": 46 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0063.png", + "frame": { "x": 542, "y": 375, "w": 92, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 16, "w": 92, "h": 46 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0064.png", + "frame": { "x": 1, "y": 375, "w": 92, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 15, "w": 92, "h": 47 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0065.png", + "frame": { "x": 449, "y": 327, "w": 92, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 14, "w": 92, "h": 48 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0066.png", + "frame": { "x": 449, "y": 278, "w": 91, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 13, "w": 91, "h": 49 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0067.png", + "frame": { "x": 88, "y": 278, "w": 90, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 12, "w": 90, "h": 50 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0068.png", + "frame": { "x": 177, "y": 227, "w": 89, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 11, "w": 89, "h": 51 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0069.png", + "frame": { "x": 346, "y": 175, "w": 87, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 9, "w": 87, "h": 53 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0070.png", + "frame": { "x": 87, "y": 119, "w": 86, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 7, "w": 86, "h": 55 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0071.png", + "frame": { "x": 499, "y": 61, "w": 85, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 5, "w": 85, "h": 57 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0072.png", + "frame": { "x": 412, "y": 1, "w": 83, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 83, "h": 60 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0073.png", + "frame": { "x": 1, "y": 1, "w": 81, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 0, "w": 81, "h": 62 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0074.png", + "frame": { "x": 82, "y": 1, "w": 82, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 1, "w": 82, "h": 61 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0075.png", + "frame": { "x": 246, "y": 1, "w": 83, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 83, "h": 60 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0076.png", + "frame": { "x": 246, "y": 61, "w": 84, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 4, "w": 84, "h": 58 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0077.png", + "frame": { "x": 414, "y": 61, "w": 85, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 5, "w": 85, "h": 57 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0078.png", + "frame": { "x": 499, "y": 118, "w": 86, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 6, "w": 86, "h": 56 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0079.png", + "frame": { "x": 259, "y": 119, "w": 87, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 8, "w": 87, "h": 54 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0080.png", + "frame": { "x": 87, "y": 174, "w": 88, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 9, "w": 88, "h": 53 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0081.png", + "frame": { "x": 88, "y": 227, "w": 89, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 11, "w": 89, "h": 51 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0082.png", + "frame": { "x": 266, "y": 228, "w": 90, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 12, "w": 90, "h": 50 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0083.png", + "frame": { "x": 358, "y": 278, "w": 91, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 13, "w": 91, "h": 49 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0084.png", + "frame": { "x": 1, "y": 328, "w": 92, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 15, "w": 92, "h": 47 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0085.png", + "frame": { "x": 93, "y": 375, "w": 93, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 16, "w": 93, "h": 46 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0086.png", + "frame": { "x": 186, "y": 375, "w": 93, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 16, "w": 93, "h": 46 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0087.png", + "frame": { "x": 542, "y": 375, "w": 92, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 16, "w": 92, "h": 46 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0088.png", + "frame": { "x": 1, "y": 375, "w": 92, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 15, "w": 92, "h": 47 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0089.png", + "frame": { "x": 449, "y": 327, "w": 92, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 14, "w": 92, "h": 48 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0090.png", + "frame": { "x": 449, "y": 278, "w": 91, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 13, "w": 91, "h": 49 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0091.png", + "frame": { "x": 88, "y": 278, "w": 90, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 12, "w": 90, "h": 50 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0092.png", + "frame": { "x": 177, "y": 227, "w": 89, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 11, "w": 89, "h": 51 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0093.png", + "frame": { "x": 346, "y": 175, "w": 87, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 9, "w": 87, "h": 53 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0094.png", + "frame": { "x": 87, "y": 119, "w": 86, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 7, "w": 86, "h": 55 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0095.png", + "frame": { "x": 499, "y": 61, "w": 85, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 5, "w": 85, "h": 57 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0096.png", + "frame": { "x": 412, "y": 1, "w": 83, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 83, "h": 60 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0097.png", + "frame": { "x": 1, "y": 1, "w": 81, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 0, "w": 81, "h": 62 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0098.png", + "frame": { "x": 164, "y": 1, "w": 82, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 1, "w": 82, "h": 61 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0099.png", + "frame": { "x": 495, "y": 1, "w": 83, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 83, "h": 60 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0100.png", + "frame": { "x": 330, "y": 61, "w": 84, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 4, "w": 84, "h": 58 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0101.png", + "frame": { "x": 414, "y": 118, "w": 85, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 5, "w": 85, "h": 57 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0102.png", + "frame": { "x": 1, "y": 119, "w": 86, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 6, "w": 86, "h": 56 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0103.png", + "frame": { "x": 259, "y": 173, "w": 87, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 8, "w": 87, "h": 54 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0104.png", + "frame": { "x": 499, "y": 174, "w": 88, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 9, "w": 88, "h": 53 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0105.png", + "frame": { "x": 433, "y": 227, "w": 89, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 11, "w": 89, "h": 51 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0106.png", + "frame": { "x": 178, "y": 278, "w": 90, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 12, "w": 90, "h": 50 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0107.png", + "frame": { "x": 540, "y": 278, "w": 91, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 13, "w": 91, "h": 49 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0108.png", + "frame": { "x": 93, "y": 328, "w": 92, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 15, "w": 92, "h": 47 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0109.png", + "frame": { "x": 93, "y": 375, "w": 93, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 16, "w": 93, "h": 46 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0110.png", + "frame": { "x": 449, "y": 375, "w": 93, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 16, "w": 93, "h": 46 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0111.png", + "frame": { "x": 279, "y": 376, "w": 92, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 16, "w": 92, "h": 46 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0112.png", + "frame": { "x": 185, "y": 328, "w": 92, "h": 47 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 15, "w": 92, "h": 47 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0113.png", + "frame": { "x": 541, "y": 327, "w": 92, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 14, "w": 92, "h": 48 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0114.png", + "frame": { "x": 358, "y": 327, "w": 91, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 13, "w": 91, "h": 49 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0115.png", + "frame": { "x": 268, "y": 278, "w": 90, "h": 50 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 12, "w": 90, "h": 50 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0116.png", + "frame": { "x": 522, "y": 227, "w": 89, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 11, "w": 89, "h": 51 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0117.png", + "frame": { "x": 1, "y": 227, "w": 87, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 9, "w": 87, "h": 53 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0118.png", + "frame": { "x": 173, "y": 119, "w": 86, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 7, "w": 86, "h": 55 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0119.png", + "frame": { "x": 82, "y": 62, "w": 85, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 5, "w": 85, "h": 57 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + }, + { + "filename": "0120.png", + "frame": { "x": 329, "y": 1, "w": 83, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 83, "h": 60 }, + "sourceSize": { "w": 93, "h": 62 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.13-x64", + "image": "2089.png", + "format": "I8", + "size": { "w": 635, "h": 423 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/back/shiny/2089.png b/public/images/pokemon/exp/back/shiny/2089.png index db7e46bad80..8dcb36bcb09 100644 Binary files a/public/images/pokemon/exp/back/shiny/2089.png and b/public/images/pokemon/exp/back/shiny/2089.png differ diff --git a/public/images/pokemon/exp/back/shiny/728.json b/public/images/pokemon/exp/back/shiny/728.json index 37f02ac84d7..f60b5965bed 100644 --- a/public/images/pokemon/exp/back/shiny/728.json +++ b/public/images/pokemon/exp/back/shiny/728.json @@ -1,230 +1,776 @@ -{ - "textures": [ - { - "image": "728.png", - "format": "RGBA8888", - "size": { - "w": 117, - "h": 117 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 41, - "h": 39 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 41, - "h": 39 - }, - "frame": { - "x": 0, - "y": 0, - "w": 41, - "h": 39 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 41, - "h": 39 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 41, - "h": 39 - }, - "frame": { - "x": 0, - "y": 39, - "w": 41, - "h": 39 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 41, - "h": 39 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 41, - "h": 39 - }, - "frame": { - "x": 0, - "y": 39, - "w": 41, - "h": 39 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 41, - "h": 39 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 41, - "h": 39 - }, - "frame": { - "x": 0, - "y": 78, - "w": 41, - "h": 39 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 41, - "h": 39 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 41, - "h": 39 - }, - "frame": { - "x": 0, - "y": 78, - "w": 41, - "h": 39 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 41, - "h": 39 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 41, - "h": 39 - }, - "frame": { - "x": 41, - "y": 0, - "w": 41, - "h": 39 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 41, - "h": 39 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 41, - "h": 39 - }, - "frame": { - "x": 41, - "y": 0, - "w": 41, - "h": 39 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 41, - "h": 39 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 41, - "h": 39 - }, - "frame": { - "x": 41, - "y": 39, - "w": 41, - "h": 39 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 41, - "h": 39 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 41, - "h": 39 - }, - "frame": { - "x": 41, - "y": 39, - "w": 41, - "h": 39 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 41, - "h": 39 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 41, - "h": 39 - }, - "frame": { - "x": 41, - "y": 78, - "w": 41, - "h": 39 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:4b3aa1071cae1ccbd84e587c2c8d2cde:022fe282ca0614cda2fd19d531e24090:74218c18c9d392741666ee5c0c28d306$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 123, "y": 144, "w": 40, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 20, "w": 40, "h": 39 }, + "sourceSize": { "w": 43, "h": 59 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 80, "y": 145, "w": 40, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 20, "w": 40, "h": 39 }, + "sourceSize": { "w": 43, "h": 59 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 40, "y": 185, "w": 40, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 21, "w": 40, "h": 37 }, + "sourceSize": { "w": 43, "h": 59 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 160, "y": 185, "w": 39, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 21, "w": 39, "h": 37 }, + "sourceSize": { "w": 43, "h": 59 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 157, "y": 222, "w": 39, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 22, "w": 39, "h": 36 }, + "sourceSize": { "w": 43, "h": 59 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 0, "y": 223, "w": 39, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 22, "w": 39, "h": 36 }, + "sourceSize": { "w": 43, "h": 59 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 40, "y": 222, "w": 39, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 21, "w": 39, "h": 37 }, + "sourceSize": { "w": 43, "h": 59 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 79, "y": 222, "w": 39, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 21, "w": 39, "h": 37 }, + "sourceSize": { "w": 43, "h": 59 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 118, "y": 222, "w": 39, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 21, "w": 39, "h": 37 }, + "sourceSize": { "w": 43, "h": 59 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 80, "y": 184, "w": 40, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 20, "w": 40, "h": 38 }, + "sourceSize": { "w": 43, "h": 59 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 40, "y": 146, "w": 40, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 20, "w": 40, "h": 39 }, + "sourceSize": { "w": 43, "h": 59 }, + "duration": 100 + }, + { + "filename": "0012.png", + "frame": { "x": 120, "y": 183, "w": 40, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 20, "w": 40, "h": 39 }, + "sourceSize": { "w": 43, "h": 59 }, + "duration": 100 + }, + { + "filename": "0013.png", + "frame": { "x": 123, "y": 144, "w": 40, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 20, "w": 40, "h": 39 }, + "sourceSize": { "w": 43, "h": 59 }, + "duration": 100 + }, + { + "filename": "0014.png", + "frame": { "x": 80, "y": 145, "w": 40, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 20, "w": 40, "h": 39 }, + "sourceSize": { "w": 43, "h": 59 }, + "duration": 100 + }, + { + "filename": "0015.png", + "frame": { "x": 40, "y": 185, "w": 40, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 21, "w": 40, "h": 37 }, + "sourceSize": { "w": 43, "h": 59 }, + "duration": 100 + }, + { + "filename": "0016.png", + "frame": { "x": 160, "y": 185, "w": 39, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 21, "w": 39, "h": 37 }, + "sourceSize": { "w": 43, "h": 59 }, + "duration": 100 + }, + { + "filename": "0017.png", + "frame": { "x": 157, "y": 222, "w": 39, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 22, "w": 39, "h": 36 }, + "sourceSize": { "w": 43, "h": 59 }, + "duration": 100 + }, + { + "filename": "0018.png", + "frame": { "x": 0, "y": 223, "w": 39, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 22, "w": 39, "h": 36 }, + "sourceSize": { "w": 43, "h": 59 }, + "duration": 100 + }, + { + "filename": "0019.png", + "frame": { "x": 40, "y": 222, "w": 39, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 21, "w": 39, "h": 37 }, + "sourceSize": { "w": 43, "h": 59 }, + "duration": 100 + }, + { + "filename": "0020.png", + "frame": { "x": 79, "y": 222, "w": 39, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 21, "w": 39, "h": 37 }, + "sourceSize": { "w": 43, "h": 59 }, + "duration": 100 + }, + { + "filename": "0021.png", + "frame": { "x": 118, "y": 222, "w": 39, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 21, "w": 39, "h": 37 }, + "sourceSize": { "w": 43, "h": 59 }, + "duration": 100 + }, + { + "filename": "0022.png", + "frame": { "x": 80, "y": 184, "w": 40, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 20, "w": 40, "h": 38 }, + "sourceSize": { "w": 43, "h": 59 }, + "duration": 100 + }, + { + "filename": "0023.png", + "frame": { "x": 40, "y": 146, "w": 40, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 20, "w": 40, "h": 39 }, + "sourceSize": { "w": 43, "h": 59 }, + "duration": 100 + }, + { + "filename": "0024.png", + "frame": { "x": 120, "y": 183, "w": 40, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 20, "w": 40, "h": 39 }, + "sourceSize": { "w": 43, "h": 59 }, + "duration": 100 + }, + { + "filename": "0025.png", + "frame": { "x": 123, "y": 144, "w": 40, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 20, "w": 40, "h": 39 }, + "sourceSize": { "w": 43, "h": 59 }, + "duration": 100 + }, + { + "filename": "0026.png", + "frame": { "x": 80, "y": 145, "w": 40, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 20, "w": 40, "h": 39 }, + "sourceSize": { "w": 43, "h": 59 }, + "duration": 100 + }, + { + "filename": "0027.png", + "frame": { "x": 40, "y": 185, "w": 40, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 21, "w": 40, "h": 37 }, + "sourceSize": { "w": 43, "h": 59 }, + "duration": 100 + }, + { + "filename": "0028.png", + "frame": { "x": 160, "y": 185, "w": 39, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 21, "w": 39, "h": 37 }, + "sourceSize": { "w": 43, "h": 59 }, + "duration": 100 + }, + { + "filename": "0029.png", + "frame": { "x": 157, "y": 222, "w": 39, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 22, "w": 39, "h": 36 }, + "sourceSize": { "w": 43, "h": 59 }, + "duration": 100 + }, + { + "filename": "0030.png", + "frame": { "x": 0, "y": 223, "w": 39, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 22, "w": 39, "h": 36 }, + "sourceSize": { "w": 43, "h": 59 }, + "duration": 100 + }, + { + "filename": "0031.png", + "frame": { "x": 40, "y": 222, "w": 39, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 21, "w": 39, "h": 37 }, + "sourceSize": { "w": 43, "h": 59 }, + "duration": 100 + }, + { + "filename": "0032.png", + "frame": { "x": 79, "y": 222, "w": 39, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 21, "w": 39, "h": 37 }, + "sourceSize": { "w": 43, "h": 59 }, + "duration": 100 + }, + { + "filename": "0033.png", + "frame": { "x": 118, "y": 222, "w": 39, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 21, "w": 39, "h": 37 }, + "sourceSize": { "w": 43, "h": 59 }, + "duration": 100 + }, + { + "filename": "0034.png", + "frame": { "x": 80, "y": 184, "w": 40, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 20, "w": 40, "h": 38 }, + "sourceSize": { "w": 43, "h": 59 }, + "duration": 100 + }, + { + "filename": "0035.png", + "frame": { "x": 40, "y": 146, "w": 40, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 20, "w": 40, "h": 39 }, + "sourceSize": { "w": 43, "h": 59 }, + "duration": 100 + }, + { + "filename": "0036.png", + "frame": { "x": 120, "y": 183, "w": 40, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 20, "w": 40, "h": 39 }, + "sourceSize": { "w": 43, "h": 59 }, + "duration": 100 + }, + { + "filename": "0037.png", + "frame": { "x": 123, "y": 144, "w": 40, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 20, "w": 40, "h": 39 }, + "sourceSize": { "w": 43, "h": 59 }, + "duration": 100 + }, + { + "filename": "0038.png", + "frame": { "x": 80, "y": 145, "w": 40, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 20, "w": 40, "h": 39 }, + "sourceSize": { "w": 43, "h": 59 }, + "duration": 100 + }, + { + "filename": "0039.png", + "frame": { "x": 40, "y": 185, "w": 40, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 21, "w": 40, "h": 37 }, + "sourceSize": { "w": 43, "h": 59 }, + "duration": 100 + }, + { + "filename": "0040.png", + "frame": { "x": 160, "y": 185, "w": 39, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 21, "w": 39, "h": 37 }, + "sourceSize": { "w": 43, "h": 59 }, + "duration": 100 + }, + { + "filename": "0041.png", + "frame": { "x": 157, "y": 222, "w": 39, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 22, "w": 39, "h": 36 }, + "sourceSize": { "w": 43, "h": 59 }, + "duration": 100 + }, + { + "filename": "0042.png", + "frame": { "x": 0, "y": 223, "w": 39, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 22, "w": 39, "h": 36 }, + "sourceSize": { "w": 43, "h": 59 }, + "duration": 100 + }, + { + "filename": "0043.png", + "frame": { "x": 40, "y": 222, "w": 39, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 21, "w": 39, "h": 37 }, + "sourceSize": { "w": 43, "h": 59 }, + "duration": 100 + }, + { + "filename": "0044.png", + "frame": { "x": 79, "y": 222, "w": 39, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 21, "w": 39, "h": 37 }, + "sourceSize": { "w": 43, "h": 59 }, + "duration": 100 + }, + { + "filename": "0045.png", + "frame": { "x": 118, "y": 222, "w": 39, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 21, "w": 39, "h": 37 }, + "sourceSize": { "w": 43, "h": 59 }, + "duration": 100 + }, + { + "filename": "0046.png", + "frame": { "x": 80, "y": 184, "w": 40, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 20, "w": 40, "h": 38 }, + "sourceSize": { "w": 43, "h": 59 }, + "duration": 100 + }, + { + "filename": "0047.png", + "frame": { "x": 40, "y": 146, "w": 40, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 20, "w": 40, "h": 39 }, + "sourceSize": { "w": 43, "h": 59 }, + "duration": 100 + }, + { + "filename": "0048.png", + "frame": { "x": 120, "y": 183, "w": 40, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 20, "w": 40, "h": 39 }, + "sourceSize": { "w": 43, "h": 59 }, + "duration": 100 + }, + { + "filename": "0049.png", + "frame": { "x": 123, "y": 144, "w": 40, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 20, "w": 40, "h": 39 }, + "sourceSize": { "w": 43, "h": 59 }, + "duration": 100 + }, + { + "filename": "0050.png", + "frame": { "x": 80, "y": 145, "w": 40, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 20, "w": 40, "h": 39 }, + "sourceSize": { "w": 43, "h": 59 }, + "duration": 100 + }, + { + "filename": "0051.png", + "frame": { "x": 40, "y": 185, "w": 40, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 21, "w": 40, "h": 37 }, + "sourceSize": { "w": 43, "h": 59 }, + "duration": 100 + }, + { + "filename": "0052.png", + "frame": { "x": 160, "y": 185, "w": 39, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 21, "w": 39, "h": 37 }, + "sourceSize": { "w": 43, "h": 59 }, + "duration": 100 + }, + { + "filename": "0053.png", + "frame": { "x": 157, "y": 222, "w": 39, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 22, "w": 39, "h": 36 }, + "sourceSize": { "w": 43, "h": 59 }, + "duration": 100 + }, + { + "filename": "0054.png", + "frame": { "x": 0, "y": 223, "w": 39, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 22, "w": 39, "h": 36 }, + "sourceSize": { "w": 43, "h": 59 }, + "duration": 100 + }, + { + "filename": "0055.png", + "frame": { "x": 40, "y": 222, "w": 39, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 21, "w": 39, "h": 37 }, + "sourceSize": { "w": 43, "h": 59 }, + "duration": 100 + }, + { + "filename": "0056.png", + "frame": { "x": 79, "y": 222, "w": 39, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 21, "w": 39, "h": 37 }, + "sourceSize": { "w": 43, "h": 59 }, + "duration": 100 + }, + { + "filename": "0057.png", + "frame": { "x": 118, "y": 222, "w": 39, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 21, "w": 39, "h": 37 }, + "sourceSize": { "w": 43, "h": 59 }, + "duration": 100 + }, + { + "filename": "0058.png", + "frame": { "x": 80, "y": 184, "w": 40, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 20, "w": 40, "h": 38 }, + "sourceSize": { "w": 43, "h": 59 }, + "duration": 100 + }, + { + "filename": "0059.png", + "frame": { "x": 40, "y": 146, "w": 40, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 20, "w": 40, "h": 39 }, + "sourceSize": { "w": 43, "h": 59 }, + "duration": 100 + }, + { + "filename": "0060.png", + "frame": { "x": 120, "y": 183, "w": 40, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 20, "w": 40, "h": 39 }, + "sourceSize": { "w": 43, "h": 59 }, + "duration": 100 + }, + { + "filename": "0061.png", + "frame": { "x": 0, "y": 184, "w": 40, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 20, "w": 40, "h": 39 }, + "sourceSize": { "w": 43, "h": 59 }, + "duration": 100 + }, + { + "filename": "0062.png", + "frame": { "x": 0, "y": 144, "w": 40, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 19, "w": 40, "h": 40 }, + "sourceSize": { "w": 43, "h": 59 }, + "duration": 100 + }, + { + "filename": "0063.png", + "frame": { "x": 40, "y": 105, "w": 40, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 18, "w": 40, "h": 41 }, + "sourceSize": { "w": 43, "h": 59 }, + "duration": 100 + }, + { + "filename": "0064.png", + "frame": { "x": 0, "y": 102, "w": 40, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 17, "w": 40, "h": 42 }, + "sourceSize": { "w": 43, "h": 59 }, + "duration": 100 + }, + { + "filename": "0065.png", + "frame": { "x": 123, "y": 102, "w": 40, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 17, "w": 40, "h": 42 }, + "sourceSize": { "w": 43, "h": 59 }, + "duration": 100 + }, + { + "filename": "0066.png", + "frame": { "x": 163, "y": 100, "w": 40, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 16, "w": 40, "h": 43 }, + "sourceSize": { "w": 43, "h": 59 }, + "duration": 100 + }, + { + "filename": "0067.png", + "frame": { "x": 0, "y": 58, "w": 40, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 15, "w": 40, "h": 44 }, + "sourceSize": { "w": 43, "h": 59 }, + "duration": 100 + }, + { + "filename": "0068.png", + "frame": { "x": 123, "y": 57, "w": 40, "h": 45 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 14, "w": 40, "h": 45 }, + "sourceSize": { "w": 43, "h": 59 }, + "duration": 100 + }, + { + "filename": "0069.png", + "frame": { "x": 83, "y": 57, "w": 40, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 13, "w": 40, "h": 46 }, + "sourceSize": { "w": 43, "h": 59 }, + "duration": 100 + }, + { + "filename": "0070.png", + "frame": { "x": 43, "y": 57, "w": 40, "h": 48 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 11, "w": 40, "h": 48 }, + "sourceSize": { "w": 43, "h": 59 }, + "duration": 100 + }, + { + "filename": "0071.png", + "frame": { "x": 165, "y": 51, "w": 40, "h": 49 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 10, "w": 40, "h": 49 }, + "sourceSize": { "w": 43, "h": 59 }, + "duration": 100 + }, + { + "filename": "0072.png", + "frame": { "x": 165, "y": 0, "w": 40, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 8, "w": 40, "h": 51 }, + "sourceSize": { "w": 43, "h": 59 }, + "duration": 100 + }, + { + "filename": "0073.png", + "frame": { "x": 43, "y": 0, "w": 42, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 42, "h": 57 }, + "sourceSize": { "w": 43, "h": 59 }, + "duration": 100 + }, + { + "filename": "0074.png", + "frame": { "x": 0, "y": 0, "w": 43, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 43, "h": 58 }, + "sourceSize": { "w": 43, "h": 59 }, + "duration": 100 + }, + { + "filename": "0075.png", + "frame": { "x": 0, "y": 0, "w": 43, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 43, "h": 58 }, + "sourceSize": { "w": 43, "h": 59 }, + "duration": 100 + }, + { + "filename": "0076.png", + "frame": { "x": 0, "y": 0, "w": 43, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 43, "h": 58 }, + "sourceSize": { "w": 43, "h": 59 }, + "duration": 100 + }, + { + "filename": "0077.png", + "frame": { "x": 0, "y": 0, "w": 43, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 43, "h": 58 }, + "sourceSize": { "w": 43, "h": 59 }, + "duration": 100 + }, + { + "filename": "0078.png", + "frame": { "x": 126, "y": 0, "w": 39, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 39, "h": 55 }, + "sourceSize": { "w": 43, "h": 59 }, + "duration": 100 + }, + { + "filename": "0079.png", + "frame": { "x": 85, "y": 0, "w": 41, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 0, "w": 41, "h": 57 }, + "sourceSize": { "w": 43, "h": 59 }, + "duration": 100 + }, + { + "filename": "0080.png", + "frame": { "x": 163, "y": 143, "w": 39, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 16, "w": 39, "h": 42 }, + "sourceSize": { "w": 43, "h": 59 }, + "duration": 100 + }, + { + "filename": "0081.png", + "frame": { "x": 83, "y": 103, "w": 40, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 16, "w": 40, "h": 42 }, + "sourceSize": { "w": 43, "h": 59 }, + "duration": 100 + }, + { + "filename": "0082.png", + "frame": { "x": 123, "y": 102, "w": 40, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 17, "w": 40, "h": 42 }, + "sourceSize": { "w": 43, "h": 59 }, + "duration": 100 + }, + { + "filename": "0083.png", + "frame": { "x": 0, "y": 102, "w": 40, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 17, "w": 40, "h": 42 }, + "sourceSize": { "w": 43, "h": 59 }, + "duration": 100 + }, + { + "filename": "0084.png", + "frame": { "x": 40, "y": 105, "w": 40, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 18, "w": 40, "h": 41 }, + "sourceSize": { "w": 43, "h": 59 }, + "duration": 100 + }, + { + "filename": "0085.png", + "frame": { "x": 0, "y": 144, "w": 40, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 19, "w": 40, "h": 40 }, + "sourceSize": { "w": 43, "h": 59 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.13-x64", + "image": "728.png", + "format": "I8", + "size": { "w": 205, "h": 259 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/back/shiny/728.png b/public/images/pokemon/exp/back/shiny/728.png index 116bbd97904..c28f73eb846 100644 Binary files a/public/images/pokemon/exp/back/shiny/728.png and b/public/images/pokemon/exp/back/shiny/728.png differ diff --git a/public/images/pokemon/exp/back/shiny/729.json b/public/images/pokemon/exp/back/shiny/729.json index 88363e67c9b..97deebe472e 100644 --- a/public/images/pokemon/exp/back/shiny/729.json +++ b/public/images/pokemon/exp/back/shiny/729.json @@ -1,230 +1,1055 @@ -{ - "textures": [ - { - "image": "729.png", - "format": "RGBA8888", - "size": { - "w": 148, - "h": 148 - }, - "scale": 1, - "frames": [ - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 71, - "h": 50 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 70, - "h": 50 - }, - "frame": { - "x": 0, - "y": 0, - "w": 70, - "h": 50 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 71, - "h": 50 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 70, - "h": 49 - }, - "frame": { - "x": 0, - "y": 50, - "w": 70, - "h": 49 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 71, - "h": 50 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 70, - "h": 49 - }, - "frame": { - "x": 0, - "y": 50, - "w": 70, - "h": 49 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 71, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 69, - "h": 49 - }, - "frame": { - "x": 0, - "y": 99, - "w": 69, - "h": 49 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 71, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 69, - "h": 49 - }, - "frame": { - "x": 0, - "y": 99, - "w": 69, - "h": 49 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 71, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 68, - "h": 50 - }, - "frame": { - "x": 70, - "y": 0, - "w": 68, - "h": 50 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 71, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 68, - "h": 50 - }, - "frame": { - "x": 70, - "y": 0, - "w": 68, - "h": 50 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 71, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 67, - "h": 50 - }, - "frame": { - "x": 70, - "y": 50, - "w": 67, - "h": 50 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 71, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 70, - "h": 48 - }, - "frame": { - "x": 69, - "y": 100, - "w": 70, - "h": 48 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 71, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 70, - "h": 48 - }, - "frame": { - "x": 69, - "y": 100, - "w": 70, - "h": 48 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:2ec3964e8d511b8d6f4605adc54b17bc:5161b57c2302335b0d40aea50fb7f56d:b2d5dd692ec79c7357afdffa7b3670a9$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 348, "y": 280, "w": 56, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 9, "w": 56, "h": 54 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 166, "y": 283, "w": 55, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 10, "w": 55, "h": 53 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 0, "y": 284, "w": 54, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 10, "w": 54, "h": 53 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 348, "y": 334, "w": 52, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 11, "w": 52, "h": 52 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 49, "y": 337, "w": 49, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 11, "w": 49, "h": 52 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 49, "y": 389, "w": 47, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 12, "w": 47, "h": 51 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 265, "y": 388, "w": 47, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 11, "w": 47, "h": 52 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 386, "y": 386, "w": 47, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 11, "w": 47, "h": 52 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 98, "y": 337, "w": 49, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 11, "w": 49, "h": 52 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 287, "y": 335, "w": 51, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 10, "w": 51, "h": 53 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 491, "y": 224, "w": 53, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 10, "w": 53, "h": 53 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0012.png", + "frame": { "x": 112, "y": 283, "w": 54, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 9, "w": 54, "h": 54 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0013.png", + "frame": { "x": 292, "y": 280, "w": 56, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 8, "w": 56, "h": 55 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0014.png", + "frame": { "x": 174, "y": 228, "w": 57, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 8, "w": 57, "h": 55 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0015.png", + "frame": { "x": 328, "y": 114, "w": 59, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 7, "w": 59, "h": 56 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0016.png", + "frame": { "x": 195, "y": 61, "w": 59, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 7, "w": 59, "h": 57 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0017.png", + "frame": { "x": 334, "y": 57, "w": 60, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 7, "w": 60, "h": 57 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0018.png", + "frame": { "x": 394, "y": 57, "w": 60, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 7, "w": 60, "h": 57 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0019.png", + "frame": { "x": 268, "y": 60, "w": 60, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 7, "w": 60, "h": 57 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0020.png", + "frame": { "x": 68, "y": 62, "w": 60, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 7, "w": 60, "h": 56 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0021.png", + "frame": { "x": 234, "y": 172, "w": 59, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 8, "w": 59, "h": 55 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0022.png", + "frame": { "x": 293, "y": 225, "w": 59, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 8, "w": 59, "h": 55 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0023.png", + "frame": { "x": 234, "y": 227, "w": 58, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 8, "w": 58, "h": 55 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0024.png", + "frame": { "x": 59, "y": 174, "w": 57, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 9, "w": 57, "h": 54 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0025.png", + "frame": { "x": 348, "y": 280, "w": 56, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 9, "w": 56, "h": 54 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0026.png", + "frame": { "x": 166, "y": 283, "w": 55, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 10, "w": 55, "h": 53 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0027.png", + "frame": { "x": 0, "y": 284, "w": 54, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 10, "w": 54, "h": 53 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0028.png", + "frame": { "x": 348, "y": 334, "w": 52, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 11, "w": 52, "h": 52 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0029.png", + "frame": { "x": 49, "y": 337, "w": 49, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 11, "w": 49, "h": 52 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0030.png", + "frame": { "x": 49, "y": 389, "w": 47, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 12, "w": 47, "h": 51 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0031.png", + "frame": { "x": 265, "y": 388, "w": 47, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 11, "w": 47, "h": 52 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0032.png", + "frame": { "x": 386, "y": 386, "w": 47, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 11, "w": 47, "h": 52 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0033.png", + "frame": { "x": 98, "y": 337, "w": 49, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 11, "w": 49, "h": 52 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0034.png", + "frame": { "x": 287, "y": 335, "w": 51, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 10, "w": 51, "h": 53 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0035.png", + "frame": { "x": 491, "y": 224, "w": 53, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 10, "w": 53, "h": 53 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0036.png", + "frame": { "x": 112, "y": 283, "w": 54, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 9, "w": 54, "h": 54 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0037.png", + "frame": { "x": 292, "y": 280, "w": 56, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 8, "w": 56, "h": 55 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0038.png", + "frame": { "x": 174, "y": 228, "w": 57, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 8, "w": 57, "h": 55 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0039.png", + "frame": { "x": 328, "y": 114, "w": 59, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 7, "w": 59, "h": 56 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0040.png", + "frame": { "x": 195, "y": 61, "w": 59, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 7, "w": 59, "h": 57 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0041.png", + "frame": { "x": 334, "y": 57, "w": 60, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 7, "w": 60, "h": 57 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0042.png", + "frame": { "x": 394, "y": 57, "w": 60, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 7, "w": 60, "h": 57 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0043.png", + "frame": { "x": 268, "y": 60, "w": 60, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 7, "w": 60, "h": 57 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0044.png", + "frame": { "x": 68, "y": 62, "w": 60, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 7, "w": 60, "h": 56 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0045.png", + "frame": { "x": 234, "y": 172, "w": 59, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 8, "w": 59, "h": 55 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0046.png", + "frame": { "x": 293, "y": 225, "w": 59, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 8, "w": 59, "h": 55 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0047.png", + "frame": { "x": 234, "y": 227, "w": 58, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 8, "w": 58, "h": 55 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0048.png", + "frame": { "x": 59, "y": 174, "w": 57, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 9, "w": 57, "h": 54 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0049.png", + "frame": { "x": 348, "y": 280, "w": 56, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 9, "w": 56, "h": 54 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0050.png", + "frame": { "x": 166, "y": 283, "w": 55, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 10, "w": 55, "h": 53 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0051.png", + "frame": { "x": 0, "y": 284, "w": 54, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 10, "w": 54, "h": 53 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0052.png", + "frame": { "x": 348, "y": 334, "w": 52, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 11, "w": 52, "h": 52 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0053.png", + "frame": { "x": 49, "y": 337, "w": 49, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 11, "w": 49, "h": 52 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0054.png", + "frame": { "x": 49, "y": 389, "w": 47, "h": 51 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 12, "w": 47, "h": 51 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0055.png", + "frame": { "x": 265, "y": 388, "w": 47, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 11, "w": 47, "h": 52 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0056.png", + "frame": { "x": 386, "y": 386, "w": 47, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 11, "w": 47, "h": 52 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0057.png", + "frame": { "x": 98, "y": 337, "w": 49, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 11, "w": 49, "h": 52 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0058.png", + "frame": { "x": 287, "y": 335, "w": 51, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 10, "w": 51, "h": 53 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0059.png", + "frame": { "x": 491, "y": 224, "w": 53, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 10, "w": 53, "h": 53 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0060.png", + "frame": { "x": 112, "y": 283, "w": 54, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 9, "w": 54, "h": 54 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0061.png", + "frame": { "x": 292, "y": 280, "w": 56, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 8, "w": 56, "h": 55 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0062.png", + "frame": { "x": 174, "y": 228, "w": 57, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 8, "w": 57, "h": 55 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0063.png", + "frame": { "x": 328, "y": 114, "w": 59, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 7, "w": 59, "h": 56 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0064.png", + "frame": { "x": 195, "y": 61, "w": 59, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 7, "w": 59, "h": 57 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0065.png", + "frame": { "x": 334, "y": 57, "w": 60, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 7, "w": 60, "h": 57 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0066.png", + "frame": { "x": 394, "y": 57, "w": 60, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 7, "w": 60, "h": 57 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0067.png", + "frame": { "x": 268, "y": 60, "w": 60, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 7, "w": 60, "h": 57 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0068.png", + "frame": { "x": 68, "y": 62, "w": 60, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 7, "w": 60, "h": 56 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0069.png", + "frame": { "x": 234, "y": 172, "w": 59, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 8, "w": 59, "h": 55 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0070.png", + "frame": { "x": 293, "y": 225, "w": 59, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 8, "w": 59, "h": 55 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0071.png", + "frame": { "x": 234, "y": 227, "w": 58, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 8, "w": 58, "h": 55 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0072.png", + "frame": { "x": 59, "y": 174, "w": 57, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 9, "w": 57, "h": 54 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0073.png", + "frame": { "x": 348, "y": 280, "w": 56, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 9, "w": 56, "h": 54 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0074.png", + "frame": { "x": 467, "y": 279, "w": 58, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 9, "w": 58, "h": 54 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0075.png", + "frame": { "x": 0, "y": 63, "w": 61, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 8, "w": 61, "h": 55 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0076.png", + "frame": { "x": 334, "y": 0, "w": 63, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 7, "w": 63, "h": 57 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0077.png", + "frame": { "x": 135, "y": 61, "w": 60, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 7, "w": 60, "h": 57 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0078.png", + "frame": { "x": 458, "y": 56, "w": 59, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 8, "w": 59, "h": 58 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0079.png", + "frame": { "x": 397, "y": 0, "w": 61, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 8, "w": 61, "h": 57 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0080.png", + "frame": { "x": 458, "y": 0, "w": 62, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 7, "w": 62, "h": 56 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0081.png", + "frame": { "x": 446, "y": 169, "w": 59, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 8, "w": 59, "h": 55 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0082.png", + "frame": { "x": 348, "y": 280, "w": 56, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 9, "w": 56, "h": 54 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0083.png", + "frame": { "x": 57, "y": 283, "w": 55, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 9, "w": 55, "h": 54 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0084.png", + "frame": { "x": 467, "y": 333, "w": 53, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 11, "w": 53, "h": 52 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0085.png", + "frame": { "x": 338, "y": 386, "w": 48, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 11, "w": 48, "h": 52 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0086.png", + "frame": { "x": 216, "y": 336, "w": 49, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 11, "w": 49, "h": 53 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0087.png", + "frame": { "x": 166, "y": 336, "w": 50, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 15, "y": 11, "w": 50, "h": 53 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0088.png", + "frame": { "x": 0, "y": 337, "w": 49, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 11, "w": 49, "h": 53 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0089.png", + "frame": { "x": 452, "y": 385, "w": 48, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 10, "w": 48, "h": 53 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0090.png", + "frame": { "x": 400, "y": 334, "w": 52, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 11, "w": 52, "h": 52 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0091.png", + "frame": { "x": 348, "y": 280, "w": 56, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 9, "w": 56, "h": 54 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0092.png", + "frame": { "x": 231, "y": 282, "w": 56, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 9, "w": 56, "h": 54 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0093.png", + "frame": { "x": 117, "y": 228, "w": 57, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 8, "w": 57, "h": 55 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0094.png", + "frame": { "x": 58, "y": 118, "w": 58, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 7, "w": 58, "h": 56 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0095.png", + "frame": { "x": 352, "y": 225, "w": 58, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 8, "w": 58, "h": 55 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0096.png", + "frame": { "x": 0, "y": 118, "w": 58, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 7, "w": 58, "h": 56 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0097.png", + "frame": { "x": 314, "y": 170, "w": 59, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 8, "w": 59, "h": 55 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0098.png", + "frame": { "x": 175, "y": 118, "w": 59, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 8, "w": 59, "h": 55 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0099.png", + "frame": { "x": 373, "y": 170, "w": 59, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 8, "w": 59, "h": 55 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0100.png", + "frame": { "x": 116, "y": 118, "w": 59, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 8, "w": 59, "h": 55 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0101.png", + "frame": { "x": 446, "y": 114, "w": 60, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 8, "w": 60, "h": 55 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0102.png", + "frame": { "x": 202, "y": 0, "w": 66, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 66, "h": 61 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0103.png", + "frame": { "x": 68, "y": 0, "w": 67, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 67, "h": 62 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0104.png", + "frame": { "x": 0, "y": 0, "w": 68, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 68, "h": 63 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0105.png", + "frame": { "x": 268, "y": 0, "w": 66, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 66, "h": 60 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0106.png", + "frame": { "x": 135, "y": 0, "w": 67, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 67, "h": 61 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0107.png", + "frame": { "x": 254, "y": 117, "w": 60, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 8, "w": 60, "h": 55 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0108.png", + "frame": { "x": 116, "y": 173, "w": 59, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 8, "w": 59, "h": 55 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0109.png", + "frame": { "x": 116, "y": 173, "w": 59, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 8, "w": 59, "h": 55 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0110.png", + "frame": { "x": 175, "y": 173, "w": 59, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 8, "w": 59, "h": 55 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0111.png", + "frame": { "x": 0, "y": 174, "w": 59, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 8, "w": 59, "h": 55 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0112.png", + "frame": { "x": 432, "y": 224, "w": 59, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 8, "w": 59, "h": 55 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0113.png", + "frame": { "x": 387, "y": 114, "w": 59, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 7, "w": 59, "h": 56 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0114.png", + "frame": { "x": 59, "y": 228, "w": 58, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 8, "w": 58, "h": 55 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0115.png", + "frame": { "x": 0, "y": 229, "w": 57, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 8, "w": 57, "h": 55 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + }, + { + "filename": "0116.png", + "frame": { "x": 410, "y": 279, "w": 57, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 8, "w": 57, "h": 55 }, + "sourceSize": { "w": 68, "h": 66 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.13-x64", + "image": "729.png", + "format": "I8", + "size": { "w": 544, "h": 440 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/back/shiny/729.png b/public/images/pokemon/exp/back/shiny/729.png index 7818ca064bc..15c7bb566cf 100644 Binary files a/public/images/pokemon/exp/back/shiny/729.png and b/public/images/pokemon/exp/back/shiny/729.png differ diff --git a/public/images/pokemon/exp/back/shiny/730.json b/public/images/pokemon/exp/back/shiny/730.json index b32a006ec2b..5e3c835b381 100644 --- a/public/images/pokemon/exp/back/shiny/730.json +++ b/public/images/pokemon/exp/back/shiny/730.json @@ -1,230 +1,839 @@ -{ - "textures": [ - { - "image": "730.png", - "format": "RGBA8888", - "size": { - "w": 206, - "h": 206 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 69, - "h": 82 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 69, - "h": 79 - }, - "frame": { - "x": 0, - "y": 0, - "w": 69, - "h": 79 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 69, - "h": 82 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 68, - "h": 81 - }, - "frame": { - "x": 69, - "y": 0, - "w": 68, - "h": 81 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 69, - "h": 82 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 68, - "h": 81 - }, - "frame": { - "x": 69, - "y": 0, - "w": 68, - "h": 81 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 69, - "h": 82 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 68, - "h": 81 - }, - "frame": { - "x": 0, - "y": 79, - "w": 68, - "h": 81 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 69, - "h": 82 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 69, - "h": 79 - }, - "frame": { - "x": 68, - "y": 81, - "w": 69, - "h": 79 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 69, - "h": 82 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 69, - "h": 79 - }, - "frame": { - "x": 68, - "y": 81, - "w": 69, - "h": 79 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 69, - "h": 82 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 69, - "h": 79 - }, - "frame": { - "x": 137, - "y": 0, - "w": 69, - "h": 79 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 69, - "h": 82 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 69, - "h": 79 - }, - "frame": { - "x": 137, - "y": 0, - "w": 69, - "h": 79 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 69, - "h": 82 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 69, - "h": 78 - }, - "frame": { - "x": 137, - "y": 79, - "w": 69, - "h": 78 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 69, - "h": 82 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 69, - "h": 78 - }, - "frame": { - "x": 137, - "y": 79, - "w": 69, - "h": 78 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:58a363a646c000c7482433c620e2e758:8b636d10e03d9f55a9d52a248f1e3999:fcd0d2cb6b26724e796ae0dcb71fae3f$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 397, "y": 0, "w": 75, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 13, "w": 75, "h": 71 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 324, "y": 0, "w": 73, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 11, "w": 73, "h": 73 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 397, "y": 71, "w": 69, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 8, "w": 69, "h": 76 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 70, "y": 135, "w": 66, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 5, "w": 66, "h": 78 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 278, "y": 401, "w": 61, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 3, "w": 61, "h": 78 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 137, "y": 400, "w": 60, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 19, "y": 1, "w": 60, "h": 80 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 77, "y": 394, "w": 60, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 19, "y": 1, "w": 60, "h": 80 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 217, "y": 335, "w": 61, "h": 79 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 2, "w": 61, "h": 79 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 415, "y": 418, "w": 61, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 4, "w": 61, "h": 77 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 351, "y": 359, "w": 64, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 16, "y": 8, "w": 64, "h": 76 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 505, "y": 288, "w": 69, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 13, "w": 69, "h": 71 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0012.png", + "frame": { "x": 278, "y": 334, "w": 73, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 17, "w": 73, "h": 67 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0013.png", + "frame": { "x": 124, "y": 265, "w": 76, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 18, "w": 76, "h": 66 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0014.png", + "frame": { "x": 292, "y": 269, "w": 77, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 19, "w": 77, "h": 65 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0015.png", + "frame": { "x": 200, "y": 271, "w": 78, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 19, "w": 78, "h": 64 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0016.png", + "frame": { "x": 197, "y": 414, "w": 77, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 19, "w": 77, "h": 62 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0017.png", + "frame": { "x": 0, "y": 394, "w": 77, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 18, "w": 77, "h": 63 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0018.png", + "frame": { "x": 64, "y": 331, "w": 78, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 18, "w": 78, "h": 63 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0019.png", + "frame": { "x": 385, "y": 212, "w": 79, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 17, "w": 79, "h": 64 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0020.png", + "frame": { "x": 213, "y": 207, "w": 79, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 17, "w": 79, "h": 64 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0021.png", + "frame": { "x": 156, "y": 67, "w": 79, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 17, "w": 79, "h": 67 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0022.png", + "frame": { "x": 78, "y": 67, "w": 78, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 16, "w": 78, "h": 68 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0023.png", + "frame": { "x": 397, "y": 0, "w": 75, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 13, "w": 75, "h": 71 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0024.png", + "frame": { "x": 324, "y": 0, "w": 73, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 11, "w": 73, "h": 73 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0025.png", + "frame": { "x": 397, "y": 71, "w": 69, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 8, "w": 69, "h": 76 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0026.png", + "frame": { "x": 70, "y": 135, "w": 66, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 5, "w": 66, "h": 78 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0027.png", + "frame": { "x": 278, "y": 401, "w": 61, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 3, "w": 61, "h": 78 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0028.png", + "frame": { "x": 137, "y": 400, "w": 60, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 19, "y": 1, "w": 60, "h": 80 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0029.png", + "frame": { "x": 77, "y": 394, "w": 60, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 19, "y": 1, "w": 60, "h": 80 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0030.png", + "frame": { "x": 217, "y": 335, "w": 61, "h": 79 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 2, "w": 61, "h": 79 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0031.png", + "frame": { "x": 415, "y": 418, "w": 61, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 4, "w": 61, "h": 77 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0032.png", + "frame": { "x": 351, "y": 359, "w": 64, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 16, "y": 8, "w": 64, "h": 76 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0033.png", + "frame": { "x": 505, "y": 288, "w": 69, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 13, "w": 69, "h": 71 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0034.png", + "frame": { "x": 278, "y": 334, "w": 73, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 17, "w": 73, "h": 67 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0035.png", + "frame": { "x": 124, "y": 265, "w": 76, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 18, "w": 76, "h": 66 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0036.png", + "frame": { "x": 292, "y": 269, "w": 77, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 19, "w": 77, "h": 65 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0037.png", + "frame": { "x": 200, "y": 271, "w": 78, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 19, "w": 78, "h": 64 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0038.png", + "frame": { "x": 197, "y": 414, "w": 77, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 19, "w": 77, "h": 62 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0039.png", + "frame": { "x": 0, "y": 394, "w": 77, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 18, "w": 77, "h": 63 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0040.png", + "frame": { "x": 64, "y": 331, "w": 78, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 18, "w": 78, "h": 63 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0041.png", + "frame": { "x": 385, "y": 212, "w": 79, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 17, "w": 79, "h": 64 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0042.png", + "frame": { "x": 213, "y": 207, "w": 79, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 17, "w": 79, "h": 64 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0043.png", + "frame": { "x": 156, "y": 67, "w": 79, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 17, "w": 79, "h": 67 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0044.png", + "frame": { "x": 78, "y": 67, "w": 78, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 16, "w": 78, "h": 68 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0045.png", + "frame": { "x": 397, "y": 0, "w": 75, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 13, "w": 75, "h": 71 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0046.png", + "frame": { "x": 324, "y": 0, "w": 73, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 11, "w": 73, "h": 73 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0047.png", + "frame": { "x": 397, "y": 71, "w": 69, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 8, "w": 69, "h": 76 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0048.png", + "frame": { "x": 70, "y": 135, "w": 66, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 5, "w": 66, "h": 78 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0049.png", + "frame": { "x": 278, "y": 401, "w": 61, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 3, "w": 61, "h": 78 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0050.png", + "frame": { "x": 137, "y": 400, "w": 60, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 19, "y": 1, "w": 60, "h": 80 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0051.png", + "frame": { "x": 77, "y": 394, "w": 60, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 19, "y": 1, "w": 60, "h": 80 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0052.png", + "frame": { "x": 217, "y": 335, "w": 61, "h": 79 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 2, "w": 61, "h": 79 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0053.png", + "frame": { "x": 415, "y": 418, "w": 61, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 4, "w": 61, "h": 77 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0054.png", + "frame": { "x": 351, "y": 359, "w": 64, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 16, "y": 8, "w": 64, "h": 76 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0055.png", + "frame": { "x": 505, "y": 288, "w": 69, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 13, "w": 69, "h": 71 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0056.png", + "frame": { "x": 278, "y": 334, "w": 73, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 17, "w": 73, "h": 67 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0057.png", + "frame": { "x": 124, "y": 265, "w": 76, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 18, "w": 76, "h": 66 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0058.png", + "frame": { "x": 292, "y": 269, "w": 77, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 19, "w": 77, "h": 65 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0059.png", + "frame": { "x": 200, "y": 271, "w": 78, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 19, "w": 78, "h": 64 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0060.png", + "frame": { "x": 197, "y": 414, "w": 77, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 19, "w": 77, "h": 62 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0061.png", + "frame": { "x": 0, "y": 394, "w": 77, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 18, "w": 77, "h": 63 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0062.png", + "frame": { "x": 64, "y": 331, "w": 78, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 18, "w": 78, "h": 63 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0063.png", + "frame": { "x": 385, "y": 212, "w": 79, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 17, "w": 79, "h": 64 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0064.png", + "frame": { "x": 213, "y": 207, "w": 79, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 17, "w": 79, "h": 64 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0065.png", + "frame": { "x": 156, "y": 67, "w": 79, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 17, "w": 79, "h": 67 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0066.png", + "frame": { "x": 78, "y": 67, "w": 78, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 16, "w": 78, "h": 68 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0067.png", + "frame": { "x": 472, "y": 0, "w": 75, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 13, "w": 75, "h": 71 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0068.png", + "frame": { "x": 0, "y": 135, "w": 70, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 10, "w": 70, "h": 74 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0069.png", + "frame": { "x": 0, "y": 288, "w": 64, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 16, "y": 7, "w": 64, "h": 77 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0070.png", + "frame": { "x": 504, "y": 359, "w": 60, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 20, "y": 4, "w": 60, "h": 80 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0071.png", + "frame": { "x": 369, "y": 276, "w": 60, "h": 83 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 20, "y": 1, "w": 60, "h": 83 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0072.png", + "frame": { "x": 64, "y": 213, "w": 60, "h": 84 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 20, "y": 0, "w": 60, "h": 84 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0073.png", + "frame": { "x": 466, "y": 139, "w": 62, "h": 83 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 20, "y": 1, "w": 62, "h": 83 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0074.png", + "frame": { "x": 0, "y": 209, "w": 64, "h": 79 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 19, "y": 5, "w": 64, "h": 79 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0075.png", + "frame": { "x": 236, "y": 134, "w": 71, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 11, "w": 71, "h": 73 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0076.png", + "frame": { "x": 136, "y": 199, "w": 77, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 18, "w": 77, "h": 66 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0077.png", + "frame": { "x": 156, "y": 134, "w": 80, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 19, "w": 80, "h": 65 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0078.png", + "frame": { "x": 315, "y": 73, "w": 80, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 19, "w": 80, "h": 65 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0079.png", + "frame": { "x": 385, "y": 147, "w": 79, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 19, "w": 79, "h": 65 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0080.png", + "frame": { "x": 307, "y": 204, "w": 78, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 19, "w": 78, "h": 65 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0081.png", + "frame": { "x": 429, "y": 288, "w": 76, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 19, "w": 76, "h": 65 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0082.png", + "frame": { "x": 142, "y": 335, "w": 75, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 19, "w": 75, "h": 65 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0083.png", + "frame": { "x": 429, "y": 353, "w": 75, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 19, "w": 75, "h": 65 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0084.png", + "frame": { "x": 464, "y": 222, "w": 76, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 18, "w": 76, "h": 66 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0085.png", + "frame": { "x": 307, "y": 138, "w": 78, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 18, "w": 78, "h": 66 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0086.png", + "frame": { "x": 235, "y": 68, "w": 80, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 18, "w": 80, "h": 66 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0087.png", + "frame": { "x": 82, "y": 0, "w": 82, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 17, "w": 82, "h": 67 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0088.png", + "frame": { "x": 0, "y": 0, "w": 82, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 17, "w": 82, "h": 67 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0089.png", + "frame": { "x": 164, "y": 0, "w": 81, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 17, "w": 81, "h": 67 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0090.png", + "frame": { "x": 245, "y": 0, "w": 79, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 16, "w": 79, "h": 68 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0091.png", + "frame": { "x": 0, "y": 67, "w": 78, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 16, "w": 78, "h": 68 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + }, + { + "filename": "0092.png", + "frame": { "x": 466, "y": 71, "w": 77, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 16, "w": 77, "h": 68 }, + "sourceSize": { "w": 84, "h": 84 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.13-x64", + "image": "730.png", + "format": "I8", + "size": { "w": 574, "h": 495 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/back/shiny/730.png b/public/images/pokemon/exp/back/shiny/730.png index 1335419944f..413702c3bfd 100644 Binary files a/public/images/pokemon/exp/back/shiny/730.png and b/public/images/pokemon/exp/back/shiny/730.png differ diff --git a/public/images/pokemon/exp/back/shiny/746-school.json b/public/images/pokemon/exp/back/shiny/746-school.json index ed524e1a4e2..85063ecea1f 100644 --- a/public/images/pokemon/exp/back/shiny/746-school.json +++ b/public/images/pokemon/exp/back/shiny/746-school.json @@ -1,230 +1,191 @@ -{ - "textures": [ - { - "image": "746-school.png", - "format": "RGBA8888", - "size": { - "w": 261, - "h": 261 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 97, - "h": 84 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 97, - "h": 80 - }, - "frame": { - "x": 0, - "y": 0, - "w": 97, - "h": 80 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 97, - "h": 84 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 96, - "h": 81 - }, - "frame": { - "x": 97, - "y": 0, - "w": 96, - "h": 81 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 97, - "h": 84 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 96, - "h": 81 - }, - "frame": { - "x": 97, - "y": 0, - "w": 96, - "h": 81 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 97, - "h": 84 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 93, - "h": 80 - }, - "frame": { - "x": 0, - "y": 80, - "w": 93, - "h": 80 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 97, - "h": 84 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 93, - "h": 80 - }, - "frame": { - "x": 0, - "y": 80, - "w": 93, - "h": 80 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 97, - "h": 84 - }, - "spriteSourceSize": { - "x": 2, - "y": 5, - "w": 87, - "h": 79 - }, - "frame": { - "x": 0, - "y": 160, - "w": 87, - "h": 79 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 97, - "h": 84 - }, - "spriteSourceSize": { - "x": 2, - "y": 5, - "w": 87, - "h": 79 - }, - "frame": { - "x": 87, - "y": 160, - "w": 87, - "h": 79 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 97, - "h": 84 - }, - "spriteSourceSize": { - "x": 3, - "y": 4, - "w": 89, - "h": 78 - }, - "frame": { - "x": 93, - "y": 81, - "w": 89, - "h": 78 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 97, - "h": 84 - }, - "spriteSourceSize": { - "x": 3, - "y": 4, - "w": 89, - "h": 78 - }, - "frame": { - "x": 93, - "y": 81, - "w": 89, - "h": 78 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 97, - "h": 84 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 87, - "h": 77 - }, - "frame": { - "x": 174, - "y": 159, - "w": 87, - "h": 77 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:b6f5edcb419173bceb1876532c1f18db:d88467b51af7d786b06e3b5b9daaa4e3:10f3c9d1f1118f8f9f6e40f37a0eb499$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 278, "y": 205, "w": 96, "h": 97 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 7, "w": 96, "h": 97 }, + "sourceSize": { "w": 100, "h": 111 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 287, "y": 107, "w": 96, "h": 98 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 6, "w": 96, "h": 98 }, + "sourceSize": { "w": 100, "h": 111 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 94, "y": 106, "w": 94, "h": 100 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 6, "w": 94, "h": 100 }, + "sourceSize": { "w": 100, "h": 111 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 93, "y": 206, "w": 93, "h": 99 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 6, "w": 93, "h": 99 }, + "sourceSize": { "w": 100, "h": 111 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 0, "y": 103, "w": 94, "h": 102 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 5, "w": 94, "h": 102 }, + "sourceSize": { "w": 100, "h": 111 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 188, "y": 202, "w": 90, "h": 104 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 5, "w": 90, "h": 104 }, + "sourceSize": { "w": 100, "h": 111 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 282, "y": 0, "w": 92, "h": 105 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 92, "h": 105 }, + "sourceSize": { "w": 100, "h": 111 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 374, "y": 0, "w": 90, "h": 107 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 4, "w": 90, "h": 107 }, + "sourceSize": { "w": 100, "h": 111 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 96, "y": 0, "w": 93, "h": 106 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 93, "h": 106 }, + "sourceSize": { "w": 100, "h": 111 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 189, "y": 0, "w": 93, "h": 105 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 93, "h": 105 }, + "sourceSize": { "w": 100, "h": 111 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 0, "y": 0, "w": 96, "h": 103 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 96, "h": 103 }, + "sourceSize": { "w": 100, "h": 111 }, + "duration": 100 + }, + { + "filename": "0012.png", + "frame": { "x": 0, "y": 205, "w": 93, "h": 100 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 93, "h": 100 }, + "sourceSize": { "w": 100, "h": 111 }, + "duration": 100 + }, + { + "filename": "0013.png", + "frame": { "x": 383, "y": 107, "w": 96, "h": 98 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 96, "h": 98 }, + "sourceSize": { "w": 100, "h": 111 }, + "duration": 100 + }, + { + "filename": "0014.png", + "frame": { "x": 278, "y": 302, "w": 95, "h": 96 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 95, "h": 96 }, + "sourceSize": { "w": 100, "h": 111 }, + "duration": 100 + }, + { + "filename": "0015.png", + "frame": { "x": 95, "y": 306, "w": 97, "h": 94 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 97, "h": 94 }, + "sourceSize": { "w": 100, "h": 111 }, + "duration": 100 + }, + { + "filename": "0016.png", + "frame": { "x": 374, "y": 300, "w": 98, "h": 94 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 98, "h": 94 }, + "sourceSize": { "w": 100, "h": 111 }, + "duration": 100 + }, + { + "filename": "0017.png", + "frame": { "x": 0, "y": 305, "w": 95, "h": 96 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 95, "h": 96 }, + "sourceSize": { "w": 100, "h": 111 }, + "duration": 100 + }, + { + "filename": "0018.png", + "frame": { "x": 374, "y": 205, "w": 97, "h": 95 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 5, "w": 97, "h": 95 }, + "sourceSize": { "w": 100, "h": 111 }, + "duration": 100 + }, + { + "filename": "0019.png", + "frame": { "x": 373, "y": 394, "w": 94, "h": 97 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 94, "h": 97 }, + "sourceSize": { "w": 100, "h": 111 }, + "duration": 100 + }, + { + "filename": "0020.png", + "frame": { "x": 189, "y": 105, "w": 98, "h": 97 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 7, "w": 98, "h": 97 }, + "sourceSize": { "w": 100, "h": 111 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.13-x64", + "image": "746-school.png", + "format": "I8", + "size": { "w": 479, "h": 491 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/back/shiny/746-school.png b/public/images/pokemon/exp/back/shiny/746-school.png index 3d4af95cec3..2899d209989 100644 Binary files a/public/images/pokemon/exp/back/shiny/746-school.png and b/public/images/pokemon/exp/back/shiny/746-school.png differ diff --git a/public/images/pokemon/exp/back/shiny/746.json b/public/images/pokemon/exp/back/shiny/746.json index 97967ad0483..cf52bbd9a97 100644 --- a/public/images/pokemon/exp/back/shiny/746.json +++ b/public/images/pokemon/exp/back/shiny/746.json @@ -1,1490 +1,641 @@ -{ - "textures": [ - { - "image": "746.png", - "format": "RGBA8888", - "size": { - "w": 122, - "h": 122 - }, - "scale": 1, - "frames": [ - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 38, - "h": 25 - }, - "frame": { - "x": 0, - "y": 0, - "w": 38, - "h": 25 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 38, - "h": 25 - }, - "frame": { - "x": 0, - "y": 0, - "w": 38, - "h": 25 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 38, - "h": 25 - }, - "frame": { - "x": 0, - "y": 0, - "w": 38, - "h": 25 - } - }, - { - "filename": "0017.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 38, - "h": 25 - }, - "frame": { - "x": 0, - "y": 0, - "w": 38, - "h": 25 - } - }, - { - "filename": "0025.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 38, - "h": 25 - }, - "frame": { - "x": 0, - "y": 0, - "w": 38, - "h": 25 - } - }, - { - "filename": "0027.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 38, - "h": 25 - }, - "frame": { - "x": 0, - "y": 0, - "w": 38, - "h": 25 - } - }, - { - "filename": "0033.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 38, - "h": 25 - }, - "frame": { - "x": 0, - "y": 0, - "w": 38, - "h": 25 - } - }, - { - "filename": "0035.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 38, - "h": 25 - }, - "frame": { - "x": 0, - "y": 0, - "w": 38, - "h": 25 - } - }, - { - "filename": "0043.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 38, - "h": 25 - }, - "frame": { - "x": 0, - "y": 25, - "w": 38, - "h": 25 - } - }, - { - "filename": "0045.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 38, - "h": 25 - }, - "frame": { - "x": 0, - "y": 25, - "w": 38, - "h": 25 - } - }, - { - "filename": "0051.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 38, - "h": 25 - }, - "frame": { - "x": 0, - "y": 25, - "w": 38, - "h": 25 - } - }, - { - "filename": "0053.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 38, - "h": 25 - }, - "frame": { - "x": 0, - "y": 25, - "w": 38, - "h": 25 - } - }, - { - "filename": "0059.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 38, - "h": 25 - }, - "frame": { - "x": 0, - "y": 25, - "w": 38, - "h": 25 - } - }, - { - "filename": "0061.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 38, - "h": 25 - }, - "frame": { - "x": 0, - "y": 25, - "w": 38, - "h": 25 - } - }, - { - "filename": "0067.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 38, - "h": 25 - }, - "frame": { - "x": 0, - "y": 25, - "w": 38, - "h": 25 - } - }, - { - "filename": "0069.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 38, - "h": 25 - }, - "frame": { - "x": 0, - "y": 25, - "w": 38, - "h": 25 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 38, - "h": 24 - }, - "frame": { - "x": 0, - "y": 50, - "w": 38, - "h": 24 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 38, - "h": 24 - }, - "frame": { - "x": 0, - "y": 50, - "w": 38, - "h": 24 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 38, - "h": 24 - }, - "frame": { - "x": 0, - "y": 50, - "w": 38, - "h": 24 - } - }, - { - "filename": "0019.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 38, - "h": 24 - }, - "frame": { - "x": 0, - "y": 50, - "w": 38, - "h": 24 - } - }, - { - "filename": "0021.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 38, - "h": 24 - }, - "frame": { - "x": 0, - "y": 50, - "w": 38, - "h": 24 - } - }, - { - "filename": "0023.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 38, - "h": 24 - }, - "frame": { - "x": 0, - "y": 50, - "w": 38, - "h": 24 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 38, - "h": 24 - }, - "frame": { - "x": 0, - "y": 74, - "w": 38, - "h": 24 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 38, - "h": 24 - }, - "frame": { - "x": 0, - "y": 74, - "w": 38, - "h": 24 - } - }, - { - "filename": "0029.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 38, - "h": 24 - }, - "frame": { - "x": 0, - "y": 74, - "w": 38, - "h": 24 - } - }, - { - "filename": "0031.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 38, - "h": 24 - }, - "frame": { - "x": 0, - "y": 74, - "w": 38, - "h": 24 - } - }, - { - "filename": "0037.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 38, - "h": 24 - }, - "frame": { - "x": 0, - "y": 98, - "w": 38, - "h": 24 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 30 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 35, - "h": 25 - }, - "frame": { - "x": 38, - "y": 0, - "w": 35, - "h": 25 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 30 - }, - "spriteSourceSize": { - "x": 3, - "y": 4, - "w": 35, - "h": 25 - }, - "frame": { - "x": 38, - "y": 0, - "w": 35, - "h": 25 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 30 - }, - "spriteSourceSize": { - "x": 3, - "y": 4, - "w": 35, - "h": 25 - }, - "frame": { - "x": 38, - "y": 0, - "w": 35, - "h": 25 - } - }, - { - "filename": "0018.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 30 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 35, - "h": 25 - }, - "frame": { - "x": 38, - "y": 0, - "w": 35, - "h": 25 - } - }, - { - "filename": "0024.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 30 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 35, - "h": 25 - }, - "frame": { - "x": 38, - "y": 0, - "w": 35, - "h": 25 - } - }, - { - "filename": "0026.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 30 - }, - "spriteSourceSize": { - "x": 3, - "y": 4, - "w": 35, - "h": 25 - }, - "frame": { - "x": 38, - "y": 0, - "w": 35, - "h": 25 - } - }, - { - "filename": "0034.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 30 - }, - "spriteSourceSize": { - "x": 3, - "y": 4, - "w": 35, - "h": 25 - }, - "frame": { - "x": 38, - "y": 0, - "w": 35, - "h": 25 - } - }, - { - "filename": "0036.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 30 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 35, - "h": 25 - }, - "frame": { - "x": 38, - "y": 0, - "w": 35, - "h": 25 - } - }, - { - "filename": "0042.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 30 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 35, - "h": 25 - }, - "frame": { - "x": 38, - "y": 25, - "w": 35, - "h": 25 - } - }, - { - "filename": "0044.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 30 - }, - "spriteSourceSize": { - "x": 3, - "y": 4, - "w": 35, - "h": 25 - }, - "frame": { - "x": 38, - "y": 25, - "w": 35, - "h": 25 - } - }, - { - "filename": "0052.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 30 - }, - "spriteSourceSize": { - "x": 3, - "y": 4, - "w": 35, - "h": 25 - }, - "frame": { - "x": 38, - "y": 25, - "w": 35, - "h": 25 - } - }, - { - "filename": "0058.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 30 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 35, - "h": 25 - }, - "frame": { - "x": 38, - "y": 25, - "w": 35, - "h": 25 - } - }, - { - "filename": "0060.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 30 - }, - "spriteSourceSize": { - "x": 3, - "y": 4, - "w": 35, - "h": 25 - }, - "frame": { - "x": 38, - "y": 25, - "w": 35, - "h": 25 - } - }, - { - "filename": "0068.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 30 - }, - "spriteSourceSize": { - "x": 3, - "y": 4, - "w": 35, - "h": 25 - }, - "frame": { - "x": 38, - "y": 25, - "w": 35, - "h": 25 - } - }, - { - "filename": "0039.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 38, - "h": 24 - }, - "frame": { - "x": 38, - "y": 50, - "w": 38, - "h": 24 - } - }, - { - "filename": "0041.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 38, - "h": 24 - }, - "frame": { - "x": 38, - "y": 50, - "w": 38, - "h": 24 - } - }, - { - "filename": "0055.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 38, - "h": 24 - }, - "frame": { - "x": 38, - "y": 50, - "w": 38, - "h": 24 - } - }, - { - "filename": "0057.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 38, - "h": 24 - }, - "frame": { - "x": 38, - "y": 50, - "w": 38, - "h": 24 - } - }, - { - "filename": "0070.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 30 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 35, - "h": 25 - }, - "frame": { - "x": 73, - "y": 0, - "w": 35, - "h": 25 - } - }, - { - "filename": "0047.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 38, - "h": 24 - }, - "frame": { - "x": 73, - "y": 25, - "w": 38, - "h": 24 - } - }, - { - "filename": "0049.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 38, - "h": 24 - }, - "frame": { - "x": 73, - "y": 25, - "w": 38, - "h": 24 - } - }, - { - "filename": "0063.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 38, - "h": 24 - }, - "frame": { - "x": 73, - "y": 25, - "w": 38, - "h": 24 - } - }, - { - "filename": "0065.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 30 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 38, - "h": 24 - }, - "frame": { - "x": 73, - "y": 25, - "w": 38, - "h": 24 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 30 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 35, - "h": 24 - }, - "frame": { - "x": 76, - "y": 49, - "w": 35, - "h": 24 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 30 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 35, - "h": 24 - }, - "frame": { - "x": 76, - "y": 49, - "w": 35, - "h": 24 - } - }, - { - "filename": "0020.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 30 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 35, - "h": 24 - }, - "frame": { - "x": 76, - "y": 49, - "w": 35, - "h": 24 - } - }, - { - "filename": "0022.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 30 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 35, - "h": 24 - }, - "frame": { - "x": 76, - "y": 49, - "w": 35, - "h": 24 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 30 - }, - "spriteSourceSize": { - "x": 3, - "y": 6, - "w": 35, - "h": 24 - }, - "frame": { - "x": 76, - "y": 73, - "w": 35, - "h": 24 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 30 - }, - "spriteSourceSize": { - "x": 3, - "y": 6, - "w": 35, - "h": 24 - }, - "frame": { - "x": 76, - "y": 73, - "w": 35, - "h": 24 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 30 - }, - "spriteSourceSize": { - "x": 3, - "y": 6, - "w": 35, - "h": 24 - }, - "frame": { - "x": 76, - "y": 73, - "w": 35, - "h": 24 - } - }, - { - "filename": "0028.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 30 - }, - "spriteSourceSize": { - "x": 3, - "y": 6, - "w": 35, - "h": 24 - }, - "frame": { - "x": 76, - "y": 73, - "w": 35, - "h": 24 - } - }, - { - "filename": "0030.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 30 - }, - "spriteSourceSize": { - "x": 3, - "y": 6, - "w": 35, - "h": 24 - }, - "frame": { - "x": 76, - "y": 73, - "w": 35, - "h": 24 - } - }, - { - "filename": "0032.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 30 - }, - "spriteSourceSize": { - "x": 3, - "y": 6, - "w": 35, - "h": 24 - }, - "frame": { - "x": 76, - "y": 73, - "w": 35, - "h": 24 - } - }, - { - "filename": "0038.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 30 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 35, - "h": 24 - }, - "frame": { - "x": 38, - "y": 74, - "w": 35, - "h": 24 - } - }, - { - "filename": "0040.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 30 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 35, - "h": 24 - }, - "frame": { - "x": 38, - "y": 74, - "w": 35, - "h": 24 - } - }, - { - "filename": "0054.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 30 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 35, - "h": 24 - }, - "frame": { - "x": 38, - "y": 74, - "w": 35, - "h": 24 - } - }, - { - "filename": "0056.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 30 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 35, - "h": 24 - }, - "frame": { - "x": 38, - "y": 74, - "w": 35, - "h": 24 - } - }, - { - "filename": "0046.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 30 - }, - "spriteSourceSize": { - "x": 3, - "y": 6, - "w": 35, - "h": 24 - }, - "frame": { - "x": 73, - "y": 97, - "w": 35, - "h": 24 - } - }, - { - "filename": "0048.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 30 - }, - "spriteSourceSize": { - "x": 3, - "y": 6, - "w": 35, - "h": 24 - }, - "frame": { - "x": 73, - "y": 97, - "w": 35, - "h": 24 - } - }, - { - "filename": "0050.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 30 - }, - "spriteSourceSize": { - "x": 3, - "y": 6, - "w": 35, - "h": 24 - }, - "frame": { - "x": 73, - "y": 97, - "w": 35, - "h": 24 - } - }, - { - "filename": "0062.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 30 - }, - "spriteSourceSize": { - "x": 3, - "y": 6, - "w": 35, - "h": 24 - }, - "frame": { - "x": 73, - "y": 97, - "w": 35, - "h": 24 - } - }, - { - "filename": "0064.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 30 - }, - "spriteSourceSize": { - "x": 3, - "y": 6, - "w": 35, - "h": 24 - }, - "frame": { - "x": 73, - "y": 97, - "w": 35, - "h": 24 - } - }, - { - "filename": "0066.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 38, - "h": 30 - }, - "spriteSourceSize": { - "x": 3, - "y": 6, - "w": 35, - "h": 24 - }, - "frame": { - "x": 73, - "y": 97, - "w": 35, - "h": 24 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:123126a79a6088db4c7fde804f3b1df6:3efa447d1fe4461ae2ff382f6b0d7fb8:1a4f7e535d823202c4828f963d5b4404$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 0, "y": 0, "w": 38, "h": 23 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 38, "w": 38, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0002.png", + "frame": { "x": 0, "y": 23, "w": 34, "h": 23 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 30, "y": 38, "w": 34, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0003.png", + "frame": { "x": 0, "y": 0, "w": 38, "h": 23 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 38, "w": 38, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0004.png", + "frame": { "x": 0, "y": 23, "w": 34, "h": 23 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 30, "y": 38, "w": 34, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0005.png", + "frame": { "x": 0, "y": 0, "w": 38, "h": 23 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 38, "w": 38, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0006.png", + "frame": { "x": 0, "y": 23, "w": 34, "h": 23 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 30, "y": 39, "w": 34, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0007.png", + "frame": { "x": 0, "y": 0, "w": 38, "h": 23 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 41, "w": 38, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0008.png", + "frame": { "x": 0, "y": 23, "w": 34, "h": 23 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 30, "y": 43, "w": 34, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0009.png", + "frame": { "x": 0, "y": 0, "w": 38, "h": 23 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 44, "w": 38, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0010.png", + "frame": { "x": 0, "y": 23, "w": 34, "h": 23 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 30, "y": 45, "w": 34, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0011.png", + "frame": { "x": 0, "y": 0, "w": 38, "h": 23 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 45, "w": 38, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0012.png", + "frame": { "x": 0, "y": 23, "w": 34, "h": 23 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 30, "y": 45, "w": 34, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0013.png", + "frame": { "x": 0, "y": 0, "w": 38, "h": 23 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 45, "w": 38, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0014.png", + "frame": { "x": 0, "y": 23, "w": 34, "h": 23 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 30, "y": 45, "w": 34, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0015.png", + "frame": { "x": 0, "y": 0, "w": 38, "h": 23 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 44, "w": 38, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0016.png", + "frame": { "x": 0, "y": 23, "w": 34, "h": 23 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 30, "y": 43, "w": 34, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0017.png", + "frame": { "x": 0, "y": 0, "w": 38, "h": 23 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 41, "w": 38, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0018.png", + "frame": { "x": 0, "y": 23, "w": 34, "h": 23 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 30, "y": 39, "w": 34, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0019.png", + "frame": { "x": 0, "y": 0, "w": 38, "h": 23 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 38, "w": 38, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0020.png", + "frame": { "x": 0, "y": 23, "w": 34, "h": 23 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 30, "y": 38, "w": 34, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0021.png", + "frame": { "x": 0, "y": 0, "w": 38, "h": 23 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 38, "w": 38, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0022.png", + "frame": { "x": 0, "y": 23, "w": 34, "h": 23 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 30, "y": 38, "w": 34, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0023.png", + "frame": { "x": 0, "y": 0, "w": 38, "h": 23 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 38, "w": 38, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0024.png", + "frame": { "x": 0, "y": 23, "w": 34, "h": 23 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 30, "y": 39, "w": 34, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0025.png", + "frame": { "x": 0, "y": 0, "w": 38, "h": 23 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 41, "w": 38, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0026.png", + "frame": { "x": 0, "y": 23, "w": 34, "h": 23 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 30, "y": 43, "w": 34, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0027.png", + "frame": { "x": 0, "y": 0, "w": 38, "h": 23 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 44, "w": 38, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0028.png", + "frame": { "x": 0, "y": 23, "w": 34, "h": 23 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 30, "y": 45, "w": 34, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0029.png", + "frame": { "x": 0, "y": 0, "w": 38, "h": 23 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 45, "w": 38, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0030.png", + "frame": { "x": 0, "y": 23, "w": 34, "h": 23 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 30, "y": 45, "w": 34, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0031.png", + "frame": { "x": 0, "y": 0, "w": 38, "h": 23 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 45, "w": 38, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0032.png", + "frame": { "x": 0, "y": 23, "w": 34, "h": 23 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 30, "y": 45, "w": 34, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0033.png", + "frame": { "x": 0, "y": 0, "w": 38, "h": 23 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 44, "w": 38, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0034.png", + "frame": { "x": 0, "y": 23, "w": 34, "h": 23 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 30, "y": 43, "w": 34, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0035.png", + "frame": { "x": 0, "y": 0, "w": 38, "h": 23 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 41, "w": 38, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0036.png", + "frame": { "x": 0, "y": 23, "w": 34, "h": 23 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 30, "y": 39, "w": 34, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0037.png", + "frame": { "x": 38, "y": 0, "w": 38, "h": 23 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 38, "w": 38, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0038.png", + "frame": { "x": 34, "y": 23, "w": 34, "h": 23 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 30, "y": 38, "w": 34, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0039.png", + "frame": { "x": 76, "y": 0, "w": 38, "h": 23 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 38, "w": 38, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0040.png", + "frame": { "x": 34, "y": 23, "w": 34, "h": 23 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 30, "y": 38, "w": 34, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0041.png", + "frame": { "x": 76, "y": 0, "w": 38, "h": 23 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 38, "w": 38, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0042.png", + "frame": { "x": 34, "y": 23, "w": 34, "h": 23 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 30, "y": 39, "w": 34, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0043.png", + "frame": { "x": 76, "y": 0, "w": 38, "h": 23 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 41, "w": 38, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0044.png", + "frame": { "x": 34, "y": 23, "w": 34, "h": 23 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 30, "y": 43, "w": 34, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0045.png", + "frame": { "x": 76, "y": 0, "w": 38, "h": 23 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 44, "w": 38, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0046.png", + "frame": { "x": 34, "y": 23, "w": 34, "h": 23 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 30, "y": 45, "w": 34, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0047.png", + "frame": { "x": 76, "y": 0, "w": 38, "h": 23 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 45, "w": 38, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0048.png", + "frame": { "x": 34, "y": 23, "w": 34, "h": 23 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 30, "y": 45, "w": 34, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0049.png", + "frame": { "x": 76, "y": 0, "w": 38, "h": 23 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 45, "w": 38, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0050.png", + "frame": { "x": 34, "y": 23, "w": 34, "h": 23 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 30, "y": 45, "w": 34, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0051.png", + "frame": { "x": 76, "y": 0, "w": 38, "h": 23 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 44, "w": 38, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0052.png", + "frame": { "x": 34, "y": 23, "w": 34, "h": 23 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 30, "y": 43, "w": 34, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0053.png", + "frame": { "x": 76, "y": 0, "w": 38, "h": 23 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 41, "w": 38, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0054.png", + "frame": { "x": 34, "y": 23, "w": 34, "h": 23 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 30, "y": 38, "w": 34, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0055.png", + "frame": { "x": 76, "y": 0, "w": 38, "h": 23 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 38, "w": 38, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0056.png", + "frame": { "x": 34, "y": 23, "w": 34, "h": 23 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 30, "y": 38, "w": 34, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0057.png", + "frame": { "x": 76, "y": 0, "w": 38, "h": 23 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 38, "w": 38, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0058.png", + "frame": { "x": 34, "y": 23, "w": 34, "h": 23 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 30, "y": 39, "w": 34, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0059.png", + "frame": { "x": 76, "y": 0, "w": 38, "h": 23 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 41, "w": 38, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0060.png", + "frame": { "x": 34, "y": 23, "w": 34, "h": 23 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 30, "y": 43, "w": 34, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0061.png", + "frame": { "x": 76, "y": 0, "w": 38, "h": 23 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 44, "w": 38, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0062.png", + "frame": { "x": 34, "y": 23, "w": 34, "h": 23 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 30, "y": 45, "w": 34, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0063.png", + "frame": { "x": 76, "y": 0, "w": 38, "h": 23 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 45, "w": 38, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0064.png", + "frame": { "x": 34, "y": 23, "w": 34, "h": 23 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 30, "y": 45, "w": 34, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0065.png", + "frame": { "x": 76, "y": 0, "w": 38, "h": 23 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 45, "w": 38, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0066.png", + "frame": { "x": 34, "y": 23, "w": 34, "h": 23 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 30, "y": 45, "w": 34, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0067.png", + "frame": { "x": 76, "y": 0, "w": 38, "h": 23 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 44, "w": 38, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0068.png", + "frame": { "x": 34, "y": 23, "w": 34, "h": 23 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 30, "y": 43, "w": 34, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0069.png", + "frame": { "x": 76, "y": 0, "w": 38, "h": 23 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 26, "y": 41, "w": 38, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0070.png", + "frame": { "x": 68, "y": 23, "w": 34, "h": 23 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 30, "y": 39, "w": 34, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.13-x64", + "image": "746.png", + "format": "I8", + "size": { "w": 114, "h": 46 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/back/shiny/746.png b/public/images/pokemon/exp/back/shiny/746.png index 5206ceb9ff6..5ce4bdc8bcd 100644 Binary files a/public/images/pokemon/exp/back/shiny/746.png and b/public/images/pokemon/exp/back/shiny/746.png differ diff --git a/public/images/pokemon/exp/back/shiny/749.json b/public/images/pokemon/exp/back/shiny/749.json index f243011605c..40f3f03247d 100644 --- a/public/images/pokemon/exp/back/shiny/749.json +++ b/public/images/pokemon/exp/back/shiny/749.json @@ -1,230 +1,1037 @@ -{ - "textures": [ - { - "image": "749.png", - "format": "RGBA8888", - "size": { - "w": 171, - "h": 171 - }, - "scale": 1, - "frames": [ - { - "filename": "0005.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 59, - "h": 66 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 59, - "h": 66 - }, - "frame": { - "x": 0, - "y": 0, - "w": 59, - "h": 66 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 59, - "h": 66 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 59, - "h": 66 - }, - "frame": { - "x": 0, - "y": 0, - "w": 59, - "h": 66 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 59, - "h": 66 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 58, - "h": 66 - }, - "frame": { - "x": 59, - "y": 0, - "w": 58, - "h": 66 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 59, - "h": 66 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 58, - "h": 66 - }, - "frame": { - "x": 59, - "y": 0, - "w": 58, - "h": 66 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 59, - "h": 66 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 54, - "h": 66 - }, - "frame": { - "x": 117, - "y": 0, - "w": 54, - "h": 66 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 59, - "h": 66 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 59, - "h": 65 - }, - "frame": { - "x": 0, - "y": 66, - "w": 59, - "h": 65 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 59, - "h": 66 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 56, - "h": 66 - }, - "frame": { - "x": 59, - "y": 66, - "w": 56, - "h": 66 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 59, - "h": 66 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 56, - "h": 66 - }, - "frame": { - "x": 59, - "y": 66, - "w": 56, - "h": 66 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 59, - "h": 66 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 55, - "h": 66 - }, - "frame": { - "x": 115, - "y": 66, - "w": 55, - "h": 66 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 59, - "h": 66 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 55, - "h": 66 - }, - "frame": { - "x": 115, - "y": 66, - "w": 55, - "h": 66 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:9d7331bd2d0e629e754348f158c3711c:edb98ecce518c521f5c31bb31243f866:d52e05c524384ef985e6339a08b2f938$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 0, "y": 287, "w": 46, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 11, "w": 46, "h": 56 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 0, "y": 174, "w": 47, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 11, "w": 47, "h": 56 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 47, "y": 174, "w": 47, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 11, "w": 47, "h": 56 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 145, "y": 67, "w": 49, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 12, "w": 49, "h": 55 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 242, "y": 121, "w": 49, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 13, "w": 49, "h": 54 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 45, "y": 120, "w": 49, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 13, "w": 49, "h": 54 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 266, "y": 65, "w": 49, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 11, "w": 49, "h": 56 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 194, "y": 67, "w": 48, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 11, "w": 48, "h": 56 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 0, "y": 230, "w": 46, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 10, "w": 46, "h": 57 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 46, "y": 230, "w": 46, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 10, "w": 46, "h": 57 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 138, "y": 232, "w": 45, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 9, "w": 45, "h": 58 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0012.png", + "frame": { "x": 44, "y": 343, "w": 44, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 10, "w": 44, "h": 57 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0013.png", + "frame": { "x": 0, "y": 343, "w": 44, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 10, "w": 44, "h": 57 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0014.png", + "frame": { "x": 137, "y": 290, "w": 45, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 11, "w": 45, "h": 56 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0015.png", + "frame": { "x": 0, "y": 287, "w": 46, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 11, "w": 46, "h": 56 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0016.png", + "frame": { "x": 0, "y": 174, "w": 47, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 11, "w": 47, "h": 56 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0017.png", + "frame": { "x": 47, "y": 174, "w": 47, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 11, "w": 47, "h": 56 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0018.png", + "frame": { "x": 145, "y": 67, "w": 49, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 12, "w": 49, "h": 55 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0019.png", + "frame": { "x": 242, "y": 121, "w": 49, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 13, "w": 49, "h": 54 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0020.png", + "frame": { "x": 45, "y": 120, "w": 49, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 13, "w": 49, "h": 54 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0021.png", + "frame": { "x": 266, "y": 65, "w": 49, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 11, "w": 49, "h": 56 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0022.png", + "frame": { "x": 194, "y": 67, "w": 48, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 11, "w": 48, "h": 56 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0023.png", + "frame": { "x": 0, "y": 230, "w": 46, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 10, "w": 46, "h": 57 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0024.png", + "frame": { "x": 46, "y": 230, "w": 46, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 10, "w": 46, "h": 57 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0025.png", + "frame": { "x": 138, "y": 232, "w": 45, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 9, "w": 45, "h": 58 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0026.png", + "frame": { "x": 44, "y": 343, "w": 44, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 10, "w": 44, "h": 57 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0027.png", + "frame": { "x": 0, "y": 343, "w": 44, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 10, "w": 44, "h": 57 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0028.png", + "frame": { "x": 137, "y": 290, "w": 45, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 11, "w": 45, "h": 56 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0029.png", + "frame": { "x": 0, "y": 287, "w": 46, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 11, "w": 46, "h": 56 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0030.png", + "frame": { "x": 224, "y": 343, "w": 46, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 13, "w": 46, "h": 54 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0031.png", + "frame": { "x": 88, "y": 344, "w": 46, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 14, "w": 46, "h": 53 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0032.png", + "frame": { "x": 233, "y": 231, "w": 45, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 9, "w": 45, "h": 58 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0033.png", + "frame": { "x": 278, "y": 244, "w": 43, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 43, "h": 60 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0034.png", + "frame": { "x": 182, "y": 341, "w": 42, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 42, "h": 60 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0035.png", + "frame": { "x": 92, "y": 287, "w": 45, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 45, "h": 57 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0036.png", + "frame": { "x": 183, "y": 288, "w": 48, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 7, "w": 48, "h": 53 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0037.png", + "frame": { "x": 231, "y": 289, "w": 47, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 10, "w": 47, "h": 54 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0038.png", + "frame": { "x": 183, "y": 234, "w": 48, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 13, "w": 48, "h": 54 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0039.png", + "frame": { "x": 278, "y": 304, "w": 47, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 13, "w": 47, "h": 54 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0040.png", + "frame": { "x": 236, "y": 175, "w": 47, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 11, "w": 47, "h": 56 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0041.png", + "frame": { "x": 0, "y": 287, "w": 46, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 11, "w": 46, "h": 56 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0042.png", + "frame": { "x": 0, "y": 174, "w": 47, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 11, "w": 47, "h": 56 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0043.png", + "frame": { "x": 47, "y": 174, "w": 47, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 11, "w": 47, "h": 56 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0044.png", + "frame": { "x": 145, "y": 67, "w": 49, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 12, "w": 49, "h": 55 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0045.png", + "frame": { "x": 242, "y": 121, "w": 49, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 13, "w": 49, "h": 54 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0046.png", + "frame": { "x": 45, "y": 120, "w": 49, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 13, "w": 49, "h": 54 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0047.png", + "frame": { "x": 266, "y": 65, "w": 49, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 11, "w": 49, "h": 56 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0048.png", + "frame": { "x": 194, "y": 67, "w": 48, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 11, "w": 48, "h": 56 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0049.png", + "frame": { "x": 0, "y": 230, "w": 46, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 10, "w": 46, "h": 57 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0050.png", + "frame": { "x": 46, "y": 230, "w": 46, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 10, "w": 46, "h": 57 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0051.png", + "frame": { "x": 138, "y": 232, "w": 45, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 9, "w": 45, "h": 58 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0052.png", + "frame": { "x": 44, "y": 343, "w": 44, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 10, "w": 44, "h": 57 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0053.png", + "frame": { "x": 0, "y": 343, "w": 44, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 10, "w": 44, "h": 57 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0054.png", + "frame": { "x": 137, "y": 290, "w": 45, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 11, "w": 45, "h": 56 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0055.png", + "frame": { "x": 0, "y": 287, "w": 46, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 11, "w": 46, "h": 56 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0056.png", + "frame": { "x": 224, "y": 343, "w": 46, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 13, "w": 46, "h": 54 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0057.png", + "frame": { "x": 88, "y": 344, "w": 46, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 14, "w": 46, "h": 53 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0058.png", + "frame": { "x": 233, "y": 231, "w": 45, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 9, "w": 45, "h": 58 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0059.png", + "frame": { "x": 278, "y": 244, "w": 43, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 43, "h": 60 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0060.png", + "frame": { "x": 182, "y": 341, "w": 42, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 42, "h": 60 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0061.png", + "frame": { "x": 92, "y": 287, "w": 45, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 45, "h": 57 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0062.png", + "frame": { "x": 183, "y": 288, "w": 48, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 7, "w": 48, "h": 53 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0063.png", + "frame": { "x": 231, "y": 289, "w": 47, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 10, "w": 47, "h": 54 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0064.png", + "frame": { "x": 183, "y": 234, "w": 48, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 13, "w": 48, "h": 54 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0065.png", + "frame": { "x": 278, "y": 304, "w": 47, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 13, "w": 47, "h": 54 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0066.png", + "frame": { "x": 236, "y": 175, "w": 47, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 11, "w": 47, "h": 56 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0067.png", + "frame": { "x": 0, "y": 287, "w": 46, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 11, "w": 46, "h": 56 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0068.png", + "frame": { "x": 224, "y": 343, "w": 46, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 13, "w": 46, "h": 54 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0069.png", + "frame": { "x": 88, "y": 344, "w": 46, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 14, "w": 46, "h": 53 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0070.png", + "frame": { "x": 233, "y": 231, "w": 45, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 9, "w": 45, "h": 58 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0071.png", + "frame": { "x": 278, "y": 244, "w": 43, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 43, "h": 60 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0072.png", + "frame": { "x": 182, "y": 341, "w": 42, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 42, "h": 60 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0073.png", + "frame": { "x": 92, "y": 287, "w": 45, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 45, "h": 57 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0074.png", + "frame": { "x": 183, "y": 288, "w": 48, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 7, "w": 48, "h": 53 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0075.png", + "frame": { "x": 231, "y": 289, "w": 47, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 10, "w": 47, "h": 54 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0076.png", + "frame": { "x": 183, "y": 234, "w": 48, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 13, "w": 48, "h": 54 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0077.png", + "frame": { "x": 278, "y": 304, "w": 47, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 13, "w": 47, "h": 54 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0078.png", + "frame": { "x": 236, "y": 175, "w": 47, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 11, "w": 47, "h": 56 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0079.png", + "frame": { "x": 0, "y": 287, "w": 46, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 11, "w": 46, "h": 56 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0080.png", + "frame": { "x": 0, "y": 174, "w": 47, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 11, "w": 47, "h": 56 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0081.png", + "frame": { "x": 47, "y": 174, "w": 47, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 11, "w": 47, "h": 56 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0082.png", + "frame": { "x": 145, "y": 67, "w": 49, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 12, "w": 49, "h": 55 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0083.png", + "frame": { "x": 242, "y": 121, "w": 49, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 13, "w": 49, "h": 54 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0084.png", + "frame": { "x": 45, "y": 120, "w": 49, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 13, "w": 49, "h": 54 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0085.png", + "frame": { "x": 266, "y": 65, "w": 49, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 11, "w": 49, "h": 56 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0086.png", + "frame": { "x": 194, "y": 67, "w": 48, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 11, "w": 48, "h": 56 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0087.png", + "frame": { "x": 0, "y": 230, "w": 46, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 10, "w": 46, "h": 57 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0088.png", + "frame": { "x": 46, "y": 230, "w": 46, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 10, "w": 46, "h": 57 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0089.png", + "frame": { "x": 138, "y": 232, "w": 45, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 9, "w": 45, "h": 58 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0090.png", + "frame": { "x": 44, "y": 343, "w": 44, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 10, "w": 44, "h": 57 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0091.png", + "frame": { "x": 0, "y": 343, "w": 44, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 10, "w": 44, "h": 57 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0092.png", + "frame": { "x": 137, "y": 290, "w": 45, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 11, "w": 45, "h": 56 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0093.png", + "frame": { "x": 46, "y": 287, "w": 46, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 11, "w": 46, "h": 56 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0094.png", + "frame": { "x": 139, "y": 176, "w": 47, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 11, "w": 47, "h": 56 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0095.png", + "frame": { "x": 188, "y": 123, "w": 48, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 12, "w": 48, "h": 55 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0096.png", + "frame": { "x": 139, "y": 122, "w": 49, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 13, "w": 49, "h": 54 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0097.png", + "frame": { "x": 94, "y": 66, "w": 51, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 14, "w": 51, "h": 53 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0098.png", + "frame": { "x": 45, "y": 63, "w": 49, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 10, "w": 49, "h": 57 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0099.png", + "frame": { "x": 309, "y": 0, "w": 47, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 8, "w": 47, "h": 59 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0100.png", + "frame": { "x": 92, "y": 0, "w": 47, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 47, "h": 61 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0101.png", + "frame": { "x": 45, "y": 0, "w": 47, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 4, "w": 47, "h": 63 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0102.png", + "frame": { "x": 224, "y": 0, "w": 42, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 42, "h": 67 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0103.png", + "frame": { "x": 291, "y": 122, "w": 40, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 40, "h": 66 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0104.png", + "frame": { "x": 182, "y": 0, "w": 42, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 42, "h": 67 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0105.png", + "frame": { "x": 0, "y": 0, "w": 45, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 45, "h": 66 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0106.png", + "frame": { "x": 139, "y": 0, "w": 43, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 43, "h": 66 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0107.png", + "frame": { "x": 266, "y": 0, "w": 43, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 43, "h": 65 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0108.png", + "frame": { "x": 315, "y": 59, "w": 42, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 42, "h": 63 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0109.png", + "frame": { "x": 0, "y": 66, "w": 45, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 7, "w": 45, "h": 60 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0110.png", + "frame": { "x": 94, "y": 119, "w": 45, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 8, "w": 45, "h": 59 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0111.png", + "frame": { "x": 92, "y": 230, "w": 46, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 10, "w": 46, "h": 57 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0112.png", + "frame": { "x": 186, "y": 178, "w": 47, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 11, "w": 47, "h": 56 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0113.png", + "frame": { "x": 283, "y": 188, "w": 47, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 11, "w": 47, "h": 56 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + }, + { + "filename": "0114.png", + "frame": { "x": 0, "y": 287, "w": 46, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 11, "w": 46, "h": 56 }, + "sourceSize": { "w": 53, "h": 67 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.13-x64", + "image": "749.png", + "format": "I8", + "size": { "w": 357, "h": 401 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/back/shiny/749.png b/public/images/pokemon/exp/back/shiny/749.png index c657851e04b..63a7d57d28f 100644 Binary files a/public/images/pokemon/exp/back/shiny/749.png and b/public/images/pokemon/exp/back/shiny/749.png differ diff --git a/public/images/pokemon/exp/back/shiny/750.json b/public/images/pokemon/exp/back/shiny/750.json index 922dde20472..e4c7c035ff8 100644 --- a/public/images/pokemon/exp/back/shiny/750.json +++ b/public/images/pokemon/exp/back/shiny/750.json @@ -1,230 +1,929 @@ -{ - "textures": [ - { - "image": "750.png", - "format": "RGBA8888", - "size": { - "w": 253, - "h": 253 - }, - "scale": 1, - "frames": [ - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 73 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 88, - "h": 69 - }, - "frame": { - "x": 0, - "y": 0, - "w": 88, - "h": 69 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 73 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 87, - "h": 71 - }, - "frame": { - "x": 88, - "y": 0, - "w": 87, - "h": 71 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 73 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 87, - "h": 71 - }, - "frame": { - "x": 0, - "y": 69, - "w": 87, - "h": 71 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 73 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 86, - "h": 72 - }, - "frame": { - "x": 87, - "y": 71, - "w": 86, - "h": 72 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 73 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 79, - "h": 73 - }, - "frame": { - "x": 173, - "y": 71, - "w": 79, - "h": 73 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 73 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 86, - "h": 72 - }, - "frame": { - "x": 0, - "y": 140, - "w": 86, - "h": 72 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 73 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 83, - "h": 73 - }, - "frame": { - "x": 86, - "y": 143, - "w": 83, - "h": 73 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 73 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 83, - "h": 73 - }, - "frame": { - "x": 86, - "y": 143, - "w": 83, - "h": 73 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 73 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 84, - "h": 73 - }, - "frame": { - "x": 169, - "y": 144, - "w": 84, - "h": 73 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 88, - "h": 73 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 84, - "h": 73 - }, - "frame": { - "x": 169, - "y": 144, - "w": 84, - "h": 73 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:51a6dc655f9c503ef0f1d2d873adf903:1fa68a8a88f7b5239ba7a91c9a1204c0:4ad6abb5f7a40182d2391bde900ad082$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 550, "y": 208, "w": 76, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 11, "w": 76, "h": 67 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 315, "y": 206, "w": 77, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 11, "w": 77, "h": 67 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 77, "y": 207, "w": 78, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 12, "w": 78, "h": 66 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 566, "y": 142, "w": 79, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 12, "w": 79, "h": 66 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 324, "y": 141, "w": 82, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 13, "w": 82, "h": 65 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 0, "y": 142, "w": 82, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 13, "w": 82, "h": 65 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 486, "y": 78, "w": 84, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 14, "w": 84, "h": 64 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 324, "y": 77, "w": 85, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 14, "w": 85, "h": 64 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 0, "y": 78, "w": 85, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 14, "w": 85, "h": 64 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 85, "y": 78, "w": 85, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 14, "w": 85, "h": 64 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 570, "y": 78, "w": 84, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 14, "w": 84, "h": 64 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0012.png", + "frame": { "x": 82, "y": 142, "w": 82, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 13, "w": 82, "h": 65 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0013.png", + "frame": { "x": 486, "y": 142, "w": 80, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 12, "w": 80, "h": 66 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0014.png", + "frame": { "x": 0, "y": 207, "w": 77, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 11, "w": 77, "h": 67 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0015.png", + "frame": { "x": 239, "y": 147, "w": 76, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 15, "y": 10, "w": 76, "h": 68 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0016.png", + "frame": { "x": 164, "y": 154, "w": 75, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 10, "w": 75, "h": 68 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0017.png", + "frame": { "x": 381, "y": 295, "w": 72, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 19, "y": 10, "w": 72, "h": 68 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0018.png", + "frame": { "x": 0, "y": 341, "w": 71, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 19, "y": 10, "w": 71, "h": 68 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0019.png", + "frame": { "x": 147, "y": 339, "w": 71, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 10, "w": 71, "h": 68 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0020.png", + "frame": { "x": 218, "y": 347, "w": 71, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 17, "y": 11, "w": 71, "h": 67 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0021.png", + "frame": { "x": 616, "y": 275, "w": 72, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 15, "y": 10, "w": 72, "h": 68 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0022.png", + "frame": { "x": 0, "y": 274, "w": 74, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 11, "w": 74, "h": 67 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0023.png", + "frame": { "x": 392, "y": 228, "w": 75, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 11, "w": 75, "h": 67 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0024.png", + "frame": { "x": 550, "y": 208, "w": 76, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 11, "w": 76, "h": 67 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0025.png", + "frame": { "x": 315, "y": 206, "w": 77, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 11, "w": 77, "h": 67 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0026.png", + "frame": { "x": 77, "y": 207, "w": 78, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 12, "w": 78, "h": 66 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0027.png", + "frame": { "x": 566, "y": 142, "w": 79, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 12, "w": 79, "h": 66 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0028.png", + "frame": { "x": 324, "y": 141, "w": 82, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 13, "w": 82, "h": 65 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0029.png", + "frame": { "x": 0, "y": 142, "w": 82, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 13, "w": 82, "h": 65 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0030.png", + "frame": { "x": 486, "y": 78, "w": 84, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 14, "w": 84, "h": 64 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0031.png", + "frame": { "x": 324, "y": 77, "w": 85, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 14, "w": 85, "h": 64 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0032.png", + "frame": { "x": 0, "y": 78, "w": 85, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 14, "w": 85, "h": 64 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0033.png", + "frame": { "x": 85, "y": 78, "w": 85, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 14, "w": 85, "h": 64 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0034.png", + "frame": { "x": 570, "y": 78, "w": 84, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 14, "w": 84, "h": 64 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0035.png", + "frame": { "x": 82, "y": 142, "w": 82, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 13, "w": 82, "h": 65 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0036.png", + "frame": { "x": 486, "y": 142, "w": 80, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 12, "w": 80, "h": 66 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0037.png", + "frame": { "x": 0, "y": 207, "w": 77, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 11, "w": 77, "h": 67 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0038.png", + "frame": { "x": 239, "y": 147, "w": 76, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 15, "y": 10, "w": 76, "h": 68 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0039.png", + "frame": { "x": 164, "y": 154, "w": 75, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 10, "w": 75, "h": 68 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0040.png", + "frame": { "x": 381, "y": 295, "w": 72, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 19, "y": 10, "w": 72, "h": 68 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0041.png", + "frame": { "x": 0, "y": 341, "w": 71, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 19, "y": 10, "w": 71, "h": 68 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0042.png", + "frame": { "x": 147, "y": 339, "w": 71, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 10, "w": 71, "h": 68 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0043.png", + "frame": { "x": 218, "y": 347, "w": 71, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 17, "y": 11, "w": 71, "h": 67 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0044.png", + "frame": { "x": 616, "y": 275, "w": 72, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 15, "y": 10, "w": 72, "h": 68 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0045.png", + "frame": { "x": 0, "y": 274, "w": 74, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 11, "w": 74, "h": 67 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0046.png", + "frame": { "x": 392, "y": 228, "w": 75, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 11, "w": 75, "h": 67 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0047.png", + "frame": { "x": 550, "y": 208, "w": 76, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 11, "w": 76, "h": 67 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0048.png", + "frame": { "x": 315, "y": 206, "w": 77, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 11, "w": 77, "h": 67 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0049.png", + "frame": { "x": 77, "y": 207, "w": 78, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 12, "w": 78, "h": 66 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0050.png", + "frame": { "x": 566, "y": 142, "w": 79, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 12, "w": 79, "h": 66 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0051.png", + "frame": { "x": 324, "y": 141, "w": 82, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 13, "w": 82, "h": 65 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0052.png", + "frame": { "x": 0, "y": 142, "w": 82, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 13, "w": 82, "h": 65 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0053.png", + "frame": { "x": 486, "y": 78, "w": 84, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 14, "w": 84, "h": 64 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0054.png", + "frame": { "x": 324, "y": 77, "w": 85, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 14, "w": 85, "h": 64 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0055.png", + "frame": { "x": 0, "y": 78, "w": 85, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 14, "w": 85, "h": 64 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0056.png", + "frame": { "x": 85, "y": 78, "w": 85, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 14, "w": 85, "h": 64 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0057.png", + "frame": { "x": 570, "y": 78, "w": 84, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 14, "w": 84, "h": 64 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0058.png", + "frame": { "x": 82, "y": 142, "w": 82, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 13, "w": 82, "h": 65 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0059.png", + "frame": { "x": 486, "y": 142, "w": 80, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 12, "w": 80, "h": 66 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0060.png", + "frame": { "x": 0, "y": 207, "w": 77, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 11, "w": 77, "h": 67 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0061.png", + "frame": { "x": 239, "y": 147, "w": 76, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 15, "y": 10, "w": 76, "h": 68 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0062.png", + "frame": { "x": 164, "y": 154, "w": 75, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 10, "w": 75, "h": 68 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0063.png", + "frame": { "x": 381, "y": 295, "w": 72, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 19, "y": 10, "w": 72, "h": 68 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0064.png", + "frame": { "x": 0, "y": 341, "w": 71, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 19, "y": 10, "w": 71, "h": 68 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0065.png", + "frame": { "x": 147, "y": 339, "w": 71, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 10, "w": 71, "h": 68 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0066.png", + "frame": { "x": 218, "y": 347, "w": 71, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 17, "y": 11, "w": 71, "h": 67 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0067.png", + "frame": { "x": 616, "y": 275, "w": 72, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 15, "y": 10, "w": 72, "h": 68 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0068.png", + "frame": { "x": 0, "y": 274, "w": 74, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 11, "w": 74, "h": 67 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0069.png", + "frame": { "x": 392, "y": 228, "w": 75, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 11, "w": 75, "h": 67 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0070.png", + "frame": { "x": 550, "y": 208, "w": 76, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 11, "w": 76, "h": 67 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0071.png", + "frame": { "x": 239, "y": 215, "w": 76, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 11, "w": 76, "h": 67 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0072.png", + "frame": { "x": 77, "y": 273, "w": 76, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 12, "w": 76, "h": 66 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0073.png", + "frame": { "x": 220, "y": 282, "w": 76, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 13, "w": 76, "h": 65 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0074.png", + "frame": { "x": 453, "y": 342, "w": 78, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 16, "w": 78, "h": 62 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0075.png", + "frame": { "x": 604, "y": 343, "w": 78, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 17, "w": 78, "h": 61 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0076.png", + "frame": { "x": 604, "y": 404, "w": 74, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 16, "y": 16, "w": 74, "h": 62 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0077.png", + "frame": { "x": 209, "y": 414, "w": 66, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 20, "y": 13, "w": 66, "h": 65 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0078.png", + "frame": { "x": 0, "y": 409, "w": 63, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 21, "y": 8, "w": 63, "h": 70 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0079.png", + "frame": { "x": 421, "y": 404, "w": 62, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 20, "y": 3, "w": 62, "h": 75 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0080.png", + "frame": { "x": 155, "y": 222, "w": 65, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 0, "w": 65, "h": 78 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0081.png", + "frame": { "x": 416, "y": 74, "w": 70, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 15, "y": 0, "w": 70, "h": 78 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0082.png", + "frame": { "x": 573, "y": 0, "w": 74, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 0, "w": 74, "h": 78 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0083.png", + "frame": { "x": 498, "y": 0, "w": 75, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 0, "w": 75, "h": 78 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0084.png", + "frame": { "x": 251, "y": 71, "w": 73, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 2, "w": 73, "h": 76 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0085.png", + "frame": { "x": 406, "y": 152, "w": 68, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 2, "w": 68, "h": 76 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0086.png", + "frame": { "x": 315, "y": 273, "w": 66, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 2, "w": 66, "h": 76 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0087.png", + "frame": { "x": 541, "y": 341, "w": 63, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 15, "y": 2, "w": 63, "h": 76 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0088.png", + "frame": { "x": 289, "y": 349, "w": 61, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 1, "w": 61, "h": 77 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0089.png", + "frame": { "x": 170, "y": 77, "w": 69, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 1, "w": 69, "h": 77 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0090.png", + "frame": { "x": 337, "y": 0, "w": 79, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 1, "w": 79, "h": 77 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0091.png", + "frame": { "x": 85, "y": 0, "w": 84, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 84, "h": 78 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0092.png", + "frame": { "x": 0, "y": 0, "w": 85, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 85, "h": 78 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0093.png", + "frame": { "x": 169, "y": 0, "w": 82, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 82, "h": 77 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0094.png", + "frame": { "x": 416, "y": 0, "w": 82, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 82, "h": 74 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0095.png", + "frame": { "x": 251, "y": 0, "w": 86, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 7, "w": 86, "h": 71 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0096.png", + "frame": { "x": 541, "y": 275, "w": 75, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 12, "w": 75, "h": 66 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0097.png", + "frame": { "x": 71, "y": 406, "w": 69, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 12, "w": 69, "h": 66 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0098.png", + "frame": { "x": 140, "y": 407, "w": 69, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 12, "w": 69, "h": 66 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0099.png", + "frame": { "x": 350, "y": 363, "w": 71, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 16, "y": 12, "w": 71, "h": 66 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0100.png", + "frame": { "x": 74, "y": 339, "w": 73, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 11, "w": 73, "h": 67 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0101.png", + "frame": { "x": 467, "y": 275, "w": 74, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 11, "w": 74, "h": 67 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + }, + { + "filename": "0102.png", + "frame": { "x": 474, "y": 208, "w": 76, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 11, "w": 76, "h": 67 }, + "sourceSize": { "w": 93, "h": 78 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.13-x64", + "image": "750.png", + "format": "I8", + "size": { "w": 688, "h": 479 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/back/shiny/750.png b/public/images/pokemon/exp/back/shiny/750.png index 604c23c7289..d099dce5a5e 100644 Binary files a/public/images/pokemon/exp/back/shiny/750.png and b/public/images/pokemon/exp/back/shiny/750.png differ diff --git a/public/images/pokemon/exp/back/shiny/780.json b/public/images/pokemon/exp/back/shiny/780.json index 1232a2acd52..09dee76d75d 100644 --- a/public/images/pokemon/exp/back/shiny/780.json +++ b/public/images/pokemon/exp/back/shiny/780.json @@ -1,230 +1,884 @@ -{ - "textures": [ - { - "image": "780.png", - "format": "RGBA8888", - "size": { - "w": 183, - "h": 183 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 86, - "h": 62 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 86, - "h": 62 - }, - "frame": { - "x": 0, - "y": 0, - "w": 86, - "h": 62 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 62 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 85, - "h": 62 - }, - "frame": { - "x": 0, - "y": 62, - "w": 85, - "h": 62 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 62 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 85, - "h": 62 - }, - "frame": { - "x": 0, - "y": 62, - "w": 85, - "h": 62 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 62 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 83, - "h": 62 - }, - "frame": { - "x": 85, - "y": 62, - "w": 83, - "h": 62 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 62 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 83, - "h": 62 - }, - "frame": { - "x": 85, - "y": 62, - "w": 83, - "h": 62 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 62 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 82, - "h": 61 - }, - "frame": { - "x": 86, - "y": 0, - "w": 82, - "h": 61 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 62 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 82, - "h": 61 - }, - "frame": { - "x": 86, - "y": 0, - "w": 82, - "h": 61 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 62 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 81, - "h": 59 - }, - "frame": { - "x": 0, - "y": 124, - "w": 81, - "h": 59 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 62 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 81, - "h": 59 - }, - "frame": { - "x": 0, - "y": 124, - "w": 81, - "h": 59 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 86, - "h": 62 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 79, - "h": 59 - }, - "frame": { - "x": 81, - "y": 124, - "w": 79, - "h": 59 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:e56d7591e5bcde367604688e6d07bae4:caee4120d5060ce743036fe68aaf7181:9470182902340de73b2565411cb0ab89$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 1, "y": 153, "w": 82, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 9, "w": 82, "h": 70 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 490, "y": 147, "w": 82, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 9, "w": 82, "h": 70 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 246, "y": 148, "w": 82, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 9, "w": 82, "h": 70 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 329, "y": 148, "w": 82, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 9, "w": 82, "h": 70 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 167, "y": 219, "w": 82, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 10, "w": 82, "h": 69 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 250, "y": 219, "w": 82, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 10, "w": 82, "h": 69 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 84, "y": 221, "w": 82, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 10, "w": 82, "h": 69 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 1, "y": 294, "w": 82, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 11, "w": 82, "h": 68 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 331, "y": 359, "w": 81, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 11, "w": 81, "h": 68 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 249, "y": 359, "w": 81, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 11, "w": 81, "h": 68 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 83, "y": 428, "w": 81, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 12, "w": 81, "h": 67 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0012.png", + "frame": { "x": 1, "y": 363, "w": 81, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 12, "w": 81, "h": 67 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0013.png", + "frame": { "x": 84, "y": 360, "w": 81, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 12, "w": 81, "h": 67 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0014.png", + "frame": { "x": 167, "y": 359, "w": 81, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 11, "w": 81, "h": 68 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0015.png", + "frame": { "x": 415, "y": 289, "w": 81, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 10, "w": 81, "h": 69 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0016.png", + "frame": { "x": 333, "y": 289, "w": 81, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 10, "w": 81, "h": 69 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0017.png", + "frame": { "x": 250, "y": 289, "w": 82, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 10, "w": 82, "h": 69 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0018.png", + "frame": { "x": 84, "y": 150, "w": 82, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 9, "w": 82, "h": 70 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0019.png", + "frame": { "x": 1, "y": 153, "w": 82, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 9, "w": 82, "h": 70 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0020.png", + "frame": { "x": 490, "y": 147, "w": 82, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 9, "w": 82, "h": 70 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0021.png", + "frame": { "x": 246, "y": 148, "w": 82, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 9, "w": 82, "h": 70 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0022.png", + "frame": { "x": 329, "y": 148, "w": 82, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 9, "w": 82, "h": 70 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0023.png", + "frame": { "x": 167, "y": 219, "w": 82, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 10, "w": 82, "h": 69 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0024.png", + "frame": { "x": 250, "y": 219, "w": 82, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 10, "w": 82, "h": 69 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0025.png", + "frame": { "x": 84, "y": 221, "w": 82, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 10, "w": 82, "h": 69 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0026.png", + "frame": { "x": 1, "y": 294, "w": 82, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 11, "w": 82, "h": 68 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0027.png", + "frame": { "x": 331, "y": 359, "w": 81, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 11, "w": 81, "h": 68 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0028.png", + "frame": { "x": 249, "y": 359, "w": 81, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 11, "w": 81, "h": 68 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0029.png", + "frame": { "x": 83, "y": 428, "w": 81, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 12, "w": 81, "h": 67 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0030.png", + "frame": { "x": 1, "y": 363, "w": 81, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 12, "w": 81, "h": 67 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0031.png", + "frame": { "x": 84, "y": 360, "w": 81, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 12, "w": 81, "h": 67 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0032.png", + "frame": { "x": 167, "y": 359, "w": 81, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 11, "w": 81, "h": 68 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0033.png", + "frame": { "x": 415, "y": 289, "w": 81, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 10, "w": 81, "h": 69 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0034.png", + "frame": { "x": 333, "y": 289, "w": 81, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 10, "w": 81, "h": 69 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0035.png", + "frame": { "x": 250, "y": 289, "w": 82, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 10, "w": 82, "h": 69 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0036.png", + "frame": { "x": 84, "y": 150, "w": 82, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 9, "w": 82, "h": 70 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0037.png", + "frame": { "x": 1, "y": 153, "w": 82, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 9, "w": 82, "h": 70 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0038.png", + "frame": { "x": 490, "y": 147, "w": 82, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 9, "w": 82, "h": 70 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0039.png", + "frame": { "x": 246, "y": 148, "w": 82, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 9, "w": 82, "h": 70 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0040.png", + "frame": { "x": 329, "y": 148, "w": 82, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 9, "w": 82, "h": 70 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0041.png", + "frame": { "x": 167, "y": 219, "w": 82, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 10, "w": 82, "h": 69 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0042.png", + "frame": { "x": 250, "y": 219, "w": 82, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 10, "w": 82, "h": 69 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0043.png", + "frame": { "x": 84, "y": 221, "w": 82, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 10, "w": 82, "h": 69 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0044.png", + "frame": { "x": 1, "y": 294, "w": 82, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 11, "w": 82, "h": 68 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0045.png", + "frame": { "x": 331, "y": 359, "w": 81, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 11, "w": 81, "h": 68 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0046.png", + "frame": { "x": 249, "y": 359, "w": 81, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 11, "w": 81, "h": 68 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0047.png", + "frame": { "x": 83, "y": 428, "w": 81, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 12, "w": 81, "h": 67 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0048.png", + "frame": { "x": 1, "y": 363, "w": 81, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 12, "w": 81, "h": 67 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0049.png", + "frame": { "x": 84, "y": 360, "w": 81, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 12, "w": 81, "h": 67 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0050.png", + "frame": { "x": 167, "y": 359, "w": 81, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 11, "w": 81, "h": 68 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0051.png", + "frame": { "x": 415, "y": 289, "w": 81, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 10, "w": 81, "h": 69 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0052.png", + "frame": { "x": 333, "y": 289, "w": 81, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 10, "w": 81, "h": 69 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0053.png", + "frame": { "x": 250, "y": 289, "w": 82, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 10, "w": 82, "h": 69 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0054.png", + "frame": { "x": 84, "y": 150, "w": 82, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 9, "w": 82, "h": 70 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0055.png", + "frame": { "x": 1, "y": 153, "w": 82, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 9, "w": 82, "h": 70 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0056.png", + "frame": { "x": 490, "y": 147, "w": 82, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 9, "w": 82, "h": 70 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0057.png", + "frame": { "x": 246, "y": 148, "w": 82, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 9, "w": 82, "h": 70 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0058.png", + "frame": { "x": 329, "y": 148, "w": 82, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 9, "w": 82, "h": 70 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0059.png", + "frame": { "x": 167, "y": 219, "w": 82, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 10, "w": 82, "h": 69 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0060.png", + "frame": { "x": 250, "y": 219, "w": 82, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 10, "w": 82, "h": 69 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0061.png", + "frame": { "x": 84, "y": 221, "w": 82, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 10, "w": 82, "h": 69 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0062.png", + "frame": { "x": 1, "y": 294, "w": 82, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 11, "w": 82, "h": 68 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0063.png", + "frame": { "x": 331, "y": 359, "w": 81, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 11, "w": 81, "h": 68 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0064.png", + "frame": { "x": 249, "y": 359, "w": 81, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 11, "w": 81, "h": 68 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0065.png", + "frame": { "x": 83, "y": 428, "w": 81, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 12, "w": 81, "h": 67 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0066.png", + "frame": { "x": 1, "y": 363, "w": 81, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 12, "w": 81, "h": 67 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0067.png", + "frame": { "x": 84, "y": 360, "w": 81, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 12, "w": 81, "h": 67 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0068.png", + "frame": { "x": 167, "y": 359, "w": 81, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 11, "w": 81, "h": 68 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0069.png", + "frame": { "x": 415, "y": 289, "w": 81, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 10, "w": 81, "h": 69 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0070.png", + "frame": { "x": 333, "y": 289, "w": 81, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 10, "w": 81, "h": 69 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0071.png", + "frame": { "x": 250, "y": 289, "w": 82, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 10, "w": 82, "h": 69 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0072.png", + "frame": { "x": 84, "y": 150, "w": 82, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 9, "w": 82, "h": 70 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0073.png", + "frame": { "x": 1, "y": 153, "w": 82, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 9, "w": 82, "h": 70 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0074.png", + "frame": { "x": 1, "y": 81, "w": 82, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 8, "w": 82, "h": 71 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0075.png", + "frame": { "x": 490, "y": 75, "w": 82, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 8, "w": 82, "h": 71 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0076.png", + "frame": { "x": 325, "y": 75, "w": 82, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 7, "w": 82, "h": 72 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0077.png", + "frame": { "x": 408, "y": 75, "w": 81, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 7, "w": 81, "h": 72 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0078.png", + "frame": { "x": 407, "y": 1, "w": 81, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 6, "w": 81, "h": 73 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0079.png", + "frame": { "x": 325, "y": 1, "w": 81, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 6, "w": 81, "h": 73 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0080.png", + "frame": { "x": 163, "y": 78, "w": 82, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 8, "w": 82, "h": 71 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0081.png", + "frame": { "x": 84, "y": 291, "w": 82, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 11, "w": 82, "h": 68 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0082.png", + "frame": { "x": 495, "y": 218, "w": 80, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 10, "w": 80, "h": 69 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0083.png", + "frame": { "x": 243, "y": 1, "w": 81, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 5, "w": 81, "h": 74 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0084.png", + "frame": { "x": 83, "y": 1, "w": 79, "h": 79 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 79, "h": 79 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0085.png", + "frame": { "x": 1, "y": 1, "w": 81, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 81, "h": 78 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0086.png", + "frame": { "x": 83, "y": 1, "w": 79, "h": 79 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 79, "h": 79 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0087.png", + "frame": { "x": 1, "y": 1, "w": 81, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 81, "h": 78 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0088.png", + "frame": { "x": 83, "y": 1, "w": 79, "h": 79 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 79, "h": 79 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0089.png", + "frame": { "x": 1, "y": 1, "w": 81, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 81, "h": 78 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0090.png", + "frame": { "x": 163, "y": 1, "w": 79, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 79, "h": 76 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0091.png", + "frame": { "x": 489, "y": 1, "w": 81, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 6, "w": 81, "h": 73 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0092.png", + "frame": { "x": 247, "y": 428, "w": 82, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 14, "w": 82, "h": 65 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0093.png", + "frame": { "x": 165, "y": 428, "w": 81, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 12, "w": 81, "h": 67 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0094.png", + "frame": { "x": 413, "y": 359, "w": 81, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 11, "w": 81, "h": 68 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0095.png", + "frame": { "x": 1, "y": 224, "w": 82, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 10, "w": 82, "h": 69 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0096.png", + "frame": { "x": 167, "y": 289, "w": 82, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 10, "w": 82, "h": 69 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + }, + { + "filename": "0097.png", + "frame": { "x": 412, "y": 218, "w": 82, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 9, "w": 82, "h": 70 }, + "sourceSize": { "w": 82, "h": 79 }, + "duration": 100 + } +], +"meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.13-x64", + "image": "780.png", + "format": "I8", + "size": { "w": 576, "h": 496 }, + "scale": "1" +} } diff --git a/public/images/pokemon/exp/back/shiny/780.png b/public/images/pokemon/exp/back/shiny/780.png index 6755273b14b..686b7220fbb 100644 Binary files a/public/images/pokemon/exp/back/shiny/780.png and b/public/images/pokemon/exp/back/shiny/780.png differ diff --git a/public/images/pokemon/exp/shiny/2037.json b/public/images/pokemon/exp/shiny/2037.json index bba453cc0a9..bcd9340b28a 100644 --- a/public/images/pokemon/exp/shiny/2037.json +++ b/public/images/pokemon/exp/shiny/2037.json @@ -1,1112 +1,101 @@ -{ - "textures": [ - { - "image": "2037.png", - "format": "RGBA8888", - "size": { - "w": 224, - "h": 224 - }, - "scale": 1, - "frames": [ - { - "filename": "0040.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 47 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 52, - "h": 47 - }, - "frame": { - "x": 0, - "y": 0, - "w": 52, - "h": 47 - } - }, - { - "filename": "0041.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 47 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 52, - "h": 47 - }, - "frame": { - "x": 0, - "y": 47, - "w": 52, - "h": 47 - } - }, - { - "filename": "0042.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 47 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 52, - "h": 47 - }, - "frame": { - "x": 52, - "y": 0, - "w": 52, - "h": 47 - } - }, - { - "filename": "0044.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 47 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 53, - "h": 46 - }, - "frame": { - "x": 104, - "y": 0, - "w": 53, - "h": 46 - } - }, - { - "filename": "0045.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 47 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 53, - "h": 46 - }, - "frame": { - "x": 157, - "y": 0, - "w": 53, - "h": 46 - } - }, - { - "filename": "0039.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 47 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 52, - "h": 46 - }, - "frame": { - "x": 0, - "y": 94, - "w": 52, - "h": 46 - } - }, - { - "filename": "0043.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 47 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 52, - "h": 46 - }, - "frame": { - "x": 52, - "y": 47, - "w": 52, - "h": 46 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 47 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 53, - "h": 45 - }, - "frame": { - "x": 104, - "y": 46, - "w": 53, - "h": 45 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 47 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 53, - "h": 45 - }, - "frame": { - "x": 104, - "y": 46, - "w": 53, - "h": 45 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 47 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 53, - "h": 45 - }, - "frame": { - "x": 104, - "y": 46, - "w": 53, - "h": 45 - } - }, - { - "filename": "0024.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 47 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 53, - "h": 45 - }, - "frame": { - "x": 104, - "y": 46, - "w": 53, - "h": 45 - } - }, - { - "filename": "0026.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 47 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 53, - "h": 45 - }, - "frame": { - "x": 104, - "y": 46, - "w": 53, - "h": 45 - } - }, - { - "filename": "0036.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 47 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 53, - "h": 45 - }, - "frame": { - "x": 104, - "y": 46, - "w": 53, - "h": 45 - } - }, - { - "filename": "0047.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 47 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 52, - "h": 46 - }, - "frame": { - "x": 0, - "y": 140, - "w": 52, - "h": 46 - } - }, - { - "filename": "0048.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 47 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 53, - "h": 45 - }, - "frame": { - "x": 157, - "y": 46, - "w": 53, - "h": 45 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 47 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 52, - "h": 45 - }, - "frame": { - "x": 52, - "y": 93, - "w": 52, - "h": 45 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 47 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 52, - "h": 45 - }, - "frame": { - "x": 52, - "y": 93, - "w": 52, - "h": 45 - } - }, - { - "filename": "0025.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 47 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 52, - "h": 45 - }, - "frame": { - "x": 52, - "y": 93, - "w": 52, - "h": 45 - } - }, - { - "filename": "0037.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 47 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 52, - "h": 45 - }, - "frame": { - "x": 52, - "y": 93, - "w": 52, - "h": 45 - } - }, - { - "filename": "0046.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 47 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 52, - "h": 45 - }, - "frame": { - "x": 52, - "y": 93, - "w": 52, - "h": 45 - } - }, - { - "filename": "0051.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 47 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 52, - "h": 45 - }, - "frame": { - "x": 52, - "y": 93, - "w": 52, - "h": 45 - } - }, - { - "filename": "0052.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 47 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 52, - "h": 45 - }, - "frame": { - "x": 52, - "y": 93, - "w": 52, - "h": 45 - } - }, - { - "filename": "0049.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 47 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 53, - "h": 45 - }, - "frame": { - "x": 104, - "y": 91, - "w": 53, - "h": 45 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 47 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 53, - "h": 44 - }, - "frame": { - "x": 157, - "y": 91, - "w": 53, - "h": 44 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 47 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 53, - "h": 44 - }, - "frame": { - "x": 157, - "y": 91, - "w": 53, - "h": 44 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 47 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 53, - "h": 44 - }, - "frame": { - "x": 157, - "y": 91, - "w": 53, - "h": 44 - } - }, - { - "filename": "0023.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 47 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 53, - "h": 44 - }, - "frame": { - "x": 157, - "y": 91, - "w": 53, - "h": 44 - } - }, - { - "filename": "0027.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 47 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 53, - "h": 44 - }, - "frame": { - "x": 157, - "y": 91, - "w": 53, - "h": 44 - } - }, - { - "filename": "0035.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 47 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 53, - "h": 44 - }, - "frame": { - "x": 157, - "y": 91, - "w": 53, - "h": 44 - } - }, - { - "filename": "0038.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 47 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 52, - "h": 45 - }, - "frame": { - "x": 52, - "y": 138, - "w": 52, - "h": 45 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 47 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 54, - "h": 41 - }, - "frame": { - "x": 52, - "y": 183, - "w": 54, - "h": 41 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 47 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 54, - "h": 41 - }, - "frame": { - "x": 52, - "y": 183, - "w": 54, - "h": 41 - } - }, - { - "filename": "0018.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 47 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 54, - "h": 41 - }, - "frame": { - "x": 52, - "y": 183, - "w": 54, - "h": 41 - } - }, - { - "filename": "0020.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 47 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 54, - "h": 41 - }, - "frame": { - "x": 52, - "y": 183, - "w": 54, - "h": 41 - } - }, - { - "filename": "0030.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 47 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 54, - "h": 41 - }, - "frame": { - "x": 52, - "y": 183, - "w": 54, - "h": 41 - } - }, - { - "filename": "0032.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 47 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 54, - "h": 41 - }, - "frame": { - "x": 52, - "y": 183, - "w": 54, - "h": 41 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 47 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 53, - "h": 44 - }, - "frame": { - "x": 104, - "y": 136, - "w": 53, - "h": 44 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 47 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 53, - "h": 44 - }, - "frame": { - "x": 104, - "y": 136, - "w": 53, - "h": 44 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 47 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 53, - "h": 44 - }, - "frame": { - "x": 104, - "y": 136, - "w": 53, - "h": 44 - } - }, - { - "filename": "0022.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 47 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 53, - "h": 44 - }, - "frame": { - "x": 104, - "y": 136, - "w": 53, - "h": 44 - } - }, - { - "filename": "0028.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 47 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 53, - "h": 44 - }, - "frame": { - "x": 104, - "y": 136, - "w": 53, - "h": 44 - } - }, - { - "filename": "0034.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 47 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 53, - "h": 44 - }, - "frame": { - "x": 104, - "y": 136, - "w": 53, - "h": 44 - } - }, - { - "filename": "0050.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 47 - }, - "spriteSourceSize": { - "x": 1, - "y": 2, - "w": 52, - "h": 45 - }, - "frame": { - "x": 157, - "y": 135, - "w": 52, - "h": 45 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 47 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 54, - "h": 42 - }, - "frame": { - "x": 106, - "y": 180, - "w": 54, - "h": 42 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 47 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 54, - "h": 42 - }, - "frame": { - "x": 106, - "y": 180, - "w": 54, - "h": 42 - } - }, - { - "filename": "0017.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 47 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 54, - "h": 42 - }, - "frame": { - "x": 106, - "y": 180, - "w": 54, - "h": 42 - } - }, - { - "filename": "0021.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 47 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 54, - "h": 42 - }, - "frame": { - "x": 106, - "y": 180, - "w": 54, - "h": 42 - } - }, - { - "filename": "0029.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 47 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 54, - "h": 42 - }, - "frame": { - "x": 106, - "y": 180, - "w": 54, - "h": 42 - } - }, - { - "filename": "0033.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 47 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 54, - "h": 42 - }, - "frame": { - "x": 106, - "y": 180, - "w": 54, - "h": 42 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 47 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 54, - "h": 42 - }, - "frame": { - "x": 160, - "y": 180, - "w": 54, - "h": 42 - } - }, - { - "filename": "0019.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 47 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 54, - "h": 42 - }, - "frame": { - "x": 160, - "y": 180, - "w": 54, - "h": 42 - } - }, - { - "filename": "0031.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 54, - "h": 47 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 54, - "h": 42 - }, - "frame": { - "x": 160, - "y": 180, - "w": 54, - "h": 42 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:bc39b65cf0ec2f14ad8bf933de8a41c5:b5060619f68332d93b5dc706d7dd4b94:c679847d1c2ddf91caeaa5ebb76a6664$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 0, "y": 0, "w": 59, "h": 46 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 59, "h": 46 }, + "sourceSize": { "w": 59, "h": 46 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 59, "y": 0, "w": 59, "h": 46 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 59, "h": 46 }, + "sourceSize": { "w": 59, "h": 46 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 118, "y": 0, "w": 59, "h": 46 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 59, "h": 46 }, + "sourceSize": { "w": 59, "h": 46 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 177, "y": 0, "w": 59, "h": 46 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 59, "h": 46 }, + "sourceSize": { "w": 59, "h": 46 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 0, "y": 46, "w": 59, "h": 46 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 59, "h": 46 }, + "sourceSize": { "w": 59, "h": 46 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 59, "y": 46, "w": 59, "h": 46 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 59, "h": 46 }, + "sourceSize": { "w": 59, "h": 46 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 118, "y": 46, "w": 59, "h": 46 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 59, "h": 46 }, + "sourceSize": { "w": 59, "h": 46 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 177, "y": 46, "w": 59, "h": 46 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 59, "h": 46 }, + "sourceSize": { "w": 59, "h": 46 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 0, "y": 92, "w": 59, "h": 46 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 59, "h": 46 }, + "sourceSize": { "w": 59, "h": 46 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 59, "y": 92, "w": 59, "h": 46 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 59, "h": 46 }, + "sourceSize": { "w": 59, "h": 46 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.13-x64", + "image": "2037.png", + "format": "I8", + "size": { "w": 236, "h": 138 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/shiny/2037.png b/public/images/pokemon/exp/shiny/2037.png index 57b5fc6a54a..bf55fc87f2c 100644 Binary files a/public/images/pokemon/exp/shiny/2037.png and b/public/images/pokemon/exp/shiny/2037.png differ diff --git a/public/images/pokemon/exp/shiny/2038.json b/public/images/pokemon/exp/shiny/2038.json index 864e19300de..90b36cbc795 100644 --- a/public/images/pokemon/exp/shiny/2038.json +++ b/public/images/pokemon/exp/shiny/2038.json @@ -1,692 +1,155 @@ -{ - "textures": [ - { - "image": "2038.png", - "format": "RGBA8888", - "size": { - "w": 516, - "h": 516 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 94, - "h": 87 - }, - "spriteSourceSize": { - "x": 3, - "y": 9, - "w": 86, - "h": 74 - }, - "frame": { - "x": 0, - "y": 0, - "w": 86, - "h": 74 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 94, - "h": 87 - }, - "spriteSourceSize": { - "x": 3, - "y": 8, - "w": 84, - "h": 75 - }, - "frame": { - "x": 86, - "y": 0, - "w": 84, - "h": 75 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 94, - "h": 87 - }, - "spriteSourceSize": { - "x": 2, - "y": 8, - "w": 85, - "h": 75 - }, - "frame": { - "x": 170, - "y": 0, - "w": 85, - "h": 75 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 94, - "h": 87 - }, - "spriteSourceSize": { - "x": 2, - "y": 8, - "w": 85, - "h": 75 - }, - "frame": { - "x": 255, - "y": 0, - "w": 85, - "h": 75 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 94, - "h": 87 - }, - "spriteSourceSize": { - "x": 1, - "y": 8, - "w": 86, - "h": 75 - }, - "frame": { - "x": 340, - "y": 0, - "w": 86, - "h": 75 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 94, - "h": 87 - }, - "spriteSourceSize": { - "x": 1, - "y": 8, - "w": 86, - "h": 75 - }, - "frame": { - "x": 426, - "y": 0, - "w": 86, - "h": 75 - } - }, - { - "filename": "0031.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 94, - "h": 87 - }, - "spriteSourceSize": { - "x": 3, - "y": 8, - "w": 88, - "h": 75 - }, - "frame": { - "x": 0, - "y": 75, - "w": 88, - "h": 75 - } - }, - { - "filename": "0032.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 94, - "h": 87 - }, - "spriteSourceSize": { - "x": 3, - "y": 8, - "w": 87, - "h": 75 - }, - "frame": { - "x": 88, - "y": 75, - "w": 87, - "h": 75 - } - }, - { - "filename": "0030.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 94, - "h": 87 - }, - "spriteSourceSize": { - "x": 3, - "y": 7, - "w": 89, - "h": 76 - }, - "frame": { - "x": 175, - "y": 75, - "w": 89, - "h": 76 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 94, - "h": 87 - }, - "spriteSourceSize": { - "x": 0, - "y": 8, - "w": 87, - "h": 77 - }, - "frame": { - "x": 264, - "y": 75, - "w": 87, - "h": 77 - } - }, - { - "filename": "0029.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 94, - "h": 87 - }, - "spriteSourceSize": { - "x": 3, - "y": 6, - "w": 90, - "h": 77 - }, - "frame": { - "x": 351, - "y": 75, - "w": 90, - "h": 77 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 94, - "h": 87 - }, - "spriteSourceSize": { - "x": 0, - "y": 8, - "w": 86, - "h": 78 - }, - "frame": { - "x": 0, - "y": 150, - "w": 86, - "h": 78 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 94, - "h": 87 - }, - "spriteSourceSize": { - "x": 0, - "y": 9, - "w": 85, - "h": 78 - }, - "frame": { - "x": 86, - "y": 150, - "w": 85, - "h": 78 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 94, - "h": 87 - }, - "spriteSourceSize": { - "x": 0, - "y": 9, - "w": 85, - "h": 78 - }, - "frame": { - "x": 171, - "y": 151, - "w": 85, - "h": 78 - } - }, - { - "filename": "0028.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 94, - "h": 87 - }, - "spriteSourceSize": { - "x": 3, - "y": 5, - "w": 91, - "h": 78 - }, - "frame": { - "x": 256, - "y": 152, - "w": 91, - "h": 78 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 94, - "h": 87 - }, - "spriteSourceSize": { - "x": 0, - "y": 8, - "w": 86, - "h": 79 - }, - "frame": { - "x": 347, - "y": 152, - "w": 86, - "h": 79 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 94, - "h": 87 - }, - "spriteSourceSize": { - "x": 0, - "y": 8, - "w": 86, - "h": 79 - }, - "frame": { - "x": 0, - "y": 228, - "w": 86, - "h": 79 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 94, - "h": 87 - }, - "spriteSourceSize": { - "x": 0, - "y": 8, - "w": 85, - "h": 79 - }, - "frame": { - "x": 86, - "y": 228, - "w": 85, - "h": 79 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 94, - "h": 87 - }, - "spriteSourceSize": { - "x": 0, - "y": 8, - "w": 85, - "h": 79 - }, - "frame": { - "x": 171, - "y": 229, - "w": 85, - "h": 79 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 94, - "h": 87 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 85, - "h": 79 - }, - "frame": { - "x": 256, - "y": 230, - "w": 85, - "h": 79 - } - }, - { - "filename": "0027.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 94, - "h": 87 - }, - "spriteSourceSize": { - "x": 4, - "y": 4, - "w": 90, - "h": 79 - }, - "frame": { - "x": 341, - "y": 231, - "w": 90, - "h": 79 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 94, - "h": 87 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 85, - "h": 80 - }, - "frame": { - "x": 431, - "y": 231, - "w": 85, - "h": 80 - } - }, - { - "filename": "0017.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 94, - "h": 87 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 86, - "h": 80 - }, - "frame": { - "x": 0, - "y": 307, - "w": 86, - "h": 80 - } - }, - { - "filename": "0018.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 94, - "h": 87 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 87, - "h": 81 - }, - "frame": { - "x": 86, - "y": 308, - "w": 87, - "h": 81 - } - }, - { - "filename": "0026.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 94, - "h": 87 - }, - "spriteSourceSize": { - "x": 4, - "y": 2, - "w": 90, - "h": 81 - }, - "frame": { - "x": 173, - "y": 309, - "w": 90, - "h": 81 - } - }, - { - "filename": "0019.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 94, - "h": 87 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 88, - "h": 82 - }, - "frame": { - "x": 263, - "y": 310, - "w": 88, - "h": 82 - } - }, - { - "filename": "0025.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 94, - "h": 87 - }, - "spriteSourceSize": { - "x": 4, - "y": 1, - "w": 90, - "h": 82 - }, - "frame": { - "x": 351, - "y": 311, - "w": 90, - "h": 82 - } - }, - { - "filename": "0020.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 94, - "h": 87 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 88, - "h": 83 - }, - "frame": { - "x": 0, - "y": 389, - "w": 88, - "h": 83 - } - }, - { - "filename": "0021.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 94, - "h": 87 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 89, - "h": 83 - }, - "frame": { - "x": 88, - "y": 390, - "w": 89, - "h": 83 - } - }, - { - "filename": "0022.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 94, - "h": 87 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 89, - "h": 83 - }, - "frame": { - "x": 177, - "y": 392, - "w": 89, - "h": 83 - } - }, - { - "filename": "0023.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 94, - "h": 87 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 89, - "h": 83 - }, - "frame": { - "x": 266, - "y": 393, - "w": 89, - "h": 83 - } - }, - { - "filename": "0024.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 94, - "h": 87 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 90, - "h": 83 - }, - "frame": { - "x": 355, - "y": 393, - "w": 90, - "h": 83 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:90bf50050728a091bdf4379ca942498d:30c5d97fa3349bcea4fb2421cc82a0fc:51bcdbb4fa6a1a9e90a83c2a4132ee1b$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 157, "y": 194, "w": 76, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 76, "h": 65 }, + "sourceSize": { "w": 86, "h": 67 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 164, "y": 128, "w": 80, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 80, "h": 66 }, + "sourceSize": { "w": 86, "h": 67 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 244, "y": 128, "w": 80, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 80, "h": 64 }, + "sourceSize": { "w": 86, "h": 67 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 0, "y": 130, "w": 80, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 80, "h": 64 }, + "sourceSize": { "w": 86, "h": 67 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 78, "y": 194, "w": 79, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 2, "w": 79, "h": 64 }, + "sourceSize": { "w": 86, "h": 67 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 170, "y": 0, "w": 84, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 84, "h": 64 }, + "sourceSize": { "w": 86, "h": 67 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 254, "y": 0, "w": 84, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 84, "h": 64 }, + "sourceSize": { "w": 86, "h": 67 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 86, "y": 0, "w": 84, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 0, "w": 84, "h": 65 }, + "sourceSize": { "w": 86, "h": 67 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 170, "y": 64, "w": 84, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 84, "h": 64 }, + "sourceSize": { "w": 86, "h": 67 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 0, "y": 0, "w": 86, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 86, "h": 65 }, + "sourceSize": { "w": 86, "h": 67 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 254, "y": 64, "w": 84, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 84, "h": 64 }, + "sourceSize": { "w": 86, "h": 67 }, + "duration": 100 + }, + { + "filename": "0012.png", + "frame": { "x": 0, "y": 65, "w": 82, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 0, "w": 82, "h": 65 }, + "sourceSize": { "w": 86, "h": 67 }, + "duration": 100 + }, + { + "filename": "0013.png", + "frame": { "x": 80, "y": 130, "w": 80, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 80, "h": 64 }, + "sourceSize": { "w": 86, "h": 67 }, + "duration": 100 + }, + { + "filename": "0014.png", + "frame": { "x": 82, "y": 65, "w": 82, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 82, "h": 65 }, + "sourceSize": { "w": 86, "h": 67 }, + "duration": 100 + }, + { + "filename": "0015.png", + "frame": { "x": 244, "y": 192, "w": 80, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 80, "h": 64 }, + "sourceSize": { "w": 86, "h": 67 }, + "duration": 100 + }, + { + "filename": "0016.png", + "frame": { "x": 0, "y": 194, "w": 78, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 1, "w": 78, "h": 65 }, + "sourceSize": { "w": 86, "h": 67 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.13-x64", + "image": "2038.png", + "format": "I8", + "size": { "w": 338, "h": 259 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/shiny/2038.png b/public/images/pokemon/exp/shiny/2038.png index 4496e7eacc2..c2e00f4c939 100644 Binary files a/public/images/pokemon/exp/shiny/2038.png and b/public/images/pokemon/exp/shiny/2038.png differ diff --git a/public/images/pokemon/exp/shiny/2074.json b/public/images/pokemon/exp/shiny/2074.json index 0707b26186c..c29fe8e2992 100644 --- a/public/images/pokemon/exp/shiny/2074.json +++ b/public/images/pokemon/exp/shiny/2074.json @@ -1,272 +1,425 @@ -{ - "textures": [ - { - "image": "2074.png", - "format": "RGBA8888", - "size": { - "w": 142, - "h": 142 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 63, - "h": 44 - }, - "spriteSourceSize": { - "x": 0, - "y": 16, - "w": 63, - "h": 28 - }, - "frame": { - "x": 0, - "y": 0, - "w": 63, - "h": 28 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 63, - "h": 44 - }, - "spriteSourceSize": { - "x": 1, - "y": 12, - "w": 61, - "h": 30 - }, - "frame": { - "x": 63, - "y": 0, - "w": 61, - "h": 30 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 63, - "h": 44 - }, - "spriteSourceSize": { - "x": 1, - "y": 12, - "w": 61, - "h": 30 - }, - "frame": { - "x": 63, - "y": 0, - "w": 61, - "h": 30 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 63, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 8, - "w": 57, - "h": 32 - }, - "frame": { - "x": 0, - "y": 28, - "w": 57, - "h": 32 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 63, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 8, - "w": 57, - "h": 32 - }, - "frame": { - "x": 0, - "y": 28, - "w": 57, - "h": 32 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 63, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 4, - "w": 56, - "h": 35 - }, - "frame": { - "x": 57, - "y": 30, - "w": 56, - "h": 35 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 63, - "h": 44 - }, - "spriteSourceSize": { - "x": 3, - "y": 4, - "w": 56, - "h": 35 - }, - "frame": { - "x": 57, - "y": 30, - "w": 56, - "h": 35 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 63, - "h": 44 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 52, - "h": 37 - }, - "frame": { - "x": 0, - "y": 60, - "w": 52, - "h": 37 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 63, - "h": 44 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 52, - "h": 37 - }, - "frame": { - "x": 0, - "y": 60, - "w": 52, - "h": 37 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 63, - "h": 44 - }, - "spriteSourceSize": { - "x": 8, - "y": 0, - "w": 47, - "h": 40 - }, - "frame": { - "x": 0, - "y": 97, - "w": 47, - "h": 40 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 63, - "h": 44 - }, - "spriteSourceSize": { - "x": 8, - "y": 0, - "w": 48, - "h": 39 - }, - "frame": { - "x": 47, - "y": 97, - "w": 48, - "h": 39 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 63, - "h": 44 - }, - "spriteSourceSize": { - "x": 8, - "y": 0, - "w": 47, - "h": 39 - }, - "frame": { - "x": 95, - "y": 65, - "w": 47, - "h": 39 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:8b430a28b9c42658bb83aba3cc9d0d69:c07291451914e5634685b69162c2028f:ad137687a877f55f096b7447bfdfe295$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 118, "y": 120, "w": 55, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 4, "w": 55, "h": 30 }, + "sourceSize": { "w": 70, "h": 42 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 64, "y": 91, "w": 58, "h": 29 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 7, "w": 58, "h": 29 }, + "sourceSize": { "w": 70, "h": 42 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 122, "y": 92, "w": 60, "h": 28 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 11, "w": 60, "h": 28 }, + "sourceSize": { "w": 70, "h": 42 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 1, "y": 90, "w": 63, "h": 28 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 14, "w": 63, "h": 28 }, + "sourceSize": { "w": 70, "h": 42 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 251, "y": 32, "w": 65, "h": 29 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 13, "w": 65, "h": 29 }, + "sourceSize": { "w": 70, "h": 42 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 1, "y": 32, "w": 67, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 12, "w": 67, "h": 30 }, + "sourceSize": { "w": 70, "h": 42 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 251, "y": 61, "w": 65, "h": 29 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 11, "w": 65, "h": 29 }, + "sourceSize": { "w": 70, "h": 42 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 133, "y": 64, "w": 64, "h": 28 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 11, "w": 64, "h": 28 }, + "sourceSize": { "w": 70, "h": 42 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 256, "y": 118, "w": 62, "h": 27 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 10, "w": 62, "h": 27 }, + "sourceSize": { "w": 70, "h": 42 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 1, "y": 118, "w": 60, "h": 28 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 8, "w": 60, "h": 28 }, + "sourceSize": { "w": 70, "h": 42 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 61, "y": 120, "w": 57, "h": 29 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 6, "w": 57, "h": 29 }, + "sourceSize": { "w": 70, "h": 42 }, + "duration": 100 + }, + { + "filename": "0012.png", + "frame": { "x": 118, "y": 120, "w": 55, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 4, "w": 55, "h": 30 }, + "sourceSize": { "w": 70, "h": 42 }, + "duration": 100 + }, + { + "filename": "0013.png", + "frame": { "x": 64, "y": 91, "w": 58, "h": 29 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 7, "w": 58, "h": 29 }, + "sourceSize": { "w": 70, "h": 42 }, + "duration": 100 + }, + { + "filename": "0014.png", + "frame": { "x": 122, "y": 92, "w": 60, "h": 28 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 11, "w": 60, "h": 28 }, + "sourceSize": { "w": 70, "h": 42 }, + "duration": 100 + }, + { + "filename": "0015.png", + "frame": { "x": 1, "y": 90, "w": 63, "h": 28 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 14, "w": 63, "h": 28 }, + "sourceSize": { "w": 70, "h": 42 }, + "duration": 100 + }, + { + "filename": "0016.png", + "frame": { "x": 251, "y": 32, "w": 65, "h": 29 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 13, "w": 65, "h": 29 }, + "sourceSize": { "w": 70, "h": 42 }, + "duration": 100 + }, + { + "filename": "0017.png", + "frame": { "x": 1, "y": 32, "w": 67, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 12, "w": 67, "h": 30 }, + "sourceSize": { "w": 70, "h": 42 }, + "duration": 100 + }, + { + "filename": "0018.png", + "frame": { "x": 251, "y": 61, "w": 65, "h": 29 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 11, "w": 65, "h": 29 }, + "sourceSize": { "w": 70, "h": 42 }, + "duration": 100 + }, + { + "filename": "0019.png", + "frame": { "x": 133, "y": 64, "w": 64, "h": 28 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 11, "w": 64, "h": 28 }, + "sourceSize": { "w": 70, "h": 42 }, + "duration": 100 + }, + { + "filename": "0020.png", + "frame": { "x": 182, "y": 119, "w": 62, "h": 27 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 10, "w": 62, "h": 27 }, + "sourceSize": { "w": 70, "h": 42 }, + "duration": 100 + }, + { + "filename": "0021.png", + "frame": { "x": 1, "y": 118, "w": 60, "h": 28 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 8, "w": 60, "h": 28 }, + "sourceSize": { "w": 70, "h": 42 }, + "duration": 100 + }, + { + "filename": "0022.png", + "frame": { "x": 61, "y": 120, "w": 57, "h": 29 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 6, "w": 57, "h": 29 }, + "sourceSize": { "w": 70, "h": 42 }, + "duration": 100 + }, + { + "filename": "0023.png", + "frame": { "x": 118, "y": 120, "w": 55, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 4, "w": 55, "h": 30 }, + "sourceSize": { "w": 70, "h": 42 }, + "duration": 100 + }, + { + "filename": "0024.png", + "frame": { "x": 64, "y": 91, "w": 58, "h": 29 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 7, "w": 58, "h": 29 }, + "sourceSize": { "w": 70, "h": 42 }, + "duration": 100 + }, + { + "filename": "0025.png", + "frame": { "x": 122, "y": 92, "w": 60, "h": 28 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 11, "w": 60, "h": 28 }, + "sourceSize": { "w": 70, "h": 42 }, + "duration": 100 + }, + { + "filename": "0026.png", + "frame": { "x": 1, "y": 90, "w": 63, "h": 28 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 14, "w": 63, "h": 28 }, + "sourceSize": { "w": 70, "h": 42 }, + "duration": 100 + }, + { + "filename": "0027.png", + "frame": { "x": 251, "y": 32, "w": 65, "h": 29 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 13, "w": 65, "h": 29 }, + "sourceSize": { "w": 70, "h": 42 }, + "duration": 100 + }, + { + "filename": "0028.png", + "frame": { "x": 1, "y": 32, "w": 67, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 12, "w": 67, "h": 30 }, + "sourceSize": { "w": 70, "h": 42 }, + "duration": 100 + }, + { + "filename": "0029.png", + "frame": { "x": 251, "y": 61, "w": 65, "h": 29 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 11, "w": 65, "h": 29 }, + "sourceSize": { "w": 70, "h": 42 }, + "duration": 100 + }, + { + "filename": "0030.png", + "frame": { "x": 133, "y": 64, "w": 64, "h": 28 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 11, "w": 64, "h": 28 }, + "sourceSize": { "w": 70, "h": 42 }, + "duration": 100 + }, + { + "filename": "0031.png", + "frame": { "x": 182, "y": 119, "w": 62, "h": 27 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 10, "w": 62, "h": 27 }, + "sourceSize": { "w": 70, "h": 42 }, + "duration": 100 + }, + { + "filename": "0032.png", + "frame": { "x": 1, "y": 118, "w": 60, "h": 28 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 8, "w": 60, "h": 28 }, + "sourceSize": { "w": 70, "h": 42 }, + "duration": 100 + }, + { + "filename": "0033.png", + "frame": { "x": 61, "y": 120, "w": 57, "h": 29 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 6, "w": 57, "h": 29 }, + "sourceSize": { "w": 70, "h": 42 }, + "duration": 100 + }, + { + "filename": "0034.png", + "frame": { "x": 118, "y": 120, "w": 55, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 4, "w": 55, "h": 30 }, + "sourceSize": { "w": 70, "h": 42 }, + "duration": 100 + }, + { + "filename": "0035.png", + "frame": { "x": 197, "y": 90, "w": 59, "h": 29 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 8, "w": 59, "h": 29 }, + "sourceSize": { "w": 70, "h": 42 }, + "duration": 100 + }, + { + "filename": "0036.png", + "frame": { "x": 256, "y": 90, "w": 61, "h": 28 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 11, "w": 61, "h": 28 }, + "sourceSize": { "w": 70, "h": 42 }, + "duration": 100 + }, + { + "filename": "0037.png", + "frame": { "x": 68, "y": 63, "w": 65, "h": 28 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 11, "w": 65, "h": 28 }, + "sourceSize": { "w": 70, "h": 42 }, + "duration": 100 + }, + { + "filename": "0038.png", + "frame": { "x": 1, "y": 62, "w": 67, "h": 28 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 67, "h": 28 }, + "sourceSize": { "w": 70, "h": 42 }, + "duration": 100 + }, + { + "filename": "0039.png", + "frame": { "x": 71, "y": 1, "w": 69, "h": 31 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 69, "h": 31 }, + "sourceSize": { "w": 70, "h": 42 }, + "duration": 100 + }, + { + "filename": "0040.png", + "frame": { "x": 1, "y": 1, "w": 70, "h": 31 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 70, "h": 31 }, + "sourceSize": { "w": 70, "h": 42 }, + "duration": 100 + }, + { + "filename": "0041.png", + "frame": { "x": 140, "y": 1, "w": 69, "h": 31 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 69, "h": 31 }, + "sourceSize": { "w": 70, "h": 42 }, + "duration": 100 + }, + { + "filename": "0042.png", + "frame": { "x": 209, "y": 1, "w": 67, "h": 31 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 67, "h": 31 }, + "sourceSize": { "w": 70, "h": 42 }, + "duration": 100 + }, + { + "filename": "0043.png", + "frame": { "x": 276, "y": 1, "w": 65, "h": 31 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 65, "h": 31 }, + "sourceSize": { "w": 70, "h": 42 }, + "duration": 100 + }, + { + "filename": "0044.png", + "frame": { "x": 129, "y": 32, "w": 63, "h": 30 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 63, "h": 30 }, + "sourceSize": { "w": 70, "h": 42 }, + "duration": 100 + }, + { + "filename": "0045.png", + "frame": { "x": 68, "y": 32, "w": 61, "h": 31 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 4, "w": 61, "h": 31 }, + "sourceSize": { "w": 70, "h": 42 }, + "duration": 100 + }, + { + "filename": "0046.png", + "frame": { "x": 192, "y": 32, "w": 59, "h": 32 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 4, "w": 59, "h": 32 }, + "sourceSize": { "w": 70, "h": 42 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.13-x64", + "image": "2074.png", + "format": "I8", + "size": { "w": 342, "h": 151 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/shiny/2074.png b/public/images/pokemon/exp/shiny/2074.png index 8ca5c12c06d..6697b81ffbc 100644 Binary files a/public/images/pokemon/exp/shiny/2074.png and b/public/images/pokemon/exp/shiny/2074.png differ diff --git a/public/images/pokemon/exp/shiny/2075.json b/public/images/pokemon/exp/shiny/2075.json index e754d41dc7e..536079456f0 100644 --- a/public/images/pokemon/exp/shiny/2075.json +++ b/public/images/pokemon/exp/shiny/2075.json @@ -1,272 +1,812 @@ -{ - "textures": [ - { - "image": "2075.png", - "format": "RGBA8888", - "size": { - "w": 184, - "h": 184 - }, - "scale": 1, - "frames": [ - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 87, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 84, - "h": 50 - }, - "frame": { - "x": 0, - "y": 0, - "w": 84, - "h": 50 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 87, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 84, - "h": 50 - }, - "frame": { - "x": 0, - "y": 0, - "w": 84, - "h": 50 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 87, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 83, - "h": 50 - }, - "frame": { - "x": 84, - "y": 0, - "w": 83, - "h": 50 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 87, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 83, - "h": 50 - }, - "frame": { - "x": 84, - "y": 0, - "w": 83, - "h": 50 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 87, - "h": 52 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 82, - "h": 51 - }, - "frame": { - "x": 0, - "y": 50, - "w": 82, - "h": 51 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 87, - "h": 52 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 82, - "h": 51 - }, - "frame": { - "x": 0, - "y": 50, - "w": 82, - "h": 51 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 87, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 83, - "h": 46 - }, - "frame": { - "x": 82, - "y": 50, - "w": 83, - "h": 46 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 87, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 83, - "h": 46 - }, - "frame": { - "x": 82, - "y": 50, - "w": 83, - "h": 46 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 87, - "h": 52 - }, - "spriteSourceSize": { - "x": 1, - "y": 7, - "w": 81, - "h": 45 - }, - "frame": { - "x": 82, - "y": 96, - "w": 81, - "h": 45 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 87, - "h": 52 - }, - "spriteSourceSize": { - "x": 1, - "y": 7, - "w": 81, - "h": 45 - }, - "frame": { - "x": 82, - "y": 96, - "w": 81, - "h": 45 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 87, - "h": 52 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 80, - "h": 51 - }, - "frame": { - "x": 0, - "y": 101, - "w": 80, - "h": 51 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 87, - "h": 52 - }, - "spriteSourceSize": { - "x": 3, - "y": 9, - "w": 78, - "h": 43 - }, - "frame": { - "x": 80, - "y": 141, - "w": 78, - "h": 43 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:f0da90bc6bf32531b1e0ebbaa09bf832:9b17b69f6928a9f2486d30e170634486:732805cb123f88b2d403da0dec709706$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 225, "y": 1, "w": 73, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 2, "w": 73, "h": 44 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 442, "y": 1, "w": 72, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 2, "w": 72, "h": 44 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 144, "y": 88, "w": 71, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 2, "w": 71, "h": 43 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 358, "y": 89, "w": 69, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 1, "w": 69, "h": 44 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 145, "y": 218, "w": 65, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 0, "w": 65, "h": 44 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 358, "y": 89, "w": 69, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 1, "w": 69, "h": 44 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 144, "y": 88, "w": 71, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 2, "w": 71, "h": 43 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 442, "y": 1, "w": 72, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 2, "w": 72, "h": 44 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 225, "y": 1, "w": 73, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 2, "w": 73, "h": 44 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 1, "y": 1, "w": 75, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 2, "w": 75, "h": 44 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 76, "y": 1, "w": 75, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 75, "h": 44 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + }, + { + "filename": "0012.png", + "frame": { "x": 151, "y": 1, "w": 74, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 74, "h": 44 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + }, + { + "filename": "0013.png", + "frame": { "x": 298, "y": 1, "w": 73, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 73, "h": 44 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + }, + { + "filename": "0014.png", + "frame": { "x": 151, "y": 1, "w": 74, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 74, "h": 44 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + }, + { + "filename": "0015.png", + "frame": { "x": 76, "y": 1, "w": 75, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 75, "h": 44 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + }, + { + "filename": "0016.png", + "frame": { "x": 1, "y": 1, "w": 75, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 2, "w": 75, "h": 44 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + }, + { + "filename": "0017.png", + "frame": { "x": 225, "y": 1, "w": 73, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 2, "w": 73, "h": 44 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + }, + { + "filename": "0018.png", + "frame": { "x": 442, "y": 1, "w": 72, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 2, "w": 72, "h": 44 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + }, + { + "filename": "0019.png", + "frame": { "x": 144, "y": 88, "w": 71, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 2, "w": 71, "h": 43 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + }, + { + "filename": "0020.png", + "frame": { "x": 358, "y": 89, "w": 69, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 1, "w": 69, "h": 44 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + }, + { + "filename": "0021.png", + "frame": { "x": 145, "y": 218, "w": 65, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 0, "w": 65, "h": 44 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + }, + { + "filename": "0022.png", + "frame": { "x": 358, "y": 89, "w": 69, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 1, "w": 69, "h": 44 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + }, + { + "filename": "0023.png", + "frame": { "x": 144, "y": 88, "w": 71, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 2, "w": 71, "h": 43 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + }, + { + "filename": "0024.png", + "frame": { "x": 442, "y": 1, "w": 72, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 2, "w": 72, "h": 44 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + }, + { + "filename": "0025.png", + "frame": { "x": 225, "y": 1, "w": 73, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 2, "w": 73, "h": 44 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + }, + { + "filename": "0026.png", + "frame": { "x": 1, "y": 1, "w": 75, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 2, "w": 75, "h": 44 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + }, + { + "filename": "0027.png", + "frame": { "x": 76, "y": 1, "w": 75, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 75, "h": 44 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + }, + { + "filename": "0028.png", + "frame": { "x": 151, "y": 1, "w": 74, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 74, "h": 44 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + }, + { + "filename": "0029.png", + "frame": { "x": 298, "y": 1, "w": 73, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 73, "h": 44 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + }, + { + "filename": "0030.png", + "frame": { "x": 151, "y": 1, "w": 74, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 74, "h": 44 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + }, + { + "filename": "0031.png", + "frame": { "x": 76, "y": 1, "w": 75, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 75, "h": 44 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + }, + { + "filename": "0032.png", + "frame": { "x": 1, "y": 1, "w": 75, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 2, "w": 75, "h": 44 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + }, + { + "filename": "0033.png", + "frame": { "x": 225, "y": 1, "w": 73, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 2, "w": 73, "h": 44 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + }, + { + "filename": "0034.png", + "frame": { "x": 442, "y": 1, "w": 72, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 2, "w": 72, "h": 44 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + }, + { + "filename": "0035.png", + "frame": { "x": 144, "y": 88, "w": 71, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 2, "w": 71, "h": 43 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + }, + { + "filename": "0036.png", + "frame": { "x": 358, "y": 89, "w": 69, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 1, "w": 69, "h": 44 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + }, + { + "filename": "0037.png", + "frame": { "x": 145, "y": 218, "w": 65, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 0, "w": 65, "h": 44 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + }, + { + "filename": "0038.png", + "frame": { "x": 358, "y": 89, "w": 69, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 1, "w": 69, "h": 44 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + }, + { + "filename": "0039.png", + "frame": { "x": 144, "y": 88, "w": 71, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 2, "w": 71, "h": 43 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + }, + { + "filename": "0040.png", + "frame": { "x": 442, "y": 1, "w": 72, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 2, "w": 72, "h": 44 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + }, + { + "filename": "0041.png", + "frame": { "x": 225, "y": 1, "w": 73, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 2, "w": 73, "h": 44 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + }, + { + "filename": "0042.png", + "frame": { "x": 1, "y": 1, "w": 75, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 2, "w": 75, "h": 44 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + }, + { + "filename": "0043.png", + "frame": { "x": 76, "y": 1, "w": 75, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 75, "h": 44 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + }, + { + "filename": "0044.png", + "frame": { "x": 151, "y": 1, "w": 74, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 74, "h": 44 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + }, + { + "filename": "0045.png", + "frame": { "x": 298, "y": 1, "w": 73, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 73, "h": 44 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + }, + { + "filename": "0046.png", + "frame": { "x": 151, "y": 1, "w": 74, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 74, "h": 44 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + }, + { + "filename": "0047.png", + "frame": { "x": 76, "y": 1, "w": 75, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 2, "w": 75, "h": 44 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + }, + { + "filename": "0048.png", + "frame": { "x": 1, "y": 1, "w": 75, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 2, "w": 75, "h": 44 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + }, + { + "filename": "0049.png", + "frame": { "x": 225, "y": 1, "w": 73, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 2, "w": 73, "h": 44 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + }, + { + "filename": "0050.png", + "frame": { "x": 434, "y": 87, "w": 73, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 3, "w": 73, "h": 42 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + }, + { + "filename": "0051.png", + "frame": { "x": 358, "y": 169, "w": 73, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 4, "w": 73, "h": 40 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + }, + { + "filename": "0052.png", + "frame": { "x": 358, "y": 169, "w": 73, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 3, "w": 73, "h": 40 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + }, + { + "filename": "0053.png", + "frame": { "x": 358, "y": 169, "w": 73, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 4, "w": 73, "h": 40 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + }, + { + "filename": "0054.png", + "frame": { "x": 431, "y": 169, "w": 73, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 4, "w": 73, "h": 40 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + }, + { + "filename": "0055.png", + "frame": { "x": 1, "y": 170, "w": 73, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 4, "w": 73, "h": 40 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + }, + { + "filename": "0056.png", + "frame": { "x": 427, "y": 129, "w": 74, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 4, "w": 74, "h": 40 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + }, + { + "filename": "0057.png", + "frame": { "x": 74, "y": 172, "w": 73, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 4, "w": 73, "h": 40 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + }, + { + "filename": "0058.png", + "frame": { "x": 442, "y": 45, "w": 74, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 74, "h": 42 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + }, + { + "filename": "0059.png", + "frame": { "x": 362, "y": 46, "w": 72, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 72, "h": 43 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + }, + { + "filename": "0060.png", + "frame": { "x": 217, "y": 45, "w": 71, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 71, "h": 44 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + }, + { + "filename": "0061.png", + "frame": { "x": 371, "y": 1, "w": 71, "h": 45 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 71, "h": 45 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + }, + { + "filename": "0062.png", + "frame": { "x": 1, "y": 45, "w": 70, "h": 45 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 70, "h": 45 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + }, + { + "filename": "0063.png", + "frame": { "x": 288, "y": 87, "w": 70, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 70, "h": 44 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + }, + { + "filename": "0064.png", + "frame": { "x": 215, "y": 89, "w": 71, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 71, "h": 43 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + }, + { + "filename": "0065.png", + "frame": { "x": 144, "y": 45, "w": 73, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 73, "h": 43 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + }, + { + "filename": "0066.png", + "frame": { "x": 288, "y": 45, "w": 74, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 74, "h": 42 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + }, + { + "filename": "0067.png", + "frame": { "x": 215, "y": 172, "w": 73, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 4, "w": 73, "h": 40 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + }, + { + "filename": "0068.png", + "frame": { "x": 1, "y": 130, "w": 74, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 4, "w": 74, "h": 40 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + }, + { + "filename": "0069.png", + "frame": { "x": 288, "y": 209, "w": 73, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 4, "w": 73, "h": 40 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + }, + { + "filename": "0070.png", + "frame": { "x": 361, "y": 209, "w": 73, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 4, "w": 73, "h": 40 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + }, + { + "filename": "0071.png", + "frame": { "x": 1, "y": 210, "w": 72, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 4, "w": 72, "h": 40 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + }, + { + "filename": "0072.png", + "frame": { "x": 1, "y": 250, "w": 72, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 4, "w": 72, "h": 39 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + }, + { + "filename": "0073.png", + "frame": { "x": 210, "y": 253, "w": 71, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 4, "w": 71, "h": 39 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + }, + { + "filename": "0074.png", + "frame": { "x": 215, "y": 132, "w": 71, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 4, "w": 71, "h": 40 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + }, + { + "filename": "0075.png", + "frame": { "x": 348, "y": 249, "w": 69, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 3, "w": 69, "h": 41 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + }, + { + "filename": "0076.png", + "frame": { "x": 147, "y": 131, "w": 68, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 16, "y": 2, "w": 68, "h": 43 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + }, + { + "filename": "0077.png", + "frame": { "x": 147, "y": 174, "w": 66, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 18, "y": 1, "w": 66, "h": 44 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + }, + { + "filename": "0078.png", + "frame": { "x": 283, "y": 249, "w": 65, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 19, "y": 1, "w": 65, "h": 44 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + }, + { + "filename": "0079.png", + "frame": { "x": 434, "y": 209, "w": 67, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 17, "y": 2, "w": 67, "h": 43 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + }, + { + "filename": "0080.png", + "frame": { "x": 417, "y": 252, "w": 68, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 15, "y": 3, "w": 68, "h": 41 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + }, + { + "filename": "0081.png", + "frame": { "x": 213, "y": 212, "w": 70, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 3, "w": 70, "h": 41 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + }, + { + "filename": "0082.png", + "frame": { "x": 1, "y": 90, "w": 70, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 4, "w": 70, "h": 39 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + }, + { + "filename": "0083.png", + "frame": { "x": 73, "y": 252, "w": 72, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 4, "w": 72, "h": 39 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + }, + { + "filename": "0084.png", + "frame": { "x": 73, "y": 212, "w": 72, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 4, "w": 72, "h": 40 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + }, + { + "filename": "0085.png", + "frame": { "x": 75, "y": 131, "w": 72, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 4, "w": 72, "h": 41 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + }, + { + "filename": "0086.png", + "frame": { "x": 286, "y": 131, "w": 72, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 4, "w": 72, "h": 41 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + }, + { + "filename": "0087.png", + "frame": { "x": 71, "y": 88, "w": 73, "h": 42 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 4, "w": 73, "h": 42 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + }, + { + "filename": "0088.png", + "frame": { "x": 71, "y": 45, "w": 73, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 3, "w": 73, "h": 43 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + }, + { + "filename": "0089.png", + "frame": { "x": 225, "y": 1, "w": 73, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 2, "w": 73, "h": 44 }, + "sourceSize": { "w": 84, "h": 46 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.13-x64", + "image": "2075.png", + "format": "I8", + "size": { "w": 517, "h": 294 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/shiny/2075.png b/public/images/pokemon/exp/shiny/2075.png index 952acfb9d6c..212e4b011df 100644 Binary files a/public/images/pokemon/exp/shiny/2075.png and b/public/images/pokemon/exp/shiny/2075.png differ diff --git a/public/images/pokemon/exp/shiny/2076.json b/public/images/pokemon/exp/shiny/2076.json index 916f50ab286..7cc16fe2ae8 100644 --- a/public/images/pokemon/exp/shiny/2076.json +++ b/public/images/pokemon/exp/shiny/2076.json @@ -1,272 +1,965 @@ -{ - "textures": [ - { - "image": "2076.png", - "format": "RGBA8888", - "size": { - "w": 204, - "h": 204 - }, - "scale": 1, - "frames": [ - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 73 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 60, - "h": 73 - }, - "frame": { - "x": 0, - "y": 0, - "w": 60, - "h": 73 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 73 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 60, - "h": 73 - }, - "frame": { - "x": 0, - "y": 0, - "w": 60, - "h": 73 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 73 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 58, - "h": 73 - }, - "frame": { - "x": 0, - "y": 73, - "w": 58, - "h": 73 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 73 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 58, - "h": 73 - }, - "frame": { - "x": 0, - "y": 73, - "w": 58, - "h": 73 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 73 - }, - "spriteSourceSize": { - "x": 4, - "y": 0, - "w": 58, - "h": 73 - }, - "frame": { - "x": 58, - "y": 73, - "w": 58, - "h": 73 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 73 - }, - "spriteSourceSize": { - "x": 4, - "y": 0, - "w": 58, - "h": 73 - }, - "frame": { - "x": 58, - "y": 73, - "w": 58, - "h": 73 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 73 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 57, - "h": 73 - }, - "frame": { - "x": 60, - "y": 0, - "w": 57, - "h": 73 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 73 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 56, - "h": 70 - }, - "frame": { - "x": 117, - "y": 0, - "w": 56, - "h": 70 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 73 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 56, - "h": 70 - }, - "frame": { - "x": 117, - "y": 0, - "w": 56, - "h": 70 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 73 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 56, - "h": 68 - }, - "frame": { - "x": 117, - "y": 70, - "w": 56, - "h": 68 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 73 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 56, - "h": 68 - }, - "frame": { - "x": 117, - "y": 70, - "w": 56, - "h": 68 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 73 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 56, - "h": 66 - }, - "frame": { - "x": 116, - "y": 138, - "w": 56, - "h": 66 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:16956bca916a4bb869d1f41d97c30aa8:5d4d8d8dba8a507ca828fc7f08c0c2d9:719cdf7324091edbb7b1d6e2d7254a1a$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 1, "y": 407, "w": 54, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 5, "w": 54, "h": 69 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 166, "y": 343, "w": 54, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 5, "w": 54, "h": 69 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 115, "y": 274, "w": 55, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 55, "h": 69 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 347, "y": 204, "w": 56, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 56, "h": 69 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 116, "y": 205, "w": 56, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 56, "h": 69 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 174, "y": 69, "w": 57, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 57, "h": 69 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 231, "y": 69, "w": 57, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 57, "h": 69 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 59, "y": 204, "w": 57, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 57, "h": 68 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 233, "y": 204, "w": 57, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 57, "h": 68 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 233, "y": 1, "w": 58, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 58, "h": 68 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 117, "y": 1, "w": 58, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 58, "h": 68 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0012.png", + "frame": { "x": 348, "y": 1, "w": 57, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 57, "h": 69 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0013.png", + "frame": { "x": 117, "y": 69, "w": 57, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 57, "h": 69 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0014.png", + "frame": { "x": 170, "y": 274, "w": 55, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 55, "h": 69 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0015.png", + "frame": { "x": 1, "y": 338, "w": 55, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 55, "h": 69 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0016.png", + "frame": { "x": 280, "y": 407, "w": 54, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 5, "w": 54, "h": 69 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0017.png", + "frame": { "x": 1, "y": 407, "w": 54, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 5, "w": 54, "h": 69 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0018.png", + "frame": { "x": 166, "y": 343, "w": 54, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 5, "w": 54, "h": 69 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0019.png", + "frame": { "x": 115, "y": 274, "w": 55, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 55, "h": 69 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0020.png", + "frame": { "x": 347, "y": 204, "w": 56, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 56, "h": 69 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0021.png", + "frame": { "x": 116, "y": 205, "w": 56, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 56, "h": 69 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0022.png", + "frame": { "x": 174, "y": 69, "w": 57, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 57, "h": 69 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0023.png", + "frame": { "x": 231, "y": 69, "w": 57, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 57, "h": 69 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0024.png", + "frame": { "x": 59, "y": 204, "w": 57, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 57, "h": 68 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0025.png", + "frame": { "x": 233, "y": 204, "w": 57, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 57, "h": 68 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0026.png", + "frame": { "x": 233, "y": 1, "w": 58, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 58, "h": 68 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0027.png", + "frame": { "x": 117, "y": 1, "w": 58, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 58, "h": 68 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0028.png", + "frame": { "x": 348, "y": 1, "w": 57, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 57, "h": 69 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0029.png", + "frame": { "x": 117, "y": 69, "w": 57, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 57, "h": 69 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0030.png", + "frame": { "x": 170, "y": 274, "w": 55, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 55, "h": 69 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0031.png", + "frame": { "x": 1, "y": 338, "w": 55, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 55, "h": 69 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0032.png", + "frame": { "x": 280, "y": 407, "w": 54, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 5, "w": 54, "h": 69 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0033.png", + "frame": { "x": 1, "y": 407, "w": 54, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 5, "w": 54, "h": 69 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0034.png", + "frame": { "x": 166, "y": 343, "w": 54, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 5, "w": 54, "h": 69 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0035.png", + "frame": { "x": 115, "y": 274, "w": 55, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 55, "h": 69 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0036.png", + "frame": { "x": 347, "y": 204, "w": 56, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 56, "h": 69 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0037.png", + "frame": { "x": 116, "y": 205, "w": 56, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 56, "h": 69 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0038.png", + "frame": { "x": 174, "y": 69, "w": 57, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 57, "h": 69 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0039.png", + "frame": { "x": 231, "y": 69, "w": 57, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 57, "h": 69 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0040.png", + "frame": { "x": 59, "y": 204, "w": 57, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 57, "h": 68 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0041.png", + "frame": { "x": 233, "y": 204, "w": 57, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 57, "h": 68 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0042.png", + "frame": { "x": 233, "y": 1, "w": 58, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 58, "h": 68 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0043.png", + "frame": { "x": 117, "y": 1, "w": 58, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 58, "h": 68 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0044.png", + "frame": { "x": 348, "y": 1, "w": 57, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 57, "h": 69 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0045.png", + "frame": { "x": 117, "y": 69, "w": 57, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 57, "h": 69 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0046.png", + "frame": { "x": 170, "y": 274, "w": 55, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 55, "h": 69 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0047.png", + "frame": { "x": 1, "y": 338, "w": 55, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 55, "h": 69 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0048.png", + "frame": { "x": 280, "y": 407, "w": 54, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 5, "w": 54, "h": 69 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0049.png", + "frame": { "x": 1, "y": 407, "w": 54, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 5, "w": 54, "h": 69 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0050.png", + "frame": { "x": 166, "y": 343, "w": 54, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 5, "w": 54, "h": 69 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0051.png", + "frame": { "x": 115, "y": 274, "w": 55, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 55, "h": 69 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0052.png", + "frame": { "x": 347, "y": 204, "w": 56, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 56, "h": 69 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0053.png", + "frame": { "x": 116, "y": 205, "w": 56, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 56, "h": 69 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0054.png", + "frame": { "x": 174, "y": 69, "w": 57, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 57, "h": 69 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0055.png", + "frame": { "x": 231, "y": 69, "w": 57, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 57, "h": 69 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0056.png", + "frame": { "x": 59, "y": 204, "w": 57, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 57, "h": 68 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0057.png", + "frame": { "x": 233, "y": 204, "w": 57, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 57, "h": 68 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0058.png", + "frame": { "x": 233, "y": 1, "w": 58, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 58, "h": 68 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0059.png", + "frame": { "x": 117, "y": 1, "w": 58, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 58, "h": 68 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0060.png", + "frame": { "x": 348, "y": 1, "w": 57, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 57, "h": 69 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0061.png", + "frame": { "x": 117, "y": 69, "w": 57, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 57, "h": 69 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0062.png", + "frame": { "x": 170, "y": 274, "w": 55, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 55, "h": 69 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0063.png", + "frame": { "x": 1, "y": 338, "w": 55, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 55, "h": 69 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0064.png", + "frame": { "x": 280, "y": 407, "w": 54, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 5, "w": 54, "h": 69 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0065.png", + "frame": { "x": 55, "y": 408, "w": 54, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 5, "w": 54, "h": 69 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0066.png", + "frame": { "x": 172, "y": 205, "w": 56, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 56, "h": 69 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0067.png", + "frame": { "x": 288, "y": 70, "w": 58, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 58, "h": 67 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0068.png", + "frame": { "x": 59, "y": 1, "w": 58, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 58, "h": 69 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0069.png", + "frame": { "x": 280, "y": 340, "w": 56, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 56, "h": 67 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0070.png", + "frame": { "x": 109, "y": 411, "w": 53, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 7, "w": 53, "h": 67 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0071.png", + "frame": { "x": 220, "y": 409, "w": 54, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 5, "w": 54, "h": 69 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0072.png", + "frame": { "x": 225, "y": 340, "w": 55, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 5, "w": 55, "h": 69 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0073.png", + "frame": { "x": 56, "y": 339, "w": 55, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 5, "w": 55, "h": 69 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0074.png", + "frame": { "x": 291, "y": 1, "w": 57, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 57, "h": 69 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0075.png", + "frame": { "x": 1, "y": 1, "w": 58, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 58, "h": 69 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0076.png", + "frame": { "x": 290, "y": 204, "w": 57, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 6, "w": 57, "h": 68 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0077.png", + "frame": { "x": 175, "y": 1, "w": 58, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 58, "h": 68 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0078.png", + "frame": { "x": 346, "y": 70, "w": 58, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 7, "w": 58, "h": 67 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0079.png", + "frame": { "x": 346, "y": 70, "w": 58, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 7, "w": 58, "h": 67 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0080.png", + "frame": { "x": 1, "y": 137, "w": 58, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 7, "w": 58, "h": 67 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0081.png", + "frame": { "x": 1, "y": 137, "w": 58, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 7, "w": 58, "h": 67 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0082.png", + "frame": { "x": 59, "y": 137, "w": 58, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 7, "w": 58, "h": 67 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0083.png", + "frame": { "x": 59, "y": 137, "w": 58, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 7, "w": 58, "h": 67 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0084.png", + "frame": { "x": 288, "y": 137, "w": 58, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 7, "w": 58, "h": 67 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0085.png", + "frame": { "x": 288, "y": 137, "w": 58, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 7, "w": 58, "h": 67 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0086.png", + "frame": { "x": 346, "y": 137, "w": 58, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 7, "w": 58, "h": 67 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0087.png", + "frame": { "x": 346, "y": 137, "w": 58, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 7, "w": 58, "h": 67 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0088.png", + "frame": { "x": 346, "y": 137, "w": 58, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 7, "w": 58, "h": 67 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0089.png", + "frame": { "x": 117, "y": 138, "w": 58, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 7, "w": 58, "h": 67 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0090.png", + "frame": { "x": 175, "y": 138, "w": 58, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 7, "w": 58, "h": 67 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0091.png", + "frame": { "x": 1, "y": 204, "w": 58, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 7, "w": 58, "h": 67 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0092.png", + "frame": { "x": 1, "y": 70, "w": 58, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 7, "w": 58, "h": 67 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0093.png", + "frame": { "x": 1, "y": 204, "w": 58, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 7, "w": 58, "h": 67 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0094.png", + "frame": { "x": 1, "y": 70, "w": 58, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 7, "w": 58, "h": 67 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0095.png", + "frame": { "x": 1, "y": 204, "w": 58, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 7, "w": 58, "h": 67 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0096.png", + "frame": { "x": 1, "y": 70, "w": 58, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 7, "w": 58, "h": 67 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0097.png", + "frame": { "x": 1, "y": 204, "w": 58, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 7, "w": 58, "h": 67 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0098.png", + "frame": { "x": 59, "y": 70, "w": 58, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 7, "w": 58, "h": 67 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0099.png", + "frame": { "x": 1, "y": 271, "w": 57, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 7, "w": 57, "h": 67 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0100.png", + "frame": { "x": 58, "y": 272, "w": 57, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 7, "w": 57, "h": 67 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0101.png", + "frame": { "x": 228, "y": 272, "w": 56, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 6, "w": 56, "h": 68 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0102.png", + "frame": { "x": 284, "y": 272, "w": 56, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 6, "w": 56, "h": 68 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0103.png", + "frame": { "x": 340, "y": 273, "w": 56, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 6, "w": 56, "h": 68 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0104.png", + "frame": { "x": 336, "y": 341, "w": 55, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 55, "h": 68 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0105.png", + "frame": { "x": 111, "y": 343, "w": 55, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 55, "h": 68 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + }, + { + "filename": "0106.png", + "frame": { "x": 334, "y": 409, "w": 54, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 6, "w": 54, "h": 68 }, + "sourceSize": { "w": 61, "h": 74 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.13-x64", + "image": "2076.png", + "format": "I8", + "size": { "w": 406, "h": 479 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/shiny/2076.png b/public/images/pokemon/exp/shiny/2076.png index c5a245e18d2..d98bf81cead 100644 Binary files a/public/images/pokemon/exp/shiny/2076.png and b/public/images/pokemon/exp/shiny/2076.png differ diff --git a/public/images/pokemon/exp/shiny/2088.json b/public/images/pokemon/exp/shiny/2088.json index 30a33724ef6..3dc69f1024c 100644 --- a/public/images/pokemon/exp/shiny/2088.json +++ b/public/images/pokemon/exp/shiny/2088.json @@ -1,272 +1,173 @@ -{ - "textures": [ - { - "image": "2088.png", - "format": "RGBA8888", - "size": { - "w": 114, - "h": 114 - }, - "scale": 1, - "frames": [ - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 60, - "h": 37 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 60, - "h": 36 - }, - "frame": { - "x": 0, - "y": 0, - "w": 60, - "h": 36 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 60, - "h": 37 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 60, - "h": 36 - }, - "frame": { - "x": 0, - "y": 0, - "w": 60, - "h": 36 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 60, - "h": 37 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 60, - "h": 36 - }, - "frame": { - "x": 0, - "y": 0, - "w": 60, - "h": 36 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 60, - "h": 37 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 60, - "h": 36 - }, - "frame": { - "x": 0, - "y": 0, - "w": 60, - "h": 36 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 60, - "h": 37 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 58, - "h": 37 - }, - "frame": { - "x": 0, - "y": 36, - "w": 58, - "h": 37 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 60, - "h": 37 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 58, - "h": 37 - }, - "frame": { - "x": 0, - "y": 36, - "w": 58, - "h": 37 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 60, - "h": 37 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 58, - "h": 37 - }, - "frame": { - "x": 0, - "y": 36, - "w": 58, - "h": 37 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 60, - "h": 37 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 58, - "h": 37 - }, - "frame": { - "x": 0, - "y": 36, - "w": 58, - "h": 37 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 60, - "h": 37 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 56, - "h": 37 - }, - "frame": { - "x": 58, - "y": 36, - "w": 56, - "h": 37 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 60, - "h": 37 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 56, - "h": 37 - }, - "frame": { - "x": 58, - "y": 36, - "w": 56, - "h": 37 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 60, - "h": 37 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 60, - "h": 35 - }, - "frame": { - "x": 0, - "y": 73, - "w": 60, - "h": 35 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 60, - "h": 37 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 60, - "h": 35 - }, - "frame": { - "x": 0, - "y": 73, - "w": 60, - "h": 35 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:42001773997f63bbe00b9d4da8df4959:1a203471d110b19654220aaa601645a0:b8df8f168871505f42fdc6d3c5b106f0$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 53, "y": 114, "w": 51, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 51, "h": 40 }, + "sourceSize": { "w": 61, "h": 40 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 231, "y": 75, "w": 52, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 52, "h": 40 }, + "sourceSize": { "w": 61, "h": 40 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 111, "y": 79, "w": 53, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 53, "h": 39 }, + "sourceSize": { "w": 61, "h": 40 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 57, "y": 75, "w": 54, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 54, "h": 39 }, + "sourceSize": { "w": 61, "h": 40 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 234, "y": 36, "w": 56, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 56, "h": 39 }, + "sourceSize": { "w": 61, "h": 40 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 0, "y": 75, "w": 57, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 57, "h": 37 }, + "sourceSize": { "w": 61, "h": 40 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 59, "y": 38, "w": 58, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 3, "w": 58, "h": 37 }, + "sourceSize": { "w": 61, "h": 40 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 0, "y": 38, "w": 59, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 3, "w": 59, "h": 37 }, + "sourceSize": { "w": 61, "h": 40 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 234, "y": 0, "w": 61, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 61, "h": 36 }, + "sourceSize": { "w": 61, "h": 40 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 0, "y": 0, "w": 60, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 60, "h": 38 }, + "sourceSize": { "w": 61, "h": 40 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 60, "y": 0, "w": 59, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 59, "h": 38 }, + "sourceSize": { "w": 61, "h": 40 }, + "duration": 100 + }, + { + "filename": "0012.png", + "frame": { "x": 176, "y": 0, "w": 58, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 58, "h": 38 }, + "sourceSize": { "w": 61, "h": 40 }, + "duration": 100 + }, + { + "filename": "0013.png", + "frame": { "x": 119, "y": 0, "w": 57, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 1, "w": 57, "h": 39 }, + "sourceSize": { "w": 61, "h": 40 }, + "duration": 100 + }, + { + "filename": "0014.png", + "frame": { "x": 176, "y": 38, "w": 55, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 55, "h": 39 }, + "sourceSize": { "w": 61, "h": 40 }, + "duration": 100 + }, + { + "filename": "0015.png", + "frame": { "x": 0, "y": 112, "w": 53, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 53, "h": 39 }, + "sourceSize": { "w": 61, "h": 40 }, + "duration": 100 + }, + { + "filename": "0016.png", + "frame": { "x": 117, "y": 39, "w": 53, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 53, "h": 40 }, + "sourceSize": { "w": 61, "h": 40 }, + "duration": 100 + }, + { + "filename": "0017.png", + "frame": { "x": 170, "y": 77, "w": 52, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 52, "h": 40 }, + "sourceSize": { "w": 61, "h": 40 }, + "duration": 100 + }, + { + "filename": "0018.png", + "frame": { "x": 222, "y": 115, "w": 51, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 51, "h": 40 }, + "sourceSize": { "w": 61, "h": 40 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.13-x64", + "image": "2088.png", + "format": "I8", + "size": { "w": 295, "h": 155 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/shiny/2088.png b/public/images/pokemon/exp/shiny/2088.png index e8398a98c6e..5cccf0c0252 100644 Binary files a/public/images/pokemon/exp/shiny/2088.png and b/public/images/pokemon/exp/shiny/2088.png differ diff --git a/public/images/pokemon/exp/shiny/2089.json b/public/images/pokemon/exp/shiny/2089.json index c53c0ff8f49..3f8b618af75 100644 --- a/public/images/pokemon/exp/shiny/2089.json +++ b/public/images/pokemon/exp/shiny/2089.json @@ -1,1343 +1,1091 @@ -{ - "textures": [ - { - "image": "2089.png", - "format": "RGBA8888", - "size": { - "w": 349, - "h": 349 - }, - "scale": 1, - "frames": [ - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 67 - }, - "spriteSourceSize": { - "x": 2, - "y": 8, - "w": 94, - "h": 58 - }, - "frame": { - "x": 0, - "y": 0, - "w": 94, - "h": 58 - } - }, - { - "filename": "0017.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 67 - }, - "spriteSourceSize": { - "x": 2, - "y": 8, - "w": 94, - "h": 58 - }, - "frame": { - "x": 0, - "y": 0, - "w": 94, - "h": 58 - } - }, - { - "filename": "0030.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 67 - }, - "spriteSourceSize": { - "x": 2, - "y": 8, - "w": 94, - "h": 58 - }, - "frame": { - "x": 0, - "y": 0, - "w": 94, - "h": 58 - } - }, - { - "filename": "0043.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 67 - }, - "spriteSourceSize": { - "x": 2, - "y": 8, - "w": 94, - "h": 58 - }, - "frame": { - "x": 0, - "y": 0, - "w": 94, - "h": 58 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 67 - }, - "spriteSourceSize": { - "x": 1, - "y": 6, - "w": 92, - "h": 60 - }, - "frame": { - "x": 94, - "y": 0, - "w": 92, - "h": 60 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 67 - }, - "spriteSourceSize": { - "x": 1, - "y": 6, - "w": 92, - "h": 60 - }, - "frame": { - "x": 94, - "y": 0, - "w": 92, - "h": 60 - } - }, - { - "filename": "0029.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 67 - }, - "spriteSourceSize": { - "x": 1, - "y": 6, - "w": 92, - "h": 60 - }, - "frame": { - "x": 94, - "y": 0, - "w": 92, - "h": 60 - } - }, - { - "filename": "0042.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 67 - }, - "spriteSourceSize": { - "x": 1, - "y": 6, - "w": 92, - "h": 60 - }, - "frame": { - "x": 94, - "y": 0, - "w": 92, - "h": 60 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 67 - }, - "spriteSourceSize": { - "x": 4, - "y": 5, - "w": 91, - "h": 61 - }, - "frame": { - "x": 0, - "y": 58, - "w": 91, - "h": 61 - } - }, - { - "filename": "0018.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 67 - }, - "spriteSourceSize": { - "x": 4, - "y": 5, - "w": 91, - "h": 61 - }, - "frame": { - "x": 0, - "y": 58, - "w": 91, - "h": 61 - } - }, - { - "filename": "0031.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 67 - }, - "spriteSourceSize": { - "x": 4, - "y": 5, - "w": 91, - "h": 61 - }, - "frame": { - "x": 0, - "y": 58, - "w": 91, - "h": 61 - } - }, - { - "filename": "0044.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 67 - }, - "spriteSourceSize": { - "x": 4, - "y": 5, - "w": 91, - "h": 61 - }, - "frame": { - "x": 0, - "y": 58, - "w": 91, - "h": 61 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 67 - }, - "spriteSourceSize": { - "x": 2, - "y": 4, - "w": 90, - "h": 63 - }, - "frame": { - "x": 186, - "y": 0, - "w": 90, - "h": 63 - } - }, - { - "filename": "0019.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 67 - }, - "spriteSourceSize": { - "x": 2, - "y": 4, - "w": 90, - "h": 63 - }, - "frame": { - "x": 186, - "y": 0, - "w": 90, - "h": 63 - } - }, - { - "filename": "0032.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 67 - }, - "spriteSourceSize": { - "x": 2, - "y": 4, - "w": 90, - "h": 63 - }, - "frame": { - "x": 186, - "y": 0, - "w": 90, - "h": 63 - } - }, - { - "filename": "0045.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 67 - }, - "spriteSourceSize": { - "x": 2, - "y": 4, - "w": 90, - "h": 63 - }, - "frame": { - "x": 186, - "y": 0, - "w": 90, - "h": 63 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 67 - }, - "spriteSourceSize": { - "x": 1, - "y": 5, - "w": 90, - "h": 61 - }, - "frame": { - "x": 91, - "y": 60, - "w": 90, - "h": 61 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 67 - }, - "spriteSourceSize": { - "x": 1, - "y": 5, - "w": 90, - "h": 61 - }, - "frame": { - "x": 91, - "y": 60, - "w": 90, - "h": 61 - } - }, - { - "filename": "0028.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 67 - }, - "spriteSourceSize": { - "x": 1, - "y": 5, - "w": 90, - "h": 61 - }, - "frame": { - "x": 91, - "y": 60, - "w": 90, - "h": 61 - } - }, - { - "filename": "0041.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 67 - }, - "spriteSourceSize": { - "x": 1, - "y": 5, - "w": 90, - "h": 61 - }, - "frame": { - "x": 91, - "y": 60, - "w": 90, - "h": 61 - } - }, - { - "filename": "0058.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 67 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 89, - "h": 60 - }, - "frame": { - "x": 0, - "y": 119, - "w": 89, - "h": 60 - } - }, - { - "filename": "0057.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 67 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 89, - "h": 59 - }, - "frame": { - "x": 181, - "y": 63, - "w": 89, - "h": 59 - } - }, - { - "filename": "0059.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 67 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 89, - "h": 59 - }, - "frame": { - "x": 181, - "y": 63, - "w": 89, - "h": 59 - } - }, - { - "filename": "0055.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 67 - }, - "spriteSourceSize": { - "x": 0, - "y": 8, - "w": 89, - "h": 58 - }, - "frame": { - "x": 89, - "y": 121, - "w": 89, - "h": 58 - } - }, - { - "filename": "0061.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 67 - }, - "spriteSourceSize": { - "x": 0, - "y": 8, - "w": 89, - "h": 58 - }, - "frame": { - "x": 89, - "y": 121, - "w": 89, - "h": 58 - } - }, - { - "filename": "0056.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 67 - }, - "spriteSourceSize": { - "x": 0, - "y": 8, - "w": 89, - "h": 58 - }, - "frame": { - "x": 178, - "y": 122, - "w": 89, - "h": 58 - } - }, - { - "filename": "0060.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 67 - }, - "spriteSourceSize": { - "x": 0, - "y": 8, - "w": 89, - "h": 58 - }, - "frame": { - "x": 178, - "y": 122, - "w": 89, - "h": 58 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 67 - }, - "spriteSourceSize": { - "x": 3, - "y": 2, - "w": 82, - "h": 64 - }, - "frame": { - "x": 267, - "y": 122, - "w": 82, - "h": 64 - } - }, - { - "filename": "0024.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 67 - }, - "spriteSourceSize": { - "x": 3, - "y": 2, - "w": 82, - "h": 64 - }, - "frame": { - "x": 267, - "y": 122, - "w": 82, - "h": 64 - } - }, - { - "filename": "0037.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 67 - }, - "spriteSourceSize": { - "x": 3, - "y": 2, - "w": 82, - "h": 64 - }, - "frame": { - "x": 267, - "y": 122, - "w": 82, - "h": 64 - } - }, - { - "filename": "0050.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 67 - }, - "spriteSourceSize": { - "x": 3, - "y": 2, - "w": 82, - "h": 64 - }, - "frame": { - "x": 267, - "y": 122, - "w": 82, - "h": 64 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 67 - }, - "spriteSourceSize": { - "x": 2, - "y": 2, - "w": 88, - "h": 65 - }, - "frame": { - "x": 0, - "y": 179, - "w": 88, - "h": 65 - } - }, - { - "filename": "0020.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 67 - }, - "spriteSourceSize": { - "x": 2, - "y": 2, - "w": 88, - "h": 65 - }, - "frame": { - "x": 0, - "y": 179, - "w": 88, - "h": 65 - } - }, - { - "filename": "0033.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 67 - }, - "spriteSourceSize": { - "x": 2, - "y": 2, - "w": 88, - "h": 65 - }, - "frame": { - "x": 0, - "y": 179, - "w": 88, - "h": 65 - } - }, - { - "filename": "0046.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 67 - }, - "spriteSourceSize": { - "x": 2, - "y": 2, - "w": 88, - "h": 65 - }, - "frame": { - "x": 0, - "y": 179, - "w": 88, - "h": 65 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 67 - }, - "spriteSourceSize": { - "x": 1, - "y": 5, - "w": 88, - "h": 61 - }, - "frame": { - "x": 88, - "y": 179, - "w": 88, - "h": 61 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 67 - }, - "spriteSourceSize": { - "x": 1, - "y": 5, - "w": 88, - "h": 61 - }, - "frame": { - "x": 88, - "y": 179, - "w": 88, - "h": 61 - } - }, - { - "filename": "0027.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 67 - }, - "spriteSourceSize": { - "x": 1, - "y": 5, - "w": 88, - "h": 61 - }, - "frame": { - "x": 88, - "y": 179, - "w": 88, - "h": 61 - } - }, - { - "filename": "0040.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 67 - }, - "spriteSourceSize": { - "x": 1, - "y": 5, - "w": 88, - "h": 61 - }, - "frame": { - "x": 88, - "y": 179, - "w": 88, - "h": 61 - } - }, - { - "filename": "0053.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 67 - }, - "spriteSourceSize": { - "x": 1, - "y": 5, - "w": 88, - "h": 61 - }, - "frame": { - "x": 88, - "y": 179, - "w": 88, - "h": 61 - } - }, - { - "filename": "0063.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 67 - }, - "spriteSourceSize": { - "x": 1, - "y": 5, - "w": 88, - "h": 61 - }, - "frame": { - "x": 88, - "y": 179, - "w": 88, - "h": 61 - } - }, - { - "filename": "0054.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 67 - }, - "spriteSourceSize": { - "x": 1, - "y": 6, - "w": 88, - "h": 60 - }, - "frame": { - "x": 176, - "y": 180, - "w": 88, - "h": 60 - } - }, - { - "filename": "0062.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 67 - }, - "spriteSourceSize": { - "x": 1, - "y": 6, - "w": 88, - "h": 60 - }, - "frame": { - "x": 176, - "y": 180, - "w": 88, - "h": 60 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 67 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 85, - "h": 67 - }, - "frame": { - "x": 264, - "y": 186, - "w": 85, - "h": 67 - } - }, - { - "filename": "0021.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 67 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 85, - "h": 67 - }, - "frame": { - "x": 264, - "y": 186, - "w": 85, - "h": 67 - } - }, - { - "filename": "0034.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 67 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 85, - "h": 67 - }, - "frame": { - "x": 264, - "y": 186, - "w": 85, - "h": 67 - } - }, - { - "filename": "0047.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 67 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 85, - "h": 67 - }, - "frame": { - "x": 264, - "y": 186, - "w": 85, - "h": 67 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 67 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 83, - "h": 66 - }, - "frame": { - "x": 0, - "y": 253, - "w": 83, - "h": 66 - } - }, - { - "filename": "0022.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 67 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 83, - "h": 66 - }, - "frame": { - "x": 0, - "y": 253, - "w": 83, - "h": 66 - } - }, - { - "filename": "0035.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 67 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 83, - "h": 66 - }, - "frame": { - "x": 0, - "y": 253, - "w": 83, - "h": 66 - } - }, - { - "filename": "0048.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 67 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 83, - "h": 66 - }, - "frame": { - "x": 0, - "y": 253, - "w": 83, - "h": 66 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 67 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 83, - "h": 66 - }, - "frame": { - "x": 83, - "y": 253, - "w": 83, - "h": 66 - } - }, - { - "filename": "0023.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 67 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 83, - "h": 66 - }, - "frame": { - "x": 83, - "y": 253, - "w": 83, - "h": 66 - } - }, - { - "filename": "0036.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 67 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 83, - "h": 66 - }, - "frame": { - "x": 83, - "y": 253, - "w": 83, - "h": 66 - } - }, - { - "filename": "0049.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 67 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 83, - "h": 66 - }, - "frame": { - "x": 83, - "y": 253, - "w": 83, - "h": 66 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 67 - }, - "spriteSourceSize": { - "x": 1, - "y": 4, - "w": 86, - "h": 62 - }, - "frame": { - "x": 166, - "y": 240, - "w": 86, - "h": 62 - } - }, - { - "filename": "0026.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 67 - }, - "spriteSourceSize": { - "x": 1, - "y": 4, - "w": 86, - "h": 62 - }, - "frame": { - "x": 166, - "y": 240, - "w": 86, - "h": 62 - } - }, - { - "filename": "0039.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 67 - }, - "spriteSourceSize": { - "x": 1, - "y": 4, - "w": 86, - "h": 62 - }, - "frame": { - "x": 166, - "y": 240, - "w": 86, - "h": 62 - } - }, - { - "filename": "0052.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 67 - }, - "spriteSourceSize": { - "x": 1, - "y": 4, - "w": 86, - "h": 62 - }, - "frame": { - "x": 166, - "y": 240, - "w": 86, - "h": 62 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 67 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 84, - "h": 63 - }, - "frame": { - "x": 252, - "y": 253, - "w": 84, - "h": 63 - } - }, - { - "filename": "0025.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 67 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 84, - "h": 63 - }, - "frame": { - "x": 252, - "y": 253, - "w": 84, - "h": 63 - } - }, - { - "filename": "0038.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 67 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 84, - "h": 63 - }, - "frame": { - "x": 252, - "y": 253, - "w": 84, - "h": 63 - } - }, - { - "filename": "0051.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 67 - }, - "spriteSourceSize": { - "x": 1, - "y": 3, - "w": 84, - "h": 63 - }, - "frame": { - "x": 252, - "y": 253, - "w": 84, - "h": 63 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:b372c992d91a52f723e195aa1fcf78ac:c1ffaccbd50e04a0e556b97d65b611ee:49ee9ed0dd32c5ba33977741b45fc3f4$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 463, "y": 58, "w": 73, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 73, "h": 64 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 536, "y": 58, "w": 73, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 73, "h": 64 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 151, "y": 61, "w": 73, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 73, "h": 64 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 370, "y": 61, "w": 75, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 75, "h": 62 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 236, "y": 125, "w": 76, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 76, "h": 61 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 1, "y": 183, "w": 77, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 77, "h": 60 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 151, "y": 1, "w": 78, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 78, "h": 60 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 76, "y": 125, "w": 80, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 80, "h": 58 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 540, "y": 238, "w": 81, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 7, "w": 81, "h": 57 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 463, "y": 1, "w": 82, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 7, "w": 82, "h": 57 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 445, "y": 122, "w": 83, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 8, "w": 83, "h": 56 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0012.png", + "frame": { "x": 499, "y": 295, "w": 83, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 9, "w": 83, "h": 55 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0013.png", + "frame": { "x": 333, "y": 295, "w": 83, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 9, "w": 83, "h": 55 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0014.png", + "frame": { "x": 250, "y": 295, "w": 83, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 9, "w": 83, "h": 55 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0015.png", + "frame": { "x": 167, "y": 243, "w": 83, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 9, "w": 83, "h": 55 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0016.png", + "frame": { "x": 84, "y": 243, "w": 83, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 9, "w": 83, "h": 55 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0017.png", + "frame": { "x": 1, "y": 243, "w": 83, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 9, "w": 83, "h": 55 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0018.png", + "frame": { "x": 321, "y": 239, "w": 82, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 8, "w": 82, "h": 56 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0019.png", + "frame": { "x": 78, "y": 183, "w": 81, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 7, "w": 81, "h": 57 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0020.png", + "frame": { "x": 250, "y": 350, "w": 80, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 7, "w": 80, "h": 57 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0021.png", + "frame": { "x": 488, "y": 350, "w": 78, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 6, "w": 78, "h": 58 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0022.png", + "frame": { "x": 385, "y": 1, "w": 78, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 78, "h": 60 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0023.png", + "frame": { "x": 312, "y": 125, "w": 76, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 76, "h": 61 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0024.png", + "frame": { "x": 76, "y": 1, "w": 75, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 75, "h": 63 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0025.png", + "frame": { "x": 463, "y": 58, "w": 73, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 73, "h": 64 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0026.png", + "frame": { "x": 536, "y": 58, "w": 73, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 73, "h": 64 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0027.png", + "frame": { "x": 151, "y": 61, "w": 73, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 73, "h": 64 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0028.png", + "frame": { "x": 370, "y": 61, "w": 75, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 75, "h": 62 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0029.png", + "frame": { "x": 236, "y": 125, "w": 76, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 76, "h": 61 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0030.png", + "frame": { "x": 1, "y": 183, "w": 77, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 77, "h": 60 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0031.png", + "frame": { "x": 151, "y": 1, "w": 78, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 78, "h": 60 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0032.png", + "frame": { "x": 76, "y": 125, "w": 80, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 80, "h": 58 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0033.png", + "frame": { "x": 540, "y": 238, "w": 81, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 7, "w": 81, "h": 57 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0034.png", + "frame": { "x": 463, "y": 1, "w": 82, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 7, "w": 82, "h": 57 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0035.png", + "frame": { "x": 445, "y": 122, "w": 83, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 8, "w": 83, "h": 56 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0036.png", + "frame": { "x": 499, "y": 295, "w": 83, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 9, "w": 83, "h": 55 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0037.png", + "frame": { "x": 333, "y": 295, "w": 83, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 9, "w": 83, "h": 55 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0038.png", + "frame": { "x": 250, "y": 295, "w": 83, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 9, "w": 83, "h": 55 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0039.png", + "frame": { "x": 167, "y": 243, "w": 83, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 9, "w": 83, "h": 55 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0040.png", + "frame": { "x": 84, "y": 243, "w": 83, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 9, "w": 83, "h": 55 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0041.png", + "frame": { "x": 1, "y": 243, "w": 83, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 9, "w": 83, "h": 55 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0042.png", + "frame": { "x": 321, "y": 239, "w": 82, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 8, "w": 82, "h": 56 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0043.png", + "frame": { "x": 78, "y": 183, "w": 81, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 7, "w": 81, "h": 57 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0044.png", + "frame": { "x": 250, "y": 350, "w": 80, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 7, "w": 80, "h": 57 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0045.png", + "frame": { "x": 488, "y": 350, "w": 78, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 6, "w": 78, "h": 58 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0046.png", + "frame": { "x": 385, "y": 1, "w": 78, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 78, "h": 60 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0047.png", + "frame": { "x": 312, "y": 125, "w": 76, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 76, "h": 61 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0048.png", + "frame": { "x": 76, "y": 1, "w": 75, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 75, "h": 63 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0049.png", + "frame": { "x": 463, "y": 58, "w": 73, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 73, "h": 64 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0050.png", + "frame": { "x": 536, "y": 58, "w": 73, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 73, "h": 64 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0051.png", + "frame": { "x": 151, "y": 61, "w": 73, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 73, "h": 64 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0052.png", + "frame": { "x": 370, "y": 61, "w": 75, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 75, "h": 62 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0053.png", + "frame": { "x": 236, "y": 125, "w": 76, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 76, "h": 61 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0054.png", + "frame": { "x": 1, "y": 183, "w": 77, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 77, "h": 60 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0055.png", + "frame": { "x": 151, "y": 1, "w": 78, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 78, "h": 60 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0056.png", + "frame": { "x": 76, "y": 125, "w": 80, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 80, "h": 58 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0057.png", + "frame": { "x": 540, "y": 238, "w": 81, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 7, "w": 81, "h": 57 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0058.png", + "frame": { "x": 463, "y": 1, "w": 82, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 7, "w": 82, "h": 57 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0059.png", + "frame": { "x": 445, "y": 122, "w": 83, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 8, "w": 83, "h": 56 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0060.png", + "frame": { "x": 499, "y": 295, "w": 83, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 9, "w": 83, "h": 55 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0061.png", + "frame": { "x": 333, "y": 295, "w": 83, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 9, "w": 83, "h": 55 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0062.png", + "frame": { "x": 250, "y": 295, "w": 83, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 9, "w": 83, "h": 55 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0063.png", + "frame": { "x": 167, "y": 243, "w": 83, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 9, "w": 83, "h": 55 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0064.png", + "frame": { "x": 84, "y": 243, "w": 83, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 9, "w": 83, "h": 55 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0065.png", + "frame": { "x": 1, "y": 243, "w": 83, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 9, "w": 83, "h": 55 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0066.png", + "frame": { "x": 321, "y": 239, "w": 82, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 8, "w": 82, "h": 56 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0067.png", + "frame": { "x": 78, "y": 183, "w": 81, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 7, "w": 81, "h": 57 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0068.png", + "frame": { "x": 250, "y": 350, "w": 80, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 7, "w": 80, "h": 57 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0069.png", + "frame": { "x": 488, "y": 350, "w": 78, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 6, "w": 78, "h": 58 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0070.png", + "frame": { "x": 385, "y": 1, "w": 78, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 78, "h": 60 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0071.png", + "frame": { "x": 312, "y": 125, "w": 76, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 76, "h": 61 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0072.png", + "frame": { "x": 76, "y": 1, "w": 75, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 75, "h": 63 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0073.png", + "frame": { "x": 463, "y": 58, "w": 73, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 73, "h": 64 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0074.png", + "frame": { "x": 536, "y": 58, "w": 73, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 73, "h": 64 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0075.png", + "frame": { "x": 151, "y": 61, "w": 73, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 73, "h": 64 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0076.png", + "frame": { "x": 370, "y": 61, "w": 75, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 75, "h": 62 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0077.png", + "frame": { "x": 236, "y": 125, "w": 76, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 76, "h": 61 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0078.png", + "frame": { "x": 1, "y": 183, "w": 77, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 77, "h": 60 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0079.png", + "frame": { "x": 151, "y": 1, "w": 78, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 78, "h": 60 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0080.png", + "frame": { "x": 76, "y": 125, "w": 80, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 80, "h": 58 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0081.png", + "frame": { "x": 540, "y": 238, "w": 81, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 7, "w": 81, "h": 57 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0082.png", + "frame": { "x": 463, "y": 1, "w": 82, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 7, "w": 82, "h": 57 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0083.png", + "frame": { "x": 445, "y": 122, "w": 83, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 8, "w": 83, "h": 56 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0084.png", + "frame": { "x": 499, "y": 295, "w": 83, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 9, "w": 83, "h": 55 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0085.png", + "frame": { "x": 333, "y": 295, "w": 83, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 9, "w": 83, "h": 55 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0086.png", + "frame": { "x": 250, "y": 295, "w": 83, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 9, "w": 83, "h": 55 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0087.png", + "frame": { "x": 167, "y": 243, "w": 83, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 9, "w": 83, "h": 55 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0088.png", + "frame": { "x": 84, "y": 243, "w": 83, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 9, "w": 83, "h": 55 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0089.png", + "frame": { "x": 1, "y": 243, "w": 83, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 9, "w": 83, "h": 55 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0090.png", + "frame": { "x": 321, "y": 239, "w": 82, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 8, "w": 82, "h": 56 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0091.png", + "frame": { "x": 78, "y": 183, "w": 81, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 7, "w": 81, "h": 57 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0092.png", + "frame": { "x": 250, "y": 350, "w": 80, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 7, "w": 80, "h": 57 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0093.png", + "frame": { "x": 488, "y": 350, "w": 78, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 6, "w": 78, "h": 58 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0094.png", + "frame": { "x": 385, "y": 1, "w": 78, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 78, "h": 60 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0095.png", + "frame": { "x": 312, "y": 125, "w": 76, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 76, "h": 61 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0096.png", + "frame": { "x": 76, "y": 1, "w": 75, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 75, "h": 63 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0097.png", + "frame": { "x": 463, "y": 58, "w": 73, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 73, "h": 64 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0098.png", + "frame": { "x": 297, "y": 61, "w": 73, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 73, "h": 64 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0099.png", + "frame": { "x": 224, "y": 61, "w": 73, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 0, "w": 73, "h": 64 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0100.png", + "frame": { "x": 1, "y": 64, "w": 75, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 75, "h": 62 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0101.png", + "frame": { "x": 388, "y": 178, "w": 76, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 76, "h": 61 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0102.png", + "frame": { "x": 540, "y": 178, "w": 77, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 77, "h": 60 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0103.png", + "frame": { "x": 307, "y": 1, "w": 78, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 78, "h": 60 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0104.png", + "frame": { "x": 156, "y": 125, "w": 80, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 6, "w": 80, "h": 58 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0105.png", + "frame": { "x": 159, "y": 186, "w": 81, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 7, "w": 81, "h": 57 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0106.png", + "frame": { "x": 545, "y": 1, "w": 82, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 7, "w": 82, "h": 57 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0107.png", + "frame": { "x": 528, "y": 122, "w": 83, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 8, "w": 83, "h": 56 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0108.png", + "frame": { "x": 416, "y": 295, "w": 83, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 9, "w": 83, "h": 55 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0109.png", + "frame": { "x": 333, "y": 295, "w": 83, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 9, "w": 83, "h": 55 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0110.png", + "frame": { "x": 167, "y": 298, "w": 83, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 9, "w": 83, "h": 55 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0111.png", + "frame": { "x": 582, "y": 295, "w": 83, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 9, "w": 83, "h": 55 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0112.png", + "frame": { "x": 1, "y": 298, "w": 83, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 9, "w": 83, "h": 55 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0113.png", + "frame": { "x": 84, "y": 298, "w": 83, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 9, "w": 83, "h": 55 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0114.png", + "frame": { "x": 403, "y": 239, "w": 82, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 8, "w": 82, "h": 56 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0115.png", + "frame": { "x": 240, "y": 186, "w": 81, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 7, "w": 81, "h": 57 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0116.png", + "frame": { "x": 330, "y": 350, "w": 80, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 7, "w": 80, "h": 57 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0117.png", + "frame": { "x": 410, "y": 350, "w": 78, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 6, "w": 78, "h": 58 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0118.png", + "frame": { "x": 229, "y": 1, "w": 78, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 78, "h": 60 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0119.png", + "frame": { "x": 464, "y": 178, "w": 76, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 76, "h": 61 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + }, + { + "filename": "0120.png", + "frame": { "x": 1, "y": 1, "w": 75, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 75, "h": 63 }, + "sourceSize": { "w": 83, "h": 64 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.13-x64", + "image": "2089.png", + "format": "I8", + "size": { "w": 666, "h": 409 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/shiny/2089.png b/public/images/pokemon/exp/shiny/2089.png index f560027e4dd..f60271c3f21 100644 Binary files a/public/images/pokemon/exp/shiny/2089.png and b/public/images/pokemon/exp/shiny/2089.png differ diff --git a/public/images/pokemon/exp/shiny/728.json b/public/images/pokemon/exp/shiny/728.json index 0ba3fa4002d..9bed3c98376 100644 --- a/public/images/pokemon/exp/shiny/728.json +++ b/public/images/pokemon/exp/shiny/728.json @@ -1,1112 +1,775 @@ -{ - "textures": [ - { - "image": "728.png", - "format": "RGBA8888", - "size": { - "w": 165, - "h": 165 - }, - "scale": 1, - "frames": [ - { - "filename": "0039.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 44, - "h": 40 - }, - "frame": { - "x": 0, - "y": 0, - "w": 44, - "h": 40 - } - }, - { - "filename": "0051.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 42 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 44, - "h": 40 - }, - "frame": { - "x": 0, - "y": 0, - "w": 44, - "h": 40 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 42, - "h": 41 - }, - "frame": { - "x": 0, - "y": 40, - "w": 42, - "h": 41 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 42, - "h": 41 - }, - "frame": { - "x": 0, - "y": 40, - "w": 42, - "h": 41 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 42, - "h": 41 - }, - "frame": { - "x": 0, - "y": 40, - "w": 42, - "h": 41 - } - }, - { - "filename": "0024.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 42, - "h": 41 - }, - "frame": { - "x": 0, - "y": 40, - "w": 42, - "h": 41 - } - }, - { - "filename": "0026.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 42, - "h": 41 - }, - "frame": { - "x": 0, - "y": 40, - "w": 42, - "h": 41 - } - }, - { - "filename": "0036.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 42, - "h": 41 - }, - "frame": { - "x": 0, - "y": 40, - "w": 42, - "h": 41 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 42, - "h": 41 - }, - "frame": { - "x": 0, - "y": 81, - "w": 42, - "h": 41 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 42, - "h": 41 - }, - "frame": { - "x": 0, - "y": 81, - "w": 42, - "h": 41 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 42, - "h": 41 - }, - "frame": { - "x": 0, - "y": 81, - "w": 42, - "h": 41 - } - }, - { - "filename": "0023.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 42, - "h": 41 - }, - "frame": { - "x": 0, - "y": 81, - "w": 42, - "h": 41 - } - }, - { - "filename": "0027.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 42, - "h": 41 - }, - "frame": { - "x": 0, - "y": 81, - "w": 42, - "h": 41 - } - }, - { - "filename": "0035.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 42, - "h": 41 - }, - "frame": { - "x": 0, - "y": 81, - "w": 42, - "h": 41 - } - }, - { - "filename": "0040.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 44, - "h": 39 - }, - "frame": { - "x": 44, - "y": 0, - "w": 44, - "h": 39 - } - }, - { - "filename": "0050.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 44, - "h": 39 - }, - "frame": { - "x": 44, - "y": 0, - "w": 44, - "h": 39 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 42, - "h": 40 - }, - "frame": { - "x": 0, - "y": 122, - "w": 42, - "h": 40 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 42, - "h": 40 - }, - "frame": { - "x": 0, - "y": 122, - "w": 42, - "h": 40 - } - }, - { - "filename": "0025.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 42, - "h": 40 - }, - "frame": { - "x": 0, - "y": 122, - "w": 42, - "h": 40 - } - }, - { - "filename": "0037.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 42, - "h": 40 - }, - "frame": { - "x": 0, - "y": 122, - "w": 42, - "h": 40 - } - }, - { - "filename": "0041.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 45, - "h": 37 - }, - "frame": { - "x": 88, - "y": 0, - "w": 45, - "h": 37 - } - }, - { - "filename": "0045.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 45, - "h": 37 - }, - "frame": { - "x": 88, - "y": 0, - "w": 45, - "h": 37 - } - }, - { - "filename": "0049.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 45, - "h": 37 - }, - "frame": { - "x": 88, - "y": 0, - "w": 45, - "h": 37 - } - }, - { - "filename": "0042.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 45, - "h": 37 - }, - "frame": { - "x": 88, - "y": 37, - "w": 45, - "h": 37 - } - }, - { - "filename": "0044.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 45, - "h": 37 - }, - "frame": { - "x": 88, - "y": 37, - "w": 45, - "h": 37 - } - }, - { - "filename": "0046.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 45, - "h": 37 - }, - "frame": { - "x": 88, - "y": 37, - "w": 45, - "h": 37 - } - }, - { - "filename": "0048.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 45, - "h": 37 - }, - "frame": { - "x": 88, - "y": 37, - "w": 45, - "h": 37 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 42, - "h": 40 - }, - "frame": { - "x": 44, - "y": 39, - "w": 42, - "h": 40 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 42, - "h": 40 - }, - "frame": { - "x": 44, - "y": 39, - "w": 42, - "h": 40 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 42, - "h": 40 - }, - "frame": { - "x": 44, - "y": 39, - "w": 42, - "h": 40 - } - }, - { - "filename": "0022.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 42, - "h": 40 - }, - "frame": { - "x": 44, - "y": 39, - "w": 42, - "h": 40 - } - }, - { - "filename": "0028.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 42, - "h": 40 - }, - "frame": { - "x": 44, - "y": 39, - "w": 42, - "h": 40 - } - }, - { - "filename": "0034.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 42, - "h": 40 - }, - "frame": { - "x": 44, - "y": 39, - "w": 42, - "h": 40 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 42, - "h": 40 - }, - "frame": { - "x": 42, - "y": 79, - "w": 42, - "h": 40 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 42, - "h": 40 - }, - "frame": { - "x": 42, - "y": 79, - "w": 42, - "h": 40 - } - }, - { - "filename": "0017.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 42, - "h": 40 - }, - "frame": { - "x": 42, - "y": 79, - "w": 42, - "h": 40 - } - }, - { - "filename": "0021.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 42, - "h": 40 - }, - "frame": { - "x": 42, - "y": 79, - "w": 42, - "h": 40 - } - }, - { - "filename": "0029.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 42, - "h": 40 - }, - "frame": { - "x": 42, - "y": 79, - "w": 42, - "h": 40 - } - }, - { - "filename": "0033.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 42, - "h": 40 - }, - "frame": { - "x": 42, - "y": 79, - "w": 42, - "h": 40 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 42, - "h": 39 - }, - "frame": { - "x": 42, - "y": 119, - "w": 42, - "h": 39 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 42, - "h": 39 - }, - "frame": { - "x": 42, - "y": 119, - "w": 42, - "h": 39 - } - }, - { - "filename": "0018.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 42, - "h": 39 - }, - "frame": { - "x": 42, - "y": 119, - "w": 42, - "h": 39 - } - }, - { - "filename": "0020.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 42, - "h": 39 - }, - "frame": { - "x": 42, - "y": 119, - "w": 42, - "h": 39 - } - }, - { - "filename": "0030.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 42, - "h": 39 - }, - "frame": { - "x": 42, - "y": 119, - "w": 42, - "h": 39 - } - }, - { - "filename": "0032.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 42, - "h": 39 - }, - "frame": { - "x": 42, - "y": 119, - "w": 42, - "h": 39 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 42, - "h": 39 - }, - "frame": { - "x": 86, - "y": 74, - "w": 42, - "h": 39 - } - }, - { - "filename": "0019.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 42, - "h": 39 - }, - "frame": { - "x": 86, - "y": 74, - "w": 42, - "h": 39 - } - }, - { - "filename": "0031.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 42, - "h": 39 - }, - "frame": { - "x": 86, - "y": 74, - "w": 42, - "h": 39 - } - }, - { - "filename": "0038.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 42 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 40, - "h": 40 - }, - "frame": { - "x": 84, - "y": 113, - "w": 40, - "h": 40 - } - }, - { - "filename": "0052.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 42 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 40, - "h": 40 - }, - "frame": { - "x": 84, - "y": 113, - "w": 40, - "h": 40 - } - }, - { - "filename": "0043.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 41, - "h": 37 - }, - "frame": { - "x": 124, - "y": 113, - "w": 41, - "h": 37 - } - }, - { - "filename": "0047.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 42 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 41, - "h": 37 - }, - "frame": { - "x": 124, - "y": 113, - "w": 41, - "h": 37 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:ff62847c95025ab843b05a9134e55488:7da27b56213df83850702c3591259733:74218c18c9d392741666ee5c0c28d306$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 40, "y": 94, "w": 40, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 15, "w": 40, "h": 39 }, + "sourceSize": { "w": 46, "h": 55 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 80, "y": 134, "w": 40, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 16, "w": 40, "h": 38 }, + "sourceSize": { "w": 46, "h": 55 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 40, "y": 172, "w": 40, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 17, "w": 40, "h": 37 }, + "sourceSize": { "w": 46, "h": 55 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 120, "y": 173, "w": 39, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 18, "w": 39, "h": 36 }, + "sourceSize": { "w": 46, "h": 55 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 159, "y": 207, "w": 39, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 19, "w": 39, "h": 36 }, + "sourceSize": { "w": 46, "h": 55 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 0, "y": 210, "w": 38, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 20, "w": 38, "h": 35 }, + "sourceSize": { "w": 46, "h": 55 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 40, "y": 209, "w": 39, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 19, "w": 39, "h": 36 }, + "sourceSize": { "w": 46, "h": 55 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 118, "y": 209, "w": 39, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 19, "w": 39, "h": 35 }, + "sourceSize": { "w": 46, "h": 55 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 79, "y": 209, "w": 39, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 18, "w": 39, "h": 36 }, + "sourceSize": { "w": 46, "h": 55 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 80, "y": 172, "w": 40, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 17, "w": 40, "h": 37 }, + "sourceSize": { "w": 46, "h": 55 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 159, "y": 169, "w": 40, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 16, "w": 40, "h": 38 }, + "sourceSize": { "w": 46, "h": 55 }, + "duration": 100 + }, + { + "filename": "0012.png", + "frame": { "x": 0, "y": 172, "w": 40, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 16, "w": 40, "h": 38 }, + "sourceSize": { "w": 46, "h": 55 }, + "duration": 100 + }, + { + "filename": "0013.png", + "frame": { "x": 80, "y": 95, "w": 40, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 15, "w": 40, "h": 39 }, + "sourceSize": { "w": 46, "h": 55 }, + "duration": 100 + }, + { + "filename": "0014.png", + "frame": { "x": 80, "y": 134, "w": 40, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 16, "w": 40, "h": 38 }, + "sourceSize": { "w": 46, "h": 55 }, + "duration": 100 + }, + { + "filename": "0015.png", + "frame": { "x": 40, "y": 172, "w": 40, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 17, "w": 40, "h": 37 }, + "sourceSize": { "w": 46, "h": 55 }, + "duration": 100 + }, + { + "filename": "0016.png", + "frame": { "x": 120, "y": 173, "w": 39, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 18, "w": 39, "h": 36 }, + "sourceSize": { "w": 46, "h": 55 }, + "duration": 100 + }, + { + "filename": "0017.png", + "frame": { "x": 159, "y": 207, "w": 39, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 19, "w": 39, "h": 36 }, + "sourceSize": { "w": 46, "h": 55 }, + "duration": 100 + }, + { + "filename": "0018.png", + "frame": { "x": 0, "y": 210, "w": 38, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 20, "w": 38, "h": 35 }, + "sourceSize": { "w": 46, "h": 55 }, + "duration": 100 + }, + { + "filename": "0019.png", + "frame": { "x": 40, "y": 209, "w": 39, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 19, "w": 39, "h": 36 }, + "sourceSize": { "w": 46, "h": 55 }, + "duration": 100 + }, + { + "filename": "0020.png", + "frame": { "x": 118, "y": 209, "w": 39, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 19, "w": 39, "h": 35 }, + "sourceSize": { "w": 46, "h": 55 }, + "duration": 100 + }, + { + "filename": "0021.png", + "frame": { "x": 79, "y": 209, "w": 39, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 18, "w": 39, "h": 36 }, + "sourceSize": { "w": 46, "h": 55 }, + "duration": 100 + }, + { + "filename": "0022.png", + "frame": { "x": 80, "y": 172, "w": 40, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 17, "w": 40, "h": 37 }, + "sourceSize": { "w": 46, "h": 55 }, + "duration": 100 + }, + { + "filename": "0023.png", + "frame": { "x": 159, "y": 169, "w": 40, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 16, "w": 40, "h": 38 }, + "sourceSize": { "w": 46, "h": 55 }, + "duration": 100 + }, + { + "filename": "0024.png", + "frame": { "x": 0, "y": 172, "w": 40, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 16, "w": 40, "h": 38 }, + "sourceSize": { "w": 46, "h": 55 }, + "duration": 100 + }, + { + "filename": "0025.png", + "frame": { "x": 80, "y": 95, "w": 40, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 15, "w": 40, "h": 39 }, + "sourceSize": { "w": 46, "h": 55 }, + "duration": 100 + }, + { + "filename": "0026.png", + "frame": { "x": 80, "y": 134, "w": 40, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 16, "w": 40, "h": 38 }, + "sourceSize": { "w": 46, "h": 55 }, + "duration": 100 + }, + { + "filename": "0027.png", + "frame": { "x": 40, "y": 172, "w": 40, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 17, "w": 40, "h": 37 }, + "sourceSize": { "w": 46, "h": 55 }, + "duration": 100 + }, + { + "filename": "0028.png", + "frame": { "x": 120, "y": 173, "w": 39, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 18, "w": 39, "h": 36 }, + "sourceSize": { "w": 46, "h": 55 }, + "duration": 100 + }, + { + "filename": "0029.png", + "frame": { "x": 159, "y": 207, "w": 39, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 19, "w": 39, "h": 36 }, + "sourceSize": { "w": 46, "h": 55 }, + "duration": 100 + }, + { + "filename": "0030.png", + "frame": { "x": 0, "y": 210, "w": 38, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 20, "w": 38, "h": 35 }, + "sourceSize": { "w": 46, "h": 55 }, + "duration": 100 + }, + { + "filename": "0031.png", + "frame": { "x": 40, "y": 209, "w": 39, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 19, "w": 39, "h": 36 }, + "sourceSize": { "w": 46, "h": 55 }, + "duration": 100 + }, + { + "filename": "0032.png", + "frame": { "x": 118, "y": 209, "w": 39, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 19, "w": 39, "h": 35 }, + "sourceSize": { "w": 46, "h": 55 }, + "duration": 100 + }, + { + "filename": "0033.png", + "frame": { "x": 79, "y": 209, "w": 39, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 18, "w": 39, "h": 36 }, + "sourceSize": { "w": 46, "h": 55 }, + "duration": 100 + }, + { + "filename": "0034.png", + "frame": { "x": 80, "y": 172, "w": 40, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 17, "w": 40, "h": 37 }, + "sourceSize": { "w": 46, "h": 55 }, + "duration": 100 + }, + { + "filename": "0035.png", + "frame": { "x": 159, "y": 169, "w": 40, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 16, "w": 40, "h": 38 }, + "sourceSize": { "w": 46, "h": 55 }, + "duration": 100 + }, + { + "filename": "0036.png", + "frame": { "x": 0, "y": 172, "w": 40, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 16, "w": 40, "h": 38 }, + "sourceSize": { "w": 46, "h": 55 }, + "duration": 100 + }, + { + "filename": "0037.png", + "frame": { "x": 80, "y": 95, "w": 40, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 15, "w": 40, "h": 39 }, + "sourceSize": { "w": 46, "h": 55 }, + "duration": 100 + }, + { + "filename": "0038.png", + "frame": { "x": 80, "y": 134, "w": 40, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 16, "w": 40, "h": 38 }, + "sourceSize": { "w": 46, "h": 55 }, + "duration": 100 + }, + { + "filename": "0039.png", + "frame": { "x": 40, "y": 172, "w": 40, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 17, "w": 40, "h": 37 }, + "sourceSize": { "w": 46, "h": 55 }, + "duration": 100 + }, + { + "filename": "0040.png", + "frame": { "x": 120, "y": 173, "w": 39, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 18, "w": 39, "h": 36 }, + "sourceSize": { "w": 46, "h": 55 }, + "duration": 100 + }, + { + "filename": "0041.png", + "frame": { "x": 159, "y": 207, "w": 39, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 19, "w": 39, "h": 36 }, + "sourceSize": { "w": 46, "h": 55 }, + "duration": 100 + }, + { + "filename": "0042.png", + "frame": { "x": 0, "y": 210, "w": 38, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 20, "w": 38, "h": 35 }, + "sourceSize": { "w": 46, "h": 55 }, + "duration": 100 + }, + { + "filename": "0043.png", + "frame": { "x": 40, "y": 209, "w": 39, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 19, "w": 39, "h": 36 }, + "sourceSize": { "w": 46, "h": 55 }, + "duration": 100 + }, + { + "filename": "0044.png", + "frame": { "x": 118, "y": 209, "w": 39, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 19, "w": 39, "h": 35 }, + "sourceSize": { "w": 46, "h": 55 }, + "duration": 100 + }, + { + "filename": "0045.png", + "frame": { "x": 79, "y": 209, "w": 39, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 18, "w": 39, "h": 36 }, + "sourceSize": { "w": 46, "h": 55 }, + "duration": 100 + }, + { + "filename": "0046.png", + "frame": { "x": 80, "y": 172, "w": 40, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 17, "w": 40, "h": 37 }, + "sourceSize": { "w": 46, "h": 55 }, + "duration": 100 + }, + { + "filename": "0047.png", + "frame": { "x": 159, "y": 169, "w": 40, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 16, "w": 40, "h": 38 }, + "sourceSize": { "w": 46, "h": 55 }, + "duration": 100 + }, + { + "filename": "0048.png", + "frame": { "x": 0, "y": 172, "w": 40, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 16, "w": 40, "h": 38 }, + "sourceSize": { "w": 46, "h": 55 }, + "duration": 100 + }, + { + "filename": "0049.png", + "frame": { "x": 80, "y": 95, "w": 40, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 15, "w": 40, "h": 39 }, + "sourceSize": { "w": 46, "h": 55 }, + "duration": 100 + }, + { + "filename": "0050.png", + "frame": { "x": 80, "y": 134, "w": 40, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 16, "w": 40, "h": 38 }, + "sourceSize": { "w": 46, "h": 55 }, + "duration": 100 + }, + { + "filename": "0051.png", + "frame": { "x": 40, "y": 172, "w": 40, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 17, "w": 40, "h": 37 }, + "sourceSize": { "w": 46, "h": 55 }, + "duration": 100 + }, + { + "filename": "0052.png", + "frame": { "x": 120, "y": 173, "w": 39, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 18, "w": 39, "h": 36 }, + "sourceSize": { "w": 46, "h": 55 }, + "duration": 100 + }, + { + "filename": "0053.png", + "frame": { "x": 159, "y": 207, "w": 39, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 19, "w": 39, "h": 36 }, + "sourceSize": { "w": 46, "h": 55 }, + "duration": 100 + }, + { + "filename": "0054.png", + "frame": { "x": 0, "y": 210, "w": 38, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 20, "w": 38, "h": 35 }, + "sourceSize": { "w": 46, "h": 55 }, + "duration": 100 + }, + { + "filename": "0055.png", + "frame": { "x": 40, "y": 209, "w": 39, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 19, "w": 39, "h": 36 }, + "sourceSize": { "w": 46, "h": 55 }, + "duration": 100 + }, + { + "filename": "0056.png", + "frame": { "x": 118, "y": 209, "w": 39, "h": 35 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 19, "w": 39, "h": 35 }, + "sourceSize": { "w": 46, "h": 55 }, + "duration": 100 + }, + { + "filename": "0057.png", + "frame": { "x": 79, "y": 209, "w": 39, "h": 36 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 18, "w": 39, "h": 36 }, + "sourceSize": { "w": 46, "h": 55 }, + "duration": 100 + }, + { + "filename": "0058.png", + "frame": { "x": 80, "y": 172, "w": 40, "h": 37 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 17, "w": 40, "h": 37 }, + "sourceSize": { "w": 46, "h": 55 }, + "duration": 100 + }, + { + "filename": "0059.png", + "frame": { "x": 159, "y": 169, "w": 40, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 16, "w": 40, "h": 38 }, + "sourceSize": { "w": 46, "h": 55 }, + "duration": 100 + }, + { + "filename": "0060.png", + "frame": { "x": 0, "y": 172, "w": 40, "h": 38 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 16, "w": 40, "h": 38 }, + "sourceSize": { "w": 46, "h": 55 }, + "duration": 100 + }, + { + "filename": "0061.png", + "frame": { "x": 40, "y": 94, "w": 40, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 15, "w": 40, "h": 39 }, + "sourceSize": { "w": 46, "h": 55 }, + "duration": 100 + }, + { + "filename": "0062.png", + "frame": { "x": 170, "y": 130, "w": 40, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 15, "w": 40, "h": 39 }, + "sourceSize": { "w": 46, "h": 55 }, + "duration": 100 + }, + { + "filename": "0063.png", + "frame": { "x": 0, "y": 133, "w": 40, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 15, "w": 40, "h": 39 }, + "sourceSize": { "w": 46, "h": 55 }, + "duration": 100 + }, + { + "filename": "0064.png", + "frame": { "x": 40, "y": 133, "w": 40, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 15, "w": 40, "h": 39 }, + "sourceSize": { "w": 46, "h": 55 }, + "duration": 100 + }, + { + "filename": "0065.png", + "frame": { "x": 0, "y": 53, "w": 40, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 14, "w": 40, "h": 40 }, + "sourceSize": { "w": 46, "h": 55 }, + "duration": 100 + }, + { + "filename": "0066.png", + "frame": { "x": 40, "y": 54, "w": 40, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 14, "w": 40, "h": 40 }, + "sourceSize": { "w": 46, "h": 55 }, + "duration": 100 + }, + { + "filename": "0067.png", + "frame": { "x": 170, "y": 90, "w": 40, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 14, "w": 40, "h": 40 }, + "sourceSize": { "w": 46, "h": 55 }, + "duration": 100 + }, + { + "filename": "0068.png", + "frame": { "x": 0, "y": 93, "w": 40, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 14, "w": 40, "h": 40 }, + "sourceSize": { "w": 46, "h": 55 }, + "duration": 100 + }, + { + "filename": "0069.png", + "frame": { "x": 130, "y": 52, "w": 40, "h": 41 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 13, "w": 40, "h": 41 }, + "sourceSize": { "w": 46, "h": 55 }, + "duration": 100 + }, + { + "filename": "0070.png", + "frame": { "x": 90, "y": 52, "w": 40, "h": 43 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 11, "w": 40, "h": 43 }, + "sourceSize": { "w": 46, "h": 55 }, + "duration": 100 + }, + { + "filename": "0071.png", + "frame": { "x": 177, "y": 46, "w": 40, "h": 44 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 10, "w": 40, "h": 44 }, + "sourceSize": { "w": 46, "h": 55 }, + "duration": 100 + }, + { + "filename": "0072.png", + "frame": { "x": 177, "y": 0, "w": 40, "h": 46 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 8, "w": 40, "h": 46 }, + "sourceSize": { "w": 46, "h": 55 }, + "duration": 100 + }, + { + "filename": "0073.png", + "frame": { "x": 90, "y": 0, "w": 45, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 45, "h": 52 }, + "sourceSize": { "w": 46, "h": 55 }, + "duration": 100 + }, + { + "filename": "0074.png", + "frame": { "x": 0, "y": 0, "w": 46, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 46, "h": 53 }, + "sourceSize": { "w": 46, "h": 55 }, + "duration": 100 + }, + { + "filename": "0075.png", + "frame": { "x": 0, "y": 0, "w": 46, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 46, "h": 53 }, + "sourceSize": { "w": 46, "h": 55 }, + "duration": 100 + }, + { + "filename": "0076.png", + "frame": { "x": 0, "y": 0, "w": 46, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 46, "h": 53 }, + "sourceSize": { "w": 46, "h": 55 }, + "duration": 100 + }, + { + "filename": "0077.png", + "frame": { "x": 0, "y": 0, "w": 46, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 46, "h": 53 }, + "sourceSize": { "w": 46, "h": 55 }, + "duration": 100 + }, + { + "filename": "0078.png", + "frame": { "x": 135, "y": 0, "w": 42, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 42, "h": 52 }, + "sourceSize": { "w": 46, "h": 55 }, + "duration": 100 + }, + { + "filename": "0079.png", + "frame": { "x": 46, "y": 0, "w": 44, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 44, "h": 54 }, + "sourceSize": { "w": 46, "h": 55 }, + "duration": 100 + }, + { + "filename": "0080.png", + "frame": { "x": 120, "y": 133, "w": 39, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 14, "w": 39, "h": 40 }, + "sourceSize": { "w": 46, "h": 55 }, + "duration": 100 + }, + { + "filename": "0081.png", + "frame": { "x": 130, "y": 93, "w": 40, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 14, "w": 40, "h": 40 }, + "sourceSize": { "w": 46, "h": 55 }, + "duration": 100 + }, + { + "filename": "0082.png", + "frame": { "x": 0, "y": 53, "w": 40, "h": 40 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 14, "w": 40, "h": 40 }, + "sourceSize": { "w": 46, "h": 55 }, + "duration": 100 + }, + { + "filename": "0083.png", + "frame": { "x": 40, "y": 133, "w": 40, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 15, "w": 40, "h": 39 }, + "sourceSize": { "w": 46, "h": 55 }, + "duration": 100 + }, + { + "filename": "0084.png", + "frame": { "x": 0, "y": 133, "w": 40, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 15, "w": 40, "h": 39 }, + "sourceSize": { "w": 46, "h": 55 }, + "duration": 100 + }, + { + "filename": "0085.png", + "frame": { "x": 170, "y": 130, "w": 40, "h": 39 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 15, "w": 40, "h": 39 }, + "sourceSize": { "w": 46, "h": 55 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.13-x64", + "format": "I8", + "size": { "w": 217, "h": 245 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/shiny/728.png b/public/images/pokemon/exp/shiny/728.png index 0266097b1f3..d3bf6112f30 100644 Binary files a/public/images/pokemon/exp/shiny/728.png and b/public/images/pokemon/exp/shiny/728.png differ diff --git a/public/images/pokemon/exp/shiny/729.json b/public/images/pokemon/exp/shiny/729.json index e9fb1aa0faa..ed22b70455c 100644 --- a/public/images/pokemon/exp/shiny/729.json +++ b/public/images/pokemon/exp/shiny/729.json @@ -1,272 +1,1055 @@ -{ - "textures": [ - { - "image": "729.png", - "format": "RGBA8888", - "size": { - "w": 141, - "h": 141 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 51 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 49, - "h": 51 - }, - "frame": { - "x": 0, - "y": 0, - "w": 49, - "h": 51 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 51 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 49, - "h": 51 - }, - "frame": { - "x": 0, - "y": 51, - "w": 49, - "h": 51 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 51 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 49, - "h": 51 - }, - "frame": { - "x": 0, - "y": 51, - "w": 49, - "h": 51 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 51 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 48, - "h": 50 - }, - "frame": { - "x": 49, - "y": 0, - "w": 48, - "h": 50 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 51 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 48, - "h": 50 - }, - "frame": { - "x": 49, - "y": 0, - "w": 48, - "h": 50 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 51 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 42, - "h": 47 - }, - "frame": { - "x": 97, - "y": 0, - "w": 42, - "h": 47 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 51 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 42, - "h": 47 - }, - "frame": { - "x": 97, - "y": 0, - "w": 42, - "h": 47 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 51 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 40, - "h": 47 - }, - "frame": { - "x": 97, - "y": 47, - "w": 40, - "h": 47 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 51 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 46, - "h": 48 - }, - "frame": { - "x": 49, - "y": 50, - "w": 46, - "h": 48 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 51 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 46, - "h": 48 - }, - "frame": { - "x": 49, - "y": 50, - "w": 46, - "h": 48 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 51 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 45, - "h": 47 - }, - "frame": { - "x": 95, - "y": 94, - "w": 45, - "h": 47 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 51 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 45, - "h": 47 - }, - "frame": { - "x": 95, - "y": 94, - "w": 45, - "h": 47 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:443d9818c7a68828a3e681ceb7d9ccd2:3865e964ed12d558fc1c9e3e95c82c69:b2d5dd692ec79c7357afdffa7b3670a9$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 53, "y": 283, "w": 52, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 9, "w": 52, "h": 55 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 105, "y": 286, "w": 51, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 9, "w": 51, "h": 55 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 429, "y": 336, "w": 50, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 10, "w": 50, "h": 54 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 263, "y": 337, "w": 49, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 10, "w": 49, "h": 54 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 0, "y": 345, "w": 48, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 11, "w": 48, "h": 53 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 408, "y": 390, "w": 46, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 10, "w": 46, "h": 55 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 454, "y": 390, "w": 46, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 11, "w": 46, "h": 54 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 48, "y": 391, "w": 46, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 11, "w": 46, "h": 53 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 204, "y": 390, "w": 47, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 10, "w": 47, "h": 54 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 156, "y": 339, "w": 48, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 10, "w": 48, "h": 54 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 462, "y": 226, "w": 50, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 9, "w": 50, "h": 55 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0012.png", + "frame": { "x": 0, "y": 290, "w": 51, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 9, "w": 51, "h": 55 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0013.png", + "frame": { "x": 326, "y": 282, "w": 52, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 9, "w": 52, "h": 55 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0014.png", + "frame": { "x": 164, "y": 229, "w": 53, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 8, "w": 53, "h": 56 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0015.png", + "frame": { "x": 0, "y": 178, "w": 54, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 8, "w": 54, "h": 56 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0016.png", + "frame": { "x": 55, "y": 117, "w": 55, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 8, "w": 55, "h": 56 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0017.png", + "frame": { "x": 109, "y": 175, "w": 55, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 9, "w": 55, "h": 55 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0018.png", + "frame": { "x": 164, "y": 174, "w": 55, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 9, "w": 55, "h": 55 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0019.png", + "frame": { "x": 54, "y": 173, "w": 55, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 9, "w": 55, "h": 55 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0020.png", + "frame": { "x": 236, "y": 171, "w": 55, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 9, "w": 55, "h": 55 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0021.png", + "frame": { "x": 54, "y": 228, "w": 54, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 9, "w": 54, "h": 55 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0022.png", + "frame": { "x": 327, "y": 227, "w": 54, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 9, "w": 54, "h": 55 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0023.png", + "frame": { "x": 381, "y": 281, "w": 53, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 9, "w": 53, "h": 55 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0024.png", + "frame": { "x": 434, "y": 281, "w": 53, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 9, "w": 53, "h": 55 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0025.png", + "frame": { "x": 53, "y": 283, "w": 52, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 9, "w": 52, "h": 55 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0026.png", + "frame": { "x": 105, "y": 286, "w": 51, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 9, "w": 51, "h": 55 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0027.png", + "frame": { "x": 429, "y": 336, "w": 50, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 10, "w": 50, "h": 54 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0028.png", + "frame": { "x": 263, "y": 337, "w": 49, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 10, "w": 49, "h": 54 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0029.png", + "frame": { "x": 0, "y": 345, "w": 48, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 11, "w": 48, "h": 53 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0030.png", + "frame": { "x": 408, "y": 390, "w": 46, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 10, "w": 46, "h": 55 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0031.png", + "frame": { "x": 454, "y": 390, "w": 46, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 11, "w": 46, "h": 54 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0032.png", + "frame": { "x": 48, "y": 391, "w": 46, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 11, "w": 46, "h": 53 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0033.png", + "frame": { "x": 204, "y": 390, "w": 47, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 10, "w": 47, "h": 54 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0034.png", + "frame": { "x": 156, "y": 339, "w": 48, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 10, "w": 48, "h": 54 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0035.png", + "frame": { "x": 462, "y": 226, "w": 50, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 9, "w": 50, "h": 55 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0036.png", + "frame": { "x": 0, "y": 290, "w": 51, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 9, "w": 51, "h": 55 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0037.png", + "frame": { "x": 326, "y": 282, "w": 52, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 9, "w": 52, "h": 55 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0038.png", + "frame": { "x": 164, "y": 229, "w": 53, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 8, "w": 53, "h": 56 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0039.png", + "frame": { "x": 0, "y": 178, "w": 54, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 8, "w": 54, "h": 56 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0040.png", + "frame": { "x": 55, "y": 117, "w": 55, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 8, "w": 55, "h": 56 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0041.png", + "frame": { "x": 109, "y": 175, "w": 55, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 9, "w": 55, "h": 55 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0042.png", + "frame": { "x": 164, "y": 174, "w": 55, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 9, "w": 55, "h": 55 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0043.png", + "frame": { "x": 54, "y": 173, "w": 55, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 9, "w": 55, "h": 55 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0044.png", + "frame": { "x": 236, "y": 171, "w": 55, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 9, "w": 55, "h": 55 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0045.png", + "frame": { "x": 54, "y": 228, "w": 54, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 9, "w": 54, "h": 55 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0046.png", + "frame": { "x": 327, "y": 227, "w": 54, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 9, "w": 54, "h": 55 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0047.png", + "frame": { "x": 381, "y": 281, "w": 53, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 9, "w": 53, "h": 55 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0048.png", + "frame": { "x": 434, "y": 281, "w": 53, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 9, "w": 53, "h": 55 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0049.png", + "frame": { "x": 53, "y": 283, "w": 52, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 9, "w": 52, "h": 55 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0050.png", + "frame": { "x": 105, "y": 286, "w": 51, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 9, "w": 51, "h": 55 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0051.png", + "frame": { "x": 429, "y": 336, "w": 50, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 10, "w": 50, "h": 54 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0052.png", + "frame": { "x": 263, "y": 337, "w": 49, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 10, "w": 49, "h": 54 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0053.png", + "frame": { "x": 0, "y": 345, "w": 48, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 11, "w": 48, "h": 53 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0054.png", + "frame": { "x": 408, "y": 390, "w": 46, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 10, "w": 46, "h": 55 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0055.png", + "frame": { "x": 454, "y": 390, "w": 46, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 11, "w": 46, "h": 54 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0056.png", + "frame": { "x": 48, "y": 391, "w": 46, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 11, "w": 46, "h": 53 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0057.png", + "frame": { "x": 204, "y": 390, "w": 47, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 10, "w": 47, "h": 54 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0058.png", + "frame": { "x": 156, "y": 339, "w": 48, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 10, "w": 48, "h": 54 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0059.png", + "frame": { "x": 462, "y": 226, "w": 50, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 9, "w": 50, "h": 55 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0060.png", + "frame": { "x": 0, "y": 290, "w": 51, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 9, "w": 51, "h": 55 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0061.png", + "frame": { "x": 326, "y": 282, "w": 52, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 9, "w": 52, "h": 55 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0062.png", + "frame": { "x": 164, "y": 229, "w": 53, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 8, "w": 53, "h": 56 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0063.png", + "frame": { "x": 0, "y": 178, "w": 54, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 8, "w": 54, "h": 56 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0064.png", + "frame": { "x": 55, "y": 117, "w": 55, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 8, "w": 55, "h": 56 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0065.png", + "frame": { "x": 109, "y": 175, "w": 55, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 9, "w": 55, "h": 55 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0066.png", + "frame": { "x": 164, "y": 174, "w": 55, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 9, "w": 55, "h": 55 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0067.png", + "frame": { "x": 54, "y": 173, "w": 55, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 9, "w": 55, "h": 55 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0068.png", + "frame": { "x": 236, "y": 171, "w": 55, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 9, "w": 55, "h": 55 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0069.png", + "frame": { "x": 54, "y": 228, "w": 54, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 9, "w": 54, "h": 55 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0070.png", + "frame": { "x": 327, "y": 227, "w": 54, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 9, "w": 54, "h": 55 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0071.png", + "frame": { "x": 381, "y": 281, "w": 53, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 9, "w": 53, "h": 55 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0072.png", + "frame": { "x": 434, "y": 281, "w": 53, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 9, "w": 53, "h": 55 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0073.png", + "frame": { "x": 53, "y": 283, "w": 52, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 9, "w": 52, "h": 55 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0074.png", + "frame": { "x": 408, "y": 226, "w": 54, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 9, "w": 54, "h": 55 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0075.png", + "frame": { "x": 312, "y": 56, "w": 57, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 8, "w": 57, "h": 56 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0076.png", + "frame": { "x": 312, "y": 0, "w": 59, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 8, "w": 59, "h": 56 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0077.png", + "frame": { "x": 244, "y": 116, "w": 56, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 9, "w": 56, "h": 55 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0078.png", + "frame": { "x": 416, "y": 114, "w": 56, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 9, "w": 56, "h": 55 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0079.png", + "frame": { "x": 64, "y": 62, "w": 57, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 9, "w": 57, "h": 55 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0080.png", + "frame": { "x": 371, "y": 0, "w": 58, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 8, "w": 58, "h": 56 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0081.png", + "frame": { "x": 273, "y": 226, "w": 54, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 9, "w": 54, "h": 55 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0082.png", + "frame": { "x": 53, "y": 283, "w": 52, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 9, "w": 52, "h": 55 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0083.png", + "frame": { "x": 161, "y": 285, "w": 52, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 9, "w": 52, "h": 54 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0084.png", + "frame": { "x": 312, "y": 337, "w": 50, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 10, "w": 50, "h": 52 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0085.png", + "frame": { "x": 312, "y": 389, "w": 48, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 10, "w": 48, "h": 53 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0086.png", + "frame": { "x": 51, "y": 338, "w": 49, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 10, "w": 49, "h": 53 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0087.png", + "frame": { "x": 378, "y": 336, "w": 51, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 10, "w": 51, "h": 53 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0088.png", + "frame": { "x": 213, "y": 337, "w": 50, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 10, "w": 50, "h": 53 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0089.png", + "frame": { "x": 360, "y": 389, "w": 48, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 9, "w": 48, "h": 53 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0090.png", + "frame": { "x": 100, "y": 341, "w": 49, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 10, "w": 49, "h": 52 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0091.png", + "frame": { "x": 53, "y": 283, "w": 52, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 9, "w": 52, "h": 55 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0092.png", + "frame": { "x": 217, "y": 282, "w": 52, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 9, "w": 52, "h": 55 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0093.png", + "frame": { "x": 108, "y": 230, "w": 53, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 8, "w": 53, "h": 56 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0094.png", + "frame": { "x": 300, "y": 169, "w": 54, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 7, "w": 54, "h": 57 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0095.png", + "frame": { "x": 182, "y": 117, "w": 54, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 7, "w": 54, "h": 57 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0096.png", + "frame": { "x": 0, "y": 121, "w": 54, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 7, "w": 54, "h": 57 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0097.png", + "frame": { "x": 189, "y": 60, "w": 55, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 7, "w": 55, "h": 57 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0098.png", + "frame": { "x": 110, "y": 118, "w": 54, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 7, "w": 54, "h": 57 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0099.png", + "frame": { "x": 369, "y": 56, "w": 55, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 7, "w": 55, "h": 57 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0100.png", + "frame": { "x": 424, "y": 57, "w": 55, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 7, "w": 55, "h": 57 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0101.png", + "frame": { "x": 429, "y": 0, "w": 56, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 7, "w": 56, "h": 57 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0102.png", + "frame": { "x": 127, "y": 0, "w": 62, "h": 61 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 62, "h": 61 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0103.png", + "frame": { "x": 64, "y": 0, "w": 63, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 63, "h": 62 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0104.png", + "frame": { "x": 0, "y": 0, "w": 64, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 64, "h": 64 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0105.png", + "frame": { "x": 251, "y": 0, "w": 61, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 61, "h": 59 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0106.png", + "frame": { "x": 189, "y": 0, "w": 62, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 62, "h": 60 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0107.png", + "frame": { "x": 0, "y": 64, "w": 55, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 7, "w": 55, "h": 57 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0108.png", + "frame": { "x": 127, "y": 61, "w": 55, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 7, "w": 55, "h": 57 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0109.png", + "frame": { "x": 306, "y": 112, "w": 55, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 7, "w": 55, "h": 57 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0110.png", + "frame": { "x": 361, "y": 113, "w": 55, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 7, "w": 55, "h": 57 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0111.png", + "frame": { "x": 251, "y": 59, "w": 55, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 7, "w": 55, "h": 57 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0112.png", + "frame": { "x": 416, "y": 169, "w": 54, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 7, "w": 54, "h": 57 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0113.png", + "frame": { "x": 354, "y": 170, "w": 54, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 7, "w": 54, "h": 57 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0114.png", + "frame": { "x": 219, "y": 226, "w": 54, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 8, "w": 54, "h": 56 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0115.png", + "frame": { "x": 0, "y": 234, "w": 53, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 8, "w": 53, "h": 56 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + }, + { + "filename": "0116.png", + "frame": { "x": 273, "y": 281, "w": 53, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 8, "w": 53, "h": 56 }, + "sourceSize": { "w": 64, "h": 65 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.13-x64", + "image": "729.png", + "format": "I8", + "size": { "w": 512, "h": 445 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/shiny/729.png b/public/images/pokemon/exp/shiny/729.png index 41e9e077e2e..66b8a99f34a 100644 Binary files a/public/images/pokemon/exp/shiny/729.png and b/public/images/pokemon/exp/shiny/729.png differ diff --git a/public/images/pokemon/exp/shiny/730.json b/public/images/pokemon/exp/shiny/730.json index 874de43f801..b1b6c5189bc 100644 --- a/public/images/pokemon/exp/shiny/730.json +++ b/public/images/pokemon/exp/shiny/730.json @@ -1,2309 +1,839 @@ -{ - "textures": [ - { - "image": "730.png", - "format": "RGBA8888", - "size": { - "w": 615, - "h": 615 - }, - "scale": 1, - "frames": [ - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 83, - "h": 81 - }, - "frame": { - "x": 0, - "y": 0, - "w": 83, - "h": 81 - } - }, - { - "filename": "0038.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 83, - "h": 81 - }, - "frame": { - "x": 0, - "y": 0, - "w": 83, - "h": 81 - } - }, - { - "filename": "0086.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 83, - "h": 81 - }, - "frame": { - "x": 0, - "y": 0, - "w": 83, - "h": 81 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 78, - "h": 85 - }, - "frame": { - "x": 0, - "y": 81, - "w": 78, - "h": 85 - } - }, - { - "filename": "0035.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 78, - "h": 85 - }, - "frame": { - "x": 0, - "y": 81, - "w": 78, - "h": 85 - } - }, - { - "filename": "0083.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 78, - "h": 85 - }, - "frame": { - "x": 0, - "y": 81, - "w": 78, - "h": 85 - } - }, - { - "filename": "0062.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 83, - "h": 80 - }, - "frame": { - "x": 83, - "y": 0, - "w": 83, - "h": 80 - } - }, - { - "filename": "0107.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 8, - "w": 83, - "h": 80 - }, - "frame": { - "x": 166, - "y": 0, - "w": 83, - "h": 80 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 74, - "h": 88 - }, - "frame": { - "x": 0, - "y": 166, - "w": 74, - "h": 88 - } - }, - { - "filename": "0034.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 74, - "h": 88 - }, - "frame": { - "x": 0, - "y": 166, - "w": 74, - "h": 88 - } - }, - { - "filename": "0082.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 74, - "h": 88 - }, - "frame": { - "x": 0, - "y": 166, - "w": 74, - "h": 88 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 9, - "w": 83, - "h": 79 - }, - "frame": { - "x": 249, - "y": 0, - "w": 83, - "h": 79 - } - }, - { - "filename": "0039.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 9, - "w": 83, - "h": 79 - }, - "frame": { - "x": 249, - "y": 0, - "w": 83, - "h": 79 - } - }, - { - "filename": "0087.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 9, - "w": 83, - "h": 79 - }, - "frame": { - "x": 249, - "y": 0, - "w": 83, - "h": 79 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 10, - "w": 84, - "h": 78 - }, - "frame": { - "x": 332, - "y": 0, - "w": 84, - "h": 78 - } - }, - { - "filename": "0040.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 10, - "w": 84, - "h": 78 - }, - "frame": { - "x": 332, - "y": 0, - "w": 84, - "h": 78 - } - }, - { - "filename": "0088.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 10, - "w": 84, - "h": 78 - }, - "frame": { - "x": 332, - "y": 0, - "w": 84, - "h": 78 - } - }, - { - "filename": "0064.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 10, - "w": 84, - "h": 78 - }, - "frame": { - "x": 416, - "y": 0, - "w": 84, - "h": 78 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 73, - "h": 88 - }, - "frame": { - "x": 0, - "y": 254, - "w": 73, - "h": 88 - } - }, - { - "filename": "0033.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 73, - "h": 88 - }, - "frame": { - "x": 0, - "y": 254, - "w": 73, - "h": 88 - } - }, - { - "filename": "0081.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 73, - "h": 88 - }, - "frame": { - "x": 0, - "y": 254, - "w": 73, - "h": 88 - } - }, - { - "filename": "0063.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 9, - "w": 83, - "h": 79 - }, - "frame": { - "x": 500, - "y": 0, - "w": 83, - "h": 79 - } - }, - { - "filename": "0057.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 73, - "h": 87 - }, - "frame": { - "x": 0, - "y": 342, - "w": 73, - "h": 87 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 75, - "h": 86 - }, - "frame": { - "x": 0, - "y": 429, - "w": 75, - "h": 86 - } - }, - { - "filename": "0032.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 75, - "h": 86 - }, - "frame": { - "x": 0, - "y": 429, - "w": 75, - "h": 86 - } - }, - { - "filename": "0080.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 75, - "h": 86 - }, - "frame": { - "x": 0, - "y": 429, - "w": 75, - "h": 86 - } - }, - { - "filename": "0056.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 75, - "h": 86 - }, - "frame": { - "x": 0, - "y": 515, - "w": 75, - "h": 86 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 75, - "h": 85 - }, - "frame": { - "x": 78, - "y": 81, - "w": 75, - "h": 85 - } - }, - { - "filename": "0031.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 75, - "h": 85 - }, - "frame": { - "x": 78, - "y": 81, - "w": 75, - "h": 85 - } - }, - { - "filename": "0079.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 75, - "h": 85 - }, - "frame": { - "x": 78, - "y": 81, - "w": 75, - "h": 85 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 81, - "h": 82 - }, - "frame": { - "x": 153, - "y": 80, - "w": 81, - "h": 82 - } - }, - { - "filename": "0037.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 81, - "h": 82 - }, - "frame": { - "x": 153, - "y": 80, - "w": 81, - "h": 82 - } - }, - { - "filename": "0085.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 81, - "h": 82 - }, - "frame": { - "x": 153, - "y": 80, - "w": 81, - "h": 82 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 80, - "h": 82 - }, - "frame": { - "x": 74, - "y": 166, - "w": 80, - "h": 82 - } - }, - { - "filename": "0036.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 80, - "h": 82 - }, - "frame": { - "x": 74, - "y": 166, - "w": 80, - "h": 82 - } - }, - { - "filename": "0084.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 80, - "h": 82 - }, - "frame": { - "x": 74, - "y": 166, - "w": 80, - "h": 82 - } - }, - { - "filename": "0108.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 80, - "h": 81 - }, - "frame": { - "x": 154, - "y": 162, - "w": 80, - "h": 81 - } - }, - { - "filename": "0055.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 75, - "h": 85 - }, - "frame": { - "x": 234, - "y": 80, - "w": 75, - "h": 85 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 78, - "h": 81 - }, - "frame": { - "x": 234, - "y": 165, - "w": 78, - "h": 81 - } - }, - { - "filename": "0025.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 78, - "h": 81 - }, - "frame": { - "x": 234, - "y": 165, - "w": 78, - "h": 81 - } - }, - { - "filename": "0049.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 78, - "h": 81 - }, - "frame": { - "x": 234, - "y": 165, - "w": 78, - "h": 81 - } - }, - { - "filename": "0073.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 78, - "h": 81 - }, - "frame": { - "x": 234, - "y": 165, - "w": 78, - "h": 81 - } - }, - { - "filename": "0097.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 78, - "h": 81 - }, - "frame": { - "x": 234, - "y": 165, - "w": 78, - "h": 81 - } - }, - { - "filename": "0058.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 74, - "h": 85 - }, - "frame": { - "x": 309, - "y": 79, - "w": 74, - "h": 85 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 78, - "h": 82 - }, - "frame": { - "x": 383, - "y": 78, - "w": 78, - "h": 82 - } - }, - { - "filename": "0028.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 78, - "h": 82 - }, - "frame": { - "x": 383, - "y": 78, - "w": 78, - "h": 82 - } - }, - { - "filename": "0052.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 78, - "h": 82 - }, - "frame": { - "x": 383, - "y": 78, - "w": 78, - "h": 82 - } - }, - { - "filename": "0076.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 78, - "h": 82 - }, - "frame": { - "x": 383, - "y": 78, - "w": 78, - "h": 82 - } - }, - { - "filename": "0059.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 78, - "h": 82 - }, - "frame": { - "x": 312, - "y": 164, - "w": 78, - "h": 82 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 78, - "h": 81 - }, - "frame": { - "x": 390, - "y": 160, - "w": 78, - "h": 81 - } - }, - { - "filename": "0026.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 78, - "h": 81 - }, - "frame": { - "x": 390, - "y": 160, - "w": 78, - "h": 81 - } - }, - { - "filename": "0050.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 78, - "h": 81 - }, - "frame": { - "x": 390, - "y": 160, - "w": 78, - "h": 81 - } - }, - { - "filename": "0074.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 78, - "h": 81 - }, - "frame": { - "x": 390, - "y": 160, - "w": 78, - "h": 81 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 78, - "h": 81 - }, - "frame": { - "x": 461, - "y": 79, - "w": 78, - "h": 81 - } - }, - { - "filename": "0027.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 78, - "h": 81 - }, - "frame": { - "x": 461, - "y": 79, - "w": 78, - "h": 81 - } - }, - { - "filename": "0051.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 78, - "h": 81 - }, - "frame": { - "x": 461, - "y": 79, - "w": 78, - "h": 81 - } - }, - { - "filename": "0075.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 78, - "h": 81 - }, - "frame": { - "x": 461, - "y": 79, - "w": 78, - "h": 81 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 76, - "h": 81 - }, - "frame": { - "x": 539, - "y": 79, - "w": 76, - "h": 81 - } - }, - { - "filename": "0030.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 76, - "h": 81 - }, - "frame": { - "x": 539, - "y": 79, - "w": 76, - "h": 81 - } - }, - { - "filename": "0054.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 76, - "h": 81 - }, - "frame": { - "x": 539, - "y": 79, - "w": 76, - "h": 81 - } - }, - { - "filename": "0078.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 76, - "h": 81 - }, - "frame": { - "x": 539, - "y": 79, - "w": 76, - "h": 81 - } - }, - { - "filename": "0061.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 81, - "h": 79 - }, - "frame": { - "x": 468, - "y": 160, - "w": 81, - "h": 79 - } - }, - { - "filename": "0023.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 13, - "w": 80, - "h": 75 - }, - "frame": { - "x": 154, - "y": 243, - "w": 80, - "h": 75 - } - }, - { - "filename": "0047.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 13, - "w": 80, - "h": 75 - }, - "frame": { - "x": 154, - "y": 243, - "w": 80, - "h": 75 - } - }, - { - "filename": "0095.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 13, - "w": 80, - "h": 75 - }, - "frame": { - "x": 154, - "y": 243, - "w": 80, - "h": 75 - } - }, - { - "filename": "0017.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 14, - "w": 84, - "h": 74 - }, - "frame": { - "x": 234, - "y": 246, - "w": 84, - "h": 74 - } - }, - { - "filename": "0041.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 14, - "w": 84, - "h": 74 - }, - "frame": { - "x": 234, - "y": 246, - "w": 84, - "h": 74 - } - }, - { - "filename": "0089.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 14, - "w": 84, - "h": 74 - }, - "frame": { - "x": 234, - "y": 246, - "w": 84, - "h": 74 - } - }, - { - "filename": "0060.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 80, - "h": 79 - }, - "frame": { - "x": 74, - "y": 248, - "w": 80, - "h": 79 - } - }, - { - "filename": "0109.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 78, - "h": 81 - }, - "frame": { - "x": 73, - "y": 327, - "w": 78, - "h": 81 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 77, - "h": 81 - }, - "frame": { - "x": 318, - "y": 246, - "w": 77, - "h": 81 - } - }, - { - "filename": "0029.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 77, - "h": 81 - }, - "frame": { - "x": 318, - "y": 246, - "w": 77, - "h": 81 - } - }, - { - "filename": "0053.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 77, - "h": 81 - }, - "frame": { - "x": 318, - "y": 246, - "w": 77, - "h": 81 - } - }, - { - "filename": "0077.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 77, - "h": 81 - }, - "frame": { - "x": 318, - "y": 246, - "w": 77, - "h": 81 - } - }, - { - "filename": "0098.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 9, - "w": 78, - "h": 79 - }, - "frame": { - "x": 395, - "y": 241, - "w": 78, - "h": 79 - } - }, - { - "filename": "0024.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 10, - "w": 78, - "h": 78 - }, - "frame": { - "x": 473, - "y": 239, - "w": 78, - "h": 78 - } - }, - { - "filename": "0048.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 10, - "w": 78, - "h": 78 - }, - "frame": { - "x": 473, - "y": 239, - "w": 78, - "h": 78 - } - }, - { - "filename": "0096.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 10, - "w": 78, - "h": 78 - }, - "frame": { - "x": 473, - "y": 239, - "w": 78, - "h": 78 - } - }, - { - "filename": "0072.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 10, - "w": 78, - "h": 78 - }, - "frame": { - "x": 75, - "y": 408, - "w": 78, - "h": 78 - } - }, - { - "filename": "0099.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 11, - "w": 79, - "h": 77 - }, - "frame": { - "x": 75, - "y": 486, - "w": 79, - "h": 77 - } - }, - { - "filename": "0071.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 13, - "w": 80, - "h": 75 - }, - "frame": { - "x": 154, - "y": 318, - "w": 80, - "h": 75 - } - }, - { - "filename": "0018.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 15, - "w": 84, - "h": 73 - }, - "frame": { - "x": 234, - "y": 320, - "w": 84, - "h": 73 - } - }, - { - "filename": "0042.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 15, - "w": 84, - "h": 73 - }, - "frame": { - "x": 234, - "y": 320, - "w": 84, - "h": 73 - } - }, - { - "filename": "0090.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 15, - "w": 84, - "h": 73 - }, - "frame": { - "x": 234, - "y": 320, - "w": 84, - "h": 73 - } - }, - { - "filename": "0019.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 16, - "w": 84, - "h": 72 - }, - "frame": { - "x": 318, - "y": 327, - "w": 84, - "h": 72 - } - }, - { - "filename": "0043.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 16, - "w": 84, - "h": 72 - }, - "frame": { - "x": 318, - "y": 327, - "w": 84, - "h": 72 - } - }, - { - "filename": "0091.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 16, - "w": 84, - "h": 72 - }, - "frame": { - "x": 318, - "y": 327, - "w": 84, - "h": 72 - } - }, - { - "filename": "0065.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 14, - "w": 84, - "h": 74 - }, - "frame": { - "x": 153, - "y": 393, - "w": 84, - "h": 74 - } - }, - { - "filename": "0101.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 17, - "w": 81, - "h": 71 - }, - "frame": { - "x": 237, - "y": 393, - "w": 81, - "h": 71 - } - }, - { - "filename": "0066.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 15, - "w": 84, - "h": 73 - }, - "frame": { - "x": 318, - "y": 399, - "w": 84, - "h": 73 - } - }, - { - "filename": "0106.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 13, - "w": 83, - "h": 75 - }, - "frame": { - "x": 402, - "y": 320, - "w": 83, - "h": 75 - } - }, - { - "filename": "0105.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 14, - "w": 84, - "h": 74 - }, - "frame": { - "x": 402, - "y": 395, - "w": 84, - "h": 74 - } - }, - { - "filename": "0100.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 14, - "w": 80, - "h": 74 - }, - "frame": { - "x": 485, - "y": 317, - "w": 80, - "h": 74 - } - }, - { - "filename": "0104.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 15, - "w": 83, - "h": 73 - }, - "frame": { - "x": 486, - "y": 391, - "w": 83, - "h": 73 - } - }, - { - "filename": "0067.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 16, - "w": 84, - "h": 72 - }, - "frame": { - "x": 154, - "y": 467, - "w": 84, - "h": 72 - } - }, - { - "filename": "0021.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 17, - "w": 83, - "h": 71 - }, - "frame": { - "x": 154, - "y": 539, - "w": 83, - "h": 71 - } - }, - { - "filename": "0045.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 17, - "w": 83, - "h": 71 - }, - "frame": { - "x": 154, - "y": 539, - "w": 83, - "h": 71 - } - }, - { - "filename": "0093.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 17, - "w": 83, - "h": 71 - }, - "frame": { - "x": 154, - "y": 539, - "w": 83, - "h": 71 - } - }, - { - "filename": "0022.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 17, - "w": 83, - "h": 71 - }, - "frame": { - "x": 486, - "y": 464, - "w": 83, - "h": 71 - } - }, - { - "filename": "0046.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 17, - "w": 83, - "h": 71 - }, - "frame": { - "x": 486, - "y": 464, - "w": 83, - "h": 71 - } - }, - { - "filename": "0094.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 17, - "w": 83, - "h": 71 - }, - "frame": { - "x": 486, - "y": 464, - "w": 83, - "h": 71 - } - }, - { - "filename": "0069.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 17, - "w": 83, - "h": 71 - }, - "frame": { - "x": 402, - "y": 469, - "w": 83, - "h": 71 - } - }, - { - "filename": "0070.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 17, - "w": 83, - "h": 71 - }, - "frame": { - "x": 485, - "y": 535, - "w": 83, - "h": 71 - } - }, - { - "filename": "0020.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 16, - "w": 82, - "h": 72 - }, - "frame": { - "x": 237, - "y": 539, - "w": 82, - "h": 72 - } - }, - { - "filename": "0044.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 16, - "w": 82, - "h": 72 - }, - "frame": { - "x": 237, - "y": 539, - "w": 82, - "h": 72 - } - }, - { - "filename": "0092.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 16, - "w": 82, - "h": 72 - }, - "frame": { - "x": 237, - "y": 539, - "w": 82, - "h": 72 - } - }, - { - "filename": "0103.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 16, - "w": 83, - "h": 72 - }, - "frame": { - "x": 319, - "y": 472, - "w": 83, - "h": 72 - } - }, - { - "filename": "0102.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 18, - "w": 82, - "h": 70 - }, - "frame": { - "x": 319, - "y": 544, - "w": 82, - "h": 70 - } - }, - { - "filename": "0068.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 16, - "w": 82, - "h": 72 - }, - "frame": { - "x": 402, - "y": 540, - "w": 82, - "h": 72 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:59fe2b59aab6747f8b9c8449f7122d94:f053b5af80accd64fb9a265eb64f806d:fcd0d2cb6b26724e796ae0dcb71fae3f$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 491, "y": 0, "w": 79, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 13, "w": 79, "h": 71 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 341, "y": 0, "w": 77, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 11, "w": 77, "h": 73 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 265, "y": 0, "w": 76, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 9, "w": 76, "h": 75 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 418, "y": 0, "w": 73, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 7, "w": 73, "h": 77 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 159, "y": 68, "w": 69, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 4, "w": 69, "h": 80 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 309, "y": 143, "w": 64, "h": 83 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 1, "w": 64, "h": 83 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 0, "y": 145, "w": 63, "h": 84 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 0, "w": 63, "h": 84 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 63, "y": 147, "w": 63, "h": 84 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 0, "w": 63, "h": 84 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 446, "y": 203, "w": 63, "h": 82 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 2, "w": 63, "h": 82 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 509, "y": 335, "w": 63, "h": 79 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 5, "w": 63, "h": 79 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 74, "y": 375, "w": 66, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 10, "w": 66, "h": 74 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0012.png", + "frame": { "x": 140, "y": 409, "w": 69, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 15, "w": 69, "h": 69 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0013.png", + "frame": { "x": 280, "y": 428, "w": 72, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 18, "w": 72, "h": 66 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0014.png", + "frame": { "x": 353, "y": 416, "w": 74, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 19, "w": 74, "h": 65 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0015.png", + "frame": { "x": 536, "y": 414, "w": 74, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 19, "w": 74, "h": 65 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0016.png", + "frame": { "x": 461, "y": 414, "w": 75, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 19, "w": 75, "h": 65 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0017.png", + "frame": { "x": 385, "y": 351, "w": 76, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 19, "w": 76, "h": 65 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0018.png", + "frame": { "x": 231, "y": 291, "w": 78, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 19, "w": 78, "h": 65 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0019.png", + "frame": { "x": 277, "y": 226, "w": 79, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 19, "w": 79, "h": 65 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0020.png", + "frame": { "x": 485, "y": 137, "w": 81, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 18, "w": 81, "h": 66 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0021.png", + "frame": { "x": 228, "y": 143, "w": 81, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 18, "w": 81, "h": 66 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0022.png", + "frame": { "x": 228, "y": 75, "w": 80, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 16, "w": 80, "h": 68 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0023.png", + "frame": { "x": 491, "y": 0, "w": 79, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 13, "w": 79, "h": 71 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0024.png", + "frame": { "x": 341, "y": 0, "w": 77, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 11, "w": 77, "h": 73 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0025.png", + "frame": { "x": 265, "y": 0, "w": 76, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 9, "w": 76, "h": 75 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0026.png", + "frame": { "x": 418, "y": 0, "w": 73, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 7, "w": 73, "h": 77 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0027.png", + "frame": { "x": 159, "y": 68, "w": 69, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 4, "w": 69, "h": 80 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0028.png", + "frame": { "x": 309, "y": 143, "w": 64, "h": 83 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 1, "w": 64, "h": 83 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0029.png", + "frame": { "x": 0, "y": 145, "w": 63, "h": 84 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 0, "w": 63, "h": 84 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0030.png", + "frame": { "x": 63, "y": 147, "w": 63, "h": 84 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 0, "w": 63, "h": 84 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0031.png", + "frame": { "x": 446, "y": 203, "w": 63, "h": 82 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 2, "w": 63, "h": 82 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0032.png", + "frame": { "x": 509, "y": 335, "w": 63, "h": 79 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 5, "w": 63, "h": 79 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0033.png", + "frame": { "x": 74, "y": 375, "w": 66, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 10, "w": 66, "h": 74 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0034.png", + "frame": { "x": 140, "y": 409, "w": 69, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 15, "w": 69, "h": 69 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0035.png", + "frame": { "x": 280, "y": 428, "w": 72, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 18, "w": 72, "h": 66 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0036.png", + "frame": { "x": 353, "y": 416, "w": 74, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 19, "w": 74, "h": 65 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0037.png", + "frame": { "x": 536, "y": 414, "w": 74, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 19, "w": 74, "h": 65 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0038.png", + "frame": { "x": 461, "y": 414, "w": 75, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 19, "w": 75, "h": 65 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0039.png", + "frame": { "x": 385, "y": 351, "w": 76, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 19, "w": 76, "h": 65 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0040.png", + "frame": { "x": 231, "y": 291, "w": 78, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 19, "w": 78, "h": 65 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0041.png", + "frame": { "x": 277, "y": 226, "w": 79, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 19, "w": 79, "h": 65 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0042.png", + "frame": { "x": 485, "y": 137, "w": 81, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 18, "w": 81, "h": 66 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0043.png", + "frame": { "x": 228, "y": 143, "w": 81, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 18, "w": 81, "h": 66 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0044.png", + "frame": { "x": 228, "y": 75, "w": 80, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 16, "w": 80, "h": 68 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0045.png", + "frame": { "x": 491, "y": 0, "w": 79, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 13, "w": 79, "h": 71 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0046.png", + "frame": { "x": 341, "y": 0, "w": 77, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 11, "w": 77, "h": 73 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0047.png", + "frame": { "x": 265, "y": 0, "w": 76, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 9, "w": 76, "h": 75 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0048.png", + "frame": { "x": 418, "y": 0, "w": 73, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 7, "w": 73, "h": 77 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0049.png", + "frame": { "x": 159, "y": 68, "w": 69, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 4, "w": 69, "h": 80 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0050.png", + "frame": { "x": 309, "y": 143, "w": 64, "h": 83 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 1, "w": 64, "h": 83 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0051.png", + "frame": { "x": 0, "y": 145, "w": 63, "h": 84 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 0, "w": 63, "h": 84 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0052.png", + "frame": { "x": 63, "y": 147, "w": 63, "h": 84 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 0, "w": 63, "h": 84 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0053.png", + "frame": { "x": 446, "y": 203, "w": 63, "h": 82 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 2, "w": 63, "h": 82 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0054.png", + "frame": { "x": 509, "y": 335, "w": 63, "h": 79 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 5, "w": 63, "h": 79 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0055.png", + "frame": { "x": 74, "y": 375, "w": 66, "h": 74 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 10, "w": 66, "h": 74 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0056.png", + "frame": { "x": 140, "y": 409, "w": 69, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 15, "w": 69, "h": 69 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0057.png", + "frame": { "x": 280, "y": 428, "w": 72, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 18, "w": 72, "h": 66 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0058.png", + "frame": { "x": 353, "y": 416, "w": 74, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 19, "w": 74, "h": 65 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0059.png", + "frame": { "x": 536, "y": 414, "w": 74, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 19, "w": 74, "h": 65 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0060.png", + "frame": { "x": 461, "y": 414, "w": 75, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 19, "w": 75, "h": 65 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0061.png", + "frame": { "x": 385, "y": 351, "w": 76, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 19, "w": 76, "h": 65 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0062.png", + "frame": { "x": 231, "y": 291, "w": 78, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 19, "w": 78, "h": 65 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0063.png", + "frame": { "x": 277, "y": 226, "w": 79, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 19, "w": 79, "h": 65 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0064.png", + "frame": { "x": 485, "y": 137, "w": 81, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 18, "w": 81, "h": 66 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0065.png", + "frame": { "x": 228, "y": 143, "w": 81, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 18, "w": 81, "h": 66 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0066.png", + "frame": { "x": 228, "y": 75, "w": 80, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 16, "w": 80, "h": 68 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0067.png", + "frame": { "x": 341, "y": 73, "w": 77, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 14, "w": 77, "h": 70 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0068.png", + "frame": { "x": 373, "y": 157, "w": 73, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 12, "w": 73, "h": 72 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0069.png", + "frame": { "x": 213, "y": 356, "w": 67, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 11, "w": 67, "h": 73 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0070.png", + "frame": { "x": 0, "y": 429, "w": 63, "h": 75 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 9, "w": 63, "h": 75 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0071.png", + "frame": { "x": 76, "y": 297, "w": 64, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 6, "w": 64, "h": 78 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0072.png", + "frame": { "x": 418, "y": 77, "w": 67, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 4, "w": 67, "h": 80 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0073.png", + "frame": { "x": 89, "y": 67, "w": 70, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 70, "h": 80 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0074.png", + "frame": { "x": 0, "y": 68, "w": 72, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 7, "w": 72, "h": 77 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0075.png", + "frame": { "x": 126, "y": 148, "w": 73, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 12, "w": 73, "h": 72 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0076.png", + "frame": { "x": 140, "y": 341, "w": 73, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 16, "w": 73, "h": 68 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0077.png", + "frame": { "x": 280, "y": 361, "w": 73, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 17, "w": 73, "h": 67 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0078.png", + "frame": { "x": 0, "y": 363, "w": 74, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 18, "w": 74, "h": 66 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0079.png", + "frame": { "x": 433, "y": 285, "w": 76, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 18, "w": 76, "h": 66 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0080.png", + "frame": { "x": 509, "y": 269, "w": 77, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 18, "w": 77, "h": 66 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0081.png", + "frame": { "x": 356, "y": 229, "w": 77, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 18, "w": 77, "h": 66 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0082.png", + "frame": { "x": 199, "y": 209, "w": 78, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 18, "w": 78, "h": 66 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0083.png", + "frame": { "x": 509, "y": 203, "w": 78, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 18, "w": 78, "h": 66 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0084.png", + "frame": { "x": 0, "y": 231, "w": 77, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 18, "w": 77, "h": 66 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0085.png", + "frame": { "x": 77, "y": 231, "w": 77, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 18, "w": 77, "h": 66 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0086.png", + "frame": { "x": 0, "y": 297, "w": 76, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 18, "w": 76, "h": 66 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0087.png", + "frame": { "x": 309, "y": 295, "w": 76, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 18, "w": 76, "h": 66 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0088.png", + "frame": { "x": 154, "y": 275, "w": 77, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 18, "w": 77, "h": 66 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0089.png", + "frame": { "x": 491, "y": 71, "w": 83, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 18, "w": 83, "h": 66 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0090.png", + "frame": { "x": 89, "y": 0, "w": 89, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 17, "w": 89, "h": 67 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0091.png", + "frame": { "x": 0, "y": 0, "w": 89, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 16, "w": 89, "h": 68 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + }, + { + "filename": "0092.png", + "frame": { "x": 178, "y": 0, "w": 87, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 16, "w": 87, "h": 68 }, + "sourceSize": { "w": 91, "h": 84 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.13-x64", + "image": "730.png", + "format": "I8", + "size": { "w": 610, "h": 504 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/shiny/730.png b/public/images/pokemon/exp/shiny/730.png index 95c48184ce1..d11ef725a95 100644 Binary files a/public/images/pokemon/exp/shiny/730.png and b/public/images/pokemon/exp/shiny/730.png differ diff --git a/public/images/pokemon/exp/shiny/746-school.json b/public/images/pokemon/exp/shiny/746-school.json index b7f0eb850ce..6c247e5a748 100644 --- a/public/images/pokemon/exp/shiny/746-school.json +++ b/public/images/pokemon/exp/shiny/746-school.json @@ -1,272 +1,191 @@ -{ - "textures": [ - { - "image": "746-school.png", - "format": "RGBA8888", - "size": { - "w": 268, - "h": 268 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 102, - "h": 73 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 95, - "h": 73 - }, - "frame": { - "x": 0, - "y": 0, - "w": 95, - "h": 73 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 102, - "h": 73 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 94, - "h": 73 - }, - "frame": { - "x": 0, - "y": 73, - "w": 94, - "h": 73 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 102, - "h": 73 - }, - "spriteSourceSize": { - "x": 7, - "y": 0, - "w": 94, - "h": 73 - }, - "frame": { - "x": 0, - "y": 73, - "w": 94, - "h": 73 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 102, - "h": 73 - }, - "spriteSourceSize": { - "x": 5, - "y": 1, - "w": 93, - "h": 71 - }, - "frame": { - "x": 95, - "y": 0, - "w": 93, - "h": 71 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 102, - "h": 73 - }, - "spriteSourceSize": { - "x": 5, - "y": 1, - "w": 93, - "h": 71 - }, - "frame": { - "x": 95, - "y": 0, - "w": 93, - "h": 71 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 102, - "h": 73 - }, - "spriteSourceSize": { - "x": 3, - "y": 3, - "w": 92, - "h": 69 - }, - "frame": { - "x": 0, - "y": 146, - "w": 92, - "h": 69 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 102, - "h": 73 - }, - "spriteSourceSize": { - "x": 3, - "y": 3, - "w": 92, - "h": 69 - }, - "frame": { - "x": 0, - "y": 146, - "w": 92, - "h": 69 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 102, - "h": 73 - }, - "spriteSourceSize": { - "x": 1, - "y": 5, - "w": 91, - "h": 67 - }, - "frame": { - "x": 95, - "y": 71, - "w": 91, - "h": 67 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 102, - "h": 73 - }, - "spriteSourceSize": { - "x": 1, - "y": 5, - "w": 91, - "h": 67 - }, - "frame": { - "x": 95, - "y": 71, - "w": 91, - "h": 67 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 102, - "h": 73 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 91, - "h": 66 - }, - "frame": { - "x": 94, - "y": 138, - "w": 91, - "h": 66 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 102, - "h": 73 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 91, - "h": 66 - }, - "frame": { - "x": 94, - "y": 138, - "w": 91, - "h": 66 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 102, - "h": 73 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 90, - "h": 64 - }, - "frame": { - "x": 92, - "y": 204, - "w": 90, - "h": 64 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:f61c85d6091a44a8febf21b84b5b2d80:81aec8099fbc1e00afe72d9fc67a0c1e:10f3c9d1f1118f8f9f6e40f37a0eb499$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 399, "y": 250, "w": 94, "h": 81 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 7, "w": 94, "h": 81 }, + "sourceSize": { "w": 104, "h": 89 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 402, "y": 169, "w": 97, "h": 81 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 6, "w": 97, "h": 81 }, + "sourceSize": { "w": 104, "h": 89 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 304, "y": 170, "w": 95, "h": 82 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 6, "w": 95, "h": 82 }, + "sourceSize": { "w": 104, "h": 89 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 402, "y": 86, "w": 99, "h": 83 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 5, "w": 99, "h": 83 }, + "sourceSize": { "w": 104, "h": 89 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 304, "y": 86, "w": 98, "h": 84 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 4, "w": 98, "h": 84 }, + "sourceSize": { "w": 104, "h": 89 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 208, "y": 0, "w": 102, "h": 86 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 102, "h": 86 }, + "sourceSize": { "w": 104, "h": 89 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 310, "y": 0, "w": 102, "h": 86 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 102, "h": 86 }, + "sourceSize": { "w": 104, "h": 89 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 0, "y": 0, "w": 104, "h": 87 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 104, "h": 87 }, + "sourceSize": { "w": 104, "h": 89 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 412, "y": 0, "w": 102, "h": 86 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 102, "h": 86 }, + "sourceSize": { "w": 104, "h": 89 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 104, "y": 0, "w": 104, "h": 86 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 1, "w": 104, "h": 86 }, + "sourceSize": { "w": 104, "h": 89 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 104, "y": 86, "w": 100, "h": 85 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 100, "h": 85 }, + "sourceSize": { "w": 104, "h": 89 }, + "duration": 100 + }, + { + "filename": "0012.png", + "frame": { "x": 204, "y": 86, "w": 100, "h": 85 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 0, "w": 100, "h": 85 }, + "sourceSize": { "w": 104, "h": 89 }, + "duration": 100 + }, + { + "filename": "0013.png", + "frame": { "x": 0, "y": 87, "w": 95, "h": 83 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 95, "h": 83 }, + "sourceSize": { "w": 104, "h": 89 }, + "duration": 100 + }, + { + "filename": "0014.png", + "frame": { "x": 0, "y": 170, "w": 94, "h": 83 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 94, "h": 83 }, + "sourceSize": { "w": 104, "h": 89 }, + "duration": 100 + }, + { + "filename": "0015.png", + "frame": { "x": 282, "y": 252, "w": 90, "h": 83 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 3, "w": 90, "h": 83 }, + "sourceSize": { "w": 104, "h": 89 }, + "duration": 100 + }, + { + "filename": "0016.png", + "frame": { "x": 187, "y": 253, "w": 89, "h": 82 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 5, "w": 89, "h": 82 }, + "sourceSize": { "w": 104, "h": 89 }, + "duration": 100 + }, + { + "filename": "0017.png", + "frame": { "x": 189, "y": 171, "w": 93, "h": 82 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 6, "w": 93, "h": 82 }, + "sourceSize": { "w": 104, "h": 89 }, + "duration": 100 + }, + { + "filename": "0018.png", + "frame": { "x": 0, "y": 253, "w": 91, "h": 81 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 6, "w": 91, "h": 81 }, + "sourceSize": { "w": 104, "h": 89 }, + "duration": 100 + }, + { + "filename": "0019.png", + "frame": { "x": 94, "y": 252, "w": 93, "h": 81 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 6, "w": 93, "h": 81 }, + "sourceSize": { "w": 104, "h": 89 }, + "duration": 100 + }, + { + "filename": "0020.png", + "frame": { "x": 94, "y": 171, "w": 95, "h": 81 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 7, "w": 95, "h": 81 }, + "sourceSize": { "w": 104, "h": 89 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.13-x64", + "image": "746-school.png", + "format": "I8", + "size": { "w": 514, "h": 335 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/shiny/746-school.png b/public/images/pokemon/exp/shiny/746-school.png index 76452380aee..a665f1a61ac 100644 Binary files a/public/images/pokemon/exp/shiny/746-school.png and b/public/images/pokemon/exp/shiny/746-school.png differ diff --git a/public/images/pokemon/exp/shiny/746.json b/public/images/pokemon/exp/shiny/746.json index 2f5d3a25ec3..b2e337f88b6 100644 --- a/public/images/pokemon/exp/shiny/746.json +++ b/public/images/pokemon/exp/shiny/746.json @@ -1,272 +1,640 @@ -{ - "textures": [ - { - "image": "746.png", - "format": "RGBA8888", - "size": { - "w": 134, - "h": 134 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 46, - "h": 28 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 46, - "h": 28 - }, - "frame": { - "x": 0, - "y": 0, - "w": 46, - "h": 28 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 46, - "h": 28 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 46, - "h": 28 - }, - "frame": { - "x": 0, - "y": 28, - "w": 46, - "h": 28 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 46, - "h": 28 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 46, - "h": 28 - }, - "frame": { - "x": 0, - "y": 56, - "w": 46, - "h": 28 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 46, - "h": 28 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 46, - "h": 28 - }, - "frame": { - "x": 0, - "y": 56, - "w": 46, - "h": 28 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 46, - "h": 28 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 46, - "h": 28 - }, - "frame": { - "x": 0, - "y": 84, - "w": 46, - "h": 28 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 28 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 46, - "h": 27 - }, - "frame": { - "x": 46, - "y": 0, - "w": 46, - "h": 27 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 28 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 46, - "h": 27 - }, - "frame": { - "x": 46, - "y": 0, - "w": 46, - "h": 27 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 28 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 46, - "h": 27 - }, - "frame": { - "x": 46, - "y": 27, - "w": 46, - "h": 27 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 28 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 46, - "h": 27 - }, - "frame": { - "x": 46, - "y": 27, - "w": 46, - "h": 27 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 28 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 46, - "h": 27 - }, - "frame": { - "x": 46, - "y": 54, - "w": 46, - "h": 27 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 28 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 46, - "h": 27 - }, - "frame": { - "x": 46, - "y": 81, - "w": 46, - "h": 27 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 46, - "h": 28 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 46, - "h": 26 - }, - "frame": { - "x": 46, - "y": 108, - "w": 46, - "h": 26 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:04628da78c1edc5312a2f63421c7e3ac:e873c63c890ae42fc6938426a6ebd38d:1a4f7e535d823202c4828f963d5b4404$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 0, "y": 0, "w": 37, "h": 23 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 41, "w": 37, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0002.png", + "frame": { "x": 37, "y": 23, "w": 33, "h": 23 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 41, "w": 33, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0003.png", + "frame": { "x": 0, "y": 0, "w": 37, "h": 23 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 41, "w": 37, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0004.png", + "frame": { "x": 37, "y": 23, "w": 33, "h": 23 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 41, "w": 33, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0005.png", + "frame": { "x": 0, "y": 0, "w": 37, "h": 23 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 41, "w": 37, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0006.png", + "frame": { "x": 37, "y": 23, "w": 33, "h": 23 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 42, "w": 33, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0007.png", + "frame": { "x": 0, "y": 0, "w": 37, "h": 23 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 44, "w": 37, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0008.png", + "frame": { "x": 37, "y": 23, "w": 33, "h": 23 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 46, "w": 33, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0009.png", + "frame": { "x": 0, "y": 0, "w": 37, "h": 23 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 47, "w": 37, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0010.png", + "frame": { "x": 37, "y": 23, "w": 33, "h": 23 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 48, "w": 33, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0011.png", + "frame": { "x": 0, "y": 0, "w": 37, "h": 23 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 48, "w": 37, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0012.png", + "frame": { "x": 37, "y": 23, "w": 33, "h": 23 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 48, "w": 33, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0013.png", + "frame": { "x": 0, "y": 0, "w": 37, "h": 23 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 48, "w": 37, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0014.png", + "frame": { "x": 37, "y": 23, "w": 33, "h": 23 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 48, "w": 33, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0015.png", + "frame": { "x": 0, "y": 0, "w": 37, "h": 23 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 47, "w": 37, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0016.png", + "frame": { "x": 37, "y": 23, "w": 33, "h": 23 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 46, "w": 33, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0017.png", + "frame": { "x": 0, "y": 0, "w": 37, "h": 23 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 44, "w": 37, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0018.png", + "frame": { "x": 37, "y": 23, "w": 33, "h": 23 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 42, "w": 33, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0019.png", + "frame": { "x": 0, "y": 0, "w": 37, "h": 23 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 41, "w": 37, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0020.png", + "frame": { "x": 37, "y": 23, "w": 33, "h": 23 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 41, "w": 33, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0021.png", + "frame": { "x": 0, "y": 0, "w": 37, "h": 23 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 41, "w": 37, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0022.png", + "frame": { "x": 37, "y": 23, "w": 33, "h": 23 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 41, "w": 33, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0023.png", + "frame": { "x": 0, "y": 0, "w": 37, "h": 23 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 41, "w": 37, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0024.png", + "frame": { "x": 37, "y": 23, "w": 33, "h": 23 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 42, "w": 33, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0025.png", + "frame": { "x": 0, "y": 0, "w": 37, "h": 23 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 44, "w": 37, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0026.png", + "frame": { "x": 37, "y": 23, "w": 33, "h": 23 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 46, "w": 33, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0027.png", + "frame": { "x": 0, "y": 0, "w": 37, "h": 23 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 47, "w": 37, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0028.png", + "frame": { "x": 37, "y": 23, "w": 33, "h": 23 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 48, "w": 33, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0029.png", + "frame": { "x": 0, "y": 0, "w": 37, "h": 23 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 48, "w": 37, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0030.png", + "frame": { "x": 37, "y": 23, "w": 33, "h": 23 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 48, "w": 33, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0031.png", + "frame": { "x": 0, "y": 0, "w": 37, "h": 23 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 48, "w": 37, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0032.png", + "frame": { "x": 37, "y": 23, "w": 33, "h": 23 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 48, "w": 33, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0033.png", + "frame": { "x": 0, "y": 0, "w": 37, "h": 23 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 47, "w": 37, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0034.png", + "frame": { "x": 37, "y": 23, "w": 33, "h": 23 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 46, "w": 33, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0035.png", + "frame": { "x": 0, "y": 0, "w": 37, "h": 23 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 44, "w": 37, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0036.png", + "frame": { "x": 37, "y": 23, "w": 33, "h": 23 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 42, "w": 33, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0037.png", + "frame": { "x": 37, "y": 0, "w": 37, "h": 23 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 41, "w": 37, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0038.png", + "frame": { "x": 70, "y": 23, "w": 33, "h": 23 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 41, "w": 33, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0039.png", + "frame": { "x": 74, "y": 0, "w": 37, "h": 23 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 41, "w": 37, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0040.png", + "frame": { "x": 0, "y": 46, "w": 33, "h": 23 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 41, "w": 33, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0041.png", + "frame": { "x": 74, "y": 0, "w": 37, "h": 23 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 41, "w": 37, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0042.png", + "frame": { "x": 0, "y": 46, "w": 33, "h": 23 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 42, "w": 33, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0043.png", + "frame": { "x": 74, "y": 0, "w": 37, "h": 23 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 44, "w": 37, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0044.png", + "frame": { "x": 0, "y": 46, "w": 33, "h": 23 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 46, "w": 33, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0045.png", + "frame": { "x": 74, "y": 0, "w": 37, "h": 23 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 47, "w": 37, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0046.png", + "frame": { "x": 0, "y": 46, "w": 33, "h": 23 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 48, "w": 33, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0047.png", + "frame": { "x": 74, "y": 0, "w": 37, "h": 23 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 48, "w": 37, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0048.png", + "frame": { "x": 0, "y": 46, "w": 33, "h": 23 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 48, "w": 33, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0049.png", + "frame": { "x": 74, "y": 0, "w": 37, "h": 23 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 48, "w": 37, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0050.png", + "frame": { "x": 0, "y": 46, "w": 33, "h": 23 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 48, "w": 33, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0051.png", + "frame": { "x": 74, "y": 0, "w": 37, "h": 23 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 47, "w": 37, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0052.png", + "frame": { "x": 0, "y": 46, "w": 33, "h": 23 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 46, "w": 33, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0053.png", + "frame": { "x": 74, "y": 0, "w": 37, "h": 23 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 44, "w": 37, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0054.png", + "frame": { "x": 0, "y": 46, "w": 33, "h": 23 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 41, "w": 33, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0055.png", + "frame": { "x": 74, "y": 0, "w": 37, "h": 23 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 41, "w": 37, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0056.png", + "frame": { "x": 0, "y": 46, "w": 33, "h": 23 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 41, "w": 33, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0057.png", + "frame": { "x": 74, "y": 0, "w": 37, "h": 23 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 41, "w": 37, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0058.png", + "frame": { "x": 0, "y": 46, "w": 33, "h": 23 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 42, "w": 33, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0059.png", + "frame": { "x": 74, "y": 0, "w": 37, "h": 23 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 44, "w": 37, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0060.png", + "frame": { "x": 0, "y": 46, "w": 33, "h": 23 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 46, "w": 33, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0061.png", + "frame": { "x": 74, "y": 0, "w": 37, "h": 23 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 47, "w": 37, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0062.png", + "frame": { "x": 0, "y": 46, "w": 33, "h": 23 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 48, "w": 33, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0063.png", + "frame": { "x": 74, "y": 0, "w": 37, "h": 23 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 48, "w": 37, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0064.png", + "frame": { "x": 0, "y": 46, "w": 33, "h": 23 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 48, "w": 33, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0065.png", + "frame": { "x": 74, "y": 0, "w": 37, "h": 23 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 48, "w": 37, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0066.png", + "frame": { "x": 0, "y": 46, "w": 33, "h": 23 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 48, "w": 33, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0067.png", + "frame": { "x": 74, "y": 0, "w": 37, "h": 23 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 47, "w": 37, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0068.png", + "frame": { "x": 0, "y": 46, "w": 33, "h": 23 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 46, "w": 33, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0069.png", + "frame": { "x": 0, "y": 23, "w": 37, "h": 23 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 44, "w": 37, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + }, + { + "filename": "0070.png", + "frame": { "x": 33, "y": 46, "w": 33, "h": 23 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 28, "y": 42, "w": 33, "h": 23 }, + "sourceSize": { "w": 96, "h": 96 }, + "duration": 110 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.13-x64", + "format": "I8", + "size": { "w": 111, "h": 69 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/shiny/746.png b/public/images/pokemon/exp/shiny/746.png index 4d85fde2f09..f2033a0652f 100644 Binary files a/public/images/pokemon/exp/shiny/746.png and b/public/images/pokemon/exp/shiny/746.png differ diff --git a/public/images/pokemon/exp/shiny/749.json b/public/images/pokemon/exp/shiny/749.json index 3e66edcc872..d2dc11ec112 100644 --- a/public/images/pokemon/exp/shiny/749.json +++ b/public/images/pokemon/exp/shiny/749.json @@ -1,272 +1,1028 @@ -{ - "textures": [ - { - "image": "749.png", - "format": "RGBA8888", - "size": { - "w": 170, - "h": 170 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 45, - "h": 58 - }, - "frame": { - "x": 0, - "y": 0, - "w": 45, - "h": 58 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 45, - "h": 58 - }, - "frame": { - "x": 45, - "y": 0, - "w": 45, - "h": 58 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 45, - "h": 58 - }, - "frame": { - "x": 45, - "y": 0, - "w": 45, - "h": 58 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 44, - "h": 58 - }, - "frame": { - "x": 90, - "y": 0, - "w": 44, - "h": 58 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 44, - "h": 58 - }, - "frame": { - "x": 90, - "y": 0, - "w": 44, - "h": 58 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 43, - "h": 58 - }, - "frame": { - "x": 0, - "y": 58, - "w": 43, - "h": 58 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 43, - "h": 58 - }, - "frame": { - "x": 0, - "y": 58, - "w": 43, - "h": 58 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 43, - "h": 58 - }, - "frame": { - "x": 43, - "y": 58, - "w": 43, - "h": 58 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 43, - "h": 58 - }, - "frame": { - "x": 43, - "y": 58, - "w": 43, - "h": 58 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 42, - "h": 58 - }, - "frame": { - "x": 86, - "y": 58, - "w": 42, - "h": 58 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 42, - "h": 58 - }, - "frame": { - "x": 86, - "y": 58, - "w": 42, - "h": 58 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 45, - "h": 58 - }, - "spriteSourceSize": { - "x": 3, - "y": 0, - "w": 42, - "h": 58 - }, - "frame": { - "x": 128, - "y": 58, - "w": 42, - "h": 58 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:3750962b7bf97de47e92eb3b3ea2046a:4f6ed853d2816fb61ade7e448ae31f37:d52e05c524384ef985e6339a08b2f938$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 0, "y": 231, "w": 46, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 15, "w": 46, "h": 56 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 0, "y": 175, "w": 47, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 15, "w": 47, "h": 56 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 290, "y": 69, "w": 49, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 16, "w": 49, "h": 55 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 46, "y": 122, "w": 50, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 18, "w": 50, "h": 53 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 239, "y": 69, "w": 51, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 18, "w": 51, "h": 53 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 46, "y": 69, "w": 51, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 18, "w": 51, "h": 53 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 235, "y": 122, "w": 50, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 18, "w": 50, "h": 53 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 186, "y": 119, "w": 49, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 16, "w": 49, "h": 55 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 47, "y": 175, "w": 47, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 15, "w": 47, "h": 56 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 136, "y": 120, "w": 46, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 13, "w": 46, "h": 58 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 136, "y": 178, "w": 45, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 13, "w": 45, "h": 58 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0012.png", + "frame": { "x": 92, "y": 231, "w": 44, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 13, "w": 44, "h": 58 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0013.png", + "frame": { "x": 322, "y": 287, "w": 44, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 14, "w": 44, "h": 57 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0014.png", + "frame": { "x": 231, "y": 175, "w": 46, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 14, "w": 46, "h": 57 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0015.png", + "frame": { "x": 0, "y": 231, "w": 46, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 15, "w": 46, "h": 56 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0016.png", + "frame": { "x": 0, "y": 175, "w": 47, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 15, "w": 47, "h": 56 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0017.png", + "frame": { "x": 290, "y": 69, "w": 49, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 16, "w": 49, "h": 55 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0018.png", + "frame": { "x": 46, "y": 122, "w": 50, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 18, "w": 50, "h": 53 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0019.png", + "frame": { "x": 239, "y": 69, "w": 51, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 18, "w": 51, "h": 53 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0020.png", + "frame": { "x": 46, "y": 69, "w": 51, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 18, "w": 51, "h": 53 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0021.png", + "frame": { "x": 235, "y": 122, "w": 50, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 18, "w": 50, "h": 53 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0022.png", + "frame": { "x": 186, "y": 119, "w": 49, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 16, "w": 49, "h": 55 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0023.png", + "frame": { "x": 47, "y": 175, "w": 47, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 15, "w": 47, "h": 56 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0024.png", + "frame": { "x": 136, "y": 120, "w": 46, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 13, "w": 46, "h": 58 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0025.png", + "frame": { "x": 136, "y": 178, "w": 45, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 13, "w": 45, "h": 58 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0026.png", + "frame": { "x": 92, "y": 231, "w": 44, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 13, "w": 44, "h": 58 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0027.png", + "frame": { "x": 322, "y": 287, "w": 44, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 14, "w": 44, "h": 57 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0028.png", + "frame": { "x": 231, "y": 175, "w": 46, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 14, "w": 46, "h": 57 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0029.png", + "frame": { "x": 0, "y": 231, "w": 46, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 15, "w": 46, "h": 56 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0030.png", + "frame": { "x": 128, "y": 336, "w": 46, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 17, "w": 46, "h": 54 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0031.png", + "frame": { "x": 136, "y": 283, "w": 48, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 18, "w": 48, "h": 53 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0032.png", + "frame": { "x": 219, "y": 340, "w": 45, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 13, "w": 45, "h": 55 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0033.png", + "frame": { "x": 85, "y": 289, "w": 43, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 9, "w": 43, "h": 58 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0034.png", + "frame": { "x": 0, "y": 343, "w": 41, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 4, "w": 41, "h": 60 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0035.png", + "frame": { "x": 174, "y": 338, "w": 45, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 8, "w": 45, "h": 55 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0036.png", + "frame": { "x": 276, "y": 233, "w": 48, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 12, "w": 48, "h": 53 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0037.png", + "frame": { "x": 228, "y": 232, "w": 48, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 15, "w": 48, "h": 53 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0038.png", + "frame": { "x": 184, "y": 285, "w": 48, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 18, "w": 48, "h": 53 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0039.png", + "frame": { "x": 324, "y": 233, "w": 47, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 17, "w": 47, "h": 54 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0040.png", + "frame": { "x": 181, "y": 228, "w": 47, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 16, "w": 47, "h": 55 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0041.png", + "frame": { "x": 0, "y": 231, "w": 46, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 15, "w": 46, "h": 56 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0042.png", + "frame": { "x": 0, "y": 175, "w": 47, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 15, "w": 47, "h": 56 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0043.png", + "frame": { "x": 290, "y": 69, "w": 49, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 16, "w": 49, "h": 55 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0044.png", + "frame": { "x": 46, "y": 122, "w": 50, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 18, "w": 50, "h": 53 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0045.png", + "frame": { "x": 239, "y": 69, "w": 51, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 18, "w": 51, "h": 53 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0046.png", + "frame": { "x": 46, "y": 69, "w": 51, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 18, "w": 51, "h": 53 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0047.png", + "frame": { "x": 235, "y": 122, "w": 50, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 18, "w": 50, "h": 53 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0048.png", + "frame": { "x": 186, "y": 119, "w": 49, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 16, "w": 49, "h": 55 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0049.png", + "frame": { "x": 47, "y": 175, "w": 47, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 15, "w": 47, "h": 56 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0050.png", + "frame": { "x": 136, "y": 120, "w": 46, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 13, "w": 46, "h": 58 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0051.png", + "frame": { "x": 136, "y": 178, "w": 45, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 13, "w": 45, "h": 58 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0052.png", + "frame": { "x": 92, "y": 231, "w": 44, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 13, "w": 44, "h": 58 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0053.png", + "frame": { "x": 322, "y": 287, "w": 44, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 14, "w": 44, "h": 57 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0054.png", + "frame": { "x": 231, "y": 175, "w": 46, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 14, "w": 46, "h": 57 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0055.png", + "frame": { "x": 0, "y": 231, "w": 46, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 15, "w": 46, "h": 56 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0056.png", + "frame": { "x": 128, "y": 336, "w": 46, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 17, "w": 46, "h": 54 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0057.png", + "frame": { "x": 136, "y": 283, "w": 48, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 18, "w": 48, "h": 53 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0058.png", + "frame": { "x": 219, "y": 340, "w": 45, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 13, "w": 45, "h": 55 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0059.png", + "frame": { "x": 85, "y": 289, "w": 43, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 9, "w": 43, "h": 58 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0060.png", + "frame": { "x": 0, "y": 343, "w": 41, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 4, "w": 41, "h": 60 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0061.png", + "frame": { "x": 174, "y": 338, "w": 45, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 8, "w": 45, "h": 55 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0062.png", + "frame": { "x": 276, "y": 233, "w": 48, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 12, "w": 48, "h": 53 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0063.png", + "frame": { "x": 228, "y": 232, "w": 48, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 15, "w": 48, "h": 53 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0064.png", + "frame": { "x": 184, "y": 285, "w": 48, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 18, "w": 48, "h": 53 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0065.png", + "frame": { "x": 324, "y": 233, "w": 47, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 17, "w": 47, "h": 54 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0066.png", + "frame": { "x": 181, "y": 228, "w": 47, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 16, "w": 47, "h": 55 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0067.png", + "frame": { "x": 0, "y": 231, "w": 46, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 15, "w": 46, "h": 56 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0068.png", + "frame": { "x": 128, "y": 336, "w": 46, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 17, "w": 46, "h": 54 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0069.png", + "frame": { "x": 136, "y": 283, "w": 48, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 18, "w": 48, "h": 53 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0070.png", + "frame": { "x": 219, "y": 340, "w": 45, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 13, "w": 45, "h": 55 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0071.png", + "frame": { "x": 85, "y": 289, "w": 43, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 9, "w": 43, "h": 58 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0072.png", + "frame": { "x": 0, "y": 343, "w": 41, "h": 60 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 4, "w": 41, "h": 60 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0073.png", + "frame": { "x": 174, "y": 338, "w": 45, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 8, "w": 45, "h": 55 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0074.png", + "frame": { "x": 276, "y": 233, "w": 48, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 12, "w": 48, "h": 53 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0075.png", + "frame": { "x": 228, "y": 232, "w": 48, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 15, "w": 48, "h": 53 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0076.png", + "frame": { "x": 184, "y": 285, "w": 48, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 18, "w": 48, "h": 53 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0077.png", + "frame": { "x": 324, "y": 233, "w": 47, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 17, "w": 47, "h": 54 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0078.png", + "frame": { "x": 181, "y": 228, "w": 47, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 16, "w": 47, "h": 55 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0079.png", + "frame": { "x": 0, "y": 231, "w": 46, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 15, "w": 46, "h": 56 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0080.png", + "frame": { "x": 0, "y": 175, "w": 47, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 15, "w": 47, "h": 56 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0081.png", + "frame": { "x": 290, "y": 69, "w": 49, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 16, "w": 49, "h": 55 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0082.png", + "frame": { "x": 46, "y": 122, "w": 50, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 18, "w": 50, "h": 53 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0083.png", + "frame": { "x": 239, "y": 69, "w": 51, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 18, "w": 51, "h": 53 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0084.png", + "frame": { "x": 46, "y": 69, "w": 51, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 18, "w": 51, "h": 53 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0085.png", + "frame": { "x": 235, "y": 122, "w": 50, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 18, "w": 50, "h": 53 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0086.png", + "frame": { "x": 186, "y": 119, "w": 49, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 16, "w": 49, "h": 55 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0087.png", + "frame": { "x": 47, "y": 175, "w": 47, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 15, "w": 47, "h": 56 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0088.png", + "frame": { "x": 136, "y": 120, "w": 46, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 13, "w": 46, "h": 58 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0089.png", + "frame": { "x": 136, "y": 178, "w": 45, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 13, "w": 45, "h": 58 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0090.png", + "frame": { "x": 92, "y": 231, "w": 44, "h": 58 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 13, "w": 44, "h": 58 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0091.png", + "frame": { "x": 322, "y": 287, "w": 44, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 14, "w": 44, "h": 57 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0092.png", + "frame": { "x": 231, "y": 175, "w": 46, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 14, "w": 46, "h": 57 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0093.png", + "frame": { "x": 46, "y": 231, "w": 46, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 15, "w": 46, "h": 56 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0094.png", + "frame": { "x": 277, "y": 178, "w": 47, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 16, "w": 47, "h": 55 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0095.png", + "frame": { "x": 285, "y": 124, "w": 49, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 17, "w": 49, "h": 54 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0096.png", + "frame": { "x": 134, "y": 67, "w": 52, "h": 53 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 18, "w": 52, "h": 53 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0097.png", + "frame": { "x": 186, "y": 67, "w": 53, "h": 52 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 19, "w": 53, "h": 52 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0098.png", + "frame": { "x": 223, "y": 0, "w": 50, "h": 57 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 14, "w": 50, "h": 57 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0099.png", + "frame": { "x": 0, "y": 66, "w": 46, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 10, "w": 46, "h": 59 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0100.png", + "frame": { "x": 134, "y": 0, "w": 46, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 6, "w": 46, "h": 63 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0101.png", + "frame": { "x": 0, "y": 0, "w": 47, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 3, "w": 47, "h": 66 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0102.png", + "frame": { "x": 314, "y": 0, "w": 40, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 0, "w": 40, "h": 69 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0103.png", + "frame": { "x": 91, "y": 0, "w": 43, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 0, "w": 43, "h": 69 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0104.png", + "frame": { "x": 97, "y": 120, "w": 39, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 0, "w": 39, "h": 69 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0105.png", + "frame": { "x": 47, "y": 0, "w": 44, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 0, "w": 44, "h": 69 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0106.png", + "frame": { "x": 273, "y": 0, "w": 41, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 0, "w": 41, "h": 69 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0107.png", + "frame": { "x": 180, "y": 0, "w": 43, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 2, "w": 43, "h": 67 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0108.png", + "frame": { "x": 45, "y": 287, "w": 40, "h": 63 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 6, "w": 40, "h": 63 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0109.png", + "frame": { "x": 279, "y": 286, "w": 43, "h": 59 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 10, "w": 43, "h": 59 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0110.png", + "frame": { "x": 0, "y": 287, "w": 45, "h": 56 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 14, "w": 45, "h": 56 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0111.png", + "frame": { "x": 232, "y": 286, "w": 47, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 17, "w": 47, "h": 54 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0112.png", + "frame": { "x": 182, "y": 174, "w": 49, "h": 54 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 17, "w": 49, "h": 54 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + }, + { + "filename": "0113.png", + "frame": { "x": 324, "y": 178, "w": 47, "h": 55 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 16, "w": 47, "h": 55 }, + "sourceSize": { "w": 54, "h": 71 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.13-x64", + "image": "749.png", + "format": "I8", + "size": { "w": 371, "h": 403 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/shiny/749.png b/public/images/pokemon/exp/shiny/749.png index 29bf8edad8b..81013d98e58 100644 Binary files a/public/images/pokemon/exp/shiny/749.png and b/public/images/pokemon/exp/shiny/749.png differ diff --git a/public/images/pokemon/exp/shiny/750.json b/public/images/pokemon/exp/shiny/750.json index 61f838cfcab..7a9d583081a 100644 --- a/public/images/pokemon/exp/shiny/750.json +++ b/public/images/pokemon/exp/shiny/750.json @@ -1,272 +1,929 @@ -{ - "textures": [ - { - "image": "750.png", - "format": "RGBA8888", - "size": { - "w": 230, - "h": 230 - }, - "scale": 1, - "frames": [ - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 78 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 60, - "h": 78 - }, - "frame": { - "x": 0, - "y": 0, - "w": 60, - "h": 78 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 78 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 60, - "h": 78 - }, - "frame": { - "x": 0, - "y": 0, - "w": 60, - "h": 78 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 78 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 57, - "h": 78 - }, - "frame": { - "x": 0, - "y": 78, - "w": 57, - "h": 78 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 78 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 57, - "h": 78 - }, - "frame": { - "x": 0, - "y": 78, - "w": 57, - "h": 78 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 78 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 55, - "h": 78 - }, - "frame": { - "x": 57, - "y": 78, - "w": 55, - "h": 78 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 78 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 65, - "h": 77 - }, - "frame": { - "x": 60, - "y": 0, - "w": 65, - "h": 77 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 78 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 65, - "h": 77 - }, - "frame": { - "x": 60, - "y": 0, - "w": 65, - "h": 77 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 78 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 65, - "h": 77 - }, - "frame": { - "x": 125, - "y": 0, - "w": 65, - "h": 77 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 78 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 64, - "h": 76 - }, - "frame": { - "x": 112, - "y": 77, - "w": 64, - "h": 76 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 78 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 64, - "h": 76 - }, - "frame": { - "x": 112, - "y": 77, - "w": 64, - "h": 76 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 78 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 62, - "h": 77 - }, - "frame": { - "x": 112, - "y": 153, - "w": 62, - "h": 77 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 65, - "h": 78 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 62, - "h": 77 - }, - "frame": { - "x": 112, - "y": 153, - "w": 62, - "h": 77 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:7ccf7456c0825db8500c2b84b43d279c:8daa4a0d7b9d5b5d4aa2bab3306e4e87:4ad6abb5f7a40182d2391bde900ad082$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 383, "y": 211, "w": 74, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 16, "w": 74, "h": 68 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 224, "y": 158, "w": 76, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 16, "w": 76, "h": 68 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 463, "y": 210, "w": 77, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 17, "w": 77, "h": 67 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 146, "y": 158, "w": 78, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 17, "w": 78, "h": 67 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 383, "y": 145, "w": 80, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 18, "w": 80, "h": 66 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 0, "y": 145, "w": 81, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 18, "w": 81, "h": 66 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 318, "y": 78, "w": 83, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 18, "w": 83, "h": 66 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 0, "y": 80, "w": 84, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 19, "w": 84, "h": 65 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 84, "y": 80, "w": 84, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 19, "w": 84, "h": 65 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 401, "y": 80, "w": 84, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 19, "w": 84, "h": 65 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 485, "y": 80, "w": 83, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 19, "w": 83, "h": 65 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0012.png", + "frame": { "x": 463, "y": 145, "w": 81, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 19, "w": 81, "h": 65 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0013.png", + "frame": { "x": 61, "y": 227, "w": 77, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 19, "w": 77, "h": 65 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0014.png", + "frame": { "x": 195, "y": 302, "w": 75, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 19, "w": 75, "h": 65 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0015.png", + "frame": { "x": 270, "y": 346, "w": 72, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 18, "w": 72, "h": 66 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0016.png", + "frame": { "x": 194, "y": 435, "w": 68, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 17, "w": 68, "h": 67 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0017.png", + "frame": { "x": 0, "y": 435, "w": 68, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 17, "w": 68, "h": 67 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0018.png", + "frame": { "x": 262, "y": 479, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 17, "w": 67, "h": 67 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0019.png", + "frame": { "x": 494, "y": 474, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 17, "w": 67, "h": 67 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0020.png", + "frame": { "x": 334, "y": 422, "w": 68, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 17, "w": 68, "h": 67 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0021.png", + "frame": { "x": 425, "y": 413, "w": 69, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 17, "w": 69, "h": 67 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0022.png", + "frame": { "x": 425, "y": 345, "w": 71, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 16, "w": 71, "h": 68 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0023.png", + "frame": { "x": 61, "y": 292, "w": 73, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 17, "w": 73, "h": 67 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0024.png", + "frame": { "x": 383, "y": 211, "w": 74, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 16, "w": 74, "h": 68 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0025.png", + "frame": { "x": 224, "y": 158, "w": 76, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 16, "w": 76, "h": 68 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0026.png", + "frame": { "x": 463, "y": 210, "w": 77, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 17, "w": 77, "h": 67 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0027.png", + "frame": { "x": 146, "y": 158, "w": 78, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 17, "w": 78, "h": 67 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0028.png", + "frame": { "x": 383, "y": 145, "w": 80, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 18, "w": 80, "h": 66 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0029.png", + "frame": { "x": 0, "y": 145, "w": 81, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 18, "w": 81, "h": 66 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0030.png", + "frame": { "x": 318, "y": 78, "w": 83, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 18, "w": 83, "h": 66 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0031.png", + "frame": { "x": 0, "y": 80, "w": 84, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 19, "w": 84, "h": 65 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0032.png", + "frame": { "x": 84, "y": 80, "w": 84, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 19, "w": 84, "h": 65 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0033.png", + "frame": { "x": 401, "y": 80, "w": 84, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 19, "w": 84, "h": 65 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0034.png", + "frame": { "x": 485, "y": 80, "w": 83, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 19, "w": 83, "h": 65 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0035.png", + "frame": { "x": 463, "y": 145, "w": 81, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 19, "w": 81, "h": 65 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0036.png", + "frame": { "x": 61, "y": 227, "w": 77, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 19, "w": 77, "h": 65 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0037.png", + "frame": { "x": 195, "y": 302, "w": 75, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 19, "w": 75, "h": 65 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0038.png", + "frame": { "x": 270, "y": 346, "w": 72, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 18, "w": 72, "h": 66 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0039.png", + "frame": { "x": 194, "y": 435, "w": 68, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 17, "w": 68, "h": 67 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0040.png", + "frame": { "x": 0, "y": 435, "w": 68, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 17, "w": 68, "h": 67 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0041.png", + "frame": { "x": 262, "y": 479, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 17, "w": 67, "h": 67 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0042.png", + "frame": { "x": 494, "y": 474, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 17, "w": 67, "h": 67 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0043.png", + "frame": { "x": 334, "y": 422, "w": 68, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 17, "w": 68, "h": 67 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0044.png", + "frame": { "x": 425, "y": 413, "w": 69, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 17, "w": 69, "h": 67 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0045.png", + "frame": { "x": 425, "y": 345, "w": 71, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 16, "w": 71, "h": 68 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0046.png", + "frame": { "x": 61, "y": 292, "w": 73, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 17, "w": 73, "h": 67 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0047.png", + "frame": { "x": 383, "y": 211, "w": 74, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 16, "w": 74, "h": 68 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0048.png", + "frame": { "x": 224, "y": 158, "w": 76, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 16, "w": 76, "h": 68 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0049.png", + "frame": { "x": 463, "y": 210, "w": 77, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 17, "w": 77, "h": 67 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0050.png", + "frame": { "x": 146, "y": 158, "w": 78, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 17, "w": 78, "h": 67 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0051.png", + "frame": { "x": 383, "y": 145, "w": 80, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 18, "w": 80, "h": 66 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0052.png", + "frame": { "x": 0, "y": 145, "w": 81, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 18, "w": 81, "h": 66 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0053.png", + "frame": { "x": 318, "y": 78, "w": 83, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 18, "w": 83, "h": 66 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0054.png", + "frame": { "x": 0, "y": 80, "w": 84, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 19, "w": 84, "h": 65 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0055.png", + "frame": { "x": 84, "y": 80, "w": 84, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 19, "w": 84, "h": 65 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0056.png", + "frame": { "x": 401, "y": 80, "w": 84, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 19, "w": 84, "h": 65 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0057.png", + "frame": { "x": 485, "y": 80, "w": 83, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 19, "w": 83, "h": 65 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0058.png", + "frame": { "x": 463, "y": 145, "w": 81, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 19, "w": 81, "h": 65 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0059.png", + "frame": { "x": 61, "y": 227, "w": 77, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 19, "w": 77, "h": 65 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0060.png", + "frame": { "x": 195, "y": 302, "w": 75, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 19, "w": 75, "h": 65 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0061.png", + "frame": { "x": 270, "y": 346, "w": 72, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 18, "w": 72, "h": 66 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0062.png", + "frame": { "x": 194, "y": 435, "w": 68, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 17, "w": 68, "h": 67 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0063.png", + "frame": { "x": 0, "y": 435, "w": 68, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 17, "w": 68, "h": 67 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0064.png", + "frame": { "x": 262, "y": 479, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 17, "w": 67, "h": 67 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0065.png", + "frame": { "x": 494, "y": 474, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 17, "w": 67, "h": 67 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0066.png", + "frame": { "x": 334, "y": 422, "w": 68, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 17, "w": 68, "h": 67 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0067.png", + "frame": { "x": 425, "y": 413, "w": 69, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 17, "w": 69, "h": 67 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0068.png", + "frame": { "x": 425, "y": 345, "w": 71, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 16, "w": 71, "h": 68 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0069.png", + "frame": { "x": 61, "y": 292, "w": 73, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 17, "w": 73, "h": 67 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0070.png", + "frame": { "x": 383, "y": 211, "w": 74, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 16, "w": 74, "h": 68 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0071.png", + "frame": { "x": 300, "y": 213, "w": 74, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 16, "w": 74, "h": 68 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0072.png", + "frame": { "x": 374, "y": 279, "w": 75, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 18, "w": 75, "h": 66 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0073.png", + "frame": { "x": 286, "y": 281, "w": 76, "h": 65 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 20, "w": 76, "h": 65 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0074.png", + "frame": { "x": 0, "y": 373, "w": 76, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 22, "w": 76, "h": 62 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0075.png", + "frame": { "x": 496, "y": 412, "w": 75, "h": 62 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 22, "w": 75, "h": 62 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0076.png", + "frame": { "x": 329, "y": 489, "w": 70, "h": 64 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 20, "w": 70, "h": 64 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0077.png", + "frame": { "x": 0, "y": 502, "w": 62, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 15, "w": 62, "h": 68 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0078.png", + "frame": { "x": 134, "y": 373, "w": 60, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 7, "w": 60, "h": 76 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0079.png", + "frame": { "x": 76, "y": 359, "w": 58, "h": 81 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 2, "w": 58, "h": 81 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0080.png", + "frame": { "x": 0, "y": 211, "w": 61, "h": 83 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 0, "w": 61, "h": 83 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0081.png", + "frame": { "x": 81, "y": 145, "w": 65, "h": 82 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 1, "w": 65, "h": 82 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0082.png", + "frame": { "x": 466, "y": 0, "w": 69, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 3, "w": 69, "h": 80 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0083.png", + "frame": { "x": 395, "y": 0, "w": 71, "h": 78 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 9, "y": 5, "w": 71, "h": 78 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0084.png", + "frame": { "x": 235, "y": 81, "w": 70, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 12, "y": 6, "w": 70, "h": 77 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0085.png", + "frame": { "x": 220, "y": 226, "w": 66, "h": 76 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 15, "y": 7, "w": 66, "h": 76 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0086.png", + "frame": { "x": 362, "y": 345, "w": 63, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 16, "y": 6, "w": 63, "h": 77 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0087.png", + "frame": { "x": 0, "y": 294, "w": 60, "h": 79 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 16, "y": 4, "w": 60, "h": 79 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0088.png", + "frame": { "x": 134, "y": 293, "w": 61, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 14, "y": 3, "w": 61, "h": 80 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0089.png", + "frame": { "x": 168, "y": 77, "w": 67, "h": 81 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 11, "y": 2, "w": 67, "h": 81 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0090.png", + "frame": { "x": 242, "y": 0, "w": 76, "h": 81 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 2, "w": 76, "h": 81 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0091.png", + "frame": { "x": 82, "y": 0, "w": 80, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 3, "w": 80, "h": 80 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0092.png", + "frame": { "x": 0, "y": 0, "w": 82, "h": 80 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 7, "y": 3, "w": 82, "h": 80 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0093.png", + "frame": { "x": 162, "y": 0, "w": 80, "h": 77 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 10, "y": 6, "w": 80, "h": 77 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0094.png", + "frame": { "x": 318, "y": 0, "w": 77, "h": 73 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 13, "y": 10, "w": 77, "h": 73 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0095.png", + "frame": { "x": 305, "y": 144, "w": 78, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 8, "y": 14, "w": 78, "h": 69 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0096.png", + "frame": { "x": 457, "y": 277, "w": 73, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 15, "w": 73, "h": 68 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0097.png", + "frame": { "x": 402, "y": 480, "w": 67, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 17, "w": 67, "h": 67 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0098.png", + "frame": { "x": 68, "y": 449, "w": 68, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 17, "w": 68, "h": 67 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0099.png", + "frame": { "x": 195, "y": 367, "w": 69, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 16, "w": 69, "h": 68 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0100.png", + "frame": { "x": 264, "y": 412, "w": 70, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 6, "y": 17, "w": 70, "h": 67 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0101.png", + "frame": { "x": 496, "y": 345, "w": 72, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 17, "w": 72, "h": 67 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + }, + { + "filename": "0102.png", + "frame": { "x": 146, "y": 225, "w": 74, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 5, "y": 16, "w": 74, "h": 68 }, + "sourceSize": { "w": 90, "h": 85 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.13-x64", + "image": "750.png", + "format": "I8", + "size": { "w": 571, "h": 570 }, + "scale": "1" + } } diff --git a/public/images/pokemon/exp/shiny/750.png b/public/images/pokemon/exp/shiny/750.png index e51f6eb7219..b2b3076b55f 100644 Binary files a/public/images/pokemon/exp/shiny/750.png and b/public/images/pokemon/exp/shiny/750.png differ diff --git a/public/images/pokemon/exp/shiny/780.json b/public/images/pokemon/exp/shiny/780.json index 83607960307..6a50a444098 100644 --- a/public/images/pokemon/exp/shiny/780.json +++ b/public/images/pokemon/exp/shiny/780.json @@ -1,272 +1,884 @@ -{ - "textures": [ - { - "image": "780.png", - "format": "RGBA8888", - "size": { - "w": 244, - "h": 244 - }, - "scale": 1, - "frames": [ - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 61 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 93, - "h": 61 - }, - "frame": { - "x": 0, - "y": 0, - "w": 93, - "h": 61 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 61 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 93, - "h": 61 - }, - "frame": { - "x": 0, - "y": 0, - "w": 93, - "h": 61 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 61 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 91, - "h": 61 - }, - "frame": { - "x": 93, - "y": 0, - "w": 91, - "h": 61 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 61 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 91, - "h": 61 - }, - "frame": { - "x": 0, - "y": 61, - "w": 91, - "h": 61 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 61 - }, - "spriteSourceSize": { - "x": 2, - "y": 0, - "w": 91, - "h": 61 - }, - "frame": { - "x": 0, - "y": 61, - "w": 91, - "h": 61 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 61 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 89, - "h": 61 - }, - "frame": { - "x": 0, - "y": 122, - "w": 89, - "h": 61 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 61 - }, - "spriteSourceSize": { - "x": 5, - "y": 0, - "w": 89, - "h": 61 - }, - "frame": { - "x": 0, - "y": 122, - "w": 89, - "h": 61 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 61 - }, - "spriteSourceSize": { - "x": 10, - "y": 0, - "w": 86, - "h": 61 - }, - "frame": { - "x": 0, - "y": 183, - "w": 86, - "h": 61 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 61 - }, - "spriteSourceSize": { - "x": 10, - "y": 0, - "w": 86, - "h": 61 - }, - "frame": { - "x": 0, - "y": 183, - "w": 86, - "h": 61 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 61 - }, - "spriteSourceSize": { - "x": 13, - "y": 0, - "w": 83, - "h": 61 - }, - "frame": { - "x": 86, - "y": 183, - "w": 83, - "h": 61 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 61 - }, - "spriteSourceSize": { - "x": 13, - "y": 0, - "w": 83, - "h": 61 - }, - "frame": { - "x": 86, - "y": 183, - "w": 83, - "h": 61 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 96, - "h": 61 - }, - "spriteSourceSize": { - "x": 15, - "y": 0, - "w": 81, - "h": 61 - }, - "frame": { - "x": 89, - "y": 122, - "w": 81, - "h": 61 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:eb778a8559fd28191282550e6f9ca027:935a960b3e7674c98fe50b4aa5c065a8:9470182902340de73b2565411cb0ab89$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 303, "y": 72, "w": 72, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 72, "h": 70 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0002.png", + "frame": { "x": 376, "y": 72, "w": 72, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 72, "h": 70 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0003.png", + "frame": { "x": 449, "y": 72, "w": 72, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 72, "h": 70 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0004.png", + "frame": { "x": 1, "y": 214, "w": 72, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 72, "h": 69 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0005.png", + "frame": { "x": 365, "y": 214, "w": 73, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 73, "h": 68 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0006.png", + "frame": { "x": 292, "y": 284, "w": 72, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 72, "h": 68 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0007.png", + "frame": { "x": 439, "y": 214, "w": 73, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 73, "h": 68 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0008.png", + "frame": { "x": 439, "y": 350, "w": 73, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 73, "h": 67 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0009.png", + "frame": { "x": 223, "y": 353, "w": 74, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 74, "h": 66 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0010.png", + "frame": { "x": 439, "y": 283, "w": 75, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 75, "h": 66 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0011.png", + "frame": { "x": 148, "y": 353, "w": 74, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 6, "w": 74, "h": 66 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0012.png", + "frame": { "x": 73, "y": 351, "w": 74, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 74, "h": 66 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0013.png", + "frame": { "x": 145, "y": 214, "w": 75, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 75, "h": 67 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0014.png", + "frame": { "x": 219, "y": 144, "w": 74, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 74, "h": 68 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0015.png", + "frame": { "x": 365, "y": 283, "w": 73, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 73, "h": 68 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0016.png", + "frame": { "x": 74, "y": 282, "w": 73, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 73, "h": 68 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0017.png", + "frame": { "x": 292, "y": 214, "w": 72, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 72, "h": 69 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0018.png", + "frame": { "x": 367, "y": 143, "w": 72, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 72, "h": 70 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0019.png", + "frame": { "x": 303, "y": 72, "w": 72, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 72, "h": 70 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0020.png", + "frame": { "x": 376, "y": 72, "w": 72, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 72, "h": 70 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0021.png", + "frame": { "x": 449, "y": 72, "w": 72, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 72, "h": 70 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0022.png", + "frame": { "x": 1, "y": 214, "w": 72, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 72, "h": 69 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0023.png", + "frame": { "x": 365, "y": 214, "w": 73, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 73, "h": 68 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0024.png", + "frame": { "x": 292, "y": 284, "w": 72, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 72, "h": 68 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0025.png", + "frame": { "x": 439, "y": 214, "w": 73, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 73, "h": 68 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0026.png", + "frame": { "x": 439, "y": 350, "w": 73, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 73, "h": 67 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0027.png", + "frame": { "x": 223, "y": 353, "w": 74, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 74, "h": 66 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0028.png", + "frame": { "x": 439, "y": 283, "w": 75, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 75, "h": 66 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0029.png", + "frame": { "x": 148, "y": 353, "w": 74, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 6, "w": 74, "h": 66 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0030.png", + "frame": { "x": 73, "y": 351, "w": 74, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 74, "h": 66 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0031.png", + "frame": { "x": 145, "y": 214, "w": 75, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 75, "h": 67 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0032.png", + "frame": { "x": 219, "y": 144, "w": 74, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 74, "h": 68 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0033.png", + "frame": { "x": 365, "y": 283, "w": 73, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 73, "h": 68 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0034.png", + "frame": { "x": 74, "y": 282, "w": 73, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 73, "h": 68 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0035.png", + "frame": { "x": 292, "y": 214, "w": 72, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 72, "h": 69 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0036.png", + "frame": { "x": 367, "y": 143, "w": 72, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 72, "h": 70 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0037.png", + "frame": { "x": 303, "y": 72, "w": 72, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 72, "h": 70 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0038.png", + "frame": { "x": 376, "y": 72, "w": 72, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 72, "h": 70 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0039.png", + "frame": { "x": 449, "y": 72, "w": 72, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 72, "h": 70 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0040.png", + "frame": { "x": 1, "y": 214, "w": 72, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 72, "h": 69 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0041.png", + "frame": { "x": 365, "y": 214, "w": 73, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 73, "h": 68 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0042.png", + "frame": { "x": 292, "y": 284, "w": 72, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 72, "h": 68 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0043.png", + "frame": { "x": 439, "y": 214, "w": 73, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 73, "h": 68 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0044.png", + "frame": { "x": 439, "y": 350, "w": 73, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 73, "h": 67 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0045.png", + "frame": { "x": 223, "y": 353, "w": 74, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 74, "h": 66 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0046.png", + "frame": { "x": 439, "y": 283, "w": 75, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 75, "h": 66 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0047.png", + "frame": { "x": 148, "y": 353, "w": 74, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 6, "w": 74, "h": 66 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0048.png", + "frame": { "x": 73, "y": 351, "w": 74, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 74, "h": 66 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0049.png", + "frame": { "x": 145, "y": 214, "w": 75, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 75, "h": 67 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0050.png", + "frame": { "x": 219, "y": 144, "w": 74, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 74, "h": 68 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0051.png", + "frame": { "x": 365, "y": 283, "w": 73, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 73, "h": 68 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0052.png", + "frame": { "x": 74, "y": 282, "w": 73, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 73, "h": 68 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0053.png", + "frame": { "x": 292, "y": 214, "w": 72, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 72, "h": 69 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0054.png", + "frame": { "x": 367, "y": 143, "w": 72, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 72, "h": 70 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0055.png", + "frame": { "x": 303, "y": 72, "w": 72, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 72, "h": 70 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0056.png", + "frame": { "x": 376, "y": 72, "w": 72, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 72, "h": 70 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0057.png", + "frame": { "x": 449, "y": 72, "w": 72, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 72, "h": 70 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0058.png", + "frame": { "x": 1, "y": 214, "w": 72, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 72, "h": 69 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0059.png", + "frame": { "x": 365, "y": 214, "w": 73, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 73, "h": 68 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0060.png", + "frame": { "x": 292, "y": 284, "w": 72, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 72, "h": 68 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0061.png", + "frame": { "x": 439, "y": 214, "w": 73, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 73, "h": 68 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0062.png", + "frame": { "x": 439, "y": 350, "w": 73, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 5, "w": 73, "h": 67 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0063.png", + "frame": { "x": 223, "y": 353, "w": 74, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 74, "h": 66 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0064.png", + "frame": { "x": 439, "y": 283, "w": 75, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 75, "h": 66 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0065.png", + "frame": { "x": 148, "y": 353, "w": 74, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 4, "y": 6, "w": 74, "h": 66 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0066.png", + "frame": { "x": 73, "y": 351, "w": 74, "h": 66 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 6, "w": 74, "h": 66 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0067.png", + "frame": { "x": 145, "y": 214, "w": 75, "h": 67 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 5, "w": 75, "h": 67 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0068.png", + "frame": { "x": 219, "y": 144, "w": 74, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 74, "h": 68 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0069.png", + "frame": { "x": 365, "y": 283, "w": 73, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 73, "h": 68 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0070.png", + "frame": { "x": 74, "y": 282, "w": 73, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 4, "w": 73, "h": 68 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0071.png", + "frame": { "x": 292, "y": 214, "w": 72, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 3, "w": 72, "h": 69 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0072.png", + "frame": { "x": 367, "y": 143, "w": 72, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 72, "h": 70 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0073.png", + "frame": { "x": 440, "y": 143, "w": 72, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 72, "h": 70 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0074.png", + "frame": { "x": 221, "y": 73, "w": 72, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 72, "h": 70 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0075.png", + "frame": { "x": 377, "y": 1, "w": 73, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 73, "h": 70 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0076.png", + "frame": { "x": 303, "y": 1, "w": 73, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 73, "h": 70 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0077.png", + "frame": { "x": 154, "y": 1, "w": 75, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 75, "h": 70 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0078.png", + "frame": { "x": 78, "y": 1, "w": 75, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 75, "h": 70 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0079.png", + "frame": { "x": 1, "y": 1, "w": 76, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 0, "y": 2, "w": 76, "h": 70 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0080.png", + "frame": { "x": 1, "y": 143, "w": 72, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 72, "h": 70 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0081.png", + "frame": { "x": 230, "y": 1, "w": 72, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 1, "w": 72, "h": 71 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0082.png", + "frame": { "x": 221, "y": 213, "w": 70, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 70, "h": 71 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0083.png", + "frame": { "x": 149, "y": 72, "w": 71, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 71, "h": 71 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0084.png", + "frame": { "x": 74, "y": 143, "w": 70, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 70, "h": 72 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0085.png", + "frame": { "x": 149, "y": 72, "w": 71, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 71, "h": 71 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0086.png", + "frame": { "x": 74, "y": 143, "w": 70, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 70, "h": 72 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0087.png", + "frame": { "x": 149, "y": 72, "w": 71, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 71, "h": 71 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0088.png", + "frame": { "x": 74, "y": 143, "w": 70, "h": 72 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 0, "w": 70, "h": 72 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0089.png", + "frame": { "x": 149, "y": 72, "w": 71, "h": 71 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 1, "w": 71, "h": 71 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0090.png", + "frame": { "x": 148, "y": 282, "w": 70, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 2, "w": 70, "h": 70 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0091.png", + "frame": { "x": 365, "y": 352, "w": 71, "h": 68 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 4, "w": 71, "h": 68 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0092.png", + "frame": { "x": 1, "y": 284, "w": 71, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 3, "y": 3, "w": 71, "h": 69 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0093.png", + "frame": { "x": 145, "y": 144, "w": 73, "h": 69 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 3, "w": 73, "h": 69 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0094.png", + "frame": { "x": 75, "y": 72, "w": 73, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 73, "h": 70 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0095.png", + "frame": { "x": 1, "y": 72, "w": 73, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 73, "h": 70 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0096.png", + "frame": { "x": 451, "y": 1, "w": 73, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 1, "y": 2, "w": 73, "h": 70 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + }, + { + "filename": "0097.png", + "frame": { "x": 294, "y": 143, "w": 72, "h": 70 }, + "rotated": false, + "trimmed": true, + "spriteSourceSize": { "x": 2, "y": 2, "w": 72, "h": 70 }, + "sourceSize": { "w": 78, "h": 72 }, + "duration": 100 + } +], +"meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.13-x64", + "image": "780.png", + "format": "I8", + "size": { "w": 525, "h": 421 }, + "scale": "1" +} } diff --git a/public/images/pokemon/exp/shiny/780.png b/public/images/pokemon/exp/shiny/780.png index cc6cf68a587..4487e9d629c 100644 Binary files a/public/images/pokemon/exp/shiny/780.png and b/public/images/pokemon/exp/shiny/780.png differ diff --git a/public/images/pokemon/shiny/730.png b/public/images/pokemon/shiny/730.png index 5cc0a675e08..744d43630e7 100644 Binary files a/public/images/pokemon/shiny/730.png and b/public/images/pokemon/shiny/730.png differ diff --git a/public/images/pokemon/variant/728.json b/public/images/pokemon/variant/728.json index 186c61ea7ea..fb17e2c119e 100644 --- a/public/images/pokemon/variant/728.json +++ b/public/images/pokemon/variant/728.json @@ -1,34 +1,36 @@ { "1": { - "243a66": "00473d", - "436cbf": "009469", - "6c90d9": "14af82", "733f50": "a62c20", + "243a66": "00473d", "e57ea1": "ff8072", "f8f8f8": "fff6e2", + "436cbf": "009469", "b3627d": "e54c41", - "314f8c": "006355", + "6c90d9": "14af82", "101010": "101010", - "bfbfbf": "c2beb4", "808080": "808080", - "404040": "404040", + "bfbfbf": "c2beb4", + "314f8c": "006355", "639ba6": "858d7d", - "a1dae5": "92b599" + "a1dae5": "92b599", + "1e3a66": "363d2f", + "2c4f8c": "5a6154" }, "2": { - "243a66": "54041b", - "436cbf": "a6213f", - "6c90d9": "be294a", "733f50": "620a33", + "243a66": "54041b", "e57ea1": "dd3780", "f8f8f8": "f5edee", + "436cbf": "a6213f", "b3627d": "a7225c", - "314f8c": "770f29", + "6c90d9": "be294a", "101010": "101010", - "bfbfbf": "bfb4b9", "808080": "808080", - "404040": "404040", + "bfbfbf": "bfb4b9", + "314f8c": "770f29", "639ba6": "b88389", - "a1dae5": "f7c1c5" + "a1dae5": "f7c1c5", + "1e3a66": "773f46", + "2c4f8c": "a45f67" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/730.json b/public/images/pokemon/variant/730.json index 871bd52ec9e..eec815b0572 100644 --- a/public/images/pokemon/variant/730.json +++ b/public/images/pokemon/variant/730.json @@ -1,36 +1,46 @@ { "1": { - "0e6792": "b54f5f", - "6ac8e3": "ffa0a8", - "727481": "74312e", - "aac7e6": "ea7c5b", - "44a0b5": "d87383", "101010": "101010", - "82a7b9": "c35861", "8d3f4a": "a62c20", - "f8f8f8": "fff2d4", - "bdbdc1": "c0b7a1", - "ff8496": "ff8072", "c76374": "e54c41", + "0e6792": "b54f5f", "1241a1": "006355", + "6d7481": "917393", + "727481": "a0866f", "1470de": "009469", - "64c5e1": "00dc9c" + "5a8092": "74312e", + "44a0b5": "d87383", + "64c5e1": "00dc9c", + "6ac8e3": "ffa0a8", + "82a7b9": "c35861", + "ff8496": "ff8072", + "bdbdc1": "c0b7a1", + "c0bdc1": "beaac0", + "aac7e6": "ea7c5b", + "f8f8f8": "fff2d4", + "faf8f8": "f1e8f1", + "fef8f8": "fef8f8" }, "2": { - "0e6792": "500518", - "6ac8e3": "a6213f", - "727481": "5c2141", - "aac7e6": "e9a5c0", - "44a0b5": "770f29", "101010": "101010", - "82a7b9": "c17b97", "8d3f4a": "1d1638", - "f8f8f8": "f5edee", - "bdbdc1": "bfb4b9", - "ff8496": "614388", "c76374": "391e62", + "0e6792": "500518", "1241a1": "591945", + "6d7481": "81716d", + "727481": "9e8193", "1470de": "81387e", - "64c5e1": "bd2b6b" + "5a8092": "5c2141", + "44a0b5": "770f29", + "64c5e1": "bd2b6b", + "6ac8e3": "a6213f", + "82a7b9": "c17b97", + "ff8496": "614388", + "bdbdc1": "bfb4b9", + "c0bdc1": "c0b4a5", + "aac7e6": "e9a5c0", + "f8f8f8": "f5edee", + "faf8f8": "f5f3e3", + "fef8f8": "fef8f8" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/_exp_masterlist.json b/public/images/pokemon/variant/_exp_masterlist.json new file mode 100644 index 00000000000..0ef5f209439 --- /dev/null +++ b/public/images/pokemon/variant/_exp_masterlist.json @@ -0,0 +1,656 @@ +{ + "3-mega": [0, 2, 2], + "6-mega-x": [0, 2, 2], + "6-mega-y": [0, 2, 2], + "80-mega": [0, 1, 1], + "94-mega": [2, 2, 2], + "127-mega": [0, 1, 1], + "130-mega": [0, 1, 1], + "142-mega": [0, 1, 1], + "150-mega-x": [0, 1, 1], + "150-mega-y": [0, 1, 1], + "181-mega": [0, 1, 2], + "212-mega": [1, 1, 2], + "229-mega": [0, 1, 1], + "248-mega": [0, 1, 1], + "257-mega": [0, 1, 1], + "282-mega": [0, 2, 2], + "302-mega": [0, 1, 1], + "303-mega": [0, 1, 1], + "306-mega": [1, 1, 1], + "308-mega": [0, 1, 1], + "310-mega": [0, 1, 1], + "334-mega": [0, 2, 1], + "354-mega": [0, 1, 1], + "359-mega": [0, 1, 1], + "362-mega": [0, 1, 1], + "373-mega": [0, 1, 1], + "376-mega": [0, 1, 1], + "380-mega": [0, 1, 1], + "381-mega": [0, 1, 1], + "382-primal": [0, 1, 1], + "383-primal": [0, 1, 1], + "384-mega": [0, 2, 1], + "428-mega": [0, 1, 1], + "445-mega": [1, 1, 1], + "448-mega": [1, 1, 1], + "475-mega": [0, 2, 2], + "531-mega": [0, 1, 1], + "653": [0, 1, 1], + "654": [0, 1, 1], + "655": [0, 1, 1], + "656": [0, 1, 1], + "657": [0, 1, 1], + "658": [0, 1, 1], + "658-ash": [0, 1, 1], + "664": [0, 1, 1], + "665": [0, 1, 1], + "666-archipelago": [0, 1, 1], + "666-continental": [0, 1, 1], + "666-elegant": [0, 1, 1], + "666-fancy": [0, 1, 1], + "666-garden": [0, 1, 1], + "666-high-plains": [0, 1, 1], + "666-icy-snow": [0, 1, 1], + "666-jungle": [0, 1, 1], + "666-marine": [0, 1, 1], + "666-meadow": [0, 1, 1], + "666-modern": [0, 1, 1], + "666-monsoon": [0, 1, 1], + "666-ocean": [0, 1, 1], + "666-poke-ball": [0, 1, 1], + "666-polar": [0, 1, 1], + "666-river": [0, 1, 1], + "666-sandstorm": [0, 1, 1], + "666-savanna": [0, 1, 1], + "666-sun": [0, 1, 1], + "666-tundra": [0, 1, 1], + "669-red": [0, 2, 2], + "669-blue": [0, 1, 1], + "669-white": [0, 1, 1], + "669-yellow": [0, 1, 1], + "669-orange": [0, 2, 2], + "670-white": [0, 1, 1], + "670-blue": [0, 1, 1], + "670-orange": [0, 1, 1], + "670-red": [0, 1, 1], + "670-yellow": [0, 1, 1], + "671-red": [0, 1, 2], + "671-blue": [0, 1, 2], + "671-yellow": [0, 1, 1], + "671-white": [0, 1, 2], + "671-orange": [0, 1, 2], + "672": [0, 1, 1], + "673": [0, 1, 1], + "676": [0, 1, 1], + "677": [0, 1, 1], + "678-female": [0, 1, 1], + "678": [0, 1, 1], + "682": [0, 1, 1], + "683": [0, 1, 1], + "684": [0, 1, 1], + "685": [0, 1, 1], + "688": [0, 1, 1], + "689": [0, 1, 1], + "690": [0, 1, 1], + "691": [0, 1, 1], + "696": [0, 1, 1], + "697": [0, 1, 1], + "699": [0, 1, 1], + "700": [0, 1, 1], + "702": [0, 1, 1], + "704": [0, 1, 1], + "705": [0, 1, 1], + "706": [0, 1, 1], + "709": [0, 1, 1], + "710": [0, 1, 1], + "711": [1, 1, 1], + "712": [0, 1, 1], + "713": [0, 1, 1], + "715": [0, 1, 1], + "716-active": [0, 1, 1], + "716-neutral": [0, 1, 1], + "717": [0, 2, 2], + "720-unbound": [1, 1, 1], + "720": [1, 1, 1], + "728": [0, 1, 1], + "729": [0, 1, 1], + "730": [0, 1, 1], + "734": [0, 1, 1], + "735": [0, 1, 1], + "742": [0, 2, 2], + "743": [0, 2, 2], + "747": [0, 2, 2], + "748": [0, 1, 1], + "751": [0, 1, 1], + "752": [0, 1, 1], + "753": [0, 1, 1], + "754": [0, 2, 2], + "755": [0, 1, 1], + "756": [0, 1, 1], + "761": [0, 1, 1], + "762": [0, 1, 1], + "763": [0, 1, 1], + "767": [0, 1, 1], + "768": [0, 1, 1], + "770": [0, 0, 0], + "771": [0, 2, 2], + "772": [0, 1, 1], + "773-fighting": [0, 1, 1], + "773-psychic": [0, 1, 1], + "773-poison": [0, 1, 1], + "773-ground": [0, 1, 1], + "773-ghost": [0, 1, 1], + "773-steel": [0, 1, 1], + "773-rock": [0, 1, 1], + "773-grass": [0, 1, 1], + "773-dragon": [0, 1, 1], + "773-bug": [0, 1, 1], + "773-ice": [0, 1, 1], + "773-dark": [0, 1, 1], + "773": [0, 1, 1], + "773-fairy": [0, 1, 1], + "773-water": [0, 1, 1], + "773-electric": [0, 1, 1], + "773-flying": [0, 1, 1], + "773-fire": [0, 1, 1], + "776": [0, 1, 1], + "777": [0, 1, 1], + "778-busted": [0, 1, 1], + "778-disguised": [0, 1, 1], + "779": [0, 1, 1], + "789": [1, 1, 1], + "790": [0, 1, 1], + "791": [2, 1, 1], + "792": [0, 1, 1], + "793": [0, 2, 2], + "797": [0, 1, 1], + "798": [0, 1, 1], + "800-dawn-wings": [0, 1, 1], + "800-dusk-mane": [0, 1, 1], + "800-ultra": [0, 1, 1], + "800": [0, 1, 1], + "802": [1, 1, 1], + "803": [0, 1, 1], + "804": [0, 1, 1], + "807": [0, 1, 1], + "808": [0, 1, 1], + "809": [0, 1, 1], + "816": [0, 1, 1], + "817": [0, 1, 1], + "818": [1, 1, 1], + "821": [0, 2, 2], + "822": [0, 1, 1], + "823": [0, 1, 1], + "829": [0, 1, 1], + "830": [0, 1, 1], + "835": [0, 1, 1], + "836": [0, 2, 2], + "850": [0, 1, 1], + "851": [0, 1, 1], + "854": [0, 1, 1], + "855": [0, 1, 1], + "856": [0, 1, 1], + "857": [0, 2, 2], + "858": [0, 1, 1], + "859": [0, 1, 1], + "860": [0, 1, 1], + "861": [0, 1, 1], + "862": [0, 1, 1], + "863": [0, 1, 1], + "864": [0, 1, 1], + "867": [0, 1, 1], + "872": [1, 1, 1], + "873": [1, 1, 1], + "876-female": [0, 1, 1], + "876": [0, 1, 1], + "877-hangry": [1, 1, 1], + "877": [1, 1, 1], + "880": [0, 1, 1], + "881": [0, 1, 1], + "882": [0, 2, 1], + "883": [0, 1, 1], + "884": [0, 1, 1], + "885": [1, 1, 1], + "886": [1, 1, 1], + "887": [1, 1, 1], + "888": [0, 1, 1], + "888-crowned": [0, 1, 1], + "889": [0, 1, 1], + "889-crowned": [0, 1, 1], + "890": [0, 2, 1], + "890-eternamax": [0, 1, 1], + "891": [1, 1, 1], + "892-rapid-strike": [1, 1, 1], + "892": [1, 1, 1], + "894": [0, 1, 1], + "895": [0, 1, 1], + "896": [1, 1, 1], + "897": [1, 1, 1], + "898": [1, 1, 1], + "898-ice": [1, 1, 1], + "898-shadow": [1, 1, 1], + "900": [0, 1, 1], + "901": [0, 1, 1], + "903": [0, 1, 1], + "909": [0, 1, 1], + "910": [0, 2, 2], + "911": [0, 2, 2], + "912": [0, 1, 2], + "913": [0, 1, 2], + "914": [0, 2, 1], + "919": [1, 1, 1], + "920": [1, 1, 1], + "924": [1, 1, 1], + "925-four": [1, 2, 2], + "925-three": [1, 2, 2], + "932": [0, 2, 2], + "933": [0, 2, 2], + "934": [0, 1, 1], + "935": [1, 1, 2], + "936": [2, 2, 2], + "937": [2, 2, 2], + "940": [0, 1, 1], + "941": [0, 1, 1], + "944": [0, 1, 1], + "945": [0, 1, 1], + "948": [0, 1, 1], + "949": [0, 1, 1], + "951": [0, 1, 1], + "952": [0, 1, 1], + "953": [0, 1, 1], + "954": [0, 1, 1], + "957": [2, 2, 2], + "958": [2, 2, 2], + "959": [2, 2, 2], + "962": [1, 1, 1], + "967": [0, 1, 1], + "968": [0, 1, 1], + "969": [0, 1, 1], + "970": [0, 1, 1], + "973": [1, 1, 1], + "974": [0, 1, 1], + "975": [0, 1, 1], + "978-curly": [0, 2, 2], + "978-droopy": [0, 2, 2], + "978-stretchy": [0, 2, 2], + "979": [2, 2, 2], + "981": [0, 1, 1], + "982": [0, 1, 1], + "982-three-segment": [0, 1, 1], + "987": [1, 1, 1], + "988": [0, 1, 2], + "993": [0, 1, 1], + "994": [0, 1, 2], + "995": [0, 1, 1], + "996": [0, 1, 1], + "997": [0, 2, 2], + "998": [0, 2, 2], + "999": [2, 1, 1], + "1000": [1, 1, 1], + "1001": [0, 1, 1], + "1003": [0, 1, 1], + "1004": [0, 1, 1], + "1006": [0, 2, 1], + "1007-apex-build": [0, 2, 2], + "1008-ultimate-mode": [1, 1, 1], + "2026": [0, 1, 1], + "2027": [0, 1, 1], + "2028": [0, 1, 1], + "2052": [0, 1, 1], + "2053": [0, 1, 0], + "2103": [0, 1, 1], + "4052": [0, 1, 1], + "4077": [0, 1, 1], + "4078": [0, 1, 1], + "4079": [0, 1, 1], + "4080": [2, 1, 1], + "4144": [0, 1, 1], + "4145": [0, 1, 1], + "4146": [0, 1, 1], + "4199": [2, 1, 1], + "4222": [0, 1, 1], + "4263": [0, 1, 1], + "4264": [0, 1, 1], + "4562": [0, 1, 1], + "6100": [0, 1, 1], + "6101": [0, 1, 1], + "6215": [0, 1, 1], + "6503": [0, 1, 1], + "6549": [0, 1, 1], + "6570": [0, 1, 1], + "6571": [0, 1, 1], + "6705": [0, 1, 1], + "6706": [0, 1, 1], + "6713": [0, 1, 1], + "female": { + "6215": [0, 1, 1] + }, + "back": { + "3-mega": [0, 2, 2], + "6-mega-x": [0, 2, 2], + "6-mega-y": [0, 1, 2], + "80-mega": [0, 1, 1], + "94-mega": [1, 1, 1], + "127-mega": [0, 1, 1], + "130-mega": [0, 1, 1], + "142-mega": [0, 1, 1], + "150-mega-x": [0, 1, 1], + "150-mega-y": [0, 1, 1], + "181-mega": [0, 1, 2], + "212-mega": [1, 2, 2], + "229-mega": [0, 1, 1], + "248-mega": [0, 1, 1], + "257-mega": [0, 1, 1], + "282-mega": [0, 1, 1], + "302-mega": [0, 1, 1], + "303-mega": [0, 1, 1], + "306-mega": [1, 1, 1], + "308-mega": [0, 1, 1], + "310-mega": [0, 1, 1], + "334-mega": [0, 1, 1], + "354-mega": [0, 1, 1], + "359-mega": [0, 1, 1], + "362-mega": [0, 1, 1], + "373-mega": [0, 1, 1], + "376-mega": [0, 1, 1], + "380-mega": [0, 1, 1], + "381-mega": [0, 1, 1], + "382-primal": [0, 1, 1], + "383-primal": [0, 1, 1], + "384-mega": [0, 1, 1], + "428-mega": [0, 1, 1], + "445-mega": [1, 1, 1], + "448-mega": [1, 1, 1], + "475-mega": [0, 2, 2], + "531-mega": [0, 1, 1], + "653": [0, 1, 1], + "654": [0, 1, 1], + "655": [0, 1, 1], + "656": [0, 1, 1], + "657": [0, 1, 1], + "658": [0, 1, 1], + "658-ash": [0, 1, 1], + "664": [0, 1, 1], + "665": [0, 1, 1], + "666-archipelago": [0, 1, 1], + "666-continental": [0, 1, 1], + "666-elegant": [0, 1, 1], + "666-fancy": [0, 1, 1], + "666-garden": [0, 1, 1], + "666-high-plains": [0, 1, 1], + "666-icy-snow": [0, 1, 1], + "666-jungle": [0, 1, 1], + "666-marine": [0, 1, 1], + "666-meadow": [0, 1, 1], + "666-modern": [0, 1, 1], + "666-monsoon": [0, 1, 1], + "666-ocean": [0, 1, 1], + "666-poke-ball": [0, 1, 1], + "666-polar": [0, 1, 1], + "666-river": [0, 1, 1], + "666-sandstorm": [0, 1, 1], + "666-savanna": [0, 1, 1], + "666-sun": [0, 1, 1], + "666-tundra": [0, 1, 1], + "669-red": [0, 2, 2], + "669-blue": [0, 2, 2], + "669-white": [0, 2, 2], + "669-yellow": [0, 2, 2], + "669-orange": [0, 2, 2], + "670-white": [0, 1, 1], + "670-blue": [0, 2, 2], + "670-orange": [0, 1, 1], + "670-red": [0, 1, 1], + "670-yellow": [0, 1, 1], + "671-red": [0, 1, 1], + "671-blue": [0, 1, 1], + "671-yellow": [0, 1, 1], + "671-white": [0, 1, 1], + "671-orange": [0, 1, 1], + "672": [0, 1, 1], + "673": [0, 1, 1], + "676": [0, 1, 1], + "677": [0, 1, 1], + "678-female": [0, 1, 1], + "678": [0, 1, 1], + "682": [0, 1, 1], + "683": [0, 1, 1], + "684": [0, 1, 1], + "685": [0, 1, 1], + "688": [0, 1, 1], + "689": [0, 1, 1], + "690": [0, 1, 1], + "691": [0, 1, 1], + "696": [0, 1, 1], + "697": [0, 1, 1], + "699": [0, 2, 2], + "700": [0, 1, 1], + "702": [0, 1, 1], + "704": [0, 1, 1], + "705": [0, 1, 1], + "706": [0, 1, 1], + "709": [0, 1, 1], + "710": [0, 1, 1], + "711": [1, 1, 1], + "712": [0, 1, 1], + "713": [0, 1, 1], + "715": [0, 1, 1], + "716-active": [0, 1, 1], + "716-neutral": [0, 1, 1], + "717": [0, 1, 1], + "720-unbound": [1, 1, 1], + "720": [1, 1, 1], + "728": [0, 1, 1], + "729": [0, 1, 1], + "730": [0, 1, 1], + "734": [0, 1, 1], + "735": [0, 1, 1], + "742": [0, 2, 2], + "743": [0, 2, 2], + "747": [0, 2, 2], + "748": [0, 1, 1], + "751": [0, 1, 1], + "752": [0, 1, 1], + "753": [0, 1, 1], + "754": [0, 2, 2], + "755": [0, 1, 1], + "756": [0, 1, 1], + "761": [0, 1, 1], + "762": [0, 1, 1], + "763": [0, 1, 1], + "767": [0, 1, 1], + "768": [0, 1, 1], + "771": [0, 1, 1], + "772": [0, 1, 1], + "773-fighting": [0, 1, 1], + "773-psychic": [0, 1, 1], + "773-poison": [0, 1, 1], + "773-ground": [0, 1, 1], + "773-ghost": [0, 1, 1], + "773-steel": [0, 1, 1], + "773-rock": [0, 1, 1], + "773-grass": [0, 1, 1], + "773-dragon": [0, 1, 1], + "773-bug": [0, 1, 1], + "773-ice": [0, 1, 1], + "773-dark": [0, 1, 1], + "773": [0, 1, 1], + "773-fairy": [0, 1, 1], + "773-water": [0, 1, 1], + "773-electric": [0, 1, 1], + "773-flying": [0, 1, 1], + "773-fire": [0, 1, 1], + "776": [0, 2, 2], + "777": [0, 1, 1], + "778-busted": [0, 1, 1], + "778-disguised": [0, 1, 1], + "779": [0, 1, 1], + "789": [1, 1, 1], + "790": [0, 1, 1], + "791": [1, 1, 1], + "792": [0, 1, 1], + "793": [0, 1, 1], + "797": [0, 1, 1], + "798": [0, 1, 1], + "800-dawn-wings": [0, 1, 1], + "800-dusk-mane": [0, 1, 1], + "800-ultra": [0, 1, 1], + "800": [0, 1, 1], + "802": [1, 1, 1], + "803": [0, 1, 1], + "804": [0, 1, 1], + "807": [0, 1, 1], + "808": [0, 1, 1], + "809": [0, 1, 1], + "816": [0, 1, 1], + "817": [0, 1, 1], + "818": [0, 1, 1], + "821": [0, 1, 1], + "822": [0, 1, 1], + "823": [0, 1, 1], + "829": [0, 1, 1], + "830": [0, 1, 1], + "835": [0, 1, 1], + "836": [0, 1, 1], + "850": [0, 1, 1], + "851": [0, 1, 1], + "854": [0, 1, 1], + "855": [0, 1, 1], + "856": [0, 1, 1], + "857": [0, 2, 2], + "858": [0, 1, 1], + "859": [0, 1, 1], + "860": [0, 1, 1], + "861": [0, 1, 1], + "862": [0, 1, 1], + "863": [0, 1, 1], + "864": [0, 1, 1], + "867": [0, 1, 1], + "872": [1, 1, 1], + "873": [1, 1, 1], + "876-female": [0, 1, 1], + "876": [0, 1, 1], + "877-hangry": [1, 1, 1], + "877": [1, 1, 1], + "880": [0, 1, 1], + "881": [0, 1, 1], + "882": [0, 1, 1], + "883": [0, 1, 1], + "884": [0, 1, 1], + "885": [1, 1, 1], + "886": [1, 1, 1], + "887": [1, 1, 1], + "888": [0, 1, 1], + "888-crowned": [0, 1, 1], + "889": [0, 1, 1], + "889-crowned": [0, 1, 1], + "890": [0, 1, 1], + "891": [1, 1, 1], + "892-rapid-strike": [1, 1, 1], + "892": [1, 1, 1], + "894": [0, 1, 1], + "895": [0, 1, 1], + "896": [1, 1, 1], + "897": [1, 1, 1], + "898": [1, 1, 1], + "898-ice": [1, 1, 1], + "898-shadow": [1, 1, 1], + "900": [0, 1, 1], + "901": [0, 1, 1], + "903": [0, 1, 1], + "909": [0, 1, 1], + "910": [0, 2, 2], + "911": [0, 1, 1], + "912": [0, 1, 1], + "913": [0, 1, 1], + "914": [0, 2, 2], + "919": [1, 1, 1], + "920": [1, 1, 1], + "924": [1, 1, 1], + "925-four": [1, 2, 2], + "925-three": [1, 2, 2], + "932": [0, 1, 1], + "933": [0, 1, 1], + "934": [0, 1, 1], + "935": [2, 2, 2], + "936": [2, 2, 2], + "937": [2, 2, 2], + "940": [0, 1, 1], + "941": [0, 1, 1], + "944": [0, 1, 1], + "945": [0, 1, 1], + "948": [0, 1, 1], + "949": [0, 1, 1], + "951": [0, 1, 1], + "952": [0, 2, 1], + "953": [0, 1, 1], + "954": [0, 1, 1], + "957": [1, 1, 1], + "958": [1, 1, 1], + "959": [1, 1, 1], + "962": [1, 1, 1], + "967": [0, 1, 1], + "968": [0, 2, 2], + "969": [0, 1, 1], + "970": [0, 1, 1], + "973": [1, 1, 1], + "974": [0, 1, 1], + "975": [0, 1, 1], + "978-curly": [0, 2, 2], + "978-droopy": [0, 2, 2], + "978-stretchy": [0, 1, 1], + "979": [1, 1, 1], + "981": [0, 1, 1], + "982": [0, 1, 1], + "982-three-segment": [0, 1, 1], + "987": [1, 1, 1], + "988": [0, 1, 1], + "993": [0, 1, 1], + "994": [0, 1, 1], + "995": [0, 1, 1], + "996": [0, 1, 1], + "997": [0, 1, 1], + "998": [0, 1, 1], + "999": [1, 1, 1], + "1000": [1, 1, 1], + "1001": [0, 1, 1], + "1003": [0, 1, 1], + "1004": [0, 1, 1], + "1006": [0, 2, 2], + "1007-apex-build": [0, 2, 2], + "1008-ultimate-mode": [1, 1, 1], + "2026": [0, 1, 1], + "2027": [0, 1, 1], + "2028": [0, 1, 1], + "2052": [0, 1, 1], + "2053": [0, 1, 1], + "2103": [0, 1, 1], + "4052": [0, 1, 1], + "4077": [0, 1, 1], + "4078": [0, 1, 1], + "4079": [0, 1, 1], + "4080": [2, 2, 2], + "4144": [0, 1, 1], + "4145": [0, 1, 1], + "4146": [0, 1, 1], + "4199": [2, 1, 1], + "4222": [0, 1, 1], + "4263": [0, 1, 1], + "4264": [0, 1, 1], + "4562": [0, 1, 1], + "6100": [0, 1, 1], + "6101": [0, 1, 1], + "6215": [0, 1, 1], + "6503": [0, 1, 1], + "6549": [0, 1, 1], + "6570": [0, 1, 1], + "6571": [0, 1, 1], + "6705": [0, 1, 1], + "6706": [0, 1, 1], + "6713": [0, 1, 1], + "female": { + "6215": [0, 1, 1] + } + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/_masterlist.json b/public/images/pokemon/variant/_masterlist.json index 6d2da0ed0ee..ac683d9544e 100644 --- a/public/images/pokemon/variant/_masterlist.json +++ b/public/images/pokemon/variant/_masterlist.json @@ -1813,669 +1813,5 @@ "593": [1, 1, 1], "6215": [0, 1, 1] } - }, - "exp": { - "3-mega": [0, 2, 2], - "6-mega-x": [0, 2, 2], - "6-mega-y": [0, 2, 2], - "80-mega": [0, 1, 1], - "94-mega": [2, 2, 2], - "127-mega": [0, 1, 1], - "130-mega": [0, 1, 1], - "142-mega": [0, 1, 1], - "150-mega-x": [0, 1, 1], - "150-mega-y": [0, 1, 1], - "181-mega": [0, 1, 2], - "212-mega": [1, 1, 2], - "229-mega": [0, 1, 1], - "248-mega": [0, 1, 1], - "257-mega": [0, 1, 1], - "282-mega": [0, 2, 2], - "302-mega": [0, 1, 1], - "303-mega": [0, 1, 1], - "306-mega": [1, 1, 1], - "308-mega": [0, 1, 1], - "310-mega": [0, 1, 1], - "334-mega": [0, 2, 1], - "354-mega": [0, 1, 1], - "359-mega": [0, 1, 1], - "362-mega": [0, 1, 1], - "373-mega": [0, 1, 1], - "376-mega": [0, 1, 1], - "380-mega": [0, 1, 1], - "381-mega": [0, 1, 1], - "382-primal": [0, 1, 1], - "383-primal": [0, 1, 1], - "384-mega": [0, 2, 1], - "428-mega": [0, 1, 1], - "445-mega": [1, 1, 1], - "448-mega": [1, 1, 1], - "475-mega": [0, 2, 2], - "531-mega": [0, 1, 1], - "653": [0, 1, 1], - "654": [0, 1, 1], - "655": [0, 1, 1], - "656": [0, 1, 1], - "657": [0, 1, 1], - "658": [0, 1, 1], - "658-ash": [0, 1, 1], - "664": [0, 1, 1], - "665": [0, 1, 1], - "666-archipelago": [0, 1, 1], - "666-continental": [0, 1, 1], - "666-elegant": [0, 1, 1], - "666-fancy": [0, 1, 1], - "666-garden": [0, 1, 1], - "666-high-plains": [0, 1, 1], - "666-icy-snow": [0, 1, 1], - "666-jungle": [0, 1, 1], - "666-marine": [0, 1, 1], - "666-meadow": [0, 1, 1], - "666-modern": [0, 1, 1], - "666-monsoon": [0, 1, 1], - "666-ocean": [0, 1, 1], - "666-poke-ball": [0, 1, 1], - "666-polar": [0, 1, 1], - "666-river": [0, 1, 1], - "666-sandstorm": [0, 1, 1], - "666-savanna": [0, 1, 1], - "666-sun": [0, 1, 1], - "666-tundra": [0, 1, 1], - "669-red": [0, 2, 2], - "669-blue": [0, 1, 1], - "669-white": [0, 1, 1], - "669-yellow": [0, 1, 1], - "669-orange": [0, 2, 2], - "670-white": [0, 1, 1], - "670-blue": [0, 1, 1], - "670-orange": [0, 1, 1], - "670-red": [0, 1, 1], - "670-yellow": [0, 1, 1], - "671-red": [0, 1, 2], - "671-blue": [0, 1, 2], - "671-yellow": [0, 1, 1], - "671-white": [0, 1, 2], - "671-orange": [0, 1, 2], - "672": [0, 1, 1], - "673": [0, 1, 1], - "676": [0, 1, 1], - "677": [0, 1, 1], - "678-female": [0, 1, 1], - "678": [0, 1, 1], - "682": [0, 1, 1], - "683": [0, 1, 1], - "684": [0, 1, 1], - "685": [0, 1, 1], - "688": [0, 1, 1], - "689": [0, 1, 1], - "690": [0, 1, 1], - "691": [0, 1, 1], - "696": [0, 1, 1], - "697": [0, 1, 1], - "698": [0, 1, 1], - "699": [0, 1, 1], - "700": [0, 1, 1], - "702": [0, 1, 1], - "703": [0, 1, 1], - "704": [0, 1, 1], - "705": [0, 1, 1], - "706": [0, 1, 1], - "708": [0, 1, 1], - "709": [0, 1, 1], - "710": [0, 1, 1], - "711": [1, 1, 1], - "712": [0, 1, 1], - "713": [0, 1, 1], - "714": [0, 1, 1], - "715": [0, 1, 1], - "716-active": [0, 1, 1], - "716-neutral": [0, 1, 1], - "717": [0, 2, 2], - "720-unbound": [1, 1, 1], - "720": [1, 1, 1], - "728": [0, 1, 1], - "729": [0, 2, 2], - "730": [0, 2, 1], - "734": [0, 1, 1], - "735": [0, 1, 1], - "742": [0, 2, 2], - "743": [0, 2, 2], - "747": [0, 2, 2], - "748": [0, 1, 1], - "751": [0, 1, 1], - "752": [0, 1, 1], - "753": [0, 1, 1], - "754": [0, 2, 2], - "755": [0, 1, 1], - "756": [0, 1, 1], - "761": [0, 1, 1], - "762": [0, 1, 1], - "763": [0, 1, 1], - "767": [0, 1, 1], - "768": [0, 1, 1], - "770": [0, 0, 0], - "771": [0, 2, 2], - "772": [0, 1, 1], - "773-fighting": [0, 1, 1], - "773-psychic": [0, 1, 1], - "773-poison": [0, 1, 1], - "773-ground": [0, 1, 1], - "773-ghost": [0, 1, 1], - "773-steel": [0, 1, 1], - "773-rock": [0, 1, 1], - "773-grass": [0, 1, 1], - "773-dragon": [0, 1, 1], - "773-bug": [0, 1, 1], - "773-ice": [0, 1, 1], - "773-dark": [0, 1, 1], - "773": [0, 1, 1], - "773-fairy": [0, 1, 1], - "773-water": [0, 1, 1], - "773-electric": [0, 1, 1], - "773-flying": [0, 1, 1], - "773-fire": [0, 1, 1], - "776": [0, 1, 1], - "777": [0, 1, 1], - "778-busted": [0, 1, 1], - "778-disguised": [0, 1, 1], - "779": [0, 1, 1], - "789": [1, 1, 1], - "790": [0, 1, 1], - "791": [2, 1, 1], - "792": [0, 1, 1], - "793": [0, 2, 2], - "797": [0, 1, 1], - "798": [0, 1, 1], - "800-dawn-wings": [0, 1, 1], - "800-dusk-mane": [0, 1, 1], - "800-ultra": [0, 1, 1], - "800": [0, 1, 1], - "802": [1, 1, 1], - "803": [0, 1, 1], - "804": [0, 1, 1], - "807": [0, 1, 1], - "808": [0, 1, 1], - "809": [0, 1, 1], - "816": [0, 1, 1], - "817": [0, 1, 1], - "818": [1, 1, 1], - "821": [0, 2, 2], - "822": [0, 1, 1], - "823": [0, 1, 1], - "829": [0, 1, 1], - "830": [0, 1, 1], - "835": [0, 1, 1], - "836": [0, 2, 2], - "850": [0, 1, 1], - "851": [0, 1, 1], - "854": [0, 1, 1], - "855": [0, 1, 1], - "856": [0, 1, 1], - "857": [0, 2, 2], - "858": [0, 1, 1], - "859": [0, 1, 1], - "860": [0, 1, 1], - "861": [0, 1, 1], - "862": [0, 1, 1], - "863": [0, 1, 1], - "864": [0, 1, 1], - "867": [0, 1, 1], - "872": [1, 1, 1], - "873": [1, 1, 1], - "876-female": [0, 1, 1], - "876": [0, 1, 1], - "877-hangry": [1, 1, 1], - "877": [1, 1, 1], - "880": [0, 1, 1], - "881": [0, 1, 1], - "882": [0, 2, 1], - "883": [0, 1, 1], - "884": [0, 1, 1], - "885": [1, 1, 1], - "886": [1, 1, 1], - "887": [1, 1, 1], - "888": [0, 1, 1], - "888-crowned": [0, 1, 1], - "889": [0, 1, 1], - "889-crowned": [0, 1, 1], - "890": [0, 2, 1], - "890-eternamax": [0, 1, 1], - "891": [1, 1, 1], - "892-rapid-strike": [1, 1, 1], - "892": [1, 1, 1], - "894": [0, 1, 1], - "895": [0, 1, 1], - "896": [1, 1, 1], - "897": [1, 1, 1], - "898": [1, 1, 1], - "898-ice": [1, 1, 1], - "898-shadow": [1, 1, 1], - "900": [0, 1, 1], - "901": [0, 1, 1], - "903": [0, 1, 1], - "909": [0, 1, 1], - "910": [0, 2, 2], - "911": [0, 2, 2], - "912": [0, 1, 2], - "913": [0, 1, 2], - "914": [0, 2, 1], - "919": [1, 1, 1], - "920": [1, 1, 1], - "924": [1, 1, 1], - "925-four": [1, 2, 2], - "925-three": [1, 2, 2], - "932": [0, 2, 2], - "933": [0, 2, 2], - "934": [0, 1, 1], - "935": [1, 1, 2], - "936": [2, 2, 2], - "937": [2, 2, 2], - "940": [0, 1, 1], - "941": [0, 1, 1], - "944": [0, 1, 1], - "945": [0, 1, 1], - "948": [0, 1, 1], - "949": [0, 1, 1], - "951": [0, 1, 1], - "952": [0, 1, 1], - "953": [0, 1, 1], - "954": [0, 1, 1], - "957": [2, 2, 2], - "958": [2, 2, 2], - "959": [2, 2, 2], - "962": [1, 1, 1], - "967": [0, 1, 1], - "968": [0, 1, 1], - "969": [0, 1, 1], - "970": [0, 1, 1], - "973": [1, 1, 1], - "974": [0, 1, 1], - "975": [0, 1, 1], - "978-curly": [0, 2, 2], - "978-droopy": [0, 2, 2], - "978-stretchy": [0, 2, 2], - "979": [2, 2, 2], - "981": [0, 1, 1], - "982": [0, 1, 1], - "982-three-segment": [0, 1, 1], - "987": [1, 1, 1], - "988": [0, 1, 2], - "993": [0, 1, 1], - "994": [0, 1, 2], - "995": [0, 1, 1], - "996": [0, 1, 1], - "997": [0, 2, 2], - "998": [0, 2, 2], - "999": [2, 1, 1], - "1000": [1, 1, 1], - "1001": [0, 1, 1], - "1003": [0, 1, 1], - "1004": [0, 1, 1], - "1006": [0, 2, 1], - "1007-apex-build": [0, 2, 2], - "1008-ultimate-mode": [1, 1, 1], - "2026": [0, 1, 1], - "2027": [0, 1, 1], - "2028": [0, 1, 1], - "2052": [0, 1, 1], - "2053": [0, 1, 0], - "2103": [0, 1, 1], - "4052": [0, 1, 1], - "4077": [0, 1, 1], - "4078": [0, 1, 1], - "4079": [0, 1, 1], - "4080": [2, 1, 1], - "4144": [0, 1, 1], - "4145": [0, 1, 1], - "4146": [0, 1, 1], - "4199": [2, 1, 1], - "4222": [0, 1, 1], - "4263": [0, 1, 1], - "4264": [0, 1, 1], - "4562": [0, 1, 1], - "6100": [0, 1, 1], - "6101": [0, 1, 1], - "6215": [0, 1, 1], - "6503": [0, 1, 1], - "6549": [0, 1, 1], - "6570": [0, 1, 1], - "6571": [0, 1, 1], - "6705": [0, 1, 1], - "6706": [0, 1, 1], - "6713": [0, 1, 1], - "female": { - "6215": [0, 1, 1] - }, - "back": { - "3-mega": [0, 2, 2], - "6-mega-x": [0, 2, 2], - "6-mega-y": [0, 1, 2], - "80-mega": [0, 1, 1], - "94-mega": [1, 1, 1], - "127-mega": [0, 1, 1], - "130-mega": [0, 1, 1], - "142-mega": [0, 1, 1], - "150-mega-x": [0, 1, 1], - "150-mega-y": [0, 1, 1], - "181-mega": [0, 1, 2], - "212-mega": [1, 2, 2], - "229-mega": [0, 1, 1], - "248-mega": [0, 1, 1], - "257-mega": [0, 1, 1], - "282-mega": [0, 1, 1], - "302-mega": [0, 1, 1], - "303-mega": [0, 1, 1], - "306-mega": [1, 1, 1], - "308-mega": [0, 1, 1], - "310-mega": [0, 1, 1], - "334-mega": [0, 1, 1], - "354-mega": [0, 1, 1], - "359-mega": [0, 1, 1], - "362-mega": [0, 1, 1], - "373-mega": [0, 1, 1], - "376-mega": [0, 1, 1], - "380-mega": [0, 1, 1], - "381-mega": [0, 1, 1], - "382-primal": [0, 1, 1], - "383-primal": [0, 1, 1], - "384-mega": [0, 1, 1], - "428-mega": [0, 1, 1], - "445-mega": [1, 1, 1], - "448-mega": [1, 1, 1], - "475-mega": [0, 2, 2], - "531-mega": [0, 1, 1], - "653": [0, 1, 1], - "654": [0, 1, 1], - "655": [0, 1, 1], - "656": [0, 1, 1], - "657": [0, 1, 1], - "658": [0, 1, 1], - "658-ash": [0, 1, 1], - "664": [0, 1, 1], - "665": [0, 1, 1], - "666-archipelago": [0, 1, 1], - "666-continental": [0, 1, 1], - "666-elegant": [0, 1, 1], - "666-fancy": [0, 1, 1], - "666-garden": [0, 1, 1], - "666-high-plains": [0, 1, 1], - "666-icy-snow": [0, 1, 1], - "666-jungle": [0, 1, 1], - "666-marine": [0, 1, 1], - "666-meadow": [0, 1, 1], - "666-modern": [0, 1, 1], - "666-monsoon": [0, 1, 1], - "666-ocean": [0, 1, 1], - "666-poke-ball": [0, 1, 1], - "666-polar": [0, 1, 1], - "666-river": [0, 1, 1], - "666-sandstorm": [0, 1, 1], - "666-savanna": [0, 1, 1], - "666-sun": [0, 1, 1], - "666-tundra": [0, 1, 1], - "669-red": [0, 2, 2], - "669-blue": [0, 2, 2], - "669-white": [0, 2, 2], - "669-yellow": [0, 2, 2], - "669-orange": [0, 2, 2], - "670-white": [0, 1, 1], - "670-blue": [0, 2, 2], - "670-orange": [0, 1, 1], - "670-red": [0, 1, 1], - "670-yellow": [0, 1, 1], - "671-red": [0, 1, 1], - "671-blue": [0, 1, 1], - "671-yellow": [0, 1, 1], - "671-white": [0, 1, 1], - "671-orange": [0, 1, 1], - "672": [0, 1, 1], - "673": [0, 1, 1], - "676": [0, 1, 1], - "677": [0, 1, 1], - "678-female": [0, 1, 1], - "678": [0, 1, 1], - "682": [0, 1, 1], - "683": [0, 1, 1], - "684": [0, 1, 1], - "685": [0, 1, 1], - "688": [0, 1, 1], - "689": [0, 1, 1], - "690": [0, 1, 1], - "691": [0, 1, 1], - "696": [0, 1, 1], - "697": [0, 1, 1], - "698": [0, 1, 1], - "699": [0, 2, 2], - "700": [0, 1, 1], - "702": [0, 1, 1], - "703": [0, 1, 1], - "704": [0, 1, 1], - "705": [0, 1, 1], - "706": [0, 1, 1], - "708": [0, 1, 1], - "709": [0, 1, 1], - "710": [0, 1, 1], - "711": [1, 1, 1], - "712": [0, 1, 1], - "713": [0, 1, 1], - "714": [0, 1, 1], - "715": [0, 1, 1], - "716-active": [0, 1, 1], - "716-neutral": [0, 1, 1], - "717": [0, 1, 1], - "720-unbound": [1, 1, 1], - "720": [1, 1, 1], - "728": [0, 1, 1], - "729": [0, 2, 2], - "730": [0, 2, 1], - "734": [0, 1, 1], - "735": [0, 1, 1], - "742": [0, 2, 2], - "743": [0, 2, 2], - "747": [0, 2, 2], - "748": [0, 1, 1], - "751": [0, 1, 1], - "752": [0, 1, 1], - "753": [0, 1, 1], - "754": [0, 2, 2], - "755": [0, 1, 1], - "756": [0, 1, 1], - "761": [0, 1, 1], - "762": [0, 1, 1], - "763": [0, 1, 1], - "767": [0, 1, 1], - "768": [0, 1, 1], - "771": [0, 1, 1], - "772": [0, 1, 1], - "773-fighting": [0, 1, 1], - "773-psychic": [0, 1, 1], - "773-poison": [0, 1, 1], - "773-ground": [0, 1, 1], - "773-ghost": [0, 1, 1], - "773-steel": [0, 1, 1], - "773-rock": [0, 1, 1], - "773-grass": [0, 1, 1], - "773-dragon": [0, 1, 1], - "773-bug": [0, 1, 1], - "773-ice": [0, 1, 1], - "773-dark": [0, 1, 1], - "773": [0, 1, 1], - "773-fairy": [0, 1, 1], - "773-water": [0, 1, 1], - "773-electric": [0, 1, 1], - "773-flying": [0, 1, 1], - "773-fire": [0, 1, 1], - "776": [0, 2, 2], - "777": [0, 1, 1], - "778-busted": [0, 1, 1], - "778-disguised": [0, 1, 1], - "779": [0, 1, 1], - "789": [1, 1, 1], - "790": [0, 1, 1], - "791": [1, 1, 1], - "792": [0, 1, 1], - "793": [0, 1, 1], - "797": [0, 1, 1], - "798": [0, 1, 1], - "800-dawn-wings": [0, 1, 1], - "800-dusk-mane": [0, 1, 1], - "800-ultra": [0, 1, 1], - "800": [0, 1, 1], - "802": [1, 1, 1], - "803": [0, 1, 1], - "804": [0, 1, 1], - "807": [0, 1, 1], - "808": [0, 1, 1], - "809": [0, 1, 1], - "816": [0, 1, 1], - "817": [0, 1, 1], - "818": [0, 1, 1], - "821": [0, 1, 1], - "822": [0, 1, 1], - "823": [0, 1, 1], - "829": [0, 1, 1], - "830": [0, 1, 1], - "835": [0, 1, 1], - "836": [0, 1, 1], - "850": [0, 1, 1], - "851": [0, 1, 1], - "854": [0, 1, 1], - "855": [0, 1, 1], - "856": [0, 1, 1], - "857": [0, 2, 2], - "858": [0, 1, 1], - "859": [0, 1, 1], - "860": [0, 1, 1], - "861": [0, 1, 1], - "862": [0, 1, 1], - "863": [0, 1, 1], - "864": [0, 1, 1], - "867": [0, 1, 1], - "872": [1, 1, 1], - "873": [1, 1, 1], - "876-female": [0, 1, 1], - "876": [0, 1, 1], - "877-hangry": [1, 1, 1], - "877": [1, 1, 1], - "880": [0, 1, 1], - "881": [0, 1, 1], - "882": [0, 1, 1], - "883": [0, 1, 1], - "884": [0, 1, 1], - "885": [1, 1, 1], - "886": [1, 1, 1], - "887": [1, 1, 1], - "888": [0, 1, 1], - "888-crowned": [0, 1, 1], - "889": [0, 1, 1], - "889-crowned": [0, 1, 1], - "890": [0, 1, 1], - "891": [1, 1, 1], - "892-rapid-strike": [1, 1, 1], - "892": [1, 1, 1], - "894": [0, 1, 1], - "895": [0, 1, 1], - "896": [1, 1, 1], - "897": [1, 1, 1], - "898": [1, 1, 1], - "898-ice": [1, 1, 1], - "898-shadow": [1, 1, 1], - "900": [0, 1, 1], - "901": [0, 1, 1], - "903": [0, 1, 1], - "909": [0, 1, 1], - "910": [0, 2, 2], - "911": [0, 1, 1], - "912": [0, 1, 1], - "913": [0, 1, 1], - "914": [0, 2, 2], - "919": [1, 1, 1], - "920": [1, 1, 1], - "924": [1, 1, 1], - "925-four": [1, 2, 2], - "925-three": [1, 2, 2], - "932": [0, 1, 1], - "933": [0, 1, 1], - "934": [0, 1, 1], - "935": [2, 2, 2], - "936": [2, 2, 2], - "937": [2, 2, 2], - "940": [0, 1, 1], - "941": [0, 1, 1], - "944": [0, 1, 1], - "945": [0, 1, 1], - "948": [0, 1, 1], - "949": [0, 1, 1], - "951": [0, 1, 1], - "952": [0, 2, 1], - "953": [0, 1, 1], - "954": [0, 1, 1], - "957": [1, 1, 1], - "958": [1, 1, 1], - "959": [1, 1, 1], - "962": [1, 1, 1], - "967": [0, 1, 1], - "968": [0, 2, 2], - "969": [0, 1, 1], - "970": [0, 1, 1], - "973": [1, 1, 1], - "974": [0, 1, 1], - "975": [0, 1, 1], - "978-curly": [0, 2, 2], - "978-droopy": [0, 2, 2], - "978-stretchy": [0, 1, 1], - "979": [1, 1, 1], - "981": [0, 1, 1], - "982": [0, 1, 1], - "982-three-segment": [0, 1, 1], - "987": [1, 1, 1], - "988": [0, 1, 1], - "993": [0, 1, 1], - "994": [0, 1, 1], - "995": [0, 1, 1], - "996": [0, 1, 1], - "997": [0, 1, 1], - "998": [0, 1, 1], - "999": [1, 1, 1], - "1000": [1, 1, 1], - "1001": [0, 1, 1], - "1003": [0, 1, 1], - "1004": [0, 1, 1], - "1006": [0, 2, 2], - "1007-apex-build": [0, 2, 2], - "1008-ultimate-mode": [1, 1, 1], - "2026": [0, 1, 1], - "2027": [0, 1, 1], - "2028": [0, 1, 1], - "2052": [0, 1, 1], - "2053": [0, 1, 1], - "2103": [0, 1, 1], - "4052": [0, 1, 1], - "4077": [0, 1, 1], - "4078": [0, 1, 1], - "4079": [0, 1, 1], - "4080": [2, 2, 2], - "4144": [0, 1, 1], - "4145": [0, 1, 1], - "4146": [0, 1, 1], - "4199": [2, 1, 1], - "4222": [0, 1, 1], - "4263": [0, 1, 1], - "4264": [0, 1, 1], - "4562": [0, 1, 1], - "6100": [0, 1, 1], - "6101": [0, 1, 1], - "6215": [0, 1, 1], - "6503": [0, 1, 1], - "6549": [0, 1, 1], - "6570": [0, 1, 1], - "6571": [0, 1, 1], - "6705": [0, 1, 1], - "6706": [0, 1, 1], - "6713": [0, 1, 1], - "female": { - "6215": [0, 1, 1] - } - } } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/728.json b/public/images/pokemon/variant/back/728.json index ba8646ca4ff..fb17e2c119e 100644 --- a/public/images/pokemon/variant/back/728.json +++ b/public/images/pokemon/variant/back/728.json @@ -12,7 +12,9 @@ "bfbfbf": "c2beb4", "314f8c": "006355", "639ba6": "858d7d", - "a1dae5": "92b599" + "a1dae5": "92b599", + "1e3a66": "363d2f", + "2c4f8c": "5a6154" }, "2": { "733f50": "620a33", @@ -27,6 +29,8 @@ "bfbfbf": "bfb4b9", "314f8c": "770f29", "639ba6": "b88389", - "a1dae5": "f7c1c5" + "a1dae5": "f7c1c5", + "1e3a66": "773f46", + "2c4f8c": "a45f67" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/back/730.json b/public/images/pokemon/variant/back/730.json index ed6a04cd9f5..eec815b0572 100644 --- a/public/images/pokemon/variant/back/730.json +++ b/public/images/pokemon/variant/back/730.json @@ -1,34 +1,46 @@ { "1": { - "0e6792": "b54f5f", - "6ac8e3": "ffa0a8", - "44a0b5": "d87383", - "727481": "74312e", - "aac7e6": "ea7c5b", - "82a7b9": "c35861", "101010": "101010", - "bdbdc1": "c0b7a1", - "f8f8f8": "fff2d4", "8d3f4a": "a62c20", - "ff8496": "ff8072", "c76374": "e54c41", + "0e6792": "b54f5f", "1241a1": "006355", - "1470de": "009469" + "6d7481": "917393", + "727481": "a0866f", + "1470de": "009469", + "5a8092": "74312e", + "44a0b5": "d87383", + "64c5e1": "00dc9c", + "6ac8e3": "ffa0a8", + "82a7b9": "c35861", + "ff8496": "ff8072", + "bdbdc1": "c0b7a1", + "c0bdc1": "beaac0", + "aac7e6": "ea7c5b", + "f8f8f8": "fff2d4", + "faf8f8": "f1e8f1", + "fef8f8": "fef8f8" }, "2": { - "0e6792": "500518", - "6ac8e3": "a6213f", - "44a0b5": "770f29", - "727481": "5c2141", - "aac7e6": "e9a5c0", - "82a7b9": "c17b97", "101010": "101010", - "bdbdc1": "bfb4b9", - "f8f8f8": "f5edee", "8d3f4a": "1d1638", - "ff8496": "614388", "c76374": "391e62", + "0e6792": "500518", "1241a1": "591945", - "1470de": "81387e" + "6d7481": "81716d", + "727481": "9e8193", + "1470de": "81387e", + "5a8092": "5c2141", + "44a0b5": "770f29", + "64c5e1": "bd2b6b", + "6ac8e3": "a6213f", + "82a7b9": "c17b97", + "ff8496": "614388", + "bdbdc1": "bfb4b9", + "c0bdc1": "c0b4a5", + "aac7e6": "e9a5c0", + "f8f8f8": "f5edee", + "faf8f8": "f5f3e3", + "fef8f8": "fef8f8" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/698.json b/public/images/pokemon/variant/exp/698.json deleted file mode 100644 index daf9b8c6f84..00000000000 --- a/public/images/pokemon/variant/exp/698.json +++ /dev/null @@ -1,48 +0,0 @@ -{ - "1": { - "cbaa84": "44827c", - "b3747e": "4b7465", - "eeffbf": "cdffb5", - "dcffb2": "8eeab9", - "ffbfca": "43bf8d", - "b7ffb2": "72d8ce", - "fff2b2": "9bffa9", - "85b4cc": "cf755d", - "a6e1ff": "efab87", - "101010": "101010", - "cacaca": "cacaca", - "537180": "b04f4b", - "2eaeec": "4dc796", - "1f75a0": "29988e", - "fdfdfd": "fdfdfd", - "d197a1": "d197a1", - "ffdce6": "ffdce6", - "217aa6": "7f99e1", - "30b2f2": "b5dcff", - "f9f9f9": "e6e3b4", - "c0c0c0": "d7cca0" - }, - "2": { - "cbaa84": "cc78db", - "b3747e": "c452a6", - "eeffbf": "ed9ff2", - "dcffb2": "d7bbf4", - "ffbfca": "faccff", - "b7ffb2": "dceeff", - "fff2b2": "eb88b9", - "85b4cc": "654a8a", - "a6e1ff": "936daa", - "101010": "101010", - "cacaca": "cacaca", - "537180": "392d65", - "2eaeec": "ad4e6e", - "1f75a0": "8d2656", - "fdfdfd": "fdfdfd", - "d197a1": "d197a1", - "ffdce6": "ffdce6", - "217aa6": "efaa51", - "30b2f2": "ffd169", - "f9f9f9": "373453", - "c0c0c0": "282747" - } -} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/703.json b/public/images/pokemon/variant/exp/703.json deleted file mode 100644 index c024feb1b30..00000000000 --- a/public/images/pokemon/variant/exp/703.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "1": { - "535763": "292638", - "306090": "c35b2a", - "c3c7d3": "68638e", - "88aacc": "e67c37", - "fefefe": "fefefe", - "a3a7b3": "4d496b", - "737783": "37344e", - "101010": "101010", - "bbddff": "ffa633", - "1fbfdf": "ff9b44", - "5f6060": "e6ac60", - "fcfefe": "ffeed6", - "bfbbbb": "ffd3a1" - }, - "2": { - "535763": "976ba9", - "306090": "a03c69", - "c3c7d3": "faecff", - "88aacc": "e25493", - "fefefe": "ffe2ee", - "a3a7b3": "e4cdf9", - "737783": "cca1db", - "101010": "101010", - "bbddff": "f591bd", - "1fbfdf": "de5f8e", - "5f6060": "5a3d84", - "fcfefe": "a473bf", - "bfbbbb": "8359a7" - } -} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/708.json b/public/images/pokemon/variant/exp/708.json deleted file mode 100644 index b32bbb79cd9..00000000000 --- a/public/images/pokemon/variant/exp/708.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "1": { - "101010": "101010", - "2b2a3a": "722023", - "603d2b": "36384f", - "215738": "4d362e", - "48484a": "a14743", - "c18760": "7c808c", - "3fa76c": "907f76", - "915e45": "575a6a", - "0b0c0b": "0b0c0b", - "da585b": "5996d2", - "ff8c8f": "87d1ff" - }, - "2": { - "101010": "101010", - "2b2a3a": "6f5f80", - "603d2b": "31161d", - "215738": "a94079", - "48484a": "9c92a4", - "c18760": "7e5658", - "3fa76c": "da7ea8", - "915e45": "56323a", - "0b0c0b": "0b0c0b", - "da585b": "e18933", - "ff8c8f": "ffc875" - } -} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/714.json b/public/images/pokemon/variant/exp/714.json deleted file mode 100644 index 018366c5381..00000000000 --- a/public/images/pokemon/variant/exp/714.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "1": { - "6a3f73": "731338", - "bd70cc": "a42c54", - "101010": "101010", - "bfacbf": "7047ba", - "8e5499": "8e1d4b", - "f2daf2": "8d7be3", - "404040": "202558", - "665c66": "2f386b", - "ccb43d": "ff8a58", - "f8f8f8": "8d7be3", - "595959": "2f386b", - "ffe14c": "ffc182", - "000000": "101010" - }, - "2": { - "6a3f73": "5f151c", - "bd70cc": "c24430", - "101010": "101010", - "bfacbf": "f9e8dd", - "8e5499": "882c27", - "f2daf2": "f8f8f8", - "404040": "5b1922", - "665c66": "7c2928", - "ccb43d": "33d8d0", - "f8f8f8": "f8f8f8", - "595959": "7c2928", - "ffe14c": "49ffcd", - "000000": "101010" - } -} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/728.json b/public/images/pokemon/variant/exp/728.json index 2439f925d49..a9c7155ec91 100644 --- a/public/images/pokemon/variant/exp/728.json +++ b/public/images/pokemon/variant/exp/728.json @@ -1,36 +1,44 @@ { "1": { - "2c316e": "00473d", - "536fc3": "009469", - "7199db": "14af82", - "8d3774": "a62c20", - "ef71c0": "ff8072", - "ffc8ea": "ffc8ea", - "3c4b92": "006355", - "171717": "171717", - "b95094": "e54c41", - "fdfdfd": "fff6e2", - "ccc2d0": "c2beb4", - "9283a3": "808080", - "7090a3": "858d7d", - "a1d9e7": "92b599", - "3e2d33": "3e2d33" + "101010": "101010", + "1e3a66": "363d2f", + "243a66": "00473d", + "733f50": "a62c20", + "404040": "404040", + "b3627d": "e54c41", + "2c4f8c": "5a6154", + "314f8c": "006355", + "436cbf": "009469", + "e57ea1": "ff8072", + "5f9ba6": "b56e76", + "639ba6": "858d7d", + "6c90d9": "14af82", + "808080": "808080", + "bfbfbf": "c2beb4", + "9edae5": "f7c1c5", + "a1dae5": "92b599", + "f8f8f8": "fff6e2", + "fefefe": "fff6e2" }, "2": { - "2c316e": "54041b", - "536fc3": "a6213f", - "7199db": "be294a", - "8d3774": "620a33", - "ef71c0": "dd3780", - "ffc8ea": "f5edee", - "3c4b92": "770f29", - "171717": "171717", - "b95094": "a7225c", - "fdfdfd": "f5edee", - "ccc2d0": "bfb4b9", - "9283a3": "808080", - "7090a3": "b88389", - "a1d9e7": "f7c1c5", - "3e2d33": "3e2d33" + "101010": "101010", + "1e3a66": "773f46", + "243a66": "54041b", + "733f50": "620a33", + "404040": "404040", + "b3627d": "a7225c", + "2c4f8c": "a45f67", + "314f8c": "770f29", + "436cbf": "a6213f", + "e57ea1": "dd3780", + "5f9ba6": "408c62", + "639ba6": "b88389", + "6c90d9": "be294a", + "808080": "808080", + "bfbfbf": "bfb4b9", + "9edae5": "91e6a2", + "a1dae5": "f7c1c5", + "f8f8f8": "f5edee", + "fefefe": "fff6e2" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/729.json b/public/images/pokemon/variant/exp/729.json index 7d679b135ef..7b196fda526 100644 --- a/public/images/pokemon/variant/exp/729.json +++ b/public/images/pokemon/variant/exp/729.json @@ -1,32 +1,46 @@ { "1": { - "808080": "808080", - "f8f8f8": "fff6e2", - "4d4d4d": "2d2e31", - "b3b3b3": "c2beb4", - "3d5f66": "3d5f66", - "a1dae5": "ffbd98", - "639ba6": "be665d", - "77b8d9": "0ccfa2", - "3f6273": "006b65", "101010": "101010", - "5b8da6": "009a88", + "2d2e31": "2d2e31", "733f50": "bb402f", - "e57ea1": "ff9384" + "476d72": "be665d", + "b3627d": "fb6051", + "326187": "006b65", + "e57ea1": "ff9384", + "639ba6": "b56e76", + "2d8ec4": "009a88", + "1eb9ee": "0ccfa2", + "808080": "808080", + "8dafaf": "ff989e", + "bfbfbf": "c2beb4", + "bad8d8": "ffbd98", + "bae1f1": "f7c1c5", + "f8f8f8": "fff6e2", + "fdfdfd": "fff6e2", + "e17ea1": "ff9384", + "ab627d": "fb6051", + "6f3f50": "bb402f" }, "2": { - "808080": "808080", - "f8f8f8": "f5edee", - "4d4d4d": "4d4d4d", - "b3b3b3": "bfb4b9", - "3d5f66": "793f5e", - "a1dae5": "deabce", - "639ba6": "b681a6", - "77b8d9": "c6496f", - "3f6273": "5a141b", "101010": "101010", - "5b8da6": "952c3f", + "2d2e31": "2d2e31", "733f50": "620a33", - "e57ea1": "dd3780" + "476d72": "793f5e", + "b3627d": "a7225c", + "326187": "5a141b", + "e57ea1": "dd3780", + "639ba6": "408c62", + "2d8ec4": "952c3f", + "1eb9ee": "c6496f", + "808080": "808080", + "8dafaf": "b681a6", + "bfbfbf": "bfb4b9", + "bad8d8": "deabce", + "bae1f1": "91e6a2", + "f8f8f8": "f5edee", + "fdfdfd": "fff6e2", + "e17ea1": "deabce", + "ab627d": "b681a6", + "6f3f50": "793f5e" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/729_2.json b/public/images/pokemon/variant/exp/729_2.json deleted file mode 100644 index 530888eaf6e..00000000000 --- a/public/images/pokemon/variant/exp/729_2.json +++ /dev/null @@ -1,272 +0,0 @@ -{ - "textures": [ - { - "image": "729_2.png", - "format": "RGBA8888", - "size": { - "w": 141, - "h": 141 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 51 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 49, - "h": 51 - }, - "frame": { - "x": 0, - "y": 0, - "w": 49, - "h": 51 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 51 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 49, - "h": 51 - }, - "frame": { - "x": 0, - "y": 51, - "w": 49, - "h": 51 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 51 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 49, - "h": 51 - }, - "frame": { - "x": 0, - "y": 51, - "w": 49, - "h": 51 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 51 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 48, - "h": 50 - }, - "frame": { - "x": 49, - "y": 0, - "w": 48, - "h": 50 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 51 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 48, - "h": 50 - }, - "frame": { - "x": 49, - "y": 0, - "w": 48, - "h": 50 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 51 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 42, - "h": 47 - }, - "frame": { - "x": 97, - "y": 0, - "w": 42, - "h": 47 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 51 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 42, - "h": 47 - }, - "frame": { - "x": 97, - "y": 0, - "w": 42, - "h": 47 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 51 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 40, - "h": 47 - }, - "frame": { - "x": 97, - "y": 47, - "w": 40, - "h": 47 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 51 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 46, - "h": 48 - }, - "frame": { - "x": 49, - "y": 50, - "w": 46, - "h": 48 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 51 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 46, - "h": 48 - }, - "frame": { - "x": 49, - "y": 50, - "w": 46, - "h": 48 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 51 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 45, - "h": 47 - }, - "frame": { - "x": 95, - "y": 94, - "w": 45, - "h": 47 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 51 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 45, - "h": 47 - }, - "frame": { - "x": 95, - "y": 94, - "w": 45, - "h": 47 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:4df3ec883b357e664a50e3015060795f:29a8d34f9df9fa51691fda1da5961207:b2d5dd692ec79c7357afdffa7b3670a9$" - } -} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/729_2.png b/public/images/pokemon/variant/exp/729_2.png deleted file mode 100644 index 8349e63c91a..00000000000 Binary files a/public/images/pokemon/variant/exp/729_2.png and /dev/null differ diff --git a/public/images/pokemon/variant/exp/729_3.json b/public/images/pokemon/variant/exp/729_3.json deleted file mode 100644 index 632cef739a2..00000000000 --- a/public/images/pokemon/variant/exp/729_3.json +++ /dev/null @@ -1,272 +0,0 @@ -{ - "textures": [ - { - "image": "729_3.png", - "format": "RGBA8888", - "size": { - "w": 141, - "h": 141 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 51 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 49, - "h": 51 - }, - "frame": { - "x": 0, - "y": 0, - "w": 49, - "h": 51 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 51 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 49, - "h": 51 - }, - "frame": { - "x": 0, - "y": 51, - "w": 49, - "h": 51 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 51 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 49, - "h": 51 - }, - "frame": { - "x": 0, - "y": 51, - "w": 49, - "h": 51 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 51 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 48, - "h": 50 - }, - "frame": { - "x": 49, - "y": 0, - "w": 48, - "h": 50 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 51 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 48, - "h": 50 - }, - "frame": { - "x": 49, - "y": 0, - "w": 48, - "h": 50 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 51 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 42, - "h": 47 - }, - "frame": { - "x": 97, - "y": 0, - "w": 42, - "h": 47 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 51 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 42, - "h": 47 - }, - "frame": { - "x": 97, - "y": 0, - "w": 42, - "h": 47 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 51 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 40, - "h": 47 - }, - "frame": { - "x": 97, - "y": 47, - "w": 40, - "h": 47 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 51 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 46, - "h": 48 - }, - "frame": { - "x": 49, - "y": 50, - "w": 46, - "h": 48 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 51 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 46, - "h": 48 - }, - "frame": { - "x": 49, - "y": 50, - "w": 46, - "h": 48 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 51 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 45, - "h": 47 - }, - "frame": { - "x": 95, - "y": 94, - "w": 45, - "h": 47 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 50, - "h": 51 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 45, - "h": 47 - }, - "frame": { - "x": 95, - "y": 94, - "w": 45, - "h": 47 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:4df3ec883b357e664a50e3015060795f:29a8d34f9df9fa51691fda1da5961207:b2d5dd692ec79c7357afdffa7b3670a9$" - } -} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/729_3.png b/public/images/pokemon/variant/exp/729_3.png deleted file mode 100644 index a4b4197f18a..00000000000 Binary files a/public/images/pokemon/variant/exp/729_3.png and /dev/null differ diff --git a/public/images/pokemon/variant/exp/730.json b/public/images/pokemon/variant/exp/730.json index dbc5dda270d..5c8deeb52b2 100644 --- a/public/images/pokemon/variant/exp/730.json +++ b/public/images/pokemon/variant/exp/730.json @@ -1,20 +1,52 @@ { + "1": { + "101010": "101010", + "843843": "a62c20", + "8d3f4a": "a62c20", + "c46074": "e54c41", + "c76374": "e54c41", + "0e6792": "b54f5f", + "1241a1": "006355", + "6d7481": "917393", + "727481": "a0866f", + "1470de": "009469", + "5a8092": "74312e", + "44a0b5": "d87383", + "64c5e1": "00dc9c", + "6ac8e3": "ffa0a8", + "82a7b9": "c35861", + "fd8196": "ff8072", + "ff8496": "ff8072", + "bdbdc1": "c0b7a1", + "c0bdc1": "beaac0", + "aac7e6": "ea7c5b", + "f8f8f8": "fff2d4", + "faf8f8": "f1e8f1", + "fef8f8": "fef8f8" + }, "2": { - "316a77": "500518", - "60dbf5": "a6213f", - "6189ac": "5c2141", - "cee8ff": "e9a5c0", - "499bb9": "770f29", - "777171": "5c2141", - "cfbdc6": "bfb4b9", - "74b3e9": "c17b97", - "ffffff": "f5edee", - "000000": "000000", - "c24262": "1d1638", - "e9b9c5": "614388", - "ee8ba4": "391e62", - "0a3a65": "591945", - "1073cc": "81387e", - "115591": "591945" + "101010": "101010", + "843843": "5c2141", + "8d3f4a": "1d1638", + "c46074": "c17b97", + "c76374": "391e62", + "0e6792": "500518", + "1241a1": "591945", + "6d7481": "81716d", + "727481": "9e8193", + "1470de": "81387e", + "5a8092": "5c2141", + "44a0b5": "770f29", + "64c5e1": "bd2b6b", + "6ac8e3": "a6213f", + "82a7b9": "c17b97", + "fd8196": "e9a5c0", + "ff8496": "614388", + "bdbdc1": "bfb4b9", + "c0bdc1": "c0b4a5", + "aac7e6": "e9a5c0", + "f8f8f8": "f5edee", + "faf8f8": "f5f3e3", + "fef8f8": "fef8f8" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/730_2.json b/public/images/pokemon/variant/exp/730_2.json deleted file mode 100644 index cc806a36b25..00000000000 --- a/public/images/pokemon/variant/exp/730_2.json +++ /dev/null @@ -1,2309 +0,0 @@ -{ - "textures": [ - { - "image": "730_2.png", - "format": "RGBA8888", - "size": { - "w": 615, - "h": 615 - }, - "scale": 1, - "frames": [ - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 83, - "h": 81 - }, - "frame": { - "x": 0, - "y": 0, - "w": 83, - "h": 81 - } - }, - { - "filename": "0038.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 83, - "h": 81 - }, - "frame": { - "x": 0, - "y": 0, - "w": 83, - "h": 81 - } - }, - { - "filename": "0086.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 83, - "h": 81 - }, - "frame": { - "x": 0, - "y": 0, - "w": 83, - "h": 81 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 78, - "h": 85 - }, - "frame": { - "x": 0, - "y": 81, - "w": 78, - "h": 85 - } - }, - { - "filename": "0035.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 78, - "h": 85 - }, - "frame": { - "x": 0, - "y": 81, - "w": 78, - "h": 85 - } - }, - { - "filename": "0083.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 78, - "h": 85 - }, - "frame": { - "x": 0, - "y": 81, - "w": 78, - "h": 85 - } - }, - { - "filename": "0062.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 83, - "h": 80 - }, - "frame": { - "x": 83, - "y": 0, - "w": 83, - "h": 80 - } - }, - { - "filename": "0107.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 8, - "w": 83, - "h": 80 - }, - "frame": { - "x": 166, - "y": 0, - "w": 83, - "h": 80 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 74, - "h": 88 - }, - "frame": { - "x": 0, - "y": 166, - "w": 74, - "h": 88 - } - }, - { - "filename": "0034.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 74, - "h": 88 - }, - "frame": { - "x": 0, - "y": 166, - "w": 74, - "h": 88 - } - }, - { - "filename": "0082.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 74, - "h": 88 - }, - "frame": { - "x": 0, - "y": 166, - "w": 74, - "h": 88 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 9, - "w": 83, - "h": 79 - }, - "frame": { - "x": 249, - "y": 0, - "w": 83, - "h": 79 - } - }, - { - "filename": "0039.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 9, - "w": 83, - "h": 79 - }, - "frame": { - "x": 249, - "y": 0, - "w": 83, - "h": 79 - } - }, - { - "filename": "0087.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 9, - "w": 83, - "h": 79 - }, - "frame": { - "x": 249, - "y": 0, - "w": 83, - "h": 79 - } - }, - { - "filename": "0016.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 10, - "w": 84, - "h": 78 - }, - "frame": { - "x": 332, - "y": 0, - "w": 84, - "h": 78 - } - }, - { - "filename": "0040.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 10, - "w": 84, - "h": 78 - }, - "frame": { - "x": 332, - "y": 0, - "w": 84, - "h": 78 - } - }, - { - "filename": "0088.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 10, - "w": 84, - "h": 78 - }, - "frame": { - "x": 332, - "y": 0, - "w": 84, - "h": 78 - } - }, - { - "filename": "0064.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 10, - "w": 84, - "h": 78 - }, - "frame": { - "x": 416, - "y": 0, - "w": 84, - "h": 78 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 73, - "h": 88 - }, - "frame": { - "x": 0, - "y": 254, - "w": 73, - "h": 88 - } - }, - { - "filename": "0033.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 73, - "h": 88 - }, - "frame": { - "x": 0, - "y": 254, - "w": 73, - "h": 88 - } - }, - { - "filename": "0081.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 73, - "h": 88 - }, - "frame": { - "x": 0, - "y": 254, - "w": 73, - "h": 88 - } - }, - { - "filename": "0063.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 9, - "w": 83, - "h": 79 - }, - "frame": { - "x": 500, - "y": 0, - "w": 83, - "h": 79 - } - }, - { - "filename": "0057.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 73, - "h": 87 - }, - "frame": { - "x": 0, - "y": 342, - "w": 73, - "h": 87 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 75, - "h": 86 - }, - "frame": { - "x": 0, - "y": 429, - "w": 75, - "h": 86 - } - }, - { - "filename": "0032.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 75, - "h": 86 - }, - "frame": { - "x": 0, - "y": 429, - "w": 75, - "h": 86 - } - }, - { - "filename": "0080.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 75, - "h": 86 - }, - "frame": { - "x": 0, - "y": 429, - "w": 75, - "h": 86 - } - }, - { - "filename": "0056.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 75, - "h": 86 - }, - "frame": { - "x": 0, - "y": 515, - "w": 75, - "h": 86 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 75, - "h": 85 - }, - "frame": { - "x": 78, - "y": 81, - "w": 75, - "h": 85 - } - }, - { - "filename": "0031.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 75, - "h": 85 - }, - "frame": { - "x": 78, - "y": 81, - "w": 75, - "h": 85 - } - }, - { - "filename": "0079.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 75, - "h": 85 - }, - "frame": { - "x": 78, - "y": 81, - "w": 75, - "h": 85 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 81, - "h": 82 - }, - "frame": { - "x": 153, - "y": 80, - "w": 81, - "h": 82 - } - }, - { - "filename": "0037.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 81, - "h": 82 - }, - "frame": { - "x": 153, - "y": 80, - "w": 81, - "h": 82 - } - }, - { - "filename": "0085.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 81, - "h": 82 - }, - "frame": { - "x": 153, - "y": 80, - "w": 81, - "h": 82 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 80, - "h": 82 - }, - "frame": { - "x": 74, - "y": 166, - "w": 80, - "h": 82 - } - }, - { - "filename": "0036.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 80, - "h": 82 - }, - "frame": { - "x": 74, - "y": 166, - "w": 80, - "h": 82 - } - }, - { - "filename": "0084.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 80, - "h": 82 - }, - "frame": { - "x": 74, - "y": 166, - "w": 80, - "h": 82 - } - }, - { - "filename": "0108.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 80, - "h": 81 - }, - "frame": { - "x": 154, - "y": 162, - "w": 80, - "h": 81 - } - }, - { - "filename": "0055.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 75, - "h": 85 - }, - "frame": { - "x": 234, - "y": 80, - "w": 75, - "h": 85 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 78, - "h": 81 - }, - "frame": { - "x": 234, - "y": 165, - "w": 78, - "h": 81 - } - }, - { - "filename": "0025.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 78, - "h": 81 - }, - "frame": { - "x": 234, - "y": 165, - "w": 78, - "h": 81 - } - }, - { - "filename": "0049.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 78, - "h": 81 - }, - "frame": { - "x": 234, - "y": 165, - "w": 78, - "h": 81 - } - }, - { - "filename": "0073.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 78, - "h": 81 - }, - "frame": { - "x": 234, - "y": 165, - "w": 78, - "h": 81 - } - }, - { - "filename": "0097.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 78, - "h": 81 - }, - "frame": { - "x": 234, - "y": 165, - "w": 78, - "h": 81 - } - }, - { - "filename": "0058.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 74, - "h": 85 - }, - "frame": { - "x": 309, - "y": 79, - "w": 74, - "h": 85 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 78, - "h": 82 - }, - "frame": { - "x": 383, - "y": 78, - "w": 78, - "h": 82 - } - }, - { - "filename": "0028.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 78, - "h": 82 - }, - "frame": { - "x": 383, - "y": 78, - "w": 78, - "h": 82 - } - }, - { - "filename": "0052.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 78, - "h": 82 - }, - "frame": { - "x": 383, - "y": 78, - "w": 78, - "h": 82 - } - }, - { - "filename": "0076.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 78, - "h": 82 - }, - "frame": { - "x": 383, - "y": 78, - "w": 78, - "h": 82 - } - }, - { - "filename": "0059.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 78, - "h": 82 - }, - "frame": { - "x": 312, - "y": 164, - "w": 78, - "h": 82 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 78, - "h": 81 - }, - "frame": { - "x": 390, - "y": 160, - "w": 78, - "h": 81 - } - }, - { - "filename": "0026.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 78, - "h": 81 - }, - "frame": { - "x": 390, - "y": 160, - "w": 78, - "h": 81 - } - }, - { - "filename": "0050.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 78, - "h": 81 - }, - "frame": { - "x": 390, - "y": 160, - "w": 78, - "h": 81 - } - }, - { - "filename": "0074.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 78, - "h": 81 - }, - "frame": { - "x": 390, - "y": 160, - "w": 78, - "h": 81 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 78, - "h": 81 - }, - "frame": { - "x": 461, - "y": 79, - "w": 78, - "h": 81 - } - }, - { - "filename": "0027.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 78, - "h": 81 - }, - "frame": { - "x": 461, - "y": 79, - "w": 78, - "h": 81 - } - }, - { - "filename": "0051.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 78, - "h": 81 - }, - "frame": { - "x": 461, - "y": 79, - "w": 78, - "h": 81 - } - }, - { - "filename": "0075.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 78, - "h": 81 - }, - "frame": { - "x": 461, - "y": 79, - "w": 78, - "h": 81 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 76, - "h": 81 - }, - "frame": { - "x": 539, - "y": 79, - "w": 76, - "h": 81 - } - }, - { - "filename": "0030.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 76, - "h": 81 - }, - "frame": { - "x": 539, - "y": 79, - "w": 76, - "h": 81 - } - }, - { - "filename": "0054.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 76, - "h": 81 - }, - "frame": { - "x": 539, - "y": 79, - "w": 76, - "h": 81 - } - }, - { - "filename": "0078.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 76, - "h": 81 - }, - "frame": { - "x": 539, - "y": 79, - "w": 76, - "h": 81 - } - }, - { - "filename": "0061.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 81, - "h": 79 - }, - "frame": { - "x": 468, - "y": 160, - "w": 81, - "h": 79 - } - }, - { - "filename": "0023.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 13, - "w": 80, - "h": 75 - }, - "frame": { - "x": 154, - "y": 243, - "w": 80, - "h": 75 - } - }, - { - "filename": "0047.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 13, - "w": 80, - "h": 75 - }, - "frame": { - "x": 154, - "y": 243, - "w": 80, - "h": 75 - } - }, - { - "filename": "0095.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 13, - "w": 80, - "h": 75 - }, - "frame": { - "x": 154, - "y": 243, - "w": 80, - "h": 75 - } - }, - { - "filename": "0017.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 14, - "w": 84, - "h": 74 - }, - "frame": { - "x": 234, - "y": 246, - "w": 84, - "h": 74 - } - }, - { - "filename": "0041.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 14, - "w": 84, - "h": 74 - }, - "frame": { - "x": 234, - "y": 246, - "w": 84, - "h": 74 - } - }, - { - "filename": "0089.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 14, - "w": 84, - "h": 74 - }, - "frame": { - "x": 234, - "y": 246, - "w": 84, - "h": 74 - } - }, - { - "filename": "0060.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 6, - "w": 80, - "h": 79 - }, - "frame": { - "x": 74, - "y": 248, - "w": 80, - "h": 79 - } - }, - { - "filename": "0109.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 78, - "h": 81 - }, - "frame": { - "x": 73, - "y": 327, - "w": 78, - "h": 81 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 77, - "h": 81 - }, - "frame": { - "x": 318, - "y": 246, - "w": 77, - "h": 81 - } - }, - { - "filename": "0029.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 77, - "h": 81 - }, - "frame": { - "x": 318, - "y": 246, - "w": 77, - "h": 81 - } - }, - { - "filename": "0053.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 77, - "h": 81 - }, - "frame": { - "x": 318, - "y": 246, - "w": 77, - "h": 81 - } - }, - { - "filename": "0077.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 7, - "w": 77, - "h": 81 - }, - "frame": { - "x": 318, - "y": 246, - "w": 77, - "h": 81 - } - }, - { - "filename": "0098.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 9, - "w": 78, - "h": 79 - }, - "frame": { - "x": 395, - "y": 241, - "w": 78, - "h": 79 - } - }, - { - "filename": "0024.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 10, - "w": 78, - "h": 78 - }, - "frame": { - "x": 473, - "y": 239, - "w": 78, - "h": 78 - } - }, - { - "filename": "0048.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 10, - "w": 78, - "h": 78 - }, - "frame": { - "x": 473, - "y": 239, - "w": 78, - "h": 78 - } - }, - { - "filename": "0096.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 10, - "w": 78, - "h": 78 - }, - "frame": { - "x": 473, - "y": 239, - "w": 78, - "h": 78 - } - }, - { - "filename": "0072.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 10, - "w": 78, - "h": 78 - }, - "frame": { - "x": 75, - "y": 408, - "w": 78, - "h": 78 - } - }, - { - "filename": "0099.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 11, - "w": 79, - "h": 77 - }, - "frame": { - "x": 75, - "y": 486, - "w": 79, - "h": 77 - } - }, - { - "filename": "0071.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 13, - "w": 80, - "h": 75 - }, - "frame": { - "x": 154, - "y": 318, - "w": 80, - "h": 75 - } - }, - { - "filename": "0018.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 15, - "w": 84, - "h": 73 - }, - "frame": { - "x": 234, - "y": 320, - "w": 84, - "h": 73 - } - }, - { - "filename": "0042.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 15, - "w": 84, - "h": 73 - }, - "frame": { - "x": 234, - "y": 320, - "w": 84, - "h": 73 - } - }, - { - "filename": "0090.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 15, - "w": 84, - "h": 73 - }, - "frame": { - "x": 234, - "y": 320, - "w": 84, - "h": 73 - } - }, - { - "filename": "0019.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 16, - "w": 84, - "h": 72 - }, - "frame": { - "x": 318, - "y": 327, - "w": 84, - "h": 72 - } - }, - { - "filename": "0043.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 16, - "w": 84, - "h": 72 - }, - "frame": { - "x": 318, - "y": 327, - "w": 84, - "h": 72 - } - }, - { - "filename": "0091.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 16, - "w": 84, - "h": 72 - }, - "frame": { - "x": 318, - "y": 327, - "w": 84, - "h": 72 - } - }, - { - "filename": "0065.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 14, - "w": 84, - "h": 74 - }, - "frame": { - "x": 153, - "y": 393, - "w": 84, - "h": 74 - } - }, - { - "filename": "0101.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 17, - "w": 81, - "h": 71 - }, - "frame": { - "x": 237, - "y": 393, - "w": 81, - "h": 71 - } - }, - { - "filename": "0066.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 15, - "w": 84, - "h": 73 - }, - "frame": { - "x": 318, - "y": 399, - "w": 84, - "h": 73 - } - }, - { - "filename": "0106.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 13, - "w": 83, - "h": 75 - }, - "frame": { - "x": 402, - "y": 320, - "w": 83, - "h": 75 - } - }, - { - "filename": "0105.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 14, - "w": 84, - "h": 74 - }, - "frame": { - "x": 402, - "y": 395, - "w": 84, - "h": 74 - } - }, - { - "filename": "0100.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 14, - "w": 80, - "h": 74 - }, - "frame": { - "x": 485, - "y": 317, - "w": 80, - "h": 74 - } - }, - { - "filename": "0104.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 15, - "w": 83, - "h": 73 - }, - "frame": { - "x": 486, - "y": 391, - "w": 83, - "h": 73 - } - }, - { - "filename": "0067.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 16, - "w": 84, - "h": 72 - }, - "frame": { - "x": 154, - "y": 467, - "w": 84, - "h": 72 - } - }, - { - "filename": "0021.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 17, - "w": 83, - "h": 71 - }, - "frame": { - "x": 154, - "y": 539, - "w": 83, - "h": 71 - } - }, - { - "filename": "0045.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 17, - "w": 83, - "h": 71 - }, - "frame": { - "x": 154, - "y": 539, - "w": 83, - "h": 71 - } - }, - { - "filename": "0093.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 17, - "w": 83, - "h": 71 - }, - "frame": { - "x": 154, - "y": 539, - "w": 83, - "h": 71 - } - }, - { - "filename": "0022.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 17, - "w": 83, - "h": 71 - }, - "frame": { - "x": 486, - "y": 464, - "w": 83, - "h": 71 - } - }, - { - "filename": "0046.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 17, - "w": 83, - "h": 71 - }, - "frame": { - "x": 486, - "y": 464, - "w": 83, - "h": 71 - } - }, - { - "filename": "0094.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 17, - "w": 83, - "h": 71 - }, - "frame": { - "x": 486, - "y": 464, - "w": 83, - "h": 71 - } - }, - { - "filename": "0069.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 17, - "w": 83, - "h": 71 - }, - "frame": { - "x": 402, - "y": 469, - "w": 83, - "h": 71 - } - }, - { - "filename": "0070.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 17, - "w": 83, - "h": 71 - }, - "frame": { - "x": 485, - "y": 535, - "w": 83, - "h": 71 - } - }, - { - "filename": "0020.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 16, - "w": 82, - "h": 72 - }, - "frame": { - "x": 237, - "y": 539, - "w": 82, - "h": 72 - } - }, - { - "filename": "0044.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 16, - "w": 82, - "h": 72 - }, - "frame": { - "x": 237, - "y": 539, - "w": 82, - "h": 72 - } - }, - { - "filename": "0092.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 16, - "w": 82, - "h": 72 - }, - "frame": { - "x": 237, - "y": 539, - "w": 82, - "h": 72 - } - }, - { - "filename": "0103.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 16, - "w": 83, - "h": 72 - }, - "frame": { - "x": 319, - "y": 472, - "w": 83, - "h": 72 - } - }, - { - "filename": "0102.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 18, - "w": 82, - "h": 70 - }, - "frame": { - "x": 319, - "y": 544, - "w": 82, - "h": 70 - } - }, - { - "filename": "0068.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 84, - "h": 88 - }, - "spriteSourceSize": { - "x": 0, - "y": 16, - "w": 82, - "h": 72 - }, - "frame": { - "x": 402, - "y": 540, - "w": 82, - "h": 72 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:4329c19087eab420ea4188f3ebf013ba:3f36a5e65803b0f012c6fee4aeaf5df7:fcd0d2cb6b26724e796ae0dcb71fae3f$" - } -} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/730_2.png b/public/images/pokemon/variant/exp/730_2.png deleted file mode 100644 index f7a1b20a9be..00000000000 Binary files a/public/images/pokemon/variant/exp/730_2.png and /dev/null differ diff --git a/public/images/pokemon/variant/exp/back/698.json b/public/images/pokemon/variant/exp/back/698.json deleted file mode 100644 index af193c3bc0c..00000000000 --- a/public/images/pokemon/variant/exp/back/698.json +++ /dev/null @@ -1,38 +0,0 @@ -{ - "1": { - "b3747e": "4b7465", - "ffbfca": "43bf8d", - "fff2b2": "9bffa9", - "537180": "b04f4b", - "a6e1ff": "efab87", - "101010": "101010", - "85b4cc": "cf755d", - "217aa6": "7f99e1", - "30b2f2": "b5dcff", - "fdfdfd": "fdfdfd", - "c0c0c0": "d7cca0", - "cacaca": "cacaca", - "cbaa84": "44827c", - "dcffb2": "8eeab9", - "eeffbf": "cdffb5", - "b7ffb2": "72d8ce" - }, - "2": { - "b3747e": "c452a6", - "ffbfca": "faccff", - "fff2b2": "eb88b9", - "537180": "392d65", - "a6e1ff": "936daa", - "101010": "101010", - "85b4cc": "654a8a", - "217aa6": "efaa51", - "30b2f2": "ffd169", - "fdfdfd": "fdfdfd", - "c0c0c0": "282747", - "cacaca": "cacaca", - "cbaa84": "cc78db", - "dcffb2": "d7bbf4", - "eeffbf": "ed9ff2", - "b7ffb2": "dceeff" - } -} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/703.json b/public/images/pokemon/variant/exp/back/703.json deleted file mode 100644 index 376abd466d2..00000000000 --- a/public/images/pokemon/variant/exp/back/703.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "1": { - "306090": "c35b2a", - "88aacc": "e67c37", - "fefefe": "fefefe", - "535763": "292638", - "a3a7b3": "4d496b", - "737783": "37344e", - "bbddff": "ffa633", - "101010": "101010", - "5f6060": "e6ac60", - "bfbbbb": "ffd3a1", - "fcfefe": "ffeed6" - }, - "2": { - "306090": "a03c69", - "88aacc": "e25493", - "fefefe": "ffe2ee", - "535763": "976ba9", - "a3a7b3": "e4cdf9", - "737783": "cca1db", - "bbddff": "f591bd", - "101010": "101010", - "5f6060": "5a3d84", - "bfbbbb": "8359a7", - "fcfefe": "a473bf" - } -} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/708.json b/public/images/pokemon/variant/exp/back/708.json deleted file mode 100644 index 7d41d6d24b0..00000000000 --- a/public/images/pokemon/variant/exp/back/708.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "1": { - "1a1a1c": "1a1a1c", - "686665": "646085", - "103222": "802c26", - "221b17": "221b17", - "090606": "090606", - "4ab38e": "a14743", - "38956f": "a14743", - "ab9074": "7c808c", - "4e4e4e": "494e5b", - "917860": "7c808c", - "424244": "2b303c", - "78604c": "575a6a", - "6b5442": "40435a", - "5f4939": "36384f", - "4f2a09": "292929", - "6c4513": "36384f", - "353638": "353638" - }, - "2": { - "1a1a1c": "1a1a1c", - "686665": "ccc3cf", - "103222": "a94079", - "221b17": "221b17", - "090606": "090606", - "4ab38e": "da7ea8", - "38956f": "da7ea8", - "ab9074": "7e5658", - "4e4e4e": "9c92a4", - "917860": "7e5658", - "424244": "6f5f80", - "78604c": "56323a", - "6b5442": "47232b", - "5f4939": "31161d", - "4f2a09": "250e14", - "6c4513": "31161d", - "353638": "57496b" - } -} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/714.json b/public/images/pokemon/variant/exp/back/714.json deleted file mode 100644 index 22933e71338..00000000000 --- a/public/images/pokemon/variant/exp/back/714.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "1": { - "101010": "101010", - "6a3f73": "500a25", - "bd70cc": "a42c54", - "8e5499": "8e1d4b", - "404040": "202558", - "595959": "2f386b", - "bfacbf": "8d7be3", - "665c66": "2f386b", - "f2daf2": "8d7be3" - }, - "2": { - "101010": "101010", - "6a3f73": "5f151c", - "bd70cc": "c24430", - "8e5499": "882c27", - "404040": "5b1922", - "595959": "7c2928", - "bfacbf": "f9e8dd", - "665c66": "7c2928", - "f2daf2": "f9e8dd" - } -} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/728.json b/public/images/pokemon/variant/exp/back/728.json index f736f512525..a9c7155ec91 100644 --- a/public/images/pokemon/variant/exp/back/728.json +++ b/public/images/pokemon/variant/exp/back/728.json @@ -1,34 +1,44 @@ { "1": { - "8d3774": "e54c41", - "2c316e": "00473d", - "ef71c0": "ff8072", - "ffc8ea": "fff6e2", - "536fc3": "009469", - "b95094": "e54c41", - "7199db": "14af82", - "171717": "171717", - "9283a3": "808080", - "ccc2d0": "c2beb4", - "3c4b92": "006355", - "fafafa": "fff6e2", - "7090a3": "858d7d", - "a1d9e7": "92b599" + "101010": "101010", + "1e3a66": "363d2f", + "243a66": "00473d", + "733f50": "a62c20", + "404040": "404040", + "b3627d": "e54c41", + "2c4f8c": "5a6154", + "314f8c": "006355", + "436cbf": "009469", + "e57ea1": "ff8072", + "5f9ba6": "b56e76", + "639ba6": "858d7d", + "6c90d9": "14af82", + "808080": "808080", + "bfbfbf": "c2beb4", + "9edae5": "f7c1c5", + "a1dae5": "92b599", + "f8f8f8": "fff6e2", + "fefefe": "fff6e2" }, "2": { - "8d3774": "620a33", - "2c316e": "54041b", - "ef71c0": "dd3780", - "ffc8ea": "f5edee", - "536fc3": "a6213f", - "b95094": "a7225c", - "7199db": "be294a", - "171717": "171717", - "9283a3": "9283a3", - "ccc2d0": "bfb4b9", - "3c4b92": "770f29", - "fafafa": "f5edee", - "7090a3": "b88389", - "a1d9e7": "f7c1c5" + "101010": "101010", + "1e3a66": "773f46", + "243a66": "54041b", + "733f50": "620a33", + "404040": "404040", + "b3627d": "a7225c", + "2c4f8c": "a45f67", + "314f8c": "770f29", + "436cbf": "a6213f", + "e57ea1": "dd3780", + "5f9ba6": "408c62", + "639ba6": "b88389", + "6c90d9": "be294a", + "808080": "808080", + "bfbfbf": "bfb4b9", + "9edae5": "91e6a2", + "a1dae5": "f7c1c5", + "f8f8f8": "f5edee", + "fefefe": "fff6e2" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/729.json b/public/images/pokemon/variant/exp/back/729.json new file mode 100644 index 00000000000..a0e40c36aec --- /dev/null +++ b/public/images/pokemon/variant/exp/back/729.json @@ -0,0 +1,40 @@ +{ + "1": { + "101010": "101010", + "2d2e31": "2d2e31", + "733f50": "bb402f", + "476d72": "be665d", + "b3627d": "fb6051", + "326187": "006b65", + "e57ea1": "ff9384", + "639ba6": "b56e76", + "2d8ec4": "009a88", + "1eb9ee": "0ccfa2", + "808080": "808080", + "8dafaf": "ff989e", + "bfbfbf": "c2beb4", + "bad8d8": "ffbd98", + "bae1f1": "f7c1c5", + "f8f8f8": "fff6e2", + "fdfdfd": "fff6e2" + }, + "2": { + "101010": "101010", + "2d2e31": "2d2e31", + "733f50": "620a33", + "476d72": "793f5e", + "b3627d": "a7225c", + "326187": "5a141b", + "e57ea1": "dd3780", + "639ba6": "408c62", + "2d8ec4": "952c3f", + "1eb9ee": "c6496f", + "808080": "808080", + "8dafaf": "b681a6", + "bfbfbf": "bfb4b9", + "bad8d8": "deabce", + "bae1f1": "91e6a2", + "f8f8f8": "f5edee", + "fdfdfd": "fff6e2" + } +} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/729_2.json b/public/images/pokemon/variant/exp/back/729_2.json deleted file mode 100644 index 146cac6c9d1..00000000000 --- a/public/images/pokemon/variant/exp/back/729_2.json +++ /dev/null @@ -1,230 +0,0 @@ -{ - "textures": [ - { - "image": "729_2.png", - "format": "RGBA8888", - "size": { - "w": 148, - "h": 148 - }, - "scale": 1, - "frames": [ - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 71, - "h": 50 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 70, - "h": 50 - }, - "frame": { - "x": 0, - "y": 0, - "w": 70, - "h": 50 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 71, - "h": 50 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 70, - "h": 49 - }, - "frame": { - "x": 0, - "y": 50, - "w": 70, - "h": 49 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 71, - "h": 50 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 70, - "h": 49 - }, - "frame": { - "x": 0, - "y": 50, - "w": 70, - "h": 49 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 71, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 69, - "h": 49 - }, - "frame": { - "x": 0, - "y": 99, - "w": 69, - "h": 49 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 71, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 69, - "h": 49 - }, - "frame": { - "x": 0, - "y": 99, - "w": 69, - "h": 49 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 71, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 68, - "h": 50 - }, - "frame": { - "x": 70, - "y": 0, - "w": 68, - "h": 50 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 71, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 68, - "h": 50 - }, - "frame": { - "x": 70, - "y": 0, - "w": 68, - "h": 50 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 71, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 67, - "h": 50 - }, - "frame": { - "x": 70, - "y": 50, - "w": 67, - "h": 50 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 71, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 70, - "h": 48 - }, - "frame": { - "x": 69, - "y": 100, - "w": 70, - "h": 48 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 71, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 70, - "h": 48 - }, - "frame": { - "x": 69, - "y": 100, - "w": 70, - "h": 48 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:ca6603181d5c8644f2bdbeecb46551b0:09ccc951204ac93cf598ed13a34f0429:b2d5dd692ec79c7357afdffa7b3670a9$" - } -} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/729_2.png b/public/images/pokemon/variant/exp/back/729_2.png deleted file mode 100644 index d5600f3bee4..00000000000 Binary files a/public/images/pokemon/variant/exp/back/729_2.png and /dev/null differ diff --git a/public/images/pokemon/variant/exp/back/729_3.json b/public/images/pokemon/variant/exp/back/729_3.json deleted file mode 100644 index 6a251ba9b19..00000000000 --- a/public/images/pokemon/variant/exp/back/729_3.json +++ /dev/null @@ -1,230 +0,0 @@ -{ - "textures": [ - { - "image": "729_3.png", - "format": "RGBA8888", - "size": { - "w": 148, - "h": 148 - }, - "scale": 1, - "frames": [ - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 71, - "h": 50 - }, - "spriteSourceSize": { - "x": 1, - "y": 0, - "w": 70, - "h": 50 - }, - "frame": { - "x": 0, - "y": 0, - "w": 70, - "h": 50 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 71, - "h": 50 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 70, - "h": 49 - }, - "frame": { - "x": 0, - "y": 50, - "w": 70, - "h": 49 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 71, - "h": 50 - }, - "spriteSourceSize": { - "x": 1, - "y": 1, - "w": 70, - "h": 49 - }, - "frame": { - "x": 0, - "y": 50, - "w": 70, - "h": 49 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 71, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 69, - "h": 49 - }, - "frame": { - "x": 0, - "y": 99, - "w": 69, - "h": 49 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 71, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 1, - "w": 69, - "h": 49 - }, - "frame": { - "x": 0, - "y": 99, - "w": 69, - "h": 49 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 71, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 68, - "h": 50 - }, - "frame": { - "x": 70, - "y": 0, - "w": 68, - "h": 50 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 71, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 68, - "h": 50 - }, - "frame": { - "x": 70, - "y": 0, - "w": 68, - "h": 50 - } - }, - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 71, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 67, - "h": 50 - }, - "frame": { - "x": 70, - "y": 50, - "w": 67, - "h": 50 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 71, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 70, - "h": 48 - }, - "frame": { - "x": 69, - "y": 100, - "w": 70, - "h": 48 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 71, - "h": 50 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 70, - "h": 48 - }, - "frame": { - "x": 69, - "y": 100, - "w": 70, - "h": 48 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:ca6603181d5c8644f2bdbeecb46551b0:09ccc951204ac93cf598ed13a34f0429:b2d5dd692ec79c7357afdffa7b3670a9$" - } -} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/729_3.png b/public/images/pokemon/variant/exp/back/729_3.png deleted file mode 100644 index 182d81a0754..00000000000 Binary files a/public/images/pokemon/variant/exp/back/729_3.png and /dev/null differ diff --git a/public/images/pokemon/variant/exp/back/730.json b/public/images/pokemon/variant/exp/back/730.json index 8c3238188cf..ae6d464dd3f 100644 --- a/public/images/pokemon/variant/exp/back/730.json +++ b/public/images/pokemon/variant/exp/back/730.json @@ -1,18 +1,52 @@ { - "2": { - "337287": "500518", + "1": { "101010": "101010", - "83e6d5": "a6213f", - "52a4b4": "770f29", - "91b9e1": "c17b97", - "bde5ff": "e9a5c0", - "bfbfd1": "bfb4b9", - "fafafa": "f5edee", - "737373": "737373", - "8b3959": "1d1638", - "ff8193": "614388", - "17417f": "3e0f2f", - "215ba5": "591945", - "2f82eb": "81387e" + "843843": "a62c20", + "8d3f4a": "a62c20", + "c46074": "e54c41", + "c76374": "e54c41", + "0e6792": "b54f5f", + "1241a1": "006355", + "6d7481": "917393", + "727481": "a0866f", + "1470de": "009469", + "476d72": "74312e", + "44a0b5": "d87383", + "64c5e1": "00dc9c", + "6ac8e3": "ffa0a8", + "82a7b9": "c35861", + "fd8196": "ff8072", + "ff8496": "ff8072", + "bdbdc1": "c0b7a1", + "c0bdc1": "beaac0", + "aac7e6": "ea7c5b", + "f8f8f8": "fff2d4", + "faf8f8": "f1e8f1", + "fef8f8": "fef8f8" + }, + "2": { + "101010": "101010", + "843843": "5c2141", + "8d3f4a": "1d1638", + "c46074": "c17b97", + "c76374": "391e62", + "0e6792": "500518", + "1241a1": "591945", + "6d7481": "81716d", + "727481": "9e8193", + "1470de": "81387e", + "476d72": "5c2141", + "44a0b5": "770f29", + "64c5e1": "bd2b6b", + "6ac8e3": "a6213f", + "82a7b9": "c17b97", + "fd8196": "e9a5c0", + "ff8496": "614388", + "bdbdc1": "bfb4b9", + "c0bdc1": "c0b4a5", + "aac7e6": "e9a5c0", + "f8f8f8": "f5edee", + "faf8f8": "f5f3e3", + "fef8f8": "fef8f8" } } \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/730_2.json b/public/images/pokemon/variant/exp/back/730_2.json deleted file mode 100644 index b1e8fd29a29..00000000000 --- a/public/images/pokemon/variant/exp/back/730_2.json +++ /dev/null @@ -1,230 +0,0 @@ -{ - "textures": [ - { - "image": "730_2.png", - "format": "RGBA8888", - "size": { - "w": 206, - "h": 206 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 69, - "h": 82 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 69, - "h": 79 - }, - "frame": { - "x": 0, - "y": 0, - "w": 69, - "h": 79 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 69, - "h": 82 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 68, - "h": 81 - }, - "frame": { - "x": 69, - "y": 0, - "w": 68, - "h": 81 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 69, - "h": 82 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 68, - "h": 81 - }, - "frame": { - "x": 69, - "y": 0, - "w": 68, - "h": 81 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 69, - "h": 82 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 68, - "h": 81 - }, - "frame": { - "x": 0, - "y": 79, - "w": 68, - "h": 81 - } - }, - { - "filename": "0003.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 69, - "h": 82 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 69, - "h": 79 - }, - "frame": { - "x": 68, - "y": 81, - "w": 69, - "h": 79 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 69, - "h": 82 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 69, - "h": 79 - }, - "frame": { - "x": 68, - "y": 81, - "w": 69, - "h": 79 - } - }, - { - "filename": "0004.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 69, - "h": 82 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 69, - "h": 79 - }, - "frame": { - "x": 137, - "y": 0, - "w": 69, - "h": 79 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 69, - "h": 82 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 69, - "h": 79 - }, - "frame": { - "x": 137, - "y": 0, - "w": 69, - "h": 79 - } - }, - { - "filename": "0002.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 69, - "h": 82 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 69, - "h": 78 - }, - "frame": { - "x": 137, - "y": 79, - "w": 69, - "h": 78 - } - }, - { - "filename": "0010.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 69, - "h": 82 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 69, - "h": 78 - }, - "frame": { - "x": 137, - "y": 79, - "w": 69, - "h": 78 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:2717094fe274718326c9b0fe3237866b:3ad96e0a8adb3bab17597f2996c3f5cc:fcd0d2cb6b26724e796ae0dcb71fae3f$" - } -} \ No newline at end of file diff --git a/public/images/pokemon/variant/exp/back/730_2.png b/public/images/pokemon/variant/exp/back/730_2.png deleted file mode 100644 index e9090ce19dd..00000000000 Binary files a/public/images/pokemon/variant/exp/back/730_2.png and /dev/null differ diff --git a/public/images/statuses_ca-ES.png b/public/images/statuses_ca-ES.png index d372b989be9..fe05e243f7a 100644 Binary files a/public/images/statuses_ca-ES.png and b/public/images/statuses_ca-ES.png differ diff --git a/public/images/statuses_es-MX.json b/public/images/statuses_es-MX.json new file mode 100644 index 00000000000..8b09ed391c4 --- /dev/null +++ b/public/images/statuses_es-MX.json @@ -0,0 +1,188 @@ +{ + "textures": [ + { + "image": "statuses_es-MX.png", + "format": "RGBA8888", + "size": { + "w": 22, + "h": 64 + }, + "scale": 1, + "frames": [ + { + "filename": "pokerus", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 22, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 22, + "h": 8 + }, + "frame": { + "x": 0, + "y": 0, + "w": 22, + "h": 8 + } + }, + { + "filename": "burn", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 20, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 20, + "h": 8 + }, + "frame": { + "x": 0, + "y": 8, + "w": 20, + "h": 8 + } + }, + { + "filename": "faint", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 20, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 20, + "h": 8 + }, + "frame": { + "x": 0, + "y": 16, + "w": 20, + "h": 8 + } + }, + { + "filename": "freeze", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 20, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 20, + "h": 8 + }, + "frame": { + "x": 0, + "y": 24, + "w": 20, + "h": 8 + } + }, + { + "filename": "paralysis", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 20, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 20, + "h": 8 + }, + "frame": { + "x": 0, + "y": 32, + "w": 20, + "h": 8 + } + }, + { + "filename": "poison", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 20, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 20, + "h": 8 + }, + "frame": { + "x": 0, + "y": 40, + "w": 20, + "h": 8 + } + }, + { + "filename": "sleep", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 20, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 20, + "h": 8 + }, + "frame": { + "x": 0, + "y": 48, + "w": 20, + "h": 8 + } + }, + { + "filename": "toxic", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 20, + "h": 8 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 20, + "h": 8 + }, + "frame": { + "x": 0, + "y": 56, + "w": 20, + "h": 8 + } + } + ] + } + ], + "meta": { + "app": "https://www.codeandweb.com/texturepacker", + "version": "3.0", + "smartupdate": "$TexturePacker:SmartUpdate:37686e85605d17b806f22d43081c1139:70535ffee63ba61b3397d8470c2c8982:e6649238c018d3630e55681417c698ca$" + } +} diff --git a/public/images/statuses_es-MX.png b/public/images/statuses_es-MX.png new file mode 100644 index 00000000000..dc845d6fb1f Binary files /dev/null and b/public/images/statuses_es-MX.png differ diff --git a/public/images/types_ca-ES.json b/public/images/types_ca-ES.json new file mode 100644 index 00000000000..fa3abaaf259 --- /dev/null +++ b/public/images/types_ca-ES.json @@ -0,0 +1,440 @@ +{ + "textures": [ + { + "image": "types_ca-ES.png", + "format": "RGBA8888", + "size": { + "w": 32, + "h": 280 + }, + "scale": 1, + "frames": [ + { + "filename": "unknown", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 32, + "h": 14 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 32, + "h": 14 + }, + "frame": { + "x": 0, + "y": 0, + "w": 32, + "h": 14 + } + }, + { + "filename": "bug", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 32, + "h": 14 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 32, + "h": 14 + }, + "frame": { + "x": 0, + "y": 14, + "w": 32, + "h": 14 + } + }, + { + "filename": "dark", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 32, + "h": 14 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 32, + "h": 14 + }, + "frame": { + "x": 0, + "y": 28, + "w": 32, + "h": 14 + } + }, + { + "filename": "dragon", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 32, + "h": 14 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 32, + "h": 14 + }, + "frame": { + "x": 0, + "y": 42, + "w": 32, + "h": 14 + } + }, + { + "filename": "electric", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 32, + "h": 14 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 32, + "h": 14 + }, + "frame": { + "x": 0, + "y": 56, + "w": 32, + "h": 14 + } + }, + { + "filename": "fairy", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 32, + "h": 14 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 32, + "h": 14 + }, + "frame": { + "x": 0, + "y": 70, + "w": 32, + "h": 14 + } + }, + { + "filename": "fighting", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 32, + "h": 14 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 32, + "h": 14 + }, + "frame": { + "x": 0, + "y": 84, + "w": 32, + "h": 14 + } + }, + { + "filename": "fire", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 32, + "h": 14 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 32, + "h": 14 + }, + "frame": { + "x": 0, + "y": 98, + "w": 32, + "h": 14 + } + }, + { + "filename": "flying", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 32, + "h": 14 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 32, + "h": 14 + }, + "frame": { + "x": 0, + "y": 112, + "w": 32, + "h": 14 + } + }, + { + "filename": "ghost", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 32, + "h": 14 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 32, + "h": 14 + }, + "frame": { + "x": 0, + "y": 126, + "w": 32, + "h": 14 + } + }, + { + "filename": "grass", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 32, + "h": 14 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 32, + "h": 14 + }, + "frame": { + "x": 0, + "y": 140, + "w": 32, + "h": 14 + } + }, + { + "filename": "ground", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 32, + "h": 14 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 32, + "h": 14 + }, + "frame": { + "x": 0, + "y": 154, + "w": 32, + "h": 14 + } + }, + { + "filename": "ice", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 32, + "h": 14 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 32, + "h": 14 + }, + "frame": { + "x": 0, + "y": 168, + "w": 32, + "h": 14 + } + }, + { + "filename": "normal", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 32, + "h": 14 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 32, + "h": 14 + }, + "frame": { + "x": 0, + "y": 182, + "w": 32, + "h": 14 + } + }, + { + "filename": "poison", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 32, + "h": 14 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 32, + "h": 14 + }, + "frame": { + "x": 0, + "y": 196, + "w": 32, + "h": 14 + } + }, + { + "filename": "psychic", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 32, + "h": 14 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 32, + "h": 14 + }, + "frame": { + "x": 0, + "y": 210, + "w": 32, + "h": 14 + } + }, + { + "filename": "rock", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 32, + "h": 14 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 32, + "h": 14 + }, + "frame": { + "x": 0, + "y": 224, + "w": 32, + "h": 14 + } + }, + { + "filename": "steel", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 32, + "h": 14 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 32, + "h": 14 + }, + "frame": { + "x": 0, + "y": 238, + "w": 32, + "h": 14 + } + }, + { + "filename": "water", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 32, + "h": 14 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 32, + "h": 14 + }, + "frame": { + "x": 0, + "y": 252, + "w": 32, + "h": 14 + } + }, + { + "filename": "stellar", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 32, + "h": 14 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 32, + "h": 14 + }, + "frame": { + "x": 0, + "y": 266, + "w": 32, + "h": 14 + } + } + ] + } + ], + "meta": { + "app": "https://www.codeandweb.com/texturepacker", + "version": "3.0", + "smartupdate": "$TexturePacker:SmartUpdate:f14cf47d9a8f1d40c8e03aa6ba00fff3:6fc4227b57a95d429a1faad4280f7ec8:5961efbfbf4c56b8745347e7a663a32f$" + } +} diff --git a/public/images/types_ca-ES.png b/public/images/types_ca-ES.png new file mode 100644 index 00000000000..e85c84ed9c9 Binary files /dev/null and b/public/images/types_ca-ES.png differ diff --git a/public/images/types_es-MX.json b/public/images/types_es-MX.json new file mode 100644 index 00000000000..b3dbfcd697f --- /dev/null +++ b/public/images/types_es-MX.json @@ -0,0 +1,440 @@ +{ + "textures": [ + { + "image": "types_es-MX.png", + "format": "RGBA8888", + "size": { + "w": 32, + "h": 280 + }, + "scale": 1, + "frames": [ + { + "filename": "unknown", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 32, + "h": 14 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 32, + "h": 14 + }, + "frame": { + "x": 0, + "y": 0, + "w": 32, + "h": 14 + } + }, + { + "filename": "bug", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 32, + "h": 14 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 32, + "h": 14 + }, + "frame": { + "x": 0, + "y": 14, + "w": 32, + "h": 14 + } + }, + { + "filename": "dark", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 32, + "h": 14 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 32, + "h": 14 + }, + "frame": { + "x": 0, + "y": 28, + "w": 32, + "h": 14 + } + }, + { + "filename": "dragon", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 32, + "h": 14 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 32, + "h": 14 + }, + "frame": { + "x": 0, + "y": 42, + "w": 32, + "h": 14 + } + }, + { + "filename": "electric", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 32, + "h": 14 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 32, + "h": 14 + }, + "frame": { + "x": 0, + "y": 56, + "w": 32, + "h": 14 + } + }, + { + "filename": "fairy", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 32, + "h": 14 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 32, + "h": 14 + }, + "frame": { + "x": 0, + "y": 70, + "w": 32, + "h": 14 + } + }, + { + "filename": "fighting", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 32, + "h": 14 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 32, + "h": 14 + }, + "frame": { + "x": 0, + "y": 84, + "w": 32, + "h": 14 + } + }, + { + "filename": "fire", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 32, + "h": 14 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 32, + "h": 14 + }, + "frame": { + "x": 0, + "y": 98, + "w": 32, + "h": 14 + } + }, + { + "filename": "flying", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 32, + "h": 14 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 32, + "h": 14 + }, + "frame": { + "x": 0, + "y": 112, + "w": 32, + "h": 14 + } + }, + { + "filename": "ghost", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 32, + "h": 14 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 32, + "h": 14 + }, + "frame": { + "x": 0, + "y": 126, + "w": 32, + "h": 14 + } + }, + { + "filename": "grass", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 32, + "h": 14 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 32, + "h": 14 + }, + "frame": { + "x": 0, + "y": 140, + "w": 32, + "h": 14 + } + }, + { + "filename": "ground", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 32, + "h": 14 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 32, + "h": 14 + }, + "frame": { + "x": 0, + "y": 154, + "w": 32, + "h": 14 + } + }, + { + "filename": "ice", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 32, + "h": 14 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 32, + "h": 14 + }, + "frame": { + "x": 0, + "y": 168, + "w": 32, + "h": 14 + } + }, + { + "filename": "normal", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 32, + "h": 14 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 32, + "h": 14 + }, + "frame": { + "x": 0, + "y": 182, + "w": 32, + "h": 14 + } + }, + { + "filename": "poison", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 32, + "h": 14 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 32, + "h": 14 + }, + "frame": { + "x": 0, + "y": 196, + "w": 32, + "h": 14 + } + }, + { + "filename": "psychic", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 32, + "h": 14 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 32, + "h": 14 + }, + "frame": { + "x": 0, + "y": 210, + "w": 32, + "h": 14 + } + }, + { + "filename": "rock", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 32, + "h": 14 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 32, + "h": 14 + }, + "frame": { + "x": 0, + "y": 224, + "w": 32, + "h": 14 + } + }, + { + "filename": "steel", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 32, + "h": 14 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 32, + "h": 14 + }, + "frame": { + "x": 0, + "y": 238, + "w": 32, + "h": 14 + } + }, + { + "filename": "water", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 32, + "h": 14 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 32, + "h": 14 + }, + "frame": { + "x": 0, + "y": 252, + "w": 32, + "h": 14 + } + }, + { + "filename": "stellar", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 32, + "h": 14 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 32, + "h": 14 + }, + "frame": { + "x": 0, + "y": 266, + "w": 32, + "h": 14 + } + } + ] + } + ], + "meta": { + "app": "https://www.codeandweb.com/texturepacker", + "version": "3.0", + "smartupdate": "$TexturePacker:SmartUpdate:f14cf47d9a8f1d40c8e03aa6ba00fff3:6fc4227b57a95d429a1faad4280f7ec8:5961efbfbf4c56b8745347e7a663a32f$" + } +} diff --git a/public/images/types_es-MX.png b/public/images/types_es-MX.png new file mode 100644 index 00000000000..134a68258cc Binary files /dev/null and b/public/images/types_es-MX.png differ diff --git a/public/locales b/public/locales index 0e5c6096ba2..e98f0eb9c20 160000 --- a/public/locales +++ b/public/locales @@ -1 +1 @@ -Subproject commit 0e5c6096ba26f6b87aed1aab3fe9b0b23f6cbb7b +Subproject commit e98f0eb9c2022bc78b53f0444424c636498e725a diff --git a/scripts/find_sprite_variant_mismatches.py b/scripts/find_sprite_variant_mismatches.py index 483695fdb66..b26058c2de3 100644 --- a/scripts/find_sprite_variant_mismatches.py +++ b/scripts/find_sprite_variant_mismatches.py @@ -22,6 +22,9 @@ from typing import Literal as L MASTERLIST_PATH = os.path.join( os.path.dirname(os.path.dirname(__file__)), "public", "images", "pokemon", "variant", "_masterlist.json" ) +EXP_MASTERLIST_PATH = os.path.join( + os.path.dirname(os.path.dirname(__file__)), "public", "images", "pokemon", "variant", "_exp_masterlist.json" +) DEFAULT_OUTPUT_PATH = "sprite-mismatches.csv" @@ -93,6 +96,7 @@ if __name__ == "__main__": help=f"The path to a file to save the output file. If not specified, will write to {DEFAULT_OUTPUT_PATH}.", ) p.add_argument("--masterlist", default=MASTERLIST_PATH, help=f"The path to the masterlist file to validate. Defaults to {MASTERLIST_PATH}.") + p.add_argument("--exp-masterlist", default=EXP_MASTERLIST_PATH, help=f"The path to the exp masterlist file to validate against. Defaults to {EXP_MASTERLIST_PATH}.") args = p.parse_args() mismatches = make_mismatch_sprite_list(args.masterlist) write_mismatch_csv(args.output, mismatches) diff --git a/src/@types/DexData.ts b/src/@types/DexData.ts new file mode 100644 index 00000000000..19bb0357471 --- /dev/null +++ b/src/@types/DexData.ts @@ -0,0 +1,16 @@ +/** + * Dex entry for a single Pokemon Species + */ +export interface DexEntry { + seenAttr: bigint; + caughtAttr: bigint; + natureAttr: number; + seenCount: number; + caughtCount: number; + hatchedCount: number; + ivs: number[]; +} + +export interface DexData { + [key: number]: DexEntry; +} diff --git a/src/@types/SessionSaveMigrator.ts b/src/@types/SessionSaveMigrator.ts new file mode 100644 index 00000000000..c4b0ad8dda4 --- /dev/null +++ b/src/@types/SessionSaveMigrator.ts @@ -0,0 +1,6 @@ +import type { SessionSaveData } from "#app/system/game-data"; + +export interface SessionSaveMigrator { + version: string; + migrate: (data: SessionSaveData) => void; +} diff --git a/src/@types/SettingsSaveMigrator.ts b/src/@types/SettingsSaveMigrator.ts new file mode 100644 index 00000000000..aae3df7cc60 --- /dev/null +++ b/src/@types/SettingsSaveMigrator.ts @@ -0,0 +1,5 @@ +export interface SettingsSaveMigrator { + version: string; + // biome-ignore lint/complexity/noBannedTypes: TODO - refactor settings + migrate: (data: Object) => void; +} diff --git a/src/@types/SystemSaveMigrator.ts b/src/@types/SystemSaveMigrator.ts new file mode 100644 index 00000000000..a22b5f6c93d --- /dev/null +++ b/src/@types/SystemSaveMigrator.ts @@ -0,0 +1,6 @@ +import type { SystemSaveData } from "#app/system/game-data"; + +export interface SystemSaveMigrator { + version: string; + migrate: (data: SystemSaveData) => void; +} diff --git a/src/account.ts b/src/account.ts index 96ce32714bb..7baa7d10a1a 100644 --- a/src/account.ts +++ b/src/account.ts @@ -1,11 +1,11 @@ import { pokerogueApi } from "#app/plugins/api/pokerogue-api"; import type { UserInfo } from "#app/@types/UserInfo"; -import { bypassLogin } from "./battle-scene"; -import * as Utils from "./utils"; +import { bypassLogin } from "#app/battle-scene"; +import { randomString } from "#app/utils"; export let loggedInUser: UserInfo | null = null; // This is a random string that is used to identify the client session - unique per session (tab or window) so that the game will only save on the one that the server is expecting -export const clientSessionId = Utils.randomString(32); +export const clientSessionId = randomString(32); export function initLoggedInUser(): void { loggedInUser = { diff --git a/src/battle-scene.ts b/src/battle-scene.ts index a6c986d3d0f..dd983f2b397 100644 --- a/src/battle-scene.ts +++ b/src/battle-scene.ts @@ -5,9 +5,20 @@ import { EnemyPokemon, PlayerPokemon } from "#app/field/pokemon"; import type { PokemonSpeciesFilter } from "#app/data/pokemon-species"; import type PokemonSpecies from "#app/data/pokemon-species"; import { allSpecies, getPokemonSpecies } from "#app/data/pokemon-species"; -import type { Constructor } from "#app/utils"; -import { isNullOrUndefined, randSeedInt } from "#app/utils"; -import * as Utils from "#app/utils"; +import { + fixedInt, + deepMergeObjects, + getIvsFromId, + randSeedInt, + getEnumValues, + randomString, + NumberHolder, + shiftCharCodes, + formatMoney, + isNullOrUndefined, + BooleanHolder, + type Constructor, +} from "#app/utils"; import type { Modifier, ModifierPredicate, TurnHeldItemTransferModifier } from "./modifier/modifier"; import { ConsumableModifier, @@ -72,8 +83,8 @@ import { GameModes, getGameMode } from "#app/game-mode"; import FieldSpritePipeline from "#app/pipelines/field-sprite"; import SpritePipeline from "#app/pipelines/sprite"; import PartyExpBar from "#app/ui/party-exp-bar"; -import type { TrainerSlot } from "#app/data/trainer-config"; -import { trainerConfigs } from "#app/data/trainer-config"; +import type { TrainerSlot } from "./enums/trainer-slot"; +import { trainerConfigs } from "#app/data/trainers/trainer-config"; import Trainer, { TrainerVariant } from "#app/field/trainer"; import type TrainerData from "#app/system/trainer-data"; import SoundFade from "phaser3-rex-plugins/plugins/soundfade"; @@ -106,8 +117,8 @@ import PokemonInfoContainer from "#app/ui/pokemon-info-container"; import { biomeDepths, getBiomeName } from "#app/data/balance/biomes"; import { SceneBase } from "#app/scene-base"; import CandyBar from "#app/ui/candy-bar"; -import type { Variant, VariantSet } from "#app/data/variant"; -import { variantColorCache, variantData } from "#app/data/variant"; +import type { Variant } from "#app/sprites/variant"; +import { variantData, clearVariantData } from "#app/sprites/variant"; import type { Localizable } from "#app/interfaces/locales"; import Overrides from "#app/overrides"; import { InputsController } from "#app/inputs-controller"; @@ -170,6 +181,9 @@ import { StatusEffect } from "#enums/status-effect"; import { initGlobalScene } from "#app/global-scene"; import { ShowAbilityPhase } from "#app/phases/show-ability-phase"; import { HideAbilityPhase } from "#app/phases/hide-ability-phase"; +import { expSpriteKeys } from "./sprites/sprite-keys"; +import { hasExpSprite } from "./sprites/sprite-utils"; +import { timedEventManager } from "./global-event-manager"; export const bypassLogin = import.meta.env.VITE_BYPASS_LOGIN === "1"; @@ -181,8 +195,6 @@ const OPP_IVS_OVERRIDE_VALIDATED: number[] = ( export const startingWave = Overrides.STARTING_WAVE_OVERRIDE || 1; -const expSpriteKeys: string[] = []; - export let starterColors: StarterColors; interface StarterColors { [key: string]: [string, string]; @@ -408,7 +420,7 @@ export default class BattleScene extends SceneBase { } const variant = atlasPath.includes("variant/") || /_[0-3]$/.test(atlasPath); if (experimental) { - experimental = this.hasExpSprite(key); + experimental = hasExpSprite(key); } if (variant) { atlasPath = atlasPath.replace("variant/", ""); @@ -420,35 +432,6 @@ export default class BattleScene extends SceneBase { ); } - /** - * Load the variant assets for the given sprite and stores them in {@linkcode variantColorCache} - */ - public async loadPokemonVariantAssets(spriteKey: string, fileRoot: string, variant?: Variant): Promise { - const useExpSprite = this.experimentalSprites && this.hasExpSprite(spriteKey); - if (useExpSprite) { - fileRoot = `exp/${fileRoot}`; - } - let variantConfig = variantData; - fileRoot.split("/").map(p => (variantConfig ? (variantConfig = variantConfig[p]) : null)); - const variantSet = variantConfig as VariantSet; - - return new Promise(resolve => { - if (variantSet && variant !== undefined && variantSet[variant] === 1) { - if (variantColorCache.hasOwnProperty(spriteKey)) { - return resolve(); - } - this.cachedFetch(`./images/pokemon/variant/${fileRoot}.json`) - .then(res => res.json()) - .then(c => { - variantColorCache[spriteKey] = c; - resolve(); - }); - } else { - resolve(); - } - }); - } - async preload() { if (DEBUG_RNG) { const originalRealInRange = Phaser.Math.RND.realInRange; @@ -761,7 +744,7 @@ export default class BattleScene extends SceneBase { } this.playTimeTimer = this.time.addEvent({ - delay: Utils.fixedInt(1000), + delay: fixedInt(1000), repeat: -1, callback: () => { if (this.gameData) { @@ -782,53 +765,36 @@ export default class BattleScene extends SceneBase { } async initExpSprites(): Promise { - if (expSpriteKeys.length) { + if (expSpriteKeys.size > 0) { return; } this.cachedFetch("./exp-sprites.json") .then(res => res.json()) .then(keys => { if (Array.isArray(keys)) { - expSpriteKeys.push(...keys); + for (const key of keys) { + expSpriteKeys.add(key); + } } Promise.resolve(); }); } + /** + * Initialize the variant data. + * If experimental sprites are enabled, their entries are replaced via this method. + */ async initVariantData(): Promise { - for (const key of Object.keys(variantData)) { - delete variantData[key]; + clearVariantData(); + const otherVariantData = await this.cachedFetch("./images/pokemon/variant/_masterlist.json").then(r => r.json()); + for (const k of Object.keys(otherVariantData)) { + variantData[k] = otherVariantData[k]; } - await this.cachedFetch("./images/pokemon/variant/_masterlist.json") - .then(res => res.json()) - .then(v => { - for (const k of Object.keys(v)) { - variantData[k] = v[k]; - } - if (this.experimentalSprites) { - const expVariantData = variantData["exp"]; - const traverseVariantData = (keys: string[]) => { - let variantTree = variantData; - let expTree = expVariantData; - keys.map((k: string, i: number) => { - if (i < keys.length - 1) { - variantTree = variantTree[k]; - expTree = expTree[k]; - } else if (variantTree.hasOwnProperty(k) && expTree.hasOwnProperty(k)) { - if (["back", "female"].includes(k)) { - traverseVariantData(keys.concat(k)); - } else { - variantTree[k] = expTree[k]; - } - } - }); - }; - for (const ek of Object.keys(expVariantData)) { - traverseVariantData([ek]); - } - } - Promise.resolve(); - }); + if (!this.experimentalSprites) { + return; + } + const expVariantData = await this.cachedFetch("./images/pokemon/variant/_exp_masterlist.json").then(r => r.json()); + deepMergeObjects(variantData, expVariantData); } cachedFetch(url: string, init?: RequestInit): Promise { @@ -842,48 +808,15 @@ export default class BattleScene extends SceneBase { return fetch(url, init); } - initStarterColors(): Promise { - return new Promise(resolve => { - if (starterColors) { - return resolve(); - } - - this.cachedFetch("./starter-colors.json") - .then(res => res.json()) - .then(sc => { - starterColors = {}; - for (const key of Object.keys(sc)) { - starterColors[key] = sc[key]; - } - - resolve(); - }); - }); - } - - hasExpSprite(key: string): boolean { - const keyMatch = /^pkmn__?(back__)?(shiny__)?(female__)?(\d+)(\-.*?)?(?:_[1-3])?$/g.exec(key); - if (!keyMatch) { - return false; + async initStarterColors(): Promise { + if (starterColors) { + return; } - - let k = keyMatch[4]!; - if (keyMatch[2]) { - k += "s"; + const sc = await this.cachedFetch("./starter-colors.json").then(res => res.json()); + starterColors = {}; + for (const key of Object.keys(sc)) { + starterColors[key] = sc[key]; } - if (keyMatch[1]) { - k += "b"; - } - if (keyMatch[3]) { - k += "f"; - } - if (keyMatch[5]) { - k += keyMatch[5]; - } - if (!expSpriteKeys.includes(k)) { - return false; - } - return true; } public getPlayerParty(): PlayerPokemon[] { @@ -1066,7 +999,7 @@ export default class BattleScene extends SceneBase { } if (boss && !dataSource) { - const secondaryIvs = Utils.getIvsFromId(Utils.randSeedInt(4294967296)); + const secondaryIvs = getIvsFromId(randSeedInt(4294967296)); for (let s = 0; s < pokemon.ivs.length; s++) { pokemon.ivs[s] = Math.round( @@ -1139,7 +1072,7 @@ export default class BattleScene extends SceneBase { container.add(icon); - if (pokemon.isFusion()) { + if (pokemon.isFusion(true)) { const fusionIcon = this.add.sprite(0, 0, pokemon.getFusionIconAtlasKey(ignoreOverride)); fusionIcon.setName("sprite-fusion-icon"); fusionIcon.setOrigin(0.5, 0); @@ -1225,7 +1158,7 @@ export default class BattleScene extends SceneBase { * Generates a random number using the current battle's seed * * This calls {@linkcode Battle.randSeedInt}({@linkcode range}, {@linkcode min}) in `src/battle.ts` - * which calls {@linkcode Utils.randSeedInt randSeedInt}({@linkcode range}, {@linkcode min}) in `src/utils.ts` + * which calls {@linkcode randSeedInt randSeedInt}({@linkcode range}, {@linkcode min}) in `src/utils.ts` * * @param range How large of a range of random numbers to choose from. If {@linkcode range} <= 1, returns {@linkcode min} * @param min The minimum integer to pick, default `0` @@ -1250,7 +1183,7 @@ export default class BattleScene extends SceneBase { this.lockModifierTiers = false; this.pokeballCounts = Object.fromEntries( - Utils.getEnumValues(PokeballType) + getEnumValues(PokeballType) .filter(p => p <= PokeballType.MASTER_BALL) .map(t => [t, 0]), ); @@ -1282,7 +1215,7 @@ export default class BattleScene extends SceneBase { // Reset RNG after end of game or save & quit. // This needs to happen after clearing this.currentBattle or the seed will be affected by the last wave played - this.setSeed(Overrides.SEED_OVERRIDE || Utils.randomString(24)); + this.setSeed(Overrides.SEED_OVERRIDE || randomString(24)); console.log("Seed:", this.seed); this.resetSeed(); @@ -1323,7 +1256,7 @@ export default class BattleScene extends SceneBase { ...allSpecies, ...allMoves, ...allAbilities, - ...Utils.getEnumValues(ModifierPoolType) + ...getEnumValues(ModifierPoolType) .map(mpt => getModifierPoolForType(mpt)) .flatMap(mp => Object.values(mp) @@ -1363,7 +1296,7 @@ export default class BattleScene extends SceneBase { } getDoubleBattleChance(newWaveIndex: number, playerField: PlayerPokemon[]) { - const doubleChance = new Utils.NumberHolder(newWaveIndex % 10 === 0 ? 32 : 8); + const doubleChance = new NumberHolder(newWaveIndex % 10 === 0 ? 32 : 8); this.applyModifiers(DoubleBattleChanceBoosterModifier, true, doubleChance); for (const p of playerField) { applyAbAttrs(DoubleBattleChanceAbAttr, p, null, false, doubleChance); @@ -1371,6 +1304,7 @@ export default class BattleScene extends SceneBase { return Math.max(doubleChance.value, 1); } + // TODO: ...this never actually returns `null`, right? newBattle( waveIndex?: number, battleType?: BattleType, @@ -1402,7 +1336,10 @@ export default class BattleScene extends SceneBase { this.field.add(newTrainer); } } else { - if (!this.gameMode.hasTrainers) { + if ( + !this.gameMode.hasTrainers || + (Overrides.DISABLE_STANDARD_TRAINERS_OVERRIDE && isNullOrUndefined(trainerData)) + ) { newBattleType = BattleType.WILD; } else if (battleType === undefined) { newBattleType = this.gameMode.isWaveTrainer(newWaveIndex, this.arena) ? BattleType.TRAINER : BattleType.WILD; @@ -1416,7 +1353,7 @@ export default class BattleScene extends SceneBase { if (trainerConfigs[trainerType].doubleOnly) { doubleTrainer = true; } else if (trainerConfigs[trainerType].hasDouble) { - doubleTrainer = !Utils.randSeedInt(this.getDoubleBattleChance(newWaveIndex, playerField)); + doubleTrainer = !randSeedInt(this.getDoubleBattleChance(newWaveIndex, playerField)); // Add a check that special trainers can't be double except for tate and liza - they should use the normal double chance if ( trainerConfigs[trainerType].trainerTypeDouble && @@ -1427,7 +1364,7 @@ export default class BattleScene extends SceneBase { } const variant = doubleTrainer ? TrainerVariant.DOUBLE - : Utils.randSeedInt(2) + : randSeedInt(2) ? TrainerVariant.FEMALE : TrainerVariant.DEFAULT; newTrainer = trainerData !== undefined ? trainerData.toTrainer() : new Trainer(trainerType, variant); @@ -1445,7 +1382,7 @@ export default class BattleScene extends SceneBase { if (double === undefined && newWaveIndex > 1) { if (newBattleType === BattleType.WILD && !this.gameMode.isWaveFinal(newWaveIndex)) { - newDouble = !Utils.randSeedInt(this.getDoubleBattleChance(newWaveIndex, playerField)); + newDouble = !randSeedInt(this.getDoubleBattleChance(newWaveIndex, playerField)); } else if (newBattleType === BattleType.TRAINER) { newDouble = newTrainer?.variant === TrainerVariant.DOUBLE; } @@ -1521,8 +1458,6 @@ export default class BattleScene extends SceneBase { this.currentBattle.mysteryEncounterType = mysteryEncounterType; } - //this.pushPhase(new TrainerMessageTestPhase(this, TrainerType.RIVAL, TrainerType.RIVAL_2, TrainerType.RIVAL_3, TrainerType.RIVAL_4, TrainerType.RIVAL_5, TrainerType.RIVAL_6)); - if (!waveIndex && lastBattle) { const isWaveIndexMultipleOfTen = !(lastBattle.waveIndex % 10); const isEndlessOrDaily = this.gameMode.hasShortBiomes || this.gameMode.isDaily; @@ -1635,7 +1570,7 @@ export default class BattleScene extends SceneBase { scale: scale, x: (defaultWidth - scaledWidth) / 2, y: defaultHeight - scaledHeight, - duration: !instant ? Utils.fixedInt(Math.abs(this.field.scale - scale) * 200) : 0, + duration: !instant ? fixedInt(Math.abs(this.field.scale - scale) * 200) : 0, ease: "Sine.easeInOut", onComplete: () => resolve(), }); @@ -1732,12 +1667,12 @@ export default class BattleScene extends SceneBase { case Species.SQUAWKABILLY: case Species.TATSUGIRI: case Species.PALDEA_TAUROS: - return Utils.randSeedInt(species.forms.length); + return randSeedInt(species.forms.length); case Species.PIKACHU: if (this.currentBattle?.battleType === BattleType.TRAINER && this.currentBattle?.waveIndex < 30) { return 0; // Ban Cosplay and Partner Pika from Trainers before wave 30 } - return Utils.randSeedInt(8); + return randSeedInt(8); case Species.EEVEE: if ( this.currentBattle?.battleType === BattleType.TRAINER && @@ -1746,22 +1681,22 @@ export default class BattleScene extends SceneBase { ) { return 0; // No Partner Eevee for Wave 12 Preschoolers } - return Utils.randSeedInt(2); + return randSeedInt(2); case Species.FROAKIE: case Species.FROGADIER: case Species.GRENINJA: if (this.currentBattle?.battleType === BattleType.TRAINER && !isEggPhase) { return 0; // Don't give trainers Battle Bond Greninja, Froakie or Frogadier } - return Utils.randSeedInt(2); + return randSeedInt(2); case Species.URSHIFU: - return Utils.randSeedInt(2); + return randSeedInt(2); case Species.ZYGARDE: - return Utils.randSeedInt(4); + return randSeedInt(4); case Species.MINIOR: - return Utils.randSeedInt(7); + return randSeedInt(7); case Species.ALCREMIE: - return Utils.randSeedInt(9); + return randSeedInt(9); case Species.MEOWSTIC: case Species.INDEEDEE: case Species.BASCULEGION: @@ -1792,7 +1727,7 @@ export default class BattleScene extends SceneBase { if (this.gameMode.hasMysteryEncounters && !isEggPhase) { return 1; // Wandering form } - return Utils.randSeedInt(species.forms.length); + return randSeedInt(species.forms.length); } if (ignoreArena) { @@ -1801,7 +1736,7 @@ export default class BattleScene extends SceneBase { case Species.WORMADAM: case Species.ROTOM: case Species.LYCANROC: - return Utils.randSeedInt(species.forms.length); + return randSeedInt(species.forms.length); } return 0; } @@ -1813,7 +1748,7 @@ export default class BattleScene extends SceneBase { let ret = false; this.executeWithSeedOffset( () => { - ret = !Utils.randSeedInt(2); + ret = !randSeedInt(2); }, 0, this.seed.toString(), @@ -1825,7 +1760,7 @@ export default class BattleScene extends SceneBase { let ret = 0; this.executeWithSeedOffset( () => { - ret = Utils.randSeedInt(8) * 5; + ret = randSeedInt(8) * 5; }, 0, this.seed.toString(), @@ -1854,7 +1789,7 @@ export default class BattleScene extends SceneBase { isBoss = waveIndex % 10 === 0 || (this.gameMode.hasRandomBosses && - Utils.randSeedInt(100) < Math.min(Math.max(Math.ceil((waveIndex - 250) / 50), 0) * 2, 30)); + randSeedInt(100) < Math.min(Math.max(Math.ceil((waveIndex - 250) / 50), 0) * 2, 30)); }, waveIndex << 2); } if (!isBoss) { @@ -1881,7 +1816,7 @@ export default class BattleScene extends SceneBase { const infectedIndexes: number[] = []; const spread = (index: number, spreadTo: number) => { const partyMember = party[index + spreadTo]; - if (!partyMember.pokerus && !Utils.randSeedInt(10)) { + if (!partyMember.pokerus && !randSeedInt(10)) { partyMember.pokerus = true; infectedIndexes.push(index + spreadTo); } @@ -1907,7 +1842,7 @@ export default class BattleScene extends SceneBase { resetSeed(waveIndex?: number): void { const wave = waveIndex || this.currentBattle?.waveIndex || 0; - this.waveSeed = Utils.shiftCharCodes(this.seed, wave); + this.waveSeed = shiftCharCodes(this.seed, wave); Phaser.Math.RND.sow([this.waveSeed]); console.log("Wave Seed:", this.waveSeed, wave); this.rngCounter = 0; @@ -1926,7 +1861,7 @@ export default class BattleScene extends SceneBase { const tempRngOffset = this.rngOffset; const tempRngSeedOverride = this.rngSeedOverride; const state = Phaser.Math.RND.state(); - Phaser.Math.RND.sow([Utils.shiftCharCodes(seedOverride || this.seed, offset)]); + Phaser.Math.RND.sow([shiftCharCodes(seedOverride || this.seed, offset)]); this.rngCounter = 0; this.rngOffset = offset; this.rngSeedOverride = seedOverride || ""; @@ -2071,7 +2006,7 @@ export default class BattleScene extends SceneBase { if (this.money === undefined) { return; } - const formattedMoney = Utils.formatMoney(this.moneyFormat, this.money); + const formattedMoney = formatMoney(this.moneyFormat, this.money); this.moneyText.setText(i18next.t("battleScene:moneyOwned", { formattedMoney })); this.fieldUI.moveAbove(this.moneyText, this.luckText); if (forceVisible) { @@ -2228,12 +2163,12 @@ export default class BattleScene extends SceneBase { ), ] : allSpecies.filter(s => s.isCatchable()); - return filteredSpecies[Utils.randSeedInt(filteredSpecies.length)]; + return filteredSpecies[randSeedInt(filteredSpecies.length)]; } generateRandomBiome(waveIndex: number): Biome { const relWave = waveIndex % 250; - const biomes = Utils.getEnumValues(Biome).filter(b => b !== Biome.TOWN && b !== Biome.END); + const biomes = getEnumValues(Biome).filter(b => b !== Biome.TOWN && b !== Biome.END); const maxDepth = biomeDepths[Biome.END][0] - 2; const depthWeights = new Array(maxDepth + 1) .fill(null) @@ -2245,7 +2180,7 @@ export default class BattleScene extends SceneBase { biomeThresholds.push(totalWeight); } - const randInt = Utils.randSeedInt(totalWeight); + const randInt = randSeedInt(totalWeight); for (let i = 0; i < biomes.length; i++) { if (randInt < biomeThresholds[i]) { @@ -2253,7 +2188,7 @@ export default class BattleScene extends SceneBase { } } - return biomes[Utils.randSeedInt(biomes.length)]; + return biomes[randSeedInt(biomes.length)]; } isBgmPlaying(): boolean { @@ -2264,6 +2199,9 @@ export default class BattleScene extends SceneBase { if (bgmName === undefined) { bgmName = this.currentBattle?.getBgmOverride() || this.arena?.bgm; } + + bgmName = timedEventManager.getEventBgmReplacement(bgmName); + if (this.bgm && bgmName === this.bgm.key) { if (!this.bgm.isPlaying) { this.bgm.play({ @@ -2435,7 +2373,7 @@ export default class BattleScene extends SceneBase { this.bgmResumeTimer.destroy(); } if (resumeBgm) { - this.bgmResumeTimer = this.time.delayedCall(pauseDuration || Utils.fixedInt(sound.totalDuration * 1000), () => { + this.bgmResumeTimer = this.time.delayedCall(pauseDuration || fixedInt(sound.totalDuration * 1000), () => { this.resumeBgm(); this.bgmResumeTimer = null; }); @@ -2656,6 +2594,10 @@ export default class BattleScene extends SceneBase { return 41.42; case "mystery_encounter_delibirdy": // Firel Delibirdy return 82.28; + case "title_afd": // Andr06 - PokéRogue Title Remix (AFD) + return 47.66; + case "battle_rival_3_afd": // Andr06 - Final N Battle Remix (AFD) + return 49.147; } return 0; @@ -2720,6 +2662,18 @@ export default class BattleScene extends SceneBase { this.phaseQueue.splice(0, this.phaseQueue.length); } + /** + * Clears all phase-related stuff, including all phase queues, the current and standby phases, and a splice index + */ + clearAllPhases(): void { + for (const queue of [this.phaseQueue, this.phaseQueuePrepend, this.conditionalQueue, this.nextCommandPhaseQueue]) { + queue.splice(0, queue.length); + } + this.currentPhase = null; + this.standbyPhase = null; + this.clearPhaseQueueSplice(); + } + /** * Used by function unshiftPhase(), sets index to start inserting at current length instead of the end of the array, useful if phaseQueuePrepend gets longer with Phases */ @@ -2913,14 +2867,19 @@ export default class BattleScene extends SceneBase { * @param show Whether to show or hide the bar */ public queueAbilityDisplay(pokemon: Pokemon, passive: boolean, show: boolean): void { - this.unshiftPhase( - show - ? new ShowAbilityPhase(pokemon.getBattlerIndex(), passive) - : new HideAbilityPhase(pokemon.getBattlerIndex(), passive), - ); + this.unshiftPhase(show ? new ShowAbilityPhase(pokemon.getBattlerIndex(), passive) : new HideAbilityPhase()); this.clearPhaseQueueSplice(); } + /** + * Hides the ability bar if it is currently visible + */ + public hideAbilityBar(): void { + if (this.abilityBar.isVisible()) { + this.unshiftPhase(new HideAbilityPhase()); + } + } + /** * Moves everything from nextCommandPhaseQueue to phaseQueue (keeping order) */ @@ -3007,7 +2966,7 @@ export default class BattleScene extends SceneBase { const args: unknown[] = []; if (modifier instanceof PokemonHpRestoreModifier) { if (!(modifier as PokemonHpRestoreModifier).fainted) { - const hpRestoreMultiplier = new Utils.NumberHolder(1); + const hpRestoreMultiplier = new NumberHolder(1); this.applyModifiers(HealingBoosterModifier, true, hpRestoreMultiplier); args.push(hpRestoreMultiplier.value); } else { @@ -3015,7 +2974,7 @@ export default class BattleScene extends SceneBase { } } else if (modifier instanceof FusePokemonModifier) { args.push(this.getPokemonById(modifier.fusePokemonId) as PlayerPokemon); - } else if (modifier instanceof RememberMoveModifier && !Utils.isNullOrUndefined(cost)) { + } else if (modifier instanceof RememberMoveModifier && !isNullOrUndefined(cost)) { args.push(cost); } @@ -3084,7 +3043,7 @@ export default class BattleScene extends SceneBase { itemLost = true, ): boolean { const source = itemModifier.pokemonId ? itemModifier.getPokemon() : null; - const cancelled = new Utils.BooleanHolder(false); + const cancelled = new BooleanHolder(false); if (source && source.isPlayer() !== target.isPlayer()) { applyAbAttrs(BlockItemTheftAbAttr, source, cancelled); @@ -3153,7 +3112,7 @@ export default class BattleScene extends SceneBase { canTransferHeldItemModifier(itemModifier: PokemonHeldItemModifier, target: Pokemon, transferQuantity = 1): boolean { const mod = itemModifier.clone() as PokemonHeldItemModifier; const source = mod.pokemonId ? mod.getPokemon() : null; - const cancelled = new Utils.BooleanHolder(false); + const cancelled = new BooleanHolder(false); if (source && source.isPlayer() !== target.isPlayer()) { applyAbAttrs(BlockItemTheftAbAttr, source, cancelled); @@ -3247,7 +3206,7 @@ export default class BattleScene extends SceneBase { } let count = 0; for (let c = 0; c < chances; c++) { - if (!Utils.randSeedInt(this.gameMode.getEnemyModifierChance(isBoss))) { + if (!randSeedInt(this.gameMode.getEnemyModifierChance(isBoss))) { count++; } } @@ -3423,7 +3382,7 @@ export default class BattleScene extends SceneBase { if (mods.length < 1) { return mods; } - const rand = Utils.randSeedInt(mods.length); + const rand = randSeedInt(mods.length); return [mods[rand], ...shuffleModifiers(mods.filter((_, i) => i !== rand))]; }; modifiers = shuffleModifiers(modifiers); @@ -3649,7 +3608,7 @@ export default class BattleScene extends SceneBase { */ initFinalBossPhaseTwo(pokemon: Pokemon): void { if (pokemon instanceof EnemyPokemon && pokemon.isBoss() && !pokemon.formIndex && pokemon.bossSegmentIndex < 1) { - this.fadeOutBgm(Utils.fixedInt(2000), false); + this.fadeOutBgm(fixedInt(2000), false); this.ui.showDialogue( battleSpecDialogue[BattleSpec.FINAL_BOSS].firstStageWin, pokemon.species.name, @@ -3752,7 +3711,7 @@ export default class BattleScene extends SceneBase { if (Overrides.XP_MULTIPLIER_OVERRIDE !== null) { expMultiplier = Overrides.XP_MULTIPLIER_OVERRIDE; } - const pokemonExp = new Utils.NumberHolder(expValue * expMultiplier); + const pokemonExp = new NumberHolder(expValue * expMultiplier); this.applyModifiers(PokemonExpBoosterModifier, true, partyMember, pokemonExp); partyMemberExp.push(Math.floor(pokemonExp.value)); } @@ -3901,7 +3860,7 @@ export default class BattleScene extends SceneBase { while (i < this.mysteryEncounterSaveData.queuedEncounters.length && !!encounter) { const candidate = this.mysteryEncounterSaveData.queuedEncounters[i]; const forcedChance = candidate.spawnPercent; - if (Utils.randSeedInt(100) < forcedChance) { + if (randSeedInt(100) < forcedChance) { encounter = allMysteryEncounters[candidate.type]; } @@ -3934,7 +3893,7 @@ export default class BattleScene extends SceneBase { } const totalWeight = tierWeights.reduce((a, b) => a + b); - const tierValue = Utils.randSeedInt(totalWeight); + const tierValue = randSeedInt(totalWeight); const commonThreshold = totalWeight - tierWeights[0]; const greatThreshold = totalWeight - tierWeights[0] - tierWeights[1]; const ultraThreshold = totalWeight - tierWeights[0] - tierWeights[1] - tierWeights[2]; @@ -4026,7 +3985,7 @@ export default class BattleScene extends SceneBase { console.log("No Mystery Encounters found, falling back to Mysterious Challengers."); return allMysteryEncounters[MysteryEncounterType.MYSTERIOUS_CHALLENGERS]; } - encounter = availableEncounters[Utils.randSeedInt(availableEncounters.length)]; + encounter = availableEncounters[randSeedInt(availableEncounters.length)]; // New encounter object to not dirty flags encounter = new MysteryEncounter(encounter); encounter.populateDialogueTokensFromRequirements(); diff --git a/src/battle.ts b/src/battle.ts index 5ada921bf5a..fb5af223b8f 100644 --- a/src/battle.ts +++ b/src/battle.ts @@ -1,11 +1,19 @@ import { globalScene } from "#app/global-scene"; import type { Command } from "./ui/command-ui-handler"; -import * as Utils from "./utils"; +import { + randomString, + getEnumValues, + NumberHolder, + randSeedInt, + shiftCharCodes, + randSeedItem, + randInt, +} from "#app/utils"; import Trainer, { TrainerVariant } from "./field/trainer"; import type { GameMode } from "./game-mode"; import { MoneyMultiplierModifier, PokemonHeldItemModifier } from "./modifier/modifier"; import type { PokeballType } from "#enums/pokeball"; -import { trainerConfigs } from "#app/data/trainer-config"; +import { trainerConfigs } from "#app/data/trainers/trainer-config"; import { SpeciesFormKey } from "#enums/species-form-key"; import type { EnemyPokemon, PlayerPokemon, TurnMove } from "#app/field/pokemon"; import type Pokemon from "#app/field/pokemon"; @@ -99,7 +107,7 @@ export default class Battle { public postBattleLoot: PokemonHeldItemModifier[] = []; public escapeAttempts = 0; public lastMove: Moves; - public battleSeed: string = Utils.randomString(16, true); + public battleSeed: string = randomString(16, true); private battleSeedState: string | null = null; public moneyScattered = 0; /** Primarily for double battles, keeps track of last enemy and player pokemon that triggered its ability or used a move */ @@ -181,8 +189,8 @@ export default class Battle { incrementTurn(): void { this.turn++; - this.turnCommands = Object.fromEntries(Utils.getEnumValues(BattlerIndex).map(bt => [bt, null])); - this.preTurnCommands = Object.fromEntries(Utils.getEnumValues(BattlerIndex).map(bt => [bt, null])); + this.turnCommands = Object.fromEntries(getEnumValues(BattlerIndex).map(bt => [bt, null])); + this.preTurnCommands = Object.fromEntries(getEnumValues(BattlerIndex).map(bt => [bt, null])); this.battleSeedState = null; } @@ -211,7 +219,7 @@ export default class Battle { } pickUpScatteredMoney(): void { - const moneyAmount = new Utils.NumberHolder(globalScene.currentBattle.moneyScattered); + const moneyAmount = new NumberHolder(globalScene.currentBattle.moneyScattered); globalScene.applyModifiers(MoneyMultiplierModifier, true, moneyAmount); if (globalScene.arena.getTag(ArenaTagType.HAPPY_HOUR)) { @@ -448,7 +456,7 @@ export default class Battle { } /** - * Generates a random number using the current battle's seed. Calls {@linkcode Utils.randSeedInt} + * Generates a random number using the current battle's seed. Calls {@linkcode randSeedInt} * @param range How large of a range of random numbers to choose from. If {@linkcode range} <= 1, returns {@linkcode min} * @param min The minimum integer to pick, default `0` * @returns A random integer between {@linkcode min} and ({@linkcode min} + {@linkcode range} - 1) @@ -463,12 +471,12 @@ export default class Battle { if (this.battleSeedState) { Phaser.Math.RND.state(this.battleSeedState); } else { - Phaser.Math.RND.sow([Utils.shiftCharCodes(this.battleSeed, this.turn << 6)]); + Phaser.Math.RND.sow([shiftCharCodes(this.battleSeed, this.turn << 6)]); console.log("Battle Seed:", this.battleSeed); } globalScene.rngCounter = this.rngCounter++; globalScene.rngSeedOverride = this.battleSeed; - const ret = Utils.randSeedInt(range, min); + const ret = randSeedInt(range, min); this.battleSeedState = Phaser.Math.RND.state(); Phaser.Math.RND.state(state); globalScene.rngCounter = tempRngCounter; @@ -554,19 +562,19 @@ export function getRandomTrainerFunc( seedOffset = 0, ): GetTrainerFunc { return () => { - const rand = Utils.randSeedInt(trainerPool.length); + const rand = randSeedInt(trainerPool.length); const trainerTypes: TrainerType[] = []; globalScene.executeWithSeedOffset(() => { for (const trainerPoolEntry of trainerPool) { - const trainerType = Array.isArray(trainerPoolEntry) ? Utils.randSeedItem(trainerPoolEntry) : trainerPoolEntry; + const trainerType = Array.isArray(trainerPoolEntry) ? randSeedItem(trainerPoolEntry) : trainerPoolEntry; trainerTypes.push(trainerType); } }, seedOffset); let trainerGender = TrainerVariant.DEFAULT; if (randomGender) { - trainerGender = Utils.randInt(2) === 0 ? TrainerVariant.FEMALE : TrainerVariant.DEFAULT; + trainerGender = randInt(2) === 0 ? TrainerVariant.FEMALE : TrainerVariant.DEFAULT; } /* 1/3 chance for evil team grunts to be double battles */ @@ -585,7 +593,7 @@ export function getRandomTrainerFunc( const isEvilTeamGrunt = evilTeamGrunts.includes(trainerTypes[rand]); if (trainerConfigs[trainerTypes[rand]].hasDouble && isEvilTeamGrunt) { - return new Trainer(trainerTypes[rand], Utils.randInt(3) === 0 ? TrainerVariant.DOUBLE : trainerGender); + return new Trainer(trainerTypes[rand], randInt(3) === 0 ? TrainerVariant.DOUBLE : trainerGender); } return new Trainer(trainerTypes[rand], trainerGender); @@ -608,7 +616,7 @@ export const classicFixedBattles: FixedBattleConfigs = { [ClassicFixedBossWaves.TOWN_YOUNGSTER]: new FixedBattleConfig() .setBattleType(BattleType.TRAINER) .setGetTrainerFunc( - () => new Trainer(TrainerType.YOUNGSTER, Utils.randSeedInt(2) ? TrainerVariant.FEMALE : TrainerVariant.DEFAULT), + () => new Trainer(TrainerType.YOUNGSTER, randSeedInt(2) ? TrainerVariant.FEMALE : TrainerVariant.DEFAULT), ), [ClassicFixedBossWaves.RIVAL_1]: new FixedBattleConfig() .setBattleType(BattleType.TRAINER) diff --git a/src/constants.ts b/src/constants.ts index 63f00b9f33f..927575c0a28 100644 --- a/src/constants.ts +++ b/src/constants.ts @@ -2,7 +2,7 @@ export const PLAYER_PARTY_MAX_SIZE: number = 6; /** Whether to use seasonal splash messages in general */ -export const USE_SEASONAL_SPLASH_MESSAGES: boolean = false; +export const USE_SEASONAL_SPLASH_MESSAGES: boolean = true; /** Name of the session ID cookie */ export const SESSION_ID_COOKIE_NAME: string = "pokerogue_sessionId"; diff --git a/src/data/ability.ts b/src/data/ability.ts index 3a14ad1456d..3e32a624f9f 100644 --- a/src/data/ability.ts +++ b/src/data/ability.ts @@ -2,8 +2,7 @@ import type { EnemyPokemon, PokemonMove } from "../field/pokemon"; import type Pokemon from "../field/pokemon"; import { HitResult, MoveResult, PlayerPokemon } from "../field/pokemon"; import { PokemonType } from "#enums/pokemon-type"; -import type { Constructor } from "#app/utils"; -import * as Utils from "../utils"; +import { BooleanHolder, NumberHolder, toDmgValue, isNullOrUndefined, randSeedItem, randSeedInt, type Constructor } from "#app/utils"; import { getPokemonNameWithAffix } from "../messages"; import type { Weather } from "#app/data/weather"; import type { BattlerTag } from "./battler-tags"; @@ -57,6 +56,9 @@ export class Ability implements Localizable { public generation: number; public isBypassFaint: boolean; public isIgnorable: boolean; + public isSuppressable = true; + public isCopiable = true; + public isReplaceable = true; public attrs: AbAttr[]; public conditions: AbAttrCondition[]; @@ -68,9 +70,16 @@ export class Ability implements Localizable { this.attrs = []; this.conditions = []; + this.isSuppressable = true; + this.isCopiable = true; + this.isReplaceable = true; + this.localize(); } + public get isSwappable(): boolean { + return this.isCopiable && this.isReplaceable; + } localize(): void { const i18nKey = Abilities[this.id].split("_").filter(f => f).map((f, i) => i ? `${f[0]}${f.slice(1).toLowerCase()}` : f.toLowerCase()).join("") as string; @@ -121,6 +130,21 @@ export class Ability implements Localizable { return this; } + unsuppressable(): Ability { + this.isSuppressable = false; + return this; + } + + uncopiable(): Ability { + this.isCopiable = false; + return this; + } + + unreplaceable(): Ability { + this.isReplaceable = false; + return this; + } + condition(condition: AbAttrCondition): Ability { this.conditions.push(condition); @@ -171,7 +195,7 @@ export abstract class AbAttr { * @param args - Extra args passed to the function. Handled by child classes. * @see {@linkcode canApply} */ - apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: Utils.BooleanHolder | null, args: any[]): void {} + apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: BooleanHolder | null, args: any[]): void {} getTriggerMessage(_pokemon: Pokemon, _abilityName: string, ..._args: any[]): string | null { return null; @@ -205,7 +229,7 @@ export class BlockRecoilDamageAttr extends AbAttr { super(false); } - override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: Utils.BooleanHolder, args: any[]): void { + override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: BooleanHolder, args: any[]): void { cancelled.value = true; } @@ -226,10 +250,10 @@ export class DoubleBattleChanceAbAttr extends AbAttr { /** * Increases the chance of a double battle occurring - * @param args [0] {@linkcode Utils.NumberHolder} for double battle chance + * @param args [0] {@linkcode NumberHolder} for double battle chance */ - override apply(_pokemon: Pokemon, _passive: boolean, _simulated: boolean, _cancelled: Utils.BooleanHolder, args: any[]): void { - const doubleBattleChance = args[0] as Utils.NumberHolder; + override apply(_pokemon: Pokemon, _passive: boolean, _simulated: boolean, _cancelled: BooleanHolder, args: any[]): void { + const doubleBattleChance = args[0] as NumberHolder; // This is divided because the chance is generated as a number from 0 to doubleBattleChance.value using Utils.randSeedInt // A double battle will initiate if the generated number is 0 doubleBattleChance.value = doubleBattleChance.value / 4; @@ -274,7 +298,7 @@ export class PostTeraFormChangeStatChangeAbAttr extends AbAttr { this.stages = stages; } - override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: Utils.BooleanHolder | null, args: any[]): void { + override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: BooleanHolder | null, args: any[]): void { const statStageChangePhases: StatStageChangePhase[] = []; if (!simulated) { @@ -306,9 +330,9 @@ export class ClearWeatherAbAttr extends AbAttr { return globalScene.arena.canSetWeather(WeatherType.NONE); } - public override apply(pokemon: Pokemon, passive: boolean, simulated:boolean, cancelled: Utils.BooleanHolder, args: any[]): void { + public override apply(pokemon: Pokemon, passive: boolean, simulated:boolean, cancelled: BooleanHolder, args: any[]): void { if (!simulated) { - globalScene.arena.trySetWeather(WeatherType.NONE, true); + globalScene.arena.trySetWeather(WeatherType.NONE, pokemon); } } } @@ -332,9 +356,9 @@ export class ClearTerrainAbAttr extends AbAttr { return globalScene.arena.canSetTerrain(TerrainType.NONE); } - public override apply(pokemon: Pokemon, passive: boolean, simulated:boolean, cancelled: Utils.BooleanHolder, args: any[]): void { + public override apply(pokemon: Pokemon, passive: boolean, simulated:boolean, cancelled: BooleanHolder, args: any[]): void { if (!simulated) { - globalScene.arena.trySetTerrain(TerrainType.NONE, true, true); + globalScene.arena.trySetTerrain(TerrainType.NONE, true, pokemon); } } } @@ -348,7 +372,7 @@ export class PreDefendAbAttr extends AbAttr { simulated: boolean, attacker: Pokemon, move: Move | null, - cancelled: Utils.BooleanHolder | null, + cancelled: BooleanHolder | null, args: any[]): boolean { return true; } @@ -359,19 +383,19 @@ export class PreDefendAbAttr extends AbAttr { simulated: boolean, attacker: Pokemon, move: Move | null, - cancelled: Utils.BooleanHolder | null, + cancelled: BooleanHolder | null, args: any[], ): void {} } export class PreDefendFullHpEndureAbAttr extends PreDefendAbAttr { - override canApplyPreDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move | null, cancelled: Utils.BooleanHolder | null, args: any[]): boolean { + override canApplyPreDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move | null, cancelled: BooleanHolder | null, args: any[]): boolean { return pokemon.isFullHp() && pokemon.getMaxHp() > 1 //Checks if pokemon has wonder_guard (which forces 1hp) - && (args[0] as Utils.NumberHolder).value >= pokemon.hp; //Damage >= hp + && (args[0] as NumberHolder).value >= pokemon.hp; //Damage >= hp } - override applyPreDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, cancelled: Utils.BooleanHolder, args: any[]): void { + override applyPreDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, cancelled: BooleanHolder, args: any[]): void { if (!simulated) { pokemon.addTag(BattlerTagType.STURDY, 1); } @@ -379,7 +403,7 @@ export class PreDefendFullHpEndureAbAttr extends PreDefendAbAttr { } export class BlockItemTheftAbAttr extends AbAttr { - override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: Utils.BooleanHolder, args: any[]): void { + override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: BooleanHolder, args: any[]): void { cancelled.value = true; } @@ -397,11 +421,11 @@ export class StabBoostAbAttr extends AbAttr { } override canApply(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean { - return (args[0] as Utils.NumberHolder).value > 1; + return (args[0] as NumberHolder).value > 1; } - override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: Utils.BooleanHolder, args: any[]): void { - (args[0] as Utils.NumberHolder).value += 0.5; + override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: BooleanHolder, args: any[]): void { + (args[0] as NumberHolder).value += 0.5; } } @@ -416,12 +440,12 @@ export class ReceivedMoveDamageMultiplierAbAttr extends PreDefendAbAttr { this.damageMultiplier = damageMultiplier; } - override canApplyPreDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, cancelled: Utils.BooleanHolder | null, args: any[]): boolean { + override canApplyPreDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, cancelled: BooleanHolder | null, args: any[]): boolean { return this.condition(pokemon, attacker, move); } - override applyPreDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, cancelled: Utils.BooleanHolder, args: any[]): void { - (args[0] as Utils.NumberHolder).value = Utils.toDmgValue((args[0] as Utils.NumberHolder).value * this.damageMultiplier); + override applyPreDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, cancelled: BooleanHolder, args: any[]): void { + (args[0] as NumberHolder).value = toDmgValue((args[0] as NumberHolder).value * this.damageMultiplier); } } @@ -440,11 +464,11 @@ export class AlliedFieldDamageReductionAbAttr extends PreDefendAbAttr { /** * Handles the damage reduction * @param args - * - `[0]` {@linkcode Utils.NumberHolder} - The damage being dealt + * - `[0]` {@linkcode NumberHolder} - The damage being dealt */ - override applyPreDefend(_pokemon: Pokemon, _passive: boolean, _simulated: boolean, _attacker: Pokemon, _move: Move, _cancelled: Utils.BooleanHolder, args: any[]): void { - const damage = args[0] as Utils.NumberHolder; - damage.value = Utils.toDmgValue(damage.value * this.damageMultiplier); + override applyPreDefend(_pokemon: Pokemon, _passive: boolean, _simulated: boolean, _attacker: Pokemon, _move: Move, _cancelled: BooleanHolder, args: any[]): void { + const damage = args[0] as NumberHolder; + damage.value = toDmgValue(damage.value * this.damageMultiplier); } } @@ -471,7 +495,7 @@ export class TypeImmunityAbAttr extends PreDefendAbAttr { this.condition = condition ?? null; } - override canApplyPreDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, cancelled: Utils.BooleanHolder | null, args: any[]): boolean { + override canApplyPreDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, cancelled: BooleanHolder | null, args: any[]): boolean { return ![ MoveTarget.BOTH_SIDES, MoveTarget.ENEMY_SIDE, MoveTarget.USER_SIDE ].includes(move.moveTarget) && attacker !== pokemon && attacker.getMoveType(move) === this.immuneType; } @@ -481,12 +505,12 @@ export class TypeImmunityAbAttr extends PreDefendAbAttr { * @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 cancelled {@linkcode BooleanHolder} - A holder for a boolean value indicating if the move was cancelled. + * @param args [0] {@linkcode NumberHolder} gets set to 0 if move is immuned by an ability. * @param args [1] - Whether the move is simulated. */ - override applyPreDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, cancelled: Utils.BooleanHolder, args: any[]): void { - (args[0] as Utils.NumberHolder).value = 0; + override applyPreDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, cancelled: BooleanHolder, args: any[]): void { + (args[0] as NumberHolder).value = 0; } getImmuneType(): PokemonType | null { @@ -503,7 +527,7 @@ export class AttackTypeImmunityAbAttr extends TypeImmunityAbAttr { super(immuneType, condition); } - override canApplyPreDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, cancelled: Utils.BooleanHolder | null, args: any[]): boolean { + override canApplyPreDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, cancelled: BooleanHolder | null, args: any[]): boolean { return move.category !== MoveCategory.STATUS && !move.hasAttr(NeutralDamageAgainstFlyingTypeMultiplierAttr) && super.canApplyPreDefend(pokemon, passive, simulated, attacker, move, cancelled, args); } @@ -513,7 +537,7 @@ export class AttackTypeImmunityAbAttr extends TypeImmunityAbAttr { * Type immunity abilities that do not give additional benefits (HP recovery, stat boosts, etc) are not immune to status moves of the type * Example: Levitate */ - override applyPreDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, cancelled: Utils.BooleanHolder, args: any[]): void { + override applyPreDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, cancelled: BooleanHolder, args: any[]): void { // this is a hacky way to fix the Levitate/Thousand Arrows interaction, but it works for now... super.applyPreDefend(pokemon, passive, simulated, attacker, move, cancelled, args); } @@ -524,16 +548,16 @@ export class TypeImmunityHealAbAttr extends TypeImmunityAbAttr { super(immuneType); } - override canApplyPreDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, cancelled: Utils.BooleanHolder | null, args: any[]): boolean { + override canApplyPreDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, cancelled: BooleanHolder | null, args: any[]): boolean { return super.canApplyPreDefend(pokemon, passive, simulated, attacker, move, cancelled, args); } - override applyPreDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, cancelled: Utils.BooleanHolder, args: any[]): void { + override applyPreDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, cancelled: BooleanHolder, args: any[]): void { super.applyPreDefend(pokemon, passive, simulated, attacker, move, cancelled, args); if (!pokemon.isFullHp() && !simulated) { const abilityName = (!passive ? pokemon.getAbility() : pokemon.getPassiveAbility()).name; globalScene.unshiftPhase(new PokemonHealPhase(pokemon.getBattlerIndex(), - Utils.toDmgValue(pokemon.getMaxHp() / 4), i18next.t("abilityTriggers:typeImmunityHeal", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), abilityName }), true)); + toDmgValue(pokemon.getMaxHp() / 4), i18next.t("abilityTriggers:typeImmunityHeal", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), abilityName }), true)); cancelled.value = true; // Suppresses "No Effect" message } } @@ -550,11 +574,11 @@ class TypeImmunityStatStageChangeAbAttr extends TypeImmunityAbAttr { this.stages = stages; } - override canApplyPreDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, cancelled: Utils.BooleanHolder | null, args: any[]): boolean { + override canApplyPreDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, cancelled: BooleanHolder | null, args: any[]): boolean { return super.canApplyPreDefend(pokemon, passive, simulated, attacker, move, cancelled, args); } - override applyPreDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, cancelled: Utils.BooleanHolder, args: any[]): void { + override applyPreDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, cancelled: BooleanHolder, args: any[]): void { super.applyPreDefend(pokemon, passive, simulated, attacker, move, cancelled, args); cancelled.value = true; // Suppresses "No Effect" message if (!simulated) { @@ -574,11 +598,11 @@ class TypeImmunityAddBattlerTagAbAttr extends TypeImmunityAbAttr { this.turnCount = turnCount; } - override canApplyPreDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, cancelled: Utils.BooleanHolder | null, args: any[]): boolean { + override canApplyPreDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, cancelled: BooleanHolder | null, args: any[]): boolean { return super.canApplyPreDefend(pokemon, passive, simulated, attacker, move, cancelled, args); } - override applyPreDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, cancelled: Utils.BooleanHolder, args: any[]): void { + override applyPreDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, cancelled: BooleanHolder, args: any[]): void { super.applyPreDefend(pokemon, passive, simulated, attacker, move, cancelled, args); cancelled.value = true; // Suppresses "No Effect" message if (!simulated) { @@ -592,16 +616,16 @@ export class NonSuperEffectiveImmunityAbAttr extends TypeImmunityAbAttr { super(null, condition); } - override canApplyPreDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, cancelled: Utils.BooleanHolder | null, args: any[]): boolean { + override canApplyPreDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, cancelled: BooleanHolder | null, args: any[]): boolean { const modifierValue = args.length > 0 - ? (args[0] as Utils.NumberHolder).value + ? (args[0] as NumberHolder).value : pokemon.getAttackTypeEffectiveness(attacker.getMoveType(move), attacker, undefined, undefined, move); return move instanceof AttackMove && modifierValue < 2; } - override applyPreDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, cancelled: Utils.BooleanHolder, args: any[]): void { + override applyPreDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, cancelled: BooleanHolder, args: any[]): void { cancelled.value = true; // Suppresses "No Effect" message - (args[0] as Utils.NumberHolder).value = 0; + (args[0] as NumberHolder).value = 0; } getTriggerMessage(pokemon: Pokemon, abilityName: string, ...args: any[]): string { @@ -619,9 +643,9 @@ export class NonSuperEffectiveImmunityAbAttr extends TypeImmunityAbAttr { */ export class FullHpResistTypeAbAttr extends PreDefendAbAttr { - override canApplyPreDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move | null, cancelled: Utils.BooleanHolder | null, args: any[]): boolean { + override canApplyPreDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move | null, cancelled: BooleanHolder | null, args: any[]): boolean { const typeMultiplier = args[0]; - return (typeMultiplier && typeMultiplier instanceof Utils.NumberHolder) && !(move && move.hasAttr(FixedDamageAttr)) && pokemon.isFullHp() && typeMultiplier.value > 0.5; + return (typeMultiplier && typeMultiplier instanceof NumberHolder) && !(move && move.hasAttr(FixedDamageAttr)) && pokemon.isFullHp() && typeMultiplier.value > 0.5; } /** @@ -640,7 +664,7 @@ export class FullHpResistTypeAbAttr extends PreDefendAbAttr { simulated: boolean, attacker: Pokemon, move: Move | null, - cancelled: Utils.BooleanHolder | null, + cancelled: BooleanHolder | null, args: any[]): void { const typeMultiplier = args[0]; typeMultiplier.value = 0.5; @@ -679,11 +703,11 @@ export class PostDefendAbAttr extends AbAttr { export class FieldPriorityMoveImmunityAbAttr extends PreDefendAbAttr { - override canApplyPreDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, cancelled: Utils.BooleanHolder | null, args: any[]): boolean { + override canApplyPreDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, cancelled: BooleanHolder | null, args: any[]): boolean { return !(move.moveTarget === MoveTarget.USER || move.moveTarget === MoveTarget.NEAR_ALLY) && move.getPriority(attacker) > 0 && !move.isMultiTarget(); } - override applyPreDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, cancelled: Utils.BooleanHolder, args: any[]): void { + override applyPreDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, cancelled: BooleanHolder, args: any[]): void { cancelled.value = true; } } @@ -718,11 +742,11 @@ export class MoveImmunityAbAttr extends PreDefendAbAttr { this.immuneCondition = immuneCondition; } - override canApplyPreDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, cancelled: Utils.BooleanHolder | null, args: any[]): boolean { + override canApplyPreDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, cancelled: BooleanHolder | null, args: any[]): boolean { return this.immuneCondition(pokemon, attacker, move); } - override applyPreDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, cancelled: Utils.BooleanHolder, args: any[]): void { + override applyPreDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, cancelled: BooleanHolder, args: any[]): void { cancelled.value = true; } @@ -743,13 +767,13 @@ export class WonderSkinAbAttr extends PreDefendAbAttr { super(false); } - override canApplyPreDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, cancelled: Utils.BooleanHolder | null, args: any[]): boolean { - const moveAccuracy = args[0] as Utils.NumberHolder; + override canApplyPreDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, cancelled: BooleanHolder | null, args: any[]): boolean { + const moveAccuracy = args[0] as NumberHolder; return move.category === MoveCategory.STATUS && moveAccuracy.value >= 50; } - override applyPreDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, cancelled: Utils.BooleanHolder, args: any[]): void { - const moveAccuracy = args[0] as Utils.NumberHolder; + override applyPreDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, cancelled: BooleanHolder, args: any[]): void { + const moveAccuracy = args[0] as NumberHolder; moveAccuracy.value = 50; } } @@ -764,11 +788,11 @@ export class MoveImmunityStatStageChangeAbAttr extends MoveImmunityAbAttr { this.stages = stages; } - override canApplyPreDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, cancelled: Utils.BooleanHolder | null, args: any[]): boolean { + override canApplyPreDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, cancelled: BooleanHolder | null, args: any[]): boolean { return !simulated && super.canApplyPreDefend(pokemon, passive, simulated, attacker, move, cancelled, args); } - override applyPreDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, cancelled: Utils.BooleanHolder, args: any[]): void { + override applyPreDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, cancelled: BooleanHolder, args: any[]): void { super.applyPreDefend(pokemon, passive, simulated, attacker, move, cancelled, args); globalScene.unshiftPhase(new StatStageChangePhase(pokemon.getBattlerIndex(), true, [ this.stat ], this.stages)); } @@ -829,7 +853,8 @@ export class PostDefendStatStageChangeAbAttr extends PostDefendAbAttr { } if (this.allOthers) { - const otherPokemon = pokemon.getAlly() ? pokemon.getOpponents().concat([ pokemon.getAlly() ]) : pokemon.getOpponents(); + const ally = pokemon.getAlly(); + const otherPokemon = !isNullOrUndefined(ally) ? pokemon.getOpponents().concat([ ally ]) : pokemon.getOpponents(); for (const other of otherPokemon) { globalScene.unshiftPhase(new StatStageChangePhase((other).getBattlerIndex(), false, [ this.stat ], this.stages)); } @@ -954,7 +979,7 @@ export class PostDefendTerrainChangeAbAttr extends PostDefendAbAttr { override applyPostDefend(pokemon: Pokemon, _passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, hitResult: HitResult, _args: any[]): void { if (!simulated) { - globalScene.arena.trySetTerrain(this.terrainType, true); + globalScene.arena.trySetTerrain(this.terrainType, false, pokemon); } } } @@ -972,7 +997,7 @@ export class PostDefendContactApplyStatusEffectAbAttr extends PostDefendAbAttr { override canApplyPostDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, hitResult: HitResult | null, args: any[]): boolean { const effect = this.effects.length === 1 ? this.effects[0] : this.effects[pokemon.randSeedInt(this.effects.length)]; - return move.checkFlag(MoveFlags.MAKES_CONTACT, attacker, pokemon) && !attacker.status + return move.doesFlagEffectApply({flag: MoveFlags.MAKES_CONTACT, user: attacker, target: pokemon}) && !attacker.status && (this.chance === -1 || pokemon.randSeedInt(100) < this.chance) && !move.hitsSubstitute(attacker, pokemon) && attacker.canSetStatus(effect, true, false, pokemon); } @@ -1012,7 +1037,7 @@ export class PostDefendContactApplyTagChanceAbAttr extends PostDefendAbAttr { } override canApplyPostDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, hitResult: HitResult | null, args: any[]): boolean { - return move.checkFlag(MoveFlags.MAKES_CONTACT, attacker, pokemon) && pokemon.randSeedInt(100) < this.chance + return move.doesFlagEffectApply({flag: MoveFlags.MAKES_CONTACT, user: attacker, target: pokemon}) && pokemon.randSeedInt(100) < this.chance && !move.hitsSubstitute(attacker, pokemon) && attacker.canAddTag(this.tagType); } @@ -1059,13 +1084,13 @@ export class PostDefendContactDamageAbAttr extends PostDefendAbAttr { } override canApplyPostDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, hitResult: HitResult | null, args: any[]): boolean { - return !simulated && move.checkFlag(MoveFlags.MAKES_CONTACT, attacker, pokemon) + return !simulated && move.doesFlagEffectApply({flag: MoveFlags.MAKES_CONTACT, user: attacker, target: pokemon}) && !attacker.hasAbilityWithAttr(BlockNonDirectDamageAbAttr) && !move.hitsSubstitute(attacker, pokemon); } override applyPostDefend(pokemon: Pokemon, _passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, _hitResult: HitResult, _args: any[]): void { - attacker.damageAndUpdate(Utils.toDmgValue(attacker.getMaxHp() * (1 / this.damageRatio)), { result: HitResult.INDIRECT }); - attacker.turnData.damageTaken += Utils.toDmgValue(attacker.getMaxHp() * (1 / this.damageRatio)); + attacker.damageAndUpdate(toDmgValue(attacker.getMaxHp() * (1 / this.damageRatio)), { result: HitResult.INDIRECT }); + attacker.turnData.damageTaken += toDmgValue(attacker.getMaxHp() * (1 / this.damageRatio)); } override getTriggerMessage(pokemon: Pokemon, abilityName: string, ..._args: any[]): string { @@ -1092,8 +1117,7 @@ export class PostDefendPerishSongAbAttr extends PostDefendAbAttr { } override canApplyPostDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, hitResult: HitResult | null, args: any[]): boolean { - return (move.checkFlag(MoveFlags.MAKES_CONTACT, attacker, pokemon) && !move.hitsSubstitute(attacker, pokemon)) - && !attacker.getTag(BattlerTagType.PERISH_SONG); + return move.doesFlagEffectApply({flag: MoveFlags.MAKES_CONTACT, user: attacker, target: pokemon}) && !attacker.getTag(BattlerTagType.PERISH_SONG); } override applyPostDefend(pokemon: Pokemon, _passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, _hitResult: HitResult, _args: any[]): void { @@ -1126,7 +1150,7 @@ export class PostDefendWeatherChangeAbAttr extends PostDefendAbAttr { override applyPostDefend(pokemon: Pokemon, _passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, _hitResult: HitResult, _args: any[]): void { if (!simulated) { - globalScene.arena.trySetWeather(this.weatherType, true); + globalScene.arena.trySetWeather(this.weatherType, pokemon); } } } @@ -1137,8 +1161,8 @@ export class PostDefendAbilitySwapAbAttr extends PostDefendAbAttr { } override canApplyPostDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, hitResult: HitResult | null, args: any[]): boolean { - return move.checkFlag(MoveFlags.MAKES_CONTACT, attacker, pokemon) - && !attacker.getAbility().hasAttr(UnswappableAbilityAbAttr) && !move.hitsSubstitute(attacker, pokemon); + return move.doesFlagEffectApply({flag: MoveFlags.MAKES_CONTACT, user: attacker, target: pokemon}) + && attacker.getAbility().isSwappable && !move.hitsSubstitute(attacker, pokemon); } override applyPostDefend(pokemon: Pokemon, _passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, _hitResult: HitResult, args: any[]): void { @@ -1163,7 +1187,7 @@ export class PostDefendAbilityGiveAbAttr extends PostDefendAbAttr { } override canApplyPostDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, hitResult: HitResult | null, args: any[]): boolean { - return move.checkFlag(MoveFlags.MAKES_CONTACT, attacker, pokemon) && !attacker.getAbility().hasAttr(UnsuppressableAbilityAbAttr) + return move.doesFlagEffectApply({flag: MoveFlags.MAKES_CONTACT, user: attacker, target: pokemon}) && attacker.getAbility().isSuppressable && !attacker.getAbility().hasAttr(PostDefendAbilityGiveAbAttr) && !move.hitsSubstitute(attacker, pokemon); } @@ -1194,7 +1218,7 @@ export class PostDefendMoveDisableAbAttr extends PostDefendAbAttr { override canApplyPostDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, hitResult: HitResult | null, args: any[]): boolean { return attacker.getTag(BattlerTagType.DISABLED) === null && !move.hitsSubstitute(attacker, pokemon) - && move.checkFlag(MoveFlags.MAKES_CONTACT, attacker, pokemon) && (this.chance === -1 || pokemon.randSeedInt(100) < this.chance); + && move.doesFlagEffectApply({flag: MoveFlags.MAKES_CONTACT, user: attacker, target: pokemon}) && (this.chance === -1 || pokemon.randSeedInt(100) < this.chance); } override applyPostDefend(pokemon: Pokemon, _passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, _hitResult: HitResult, _args: any[]): void { @@ -1266,16 +1290,16 @@ export class MoveEffectChanceMultiplierAbAttr extends AbAttr { override canApply(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean { const exceptMoves = [ Moves.ORDER_UP, Moves.ELECTRO_SHOT ]; - return !((args[0] as Utils.NumberHolder).value <= 0 || exceptMoves.includes((args[1] as Move).id)); + return !((args[0] as NumberHolder).value <= 0 || exceptMoves.includes((args[1] as Move).id)); } /** - * @param args [0]: {@linkcode Utils.NumberHolder} Move additional effect chance. Has to be higher than or equal to 0. + * @param args [0]: {@linkcode NumberHolder} Move additional effect chance. Has to be higher than or equal to 0. * [1]: {@linkcode Moves } Move used by the ability user. */ - override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: Utils.BooleanHolder, args: any[]): void { - (args[0] as Utils.NumberHolder).value *= this.chanceMultiplier; - (args[0] as Utils.NumberHolder).value = Math.min((args[0] as Utils.NumberHolder).value, 100); + override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: BooleanHolder, args: any[]): void { + (args[0] as NumberHolder).value *= this.chanceMultiplier; + (args[0] as NumberHolder).value = Math.min((args[0] as NumberHolder).value, 100); } } @@ -1285,16 +1309,19 @@ export class MoveEffectChanceMultiplierAbAttr extends AbAttr { * @see {@linkcode applyPreDefend} */ export class IgnoreMoveEffectsAbAttr extends PreDefendAbAttr { + constructor(showAbility: boolean = false) { + super(showAbility); + } - override canApplyPreDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move | null, cancelled: Utils.BooleanHolder | null, args: any[]): boolean { - return (args[0] as Utils.NumberHolder).value > 0; + override canApplyPreDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move | null, cancelled: BooleanHolder | null, args: any[]): boolean { + return (args[0] as NumberHolder).value > 0; } /** - * @param args [0]: {@linkcode Utils.NumberHolder} Move additional effect chance. + * @param args [0]: {@linkcode NumberHolder} Move additional effect chance. */ - override applyPreDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, cancelled: Utils.BooleanHolder, args: any[]): void { - (args[0] as Utils.NumberHolder).value = 0; + override applyPreDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, cancelled: BooleanHolder, args: any[]): void { + (args[0] as NumberHolder).value = 0; } } @@ -1309,7 +1336,7 @@ export class FieldPreventExplosiveMovesAbAttr extends AbAttr { pokemon: Pokemon, passive: boolean, simulated: boolean, - cancelled: Utils.BooleanHolder, + cancelled: BooleanHolder, args: any[], ): void { cancelled.value = true; @@ -1321,7 +1348,7 @@ export class FieldPreventExplosiveMovesAbAttr extends AbAttr { * If this ability cannot stack, a BooleanHolder can be used to prevent this from stacking. * @see {@link applyFieldStatMultiplierAbAttrs} * @see {@link applyFieldStat} - * @see {@link Utils.BooleanHolder} + * @see {@link BooleanHolder} */ export class FieldMultiplyStatAbAttr extends AbAttr { private stat: Stat; @@ -1336,7 +1363,7 @@ export class FieldMultiplyStatAbAttr extends AbAttr { this.canStack = canStack; } - canApplyFieldStat(pokemon: Pokemon, passive: boolean, simulated: boolean, stat: Stat, statValue: Utils.NumberHolder, checkedPokemon: Pokemon, hasApplied: Utils.BooleanHolder, args: any[]): boolean { + canApplyFieldStat(pokemon: Pokemon, passive: boolean, simulated: boolean, stat: Stat, statValue: NumberHolder, checkedPokemon: Pokemon, hasApplied: BooleanHolder, args: any[]): boolean { return this.canStack || !hasApplied.value && this.stat === stat && checkedPokemon.getAbilityAttrs(FieldMultiplyStatAbAttr).every(attr => (attr as FieldMultiplyStatAbAttr).stat !== stat); } @@ -1346,12 +1373,12 @@ export class FieldMultiplyStatAbAttr extends AbAttr { * @param pokemon {@linkcode Pokemon} the Pokemon using this ability * @param passive {@linkcode boolean} unused * @param stat {@linkcode Stat} the type of the checked stat - * @param statValue {@linkcode Utils.NumberHolder} the value of the checked stat + * @param statValue {@linkcode NumberHolder} the value of the checked stat * @param checkedPokemon {@linkcode Pokemon} the Pokemon this ability is targeting - * @param hasApplied {@linkcode Utils.BooleanHolder} whether or not another multiplier has been applied to this stat + * @param hasApplied {@linkcode BooleanHolder} whether or not another multiplier has been applied to this stat * @param args {any[]} unused */ - applyFieldStat(pokemon: Pokemon, passive: boolean, simulated: boolean, stat: Stat, statValue: Utils.NumberHolder, checkedPokemon: Pokemon, hasApplied: Utils.BooleanHolder, args: any[]): void { + applyFieldStat(pokemon: Pokemon, passive: boolean, simulated: boolean, stat: Stat, statValue: NumberHolder, checkedPokemon: Pokemon, hasApplied: BooleanHolder, args: any[]): void { statValue.value *= this.multiplier; hasApplied.value = true; } @@ -1373,10 +1400,10 @@ export class MoveTypeChangeAbAttr extends PreAttackAbAttr { // TODO: Decouple this into two attributes (type change / power boost) override applyPreAttack(pokemon: Pokemon, passive: boolean, simulated: boolean, defender: Pokemon, move: Move, args: any[]): void { - if (args[0] && args[0] instanceof Utils.NumberHolder) { + if (args[0] && args[0] instanceof NumberHolder) { args[0].value = this.newType; } - if (args[1] && args[1] instanceof Utils.NumberHolder) { + if (args[1] && args[1] instanceof NumberHolder) { args[1].value *= this.powerMultiplier; } } @@ -1454,12 +1481,12 @@ export class AddSecondStrikeAbAttr extends PreAttackAbAttr { * @param defender n/a * @param move the {@linkcode Move} used by the ability source * @param args Additional arguments: - * - `[0]` the number of strikes this move currently has ({@linkcode Utils.NumberHolder}) - * - `[1]` the damage multiplier for the current strike ({@linkcode Utils.NumberHolder}) + * - `[0]` the number of strikes this move currently has ({@linkcode NumberHolder}) + * - `[1]` the damage multiplier for the current strike ({@linkcode NumberHolder}) */ override applyPreAttack(pokemon: Pokemon, passive: boolean, simulated: boolean, defender: Pokemon, move: Move, args: any[]): void { - const hitCount = args[0] as Utils.NumberHolder; - const multiplier = args[1] as Utils.NumberHolder; + const hitCount = args[0] as NumberHolder; + const multiplier = args[1] as NumberHolder; if (hitCount?.value) { hitCount.value += 1; } @@ -1499,8 +1526,8 @@ export class DamageBoostAbAttr extends PreAttackAbAttr { * @param args Utils.NumberHolder as damage */ override applyPreAttack(pokemon: Pokemon, passive: boolean, simulated: boolean, defender: Pokemon, move: Move, args: any[]): void { - const power = args[0] as Utils.NumberHolder; - power.value = Utils.toDmgValue(power.value * this.damageMultiplier); + const power = args[0] as NumberHolder; + power.value = toDmgValue(power.value * this.damageMultiplier); } } @@ -1519,7 +1546,7 @@ export class MovePowerBoostAbAttr extends VariableMovePowerAbAttr { } override applyPreAttack(pokemon: Pokemon, passive: boolean, simulated: boolean, defender: Pokemon, move: Move, args: any[]): void { - (args[0] as Utils.NumberHolder).value *= this.powerMultiplier; + (args[0] as NumberHolder).value *= this.powerMultiplier; } } @@ -1562,7 +1589,7 @@ export class VariableMovePowerBoostAbAttr extends VariableMovePowerAbAttr { override applyPreAttack(pokemon: Pokemon, passive: boolean, simulated: boolean, defender: Pokemon, move: Move, args: any[]): void { const multiplier = this.mult(pokemon, defender, move); - (args[0] as Utils.NumberHolder).value *= multiplier; + (args[0] as NumberHolder).value *= multiplier; } } @@ -1591,7 +1618,7 @@ export class FieldMovePowerBoostAbAttr extends AbAttr { applyPreAttack(pokemon: Pokemon | null, passive: boolean | null, simulated: boolean, defender: Pokemon | null, move: Move, args: any[]): void { if (this.condition(pokemon, defender, move)) { - (args[0] as Utils.NumberHolder).value *= this.powerMultiplier; + (args[0] as NumberHolder).value *= this.powerMultiplier; } } } @@ -1654,7 +1681,7 @@ export class StatMultiplierAbAttr extends AbAttr { _passive: boolean, simulated: boolean, stat: BattleStat, - statValue: Utils.NumberHolder, + statValue: NumberHolder, args: any[]): boolean { const move = (args[0] as Move); return stat === this.stat && (!this.condition || this.condition(pokemon, null, move)); @@ -1665,7 +1692,7 @@ export class StatMultiplierAbAttr extends AbAttr { _passive: boolean, simulated: boolean, stat: BattleStat, - statValue: Utils.NumberHolder, + statValue: NumberHolder, args: any[]): void { statValue.value *= this.multiplier; } @@ -1709,6 +1736,62 @@ export class PostAttackAbAttr extends AbAttr { args: any[]): void {} } +/** + * Multiplies a Stat from an ally pokemon's ability. + * @see {@link applyAllyStatMultiplierAbAttrs} + * @see {@link applyAllyStat} + */ +export class AllyStatMultiplierAbAttr extends AbAttr { + private stat: BattleStat; + private multiplier: number; + private ignorable: boolean; + + /** + * @param stat - The stat being modified + * @param multipler - The multiplier to apply to the stat + * @param ignorable - Whether the multiplier can be ignored by mold breaker-like moves and abilities + */ + constructor(stat: BattleStat, multiplier: number, ignorable: boolean = true) { + super(false); + + this.stat = stat; + this.multiplier = multiplier; + this.ignorable = ignorable; + } + + /** + * Multiply a Pokemon's Stat due to an Ally's ability. + * @param _pokemon - The ally {@linkcode Pokemon} with the ability (unused) + * @param passive - unused + * @param _simulated - Whether the ability is being simulated (unused) + * @param _stat - The type of the checked {@linkcode Stat} (unused) + * @param statValue - {@linkcode NumberHolder} containing the value of the checked stat + * @param _checkedPokemon - The {@linkcode Pokemon} this ability is targeting (unused) + * @param _ignoreAbility - Whether the ability should be ignored if possible + * @param _args - unused + * @returns `true` if this changed the checked stat, `false` otherwise. + */ + applyAllyStat(_pokemon: Pokemon, _passive: boolean, _simulated: boolean, _stat: BattleStat, statValue: NumberHolder, _checkedPokemon: Pokemon, _ignoreAbility: boolean, _args: any[]) { + statValue.value *= this.multiplier; + } + + /** + * Check if this ability can apply to the checked stat. + * @param pokemon - The ally {@linkcode Pokemon} with the ability (unused) + * @param passive - unused + * @param simulated - Whether the ability is being simulated (unused) + * @param stat - The type of the checked {@linkcode Stat} + * @param statValue - {@linkcode NumberHolder} containing the value of the checked stat + * @param checkedPokemon - The {@linkcode Pokemon} this ability is targeting (unused) + * @param ignoreAbility - Whether the ability should be ignored if possible + * @param args - unused + * @returns `true` if this can apply to the checked stat, `false` otherwise. + */ + canApplyAllyStat(pokemon: Pokemon, _passive: boolean, simulated: boolean, stat: BattleStat, statValue: NumberHolder, checkedPokemon: Pokemon, ignoreAbility: boolean, args: any[]): boolean { + return stat === this.stat && !(ignoreAbility && this.ignorable); + } +} + /** * Ability attribute for Gorilla Tactics * @extends PostAttackAbAttr @@ -1840,7 +1923,7 @@ export class PostAttackApplyStatusEffectAbAttr extends PostAttackAbAttr { super.canApplyPostAttack(pokemon, passive, simulated, attacker, move, hitResult, args) && !(pokemon !== attacker && move.hitsSubstitute(attacker, pokemon)) && (simulated || !attacker.hasAbilityWithAttr(IgnoreMoveEffectsAbAttr) && pokemon !== attacker - && (!this.contactRequired || move.checkFlag(MoveFlags.MAKES_CONTACT, attacker, pokemon)) && pokemon.randSeedInt(100) < this.chance && !pokemon.status) + && (!this.contactRequired || move.doesFlagEffectApply({flag: MoveFlags.MAKES_CONTACT, user: attacker, target: pokemon})) && pokemon.randSeedInt(100) < this.chance && !pokemon.status) ) { const effect = this.effects.length === 1 ? this.effects[0] : this.effects[pokemon.randSeedInt(this.effects.length)]; return simulated || attacker.canSetStatus(effect, true, false, pokemon); @@ -1879,7 +1962,7 @@ export class PostAttackApplyBattlerTagAbAttr extends PostAttackAbAttr { /**Battler tags inflicted by abilities post attacking are also considered additional effects.*/ return super.canApplyPostAttack(pokemon, passive, simulated, attacker, move, hitResult, args) && !attacker.hasAbilityWithAttr(IgnoreMoveEffectsAbAttr) && pokemon !== attacker && - (!this.contactRequired || move.checkFlag(MoveFlags.MAKES_CONTACT, attacker, pokemon)) && + (!this.contactRequired || move.doesFlagEffectApply({flag: MoveFlags.MAKES_CONTACT, user: attacker, target: pokemon})) && pokemon.randSeedInt(100) < this.chance(attacker, pokemon, move) && !pokemon.status; } @@ -2100,7 +2183,7 @@ export class CopyFaintedAllyAbilityAbAttr extends PostKnockOutAbAttr { } override canApplyPostKnockOut(pokemon: Pokemon, passive: boolean, simulated: boolean, knockedOut: Pokemon, args: any[]): boolean { - return pokemon.isPlayer() === knockedOut.isPlayer() && !knockedOut.getAbility().hasAttr(UncopiableAbilityAbAttr); + return pokemon.isPlayer() === knockedOut.isPlayer() && knockedOut.getAbility().isCopiable; } override applyPostKnockOut(pokemon: Pokemon, passive: boolean, simulated: boolean, knockedOut: Pokemon, args: any[]): void { @@ -2136,8 +2219,8 @@ export class IgnoreOpponentStatStagesAbAttr extends AbAttr { * @param _cancelled n/a * @param args A BooleanHolder that represents whether or not to ignore a stat's stat changes */ - override apply(_pokemon: Pokemon, _passive: boolean, simulated: boolean, _cancelled: Utils.BooleanHolder, args: any[]): void { - (args[1] as Utils.BooleanHolder).value = true; + override apply(_pokemon: Pokemon, _passive: boolean, simulated: boolean, _cancelled: BooleanHolder, args: any[]): void { + (args[1] as BooleanHolder).value = true; } } @@ -2146,7 +2229,7 @@ export class IntimidateImmunityAbAttr extends AbAttr { super(false); } - override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: Utils.BooleanHolder, args: any[]): void { + override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: BooleanHolder, args: any[]): void { cancelled.value = true; } @@ -2170,7 +2253,7 @@ export class PostIntimidateStatStageChangeAbAttr extends AbAttr { this.overwrites = !!overwrites; } - override apply(pokemon: Pokemon, passive: boolean, simulated:boolean, cancelled: Utils.BooleanHolder, args: any[]): void { + override apply(pokemon: Pokemon, passive: boolean, simulated:boolean, cancelled: BooleanHolder, args: any[]): void { if (!simulated) { globalScene.pushPhase(new StatStageChangePhase(pokemon.getBattlerIndex(), false, this.stats, this.stages)); } @@ -2211,6 +2294,11 @@ export class PostSummonAbAttr extends AbAttr { applyPostSummon(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): void {} } +/** + * Base class for ability attributes which remove an effect on summon + */ +export class PostSummonRemoveEffectAbAttr extends PostSummonAbAttr {} + /** * Removes specified arena tags when a Pokemon is summoned. */ @@ -2282,6 +2370,18 @@ export class PostSummonMessageAbAttr extends PostSummonAbAttr { } } +/** + * Removes illusions when a Pokemon is summoned. + */ +export class PostSummonRemoveIllusionAbAttr extends PostSummonAbAttr { + applyPostSummon(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean { + for (const pokemon of globalScene.getField(true)) { + pokemon.breakIllusion(); + } + return true; + } +} + export class PostSummonUnnamedMessageAbAttr extends PostSummonAbAttr { //Attr doesn't force pokemon name on the message private message: string; @@ -2321,6 +2421,31 @@ export class PostSummonAddBattlerTagAbAttr extends PostSummonAbAttr { } } +/** + * Removes Specific battler tags when a Pokemon is summoned + * + * This should realistically only ever activate on gain rather than on summon + */ +export class PostSummonRemoveBattlerTagAbAttr extends PostSummonRemoveEffectAbAttr { + private immuneTags: BattlerTagType[]; + + /** + * @param immuneTags - The {@linkcode BattlerTagType | battler tags} the Pokémon is immune to. + */ + constructor(...immuneTags: BattlerTagType[]) { + super(); + this.immuneTags = immuneTags; + } + + public override canApplyPostSummon(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean { + return this.immuneTags.some(tagType => !!pokemon.getTag(tagType)); + } + + public override applyPostSummon(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): void { + this.immuneTags.forEach(tagType => pokemon.removeTag(tagType)); + } +} + export class PostSummonStatStageChangeAbAttr extends PostSummonAbAttr { private stats: BattleStat[]; private stages: number; @@ -2347,7 +2472,7 @@ export class PostSummonStatStageChangeAbAttr extends PostSummonAbAttr { globalScene.unshiftPhase(new StatStageChangePhase(pokemon.getBattlerIndex(), true, this.stats, this.stages)); } else { for (const opponent of pokemon.getOpponents()) { - const cancelled = new Utils.BooleanHolder(false); + const cancelled = new BooleanHolder(false); if (this.intimidate) { applyAbAttrs(IntimidateImmunityAbAttr, opponent, cancelled, simulated); applyAbAttrs(PostIntimidateStatStageChangeAbAttr, opponent, cancelled, simulated); @@ -2376,14 +2501,14 @@ export class PostSummonAllyHealAbAttr extends PostSummonAbAttr { } override canApplyPostSummon(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean { - return pokemon.getAlly()?.isActive(true); + return pokemon.getAlly()?.isActive(true) ?? false; } override applyPostSummon(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): void { const target = pokemon.getAlly(); - if (!simulated) { + if (!simulated && !isNullOrUndefined(target)) { globalScene.unshiftPhase(new PokemonHealPhase(target.getBattlerIndex(), - Utils.toDmgValue(pokemon.getMaxHp() / this.healRatio), i18next.t("abilityTriggers:postSummonAllyHeal", { pokemonNameWithAffix: getPokemonNameWithAffix(target), pokemonName: pokemon.name }), true, !this.showAnim)); + toDmgValue(pokemon.getMaxHp() / this.healRatio), i18next.t("abilityTriggers:postSummonAllyHeal", { pokemonNameWithAffix: getPokemonNameWithAffix(target), pokemonName: pokemon.name }), true, !this.showAnim)); } } } @@ -2402,12 +2527,12 @@ export class PostSummonClearAllyStatStagesAbAttr extends PostSummonAbAttr { } override canApplyPostSummon(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean { - return pokemon.getAlly()?.isActive(true); + return pokemon.getAlly()?.isActive(true) ?? false; } override applyPostSummon(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): void { const target = pokemon.getAlly(); - if (!simulated) { + if (!simulated && !isNullOrUndefined(target)) { for (const s of BATTLE_STATS) { target.setStatStage(s, 0); } @@ -2483,7 +2608,7 @@ export class PostSummonWeatherChangeAbAttr extends PostSummonAbAttr { override applyPostSummon(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): void { if (!simulated) { - globalScene.arena.trySetWeather(this.weatherType, true); + globalScene.arena.trySetWeather(this.weatherType, pokemon); } } } @@ -2503,11 +2628,48 @@ export class PostSummonTerrainChangeAbAttr extends PostSummonAbAttr { override applyPostSummon(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): void { if (!simulated) { - globalScene.arena.trySetTerrain(this.terrainType, true); + globalScene.arena.trySetTerrain(this.terrainType, false, pokemon); } } } +/** + * Heals a status effect if the Pokemon is afflicted with it upon switch in (or gain) + */ +export class PostSummonHealStatusAbAttr extends PostSummonRemoveEffectAbAttr { + private immuneEffects: StatusEffect[]; + private statusHealed: StatusEffect; + + /** + * @param immuneEffects - The {@linkcode StatusEffect}s the Pokémon is immune to. + */ + constructor(...immuneEffects: StatusEffect[]) { + super(); + this.immuneEffects = immuneEffects; + } + + public override canApplyPostSummon(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean { + const status = pokemon.status?.effect; + return !isNullOrUndefined(status) && (this.immuneEffects.length < 1 || this.immuneEffects.includes(status)) + } + + public override applyPostSummon(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): void { + const status = pokemon.status?.effect; + if (!isNullOrUndefined(status)) { + this.statusHealed = status; + pokemon.resetStatus(false); + pokemon.updateInfo(); + } + } + + public override getTriggerMessage(_pokemon: Pokemon, _abilityName: string, ..._args: any[]): string | null { + if (this.statusHealed) { + return getStatusEffectHealText(this.statusHealed, getPokemonNameWithAffix(_pokemon)); + } + return null; + } +} + export class PostSummonFormChangeAbAttr extends PostSummonAbAttr { private formFunc: (p: Pokemon) => number; @@ -2541,13 +2703,13 @@ export class PostSummonCopyAbilityAbAttr extends PostSummonAbAttr { let target: Pokemon; if (targets.length > 1) { - globalScene.executeWithSeedOffset(() => target = Utils.randSeedItem(targets), globalScene.currentBattle.waveIndex); + globalScene.executeWithSeedOffset(() => target = randSeedItem(targets), globalScene.currentBattle.waveIndex); } else { target = targets[0]; } if ( - target!.getAbility().hasAttr(UncopiableAbilityAbAttr) && + !target!.getAbility().isCopiable && // Wonder Guard is normally uncopiable so has the attribute, but Trace specifically can copy it !(pokemon.hasAbility(Abilities.TRACE) && target!.getAbility().id === Abilities.WONDER_GUARD) ) { @@ -2628,7 +2790,7 @@ export class PostSummonCopyAllyStatsAbAttr extends PostSummonAbAttr { } const ally = pokemon.getAlly(); - if (!ally || ally.getStatStages().every(s => s === 0)) { + if (isNullOrUndefined(ally) || ally.getStatStages().every(s => s === 0)) { return false; } @@ -2637,7 +2799,7 @@ export class PostSummonCopyAllyStatsAbAttr extends PostSummonAbAttr { override applyPostSummon(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): void { const ally = pokemon.getAlly(); - if (!simulated) { + if (!simulated && !isNullOrUndefined(ally)) { for (const s of BATTLE_STATS) { pokemon.setStatStage(s, ally.getStatStage(s)); } @@ -2662,7 +2824,7 @@ export class PostSummonTransformAbAttr extends PostSummonAbAttr { } private getTarget(targets: Pokemon[]): Pokemon { - let target: Pokemon; + let target: Pokemon = targets[0]; if (targets.length > 1) { globalScene.executeWithSeedOffset(() => { // in a double battle, if one of the opposing pokemon is fused the other one will be chosen @@ -2674,11 +2836,12 @@ export class PostSummonTransformAbAttr extends PostSummonAbAttr { target = targets[0]; return; } - target = Utils.randSeedItem(targets); + target = randSeedItem(targets); }, globalScene.currentBattle.waveIndex); } else { target = targets[0]; } + target = target!; return target; @@ -2686,6 +2849,12 @@ export class PostSummonTransformAbAttr extends PostSummonAbAttr { override canApplyPostSummon(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean { const targets = pokemon.getOpponents(); + const target = this.getTarget(targets); + + if (!!target.summonData?.illusion) { + return false; + } + if (simulated || !targets.length) { return simulated; } @@ -2738,7 +2907,7 @@ export class PostSummonFormChangeByWeatherAbAttr extends PostSummonAbAttr { private ability: Abilities; constructor(ability: Abilities) { - super(false); + super(true); this.ability = ability; } @@ -2762,7 +2931,6 @@ export class PostSummonFormChangeByWeatherAbAttr extends PostSummonAbAttr { if (!simulated) { globalScene.triggerPokemonFormChange(pokemon, SpeciesFormChangeWeatherTrigger); globalScene.triggerPokemonFormChange(pokemon, SpeciesFormChangeRevertWeatherFormTrigger); - globalScene.queueAbilityDisplay(pokemon, passive, true); } } } @@ -2783,8 +2951,9 @@ export class CommanderAbAttr extends AbAttr { // another Pokemon, this effect cannot apply. // TODO: Should this work with X + Dondozo fusions? - return globalScene.currentBattle?.double && pokemon.getAlly()?.species.speciesId === Species.DONDOZO - && !(pokemon.getAlly().isFainted() || pokemon.getAlly().getTag(BattlerTagType.COMMANDED)); + const ally = pokemon.getAlly(); + return globalScene.currentBattle?.double && !isNullOrUndefined(ally) && ally.species.speciesId === Species.DONDOZO + && !(ally.isFainted() || ally.getTag(BattlerTagType.COMMANDED)); } override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: null, args: any[]): void { @@ -2794,7 +2963,7 @@ export class CommanderAbAttr extends AbAttr { // Play an animation of the source jumping into the ally Dondozo's mouth globalScene.triggerPokemonBattleAnim(pokemon, PokemonAnimType.COMMANDER_APPLY); // Apply boosts from this effect to the ally Dondozo - pokemon.getAlly().addTag(BattlerTagType.COMMANDED, 0, Moves.NONE, pokemon.id); + pokemon.getAlly()?.addTag(BattlerTagType.COMMANDED, 0, Moves.NONE, pokemon.id); // Cancel the source Pokemon's next move (if a move is queued) globalScene.tryRemovePhase((phase) => phase instanceof MovePhase && phase.pokemon === pokemon); } @@ -2819,7 +2988,7 @@ export class PreSwitchOutResetStatusAbAttr extends PreSwitchOutAbAttr { } override canApplyPreSwitchOut(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean { - return !Utils.isNullOrUndefined(pokemon.status); + return !isNullOrUndefined(pokemon.status); } override applyPreSwitchOut(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): void { @@ -2886,7 +3055,7 @@ export class PreSwitchOutClearWeatherAbAttr extends PreSwitchOutAbAttr { } if (turnOffWeather) { - globalScene.arena.trySetWeather(WeatherType.NONE, false); + globalScene.arena.trySetWeather(WeatherType.NONE); return true; } @@ -2901,7 +3070,7 @@ export class PreSwitchOutHealAbAttr extends PreSwitchOutAbAttr { override applyPreSwitchOut(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): void { if (!simulated) { - const healAmount = Utils.toDmgValue(pokemon.getMaxHp() * 0.33); + const healAmount = toDmgValue(pokemon.getMaxHp() * 0.33); pokemon.heal(healAmount); pokemon.updateInfo(); } @@ -2986,7 +3155,7 @@ export class PreLeaveFieldClearWeatherAbAttr extends PreLeaveFieldAbAttr { */ override applyPreLeaveField(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): void { if (!simulated) { - globalScene.arena.trySetWeather(WeatherType.NONE, false); + globalScene.arena.trySetWeather(WeatherType.NONE); } } } @@ -3015,7 +3184,7 @@ export class PreStatStageChangeAbAttr extends AbAttr { passive: boolean, simulated: boolean, stat: BattleStat, - cancelled: Utils.BooleanHolder, + cancelled: BooleanHolder, args: any[]): boolean { return true; } @@ -3025,7 +3194,7 @@ export class PreStatStageChangeAbAttr extends AbAttr { passive: boolean, simulated: boolean, stat: BattleStat, - cancelled: Utils.BooleanHolder, + cancelled: BooleanHolder, args: any[], ): void {} } @@ -3044,10 +3213,10 @@ export class ReflectStatStageChangeAbAttr extends PreStatStageChangeAbAttr { * @param _passive N/A * @param simulated `true` if the ability is being simulated by the AI * @param stat the {@linkcode BattleStat} being affected - * @param cancelled The {@linkcode Utils.BooleanHolder} that will be set to true due to reflection + * @param cancelled The {@linkcode BooleanHolder} that will be set to true due to reflection * @param args */ - override applyPreStatStageChange(_pokemon: Pokemon, _passive: boolean, simulated: boolean, stat: BattleStat, cancelled: Utils.BooleanHolder, args: any[]): void { + override applyPreStatStageChange(_pokemon: Pokemon, _passive: boolean, simulated: boolean, stat: BattleStat, cancelled: BooleanHolder, args: any[]): void { const attacker: Pokemon = args[0]; const stages = args[1]; this.reflectedStat = stat; @@ -3079,8 +3248,8 @@ export class ProtectStatAbAttr extends PreStatStageChangeAbAttr { this.protectedStat = protectedStat; } - override canApplyPreStatStageChange(pokemon: Pokemon | null, passive: boolean, simulated: boolean, stat: BattleStat, cancelled: Utils.BooleanHolder, args: any[]): boolean { - return Utils.isNullOrUndefined(this.protectedStat) || stat === this.protectedStat; + override canApplyPreStatStageChange(pokemon: Pokemon | null, passive: boolean, simulated: boolean, stat: BattleStat, cancelled: BooleanHolder, args: any[]): boolean { + return isNullOrUndefined(this.protectedStat) || stat === this.protectedStat; } /** @@ -3089,10 +3258,10 @@ export class ProtectStatAbAttr extends PreStatStageChangeAbAttr { * @param _passive * @param simulated * @param stat the {@linkcode BattleStat} being affected - * @param cancelled The {@linkcode Utils.BooleanHolder} that will be set to true if the stat is protected + * @param cancelled The {@linkcode BooleanHolder} that will be set to true if the stat is protected * @param _args */ - override applyPreStatStageChange(_pokemon: Pokemon, _passive: boolean, _simulated: boolean, stat: BattleStat, cancelled: Utils.BooleanHolder, _args: any[]): void { + override applyPreStatStageChange(_pokemon: Pokemon, _passive: boolean, _simulated: boolean, stat: BattleStat, cancelled: BooleanHolder, _args: any[]): void { cancelled.value = true; } @@ -3145,12 +3314,13 @@ export class ConfusionOnStatusEffectAbAttr extends PostAttackAbAttr { } export class PreSetStatusAbAttr extends AbAttr { + /** Return whether the ability attribute can be applied */ canApplyPreSetStatus( pokemon: Pokemon, passive: boolean, simulated: boolean, effect: StatusEffect | undefined, - cancelled: Utils.BooleanHolder, + cancelled: BooleanHolder, args: any[]): boolean { return true; } @@ -3160,7 +3330,7 @@ export class PreSetStatusAbAttr extends AbAttr { passive: boolean, simulated: boolean, effect: StatusEffect | undefined, - cancelled: Utils.BooleanHolder, + cancelled: BooleanHolder, args: any[], ): void {} } @@ -3169,7 +3339,7 @@ export class PreSetStatusAbAttr extends AbAttr { * Provides immunity to status effects to specified targets. */ export class PreSetStatusEffectImmunityAbAttr extends PreSetStatusAbAttr { - private immuneEffects: StatusEffect[]; + protected immuneEffects: StatusEffect[]; /** * @param immuneEffects - The status effects to which the Pokémon is immune. @@ -3180,7 +3350,7 @@ export class PreSetStatusEffectImmunityAbAttr extends PreSetStatusAbAttr { this.immuneEffects = immuneEffects; } - override canApplyPreSetStatus(pokemon: Pokemon, passive: boolean, simulated: boolean, effect: StatusEffect, cancelled: Utils.BooleanHolder, args: any[]): boolean { + override canApplyPreSetStatus(pokemon: Pokemon, passive: boolean, simulated: boolean, effect: StatusEffect, cancelled: BooleanHolder, args: any[]): boolean { return effect !== StatusEffect.FAINT && this.immuneEffects.length < 1 || this.immuneEffects.includes(effect); } @@ -3193,7 +3363,7 @@ export class PreSetStatusEffectImmunityAbAttr extends PreSetStatusAbAttr { * @param cancelled - A holder for a boolean value indicating if the status application was cancelled. * @param args - n/a */ - override applyPreSetStatus(pokemon: Pokemon, passive: boolean, simulated: boolean, effect: StatusEffect, cancelled: Utils.BooleanHolder, args: any[]): void { + override applyPreSetStatus(pokemon: Pokemon, passive: boolean, simulated: boolean, effect: StatusEffect, cancelled: BooleanHolder, args: any[]): void { cancelled.value = true; } @@ -3223,13 +3393,99 @@ export class StatusEffectImmunityAbAttr extends PreSetStatusEffectImmunityAbAttr */ export class UserFieldStatusEffectImmunityAbAttr extends PreSetStatusEffectImmunityAbAttr { } +/** + * Conditionally provides immunity to status effects to the user's field. + * + * Used by {@linkcode Abilities.FLOWER_VEIL | Flower Veil}. + * @extends UserFieldStatusEffectImmunityAbAttr + * + */ +export class ConditionalUserFieldStatusEffectImmunityAbAttr extends UserFieldStatusEffectImmunityAbAttr { + /** + * The condition for the field immunity to be applied. + * @param target The target of the status effect + * @param source The source of the status effect + */ + protected condition: (target: Pokemon, source: Pokemon | null) => boolean; + + /** + * Evaluate the condition to determine if the {@linkcode ConditionalUserFieldStatusEffectImmunityAbAttr} can be applied. + * @param pokemon The pokemon with the ability + * @param passive unused + * @param simulated Whether the ability is being simulated + * @param effect The status effect being applied + * @param cancelled Holds whether the status effect was cancelled by a prior effect + * @param args `Args[0]` is the target of the status effect, `Args[1]` is the source. + * @returns Whether the ability can be applied to cancel the status effect. + */ + override canApplyPreSetStatus(pokemon: Pokemon, passive: boolean, simulated: boolean, effect: StatusEffect, cancelled: BooleanHolder, args: [Pokemon, Pokemon | null, ...any]): boolean { + return (!cancelled.value && effect !== StatusEffect.FAINT && this.immuneEffects.length < 1 || this.immuneEffects.includes(effect)) && this.condition(args[0], args[1]); + } + + constructor(condition: (target: Pokemon, source: Pokemon | null) => boolean, ...immuneEffects: StatusEffect[]) { + super(...immuneEffects); + + this.condition = condition; + } +} + +/** + * Conditionally provides immunity to stat drop effects to the user's field. + * + * Used by {@linkcode Abilities.FLOWER_VEIL | Flower Veil}. + */ +export class ConditionalUserFieldProtectStatAbAttr extends PreStatStageChangeAbAttr { + /** {@linkcode BattleStat} to protect or `undefined` if **all** {@linkcode BattleStat} are protected */ + protected protectedStat?: BattleStat; + + /** If the method evaluates to true, the stat will be protected. */ + protected condition: (target: Pokemon) => boolean; + + constructor(condition: (target: Pokemon) => boolean, protectedStat?: BattleStat) { + super(); + this.condition = condition; + } + + /** + * Determine whether the {@linkcode ConditionalUserFieldProtectStatAbAttr} can be applied. + * @param pokemon The pokemon with the ability + * @param passive unused + * @param simulated Unused + * @param stat The stat being affected + * @param cancelled Holds whether the stat change was already prevented. + * @param args Args[0] is the target pokemon of the stat change. + * @returns + */ + override canApplyPreStatStageChange(pokemon: Pokemon, passive: boolean, simulated: boolean, stat: BattleStat, cancelled: BooleanHolder, args: [Pokemon, ...any]): boolean { + const target = args[0]; + if (!target) { + return false; + } + return !cancelled.value && (isNullOrUndefined(this.protectedStat) || stat === this.protectedStat) && this.condition(target); + } + + /** + * Apply the {@linkcode ConditionalUserFieldStatusEffectImmunityAbAttr} to an interaction + * @param _pokemon The pokemon the stat change is affecting (unused) + * @param _passive unused + * @param _simulated unused + * @param stat The stat being affected + * @param cancelled Will be set to true if the stat change is prevented + * @param _args unused + */ + override applyPreStatStageChange(_pokemon: Pokemon, _passive: boolean, _simulated: boolean, _stat: BattleStat, cancelled: BooleanHolder, _args: any[]): void { + cancelled.value = true; + } +} + + export class PreApplyBattlerTagAbAttr extends AbAttr { canApplyPreApplyBattlerTag( pokemon: Pokemon, passive: boolean, simulated: boolean, tag: BattlerTag, - cancelled: Utils.BooleanHolder, + cancelled: BooleanHolder, args: any[], ): boolean { return true; @@ -3240,7 +3496,7 @@ export class PreApplyBattlerTagAbAttr extends AbAttr { passive: boolean, simulated: boolean, tag: BattlerTag, - cancelled: Utils.BooleanHolder, + cancelled: BooleanHolder, args: any[], ): void {} } @@ -3249,8 +3505,8 @@ export class PreApplyBattlerTagAbAttr extends AbAttr { * Provides immunity to BattlerTags {@linkcode BattlerTag} to specified targets. */ export class PreApplyBattlerTagImmunityAbAttr extends PreApplyBattlerTagAbAttr { - private immuneTagTypes: BattlerTagType[]; - private battlerTag: BattlerTag; + protected immuneTagTypes: BattlerTagType[]; + protected battlerTag: BattlerTag; constructor(immuneTagTypes: BattlerTagType | BattlerTagType[]) { super(true); @@ -3258,13 +3514,13 @@ export class PreApplyBattlerTagImmunityAbAttr extends PreApplyBattlerTagAbAttr { this.immuneTagTypes = Array.isArray(immuneTagTypes) ? immuneTagTypes : [ immuneTagTypes ]; } - override canApplyPreApplyBattlerTag(pokemon: Pokemon, passive: boolean, simulated: boolean, tag: BattlerTag, cancelled: Utils.BooleanHolder, args: any[]): boolean { + override canApplyPreApplyBattlerTag(pokemon: Pokemon, passive: boolean, simulated: boolean, tag: BattlerTag, cancelled: BooleanHolder, args: any[]): boolean { this.battlerTag = tag; - return this.immuneTagTypes.includes(tag.tagType); + return !cancelled.value && this.immuneTagTypes.includes(tag.tagType); } - override applyPreApplyBattlerTag(pokemon: Pokemon, passive: boolean, simulated: boolean, tag: BattlerTag, cancelled: Utils.BooleanHolder, args: any[]): void { + override applyPreApplyBattlerTag(pokemon: Pokemon, passive: boolean, simulated: boolean, tag: BattlerTag, cancelled: BooleanHolder, args: any[]): void { cancelled.value = true; } @@ -3289,13 +3545,37 @@ export class BattlerTagImmunityAbAttr extends PreApplyBattlerTagImmunityAbAttr { */ export class UserFieldBattlerTagImmunityAbAttr extends PreApplyBattlerTagImmunityAbAttr { } +export class ConditionalUserFieldBattlerTagImmunityAbAttr extends UserFieldBattlerTagImmunityAbAttr { + private condition: (target: Pokemon) => boolean; + + /** + * Determine whether the {@linkcode ConditionalUserFieldBattlerTagImmunityAbAttr} can be applied by passing the target pokemon to the condition. + * @param pokemon The pokemon owning the ability + * @param passive unused + * @param simulated whether the ability is being simulated (unused) + * @param tag The {@linkcode BattlerTag} being applied + * @param cancelled Holds whether the tag was previously cancelled (unused) + * @param args Args[0] is the target that the tag is attempting to be applied to + * @returns Whether the ability can be used to cancel the battler tag + */ + override canApplyPreApplyBattlerTag(pokemon: Pokemon, passive: boolean, simulated: boolean, tag: BattlerTag, cancelled: BooleanHolder, args: [Pokemon, ...any]): boolean { + return super.canApplyPreApplyBattlerTag(pokemon, passive, simulated, tag, cancelled, args) && this.condition(args[0]); + } + + constructor(condition: (target: Pokemon) => boolean, immuneTagTypes: BattlerTagType | BattlerTagType[]) { + super(immuneTagTypes); + + this.condition = condition; + } +} + export class BlockCritAbAttr extends AbAttr { constructor() { super(false); } - override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: Utils.BooleanHolder, args: any[]): void { - (args[0] as Utils.BooleanHolder).value = true; + override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: BooleanHolder, args: any[]): void { + (args[0] as BooleanHolder).value = true; } } @@ -3303,8 +3583,18 @@ export class BonusCritAbAttr extends AbAttr { constructor() { super(false); } - override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: Utils.BooleanHolder, args: any[]): void { - (args[0] as Utils.BooleanHolder).value = true; + + /** + * Apply the bonus crit ability by increasing the value in the provided number holder by 1 + * + * @param pokemon The pokemon with the BonusCrit ability (unused) + * @param passive Unused + * @param simulated Unused + * @param cancelled Unused + * @param args Args[0] is a number holder containing the crit stage. + */ + override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: BooleanHolder, args: [NumberHolder, ...any]): void { + (args[0] as NumberHolder).value += 1; } } @@ -3318,12 +3608,12 @@ export class MultCritAbAttr extends AbAttr { } override canApply(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean { - const critMult = args[0] as Utils.NumberHolder; + const critMult = args[0] as NumberHolder; return critMult.value > 1; } - override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: Utils.BooleanHolder, args: any[]): void { - const critMult = args[0] as Utils.NumberHolder; + override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: BooleanHolder, args: any[]): void { + const critMult = args[0] as NumberHolder; critMult.value *= this.multAmount; } } @@ -3350,12 +3640,12 @@ export class ConditionalCritAbAttr extends AbAttr { /** * @param pokemon {@linkcode Pokemon} user. - * @param args [0] {@linkcode Utils.BooleanHolder} If true critical hit is guaranteed. + * @param args [0] {@linkcode BooleanHolder} If true critical hit is guaranteed. * [1] {@linkcode Pokemon} Target. * [2] {@linkcode Move} used by ability user. */ - override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: Utils.BooleanHolder, args: any[]): void { - (args[0] as Utils.BooleanHolder).value = true; + override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: BooleanHolder, args: any[]): void { + (args[0] as BooleanHolder).value = true; } } @@ -3364,7 +3654,7 @@ export class BlockNonDirectDamageAbAttr extends AbAttr { super(false); } - override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: Utils.BooleanHolder, args: any[]): void { + override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: BooleanHolder, args: any[]): void { cancelled.value = true; } } @@ -3394,16 +3684,16 @@ export class BlockStatusDamageAbAttr extends AbAttr { /** * @param {Pokemon} pokemon The pokemon with the ability * @param {boolean} passive N/A - * @param {Utils.BooleanHolder} cancelled Whether to cancel the status damage + * @param {BooleanHolder} cancelled Whether to cancel the status damage * @param {any[]} args N/A */ - override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: Utils.BooleanHolder, args: any[]): void { + override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: BooleanHolder, args: any[]): void { cancelled.value = true; } } export class BlockOneHitKOAbAttr extends AbAttr { - override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: Utils.BooleanHolder, args: any[]): void { + override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: BooleanHolder, args: any[]): void { cancelled.value = true; } } @@ -3432,8 +3722,8 @@ export class ChangeMovePriorityAbAttr extends AbAttr { return this.moveFunc(pokemon, args[0] as Move); } - override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: Utils.BooleanHolder, args: any[]): void { - (args[1] as Utils.NumberHolder).value += this.changeAmount; + override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: BooleanHolder, args: any[]): void { + (args[1] as NumberHolder).value += this.changeAmount; } } @@ -3445,7 +3735,7 @@ export class PreWeatherEffectAbAttr extends AbAttr { passive: Boolean, simulated: boolean, weather: Weather | null, - cancelled: Utils.BooleanHolder, + cancelled: BooleanHolder, args: any[]): boolean { return true; } @@ -3455,7 +3745,7 @@ export class PreWeatherEffectAbAttr extends AbAttr { passive: boolean, simulated: boolean, weather: Weather | null, - cancelled: Utils.BooleanHolder, + cancelled: BooleanHolder, args: any[], ): void {} } @@ -3471,11 +3761,11 @@ export class BlockWeatherDamageAttr extends PreWeatherDamageAbAttr { this.weatherTypes = weatherTypes; } - override canApplyPreWeatherEffect(pokemon: Pokemon, passive: Boolean, simulated: boolean, weather: Weather, cancelled: Utils.BooleanHolder, args: any[]): boolean { + override canApplyPreWeatherEffect(pokemon: Pokemon, passive: Boolean, simulated: boolean, weather: Weather, cancelled: BooleanHolder, args: any[]): boolean { return !this.weatherTypes.length || this.weatherTypes.indexOf(weather?.weatherType) > -1; } - override applyPreWeatherEffect(pokemon: Pokemon, passive: boolean, simulated: boolean, weather: Weather, cancelled: Utils.BooleanHolder, args: any[]): void { + override applyPreWeatherEffect(pokemon: Pokemon, passive: boolean, simulated: boolean, weather: Weather, cancelled: BooleanHolder, args: any[]): void { cancelled.value = true; } } @@ -3489,11 +3779,11 @@ export class SuppressWeatherEffectAbAttr extends PreWeatherEffectAbAttr { this.affectsImmutable = !!affectsImmutable; } - override canApplyPreWeatherEffect(pokemon: Pokemon, passive: Boolean, simulated: boolean, weather: Weather, cancelled: Utils.BooleanHolder, args: any[]): boolean { + override canApplyPreWeatherEffect(pokemon: Pokemon, passive: Boolean, simulated: boolean, weather: Weather, cancelled: BooleanHolder, args: any[]): boolean { return this.affectsImmutable || weather.isImmutable(); } - override applyPreWeatherEffect(pokemon: Pokemon, passive: boolean, simulated: boolean, weather: Weather, cancelled: Utils.BooleanHolder, args: any[]): void { + override applyPreWeatherEffect(pokemon: Pokemon, passive: boolean, simulated: boolean, weather: Weather, cancelled: BooleanHolder, args: any[]): void { cancelled.value = true; } } @@ -3770,7 +4060,7 @@ export class PostWeatherLapseHealAbAttr extends PostWeatherLapseAbAttr { const abilityName = (!passive ? pokemon.getAbility() : pokemon.getPassiveAbility()).name; if (!simulated) { globalScene.unshiftPhase(new PokemonHealPhase(pokemon.getBattlerIndex(), - Utils.toDmgValue(pokemon.getMaxHp() / (16 / this.healFactor)), i18next.t("abilityTriggers:postWeatherLapseHeal", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), abilityName }), true)); + toDmgValue(pokemon.getMaxHp() / (16 / this.healFactor)), i18next.t("abilityTriggers:postWeatherLapseHeal", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), abilityName }), true)); } } } @@ -3792,7 +4082,7 @@ export class PostWeatherLapseDamageAbAttr extends PostWeatherLapseAbAttr { if (!simulated) { const abilityName = (!passive ? pokemon.getAbility() : pokemon.getPassiveAbility()).name; globalScene.queueMessage(i18next.t("abilityTriggers:postWeatherLapseDamage", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), abilityName })); - pokemon.damageAndUpdate(Utils.toDmgValue(pokemon.getMaxHp() / (16 / this.damageFactor)), { result: HitResult.INDIRECT }); + pokemon.damageAndUpdate(toDmgValue(pokemon.getMaxHp() / (16 / this.damageFactor)), { result: HitResult.INDIRECT }); } } } @@ -3860,7 +4150,7 @@ export class PostTurnStatusHealAbAttr extends PostTurnAbAttr { } override canApplyPostTurn(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean { - return !Utils.isNullOrUndefined(pokemon.status) && this.effects.includes(pokemon.status.effect) && !pokemon.isFullHp(); + return !isNullOrUndefined(pokemon.status) && this.effects.includes(pokemon.status.effect) && !pokemon.isFullHp(); } /** @@ -3872,7 +4162,7 @@ export class PostTurnStatusHealAbAttr extends PostTurnAbAttr { if (!simulated) { const abilityName = (!passive ? pokemon.getAbility() : pokemon.getPassiveAbility()).name; globalScene.unshiftPhase(new PokemonHealPhase(pokemon.getBattlerIndex(), - Utils.toDmgValue(pokemon.getMaxHp() / 8), i18next.t("abilityTriggers:poisonHeal", { pokemonName: getPokemonNameWithAffix(pokemon), abilityName }), true)); + toDmgValue(pokemon.getMaxHp() / 8), i18next.t("abilityTriggers:poisonHeal", { pokemonName: getPokemonNameWithAffix(pokemon), abilityName }), true)); } } } @@ -3883,7 +4173,7 @@ export class PostTurnStatusHealAbAttr extends PostTurnAbAttr { */ export class PostTurnResetStatusAbAttr extends PostTurnAbAttr { private allyTarget: boolean; - private target: Pokemon; + private target: Pokemon | undefined; constructor(allyTarget = false) { super(true); @@ -3896,11 +4186,11 @@ export class PostTurnResetStatusAbAttr extends PostTurnAbAttr { } else { this.target = pokemon; } - return !Utils.isNullOrUndefined(this.target.status); + return !isNullOrUndefined(this.target?.status); } override applyPostTurn(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): void { - if (!simulated && this.target.status) { + if (!simulated && this.target?.status) { globalScene.queueMessage(getStatusEffectHealText(this.target.status?.effect, getPokemonNameWithAffix(this.target))); this.target.resetStatus(false); this.target.updateInfo(); @@ -3952,7 +4242,7 @@ export class PostTurnLootAbAttr extends PostTurnAbAttr { return true; } - const randomIdx = Utils.randSeedInt(berriesEaten.length); + const randomIdx = randSeedInt(berriesEaten.length); const chosenBerryType = berriesEaten[randomIdx]; const chosenBerry = new BerryModifierType(chosenBerryType); berriesEaten.splice(randomIdx); // Remove berry from memory @@ -4040,7 +4330,7 @@ export class PostTurnHealAbAttr extends PostTurnAbAttr { if (!simulated) { const abilityName = (!passive ? pokemon.getAbility() : pokemon.getPassiveAbility()).name; globalScene.unshiftPhase(new PokemonHealPhase(pokemon.getBattlerIndex(), - Utils.toDmgValue(pokemon.getMaxHp() / 16), i18next.t("abilityTriggers:postTurnHeal", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), abilityName }), true)); + toDmgValue(pokemon.getMaxHp() / 16), i18next.t("abilityTriggers:postTurnHeal", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), abilityName }), true)); } } } @@ -4084,7 +4374,7 @@ export class PostTurnHurtIfSleepingAbAttr extends PostTurnAbAttr { for (const opp of pokemon.getOpponents()) { if ((opp.status?.effect === StatusEffect.SLEEP || opp.hasAbility(Abilities.COMATOSE)) && !opp.hasAbilityWithAttr(BlockNonDirectDamageAbAttr) && !opp.switchOutStatus) { if (!simulated) { - opp.damageAndUpdate(Utils.toDmgValue(opp.getMaxHp() / 8), { result: HitResult.INDIRECT }); + opp.damageAndUpdate(toDmgValue(opp.getMaxHp() / 8), { result: HitResult.INDIRECT }); globalScene.queueMessage(i18next.t("abilityTriggers:badDreams", { pokemonName: getPokemonNameWithAffix(opp) })); } } @@ -4103,7 +4393,7 @@ export class FetchBallAbAttr extends PostTurnAbAttr { } override canApplyPostTurn(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean { - return !simulated && !Utils.isNullOrUndefined(globalScene.currentBattle.lastUsedPokeball) && !!pokemon.isPlayer; + return !simulated && !isNullOrUndefined(globalScene.currentBattle.lastUsedPokeball) && !!pokemon.isPlayer; } /** @@ -4135,9 +4425,9 @@ export class PostBiomeChangeWeatherChangeAbAttr extends PostBiomeChangeAbAttr { return ((globalScene.arena.weather?.isImmutable() ?? false) && globalScene.arena.canSetWeather(this.weatherType)); } - override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: Utils.BooleanHolder, args: any[]): void { + override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: BooleanHolder, args: any[]): void { if (!simulated) { - globalScene.arena.trySetWeather(this.weatherType, true); + globalScene.arena.trySetWeather(this.weatherType, pokemon); } } } @@ -4155,9 +4445,9 @@ export class PostBiomeChangeTerrainChangeAbAttr extends PostBiomeChangeAbAttr { return globalScene.arena.canSetTerrain(this.terrainType); } - override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: Utils.BooleanHolder, args: any[]): void { + override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: BooleanHolder, args: any[]): void { if (!simulated) { - globalScene.arena.trySetTerrain(this.terrainType, true); + globalScene.arena.trySetTerrain(this.terrainType, false, pokemon); } } } @@ -4290,8 +4580,8 @@ export class StatStageChangeMultiplierAbAttr extends AbAttr { this.multiplier = multiplier; } - override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: Utils.BooleanHolder, args: any[]): void { - (args[0] as Utils.NumberHolder).value *= this.multiplier; + override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: BooleanHolder, args: any[]): void { + (args[0] as NumberHolder).value *= this.multiplier; } } @@ -4300,7 +4590,7 @@ export class StatStageChangeCopyAbAttr extends AbAttr { pokemon: Pokemon, passive: boolean, simulated: boolean, - cancelled: Utils.BooleanHolder, + cancelled: BooleanHolder, args: any[], ): void { if (!simulated) { @@ -4314,7 +4604,7 @@ export class BypassBurnDamageReductionAbAttr extends AbAttr { super(false); } - override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: Utils.BooleanHolder, args: any[]): void { + override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: BooleanHolder, args: any[]): void { cancelled.value = true; } } @@ -4333,21 +4623,21 @@ export class ReduceBurnDamageAbAttr extends AbAttr { * @param pokemon N/A * @param passive N/A * @param cancelled N/A - * @param args `[0]` {@linkcode Utils.NumberHolder} The damage value being modified + * @param args `[0]` {@linkcode NumberHolder} The damage value being modified */ - override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: Utils.BooleanHolder, args: any[]): void { - (args[0] as Utils.NumberHolder).value = Utils.toDmgValue((args[0] as Utils.NumberHolder).value * this.multiplier); + override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: BooleanHolder, args: any[]): void { + (args[0] as NumberHolder).value = toDmgValue((args[0] as NumberHolder).value * this.multiplier); } } export class DoubleBerryEffectAbAttr extends AbAttr { - override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: Utils.BooleanHolder, args: any[]): void { - (args[0] as Utils.NumberHolder).value *= 2; + override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: BooleanHolder, args: any[]): void { + (args[0] as NumberHolder).value *= 2; } } export class PreventBerryUseAbAttr extends AbAttr { - override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: Utils.BooleanHolder, args: any[]): void { + override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: BooleanHolder, args: any[]): void { cancelled.value = true; } } @@ -4368,13 +4658,13 @@ export class HealFromBerryUseAbAttr extends AbAttr { this.healPercent = Math.max(Math.min(healPercent, 1), 0); } - override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, ...args: [Utils.BooleanHolder, any[]]): void { + override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, ...args: [BooleanHolder, any[]]): void { const { name: abilityName } = passive ? pokemon.getPassiveAbility() : pokemon.getAbility(); if (!simulated) { globalScene.unshiftPhase( new PokemonHealPhase( pokemon.getBattlerIndex(), - Utils.toDmgValue(pokemon.getMaxHp() * this.healPercent), + toDmgValue(pokemon.getMaxHp() * this.healPercent), i18next.t("abilityTriggers:healFromBerryUse", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), abilityName }), true ) @@ -4384,8 +4674,8 @@ export class HealFromBerryUseAbAttr extends AbAttr { } export class RunSuccessAbAttr extends AbAttr { - override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: Utils.BooleanHolder, args: any[]): void { - (args[0] as Utils.NumberHolder).value = 256; + override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: BooleanHolder, args: any[]): void { + (args[0] as NumberHolder).value = 256; } } @@ -4409,7 +4699,7 @@ export class CheckTrappedAbAttr extends AbAttr { pokemon: Pokemon, passive: boolean, simulated: boolean, - trapped: Utils.BooleanHolder, + trapped: BooleanHolder, otherPokemon: Pokemon, args: any[]): boolean { return true; @@ -4419,7 +4709,7 @@ export class CheckTrappedAbAttr extends AbAttr { pokemon: Pokemon, passive: boolean, simulated: boolean, - trapped: Utils.BooleanHolder, + trapped: BooleanHolder, otherPokemon: Pokemon, args: any[], ): void {} @@ -4432,7 +4722,7 @@ export class CheckTrappedAbAttr extends AbAttr { * @see {@linkcode applyCheckTrapped} */ export class ArenaTrapAbAttr extends CheckTrappedAbAttr { - override canApplyCheckTrapped(pokemon: Pokemon, passive: boolean, simulated: boolean, trapped: Utils.BooleanHolder, otherPokemon: Pokemon, args: any[]): boolean { + override canApplyCheckTrapped(pokemon: Pokemon, passive: boolean, simulated: boolean, trapped: BooleanHolder, otherPokemon: Pokemon, args: any[]): boolean { return this.arenaTrapCondition(pokemon, otherPokemon) && !(otherPokemon.getTypes(true).includes(PokemonType.GHOST) || (otherPokemon.getTypes(true).includes(PokemonType.STELLAR) && otherPokemon.getTypes().includes(PokemonType.GHOST))) && !otherPokemon.hasAbility(Abilities.RUN_AWAY); @@ -4446,11 +4736,11 @@ export class ArenaTrapAbAttr extends CheckTrappedAbAttr { * If the user has Arena Trap and the enemy is not grounded, it is not trapped. * @param pokemon The {@link Pokemon} with this {@link AbAttr} * @param passive N/A - * @param trapped {@link Utils.BooleanHolder} indicating whether the other Pokemon is trapped or not + * @param trapped {@link BooleanHolder} indicating whether the other Pokemon is trapped or not * @param otherPokemon The {@link Pokemon} that is affected by an Arena Trap ability * @param args N/A */ - override applyCheckTrapped(pokemon: Pokemon, passive: boolean, simulated: boolean, trapped: Utils.BooleanHolder, otherPokemon: Pokemon, args: any[]): void { + override applyCheckTrapped(pokemon: Pokemon, passive: boolean, simulated: boolean, trapped: BooleanHolder, otherPokemon: Pokemon, args: any[]): void { trapped.value = true; } @@ -4464,14 +4754,14 @@ export class MaxMultiHitAbAttr extends AbAttr { super(false); } - override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: Utils.BooleanHolder, args: any[]): void { - (args[0] as Utils.NumberHolder).value = 0; + override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: BooleanHolder, args: any[]): void { + (args[0] as NumberHolder).value = 0; } } export class PostBattleAbAttr extends AbAttr { - constructor() { - super(true); + constructor(showAbility: boolean = true) { + super(showAbility); } canApplyPostBattle(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean { @@ -4487,7 +4777,7 @@ export class PostBattleLootAbAttr extends PostBattleAbAttr { override canApplyPostBattle(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean { const postBattleLoot = globalScene.currentBattle.postBattleLoot; if (!simulated && postBattleLoot.length && args[0]) { - this.randItem = Utils.randSeedItem(postBattleLoot); + this.randItem = randSeedItem(postBattleLoot); return globalScene.canTransferHeldItemModifier(this.randItem, pokemon, 1); } return false; @@ -4499,7 +4789,7 @@ export class PostBattleLootAbAttr extends PostBattleAbAttr { override applyPostBattle(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): void { const postBattleLoot = globalScene.currentBattle.postBattleLoot; if (!this.randItem) { - this.randItem = Utils.randSeedItem(postBattleLoot); + this.randItem = randSeedItem(postBattleLoot); } if (globalScene.tryTransferHeldItemModifier(this.randItem, pokemon, true, 1, true, undefined, false)) { @@ -4555,8 +4845,8 @@ export class PostFaintContactDamageAbAttr extends PostFaintAbAttr { } override canApplyPostFaint(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker?: Pokemon, move?: Move, hitResult?: HitResult, ...args: any[]): boolean { - const diedToDirectDamage = move !== undefined && attacker !== undefined && move.checkFlag(MoveFlags.MAKES_CONTACT, attacker, pokemon); - const cancelled = new Utils.BooleanHolder(false); + const diedToDirectDamage = move !== undefined && attacker !== undefined && move.doesFlagEffectApply({flag: MoveFlags.MAKES_CONTACT, user: attacker, target: pokemon}); + const cancelled = new BooleanHolder(false); globalScene.getField(true).map(p => applyAbAttrs(FieldPreventExplosiveMovesAbAttr, p, cancelled, simulated)); if (!diedToDirectDamage || cancelled.value || attacker!.hasAbilityWithAttr(BlockNonDirectDamageAbAttr)) { return false; @@ -4567,8 +4857,8 @@ export class PostFaintContactDamageAbAttr extends PostFaintAbAttr { override applyPostFaint(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker?: Pokemon, move?: Move, hitResult?: HitResult, ...args: any[]): void { if (!simulated) { - attacker!.damageAndUpdate(Utils.toDmgValue(attacker!.getMaxHp() * (1 / this.damageRatio)), { result: HitResult.INDIRECT }); - attacker!.turnData.damageTaken += Utils.toDmgValue(attacker!.getMaxHp() * (1 / this.damageRatio)); + attacker!.damageAndUpdate(toDmgValue(attacker!.getMaxHp() * (1 / this.damageRatio)), { result: HitResult.INDIRECT }); + attacker!.turnData.damageTaken += toDmgValue(attacker!.getMaxHp() * (1 / this.damageRatio)); } } @@ -4614,13 +4904,13 @@ export class RedirectMoveAbAttr extends AbAttr { if (!this.canRedirect(args[0] as Moves, args[2] as Pokemon)) { return false; } - const target = args[1] as Utils.NumberHolder; + const target = args[1] as NumberHolder; const newTarget = pokemon.getBattlerIndex(); return target.value !== newTarget; } - override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: Utils.BooleanHolder, args: any[]): void { - const target = args[1] as Utils.NumberHolder; + override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: BooleanHolder, args: any[]): void { + const target = args[1] as NumberHolder; const newTarget = pokemon.getBattlerIndex(); target.value = newTarget; } @@ -4661,7 +4951,7 @@ export class ReduceStatusEffectDurationAbAttr extends AbAttr { } override canApply(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean { - return args[1] instanceof Utils.NumberHolder && args[0] === this.statusEffect; + return args[1] instanceof NumberHolder && args[0] === this.statusEffect; } /** @@ -4670,7 +4960,7 @@ export class ReduceStatusEffectDurationAbAttr extends AbAttr { * - `[0]` - The {@linkcode StatusEffect} of the Pokemon * - `[1]` - The number of turns remaining until the status is healed */ - override apply(_pokemon: Pokemon, _passive: boolean, _simulated: boolean, _cancelled: Utils.BooleanHolder, args: any[]): void { + override apply(_pokemon: Pokemon, _passive: boolean, _simulated: boolean, _cancelled: BooleanHolder, args: any[]): void { args[1].value -= 1; } } @@ -4694,7 +4984,7 @@ export class FlinchStatStageChangeAbAttr extends FlinchEffectAbAttr { this.stages = stages; } - override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: Utils.BooleanHolder, args: any[]): void { + override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: BooleanHolder, args: any[]): void { if (!simulated) { globalScene.unshiftPhase(new StatStageChangePhase(pokemon.getBattlerIndex(), true, this.stats, this.stages)); } @@ -4704,14 +4994,14 @@ export class FlinchStatStageChangeAbAttr extends FlinchEffectAbAttr { export class IncreasePpAbAttr extends AbAttr { } export class ForceSwitchOutImmunityAbAttr extends AbAttr { - override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: Utils.BooleanHolder, args: any[]): void { + override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: BooleanHolder, args: any[]): void { cancelled.value = true; } } export class ReduceBerryUseThresholdAbAttr extends AbAttr { constructor() { - super(); + super(false); } override canApply(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean { @@ -4719,7 +5009,7 @@ export class ReduceBerryUseThresholdAbAttr extends AbAttr { return args[0].value < hpRatio; } - override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: Utils.BooleanHolder, args: any[]): void { + override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: BooleanHolder, args: any[]): void { args[0].value *= 2; } } @@ -4737,8 +5027,8 @@ export class WeightMultiplierAbAttr extends AbAttr { this.multiplier = multiplier; } - override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: Utils.BooleanHolder, args: any[]): void { - (args[0] as Utils.NumberHolder).value *= this.multiplier; + override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: BooleanHolder, args: any[]): void { + (args[0] as NumberHolder).value *= this.multiplier; } } @@ -4747,7 +5037,7 @@ export class SyncEncounterNatureAbAttr extends AbAttr { super(false); } - override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: Utils.BooleanHolder, args: any[]): void { + override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: BooleanHolder, args: any[]): void { (args[0] as Pokemon).setNature(pokemon.getNature()); } } @@ -4765,7 +5055,7 @@ export class MoveAbilityBypassAbAttr extends AbAttr { return this.moveIgnoreFunc(pokemon, (args[0] as Move)); } - override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: Utils.BooleanHolder, args: any[]): void { + override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: BooleanHolder, args: any[]): void { cancelled.value = true; } } @@ -4785,7 +5075,7 @@ export class InfiltratorAbAttr extends AbAttr { } override canApply(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean { - return args[0] instanceof Utils.BooleanHolder; + return args[0] instanceof BooleanHolder; } /** @@ -4794,7 +5084,7 @@ export class InfiltratorAbAttr extends AbAttr { * @param passive n/a * @param simulated n/a * @param cancelled n/a - * @param args `[0]` a {@linkcode Utils.BooleanHolder | BooleanHolder} containing the flag + * @param args `[0]` a {@linkcode BooleanHolder | BooleanHolder} containing the flag */ override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: null, args: any[]): void { const bypassed = args[0]; @@ -4809,24 +5099,6 @@ export class InfiltratorAbAttr extends AbAttr { */ export class ReflectStatusMoveAbAttr extends AbAttr { } -export class UncopiableAbilityAbAttr extends AbAttr { - constructor() { - super(false); - } -} - -export class UnsuppressableAbilityAbAttr extends AbAttr { - constructor() { - super(false); - } -} - -export class UnswappableAbilityAbAttr extends AbAttr { - constructor() { - super(false); - } -} - export class NoTransformAbilityAbAttr extends AbAttr { constructor() { super(false); @@ -4853,7 +5125,7 @@ export class IgnoreTypeImmunityAbAttr extends AbAttr { return this.defenderType === (args[1] as PokemonType) && this.allowedMoveTypes.includes(args[0] as PokemonType); } - override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: Utils.BooleanHolder, args: any[]): void { + override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: BooleanHolder, args: any[]): void { cancelled.value = true; } } @@ -4876,7 +5148,7 @@ export class IgnoreTypeStatusEffectImmunityAbAttr extends AbAttr { return this.statusEffect.includes(args[0] as StatusEffect) && this.defenderType.includes(args[1] as PokemonType); } - override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: Utils.BooleanHolder, args: any[]): void { + override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: BooleanHolder, args: any[]): void { cancelled.value = true; } } @@ -4969,7 +5241,7 @@ export class FormBlockDamageAbAttr extends ReceivedMoveDamageMultiplierAbAttr { this.triggerMessageFunc = triggerMessageFunc; } - override canApplyPreDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, cancelled: Utils.BooleanHolder | null, args: any[]): boolean { + override canApplyPreDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, cancelled: BooleanHolder | null, args: any[]): boolean { return this.condition(pokemon, attacker, move) && !move.hitsSubstitute(attacker, pokemon); } @@ -4984,9 +5256,9 @@ export class FormBlockDamageAbAttr extends ReceivedMoveDamageMultiplierAbAttr { * @param _cancelled n/a * @param args Additional arguments. */ - override applyPreDefend(pokemon: Pokemon, _passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, _cancelled: Utils.BooleanHolder, args: any[]): void { + override applyPreDefend(pokemon: Pokemon, _passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, _cancelled: BooleanHolder, args: any[]): void { if (!simulated) { - (args[0] as Utils.NumberHolder).value = this.multiplier; + (args[0] as NumberHolder).value = this.multiplier; pokemon.removeTag(this.tagType); if (this.recoilDamageFunc) { pokemon.damageAndUpdate(this.recoilDamageFunc(pokemon), { result: HitResult.INDIRECT, ignoreSegments: true, ignoreFaintPhase: true }); @@ -5006,6 +5278,92 @@ export class FormBlockDamageAbAttr extends ReceivedMoveDamageMultiplierAbAttr { } } +/** + * Base class for defining {@linkcode Ability} attributes before summon + * (should use {@linkcode PostSummonAbAttr} for most ability) + * @see {@linkcode applyPreSummon()} + */ +export class PreSummonAbAttr extends AbAttr { + applyPreSummon(pokemon: Pokemon, passive: boolean, args: any[]): void {} + + canApplyPreSummon(pokemon: Pokemon, passive: boolean, args: any[]): boolean { + return true; + } +} + +export class IllusionPreSummonAbAttr extends PreSummonAbAttr { + /** + * Apply a new illusion when summoning Zoroark if the illusion is available + * + * @param pokemon - The Pokémon with the Illusion ability. + * @param passive - N/A + * @param args - N/A + * @returns Whether the illusion was applied. + */ + override applyPreSummon(pokemon: Pokemon, passive: boolean, args: any[]): void { + const party: Pokemon[] = (pokemon.isPlayer() ? globalScene.getPlayerParty() : globalScene.getEnemyParty()).filter(p => p.isAllowedInBattle()); + const lastPokemon: Pokemon = party.filter(p => p !==pokemon).at(-1) || pokemon; + pokemon.setIllusion(lastPokemon); + } + + override canApplyPreSummon(pokemon: Pokemon, passive: boolean, args: any[]): boolean { + pokemon.initSummondata() + if(pokemon.hasTrainer()){ + const party: Pokemon[] = (pokemon.isPlayer() ? globalScene.getPlayerParty() : globalScene.getEnemyParty()).filter(p => p.isAllowedInBattle()); + const lastPokemon: Pokemon = party.filter(p => p !==pokemon).at(-1) || pokemon; + const speciesId = lastPokemon.species.speciesId; + + // If the last conscious Pokémon in the party is a Terastallized Ogerpon or Terapagos, Illusion will not activate. + // Illusion will also not activate if the Pokémon with Illusion is Terastallized and the last Pokémon in the party is Ogerpon or Terapagos. + if ( + lastPokemon === pokemon || + ((speciesId === Species.OGERPON || speciesId === Species.TERAPAGOS) && (lastPokemon.isTerastallized || pokemon.isTerastallized)) + ) { + return false; + } + } + return !pokemon.summonData.illusionBroken; + } +} + +export class IllusionBreakAbAttr extends PostDefendAbAttr { + /** + * Destroy the illusion upon taking damage + * + * @param pokemon - The Pokémon with the Illusion ability. + * @param passive - unused + * @param attacker - The attacking Pokémon. + * @param move - The move being used. + * @param hitResult - The type of hitResult the pokemon got + * @param args - unused + * @returns - Whether the illusion was destroyed. + */ + override applyPostDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, hitResult: HitResult, args: any[]): void { + pokemon.breakIllusion(); + pokemon.summonData.illusionBroken = true; + } + + override canApplyPostDefend(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, hitResult: HitResult, args: any[]): boolean { + const breakIllusion: HitResult[] = [ HitResult.EFFECTIVE, HitResult.SUPER_EFFECTIVE, HitResult.NOT_VERY_EFFECTIVE, HitResult.ONE_HIT_KO ]; + return breakIllusion.includes(hitResult) && !!pokemon.summonData?.illusion + } +} + +export class IllusionPostBattleAbAttr extends PostBattleAbAttr { + /** + * Break the illusion once the battle ends + * + * @param pokemon - The Pokémon with the Illusion ability. + * @param passive - Unused + * @param args - Unused + * @returns - Whether the illusion was applied. + */ + override applyPostBattle(pokemon: Pokemon, passive: boolean, simulated:boolean, args: any[]): void { + pokemon.breakIllusion() + } +} + + /** * If a Pokémon with this Ability selects a damaging move, it has a 30% chance of going first in its priority bracket. If the Ability activates, this is announced at the start of the turn (after move selection). * @@ -5023,7 +5381,7 @@ export class BypassSpeedChanceAbAttr extends AbAttr { } override canApply(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean { - const bypassSpeed = args[0] as Utils.BooleanHolder; + const bypassSpeed = args[0] as BooleanHolder; const turnCommand = globalScene.currentBattle.turnCommands[pokemon.getBattlerIndex()]; const isCommandFight = turnCommand?.command === Command.FIGHT; const move = turnCommand?.move?.move ? allMoves[turnCommand.move.move] : null; @@ -5035,11 +5393,11 @@ export class BypassSpeedChanceAbAttr extends AbAttr { * bypass move order in their priority bracket when pokemon choose damaging move * @param {Pokemon} pokemon {@linkcode Pokemon} the Pokemon applying this ability * @param {boolean} passive N/A - * @param {Utils.BooleanHolder} cancelled N/A - * @param {any[]} args [0] {@linkcode Utils.BooleanHolder} set to true when the ability activated + * @param {BooleanHolder} cancelled N/A + * @param {any[]} args [0] {@linkcode BooleanHolder} set to true when the ability activated */ - override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: Utils.BooleanHolder, args: any[]): void { - const bypassSpeed = args[0] as Utils.BooleanHolder; + override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: BooleanHolder, args: any[]): void { + const bypassSpeed = args[0] as BooleanHolder; bypassSpeed.value = true; } @@ -5074,9 +5432,9 @@ export class PreventBypassSpeedChanceAbAttr extends AbAttr { * @argument {boolean} bypassSpeed - determines if a Pokemon is able to bypass speed at the moment * @argument {boolean} canCheckHeldItems - determines if a Pokemon has access to Quick Claw's effects or not */ - override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: Utils.BooleanHolder, args: any[]): void { - const bypassSpeed = args[0] as Utils.BooleanHolder; - const canCheckHeldItems = args[1] as Utils.BooleanHolder; + override apply(pokemon: Pokemon, passive: boolean, simulated: boolean, cancelled: BooleanHolder, args: any[]): void { + const bypassSpeed = args[0] as BooleanHolder; + const canCheckHeldItems = args[1] as BooleanHolder; bypassSpeed.value = false; canCheckHeldItems.value = false; } @@ -5095,7 +5453,7 @@ export class TerrainEventTypeChangeAbAttr extends PostSummonAbAttr { return !pokemon.isTerastallized; } - override apply(pokemon: Pokemon, _passive: boolean, _simulated: boolean, _cancelled: Utils.BooleanHolder, _args: any[]): void { + override apply(pokemon: Pokemon, _passive: boolean, _simulated: boolean, _cancelled: BooleanHolder, _args: any[]): void { const currentTerrain = globalScene.arena.getTerrainType(); const typeChange: PokemonType[] = this.determineTypeChange(pokemon, currentTerrain); if (typeChange.length !== 0) { @@ -5146,7 +5504,7 @@ export class TerrainEventTypeChangeAbAttr extends PostSummonAbAttr { * Checks if the Pokemon should change types if summoned into an active terrain */ override applyPostSummon(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): void { - this.apply(pokemon, passive, simulated, new Utils.BooleanHolder(false), []); + this.apply(pokemon, passive, simulated, new BooleanHolder(false), []); } override getTriggerMessage(pokemon: Pokemon, abilityName: string, ...args: any[]) { @@ -5264,6 +5622,8 @@ class ForceSwitchOutHelper { * It will not flee if it is a Mystery Encounter with fleeing disabled (checked in `getSwitchOutCondition()`) or if it is a wave 10x wild boss */ } else { + const allyPokemon = switchOutTarget.getAlly(); + if (!globalScene.currentBattle.waveIndex || globalScene.currentBattle.waveIndex % 10 === 0) { return false; } @@ -5271,14 +5631,12 @@ class ForceSwitchOutHelper { if (switchOutTarget.hp > 0) { switchOutTarget.leaveField(false); globalScene.queueMessage(i18next.t("moveTriggers:fled", { pokemonName: getPokemonNameWithAffix(switchOutTarget) }), null, true, 500); - - if (globalScene.currentBattle.double) { - const allyPokemon = switchOutTarget.getAlly(); + if (globalScene.currentBattle.double && !isNullOrUndefined(allyPokemon)) { globalScene.redirectPokemonMoves(switchOutTarget, allyPokemon); } } - if (!switchOutTarget.getAlly()?.isActive(true)) { + if (!allyPokemon?.isActive(true)) { globalScene.clearEnemyHeldItemModifiers(); if (switchOutTarget.hp) { @@ -5302,7 +5660,7 @@ class ForceSwitchOutHelper { const player = switchOutTarget instanceof PlayerPokemon; if (player) { - const blockedByAbility = new Utils.BooleanHolder(false); + const blockedByAbility = new BooleanHolder(false); applyAbAttrs(ForceSwitchOutImmunityAbAttr, opponent, blockedByAbility); return !blockedByAbility.value; } @@ -5330,7 +5688,7 @@ class ForceSwitchOutHelper { * @returns The failure message, or `null` if no failure. */ public getFailedText(target: Pokemon): string | null { - const blockedByAbility = new Utils.BooleanHolder(false); + const blockedByAbility = new BooleanHolder(false); applyAbAttrs(ForceSwitchOutImmunityAbAttr, target, blockedByAbility); return blockedByAbility.value ? i18next.t("moveTriggers:cannotBeSwitchedOut", { pokemonName: getPokemonNameWithAffix(target) }) : null; } @@ -5349,7 +5707,7 @@ class ForceSwitchOutHelper { function calculateShellBellRecovery(pokemon: Pokemon): number { const shellBellModifier = pokemon.getHeldItems().find(m => m instanceof HitHealModifier); if (shellBellModifier) { - return Utils.toDmgValue(pokemon.turnData.totalDamageDealt / 8) * shellBellModifier.stackCount; + return toDmgValue(pokemon.turnData.totalDamageDealt / 8) * shellBellModifier.stackCount; } return 0; } @@ -5489,7 +5847,7 @@ function applyAbAttrsInternal( export function applyAbAttrs( attrType: Constructor, pokemon: Pokemon, - cancelled: Utils.BooleanHolder | null, + cancelled: BooleanHolder | null, simulated = false, ...args: any[] ): void { @@ -5524,7 +5882,7 @@ export function applyPreDefendAbAttrs( pokemon: Pokemon, attacker: Pokemon, move: Move | null, - cancelled: Utils.BooleanHolder | null, + cancelled: BooleanHolder | null, simulated = false, ...args: any[] ): void { @@ -5579,7 +5937,7 @@ export function applyStatMultiplierAbAttrs( attrType: Constructor, pokemon: Pokemon, stat: BattleStat, - statValue: Utils.NumberHolder, + statValue: NumberHolder, simulated = false, ...args: any[] ): void { @@ -5591,6 +5949,30 @@ export function applyStatMultiplierAbAttrs( args, ); } + +/** + * Applies an ally's Stat multiplier attribute + * @param attrType - {@linkcode AllyStatMultiplierAbAttr} should always be AllyStatMultiplierAbAttr for the time being + * @param pokemon - The {@linkcode Pokemon} with the ability + * @param stat - The type of the checked {@linkcode Stat} + * @param statValue - {@linkcode NumberHolder} containing the value of the checked stat + * @param checkedPokemon - The {@linkcode Pokemon} with the checked stat + * @param ignoreAbility - Whether or not the ability should be ignored by the pokemon or its move. + * @param args - unused + */ +export function applyAllyStatMultiplierAbAttrs(attrType: Constructor, + pokemon: Pokemon, stat: BattleStat, statValue: NumberHolder, simulated: boolean = false, checkedPokemon: Pokemon, ignoreAbility: boolean, ...args: any[] +): void { + return applyAbAttrsInternal( + attrType, + pokemon, + (attr, passive) => attr.applyAllyStat(pokemon, passive, simulated, stat, statValue, checkedPokemon, ignoreAbility, args), + (attr, passive) => attr.canApplyAllyStat(pokemon, passive, simulated, stat, statValue, checkedPokemon, ignoreAbility, args), + args, + simulated, + ); +} + export function applyPostSetStatusAbAttrs( attrType: Constructor, pokemon: Pokemon, @@ -5603,7 +5985,8 @@ export function applyPostSetStatusAbAttrs( attrType, pokemon, (attr, passive) => attr.applyPostSetStatus(pokemon, sourcePokemon, passive, effect, simulated, args), - (attr, passive) => attr.canApplyPostSetStatus(pokemon, sourcePokemon, passive, effect, simulated, args), args, + (attr, passive) => attr.canApplyPostSetStatus(pokemon, sourcePokemon, passive, effect, simulated, args), + args, simulated, ); } @@ -5631,18 +6014,18 @@ export function applyPostDamageAbAttrs( * @param attrType {@linkcode FieldMultiplyStatAbAttr} should always be FieldMultiplyBattleStatAbAttr for the time being * @param pokemon {@linkcode Pokemon} the Pokemon applying this ability * @param stat {@linkcode Stat} the type of the checked stat - * @param statValue {@linkcode Utils.NumberHolder} the value of the checked stat + * @param statValue {@linkcode NumberHolder} the value of the checked stat * @param checkedPokemon {@linkcode Pokemon} the Pokemon with the checked stat - * @param hasApplied {@linkcode Utils.BooleanHolder} whether or not a FieldMultiplyBattleStatAbAttr has already affected this stat + * @param hasApplied {@linkcode BooleanHolder} whether or not a FieldMultiplyBattleStatAbAttr has already affected this stat * @param args unused */ export function applyFieldStatMultiplierAbAttrs( attrType: Constructor, pokemon: Pokemon, stat: Stat, - statValue: Utils.NumberHolder, + statValue: NumberHolder, checkedPokemon: Pokemon, - hasApplied: Utils.BooleanHolder, + hasApplied: BooleanHolder, simulated = false, ...args: any[] ): void { @@ -5739,6 +6122,20 @@ export function applyPostSummonAbAttrs( ); } +export function applyPreSummonAbAttrs( + attrType: Constructor, + pokemon: Pokemon, + ...args: any[] +): void { + applyAbAttrsInternal( + attrType, + pokemon, + (attr, passive) => attr.applyPreSummon(pokemon, passive, args), + (attr, passive) => attr.canApplyPreSummon(pokemon, passive, args), + args + ); +} + export function applyPreSwitchOutAbAttrs( attrType: Constructor, pokemon: Pokemon, @@ -5772,19 +6169,20 @@ export function applyPreLeaveFieldAbAttrs( ); } -export function applyPreStatStageChangeAbAttrs( - attrType: Constructor, +export function applyPreStatStageChangeAbAttrs ( + attrType: Constructor, pokemon: Pokemon | null, stat: BattleStat, - cancelled: Utils.BooleanHolder, + cancelled: BooleanHolder, simulated = false, ...args: any[] ): void { - applyAbAttrsInternal( + applyAbAttrsInternal( attrType, pokemon, (attr, passive) => attr.applyPreStatStageChange(pokemon, passive, simulated, stat, cancelled, args), - (attr, passive) => attr.canApplyPreStatStageChange(pokemon, passive, simulated, stat, cancelled, args), args, + (attr, passive) => attr.canApplyPreStatStageChange(pokemon, passive, simulated, stat, cancelled, args), + args, simulated, ); } @@ -5811,7 +6209,7 @@ export function applyPreSetStatusAbAttrs( attrType: Constructor, pokemon: Pokemon, effect: StatusEffect | undefined, - cancelled: Utils.BooleanHolder, + cancelled: BooleanHolder, simulated = false, ...args: any[] ): void { @@ -5829,7 +6227,7 @@ export function applyPreApplyBattlerTagAbAttrs( attrType: Constructor, pokemon: Pokemon, tag: BattlerTag, - cancelled: Utils.BooleanHolder, + cancelled: BooleanHolder, simulated = false, ...args: any[] ): void { @@ -5837,7 +6235,8 @@ export function applyPreApplyBattlerTagAbAttrs( attrType, pokemon, (attr, passive) => attr.applyPreApplyBattlerTag(pokemon, passive, simulated, tag, cancelled, args), - (attr, passive) => attr.canApplyPreApplyBattlerTag(pokemon, passive, simulated, tag, cancelled, args), args, + (attr, passive) => attr.canApplyPreApplyBattlerTag(pokemon, passive, simulated, tag, cancelled, args), + args, simulated, ); } @@ -5846,7 +6245,7 @@ export function applyPreWeatherEffectAbAttrs( attrType: Constructor, pokemon: Pokemon, weather: Weather | null, - cancelled: Utils.BooleanHolder, + cancelled: BooleanHolder, simulated = false, ...args: any[] ): void { @@ -5854,7 +6253,8 @@ export function applyPreWeatherEffectAbAttrs( attrType, pokemon, (attr, passive) => attr.applyPreWeatherEffect(pokemon, passive, simulated, weather, cancelled, args), - (attr, passive) => attr.canApplyPreWeatherEffect(pokemon, passive, simulated, weather, cancelled, args), args, + (attr, passive) => attr.canApplyPreWeatherEffect(pokemon, passive, simulated, weather, cancelled, args), + args, simulated, ); } @@ -5929,7 +6329,7 @@ export function applyPostTerrainChangeAbAttrs( export function applyCheckTrappedAbAttrs( attrType: Constructor, pokemon: Pokemon, - trapped: Utils.BooleanHolder, + trapped: BooleanHolder, otherPokemon: Pokemon, messages: string[], simulated = false, @@ -6076,6 +6476,7 @@ export function initAbilities() { .ignorable(), new Ability(Abilities.LIMBER, 3) .attr(StatusEffectImmunityAbAttr, StatusEffect.PARALYSIS) + .attr(PostSummonHealStatusAbAttr, StatusEffect.PARALYSIS) .ignorable(), new Ability(Abilities.SAND_VEIL, 3) .attr(StatMultiplierAbAttr, Stat.EVA, 1.2) @@ -6093,6 +6494,7 @@ export function initAbilities() { .ignorable(), new Ability(Abilities.OBLIVIOUS, 3) .attr(BattlerTagImmunityAbAttr, [ BattlerTagType.INFATUATED, BattlerTagType.TAUNT ]) + .attr(PostSummonRemoveBattlerTagAbAttr, BattlerTagType.INFATUATED, BattlerTagType.TAUNT) .attr(IntimidateImmunityAbAttr) .ignorable(), new Ability(Abilities.CLOUD_NINE, 3) @@ -6105,6 +6507,7 @@ export function initAbilities() { .attr(StatMultiplierAbAttr, Stat.ACC, 1.3), new Ability(Abilities.INSOMNIA, 3) .attr(StatusEffectImmunityAbAttr, StatusEffect.SLEEP) + .attr(PostSummonHealStatusAbAttr, StatusEffect.SLEEP) .attr(BattlerTagImmunityAbAttr, BattlerTagType.DROWSY) .ignorable(), new Ability(Abilities.COLOR_CHANGE, 3) @@ -6112,6 +6515,7 @@ export function initAbilities() { .condition(getSheerForceHitDisableAbCondition()), new Ability(Abilities.IMMUNITY, 3) .attr(StatusEffectImmunityAbAttr, StatusEffect.POISON, StatusEffect.TOXIC) + .attr(PostSummonHealStatusAbAttr, StatusEffect.POISON, StatusEffect.TOXIC) .ignorable(), new Ability(Abilities.FLASH_FIRE, 3) .attr(TypeImmunityAddBattlerTagAbAttr, PokemonType.FIRE, BattlerTagType.FIRE_BOOST, 1) @@ -6121,6 +6525,7 @@ export function initAbilities() { .ignorable(), new Ability(Abilities.OWN_TEMPO, 3) .attr(BattlerTagImmunityAbAttr, BattlerTagType.CONFUSED) + .attr(PostSummonRemoveBattlerTagAbAttr, BattlerTagType.CONFUSED) .attr(IntimidateImmunityAbAttr) .ignorable(), new Ability(Abilities.SUCTION_CUPS, 3) @@ -6140,8 +6545,7 @@ export function initAbilities() { .bypassFaint(), new Ability(Abilities.WONDER_GUARD, 3) .attr(NonSuperEffectiveImmunityAbAttr) - .attr(UncopiableAbilityAbAttr) - .attr(UnswappableAbilityAbAttr) + .uncopiable() .ignorable(), new Ability(Abilities.LEVITATE, 3) .attr(AttackTypeImmunityAbAttr, PokemonType.GROUND, (pokemon: Pokemon) => !pokemon.getTag(GroundedTag) && !globalScene.arena.getTag(ArenaTagType.GRAVITY)) @@ -6175,7 +6579,7 @@ export function initAbilities() { .ignorable(), new Ability(Abilities.TRACE, 3) .attr(PostSummonCopyAbilityAbAttr) - .attr(UncopiableAbilityAbAttr), + .uncopiable(), new Ability(Abilities.HUGE_POWER, 3) .attr(StatMultiplierAbAttr, Stat.ATK, 2), new Ability(Abilities.POISON_POINT, 3) @@ -6187,9 +6591,11 @@ export function initAbilities() { .ignorable(), new Ability(Abilities.MAGMA_ARMOR, 3) .attr(StatusEffectImmunityAbAttr, StatusEffect.FREEZE) + .attr(PostSummonHealStatusAbAttr, StatusEffect.FREEZE) .ignorable(), new Ability(Abilities.WATER_VEIL, 3) .attr(StatusEffectImmunityAbAttr, StatusEffect.BURN) + .attr(PostSummonHealStatusAbAttr, StatusEffect.BURN) .ignorable(), new Ability(Abilities.MAGNET_PULL, 3) .attr(ArenaTrapAbAttr, (user, target) => { @@ -6228,7 +6634,7 @@ export function initAbilities() { .ignorable(), new Ability(Abilities.PICKUP, 3) .attr(PostBattleLootAbAttr) - .attr(UnsuppressableAbilityAbAttr), + .unsuppressable(), new Ability(Abilities.TRUANT, 3) .attr(PostSummonAddBattlerTagAbAttr, BattlerTagType.TRUANT, 1, false), new Ability(Abilities.HUSTLE, 3) @@ -6237,11 +6643,12 @@ export function initAbilities() { new Ability(Abilities.CUTE_CHARM, 3) .attr(PostDefendContactApplyTagChanceAbAttr, 30, BattlerTagType.INFATUATED), new Ability(Abilities.PLUS, 3) - .conditionalAttr(p => globalScene.currentBattle.double && [ Abilities.PLUS, Abilities.MINUS ].some(a => p.getAlly().hasAbility(a)), StatMultiplierAbAttr, Stat.SPATK, 1.5), + .conditionalAttr(p => globalScene.currentBattle.double && [ Abilities.PLUS, Abilities.MINUS ].some(a => (p.getAlly()?.hasAbility(a) ?? false)), StatMultiplierAbAttr, Stat.SPATK, 1.5), new Ability(Abilities.MINUS, 3) - .conditionalAttr(p => globalScene.currentBattle.double && [ Abilities.PLUS, Abilities.MINUS ].some(a => p.getAlly().hasAbility(a)), StatMultiplierAbAttr, Stat.SPATK, 1.5), + .conditionalAttr(p => globalScene.currentBattle.double && [ Abilities.PLUS, Abilities.MINUS ].some(a => (p.getAlly()?.hasAbility(a) ?? false)), StatMultiplierAbAttr, Stat.SPATK, 1.5), new Ability(Abilities.FORECAST, 3) - .attr(UncopiableAbilityAbAttr) + .uncopiable() + .unreplaceable() .attr(NoFusionAbilityAbAttr) .attr(PostSummonFormChangeByWeatherAbAttr, Abilities.FORECAST) .attr(PostWeatherChangeFormChangeAbAttr, Abilities.FORECAST, [ WeatherType.NONE, WeatherType.SANDSTORM, WeatherType.STRONG_WINDS, WeatherType.FOG ]), @@ -6250,7 +6657,7 @@ export function initAbilities() { .bypassFaint() .ignorable(), new Ability(Abilities.SHED_SKIN, 3) - .conditionalAttr(pokemon => !Utils.randSeedInt(3), PostTurnResetStatusAbAttr), + .conditionalAttr(pokemon => !randSeedInt(3), PostTurnResetStatusAbAttr), new Ability(Abilities.GUTS, 3) .attr(BypassBurnDamageReductionAbAttr) .conditionalAttr(pokemon => !!pokemon.status || pokemon.hasAbility(Abilities.COMATOSE), StatMultiplierAbAttr, Stat.ATK, 1.5), @@ -6282,6 +6689,7 @@ export function initAbilities() { .attr(DoubleBattleChanceAbAttr), new Ability(Abilities.VITAL_SPIRIT, 3) .attr(StatusEffectImmunityAbAttr, StatusEffect.SLEEP) + .attr(PostSummonHealStatusAbAttr, StatusEffect.SLEEP) .attr(BattlerTagImmunityAbAttr, BattlerTagType.DROWSY) .ignorable(), new Ability(Abilities.WHITE_SMOKE, 3) @@ -6371,7 +6779,7 @@ export function initAbilities() { .attr(ChangeMovePriorityAbAttr, (pokemon, move: Move) => true, -0.2), new Ability(Abilities.TECHNICIAN, 4) .attr(MovePowerBoostAbAttr, (user, target, move) => { - const power = new Utils.NumberHolder(move.power); + const power = new NumberHolder(move.power); applyMoveAttrs(VariablePowerAttr, user, target, move, power); return power.value <= 60; }, 1.5), @@ -6421,24 +6829,26 @@ export function initAbilities() { .attr(PostBiomeChangeWeatherChangeAbAttr, WeatherType.SNOW), new Ability(Abilities.HONEY_GATHER, 4) .attr(MoneyAbAttr) - .attr(UnsuppressableAbilityAbAttr), + .unsuppressable(), new Ability(Abilities.FRISK, 4) .attr(FriskAbAttr), new Ability(Abilities.RECKLESS, 4) .attr(MovePowerBoostAbAttr, (user, target, move) => move.hasFlag(MoveFlags.RECKLESS_MOVE), 1.2), new Ability(Abilities.MULTITYPE, 4) - .attr(UncopiableAbilityAbAttr) - .attr(UnswappableAbilityAbAttr) - .attr(UnsuppressableAbilityAbAttr) - .attr(NoFusionAbilityAbAttr), + .attr(NoFusionAbilityAbAttr) + .uncopiable() + .unsuppressable() + .unreplaceable(), new Ability(Abilities.FLOWER_GIFT, 4) .conditionalAttr(getWeatherCondition(WeatherType.SUNNY || WeatherType.HARSH_SUN), StatMultiplierAbAttr, Stat.ATK, 1.5) .conditionalAttr(getWeatherCondition(WeatherType.SUNNY || WeatherType.HARSH_SUN), StatMultiplierAbAttr, Stat.SPDEF, 1.5) - .attr(UncopiableAbilityAbAttr) + .conditionalAttr(getWeatherCondition(WeatherType.SUNNY || WeatherType.HARSH_SUN), AllyStatMultiplierAbAttr, Stat.ATK, 1.5) + .conditionalAttr(getWeatherCondition(WeatherType.SUNNY || WeatherType.HARSH_SUN), AllyStatMultiplierAbAttr, Stat.SPDEF, 1.5) .attr(NoFusionAbilityAbAttr) .attr(PostSummonFormChangeByWeatherAbAttr, Abilities.FLOWER_GIFT) .attr(PostWeatherChangeFormChangeAbAttr, Abilities.FLOWER_GIFT, [ WeatherType.NONE, WeatherType.SANDSTORM, WeatherType.STRONG_WINDS, WeatherType.FOG, WeatherType.HAIL, WeatherType.HEAVY_RAIN, WeatherType.SNOW, WeatherType.RAIN ]) - .partial() // Should also boosts stats of ally + .uncopiable() + .unreplaceable() .ignorable(), new Ability(Abilities.BAD_DREAMS, 4) .attr(PostTurnHurtIfSleepingAbAttr), @@ -6463,7 +6873,7 @@ export function initAbilities() { .attr(PostDefendMoveDisableAbAttr, 30) .bypassFaint(), new Ability(Abilities.HEALER, 5) - .conditionalAttr(pokemon => pokemon.getAlly() && Utils.randSeedInt(10) < 3, PostTurnResetStatusAbAttr, true), + .conditionalAttr(pokemon => !isNullOrUndefined(pokemon.getAlly()) && randSeedInt(10) < 3, PostTurnResetStatusAbAttr, true), new Ability(Abilities.FRIEND_GUARD, 5) .attr(AlliedFieldDamageReductionAbAttr, 0.75) .ignorable(), @@ -6517,15 +6927,20 @@ export function initAbilities() { new Ability(Abilities.ANALYTIC, 5) .attr(MovePowerBoostAbAttr, (user, target, move) => { const movePhase = globalScene.findPhase((phase) => phase instanceof MovePhase && phase.pokemon.id !== user?.id); - return Utils.isNullOrUndefined(movePhase); + return isNullOrUndefined(movePhase); }, 1.3), new Ability(Abilities.ILLUSION, 5) - .attr(UncopiableAbilityAbAttr) - .attr(UnswappableAbilityAbAttr) - .unimplemented(), + //The pokemon generate an illusion if it's available + .attr(IllusionPreSummonAbAttr, false) + //The pokemon loses his illusion when he is damaged by a move + .attr(IllusionBreakAbAttr, true) + //Illusion is available again after a battle + .conditionalAttr((pokemon) => pokemon.isAllowedInBattle(), IllusionPostBattleAbAttr, false) + .uncopiable() + .bypassFaint(), new Ability(Abilities.IMPOSTER, 5) .attr(PostSummonTransformAbAttr) - .attr(UncopiableAbilityAbAttr), + .uncopiable(), new Ability(Abilities.INFILTRATOR, 5) .attr(InfiltratorAbAttr) .partial(), // does not bypass Mist @@ -6567,14 +6982,14 @@ export function initAbilities() { .attr(PostBattleInitFormChangeAbAttr, () => 0) .attr(PostSummonFormChangeAbAttr, p => p.getHpRatio() <= 0.5 ? 1 : 0) .attr(PostTurnFormChangeAbAttr, p => p.getHpRatio() <= 0.5 ? 1 : 0) - .attr(UncopiableAbilityAbAttr) - .attr(UnswappableAbilityAbAttr) - .attr(UnsuppressableAbilityAbAttr) .attr(NoFusionAbilityAbAttr) + .uncopiable() + .unreplaceable() + .unsuppressable() .bypassFaint(), new Ability(Abilities.VICTORY_STAR, 5) .attr(StatMultiplierAbAttr, Stat.ACC, 1.1) - .partial(), // Does not boost ally's accuracy + .attr(AllyStatMultiplierAbAttr, Stat.ACC, 1.1, false), new Ability(Abilities.TURBOBLAZE, 5) .attr(PostSummonMessageAbAttr, (pokemon: Pokemon) => i18next.t("abilityTriggers:postSummonTurboblaze", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) })) .attr(MoveAbilityBypassAbAttr), @@ -6585,8 +7000,19 @@ export function initAbilities() { .attr(UserFieldBattlerTagImmunityAbAttr, [ BattlerTagType.INFATUATED, BattlerTagType.TAUNT, BattlerTagType.DISABLED, BattlerTagType.TORMENT, BattlerTagType.HEAL_BLOCK ]) .ignorable(), new Ability(Abilities.FLOWER_VEIL, 6) - .ignorable() - .unimplemented(), + .attr(ConditionalUserFieldStatusEffectImmunityAbAttr, (target: Pokemon, source: Pokemon | null) => { + return source ? target.getTypes().includes(PokemonType.GRASS) && target.id !== source.id : false; + }) + .attr(ConditionalUserFieldBattlerTagImmunityAbAttr, + (target: Pokemon) => { + return target.getTypes().includes(PokemonType.GRASS); + }, + [ BattlerTagType.DROWSY ], + ) + .attr(ConditionalUserFieldProtectStatAbAttr, (target: Pokemon) => { + return target.getTypes().includes(PokemonType.GRASS); + }) + .ignorable(), new Ability(Abilities.CHEEK_POUCH, 6) .attr(HealFromBerryUseAbAttr, 1 / 3), new Ability(Abilities.PROTEAN, 6) @@ -6608,14 +7034,15 @@ export function initAbilities() { .attr(MoveTypeChangeAbAttr, PokemonType.ICE, 1.2, (user, target, move) => move.type === PokemonType.NORMAL && !move.hasAttr(VariableMoveTypeAttr)), new Ability(Abilities.SWEET_VEIL, 6) .attr(UserFieldStatusEffectImmunityAbAttr, StatusEffect.SLEEP) + .attr(PostSummonUserFieldRemoveStatusEffectAbAttr, StatusEffect.SLEEP) .attr(UserFieldBattlerTagImmunityAbAttr, BattlerTagType.DROWSY) .ignorable() .partial(), // Mold Breaker ally should not be affected by Sweet Veil new Ability(Abilities.STANCE_CHANGE, 6) - .attr(UncopiableAbilityAbAttr) - .attr(UnswappableAbilityAbAttr) - .attr(UnsuppressableAbilityAbAttr) - .attr(NoFusionAbilityAbAttr), + .attr(NoFusionAbilityAbAttr) + .uncopiable() + .unreplaceable() + .unsuppressable(), new Ability(Abilities.GALE_WINGS, 6) .attr(ChangeMovePriorityAbAttr, (pokemon, move) => pokemon.isFullHp() && pokemon.getMoveType(move) === PokemonType.FLYING, 1), new Ability(Abilities.MEGA_LAUNCHER, 6) @@ -6680,11 +7107,11 @@ export function initAbilities() { .attr(PostTurnFormChangeAbAttr, p => p.formIndex % 7 + (p.getHpRatio() <= 0.5 ? 7 : 0)) .conditionalAttr(p => p.formIndex !== 7, StatusEffectImmunityAbAttr) .conditionalAttr(p => p.formIndex !== 7, BattlerTagImmunityAbAttr, BattlerTagType.DROWSY) - .attr(UncopiableAbilityAbAttr) - .attr(UnswappableAbilityAbAttr) - .attr(UnsuppressableAbilityAbAttr) .attr(NoFusionAbilityAbAttr) .attr(NoTransformAbilityAbAttr) + .uncopiable() + .unreplaceable() + .unsuppressable() .bypassFaint(), new Ability(Abilities.STAKEOUT, 7) .attr(MovePowerBoostAbAttr, (user, target, move) => !!target?.turnData.switchedInThisTurn, 2), @@ -6692,6 +7119,7 @@ export function initAbilities() { .attr(ReceivedTypeDamageMultiplierAbAttr, PokemonType.FIRE, 0.5) .attr(MoveTypePowerBoostAbAttr, PokemonType.WATER, 2) .attr(StatusEffectImmunityAbAttr, StatusEffect.BURN) + .attr(PostSummonHealStatusAbAttr, StatusEffect.BURN) .ignorable(), new Ability(Abilities.STEELWORKER, 7) .attr(MoveTypePowerBoostAbAttr, PokemonType.STEEL), @@ -6715,15 +7143,12 @@ export function initAbilities() { .attr(PostBattleInitFormChangeAbAttr, () => 0) .attr(PostSummonFormChangeAbAttr, p => p.level < 20 || p.getHpRatio() <= 0.25 ? 0 : 1) .attr(PostTurnFormChangeAbAttr, p => p.level < 20 || p.getHpRatio() <= 0.25 ? 0 : 1) - .attr(UncopiableAbilityAbAttr) - .attr(UnswappableAbilityAbAttr) - .attr(UnsuppressableAbilityAbAttr) .attr(NoFusionAbilityAbAttr) + .uncopiable() + .unreplaceable() + .unsuppressable() .bypassFaint(), new Ability(Abilities.DISGUISE, 7) - .attr(UncopiableAbilityAbAttr) - .attr(UnswappableAbilityAbAttr) - .attr(UnsuppressableAbilityAbAttr) .attr(NoTransformAbilityAbAttr) .attr(NoFusionAbilityAbAttr) // Add BattlerTagType.DISGUISE if the pokemon is in its disguised form @@ -6731,17 +7156,20 @@ export function initAbilities() { .attr(FormBlockDamageAbAttr, (target, user, move) => !!target.getTag(BattlerTagType.DISGUISE) && target.getMoveEffectiveness(user, move) > 0, 0, BattlerTagType.DISGUISE, (pokemon, abilityName) => i18next.t("abilityTriggers:disguiseAvoidedDamage", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), abilityName: abilityName }), - (pokemon) => Utils.toDmgValue(pokemon.getMaxHp() / 8)) + (pokemon) => toDmgValue(pokemon.getMaxHp() / 8)) .attr(PostBattleInitFormChangeAbAttr, () => 0) + .uncopiable() + .unreplaceable() + .unsuppressable() .bypassFaint() .ignorable(), new Ability(Abilities.BATTLE_BOND, 7) .attr(PostVictoryFormChangeAbAttr, () => 2) .attr(PostBattleInitFormChangeAbAttr, () => 1) - .attr(UncopiableAbilityAbAttr) - .attr(UnswappableAbilityAbAttr) - .attr(UnsuppressableAbilityAbAttr) .attr(NoFusionAbilityAbAttr) + .uncopiable() + .unreplaceable() + .unsuppressable() .bypassFaint(), new Ability(Abilities.POWER_CONSTRUCT, 7) .conditionalAttr(pokemon => pokemon.formIndex === 2 || pokemon.formIndex === 4, PostBattleInitFormChangeAbAttr, () => 2) @@ -6750,20 +7178,20 @@ export function initAbilities() { .conditionalAttr(pokemon => pokemon.formIndex === 2 || pokemon.formIndex === 4, PostTurnFormChangeAbAttr, p => p.getHpRatio() <= 0.5 || p.getFormKey() === "complete" ? 4 : 2) .conditionalAttr(pokemon => pokemon.formIndex === 3 || pokemon.formIndex === 5, PostSummonFormChangeAbAttr, p => p.getHpRatio() <= 0.5 || p.getFormKey() === "10-complete" ? 5 : 3) .conditionalAttr(pokemon => pokemon.formIndex === 3 || pokemon.formIndex === 5, PostTurnFormChangeAbAttr, p => p.getHpRatio() <= 0.5 || p.getFormKey() === "10-complete" ? 5 : 3) - .attr(UncopiableAbilityAbAttr) - .attr(UnswappableAbilityAbAttr) - .attr(UnsuppressableAbilityAbAttr) .attr(NoFusionAbilityAbAttr) + .uncopiable() + .unreplaceable() + .unsuppressable() .bypassFaint(), new Ability(Abilities.CORROSION, 7) .attr(IgnoreTypeStatusEffectImmunityAbAttr, [ StatusEffect.POISON, StatusEffect.TOXIC ], [ PokemonType.STEEL, PokemonType.POISON ]) .edgeCase(), // Should poison itself with toxic orb. new Ability(Abilities.COMATOSE, 7) - .attr(UncopiableAbilityAbAttr) - .attr(UnswappableAbilityAbAttr) - .attr(UnsuppressableAbilityAbAttr) .attr(StatusEffectImmunityAbAttr, ...getNonVolatileStatusEffects()) - .attr(BattlerTagImmunityAbAttr, BattlerTagType.DROWSY), + .attr(BattlerTagImmunityAbAttr, BattlerTagType.DROWSY) + .uncopiable() + .unreplaceable() + .unsuppressable(), new Ability(Abilities.QUEENLY_MAJESTY, 7) .attr(FieldPriorityMoveImmunityAbAttr) .ignorable(), @@ -6787,10 +7215,10 @@ export function initAbilities() { .attr(PostDefendStatStageChangeAbAttr, (target, user, move) => move.hasFlag(MoveFlags.MAKES_CONTACT), Stat.SPD, -1, false), new Ability(Abilities.RECEIVER, 7) .attr(CopyFaintedAllyAbilityAbAttr) - .attr(UncopiableAbilityAbAttr), + .uncopiable(), new Ability(Abilities.POWER_OF_ALCHEMY, 7) .attr(CopyFaintedAllyAbilityAbAttr) - .attr(UncopiableAbilityAbAttr), + .uncopiable(), new Ability(Abilities.BEAST_BOOST, 7) .attr(PostVictoryStatStageChangeAbAttr, p => { let highestStat: EffectiveStat; @@ -6805,10 +7233,10 @@ export function initAbilities() { return highestStat!; }, 1), new Ability(Abilities.RKS_SYSTEM, 7) - .attr(UncopiableAbilityAbAttr) - .attr(UnswappableAbilityAbAttr) - .attr(UnsuppressableAbilityAbAttr) - .attr(NoFusionAbilityAbAttr), + .attr(NoFusionAbilityAbAttr) + .uncopiable() + .unreplaceable() + .unsuppressable(), new Ability(Abilities.ELECTRIC_SURGE, 7) .attr(PostSummonTerrainChangeAbAttr, TerrainType.ELECTRIC) .attr(PostBiomeChangeTerrainChangeAbAttr, TerrainType.ELECTRIC), @@ -6854,11 +7282,11 @@ export function initAbilities() { * @see {@linkcode GulpMissileTagAttr} and {@linkcode GulpMissileTag} for Gulp Missile implementation */ new Ability(Abilities.GULP_MISSILE, 8) - .attr(UnsuppressableAbilityAbAttr) .attr(NoTransformAbilityAbAttr) .attr(NoFusionAbilityAbAttr) - .attr(UncopiableAbilityAbAttr) - .attr(UnswappableAbilityAbAttr) + .unsuppressable() + .uncopiable() + .unreplaceable() .bypassFaint(), new Ability(Abilities.STALWART, 8) .attr(BlockRedirectAbAttr), @@ -6881,9 +7309,6 @@ export function initAbilities() { new Ability(Abilities.RIPEN, 8) .attr(DoubleBerryEffectAbAttr), new Ability(Abilities.ICE_FACE, 8) - .attr(UncopiableAbilityAbAttr) - .attr(UnswappableAbilityAbAttr) - .attr(UnsuppressableAbilityAbAttr) .attr(NoTransformAbilityAbAttr) .attr(NoFusionAbilityAbAttr) // Add BattlerTagType.ICE_FACE if the pokemon is in ice face form @@ -6896,6 +7321,9 @@ export function initAbilities() { (target, user, move) => move.category === MoveCategory.PHYSICAL && !!target.getTag(BattlerTagType.ICE_FACE), 0, BattlerTagType.ICE_FACE, (pokemon, abilityName) => i18next.t("abilityTriggers:iceFaceAvoidedDamage", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), abilityName: abilityName })) .attr(PostBattleInitFormChangeAbAttr, () => 0) + .uncopiable() + .unreplaceable() + .unsuppressable() .bypassFaint() .ignorable(), new Ability(Abilities.POWER_SPOT, 8) @@ -6918,9 +7346,10 @@ export function initAbilities() { new Ability(Abilities.NEUTRALIZING_GAS, 8) .attr(PostSummonAddArenaTagAbAttr, true, ArenaTagType.NEUTRALIZING_GAS, 0) .attr(PreLeaveFieldRemoveSuppressAbilitiesSourceAbAttr) - .attr(UncopiableAbilityAbAttr) - .attr(UnswappableAbilityAbAttr) + .uncopiable() .attr(NoTransformAbilityAbAttr) + .attr(PostSummonMessageAbAttr, (pokemon: Pokemon) => i18next.t("abilityTriggers:postSummonNeutralizingGas", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) })) + .attr(PostSummonRemoveIllusionAbAttr) .bypassFaint(), new Ability(Abilities.PASTEL_VEIL, 8) .attr(PostSummonUserFieldRemoveStatusEffectAbAttr, StatusEffect.POISON, StatusEffect.TOXIC) @@ -6929,11 +7358,11 @@ export function initAbilities() { new Ability(Abilities.HUNGER_SWITCH, 8) .attr(PostTurnFormChangeAbAttr, p => p.getFormKey() ? 0 : 1) .attr(PostTurnFormChangeAbAttr, p => p.getFormKey() ? 1 : 0) - .attr(UncopiableAbilityAbAttr) - .attr(UnswappableAbilityAbAttr) .attr(NoTransformAbilityAbAttr) .attr(NoFusionAbilityAbAttr) - .condition((pokemon) => !pokemon.isTerastallized), + .condition((pokemon) => !pokemon.isTerastallized) + .uncopiable() + .unreplaceable(), new Ability(Abilities.QUICK_DRAW, 8) .attr(BypassSpeedChanceAbAttr, 30), new Ability(Abilities.UNSEEN_FIST, 8) @@ -6952,16 +7381,16 @@ export function initAbilities() { .attr(PostSummonMessageAbAttr, (pokemon: Pokemon) => i18next.t("abilityTriggers:postSummonAsOneGlastrier", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) })) .attr(PreventBerryUseAbAttr) .attr(PostVictoryStatStageChangeAbAttr, Stat.ATK, 1) - .attr(UncopiableAbilityAbAttr) - .attr(UnswappableAbilityAbAttr) - .attr(UnsuppressableAbilityAbAttr), + .uncopiable() + .unreplaceable() + .unsuppressable(), new Ability(Abilities.AS_ONE_SPECTRIER, 8) .attr(PostSummonMessageAbAttr, (pokemon: Pokemon) => i18next.t("abilityTriggers:postSummonAsOneSpectrier", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) })) .attr(PreventBerryUseAbAttr) .attr(PostVictoryStatStageChangeAbAttr, Stat.SPATK, 1) - .attr(UncopiableAbilityAbAttr) - .attr(UnswappableAbilityAbAttr) - .attr(UnsuppressableAbilityAbAttr), + .uncopiable() + .unreplaceable() + .unsuppressable(), new Ability(Abilities.LINGERING_AROMA, 9) .attr(PostDefendAbilityGiveAbAttr, Abilities.LINGERING_AROMA) .bypassFaint(), @@ -6971,6 +7400,7 @@ export function initAbilities() { new Ability(Abilities.THERMAL_EXCHANGE, 9) .attr(PostDefendStatStageChangeAbAttr, (target, user, move) => user.getMoveType(move) === PokemonType.FIRE && move.category !== MoveCategory.STATUS, Stat.ATK, 1) .attr(StatusEffectImmunityAbAttr, StatusEffect.BURN) + .attr(PostSummonHealStatusAbAttr, StatusEffect.BURN) .ignorable(), new Ability(Abilities.ANGER_SHELL, 9) .attr(PostDefendHpGatedStatStageChangeAbAttr, (target, user, move) => move.category !== MoveCategory.STATUS, 0.5, [ Stat.ATK, Stat.SPATK, Stat.SPD ], 1) @@ -6996,9 +7426,9 @@ export function initAbilities() { new Ability(Abilities.WIND_POWER, 9) .attr(PostDefendApplyBattlerTagAbAttr, (target, user, move) => move.hasFlag(MoveFlags.WIND_MOVE), BattlerTagType.CHARGED), new Ability(Abilities.ZERO_TO_HERO, 9) - .attr(UncopiableAbilityAbAttr) - .attr(UnswappableAbilityAbAttr) - .attr(UnsuppressableAbilityAbAttr) + .uncopiable() + .unreplaceable() + .unsuppressable() .attr(NoTransformAbilityAbAttr) .attr(NoFusionAbilityAbAttr) .attr(PostBattleInitFormChangeAbAttr, () => 0) @@ -7007,22 +7437,20 @@ export function initAbilities() { new Ability(Abilities.COMMANDER, 9) .attr(CommanderAbAttr) .attr(DoubleBattleChanceAbAttr) - .attr(UncopiableAbilityAbAttr) - .attr(UnswappableAbilityAbAttr) + .uncopiable() + .unreplaceable() .edgeCase(), // Encore, Frenzy, and other non-`TURN_END` tags don't lapse correctly on the commanding Pokemon. new Ability(Abilities.ELECTROMORPHOSIS, 9) .attr(PostDefendApplyBattlerTagAbAttr, (target, user, move) => move.category !== MoveCategory.STATUS, BattlerTagType.CHARGED), new Ability(Abilities.PROTOSYNTHESIS, 9) .conditionalAttr(getWeatherCondition(WeatherType.SUNNY, WeatherType.HARSH_SUN), PostSummonAddBattlerTagAbAttr, BattlerTagType.PROTOSYNTHESIS, 0, true) .attr(PostWeatherChangeAddBattlerTagAttr, BattlerTagType.PROTOSYNTHESIS, 0, WeatherType.SUNNY, WeatherType.HARSH_SUN) - .attr(UncopiableAbilityAbAttr) - .attr(UnswappableAbilityAbAttr) + .uncopiable() .attr(NoTransformAbilityAbAttr), new Ability(Abilities.QUARK_DRIVE, 9) .conditionalAttr(getTerrainCondition(TerrainType.ELECTRIC), PostSummonAddBattlerTagAbAttr, BattlerTagType.QUARK_DRIVE, 0, true) .attr(PostTerrainChangeAddBattlerTagAttr, BattlerTagType.QUARK_DRIVE, 0, TerrainType.ELECTRIC) - .attr(UncopiableAbilityAbAttr) - .attr(UnswappableAbilityAbAttr) + .uncopiable() .attr(NoTransformAbilityAbAttr), new Ability(Abilities.GOOD_AS_GOLD, 9) .attr(MoveImmunityAbAttr, (pokemon, attacker, move) => pokemon !== attacker && move.category === MoveCategory.STATUS && ![ MoveTarget.ENEMY_SIDE, MoveTarget.BOTH_SIDES, MoveTarget.USER_SIDE ].includes(move.moveTarget)) @@ -7086,45 +7514,45 @@ export function initAbilities() { .attr(PostAttackApplyStatusEffectAbAttr, false, 30, StatusEffect.TOXIC), new Ability(Abilities.EMBODY_ASPECT_TEAL, 9) .attr(PostTeraFormChangeStatChangeAbAttr, [ Stat.SPD ], 1) - .attr(UncopiableAbilityAbAttr) - .attr(UnswappableAbilityAbAttr) + .uncopiable() + .unreplaceable() // TODO is this true? .attr(NoTransformAbilityAbAttr), new Ability(Abilities.EMBODY_ASPECT_WELLSPRING, 9) .attr(PostTeraFormChangeStatChangeAbAttr, [ Stat.SPDEF ], 1) - .attr(UncopiableAbilityAbAttr) - .attr(UnswappableAbilityAbAttr) + .uncopiable() + .unreplaceable() .attr(NoTransformAbilityAbAttr), new Ability(Abilities.EMBODY_ASPECT_HEARTHFLAME, 9) .attr(PostTeraFormChangeStatChangeAbAttr, [ Stat.ATK ], 1) - .attr(UncopiableAbilityAbAttr) - .attr(UnswappableAbilityAbAttr) + .uncopiable() + .unreplaceable() .attr(NoTransformAbilityAbAttr), new Ability(Abilities.EMBODY_ASPECT_CORNERSTONE, 9) .attr(PostTeraFormChangeStatChangeAbAttr, [ Stat.DEF ], 1) - .attr(UncopiableAbilityAbAttr) - .attr(UnswappableAbilityAbAttr) + .uncopiable() + .unreplaceable() .attr(NoTransformAbilityAbAttr), new Ability(Abilities.TERA_SHIFT, 9) .attr(PostSummonFormChangeAbAttr, p => p.getFormKey() ? 0 : 1) - .attr(UncopiableAbilityAbAttr) - .attr(UnswappableAbilityAbAttr) - .attr(UnsuppressableAbilityAbAttr) + .uncopiable() + .unreplaceable() + .unsuppressable() .attr(NoTransformAbilityAbAttr) .attr(NoFusionAbilityAbAttr), new Ability(Abilities.TERA_SHELL, 9) .attr(FullHpResistTypeAbAttr) - .attr(UncopiableAbilityAbAttr) - .attr(UnswappableAbilityAbAttr) + .uncopiable() + .unreplaceable() .ignorable(), new Ability(Abilities.TERAFORM_ZERO, 9) .attr(ClearWeatherAbAttr, [ WeatherType.SUNNY, WeatherType.RAIN, WeatherType.SANDSTORM, WeatherType.HAIL, WeatherType.SNOW, WeatherType.FOG, WeatherType.HEAVY_RAIN, WeatherType.HARSH_SUN, WeatherType.STRONG_WINDS ]) .attr(ClearTerrainAbAttr, [ TerrainType.MISTY, TerrainType.ELECTRIC, TerrainType.GRASSY, TerrainType.PSYCHIC ]) - .attr(UncopiableAbilityAbAttr) - .attr(UnswappableAbilityAbAttr) + .uncopiable() + .unreplaceable() .condition(getOncePerBattleCondition(Abilities.TERAFORM_ZERO)), new Ability(Abilities.POISON_PUPPETEER, 9) - .attr(UncopiableAbilityAbAttr) - .attr(UnswappableAbilityAbAttr) + .uncopiable() + .unreplaceable() // TODO is this true? .attr(ConfusionOnStatusEffectAbAttr, StatusEffect.POISON, StatusEffect.TOXIC) ); } diff --git a/src/data/arena-tag.ts b/src/data/arena-tag.ts index 8f1d6b09a73..871f622f70a 100644 --- a/src/data/arena-tag.ts +++ b/src/data/arena-tag.ts @@ -28,7 +28,6 @@ import { BattlerTagType } from "#enums/battler-tag-type"; import { Moves } from "#enums/moves"; import { MoveEffectPhase } from "#app/phases/move-effect-phase"; import { PokemonHealPhase } from "#app/phases/pokemon-heal-phase"; -import { ShowAbilityPhase } from "#app/phases/show-ability-phase"; import { StatStageChangePhase } from "#app/phases/stat-stage-change-phase"; import { CommonAnimPhase } from "#app/phases/common-anim-phase"; @@ -1160,9 +1159,11 @@ class TailwindTag extends ArenaTag { ); } // Raise attack by one stage if party member has WIND_RIDER ability + // TODO: Ability displays should be handled by the ability if (pokemon.hasAbility(Abilities.WIND_RIDER)) { - globalScene.unshiftPhase(new ShowAbilityPhase(pokemon.getBattlerIndex())); + globalScene.queueAbilityDisplay(pokemon, false, true); globalScene.unshiftPhase(new StatStageChangePhase(pokemon.getBattlerIndex(), true, [Stat.ATK], 1, true)); + globalScene.queueAbilityDisplay(pokemon, false, false); } } } diff --git a/src/data/balance/biomes.ts b/src/data/balance/biomes.ts index a4e051d80c9..c722291c66d 100644 --- a/src/data/balance/biomes.ts +++ b/src/data/balance/biomes.ts @@ -1,5 +1,5 @@ import { PokemonType } from "#enums/pokemon-type"; -import * as Utils from "#app/utils"; +import { randSeedInt, getEnumValues } from "#app/utils"; import type { SpeciesFormEvolution } from "#app/data/balance/pokemon-evolutions"; import { pokemonEvolutions } from "#app/data/balance/pokemon-evolutions"; import i18next from "i18next"; @@ -1659,7 +1659,7 @@ export const biomeTrainerPools: BiomeTrainerPools = { }, [Biome.GRASS]: { [BiomePoolTier.COMMON]: [ TrainerType.BREEDER, TrainerType.SCHOOL_KID ], - [BiomePoolTier.UNCOMMON]: [ TrainerType.ACE_TRAINER ], + [BiomePoolTier.UNCOMMON]: [ TrainerType.ACE_TRAINER, TrainerType.POKEFAN ], [BiomePoolTier.RARE]: [ TrainerType.BLACK_BELT ], [BiomePoolTier.SUPER_RARE]: [], [BiomePoolTier.ULTRA_RARE]: [], @@ -1680,9 +1680,9 @@ export const biomeTrainerPools: BiomeTrainerPools = { [BiomePoolTier.BOSS_ULTRA_RARE]: [] }, [Biome.METROPOLIS]: { - [BiomePoolTier.COMMON]: [ TrainerType.CLERK, TrainerType.CYCLIST, TrainerType.OFFICER, TrainerType.WAITER, TrainerType.BEAUTY ], + [BiomePoolTier.COMMON]: [ TrainerType.BEAUTY, TrainerType.CLERK, TrainerType.CYCLIST, TrainerType.OFFICER, TrainerType.WAITER ], [BiomePoolTier.UNCOMMON]: [ TrainerType.BREEDER, TrainerType.DEPOT_AGENT, TrainerType.GUITARIST ], - [BiomePoolTier.RARE]: [ TrainerType.ARTIST ], + [BiomePoolTier.RARE]: [ TrainerType.ARTIST, TrainerType.RICH_KID ], [BiomePoolTier.SUPER_RARE]: [], [BiomePoolTier.ULTRA_RARE]: [], [BiomePoolTier.BOSS]: [ TrainerType.WHITNEY, TrainerType.NORMAN, TrainerType.IONO, TrainerType.LARRY ], @@ -1702,7 +1702,7 @@ export const biomeTrainerPools: BiomeTrainerPools = { [BiomePoolTier.BOSS_ULTRA_RARE]: [] }, [Biome.SEA]: { - [BiomePoolTier.COMMON]: [ TrainerType.SWIMMER, TrainerType.SAILOR ], + [BiomePoolTier.COMMON]: [ TrainerType.SAILOR, TrainerType.SWIMMER ], [BiomePoolTier.UNCOMMON]: [], [BiomePoolTier.RARE]: [], [BiomePoolTier.SUPER_RARE]: [], @@ -1758,7 +1758,7 @@ export const biomeTrainerPools: BiomeTrainerPools = { }, [Biome.MOUNTAIN]: { [BiomePoolTier.COMMON]: [ TrainerType.BACKPACKER, TrainerType.BLACK_BELT, TrainerType.HIKER ], - [BiomePoolTier.UNCOMMON]: [ TrainerType.ACE_TRAINER ], + [BiomePoolTier.UNCOMMON]: [ TrainerType.ACE_TRAINER, TrainerType.PILOT ], [BiomePoolTier.RARE]: [], [BiomePoolTier.SUPER_RARE]: [], [BiomePoolTier.ULTRA_RARE]: [], @@ -1790,7 +1790,7 @@ export const biomeTrainerPools: BiomeTrainerPools = { [BiomePoolTier.BOSS_ULTRA_RARE]: [] }, [Biome.DESERT]: { - [BiomePoolTier.COMMON]: [ TrainerType.SCIENTIST, TrainerType.BACKPACKER ], + [BiomePoolTier.COMMON]: [ TrainerType.BACKPACKER, TrainerType.SCIENTIST ], [BiomePoolTier.UNCOMMON]: [], [BiomePoolTier.RARE]: [], [BiomePoolTier.SUPER_RARE]: [], @@ -1812,8 +1812,8 @@ export const biomeTrainerPools: BiomeTrainerPools = { [BiomePoolTier.BOSS_ULTRA_RARE]: [] }, [Biome.MEADOW]: { - [BiomePoolTier.COMMON]: [ TrainerType.PARASOL_LADY, TrainerType.BEAUTY ], - [BiomePoolTier.UNCOMMON]: [ TrainerType.ACE_TRAINER, TrainerType.BREEDER, TrainerType.BAKER ], + [BiomePoolTier.COMMON]: [ TrainerType.BEAUTY, TrainerType.MUSICIAN, TrainerType.PARASOL_LADY ], + [BiomePoolTier.UNCOMMON]: [ TrainerType.ACE_TRAINER, TrainerType.BAKER, TrainerType.BREEDER, TrainerType.POKEFAN ], [BiomePoolTier.RARE]: [], [BiomePoolTier.SUPER_RARE]: [], [BiomePoolTier.ULTRA_RARE]: [], @@ -1967,7 +1967,7 @@ export const biomeTrainerPools: BiomeTrainerPools = { }, [Biome.SLUM]: { [BiomePoolTier.COMMON]: [ TrainerType.BIKER, TrainerType.OFFICER, TrainerType.ROUGHNECK ], - [BiomePoolTier.UNCOMMON]: [ TrainerType.BAKER ], + [BiomePoolTier.UNCOMMON]: [ TrainerType.BAKER, TrainerType.HOOLIGANS ], [BiomePoolTier.RARE]: [], [BiomePoolTier.SUPER_RARE]: [], [BiomePoolTier.ULTRA_RARE]: [], @@ -1988,8 +1988,8 @@ export const biomeTrainerPools: BiomeTrainerPools = { [BiomePoolTier.BOSS_ULTRA_RARE]: [] }, [Biome.ISLAND]: { - [BiomePoolTier.COMMON]: [], - [BiomePoolTier.UNCOMMON]: [], + [BiomePoolTier.COMMON]: [ TrainerType.RICH_KID ], + [BiomePoolTier.UNCOMMON]: [ TrainerType.RICH ], [BiomePoolTier.RARE]: [], [BiomePoolTier.SUPER_RARE]: [], [BiomePoolTier.ULTRA_RARE]: [], @@ -7178,7 +7178,8 @@ export function initBiomes() { [ Biome.METROPOLIS, BiomePoolTier.COMMON ], [ Biome.MEADOW, BiomePoolTier.COMMON ], [ Biome.FAIRY_CAVE, BiomePoolTier.COMMON ] - ]], + ] + ], [ TrainerType.BIKER, [ [ Biome.SLUM, BiomePoolTier.COMMON ] ] @@ -7208,7 +7209,8 @@ export function initBiomes() { ], [ TrainerType.CLERK, [ [ Biome.METROPOLIS, BiomePoolTier.COMMON ] - ]], + ] + ], [ TrainerType.CYCLIST, [ [ Biome.PLAINS, BiomePoolTier.UNCOMMON ], [ Biome.METROPOLIS, BiomePoolTier.COMMON ] @@ -7217,18 +7219,23 @@ export function initBiomes() { [ TrainerType.DANCER, []], [ TrainerType.DEPOT_AGENT, [ [ Biome.METROPOLIS, BiomePoolTier.UNCOMMON ] - ]], + ] + ], [ TrainerType.DOCTOR, []], + [ TrainerType.FIREBREATHER, [ + [ Biome.VOLCANO, BiomePoolTier.COMMON ] + ] + ], [ TrainerType.FISHERMAN, [ [ Biome.LAKE, BiomePoolTier.COMMON ], [ Biome.BEACH, BiomePoolTier.COMMON ] ] ], - [ TrainerType.RICH, []], [ TrainerType.GUITARIST, [ [ Biome.METROPOLIS, BiomePoolTier.UNCOMMON ], [ Biome.POWER_PLANT, BiomePoolTier.COMMON ] - ]], + ] + ], [ TrainerType.HARLEQUIN, []], [ TrainerType.HIKER, [ [ Biome.MOUNTAIN, BiomePoolTier.COMMON ], @@ -7236,13 +7243,24 @@ export function initBiomes() { [ Biome.BADLANDS, BiomePoolTier.COMMON ] ] ], - [ TrainerType.HOOLIGANS, []], + [ TrainerType.HOOLIGANS, [ + [ Biome.SLUM, BiomePoolTier.UNCOMMON ] + ] + ], [ TrainerType.HOOPSTER, []], [ TrainerType.INFIELDER, []], [ TrainerType.JANITOR, []], [ TrainerType.LINEBACKER, []], [ TrainerType.MAID, []], - [ TrainerType.MUSICIAN, []], + [ TrainerType.MUSICIAN, [ + [ Biome.MEADOW, BiomePoolTier.COMMON ] + ] + ], + [ TrainerType.HEX_MANIAC, [ + [ Biome.RUINS, BiomePoolTier.UNCOMMON ], + [ Biome.GRAVEYARD, BiomePoolTier.UNCOMMON ] + ] + ], [ TrainerType.NURSERY_AIDE, []], [ TrainerType.OFFICER, [ [ Biome.METROPOLIS, BiomePoolTier.COMMON ], @@ -7256,8 +7274,15 @@ export function initBiomes() { [ Biome.MEADOW, BiomePoolTier.COMMON ] ] ], - [ TrainerType.PILOT, []], - [ TrainerType.POKEFAN, []], + [ TrainerType.PILOT, [ + [ Biome.MOUNTAIN, BiomePoolTier.UNCOMMON ] + ] + ], + [ TrainerType.POKEFAN, [ + [ Biome.GRASS, BiomePoolTier.UNCOMMON ], + [ Biome.MEADOW, BiomePoolTier.UNCOMMON ] + ] + ], [ TrainerType.PRESCHOOLER, []], [ TrainerType.PSYCHIC, [ [ Biome.GRAVEYARD, BiomePoolTier.COMMON ], @@ -7270,11 +7295,24 @@ export function initBiomes() { [ Biome.JUNGLE, BiomePoolTier.COMMON ] ] ], - [ TrainerType.RICH_KID, []], + [ TrainerType.RICH, [ + [ Biome.ISLAND, BiomePoolTier.UNCOMMON ] + ] + ], + [ TrainerType.RICH_KID, [ + [ Biome.METROPOLIS, BiomePoolTier.RARE ], + [ Biome.ISLAND, BiomePoolTier.COMMON ] + ] + ], [ TrainerType.ROUGHNECK, [ [ Biome.SLUM, BiomePoolTier.COMMON ] ] ], + [ TrainerType.SAILOR, [ + [ Biome.SEA, BiomePoolTier.COMMON ], + [ Biome.BEACH, BiomePoolTier.COMMON ] + ] + ], [ TrainerType.SCIENTIST, [ [ Biome.DESERT, BiomePoolTier.COMMON ], [ Biome.RUINS, BiomePoolTier.COMMON ] @@ -7317,20 +7355,6 @@ export function initBiomes() { [ Biome.TOWN, BiomePoolTier.COMMON ] ] ], - [ TrainerType.HEX_MANIAC, [ - [ Biome.RUINS, BiomePoolTier.UNCOMMON ], - [ Biome.GRAVEYARD, BiomePoolTier.UNCOMMON ] - ] - ], - [ TrainerType.FIREBREATHER, [ - [ Biome.VOLCANO, BiomePoolTier.COMMON ] - ] - ], - [ TrainerType.SAILOR, [ - [ Biome.SEA, BiomePoolTier.COMMON ], - [ Biome.BEACH, BiomePoolTier.COMMON ] - ] - ], [ TrainerType.BROCK, [ [ Biome.CAVE, BiomePoolTier.BOSS ] ] @@ -7686,7 +7710,7 @@ export function initBiomes() { if (biome === Biome.END) { const biomeList = Object.keys(Biome).filter(key => !Number.isNaN(Number(key))); biomeList.pop(); // Removes Biome.END from the list - const randIndex = Utils.randSeedInt(biomeList.length, 1); // Will never be Biome.TOWN + const randIndex = randSeedInt(biomeList.length, 1); // Will never be Biome.TOWN biome = Biome[biomeList[randIndex]]; } const linkedBiomes: (Biome | [ Biome, number ])[] = Array.isArray(biomeLinks[biome]) @@ -7709,15 +7733,15 @@ export function initBiomes() { traverseBiome(Biome.TOWN, 0); biomeDepths[Biome.END] = [ Object.values(biomeDepths).map(d => d[0]).reduce((max: number, value: number) => Math.max(max, value), 0) + 1, 1 ]; - for (const biome of Utils.getEnumValues(Biome)) { + for (const biome of getEnumValues(Biome)) { biomePokemonPools[biome] = {}; biomeTrainerPools[biome] = {}; - for (const tier of Utils.getEnumValues(BiomePoolTier)) { + for (const tier of getEnumValues(BiomePoolTier)) { biomePokemonPools[biome][tier] = {}; biomeTrainerPools[biome][tier] = []; - for (const tod of Utils.getEnumValues(TimeOfDay)) { + for (const tod of getEnumValues(TimeOfDay)) { biomePokemonPools[biome][tier][tod] = []; } } diff --git a/src/data/balance/egg-moves.ts b/src/data/balance/egg-moves.ts index 5829e3e10aa..74f6a2c1afb 100644 --- a/src/data/balance/egg-moves.ts +++ b/src/data/balance/egg-moves.ts @@ -1,5 +1,5 @@ import { allMoves } from "#app/data/moves/move"; -import * as Utils from "#app/utils"; +import { getEnumKeys, getEnumValues } from "#app/utils"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; @@ -103,7 +103,7 @@ export const speciesEggMoves = { [Species.SNUBBULL]: [ Moves.FACADE, Moves.HIGH_HORSEPOWER, Moves.SWORDS_DANCE, Moves.EXTREME_SPEED ], [Species.QWILFISH]: [ Moves.BARB_BARRAGE, Moves.BANEFUL_BUNKER, Moves.RECOVER, Moves.FISHIOUS_REND ], [Species.SHUCKLE]: [ Moves.STUFF_CHEEKS, Moves.HEAL_ORDER, Moves.BODY_PRESS, Moves.SALT_CURE ], - [Species.HERACROSS]: [ Moves.ROCK_BLAST, Moves.FIRST_IMPRESSION, Moves.ICICLE_SPEAR, Moves.TIDY_UP ], + [Species.HERACROSS]: [ Moves.ROCK_BLAST, Moves.STORM_THROW, Moves.ICICLE_SPEAR, Moves.SCALE_SHOT ], [Species.SNEASEL]: [ Moves.DIRE_CLAW, Moves.DARKEST_LARIAT, Moves.TRIPLE_AXEL, Moves.CLOSE_COMBAT ], [Species.TEDDIURSA]: [ Moves.MOUNTAIN_GALE, Moves.FAKE_OUT, Moves.SLACK_OFF, Moves.PRECIPICE_BLADES ], [Species.SLUGMA]: [ Moves.BURNING_BULWARK, Moves.POWER_GEM, Moves.SOLAR_BEAM, Moves.MAGMA_STORM ], @@ -143,14 +143,14 @@ export const speciesEggMoves = { [Species.SURSKIT]: [ Moves.POLLEN_PUFF, Moves.FIERY_DANCE, Moves.BOUNCY_BUBBLE, Moves.AEROBLAST ], [Species.SHROOMISH]: [ Moves.ACCELEROCK, Moves.TRAILBLAZE, Moves.STORM_THROW, Moves.SAPPY_SEED ], [Species.SLAKOTH]: [ Moves.FACADE, Moves.DRAIN_PUNCH, Moves.KNOCK_OFF, Moves.SKILL_SWAP ], - [Species.NINCADA]: [ Moves.ATTACK_ORDER, Moves.STICKY_WEB, Moves.SPIRIT_SHACKLE, Moves.SHELL_SMASH ], + [Species.NINCADA]: [ Moves.BULLDOZE, Moves.STICKY_WEB, Moves.SHADOW_BONE, Moves.SHELL_SMASH ], [Species.WHISMUR]: [ Moves.ALLURING_VOICE, Moves.SHIFT_GEAR, Moves.SPARKLING_ARIA, Moves.TORCH_SONG ], [Species.MAKUHITA]: [ Moves.COMBAT_TORQUE, Moves.SLACK_OFF, Moves.HEAT_CRASH, Moves.DOUBLE_IRON_BASH ], [Species.AZURILL]: [ Moves.JET_PUNCH, Moves.MAGICAL_TORQUE, Moves.SWORDS_DANCE, Moves.SURGING_STRIKES ], [Species.NOSEPASS]: [ Moves.SHORE_UP, Moves.BODY_PRESS, Moves.CALM_MIND, Moves.TACHYON_CUTTER ], [Species.SKITTY]: [ Moves.THUNDEROUS_KICK, Moves.ENTRAINMENT, Moves.TIDY_UP, Moves.V_CREATE ], [Species.SABLEYE]: [ Moves.RECOVER, Moves.TOPSY_TURVY, Moves.CURSE, Moves.SALT_CURE ], - [Species.MAWILE]: [ Moves.BULLET_PUNCH, Moves.MAGICAL_TORQUE, Moves.EARTHQUAKE, Moves.SHIFT_GEAR ], + [Species.MAWILE]: [ Moves.BULLET_PUNCH, Moves.HORN_LEECH, Moves.EARTHQUAKE, Moves.MAGICAL_TORQUE ], [Species.ARON]: [ Moves.HEAD_SMASH, Moves.BODY_PRESS, Moves.SHORE_UP, Moves.SALT_CURE ], [Species.MEDITITE]: [ Moves.THUNDEROUS_KICK, Moves.SUCKER_PUNCH, Moves.BULLET_PUNCH, Moves.PHOTON_GEYSER ], [Species.ELECTRIKE]: [ Moves.FROST_BREATH, Moves.HEAT_WAVE, Moves.NASTY_PLOT, Moves.ELECTRO_DRIFT ], @@ -191,7 +191,7 @@ export const speciesEggMoves = { [Species.RELICANTH]: [ Moves.DRAGON_DANCE, Moves.SHORE_UP, Moves.WAVE_CRASH, Moves.DIAMOND_STORM ], [Species.LUVDISC]: [ Moves.BATON_PASS, Moves.HEART_SWAP, Moves.GLITZY_GLOW, Moves.REVIVAL_BLESSING ], [Species.BAGON]: [ Moves.HEADLONG_RUSH, Moves.FIRE_LASH, Moves.DRAGON_DANCE, Moves.DRAGON_DARTS ], - [Species.BELDUM]: [ Moves.HEADLONG_RUSH, Moves.DRAIN_PUNCH, Moves.TRIPLE_AXEL, Moves.SHIFT_GEAR ], + [Species.BELDUM]: [ Moves.HEADLONG_RUSH, Moves.DRAIN_PUNCH, Moves.ICE_SPINNER, Moves.SHIFT_GEAR ], [Species.REGIROCK]: [ Moves.STONE_AXE, Moves.BODY_PRESS, Moves.SHORE_UP, Moves.SALT_CURE ], [Species.REGICE]: [ Moves.EARTH_POWER, Moves.TAKE_HEART, Moves.RECOVER, Moves.FREEZE_DRY ], [Species.REGISTEEL]: [ Moves.BODY_PRESS, Moves.SIZZLY_SLIDE, Moves.RECOVER, Moves.GIGATON_HAMMER ], @@ -230,7 +230,7 @@ export const speciesEggMoves = { [Species.HAPPINY]: [ Moves.COTTON_GUARD, Moves.SEISMIC_TOSS, Moves.SIZZLY_SLIDE, Moves.REVIVAL_BLESSING ], [Species.CHATOT]: [ Moves.SPARKLING_ARIA, Moves.BOOMBURST, Moves.BATON_PASS, Moves.TORCH_SONG ], [Species.SPIRITOMB]: [ Moves.PARTING_SHOT, Moves.BADDY_BAD, Moves.STRENGTH_SAP, Moves.SPECTRAL_THIEF ], - [Species.GIBLE]: [ Moves.DRAGON_DANCE, Moves.BITTER_BLADE, Moves.DRAGON_HAMMER, Moves.PRECIPICE_BLADES ], + [Species.GIBLE]: [ Moves.METEOR_MASH, Moves.BITTER_BLADE, Moves.LANDS_WRATH, Moves.DRAGON_DANCE ], [Species.MUNCHLAX]: [ Moves.STUFF_CHEEKS, Moves.GRAV_APPLE, Moves.SLACK_OFF, Moves.EXTREME_SPEED ], [Species.RIOLU]: [ Moves.THUNDEROUS_KICK, Moves.TACHYON_CUTTER, Moves.TRIPLE_AXEL, Moves.SUNSTEEL_STRIKE ], [Species.HIPPOPOTAS]: [ Moves.SHORE_UP, Moves.STONE_AXE, Moves.BULK_UP, Moves.SALT_CURE ], @@ -259,7 +259,7 @@ export const speciesEggMoves = { [Species.VICTINI]: [ Moves.BLUE_FLARE, Moves.BOLT_STRIKE, Moves.LUSTER_PURGE, Moves.VICTORY_DANCE ], [Species.SNIVY]: [ Moves.FLAMETHROWER, Moves.CLANGING_SCALES, Moves.MAKE_IT_RAIN, Moves.FLEUR_CANNON ], [Species.TEPIG]: [ Moves.WAVE_CRASH, Moves.VOLT_TACKLE, Moves.AXE_KICK, Moves.VICTORY_DANCE ], - [Species.OSHAWOTT]: [ Moves.TRIPLE_AXEL, Moves.SHELL_SIDE_ARM, Moves.SACRED_SWORD, Moves.SHELL_SMASH ], + [Species.OSHAWOTT]: [ Moves.FREEZE_DRY, Moves.SHELL_SIDE_ARM, Moves.SACRED_SWORD, Moves.SHELL_SMASH ], [Species.PATRAT]: [ Moves.FAKE_OUT, Moves.SWORDS_DANCE, Moves.DYNAMIC_PUNCH, Moves.EXTREME_SPEED ], [Species.LILLIPUP]: [ Moves.CLOSE_COMBAT, Moves.BODY_SLAM, Moves.HIGH_HORSEPOWER, Moves.LAST_RESPECTS ], [Species.PURRLOIN]: [ Moves.ENCORE, Moves.OBSTRUCT, Moves.PARTING_SHOT, Moves.WICKED_BLOW ], @@ -336,7 +336,7 @@ export const speciesEggMoves = { [Species.LANDORUS]: [ Moves.STONE_AXE, Moves.FLOATY_FALL, Moves.ROOST, Moves.BLEAKWIND_STORM ], [Species.KYUREM]: [ Moves.DRAGON_DARTS, Moves.GLACIAL_LANCE, Moves.NO_RETREAT, Moves.DRAGON_ENERGY ], [Species.KELDEO]: [ Moves.BOUNCY_BUBBLE, Moves.THUNDERBOLT, Moves.ICE_BEAM, Moves.STEAM_ERUPTION ], - [Species.MELOETTA]: [ Moves.BODY_SLAM, Moves.TORCH_SONG, Moves.TRIPLE_ARROWS, Moves.BOOMBURST ], + [Species.MELOETTA]: [ Moves.BODY_SLAM, Moves.PSYCHIC_NOISE, Moves.TRIPLE_ARROWS, Moves.TORCH_SONG ], [Species.GENESECT]: [ Moves.EXTREME_SPEED, Moves.SHIFT_GEAR, Moves.BEHEMOTH_BASH, Moves.TACHYON_CUTTER ], [Species.CHESPIN]: [ Moves.COMBAT_TORQUE, Moves.SYNTHESIS, Moves.CEASELESS_EDGE, Moves.SAPPY_SEED ], @@ -370,7 +370,7 @@ export const speciesEggMoves = { [Species.PUMPKABOO]: [ Moves.SPIRIT_SHACKLE, Moves.FIRE_LASH, Moves.DIRE_CLAW, Moves.SAPPY_SEED ], [Species.BERGMITE]: [ Moves.STONE_AXE, Moves.METAL_BURST, Moves.BODY_PRESS, Moves.GLACIAL_LANCE ], [Species.NOIBAT]: [ Moves.AEROBLAST, Moves.OVERDRIVE, Moves.NASTY_PLOT, Moves.CLANGING_SCALES ], - [Species.XERNEAS]: [ Moves.EARTH_POWER, Moves.SPRINGTIDE_STORM, Moves.STRENGTH_SAP, Moves.TAIL_GLOW ], + [Species.XERNEAS]: [ Moves.EARTH_POWER, Moves.SPRINGTIDE_STORM, Moves.STORED_POWER, Moves.STRENGTH_SAP ], [Species.YVELTAL]: [ Moves.SLUDGE_WAVE, Moves.POWER_TRIP, Moves.FIERY_WRATH, Moves.CLANGOROUS_SOUL ], [Species.ZYGARDE]: [ Moves.DRAGON_DARTS, Moves.V_CREATE, Moves.CLANGOROUS_SOUL, Moves.HEAL_ORDER ], [Species.DIANCIE]: [ Moves.MAGICAL_TORQUE, Moves.FIERY_DANCE, Moves.SHORE_UP, Moves.GEOMANCY ], @@ -383,7 +383,7 @@ export const speciesEggMoves = { [Species.POPPLIO]: [ Moves.PSYCHIC_NOISE, Moves.MOONLIGHT, Moves.OVERDRIVE, Moves.TORCH_SONG ], [Species.PIKIPEK]: [ Moves.DUAL_WINGBEAT, Moves.BONE_RUSH, Moves.BURNING_BULWARK, Moves.POPULATION_BOMB ], [Species.YUNGOOS]: [ Moves.EXTREME_SPEED, Moves.KNOCK_OFF, Moves.TIDY_UP, Moves.MULTI_ATTACK ], - [Species.GRUBBIN]: [ Moves.ICE_BEAM, Moves.EARTH_POWER, Moves.THUNDERCLAP, Moves.QUIVER_DANCE ], + [Species.GRUBBIN]: [ Moves.ICE_BEAM, Moves.EARTH_POWER, Moves.CALM_MIND, Moves.THUNDERCLAP ], [Species.CRABRAWLER]: [ Moves.JET_PUNCH, Moves.SHORE_UP, Moves.MACH_PUNCH, Moves.SURGING_STRIKES ], [Species.ORICORIO]: [ Moves.QUIVER_DANCE, Moves.FIERY_DANCE, Moves.THUNDERCLAP, Moves.OBLIVION_WING ], [Species.CUTIEFLY]: [ Moves.STICKY_WEB, Moves.SLEEP_POWDER, Moves.HEAT_WAVE, Moves.SPARKLY_SWIRL ], @@ -404,7 +404,7 @@ export const speciesEggMoves = { [Species.SANDYGAST]: [ Moves.BITTER_MALICE, Moves.SPLISHY_SPLASH, Moves.TAKE_HEART, Moves.SALT_CURE ], [Species.PYUKUMUKU]: [ Moves.COMEUPPANCE, Moves.BANEFUL_BUNKER, Moves.TOXIC_SPIKES, Moves.SALT_CURE ], [Species.TYPE_NULL]: [ Moves.DIRE_CLAW, Moves.RECOVER, Moves.COMBAT_TORQUE, Moves.NO_RETREAT ], - [Species.MINIOR]: [ Moves.EARTH_POWER, Moves.FLOATY_FALL, Moves.ZING_ZAP, Moves.DIAMOND_STORM ], + [Species.MINIOR]: [ Moves.EARTH_POWER, Moves.FLOATY_FALL, Moves.TRI_ATTACK, Moves.DIAMOND_STORM ], [Species.KOMALA]: [ Moves.SLACK_OFF, Moves.EXTREME_SPEED, Moves.KNOCK_OFF, Moves.COLLISION_COURSE ], [Species.TURTONATOR]: [ Moves.BURNING_BULWARK, Moves.MORNING_SUN, Moves.BODY_PRESS, Moves.CORE_ENFORCER ], [Species.TOGEDEMARU]: [ Moves.FAKE_OUT, Moves.METAL_BURST, Moves.METEOR_MASH, Moves.AURA_WHEEL ], @@ -423,7 +423,7 @@ export const speciesEggMoves = { [Species.PHEROMOSA]: [ Moves.SECRET_SWORD, Moves.MAKE_IT_RAIN, Moves.ATTACK_ORDER, Moves.DIAMOND_STORM ], [Species.XURKITREE]: [ Moves.FLAMETHROWER, Moves.GIGA_DRAIN, Moves.TAIL_GLOW, Moves.THUNDERCLAP ], [Species.CELESTEELA]: [ Moves.RECOVER, Moves.BUZZY_BUZZ, Moves.EARTH_POWER, Moves.OBLIVION_WING ], - [Species.KARTANA]: [ Moves.MIGHTY_CLEAVE, Moves.PSYBLADE, Moves.BITTER_BLADE, Moves.BEHEMOTH_BLADE ], + [Species.KARTANA]: [ Moves.MIGHTY_CLEAVE, Moves.DUAL_CHOP, Moves.BITTER_BLADE, Moves.BEHEMOTH_BLADE ], [Species.GUZZLORD]: [ Moves.SUCKER_PUNCH, Moves.COMEUPPANCE, Moves.SLACK_OFF, Moves.SHED_TAIL ], [Species.NECROZMA]: [ Moves.DYNAMAX_CANNON, Moves.SACRED_FIRE, Moves.ASTRAL_BARRAGE, Moves.CLANGOROUS_SOUL ], [Species.MAGEARNA]: [ Moves.STRENGTH_SAP, Moves.EARTH_POWER, Moves.MOONBLAST, Moves.MAKE_IT_RAIN ], @@ -435,7 +435,7 @@ export const speciesEggMoves = { [Species.MELTAN]: [ Moves.BULLET_PUNCH, Moves.DRAIN_PUNCH, Moves.BULK_UP, Moves.PLASMA_FISTS ], [Species.ALOLA_RATTATA]: [ Moves.FALSE_SURRENDER, Moves.PSYCHIC_FANGS, Moves.COIL, Moves.EXTREME_SPEED ], [Species.ALOLA_SANDSHREW]: [ Moves.SPIKY_SHIELD, Moves.LIQUIDATION, Moves.SHIFT_GEAR, Moves.GLACIAL_LANCE ], - [Species.ALOLA_VULPIX]: [ Moves.MOONBLAST, Moves.PARTING_SHOT, Moves.EARTH_POWER, Moves.REVIVAL_BLESSING ], + [Species.ALOLA_VULPIX]: [ Moves.MOONBLAST, Moves.GLARE, Moves.MYSTICAL_FIRE, Moves.REVIVAL_BLESSING ], [Species.ALOLA_DIGLETT]: [ Moves.THOUSAND_WAVES, Moves.SWORDS_DANCE, Moves.TRIPLE_DIVE, Moves.MOUNTAIN_GALE ], [Species.ALOLA_MEOWTH]: [ Moves.BADDY_BAD, Moves.BUZZY_BUZZ, Moves.PARTING_SHOT, Moves.MAKE_IT_RAIN ], [Species.ALOLA_GEODUDE]: [ Moves.THOUSAND_WAVES, Moves.BULK_UP, Moves.STONE_AXE, Moves.EXTREME_SPEED ], @@ -453,7 +453,7 @@ export const speciesEggMoves = { [Species.CHEWTLE]: [ Moves.ICE_FANG, Moves.PSYCHIC_FANGS, Moves.SHELL_SMASH, Moves.MIGHTY_CLEAVE ], [Species.YAMPER]: [ Moves.ICE_FANG, Moves.SWORDS_DANCE, Moves.THUNDER_FANG, Moves.BOLT_STRIKE ], [Species.ROLYCOLY]: [ Moves.BITTER_BLADE, Moves.BODY_PRESS, Moves.BULK_UP, Moves.DIAMOND_STORM ], - [Species.APPLIN]: [ Moves.CORE_ENFORCER, Moves.DRAGON_HAMMER, Moves.FLOWER_TRICK, Moves.MATCHA_GOTCHA ], + [Species.APPLIN]: [ Moves.CORE_ENFORCER, Moves.COMBAT_TORQUE, Moves.SAPPY_SEED, Moves.MATCHA_GOTCHA ], [Species.SILICOBRA]: [ Moves.SHORE_UP, Moves.SHED_TAIL, Moves.MOUNTAIN_GALE, Moves.THOUSAND_ARROWS ], [Species.CRAMORANT]: [ Moves.APPLE_ACID, Moves.SURF, Moves.BOLT_BEAK, Moves.OBLIVION_WING ], [Species.ARROKUDA]: [ Moves.SUPERCELL_SLAM, Moves.TRIPLE_DIVE, Moves.ICE_SPINNER, Moves.SWORDS_DANCE ], @@ -464,7 +464,7 @@ export const speciesEggMoves = { [Species.HATENNA]: [ Moves.RECOVER, Moves.MOONBLAST, Moves.BUZZY_BUZZ, Moves.TORCH_SONG ], [Species.IMPIDIMP]: [ Moves.SLACK_OFF, Moves.PARTING_SHOT, Moves.OCTOLOCK, Moves.WICKED_BLOW ], [Species.MILCERY]: [ Moves.MOONBLAST, Moves.CHILLY_RECEPTION, Moves.EARTH_POWER, Moves.GEOMANCY ], - [Species.FALINKS]: [ Moves.BATON_PASS, Moves.POWER_TRIP, Moves.HEAL_ORDER, Moves.COMBAT_TORQUE ], + [Species.FALINKS]: [ Moves.BATON_PASS, Moves.POWER_TRIP, Moves.COMBAT_TORQUE, Moves.HEAL_ORDER ], [Species.PINCURCHIN]: [ Moves.TRICK_ROOM, Moves.VOLT_SWITCH, Moves.STRENGTH_SAP, Moves.THUNDERCLAP ], [Species.SNOM]: [ Moves.FROST_BREATH, Moves.HEAL_ORDER, Moves.EARTH_POWER, Moves.SPORE ], [Species.STONJOURNER]: [ Moves.BODY_PRESS, Moves.HELPING_HAND, Moves.ACCELEROCK, Moves.DIAMOND_STORM ], @@ -503,7 +503,7 @@ export const speciesEggMoves = { [Species.GALAR_STUNFISK]: [ Moves.SPIKY_SHIELD, Moves.THOUSAND_ARROWS, Moves.STRENGTH_SAP, Moves.DOUBLE_IRON_BASH ], [Species.HISUI_GROWLITHE]: [ Moves.WAVE_CRASH, Moves.HEAD_SMASH, Moves.VOLT_TACKLE, Moves.DRAGON_DANCE ], [Species.HISUI_VOLTORB]: [ Moves.FROST_BREATH, Moves.NASTY_PLOT, Moves.APPLE_ACID, Moves.ELECTRO_DRIFT ], - [Species.HISUI_QWILFISH]: [ Moves.CEASELESS_EDGE, Moves.KNOCK_OFF, Moves.RECOVER, Moves.FISHIOUS_REND ], + [Species.HISUI_QWILFISH]: [ Moves.CEASELESS_EDGE, Moves.BANEFUL_BUNKER, Moves.RECOVER, Moves.FISHIOUS_REND ], [Species.HISUI_SNEASEL]: [ Moves.DRAIN_PUNCH, Moves.KNOCK_OFF, Moves.PSYCHIC_FANGS, Moves.TRIPLE_AXEL ], [Species.HISUI_ZORUA]: [ Moves.MOONBLAST, Moves.SECRET_SWORD, Moves.PARTING_SHOT, Moves.BLOOD_MOON ], @@ -521,7 +521,7 @@ export const speciesEggMoves = { [Species.NACLI]: [ Moves.BODY_PRESS, Moves.TOXIC, Moves.CURSE, Moves.DIAMOND_STORM ], [Species.CHARCADET]: [ Moves.SACRED_SWORD, Moves.PHOTON_GEYSER, Moves.MOONBLAST, Moves.SPECTRAL_THIEF ], [Species.TADBULB]: [ Moves.PARABOLIC_CHARGE, Moves.SCALD, Moves.EARTH_POWER, Moves.ELECTRO_SHOT ], - [Species.WATTREL]: [ Moves.NASTY_PLOT, Moves.SPLISHY_SPLASH, Moves.SANDSEAR_STORM, Moves.ELECTRO_SHOT ], + [Species.WATTREL]: [ Moves.NASTY_PLOT, Moves.SPLISHY_SPLASH, Moves.SANDSEAR_STORM, Moves.WILDBOLT_STORM ], [Species.MASCHIFF]: [ Moves.PARTING_SHOT, Moves.COMBAT_TORQUE, Moves.PSYCHIC_FANGS, Moves.NO_RETREAT ], [Species.SHROODLE]: [ Moves.GASTRO_ACID, Moves.PARTING_SHOT, Moves.TOXIC, Moves.SKETCH ], [Species.BRAMBLIN]: [ Moves.TAILWIND, Moves.STRENGTH_SAP, Moves.FLOWER_TRICK, Moves.LAST_RESPECTS ], @@ -565,12 +565,12 @@ export const speciesEggMoves = { [Species.ROARING_MOON]: [ Moves.FIRE_LASH, Moves.DRAGON_HAMMER, Moves.METEOR_MASH, Moves.DRAGON_ASCENT ], [Species.IRON_VALIANT]: [ Moves.PLASMA_FISTS, Moves.NO_RETREAT, Moves.SECRET_SWORD, Moves.MAGICAL_TORQUE ], [Species.KORAIDON]: [ Moves.SUNSTEEL_STRIKE, Moves.SOLAR_BLADE, Moves.DRAGON_DARTS, Moves.BITTER_BLADE ], - [Species.MIRAIDON]: [ Moves.ICE_BEAM, Moves.CLANGOROUS_SOUL, Moves.CORE_ENFORCER, Moves.RISING_VOLTAGE ], + [Species.MIRAIDON]: [ Moves.FROST_BREATH, Moves.WILDBOLT_STORM, Moves.SPACIAL_REND, Moves.RISING_VOLTAGE ], [Species.WALKING_WAKE]: [ Moves.BOUNCY_BUBBLE, Moves.FUSION_FLARE, Moves.SLUDGE_WAVE, Moves.CORE_ENFORCER ], [Species.IRON_LEAVES]: [ Moves.BITTER_BLADE, Moves.U_TURN, Moves.MIGHTY_CLEAVE, Moves.VICTORY_DANCE ], [Species.POLTCHAGEIST]: [ Moves.PARABOLIC_CHARGE, Moves.BOUNCY_BUBBLE, Moves.LEECH_SEED, Moves.SPARKLY_SWIRL ], [Species.OKIDOGI]: [ Moves.COMBAT_TORQUE, Moves.TIDY_UP, Moves.DIRE_CLAW, Moves.WICKED_BLOW ], - [Species.MUNKIDORI]: [ Moves.PSYSTRIKE, Moves.HEAT_WAVE, Moves.EARTH_POWER, Moves.MALIGNANT_CHAIN ], + [Species.MUNKIDORI]: [ Moves.TWIN_BEAM, Moves.HEAT_WAVE, Moves.EARTH_POWER, Moves.MALIGNANT_CHAIN ], [Species.FEZANDIPITI]: [ Moves.BARB_BARRAGE, Moves.BONEMERANG, Moves.TRIPLE_AXEL, Moves.VICTORY_DANCE ], [Species.OGERPON]: [ Moves.SLEEP_POWDER, Moves.BONEMERANG, Moves.TRIPLE_AXEL, Moves.FLOWER_TRICK ], [Species.GOUGING_FIRE]: [ Moves.EXTREME_SPEED, Moves.BULK_UP, Moves.SACRED_FIRE, Moves.GLAIVE_RUSH ], @@ -587,8 +587,8 @@ export const speciesEggMoves = { function parseEggMoves(content: string): void { let output = ""; - const speciesNames = Utils.getEnumKeys(Species); - const speciesValues = Utils.getEnumValues(Species); + const speciesNames = getEnumKeys(Species); + const speciesValues = getEnumValues(Species); const lines = content.split(/\n/g); for (const line of lines) { diff --git a/src/data/balance/passives.ts b/src/data/balance/passives.ts index c613be0137b..624e242944b 100644 --- a/src/data/balance/passives.ts +++ b/src/data/balance/passives.ts @@ -11,544 +11,1052 @@ interface StarterPassiveAbilities { export const starterPassiveAbilities: StarterPassiveAbilities = { [Species.BULBASAUR]: { 0: Abilities.GRASSY_SURGE }, - [Species.CHARMANDER]: { 0: Abilities.BEAST_BOOST }, + [Species.IVYSAUR]: { 0: Abilities.GRASSY_SURGE }, + [Species.VENUSAUR]: { 0: Abilities.GRASSY_SURGE, 1: Abilities.SEED_SOWER, 2: Abilities.FLOWER_VEIL }, + [Species.CHARMANDER]: { 0: Abilities.SHEER_FORCE }, + [Species.CHARMELEON]: { 0: Abilities.BEAST_BOOST }, + [Species.CHARIZARD]: { 0: Abilities.BEAST_BOOST, 1: Abilities.LEVITATE, 2: Abilities.TURBOBLAZE, 3: Abilities.UNNERVE }, [Species.SQUIRTLE]: { 0: Abilities.DAUNTLESS_SHIELD }, - [Species.CATERPIE]: { 0: Abilities.MAGICIAN }, - [Species.WEEDLE]: { 0: Abilities.TINTED_LENS }, + [Species.WARTORTLE]: { 0: Abilities.DAUNTLESS_SHIELD }, + [Species.BLASTOISE]: { 0: Abilities.DAUNTLESS_SHIELD, 1: Abilities.BULLETPROOF, 2: Abilities.BULLETPROOF }, + [Species.CATERPIE]: { 0: Abilities.GLUTTONY }, + [Species.METAPOD]: { 0: Abilities.STURDY }, + [Species.BUTTERFREE]: { 0: Abilities.MAGICIAN, 1: Abilities.MAGICIAN }, + [Species.WEEDLE]: { 0: Abilities.POISON_TOUCH }, + [Species.KAKUNA]: { 0: Abilities.STURDY }, + [Species.BEEDRILL]: { 0: Abilities.ADAPTABILITY, 1: Abilities.TINTED_LENS }, [Species.PIDGEY]: { 0: Abilities.SHEER_FORCE }, + [Species.PIDGEOTTO]: { 0: Abilities.SHEER_FORCE }, + [Species.PIDGEOT]: { 0: Abilities.SHEER_FORCE, 1: Abilities.SHEER_FORCE }, [Species.RATTATA]: { 0: Abilities.STRONG_JAW }, + [Species.RATICATE]: { 0: Abilities.STRONG_JAW }, [Species.SPEAROW]: { 0: Abilities.MOXIE }, + [Species.FEAROW]: { 0: Abilities.MOXIE }, [Species.EKANS]: { 0: Abilities.REGENERATOR }, + [Species.ARBOK]: { 0: Abilities.REGENERATOR }, [Species.SANDSHREW]: { 0: Abilities.TOUGH_CLAWS }, + [Species.SANDSLASH]: { 0: Abilities.TOUGH_CLAWS }, [Species.NIDORAN_F]: { 0: Abilities.FLARE_BOOST }, + [Species.NIDORINA]: { 0: Abilities.FLARE_BOOST }, + [Species.NIDOQUEEN]: { 0: Abilities.FLARE_BOOST }, [Species.NIDORAN_M]: { 0: Abilities.GUTS }, + [Species.NIDORINO]: { 0: Abilities.GUTS }, + [Species.NIDOKING]: { 0: Abilities.GUTS }, [Species.VULPIX]: { 0: Abilities.FUR_COAT }, + [Species.NINETALES]: { 0: Abilities.FUR_COAT }, [Species.ZUBAT]: { 0: Abilities.INTIMIDATE }, + [Species.GOLBAT]: { 0: Abilities.INTIMIDATE }, + [Species.CROBAT]: { 0: Abilities.INTIMIDATE }, [Species.ODDISH]: { 0: Abilities.TRIAGE }, + [Species.GLOOM]: { 0: Abilities.TRIAGE }, + [Species.VILEPLUME]: { 0: Abilities.TRIAGE }, + [Species.BELLOSSOM]: { 0: Abilities.TRIAGE }, [Species.PARAS]: { 0: Abilities.TRIAGE }, - [Species.VENONAT]: { 0: Abilities.SIMPLE }, + [Species.PARASECT]: { 0: Abilities.TRIAGE }, + [Species.VENONAT]: { 0: Abilities.FLUFFY }, + [Species.VENOMOTH]: { 0: Abilities.SIMPLE }, [Species.DIGLETT]: { 0: Abilities.STURDY }, - [Species.MEOWTH]: { 0: Abilities.TOUGH_CLAWS }, + [Species.DUGTRIO]: { 0: Abilities.STURDY }, + [Species.MEOWTH]: { 0: Abilities.TOUGH_CLAWS, 1: Abilities.TOUGH_CLAWS }, + [Species.PERSIAN]: { 0: Abilities.TOUGH_CLAWS }, [Species.PSYDUCK]: { 0: Abilities.SIMPLE }, + [Species.GOLDUCK]: { 0: Abilities.SIMPLE }, [Species.MANKEY]: { 0: Abilities.IRON_FIST }, + [Species.PRIMEAPE]: { 0: Abilities.IRON_FIST }, + [Species.ANNIHILAPE]: { 0: Abilities.IRON_FIST }, [Species.GROWLITHE]: { 0: Abilities.FLUFFY }, + [Species.ARCANINE]: { 0: Abilities.FLUFFY }, [Species.POLIWAG]: { 0: Abilities.NO_GUARD }, - [Species.ABRA]: { 0: Abilities.MAGICIAN }, + [Species.POLIWHIRL]: { 0: Abilities.NO_GUARD }, + [Species.POLIWRATH]: { 0: Abilities.NO_GUARD }, + [Species.POLITOED]: { 0: Abilities.NO_GUARD }, + [Species.ABRA]: { 0: Abilities.COMATOSE }, + [Species.KADABRA]: { 0: Abilities.MAGICIAN }, + [Species.ALAKAZAM]: { 0: Abilities.MAGICIAN, 1: Abilities.MAGICIAN }, [Species.MACHOP]: { 0: Abilities.QUICK_FEET }, + [Species.MACHOKE]: { 0: Abilities.QUICK_FEET }, + [Species.MACHAMP]: { 0: Abilities.QUICK_FEET, 1: Abilities.QUICK_FEET }, [Species.BELLSPROUT]: { 0: Abilities.FLOWER_GIFT }, + [Species.WEEPINBELL]: { 0: Abilities.FLOWER_GIFT }, + [Species.VICTREEBEL]: { 0: Abilities.FLOWER_GIFT }, [Species.TENTACOOL]: { 0: Abilities.TOXIC_CHAIN }, + [Species.TENTACRUEL]: { 0: Abilities.TOXIC_CHAIN }, [Species.GEODUDE]: { 0: Abilities.DRY_SKIN }, + [Species.GRAVELER]: { 0: Abilities.DRY_SKIN }, + [Species.GOLEM]: { 0: Abilities.DRY_SKIN }, [Species.PONYTA]: { 0: Abilities.MAGIC_GUARD }, + [Species.RAPIDASH]: { 0: Abilities.MAGIC_GUARD }, [Species.SLOWPOKE]: { 0: Abilities.UNAWARE }, + [Species.SLOWBRO]: { 0: Abilities.UNAWARE, 1: Abilities.REGENERATOR }, + [Species.SLOWKING]: { 0: Abilities.UNAWARE }, [Species.MAGNEMITE]: { 0: Abilities.LEVITATE }, + [Species.MAGNETON]: { 0: Abilities.LEVITATE }, + [Species.MAGNEZONE]: { 0: Abilities.LEVITATE }, [Species.FARFETCHD]: { 0: Abilities.SNIPER }, [Species.DODUO]: { 0: Abilities.PARENTAL_BOND }, + [Species.DODRIO]: { 0: Abilities.PARENTAL_BOND }, [Species.SEEL]: { 0: Abilities.WATER_BUBBLE }, + [Species.DEWGONG]: { 0: Abilities.WATER_BUBBLE }, [Species.GRIMER]: { 0: Abilities.WATER_ABSORB }, - [Species.SHELLDER]: { 0: Abilities.ICE_SCALES }, + [Species.MUK]: { 0: Abilities.WATER_ABSORB }, + [Species.SHELLDER]: { 0: Abilities.STURDY }, + [Species.CLOYSTER]: { 0: Abilities.ICE_SCALES }, [Species.GASTLY]: { 0: Abilities.SHADOW_SHIELD }, + [Species.HAUNTER]: { 0: Abilities.SHADOW_SHIELD }, + [Species.GENGAR]: { 0: Abilities.SHADOW_SHIELD, 1: Abilities.UNNERVE, 2: Abilities.GLUTTONY }, [Species.ONIX]: { 0: Abilities.ROCKY_PAYLOAD }, + [Species.STEELIX]: { 0: Abilities.ROCKY_PAYLOAD, 1: Abilities.SAND_SPIT }, [Species.DROWZEE]: { 0: Abilities.MAGICIAN }, + [Species.HYPNO]: { 0: Abilities.MAGICIAN }, [Species.KRABBY]: { 0: Abilities.UNBURDEN }, + [Species.KINGLER]: { 0: Abilities.UNBURDEN, 1: Abilities.UNBURDEN }, [Species.VOLTORB]: { 0: Abilities.TRANSISTOR }, + [Species.ELECTRODE]: { 0: Abilities.TRANSISTOR }, [Species.EXEGGCUTE]: { 0: Abilities.RIPEN }, + [Species.EXEGGUTOR]: { 0: Abilities.RIPEN }, + [Species.ALOLA_EXEGGUTOR]: { 0: Abilities.UNBURDEN }, [Species.CUBONE]: { 0: Abilities.PARENTAL_BOND }, + [Species.MAROWAK]: { 0: Abilities.PARENTAL_BOND }, + [Species.ALOLA_MAROWAK]: { 0: Abilities.PARENTAL_BOND }, [Species.LICKITUNG]: { 0: Abilities.CHEEK_POUCH }, - [Species.KOFFING]: { 0: Abilities.PARENTAL_BOND }, - [Species.RHYHORN]: { 0: Abilities.FILTER }, + [Species.LICKILICKY]: { 0: Abilities.CHEEK_POUCH }, + [Species.KOFFING]: { 0: Abilities.WHITE_SMOKE }, + [Species.WEEZING]: { 0: Abilities.PARENTAL_BOND }, + [Species.GALAR_WEEZING]: { 0: Abilities.PARENTAL_BOND }, + [Species.RHYHORN]: { 0: Abilities.SOLID_ROCK }, + [Species.RHYDON]: { 0: Abilities.SOLID_ROCK }, + [Species.RHYPERIOR]: { 0: Abilities.FILTER }, [Species.TANGELA]: { 0: Abilities.SEED_SOWER }, - [Species.KANGASKHAN]: { 0: Abilities.TECHNICIAN }, + [Species.TANGROWTH]: { 0: Abilities.SEED_SOWER }, + [Species.KANGASKHAN]: { 0: Abilities.TECHNICIAN, 1: Abilities.TECHNICIAN }, [Species.HORSEA]: { 0: Abilities.DRAGONS_MAW }, + [Species.SEADRA]: { 0: Abilities.DRAGONS_MAW }, + [Species.KINGDRA]: { 0: Abilities.MULTISCALE }, [Species.GOLDEEN]: { 0: Abilities.MULTISCALE }, + [Species.SEAKING]: { 0: Abilities.MULTISCALE }, [Species.STARYU]: { 0: Abilities.REGENERATOR }, + [Species.STARMIE]: { 0: Abilities.REGENERATOR }, [Species.SCYTHER]: { 0: Abilities.TINTED_LENS }, - [Species.PINSIR]: { 0: Abilities.TINTED_LENS }, + [Species.SCIZOR]: { 0: Abilities.TOUGH_CLAWS, 1: Abilities.TOUGH_CLAWS }, + [Species.KLEAVOR]: { 0: Abilities.WEAK_ARMOR }, + [Species.PINSIR]: { 0: Abilities.TINTED_LENS, 1: Abilities.MOLD_BREAKER }, [Species.TAUROS]: { 0: Abilities.STAMINA }, [Species.MAGIKARP]: { 0: Abilities.MULTISCALE }, - [Species.LAPRAS]: { 0: Abilities.LIGHTNING_ROD }, + [Species.GYARADOS]: { 0: Abilities.MULTISCALE, 1: Abilities.MULTISCALE }, + [Species.LAPRAS]: { 0: Abilities.LIGHTNING_ROD, 1: Abilities.FILTER }, [Species.DITTO]: { 0: Abilities.ADAPTABILITY }, - [Species.EEVEE]: { 0: Abilities.PICKUP }, - [Species.PORYGON]: { 0: Abilities.PROTEAN }, + [Species.EEVEE]: { 0: Abilities.PICKUP, 1: Abilities.PICKUP, 2: Abilities.FLUFFY }, + [Species.VAPOREON]: { 0: Abilities.REGENERATOR }, + [Species.JOLTEON]: { 0: Abilities.TRANSISTOR }, + [Species.FLAREON]: { 0: Abilities.FUR_COAT }, + [Species.ESPEON]: { 0: Abilities.MAGICIAN }, + [Species.UMBREON]: { 0: Abilities.TOXIC_CHAIN }, + [Species.LEAFEON]: { 0: Abilities.GRASSY_SURGE }, + [Species.GLACEON]: { 0: Abilities.SNOW_WARNING }, + [Species.SYLVEON]: { 0: Abilities.COMPETITIVE }, + [Species.PORYGON]: { 0: Abilities.TRANSISTOR }, + [Species.PORYGON2]: { 0: Abilities.TRANSISTOR }, + [Species.PORYGON_Z]: { 0: Abilities.PROTEAN }, [Species.OMANYTE]: { 0: Abilities.STURDY }, + [Species.OMASTAR]: { 0: Abilities.STURDY }, [Species.KABUTO]: { 0: Abilities.TOUGH_CLAWS }, - [Species.AERODACTYL]: { 0: Abilities.ORICHALCUM_PULSE }, + [Species.KABUTOPS]: { 0: Abilities.TOUGH_CLAWS }, + [Species.AERODACTYL]: { 0: Abilities.INTIMIDATE, 1: Abilities.INTIMIDATE }, [Species.ARTICUNO]: { 0: Abilities.SNOW_WARNING }, [Species.ZAPDOS]: { 0: Abilities.DRIZZLE }, [Species.MOLTRES]: { 0: Abilities.DROUGHT }, - [Species.DRATINI]: { 0: Abilities.AERILATE }, - [Species.MEWTWO]: { 0: Abilities.NEUROFORCE }, + [Species.DRATINI]: { 0: Abilities.MULTISCALE }, + [Species.DRAGONAIR]: { 0: Abilities.MULTISCALE }, + [Species.DRAGONITE]: { 0: Abilities.AERILATE }, + [Species.MEWTWO]: { 0: Abilities.NEUROFORCE, 1: Abilities.NEUROFORCE, 2: Abilities.NEUROFORCE }, [Species.MEW]: { 0: Abilities.PROTEAN }, - [Species.CHIKORITA]: { 0: Abilities.THICK_FAT }, - [Species.CYNDAQUIL]: { 0: Abilities.DROUGHT }, + [Species.CHIKORITA]: { 0: Abilities.CUTE_CHARM }, + [Species.BAYLEEF]: { 0: Abilities.THICK_FAT }, + [Species.MEGANIUM]: { 0: Abilities.THICK_FAT }, + [Species.CYNDAQUIL]: { 0: Abilities.WHITE_SMOKE }, + [Species.QUILAVA]: { 0: Abilities.DROUGHT }, + [Species.TYPHLOSION]: { 0: Abilities.DROUGHT }, + [Species.HISUI_TYPHLOSION]: { 0: Abilities.DROUGHT }, [Species.TOTODILE]: { 0: Abilities.TOUGH_CLAWS }, + [Species.CROCONAW]: { 0: Abilities.TOUGH_CLAWS }, + [Species.FERALIGATR]: { 0: Abilities.TOUGH_CLAWS }, [Species.SENTRET]: { 0: Abilities.PICKUP }, + [Species.FURRET]: { 0: Abilities.PICKUP }, [Species.HOOTHOOT]: { 0: Abilities.AERILATE }, + [Species.NOCTOWL]: { 0: Abilities.AERILATE }, [Species.LEDYBA]: { 0: Abilities.PRANKSTER }, + [Species.LEDIAN]: { 0: Abilities.PRANKSTER }, [Species.SPINARAK]: { 0: Abilities.PRANKSTER }, + [Species.ARIADOS]: { 0: Abilities.PRANKSTER }, [Species.CHINCHOU]: { 0: Abilities.REGENERATOR }, - [Species.PICHU]: { 0: Abilities.ELECTRIC_SURGE }, - [Species.CLEFFA]: { 0: Abilities.ANALYTIC }, + [Species.LANTURN]: { 0: Abilities.REGENERATOR }, + [Species.PICHU]: { 0: Abilities.ELECTRIC_SURGE, 1: Abilities.STURDY }, + [Species.PIKACHU]: { 0: Abilities.ELECTRIC_SURGE, 1: Abilities.STURDY, 2: Abilities.COSTAR, 3: Abilities.IRON_FIST, 4: Abilities.QUEENLY_MAJESTY, 5: Abilities.MISTY_SURGE, 6: Abilities.TINTED_LENS, 7: Abilities.LIBERO, 8: Abilities.THICK_FAT }, + [Species.RAICHU]: { 0: Abilities.ELECTRIC_SURGE }, + [Species.ALOLA_RAICHU]: { 0: Abilities.ELECTRIC_SURGE }, + [Species.CLEFFA]: { 0: Abilities.PRANKSTER }, + [Species.CLEFAIRY]: { 0: Abilities.PRANKSTER }, + [Species.CLEFABLE]: { 0: Abilities.ANALYTIC }, [Species.IGGLYBUFF]: { 0: Abilities.HUGE_POWER }, + [Species.JIGGLYPUFF]: { 0: Abilities.HUGE_POWER }, + [Species.WIGGLYTUFF]: { 0: Abilities.HUGE_POWER }, [Species.TOGEPI]: { 0: Abilities.PIXILATE }, - [Species.NATU]: { 0: Abilities.SHEER_FORCE }, + [Species.TOGETIC]: { 0: Abilities.PIXILATE }, + [Species.TOGEKISS]: { 0: Abilities.PIXILATE }, + [Species.NATU]: { 0: Abilities.TINTED_LENS }, + [Species.XATU]: { 0: Abilities.SHEER_FORCE }, [Species.MAREEP]: { 0: Abilities.ELECTROMORPHOSIS }, - [Species.HOPPIP]: { 0: Abilities.FLUFFY }, + [Species.FLAAFFY]: { 0: Abilities.ELECTROMORPHOSIS }, + [Species.AMPHAROS]: { 0: Abilities.ELECTROMORPHOSIS, 1: Abilities.ELECTROMORPHOSIS }, + [Species.HOPPIP]: { 0: Abilities.WIND_RIDER }, + [Species.SKIPLOOM]: { 0: Abilities.WIND_RIDER }, + [Species.JUMPLUFF]: { 0: Abilities.FLUFFY }, [Species.AIPOM]: { 0: Abilities.SCRAPPY }, + [Species.AMBIPOM]: { 0: Abilities.SCRAPPY }, [Species.SUNKERN]: { 0: Abilities.DROUGHT }, - [Species.YANMA]: { 0: Abilities.SHEER_FORCE }, - [Species.WOOPER]: { 0: Abilities.COMATOSE }, + [Species.SUNFLORA]: { 0: Abilities.DROUGHT }, + [Species.YANMA]: { 0: Abilities.TECHNICIAN }, + [Species.YANMEGA]: { 0: Abilities.SHEER_FORCE }, + [Species.WOOPER]: { 0: Abilities.WATER_VEIL }, + [Species.QUAGSIRE]: { 0: Abilities.COMATOSE }, [Species.MURKROW]: { 0: Abilities.DARK_AURA }, + [Species.HONCHKROW]: { 0: Abilities.DARK_AURA }, [Species.MISDREAVUS]: { 0: Abilities.BEADS_OF_RUIN }, - [Species.UNOWN]: { 0: Abilities.PICKUP }, + [Species.MISMAGIUS]: { 0: Abilities.BEADS_OF_RUIN }, + [Species.UNOWN]: { 0: Abilities.ADAPTABILITY, 1: Abilities.BEAST_BOOST, 2: Abilities.CONTRARY, 3: Abilities.DAZZLING, 4: Abilities.EMERGENCY_EXIT, 5: Abilities.FRIEND_GUARD, 6: Abilities.GOOD_AS_GOLD, 7: Abilities.HONEY_GATHER, 8: Abilities.IMPOSTER, 9: Abilities.JUSTIFIED, 10: Abilities.KLUTZ, 11: Abilities.LIBERO, 12: Abilities.MOODY, 13: Abilities.NEUTRALIZING_GAS, 14: Abilities.OPPORTUNIST, 15: Abilities.PICKUP, 16: Abilities.QUICK_DRAW, 17: Abilities.RUN_AWAY, 18: Abilities.SIMPLE, 19: Abilities.TRACE, 20: Abilities.UNNERVE, 21: Abilities.VICTORY_STAR, 22: Abilities.WANDERING_SPIRIT, 23: Abilities.FAIRY_AURA, 24: Abilities.DARK_AURA, 25: Abilities.AURA_BREAK, 26: Abilities.PURE_POWER, 27: Abilities.UNAWARE }, [Species.GIRAFARIG]: { 0: Abilities.PARENTAL_BOND }, - [Species.PINECO]: { 0: Abilities.IRON_BARBS }, + [Species.FARIGIRAF]: { 0: Abilities.PARENTAL_BOND }, + [Species.PINECO]: { 0: Abilities.ROUGH_SKIN }, + [Species.FORRETRESS]: { 0: Abilities.IRON_BARBS }, [Species.DUNSPARCE]: { 0: Abilities.UNAWARE }, - [Species.GLIGAR]: { 0: Abilities.TOXIC_BOOST }, + [Species.DUDUNSPARCE]: { 0: Abilities.UNAWARE, 1: Abilities.UNAWARE }, + [Species.GLIGAR]: { 0: Abilities.POISON_TOUCH }, + [Species.GLISCOR]: { 0: Abilities.TOXIC_BOOST }, [Species.SNUBBULL]: { 0: Abilities.PIXILATE }, + [Species.GRANBULL]: { 0: Abilities.PIXILATE }, [Species.QWILFISH]: { 0: Abilities.TOXIC_DEBRIS }, [Species.SHUCKLE]: { 0: Abilities.HARVEST }, - [Species.HERACROSS]: { 0: Abilities.TECHNICIAN }, + [Species.HERACROSS]: { 0: Abilities.TECHNICIAN, 1: Abilities.TECHNICIAN }, [Species.SNEASEL]: { 0: Abilities.TOUGH_CLAWS }, - [Species.TEDDIURSA]: { 0: Abilities.THICK_FAT }, - [Species.SLUGMA]: { 0: Abilities.DESOLATE_LAND }, - [Species.SWINUB]: { 0: Abilities.SLUSH_RUSH }, + [Species.WEAVILE]: { 0: Abilities.TOUGH_CLAWS }, + [Species.TEDDIURSA]: { 0: Abilities.RUN_AWAY }, + [Species.URSARING]: { 0: Abilities.THICK_FAT }, + [Species.URSALUNA]: { 0: Abilities.THICK_FAT }, + [Species.SLUGMA]: { 0: Abilities.DROUGHT }, + [Species.MAGCARGO]: { 0: Abilities.DESOLATE_LAND }, + [Species.SWINUB]: { 0: Abilities.UNAWARE }, + [Species.PILOSWINE]: { 0: Abilities.UNAWARE }, + [Species.MAMOSWINE]: { 0: Abilities.SLUSH_RUSH }, [Species.CORSOLA]: { 0: Abilities.STORM_DRAIN }, [Species.REMORAID]: { 0: Abilities.SIMPLE }, + [Species.OCTILLERY]: { 0: Abilities.SIMPLE }, [Species.DELIBIRD]: { 0: Abilities.HUGE_POWER }, [Species.SKARMORY]: { 0: Abilities.LIGHTNING_ROD }, - [Species.HOUNDOUR]: { 0: Abilities.LIGHTNING_ROD }, - [Species.PHANPY]: { 0: Abilities.SPEED_BOOST }, + [Species.HOUNDOUR]: { 0: Abilities.BALL_FETCH }, + [Species.HOUNDOOM]: { 0: Abilities.LIGHTNING_ROD, 1: Abilities.LIGHTNING_ROD }, + [Species.PHANPY]: { 0: Abilities.STURDY }, + [Species.DONPHAN]: { 0: Abilities.SPEED_BOOST }, [Species.STANTLER]: { 0: Abilities.SPEED_BOOST }, + [Species.WYRDEER]: { 0: Abilities.SPEED_BOOST }, [Species.SMEARGLE]: { 0: Abilities.PRANKSTER }, - [Species.TYROGUE]: { 0: Abilities.MOXIE }, + [Species.TYROGUE]: { 0: Abilities.DEFIANT }, + [Species.HITMONLEE]: { 0: Abilities.SHEER_FORCE }, + [Species.HITMONCHAN]: { 0: Abilities.MOXIE }, + [Species.HITMONTOP]: { 0: Abilities.SPEED_BOOST }, [Species.SMOOCHUM]: { 0: Abilities.PSYCHIC_SURGE }, + [Species.JYNX]: { 0: Abilities.PSYCHIC_SURGE }, [Species.ELEKID]: { 0: Abilities.SHEER_FORCE }, + [Species.ELECTABUZZ]: { 0: Abilities.SHEER_FORCE }, + [Species.ELECTIVIRE]: { 0: Abilities.SHEER_FORCE }, [Species.MAGBY]: { 0: Abilities.SHEER_FORCE }, + [Species.MAGMAR]: { 0: Abilities.SHEER_FORCE }, + [Species.MAGMORTAR]: { 0: Abilities.SHEER_FORCE }, [Species.MILTANK]: { 0: Abilities.STAMINA }, [Species.RAIKOU]: { 0: Abilities.BEAST_BOOST }, [Species.ENTEI]: { 0: Abilities.BEAST_BOOST }, [Species.SUICUNE]: { 0: Abilities.BEAST_BOOST }, [Species.LARVITAR]: { 0: Abilities.SOLID_ROCK }, + [Species.PUPITAR]: { 0: Abilities.SOLID_ROCK }, + [Species.TYRANITAR]: { 0: Abilities.SOLID_ROCK, 1: Abilities.SOLID_ROCK }, [Species.LUGIA]: { 0: Abilities.DELTA_STREAM }, [Species.HO_OH]: { 0: Abilities.MAGIC_GUARD }, [Species.CELEBI]: { 0: Abilities.PSYCHIC_SURGE }, [Species.TREECKO]: { 0: Abilities.TINTED_LENS }, + [Species.GROVYLE]: { 0: Abilities.TINTED_LENS }, + [Species.SCEPTILE]: { 0: Abilities.TINTED_LENS, 1: Abilities.TINTED_LENS }, [Species.TORCHIC]: { 0: Abilities.DEFIANT }, - [Species.MUDKIP]: { 0: Abilities.DRIZZLE }, + [Species.COMBUSKEN]: { 0: Abilities.DEFIANT }, + [Species.BLAZIKEN]: { 0: Abilities.DEFIANT, 1: Abilities.DEFIANT }, + [Species.MUDKIP]: { 0: Abilities.REGENERATOR }, + [Species.MARSHTOMP]: { 0: Abilities.REGENERATOR }, + [Species.SWAMPERT]: { 0: Abilities.REGENERATOR, 1: Abilities.DRIZZLE }, [Species.POOCHYENA]: { 0: Abilities.TOUGH_CLAWS }, + [Species.MIGHTYENA]: { 0: Abilities.TOUGH_CLAWS }, [Species.ZIGZAGOON]: { 0: Abilities.RUN_AWAY }, - [Species.WURMPLE]: { 0: Abilities.SIMPLE }, + [Species.LINOONE]: { 0: Abilities.RUN_AWAY }, + [Species.WURMPLE]: { 0: Abilities.GLUTTONY }, + [Species.SILCOON]: { 0: Abilities.STURDY }, + [Species.BEAUTIFLY]: { 0: Abilities.SIMPLE }, + [Species.CASCOON]: { 0: Abilities.STURDY }, + [Species.DUSTOX]: { 0: Abilities.SIMPLE }, [Species.LOTAD]: { 0: Abilities.DRIZZLE }, - [Species.SEEDOT]: { 0: Abilities.SHARPNESS }, + [Species.LOMBRE]: { 0: Abilities.DRIZZLE }, + [Species.LUDICOLO]: { 0: Abilities.DRIZZLE }, + [Species.SEEDOT]: { 0: Abilities.STURDY }, + [Species.NUZLEAF]: { 0: Abilities.SHARPNESS }, + [Species.SHIFTRY]: { 0: Abilities.SHARPNESS }, [Species.TAILLOW]: { 0: Abilities.AERILATE }, - [Species.WINGULL]: { 0: Abilities.SWIFT_SWIM }, - [Species.RALTS]: { 0: Abilities.PSYCHIC_SURGE }, + [Species.SWELLOW]: { 0: Abilities.AERILATE }, + [Species.WINGULL]: { 0: Abilities.WATER_ABSORB }, + [Species.PELIPPER]: { 0: Abilities.SWIFT_SWIM }, + [Species.RALTS]: { 0: Abilities.NEUROFORCE }, + [Species.KIRLIA]: { 0: Abilities.NEUROFORCE }, + [Species.GARDEVOIR]: { 0: Abilities.NEUROFORCE, 1: Abilities.PSYCHIC_SURGE }, + [Species.GALLADE]: { 0: Abilities.NEUROFORCE, 1: Abilities.SHARPNESS }, [Species.SURSKIT]: { 0: Abilities.WATER_BUBBLE }, + [Species.MASQUERAIN]: { 0: Abilities.WATER_BUBBLE }, [Species.SHROOMISH]: { 0: Abilities.GUTS }, + [Species.BRELOOM]: { 0: Abilities.GUTS }, [Species.SLAKOTH]: { 0: Abilities.GUTS }, - [Species.NINCADA]: { 0: Abilities.MAGIC_GUARD }, + [Species.VIGOROTH]: { 0: Abilities.GUTS }, + [Species.SLAKING]: { 0: Abilities.GUTS }, + [Species.NINCADA]: { 0: Abilities.TECHNICIAN }, + [Species.NINJASK]: { 0: Abilities.TECHNICIAN }, + [Species.SHEDINJA]: { 0: Abilities.MAGIC_GUARD }, [Species.WHISMUR]: { 0: Abilities.PUNK_ROCK }, + [Species.LOUDRED]: { 0: Abilities.PUNK_ROCK }, + [Species.EXPLOUD]: { 0: Abilities.PUNK_ROCK }, [Species.MAKUHITA]: { 0: Abilities.STAMINA }, + [Species.HARIYAMA]: { 0: Abilities.STAMINA }, [Species.AZURILL]: { 0: Abilities.MISTY_SURGE }, - [Species.NOSEPASS]: { 0: Abilities.LEVITATE }, + [Species.MARILL]: { 0: Abilities.MISTY_SURGE }, + [Species.AZUMARILL]: { 0: Abilities.MISTY_SURGE }, + [Species.NOSEPASS]: { 0: Abilities.SOLID_ROCK }, + [Species.PROBOPASS]: { 0: Abilities.LEVITATE }, [Species.SKITTY]: { 0: Abilities.SCRAPPY }, - [Species.SABLEYE]: { 0: Abilities.UNNERVE }, - [Species.MAWILE]: { 0: Abilities.UNNERVE }, + [Species.DELCATTY]: { 0: Abilities.SCRAPPY }, + [Species.SABLEYE]: { 0: Abilities.UNNERVE, 1: Abilities.UNNERVE }, + [Species.MAWILE]: { 0: Abilities.ADAPTABILITY, 1: Abilities.INTIMIDATE }, [Species.ARON]: { 0: Abilities.EARTH_EATER }, + [Species.LAIRON]: { 0: Abilities.EARTH_EATER }, + [Species.AGGRON]: { 0: Abilities.EARTH_EATER, 1: Abilities.ROCKY_PAYLOAD }, [Species.MEDITITE]: { 0: Abilities.MINDS_EYE }, - [Species.ELECTRIKE]: { 0: Abilities.FLASH_FIRE }, + [Species.MEDICHAM]: { 0: Abilities.MINDS_EYE, 1: Abilities.MINDS_EYE }, + [Species.ELECTRIKE]: { 0: Abilities.BALL_FETCH }, + [Species.MANECTRIC]: { 0: Abilities.FLASH_FIRE, 1: Abilities.FLASH_FIRE }, [Species.PLUSLE]: { 0: Abilities.POWER_SPOT }, [Species.MINUN]: { 0: Abilities.POWER_SPOT }, [Species.VOLBEAT]: { 0: Abilities.HONEY_GATHER }, [Species.ILLUMISE]: { 0: Abilities.HONEY_GATHER }, [Species.GULPIN]: { 0: Abilities.EARTH_EATER }, + [Species.SWALOT]: { 0: Abilities.EARTH_EATER }, [Species.CARVANHA]: { 0: Abilities.SHEER_FORCE }, + [Species.SHARPEDO]: { 0: Abilities.SHEER_FORCE, 1: Abilities.SPEED_BOOST }, [Species.WAILMER]: { 0: Abilities.LEVITATE }, - [Species.NUMEL]: { 0: Abilities.FUR_COAT }, + [Species.WAILORD]: { 0: Abilities.LEVITATE }, + [Species.NUMEL]: { 0: Abilities.SOLID_ROCK }, + [Species.CAMERUPT]: { 0: Abilities.FUR_COAT, 1: Abilities.STAMINA }, [Species.TORKOAL]: { 0: Abilities.ANALYTIC }, [Species.SPOINK]: { 0: Abilities.PSYCHIC_SURGE }, + [Species.GRUMPIG]: { 0: Abilities.PSYCHIC_SURGE }, [Species.SPINDA]: { 0: Abilities.SIMPLE }, [Species.TRAPINCH]: { 0: Abilities.ADAPTABILITY }, + [Species.VIBRAVA]: { 0: Abilities.ADAPTABILITY }, + [Species.FLYGON]: { 0: Abilities.ADAPTABILITY }, [Species.CACNEA]: { 0: Abilities.SAND_RUSH }, + [Species.CACTURNE]: { 0: Abilities.SAND_RUSH }, [Species.SWABLU]: { 0: Abilities.FLUFFY }, + [Species.ALTARIA]: { 0: Abilities.FLUFFY, 1: Abilities.FLUFFY }, [Species.ZANGOOSE]: { 0: Abilities.POISON_HEAL }, [Species.SEVIPER]: { 0: Abilities.MULTISCALE }, [Species.LUNATONE]: { 0: Abilities.SHADOW_SHIELD }, [Species.SOLROCK]: { 0: Abilities.DROUGHT }, [Species.BARBOACH]: { 0: Abilities.SIMPLE }, + [Species.WHISCASH]: { 0: Abilities.SIMPLE }, [Species.CORPHISH]: { 0: Abilities.TOUGH_CLAWS }, + [Species.CRAWDAUNT]: { 0: Abilities.TOUGH_CLAWS }, [Species.BALTOY]: { 0: Abilities.WELL_BAKED_BODY }, + [Species.CLAYDOL]: { 0: Abilities.WELL_BAKED_BODY }, [Species.LILEEP]: { 0: Abilities.SEED_SOWER }, + [Species.CRADILY]: { 0: Abilities.SEED_SOWER }, [Species.ANORITH]: { 0: Abilities.WATER_ABSORB }, - [Species.FEEBAS]: { 0: Abilities.MAGIC_GUARD }, - [Species.CASTFORM]: { 0: Abilities.ADAPTABILITY }, + [Species.ARMALDO]: { 0: Abilities.WATER_ABSORB }, + [Species.FEEBAS]: { 0: Abilities.MULTISCALE }, + [Species.MILOTIC]: { 0: Abilities.MAGIC_GUARD }, + [Species.CASTFORM]: { 0: Abilities.ADAPTABILITY, 1: Abilities.ADAPTABILITY, 2: Abilities.ADAPTABILITY, 3: Abilities.ADAPTABILITY }, [Species.KECLEON]: { 0: Abilities.ADAPTABILITY }, [Species.SHUPPET]: { 0: Abilities.SHADOW_SHIELD }, + [Species.BANETTE]: { 0: Abilities.SHADOW_SHIELD, 1: Abilities.SHADOW_SHIELD }, [Species.DUSKULL]: { 0: Abilities.UNNERVE }, + [Species.DUSCLOPS]: { 0: Abilities.UNNERVE }, + [Species.DUSKNOIR]: { 0: Abilities.UNNERVE }, [Species.TROPIUS]: { 0: Abilities.RIPEN }, - [Species.ABSOL]: { 0: Abilities.SHARPNESS }, + [Species.ABSOL]: { 0: Abilities.SHARPNESS, 1: Abilities.SHARPNESS }, [Species.WYNAUT]: { 0: Abilities.STURDY }, + [Species.WOBBUFFET]: { 0: Abilities.STURDY }, [Species.SNORUNT]: { 0: Abilities.SNOW_WARNING }, + [Species.GLALIE]: { 0: Abilities.SNOW_WARNING, 1: Abilities.SNOW_WARNING }, + [Species.FROSLASS]: { 0: Abilities.SNOW_WARNING }, [Species.SPHEAL]: { 0: Abilities.UNAWARE }, - [Species.CLAMPERL]: { 0: Abilities.ARENA_TRAP }, + [Species.SEALEO]: { 0: Abilities.UNAWARE }, + [Species.WALREIN]: { 0: Abilities.UNAWARE }, + [Species.CLAMPERL]: { 0: Abilities.DAUNTLESS_SHIELD }, + [Species.GOREBYSS]: { 0: Abilities.ARENA_TRAP }, + [Species.HUNTAIL]: { 0: Abilities.ARENA_TRAP }, [Species.RELICANTH]: { 0: Abilities.PRIMORDIAL_SEA }, [Species.LUVDISC]: { 0: Abilities.MULTISCALE }, - [Species.BAGON]: { 0: Abilities.MOLD_BREAKER }, + [Species.BAGON]: { 0: Abilities.INTIMIDATE }, + [Species.SHELGON]: { 0: Abilities.ANGER_SHELL }, + [Species.SALAMENCE]: { 0: Abilities.GALE_WINGS, 1: Abilities.ROCK_HEAD }, [Species.BELDUM]: { 0: Abilities.LEVITATE }, + [Species.METANG]: { 0: Abilities.LEVITATE }, + [Species.METAGROSS]: { 0: Abilities.LEVITATE, 1: Abilities.FULL_METAL_BODY }, [Species.REGIROCK]: { 0: Abilities.SAND_STREAM }, [Species.REGICE]: { 0: Abilities.SNOW_WARNING }, [Species.REGISTEEL]: { 0: Abilities.STEELY_SPIRIT }, - [Species.LATIAS]: { 0: Abilities.PRISM_ARMOR }, - [Species.LATIOS]: { 0: Abilities.TINTED_LENS }, - [Species.KYOGRE]: { 0: Abilities.MOLD_BREAKER }, - [Species.GROUDON]: { 0: Abilities.TURBOBLAZE }, - [Species.RAYQUAZA]: { 0: Abilities.UNNERVE }, + [Species.LATIAS]: { 0: Abilities.SPEED_BOOST, 1: Abilities.PRISM_ARMOR }, + [Species.LATIOS]: { 0: Abilities.SPEED_BOOST, 1: Abilities.TINTED_LENS }, + [Species.KYOGRE]: { 0: Abilities.MOLD_BREAKER, 1: Abilities.TERAVOLT }, + [Species.GROUDON]: { 0: Abilities.MOLD_BREAKER, 1: Abilities.TURBOBLAZE }, + [Species.RAYQUAZA]: { 0: Abilities.UNNERVE, 1: Abilities.UNNERVE }, [Species.JIRACHI]: { 0: Abilities.COMATOSE }, - [Species.DEOXYS]: { 0: Abilities.PROTEAN }, + [Species.DEOXYS]: { 0: Abilities.PROTEAN, 1: Abilities.ADAPTABILITY, 2: Abilities.REGENERATOR, 3: Abilities.SHADOW_SHIELD }, - [Species.TURTWIG]: { 0: Abilities.THICK_FAT }, - [Species.CHIMCHAR]: { 0: Abilities.BEAST_BOOST }, - [Species.PIPLUP]: { 0: Abilities.DRIZZLE }, - [Species.STARLY]: { 0: Abilities.ROCK_HEAD }, + [Species.TURTWIG]: { 0: Abilities.SOLID_ROCK }, + [Species.GROTLE]: { 0: Abilities.SOLID_ROCK }, + [Species.TORTERRA]: { 0: Abilities.THICK_FAT }, + [Species.CHIMCHAR]: { 0: Abilities.UNNERVE }, + [Species.MONFERNO]: { 0: Abilities.BEAST_BOOST }, + [Species.INFERNAPE]: { 0: Abilities.BEAST_BOOST }, + [Species.PIPLUP]: { 0: Abilities.CUTE_CHARM }, + [Species.PRINPLUP]: { 0: Abilities.DRIZZLE }, + [Species.EMPOLEON]: { 0: Abilities.DRIZZLE }, + [Species.STARLY]: { 0: Abilities.INTIMIDATE }, + [Species.STARAVIA]: { 0: Abilities.ROCK_HEAD }, + [Species.STARAPTOR]: { 0: Abilities.ROCK_HEAD }, [Species.BIDOOF]: { 0: Abilities.SAP_SIPPER }, - [Species.KRICKETOT]: { 0: Abilities.SHARPNESS }, + [Species.BIBAREL]: { 0: Abilities.SAP_SIPPER }, + [Species.KRICKETOT]: { 0: Abilities.HONEY_GATHER }, + [Species.KRICKETUNE]: { 0: Abilities.SHARPNESS }, [Species.SHINX]: { 0: Abilities.SPEED_BOOST }, - [Species.BUDEW]: { 0: Abilities.GRASSY_SURGE }, + [Species.LUXIO]: { 0: Abilities.SPEED_BOOST }, + [Species.LUXRAY]: { 0: Abilities.SPEED_BOOST }, + [Species.BUDEW]: { 0: Abilities.SEED_SOWER }, + [Species.ROSELIA]: { 0: Abilities.GRASSY_SURGE }, + [Species.ROSERADE]: { 0: Abilities.GRASSY_SURGE }, [Species.CRANIDOS]: { 0: Abilities.ROCK_HEAD }, + [Species.RAMPARDOS]: { 0: Abilities.ROCK_HEAD }, [Species.SHIELDON]: { 0: Abilities.EARTH_EATER }, - [Species.BURMY]: { 0: Abilities.STURDY }, - [Species.COMBEE]: { 0: Abilities.INTIMIDATE }, + [Species.BASTIODON]: { 0: Abilities.EARTH_EATER }, + [Species.BURMY]: { 0: Abilities.STURDY, 1: Abilities.STURDY, 2: Abilities.STURDY }, + [Species.WORMADAM]: { 0: Abilities.STURDY, 1: Abilities.STURDY, 2: Abilities.STURDY }, + [Species.MOTHIM]: { 0: Abilities.SPEED_BOOST }, + [Species.COMBEE]: { 0: Abilities.RUN_AWAY }, + [Species.VESPIQUEN]: { 0: Abilities.INTIMIDATE }, [Species.PACHIRISU]: { 0: Abilities.HONEY_GATHER }, [Species.BUIZEL]: { 0: Abilities.MOXIE }, - [Species.CHERUBI]: { 0: Abilities.ORICHALCUM_PULSE }, - [Species.SHELLOS]: { 0: Abilities.REGENERATOR }, + [Species.FLOATZEL]: { 0: Abilities.MOXIE }, + [Species.CHERUBI]: { 0: Abilities.DROUGHT }, + [Species.CHERRIM]: { 0: Abilities.ORICHALCUM_PULSE, 1: Abilities.ORICHALCUM_PULSE }, + [Species.SHELLOS]: { 0: Abilities.REGENERATOR, 1: Abilities.REGENERATOR }, + [Species.GASTRODON]: { 0: Abilities.REGENERATOR, 1: Abilities.REGENERATOR }, [Species.DRIFLOON]: { 0: Abilities.MAGIC_GUARD }, + [Species.DRIFBLIM]: { 0: Abilities.MAGIC_GUARD }, [Species.BUNEARY]: { 0: Abilities.ADAPTABILITY }, + [Species.LOPUNNY]: { 0: Abilities.ADAPTABILITY, 1: Abilities.ADAPTABILITY }, [Species.GLAMEOW]: { 0: Abilities.INTIMIDATE }, + [Species.PURUGLY]: { 0: Abilities.INTIMIDATE }, [Species.CHINGLING]: { 0: Abilities.PUNK_ROCK }, + [Species.CHIMECHO]: { 0: Abilities.PUNK_ROCK }, [Species.STUNKY]: { 0: Abilities.NEUTRALIZING_GAS }, + [Species.SKUNTANK]: { 0: Abilities.NEUTRALIZING_GAS }, [Species.BRONZOR]: { 0: Abilities.MIRROR_ARMOR }, + [Species.BRONZONG]: { 0: Abilities.MIRROR_ARMOR }, [Species.BONSLY]: { 0: Abilities.SAP_SIPPER }, + [Species.SUDOWOODO]: { 0: Abilities.SAP_SIPPER }, [Species.MIME_JR]: { 0: Abilities.PRANKSTER }, - [Species.HAPPINY]: { 0: Abilities.FUR_COAT }, + [Species.MR_MIME]: { 0: Abilities.PRANKSTER }, + [Species.GALAR_MR_MIME]: { 0: Abilities.PRANKSTER }, + [Species.MR_RIME]: { 0: Abilities.PRANKSTER }, + [Species.HAPPINY]: { 0: Abilities.HOSPITALITY }, + [Species.CHANSEY]: { 0: Abilities.FRIEND_GUARD }, + [Species.BLISSEY]: { 0: Abilities.FUR_COAT }, [Species.CHATOT]: { 0: Abilities.PUNK_ROCK }, [Species.SPIRITOMB]: { 0: Abilities.VESSEL_OF_RUIN }, - [Species.GIBLE]: { 0: Abilities.SAND_STREAM }, - [Species.MUNCHLAX]: { 0: Abilities.RIPEN }, + [Species.GIBLE]: { 0: Abilities.ARENA_TRAP }, + [Species.GABITE]: { 0: Abilities.ARENA_TRAP }, + [Species.GARCHOMP]: { 0: Abilities.ARENA_TRAP, 1: Abilities.SAND_RUSH }, + [Species.MUNCHLAX]: { 0: Abilities.CHEEK_POUCH }, + [Species.SNORLAX]: { 0: Abilities.CHEEK_POUCH, 1: Abilities.RIPEN }, [Species.RIOLU]: { 0: Abilities.MINDS_EYE }, + [Species.LUCARIO]: { 0: Abilities.MINDS_EYE, 1: Abilities.MINDS_EYE }, [Species.HIPPOPOTAS]: { 0: Abilities.UNAWARE }, + [Species.HIPPOWDON]: { 0: Abilities.UNAWARE }, [Species.SKORUPI]: { 0: Abilities.SUPER_LUCK }, + [Species.DRAPION]: { 0: Abilities.SUPER_LUCK }, [Species.CROAGUNK]: { 0: Abilities.MOXIE }, + [Species.TOXICROAK]: { 0: Abilities.MOXIE }, [Species.CARNIVINE]: { 0: Abilities.ARENA_TRAP }, [Species.FINNEON]: { 0: Abilities.WATER_BUBBLE }, + [Species.LUMINEON]: { 0: Abilities.WATER_BUBBLE }, [Species.MANTYKE]: { 0: Abilities.UNAWARE }, - [Species.SNOVER]: { 0: Abilities.GRASSY_SURGE }, - [Species.ROTOM]: { 0: Abilities.HADRON_ENGINE }, + [Species.MANTINE]: { 0: Abilities.UNAWARE }, + [Species.SNOVER]: { 0: Abilities.SLUSH_RUSH }, + [Species.ABOMASNOW]: { 0: Abilities.SLUSH_RUSH, 1: Abilities.SEED_SOWER }, + [Species.ROTOM]: { 0: Abilities.HADRON_ENGINE, 1: Abilities.HADRON_ENGINE, 2: Abilities.HADRON_ENGINE, 3: Abilities.HADRON_ENGINE, 4: Abilities.HADRON_ENGINE, 5: Abilities.HADRON_ENGINE }, [Species.UXIE]: { 0: Abilities.UNNERVE }, [Species.MESPRIT]: { 0: Abilities.MOODY }, [Species.AZELF]: { 0: Abilities.NEUROFORCE }, - [Species.DIALGA]: { 0: Abilities.BERSERK }, - [Species.PALKIA]: { 0: Abilities.BERSERK }, + [Species.DIALGA]: { 0: Abilities.BERSERK, 1: Abilities.BERSERK }, + [Species.PALKIA]: { 0: Abilities.BERSERK, 1: Abilities.BERSERK }, [Species.HEATRAN]: { 0: Abilities.EARTH_EATER }, [Species.REGIGIGAS]: { 0: Abilities.SCRAPPY }, - [Species.GIRATINA]: { 0: Abilities.SHADOW_SHIELD }, + [Species.GIRATINA]: { 0: Abilities.SHADOW_SHIELD, 1: Abilities.SHADOW_SHIELD }, [Species.CRESSELIA]: { 0: Abilities.SHADOW_SHIELD }, [Species.PHIONE]: { 0: Abilities.SIMPLE }, [Species.MANAPHY]: { 0: Abilities.PRIMORDIAL_SEA }, [Species.DARKRAI]: { 0: Abilities.UNNERVE }, - [Species.SHAYMIN]: { 0: Abilities.WIND_RIDER }, - [Species.ARCEUS]: { 0: Abilities.ADAPTABILITY }, + [Species.SHAYMIN]: { 0: Abilities.GRASSY_SURGE, 1: Abilities.DELTA_STREAM }, + [Species.ARCEUS]: { 0: Abilities.ADAPTABILITY, 1: Abilities.ADAPTABILITY, 2: Abilities.ADAPTABILITY, 3: Abilities.ADAPTABILITY, 4: Abilities.ADAPTABILITY, 5: Abilities.ADAPTABILITY, 6: Abilities.ADAPTABILITY, 7: Abilities.ADAPTABILITY, 8: Abilities.ADAPTABILITY, 9: Abilities.ADAPTABILITY, 10: Abilities.ADAPTABILITY, 11: Abilities.ADAPTABILITY, 12: Abilities.ADAPTABILITY, 13: Abilities.ADAPTABILITY, 14: Abilities.ADAPTABILITY, 15: Abilities.ADAPTABILITY, 16: Abilities.ADAPTABILITY, 17: Abilities.ADAPTABILITY }, [Species.VICTINI]: { 0: Abilities.SHEER_FORCE }, [Species.SNIVY]: { 0: Abilities.MULTISCALE }, - [Species.TEPIG]: { 0: Abilities.ROCK_HEAD }, - [Species.OSHAWOTT]: { 0: Abilities.INTREPID_SWORD }, + [Species.SERVINE]: { 0: Abilities.MULTISCALE }, + [Species.SERPERIOR]: { 0: Abilities.MULTISCALE }, + [Species.TEPIG]: { 0: Abilities.GLUTTONY }, + [Species.PIGNITE]: { 0: Abilities.ROCK_HEAD }, + [Species.EMBOAR]: { 0: Abilities.ROCK_HEAD }, + [Species.OSHAWOTT]: { 0: Abilities.MOLD_BREAKER }, + [Species.DEWOTT]: { 0: Abilities.MOLD_BREAKER }, + [Species.SAMUROTT]: { 0: Abilities.LIGHTNING_ROD }, + [Species.HISUI_SAMUROTT]: { 0: Abilities.MOLD_BREAKER }, [Species.PATRAT]: { 0: Abilities.NO_GUARD }, - [Species.LILLIPUP]: { 0: Abilities.FUR_COAT }, + [Species.WATCHOG]: { 0: Abilities.NO_GUARD }, + [Species.LILLIPUP]: { 0: Abilities.BALL_FETCH }, + [Species.HERDIER]: { 0: Abilities.FUR_COAT }, + [Species.STOUTLAND]: { 0: Abilities.FUR_COAT }, [Species.PURRLOIN]: { 0: Abilities.PICKUP }, + [Species.LIEPARD]: { 0: Abilities.PICKUP }, [Species.PANSAGE]: { 0: Abilities.WELL_BAKED_BODY }, + [Species.SIMISAGE]: { 0: Abilities.WELL_BAKED_BODY }, [Species.PANSEAR]: { 0: Abilities.WATER_ABSORB }, + [Species.SIMISEAR]: { 0: Abilities.WATER_ABSORB }, [Species.PANPOUR]: { 0: Abilities.SAP_SIPPER }, + [Species.SIMIPOUR]: { 0: Abilities.SAP_SIPPER }, [Species.MUNNA]: { 0: Abilities.NEUTRALIZING_GAS }, + [Species.MUSHARNA]: { 0: Abilities.NEUTRALIZING_GAS }, [Species.PIDOVE]: { 0: Abilities.SNIPER }, + [Species.TRANQUILL]: { 0: Abilities.SNIPER }, + [Species.UNFEZANT]: { 0: Abilities.SNIPER }, [Species.BLITZLE]: { 0: Abilities.ELECTRIC_SURGE }, + [Species.ZEBSTRIKA]: { 0: Abilities.ELECTRIC_SURGE }, [Species.ROGGENROLA]: { 0: Abilities.SOLID_ROCK }, + [Species.BOLDORE]: { 0: Abilities.SOLID_ROCK }, + [Species.GIGALITH]: { 0: Abilities.SOLID_ROCK }, [Species.WOOBAT]: { 0: Abilities.OPPORTUNIST }, + [Species.SWOOBAT]: { 0: Abilities.OPPORTUNIST }, [Species.DRILBUR]: { 0: Abilities.STURDY }, - [Species.AUDINO]: { 0: Abilities.FRIEND_GUARD }, + [Species.EXCADRILL]: { 0: Abilities.STURDY }, + [Species.AUDINO]: { 0: Abilities.FRIEND_GUARD, 1: Abilities.FAIRY_AURA }, [Species.TIMBURR]: { 0: Abilities.ROCKY_PAYLOAD }, + [Species.GURDURR]: { 0: Abilities.ROCKY_PAYLOAD }, + [Species.CONKELDURR]: { 0: Abilities.ROCKY_PAYLOAD }, [Species.TYMPOLE]: { 0: Abilities.POISON_HEAL }, + [Species.PALPITOAD]: { 0: Abilities.POISON_HEAL }, + [Species.SEISMITOAD]: { 0: Abilities.POISON_HEAL }, [Species.THROH]: { 0: Abilities.STAMINA }, [Species.SAWK]: { 0: Abilities.SCRAPPY }, - [Species.SEWADDLE]: { 0: Abilities.SHARPNESS }, + [Species.SEWADDLE]: { 0: Abilities.SHIELD_DUST }, + [Species.SWADLOON]: { 0: Abilities.SHIELD_DUST }, + [Species.LEAVANNY]: { 0: Abilities.SHARPNESS }, [Species.VENIPEDE]: { 0: Abilities.STAMINA }, + [Species.WHIRLIPEDE]: { 0: Abilities.STAMINA }, + [Species.SCOLIPEDE]: { 0: Abilities.STAMINA }, [Species.COTTONEE]: { 0: Abilities.FLUFFY }, + [Species.WHIMSICOTT]: { 0: Abilities.FLUFFY }, [Species.PETILIL]: { 0: Abilities.FLOWER_VEIL }, - [Species.BASCULIN]: { 0: Abilities.SUPREME_OVERLORD }, + [Species.LILLIGANT]: { 0: Abilities.GRASSY_SURGE }, + [Species.HISUI_LILLIGANT]: { 0: Abilities.FLOWER_VEIL }, + [Species.BASCULIN]: { 0: Abilities.ROCK_HEAD, 1: Abilities.RECKLESS, 2: Abilities.SUPREME_OVERLORD }, + [Species.BASCULEGION]: { 0: Abilities.SUPREME_OVERLORD, 1: Abilities.SUPREME_OVERLORD }, [Species.SANDILE]: { 0: Abilities.TOUGH_CLAWS }, + [Species.KROKOROK]: { 0: Abilities.TOUGH_CLAWS }, + [Species.KROOKODILE]: { 0: Abilities.TOUGH_CLAWS }, [Species.DARUMAKA]: { 0: Abilities.GORILLA_TACTICS }, + [Species.DARMANITAN]: { 0: Abilities.GORILLA_TACTICS, 1: Abilities.SOLID_ROCK }, [Species.MARACTUS]: { 0: Abilities.WELL_BAKED_BODY }, [Species.DWEBBLE]: { 0: Abilities.ROCKY_PAYLOAD }, + [Species.CRUSTLE]: { 0: Abilities.ROCKY_PAYLOAD }, [Species.SCRAGGY]: { 0: Abilities.PROTEAN }, + [Species.SCRAFTY]: { 0: Abilities.PROTEAN }, [Species.SIGILYPH]: { 0: Abilities.FLARE_BOOST }, [Species.YAMASK]: { 0: Abilities.PURIFYING_SALT }, + [Species.COFAGRIGUS]: { 0: Abilities.PURIFYING_SALT }, [Species.TIRTOUGA]: { 0: Abilities.WATER_ABSORB }, + [Species.CARRACOSTA]: { 0: Abilities.WATER_ABSORB }, [Species.ARCHEN]: { 0: Abilities.MULTISCALE }, + [Species.ARCHEOPS]: { 0: Abilities.MULTISCALE }, [Species.TRUBBISH]: { 0: Abilities.NEUTRALIZING_GAS }, + [Species.GARBODOR]: { 0: Abilities.NEUTRALIZING_GAS, 1: Abilities.NEUTRALIZING_GAS }, [Species.ZORUA]: { 0: Abilities.DARK_AURA }, + [Species.ZOROARK]: { 0: Abilities.DARK_AURA }, [Species.MINCCINO]: { 0: Abilities.FUR_COAT }, + [Species.CINCCINO]: { 0: Abilities.FUR_COAT }, [Species.GOTHITA]: { 0: Abilities.UNNERVE }, + [Species.GOTHORITA]: { 0: Abilities.UNNERVE }, + [Species.GOTHITELLE]: { 0: Abilities.UNNERVE }, [Species.SOLOSIS]: { 0: Abilities.PSYCHIC_SURGE }, + [Species.DUOSION]: { 0: Abilities.PSYCHIC_SURGE }, + [Species.REUNICLUS]: { 0: Abilities.PSYCHIC_SURGE }, [Species.DUCKLETT]: { 0: Abilities.DRIZZLE }, - [Species.VANILLITE]: { 0: Abilities.SLUSH_RUSH }, - [Species.DEERLING]: { 0: Abilities.FUR_COAT }, + [Species.SWANNA]: { 0: Abilities.DRIZZLE }, + [Species.VANILLITE]: { 0: Abilities.REFRIGERATE }, + [Species.VANILLISH]: { 0: Abilities.REFRIGERATE }, + [Species.VANILLUXE]: { 0: Abilities.SLUSH_RUSH }, + [Species.DEERLING]: { 0: Abilities.FLOWER_VEIL, 1: Abilities.CUD_CHEW, 2: Abilities.HARVEST, 3: Abilities.FUR_COAT }, + [Species.SAWSBUCK]: { 0: Abilities.FLOWER_VEIL, 1: Abilities.CUD_CHEW, 2: Abilities.HARVEST, 3: Abilities.FUR_COAT }, [Species.EMOLGA]: { 0: Abilities.SERENE_GRACE }, [Species.KARRABLAST]: { 0: Abilities.QUICK_DRAW }, - [Species.FOONGUS]: { 0: Abilities.THICK_FAT }, + [Species.ESCAVALIER]: { 0: Abilities.QUICK_DRAW }, + [Species.FOONGUS]: { 0: Abilities.MYCELIUM_MIGHT }, + [Species.AMOONGUSS]: { 0: Abilities.THICK_FAT }, [Species.FRILLISH]: { 0: Abilities.POISON_HEAL }, + [Species.JELLICENT]: { 0: Abilities.POISON_HEAL }, [Species.ALOMOMOLA]: { 0: Abilities.MULTISCALE }, [Species.JOLTIK]: { 0: Abilities.TRANSISTOR }, + [Species.GALVANTULA]: { 0: Abilities.TRANSISTOR }, [Species.FERROSEED]: { 0: Abilities.ROUGH_SKIN }, + [Species.FERROTHORN]: { 0: Abilities.ROUGH_SKIN }, [Species.KLINK]: { 0: Abilities.STEELY_SPIRIT }, + [Species.KLANG]: { 0: Abilities.STEELY_SPIRIT }, + [Species.KLINKLANG]: { 0: Abilities.STEELY_SPIRIT }, [Species.TYNAMO]: { 0: Abilities.POISON_HEAL }, + [Species.EELEKTRIK]: { 0: Abilities.POISON_HEAL }, + [Species.EELEKTROSS]: { 0: Abilities.POISON_HEAL }, [Species.ELGYEM]: { 0: Abilities.BEADS_OF_RUIN }, + [Species.BEHEEYEM]: { 0: Abilities.BEADS_OF_RUIN }, [Species.LITWICK]: { 0: Abilities.SHADOW_TAG }, + [Species.LAMPENT]: { 0: Abilities.SHADOW_TAG }, + [Species.CHANDELURE]: { 0: Abilities.SHADOW_TAG }, [Species.AXEW]: { 0: Abilities.DRAGONS_MAW }, + [Species.FRAXURE]: { 0: Abilities.DRAGONS_MAW }, + [Species.HAXORUS]: { 0: Abilities.DRAGONS_MAW }, [Species.CUBCHOO]: { 0: Abilities.FUR_COAT }, + [Species.BEARTIC]: { 0: Abilities.FUR_COAT }, [Species.CRYOGONAL]: { 0: Abilities.SNOW_WARNING }, - [Species.SHELMET]: { 0: Abilities.PROTEAN }, + [Species.SHELMET]: { 0: Abilities.STAMINA }, + [Species.ACCELGOR]: { 0: Abilities.PROTEAN }, [Species.STUNFISK]: { 0: Abilities.STORM_DRAIN }, [Species.MIENFOO]: { 0: Abilities.NO_GUARD }, + [Species.MIENSHAO]: { 0: Abilities.NO_GUARD }, [Species.DRUDDIGON]: { 0: Abilities.INTIMIDATE }, [Species.GOLETT]: { 0: Abilities.SHADOW_SHIELD }, + [Species.GOLURK]: { 0: Abilities.SHADOW_SHIELD }, [Species.PAWNIARD]: { 0: Abilities.SWORD_OF_RUIN }, + [Species.BISHARP]: { 0: Abilities.SWORD_OF_RUIN }, + [Species.KINGAMBIT]: { 0: Abilities.SWORD_OF_RUIN }, [Species.BOUFFALANT]: { 0: Abilities.ROCK_HEAD }, [Species.RUFFLET]: { 0: Abilities.SPEED_BOOST }, + [Species.BRAVIARY]: { 0: Abilities.SPEED_BOOST }, + [Species.HISUI_BRAVIARY]: { 0: Abilities.SPEED_BOOST }, [Species.VULLABY]: { 0: Abilities.THICK_FAT }, + [Species.MANDIBUZZ]: { 0: Abilities.THICK_FAT }, [Species.HEATMOR]: { 0: Abilities.CONTRARY }, [Species.DURANT]: { 0: Abilities.COMPOUND_EYES }, - [Species.DEINO]: { 0: Abilities.PARENTAL_BOND }, - [Species.LARVESTA]: { 0: Abilities.DROUGHT }, + [Species.DEINO]: { 0: Abilities.NO_GUARD }, + [Species.ZWEILOUS]: { 0: Abilities.NO_GUARD }, + [Species.HYDREIGON]: { 0: Abilities.PARENTAL_BOND }, + [Species.LARVESTA]: { 0: Abilities.FLASH_FIRE }, + [Species.VOLCARONA]: { 0: Abilities.DROUGHT }, [Species.COBALION]: { 0: Abilities.INTREPID_SWORD }, [Species.TERRAKION]: { 0: Abilities.ROCKY_PAYLOAD }, [Species.VIRIZION]: { 0: Abilities.SHARPNESS }, - [Species.TORNADUS]: { 0: Abilities.DRIZZLE }, - [Species.THUNDURUS]: { 0: Abilities.DRIZZLE }, + [Species.TORNADUS]: { 0: Abilities.DRIZZLE, 1: Abilities.DRIZZLE }, + [Species.THUNDURUS]: { 0: Abilities.DRIZZLE, 1: Abilities.DRIZZLE }, [Species.RESHIRAM]: { 0: Abilities.ORICHALCUM_PULSE }, [Species.ZEKROM]: { 0: Abilities.HADRON_ENGINE }, - [Species.LANDORUS]: { 0: Abilities.STORM_DRAIN }, - [Species.KYUREM]: { 0: Abilities.SNOW_WARNING }, - [Species.KELDEO]: { 0: Abilities.GRIM_NEIGH }, - [Species.MELOETTA]: { 0: Abilities.MINDS_EYE }, - [Species.GENESECT]: { 0: Abilities.PROTEAN }, + [Species.LANDORUS]: { 0: Abilities.STORM_DRAIN, 1: Abilities.STORM_DRAIN }, + [Species.KYUREM]: { 0: Abilities.SNOW_WARNING, 1: Abilities.HADRON_ENGINE, 2: Abilities.ORICHALCUM_PULSE }, + [Species.KELDEO]: { 0: Abilities.GRIM_NEIGH, 1: Abilities.GRIM_NEIGH }, + [Species.MELOETTA]: { 0: Abilities.PUNK_ROCK, 1: Abilities.SCRAPPY }, + [Species.GENESECT]: { 0: Abilities.PROTEAN, 1: Abilities.PROTEAN, 2: Abilities.PROTEAN, 3: Abilities.PROTEAN, 4: Abilities.PROTEAN }, - [Species.CHESPIN]: { 0: Abilities.DAUNTLESS_SHIELD }, - [Species.FENNEKIN]: { 0: Abilities.PSYCHIC_SURGE }, - [Species.FROAKIE]: { 0: Abilities.STAKEOUT }, - [Species.BUNNELBY]: { 0: Abilities.THICK_FAT }, - [Species.FLETCHLING]: { 0: Abilities.MAGIC_GUARD }, - [Species.SCATTERBUG]: { 0: Abilities.PRANKSTER }, + [Species.CHESPIN]: { 0: Abilities.ROUGH_SKIN }, + [Species.QUILLADIN]: { 0: Abilities.DAUNTLESS_SHIELD }, + [Species.CHESNAUGHT]: { 0: Abilities.DAUNTLESS_SHIELD }, + [Species.FENNEKIN]: { 0: Abilities.FLUFFY }, + [Species.BRAIXEN]: { 0: Abilities.PSYCHIC_SURGE }, + [Species.DELPHOX]: { 0: Abilities.PSYCHIC_SURGE }, + [Species.FROAKIE]: { 0: Abilities.STAKEOUT, 1: Abilities.STAKEOUT }, + [Species.FROGADIER]: { 0: Abilities.STAKEOUT, 1: Abilities.STAKEOUT }, + [Species.GRENINJA]: { 0: Abilities.STAKEOUT, 1: Abilities.STAKEOUT, 2: Abilities.STAKEOUT }, + [Species.BUNNELBY]: { 0: Abilities.INNER_FOCUS }, + [Species.DIGGERSBY]: { 0: Abilities.THICK_FAT }, + [Species.FLETCHLING]: { 0: Abilities.FLAME_BODY }, + [Species.FLETCHINDER]: { 0: Abilities.MAGIC_GUARD }, + [Species.TALONFLAME]: { 0: Abilities.MAGIC_GUARD }, + [Species.SCATTERBUG]: { 0: Abilities.RUN_AWAY, 1: Abilities.RUN_AWAY, 2: Abilities.RUN_AWAY, 3: Abilities.RUN_AWAY, 4: Abilities.RUN_AWAY, 5: Abilities.RUN_AWAY, 6: Abilities.RUN_AWAY, 7: Abilities.RUN_AWAY, 8: Abilities.RUN_AWAY, 9: Abilities.RUN_AWAY, 10: Abilities.RUN_AWAY, 11: Abilities.RUN_AWAY, 12: Abilities.RUN_AWAY, 13: Abilities.RUN_AWAY, 14: Abilities.RUN_AWAY, 15: Abilities.RUN_AWAY, 16: Abilities.RUN_AWAY, 17: Abilities.RUN_AWAY, 18: Abilities.RUN_AWAY, 19: Abilities.RUN_AWAY }, + [Species.SPEWPA]: { 0: Abilities.COMPOUND_EYES, 1: Abilities.COMPOUND_EYES, 2: Abilities.COMPOUND_EYES, 3: Abilities.COMPOUND_EYES, 4: Abilities.COMPOUND_EYES, 5: Abilities.COMPOUND_EYES, 6: Abilities.COMPOUND_EYES, 7: Abilities.COMPOUND_EYES, 8: Abilities.COMPOUND_EYES, 9: Abilities.COMPOUND_EYES, 10: Abilities.COMPOUND_EYES, 11: Abilities.COMPOUND_EYES, 12: Abilities.COMPOUND_EYES, 13: Abilities.COMPOUND_EYES, 14: Abilities.COMPOUND_EYES, 15: Abilities.COMPOUND_EYES, 16: Abilities.COMPOUND_EYES, 17: Abilities.COMPOUND_EYES, 18: Abilities.COMPOUND_EYES, 19: Abilities.COMPOUND_EYES }, + [Species.VIVILLON]: { 0: Abilities.PRANKSTER, 1: Abilities.PRANKSTER, 2: Abilities.PRANKSTER, 3: Abilities.PRANKSTER, 4: Abilities.PRANKSTER, 5: Abilities.PRANKSTER, 6: Abilities.PRANKSTER, 7: Abilities.PRANKSTER, 8: Abilities.PRANKSTER, 9: Abilities.PRANKSTER, 10: Abilities.PRANKSTER, 11: Abilities.PRANKSTER, 12: Abilities.PRANKSTER, 13: Abilities.PRANKSTER, 14: Abilities.PRANKSTER, 15: Abilities.PRANKSTER, 16: Abilities.PRANKSTER, 17: Abilities.PRANKSTER, 18: Abilities.PRANKSTER, 19: Abilities.PRANKSTER }, [Species.LITLEO]: { 0: Abilities.BEAST_BOOST }, - [Species.FLABEBE]: { 0: Abilities.GRASSY_SURGE }, + [Species.PYROAR]: { 0: Abilities.BEAST_BOOST }, + [Species.FLABEBE]: { 0: Abilities.GRASSY_SURGE, 1: Abilities.GRASSY_SURGE, 2: Abilities.GRASSY_SURGE, 3: Abilities.GRASSY_SURGE, 4: Abilities.GRASSY_SURGE }, + [Species.FLOETTE]: { 0: Abilities.GRASSY_SURGE, 1: Abilities.GRASSY_SURGE, 2: Abilities.GRASSY_SURGE, 3: Abilities.GRASSY_SURGE, 4: Abilities.GRASSY_SURGE }, + [Species.FLORGES]: { 0: Abilities.GRASSY_SURGE, 1: Abilities.GRASSY_SURGE, 2: Abilities.GRASSY_SURGE, 3: Abilities.GRASSY_SURGE, 4: Abilities.GRASSY_SURGE }, [Species.SKIDDO]: { 0: Abilities.SEED_SOWER }, - [Species.PANCHAM]: { 0: Abilities.FUR_COAT }, - [Species.FURFROU]: { 0: Abilities.FLUFFY }, - [Species.ESPURR]: { 0: Abilities.FUR_COAT }, + [Species.GOGOAT]: { 0: Abilities.SEED_SOWER }, + [Species.PANCHAM]: { 0: Abilities.TECHNICIAN }, + [Species.PANGORO]: { 0: Abilities.FUR_COAT }, + [Species.FURFROU]: { 0: Abilities.FLUFFY, 1: Abilities.FLUFFY, 2: Abilities.FLUFFY, 3: Abilities.FLUFFY, 4: Abilities.FLUFFY, 5: Abilities.FLUFFY, 6: Abilities.FLUFFY, 7: Abilities.FLUFFY, 8: Abilities.FLUFFY, 9: Abilities.FLUFFY }, + [Species.ESPURR]: { 0: Abilities.PRANKSTER }, + [Species.MEOWSTIC]: { 0: Abilities.FUR_COAT, 1: Abilities.NEUROFORCE }, [Species.HONEDGE]: { 0: Abilities.SHARPNESS }, + [Species.DOUBLADE]: { 0: Abilities.SHARPNESS }, + [Species.AEGISLASH]: { 0: Abilities.SHARPNESS, 1: Abilities.SHARPNESS }, [Species.SPRITZEE]: { 0: Abilities.FUR_COAT }, + [Species.AROMATISSE]: { 0: Abilities.FUR_COAT }, [Species.SWIRLIX]: { 0: Abilities.RIPEN }, - [Species.INKAY]: { 0: Abilities.UNNERVE }, + [Species.SLURPUFF]: { 0: Abilities.RIPEN }, + [Species.INKAY]: { 0: Abilities.SHADOW_SHIELD }, + [Species.MALAMAR]: { 0: Abilities.SHADOW_SHIELD }, [Species.BINACLE]: { 0: Abilities.SAP_SIPPER }, - [Species.SKRELP]: { 0: Abilities.DRAGONS_MAW }, + [Species.BARBARACLE]: { 0: Abilities.SAP_SIPPER }, + [Species.SKRELP]: { 0: Abilities.WATER_BUBBLE }, + [Species.DRAGALGE]: { 0: Abilities.DRAGONS_MAW }, [Species.CLAUNCHER]: { 0: Abilities.PROTEAN }, + [Species.CLAWITZER]: { 0: Abilities.PROTEAN }, [Species.HELIOPTILE]: { 0: Abilities.PROTEAN }, + [Species.HELIOLISK]: { 0: Abilities.PROTEAN }, [Species.TYRUNT]: { 0: Abilities.RECKLESS }, + [Species.TYRANTRUM]: { 0: Abilities.RECKLESS }, [Species.AMAURA]: { 0: Abilities.ICE_SCALES }, + [Species.AURORUS]: { 0: Abilities.ICE_SCALES }, [Species.HAWLUCHA]: { 0: Abilities.MOXIE }, [Species.DEDENNE]: { 0: Abilities.PIXILATE }, [Species.CARBINK]: { 0: Abilities.SOLID_ROCK }, [Species.GOOMY]: { 0: Abilities.REGENERATOR }, + [Species.SLIGGOO]: { 0: Abilities.POISON_HEAL }, + [Species.GOODRA]: { 0: Abilities.POISON_HEAL }, + [Species.HISUI_SLIGGOO]: { 0: Abilities.REGENERATOR }, + [Species.HISUI_GOODRA]: { 0: Abilities.REGENERATOR }, [Species.KLEFKI]: { 0: Abilities.LEVITATE }, [Species.PHANTUMP]: { 0: Abilities.SHADOW_TAG }, - [Species.PUMPKABOO]: { 0: Abilities.WELL_BAKED_BODY }, + [Species.TREVENANT]: { 0: Abilities.SHADOW_TAG }, + [Species.PUMPKABOO]: { 0: Abilities.WELL_BAKED_BODY, 1: Abilities.ADAPTABILITY, 2: Abilities.PRANKSTER, 3: Abilities.SEED_SOWER }, + [Species.GOURGEIST]: { 0: Abilities.WELL_BAKED_BODY, 1: Abilities.ADAPTABILITY, 2: Abilities.PRANKSTER, 3: Abilities.SEED_SOWER }, [Species.BERGMITE]: { 0: Abilities.ICE_SCALES }, - [Species.NOIBAT]: { 0: Abilities.PUNK_ROCK }, - [Species.XERNEAS]: { 0: Abilities.HARVEST }, + [Species.AVALUGG]: { 0: Abilities.ICE_SCALES }, + [Species.HISUI_AVALUGG]: { 0: Abilities.ICE_SCALES }, + [Species.NOIBAT]: { 0: Abilities.CHEEK_POUCH }, + [Species.NOIVERN]: { 0: Abilities.PUNK_ROCK }, + [Species.XERNEAS]: { 0: Abilities.HARVEST, 1: Abilities.HARVEST }, [Species.YVELTAL]: { 0: Abilities.SOUL_HEART }, - [Species.ZYGARDE]: { 0: Abilities.ADAPTABILITY }, - [Species.DIANCIE]: { 0: Abilities.PRISM_ARMOR }, - [Species.HOOPA]: { 0: Abilities.OPPORTUNIST }, + [Species.ZYGARDE]: { 0: Abilities.UNNERVE, 1: Abilities.MOXIE, 2: Abilities.UNNERVE, 3: Abilities.MOXIE, 4: Abilities.ADAPTABILITY, 5: Abilities.ADAPTABILITY }, + [Species.DIANCIE]: { 0: Abilities.SOLID_ROCK, 1: Abilities.PRISM_ARMOR }, + [Species.HOOPA]: { 0: Abilities.OPPORTUNIST, 1: Abilities.OPPORTUNIST }, [Species.VOLCANION]: { 0: Abilities.NEUTRALIZING_GAS }, [Species.ETERNAL_FLOETTE]: { 0: Abilities.MAGIC_GUARD }, - [Species.ROWLET]: { 0: Abilities.SNIPER }, + [Species.ROWLET]: { 0: Abilities.WIND_RIDER }, + [Species.DARTRIX]: { 0: Abilities.WIND_RIDER }, + [Species.DECIDUEYE]: { 0: Abilities.SNIPER }, + [Species.HISUI_DECIDUEYE]: { 0: Abilities.SNIPER }, [Species.LITTEN]: { 0: Abilities.OPPORTUNIST }, + [Species.TORRACAT]: { 0: Abilities.OPPORTUNIST }, + [Species.INCINEROAR]: { 0: Abilities.OPPORTUNIST }, [Species.POPPLIO]: { 0: Abilities.PUNK_ROCK }, + [Species.BRIONNE]: { 0: Abilities.PUNK_ROCK }, + [Species.PRIMARINA]: { 0: Abilities.PUNK_ROCK }, [Species.PIKIPEK]: { 0: Abilities.TECHNICIAN }, + [Species.TRUMBEAK]: { 0: Abilities.TECHNICIAN }, + [Species.TOUCANNON]: { 0: Abilities.TECHNICIAN }, [Species.YUNGOOS]: { 0: Abilities.TOUGH_CLAWS }, - [Species.GRUBBIN]: { 0: Abilities.SPEED_BOOST }, + [Species.GUMSHOOS]: { 0: Abilities.TOUGH_CLAWS }, + [Species.GRUBBIN]: { 0: Abilities.SHIELD_DUST }, + [Species.CHARJABUG]: { 0: Abilities.POWER_SPOT }, + [Species.VIKAVOLT]: { 0: Abilities.SPEED_BOOST }, [Species.CRABRAWLER]: { 0: Abilities.WATER_BUBBLE }, - [Species.ORICORIO]: { 0: Abilities.ADAPTABILITY }, - [Species.CUTIEFLY]: { 0: Abilities.TINTED_LENS }, - [Species.ROCKRUFF]: { 0: Abilities.ROCKY_PAYLOAD }, - [Species.WISHIWASHI]: { 0: Abilities.REGENERATOR }, + [Species.CRABOMINABLE]: { 0: Abilities.WATER_BUBBLE }, + [Species.ORICORIO]: { 0: Abilities.ADAPTABILITY, 1: Abilities.ADAPTABILITY, 2: Abilities.ADAPTABILITY, 3: Abilities.ADAPTABILITY }, + [Species.CUTIEFLY]: { 0: Abilities.PICKUP }, + [Species.RIBOMBEE]: { 0: Abilities.TINTED_LENS }, + [Species.ROCKRUFF]: { 0: Abilities.PICKUP, 1: Abilities.PICKUP }, + [Species.LYCANROC]: { 0: Abilities.STURDY, 1: Abilities.INTIMIDATE, 2: Abilities.STAKEOUT }, + [Species.WISHIWASHI]: { 0: Abilities.REGENERATOR, 1: Abilities.REGENERATOR }, [Species.MAREANIE]: { 0: Abilities.TOXIC_DEBRIS }, + [Species.TOXAPEX]: { 0: Abilities.TOXIC_DEBRIS }, [Species.MUDBRAY]: { 0: Abilities.SAP_SIPPER }, + [Species.MUDSDALE]: { 0: Abilities.SAP_SIPPER }, [Species.DEWPIDER]: { 0: Abilities.TINTED_LENS }, + [Species.ARAQUANID]: { 0: Abilities.TINTED_LENS }, [Species.FOMANTIS]: { 0: Abilities.SHARPNESS }, + [Species.LURANTIS]: { 0: Abilities.SHARPNESS }, [Species.MORELULL]: { 0: Abilities.TRIAGE }, - [Species.SALANDIT]: { 0: Abilities.DRAGONS_MAW }, + [Species.SHIINOTIC]: { 0: Abilities.TRIAGE }, + [Species.SALANDIT]: { 0: Abilities.PICKUP }, + [Species.SALAZZLE]: { 0: Abilities.DRAGONS_MAW }, [Species.STUFFUL]: { 0: Abilities.SCRAPPY }, - [Species.BOUNSWEET]: { 0: Abilities.MOXIE }, + [Species.BEWEAR]: { 0: Abilities.SCRAPPY }, + [Species.BOUNSWEET]: { 0: Abilities.SIMPLE }, + [Species.STEENEE]: { 0: Abilities.SIMPLE }, + [Species.TSAREENA]: { 0: Abilities.MOXIE }, [Species.COMFEY]: { 0: Abilities.FRIEND_GUARD }, [Species.ORANGURU]: { 0: Abilities.POWER_SPOT }, [Species.PASSIMIAN]: { 0: Abilities.LIBERO }, [Species.WIMPOD]: { 0: Abilities.REGENERATOR }, + [Species.GOLISOPOD]: { 0: Abilities.REGENERATOR }, [Species.SANDYGAST]: { 0: Abilities.SAND_SPIT }, + [Species.PALOSSAND]: { 0: Abilities.SAND_SPIT }, [Species.PYUKUMUKU]: { 0: Abilities.PURIFYING_SALT }, - [Species.TYPE_NULL]: { 0: Abilities.ADAPTABILITY }, - [Species.MINIOR]: { 0: Abilities.STURDY }, + [Species.TYPE_NULL]: { 0: Abilities.CLEAR_BODY }, + [Species.SILVALLY]: { 0: Abilities.ADAPTABILITY, 1: Abilities.ADAPTABILITY, 2: Abilities.ADAPTABILITY, 3: Abilities.ADAPTABILITY, 4: Abilities.ADAPTABILITY, 5: Abilities.ADAPTABILITY, 6: Abilities.ADAPTABILITY, 7: Abilities.ADAPTABILITY, 8: Abilities.ADAPTABILITY, 9: Abilities.ADAPTABILITY, 10: Abilities.ADAPTABILITY, 11: Abilities.ADAPTABILITY, 12: Abilities.ADAPTABILITY, 13: Abilities.ADAPTABILITY, 14: Abilities.ADAPTABILITY, 15: Abilities.ADAPTABILITY, 16: Abilities.ADAPTABILITY, 17: Abilities.ADAPTABILITY }, + [Species.MINIOR]: { 0: Abilities.STURDY, 1: Abilities.STURDY, 2: Abilities.STURDY, 3: Abilities.STURDY, 4: Abilities.STURDY, 5: Abilities.STURDY, 6: Abilities.STURDY, 7: Abilities.AERILATE, 8: Abilities.AERILATE, 9: Abilities.AERILATE, 10: Abilities.AERILATE, 11: Abilities.AERILATE, 12: Abilities.AERILATE, 13: Abilities.AERILATE }, [Species.KOMALA]: { 0: Abilities.GUTS }, [Species.TURTONATOR]: { 0: Abilities.DAUNTLESS_SHIELD }, [Species.TOGEDEMARU]: { 0: Abilities.ROUGH_SKIN }, - [Species.MIMIKYU]: { 0: Abilities.TOUGH_CLAWS }, + [Species.MIMIKYU]: { 0: Abilities.TOUGH_CLAWS, 1: Abilities.TOUGH_CLAWS }, [Species.BRUXISH]: { 0: Abilities.MULTISCALE }, [Species.DRAMPA]: { 0: Abilities.THICK_FAT }, [Species.DHELMISE]: { 0: Abilities.WATER_BUBBLE }, [Species.JANGMO_O]: { 0: Abilities.DAUNTLESS_SHIELD }, + [Species.HAKAMO_O]: { 0: Abilities.DAUNTLESS_SHIELD }, + [Species.KOMMO_O]: { 0: Abilities.DAUNTLESS_SHIELD }, [Species.TAPU_KOKO]: { 0: Abilities.DAUNTLESS_SHIELD }, [Species.TAPU_LELE]: { 0: Abilities.BERSERK }, [Species.TAPU_BULU]: { 0: Abilities.FLOWER_VEIL }, [Species.TAPU_FINI]: { 0: Abilities.FAIRY_AURA }, - [Species.COSMOG]: { 0: Abilities.BEAST_BOOST }, + [Species.COSMOG]: { 0: Abilities.PICKUP }, + [Species.COSMOEM]: { 0: Abilities.POWER_SPOT }, + [Species.SOLGALEO]: { 0: Abilities.BEAST_BOOST }, + [Species.LUNALA]: { 0: Abilities.BEAST_BOOST }, [Species.NIHILEGO]: { 0: Abilities.LEVITATE }, [Species.BUZZWOLE]: { 0: Abilities.MOXIE }, [Species.PHEROMOSA]: { 0: Abilities.TINTED_LENS }, [Species.XURKITREE]: { 0: Abilities.TRANSISTOR }, [Species.CELESTEELA]: { 0: Abilities.HEATPROOF }, - [Species.KARTANA]: { 0: Abilities.LONG_REACH }, + [Species.KARTANA]: { 0: Abilities.TECHNICIAN }, [Species.GUZZLORD]: { 0: Abilities.POISON_HEAL }, - [Species.NECROZMA]: { 0: Abilities.BEAST_BOOST }, - [Species.MAGEARNA]: { 0: Abilities.STEELY_SPIRIT }, + [Species.NECROZMA]: { 0: Abilities.BEAST_BOOST, 1: Abilities.FULL_METAL_BODY, 2: Abilities.SHADOW_SHIELD, 3: Abilities.UNNERVE }, + [Species.MAGEARNA]: { 0: Abilities.STEELY_SPIRIT, 1: Abilities.STEELY_SPIRIT }, [Species.MARSHADOW]: { 0: Abilities.IRON_FIST }, [Species.POIPOLE]: { 0: Abilities.LEVITATE }, + [Species.NAGANADEL]: { 0: Abilities.LEVITATE }, [Species.STAKATAKA]: { 0: Abilities.SOLID_ROCK }, [Species.BLACEPHALON]: { 0: Abilities.MAGIC_GUARD }, [Species.ZERAORA]: { 0: Abilities.TOUGH_CLAWS }, [Species.MELTAN]: { 0: Abilities.HEATPROOF }, + [Species.MELMETAL]: { 0: Abilities.HEATPROOF, 1: Abilities.FULL_METAL_BODY }, [Species.ALOLA_RATTATA]: { 0: Abilities.ADAPTABILITY }, + [Species.ALOLA_RATICATE]: { 0: Abilities.ADAPTABILITY }, [Species.ALOLA_SANDSHREW]: { 0: Abilities.ICE_SCALES }, - [Species.ALOLA_VULPIX]: { 0: Abilities.SHEER_FORCE }, + [Species.ALOLA_SANDSLASH]: { 0: Abilities.ICE_SCALES }, + [Species.ALOLA_VULPIX]: { 0: Abilities.ICE_BODY }, + [Species.ALOLA_NINETALES]: { 0: Abilities.ICE_BODY }, [Species.ALOLA_DIGLETT]: { 0: Abilities.STURDY }, + [Species.ALOLA_DUGTRIO]: { 0: Abilities.STURDY }, [Species.ALOLA_MEOWTH]: { 0: Abilities.DARK_AURA }, + [Species.ALOLA_PERSIAN]: { 0: Abilities.DARK_AURA }, [Species.ALOLA_GEODUDE]: { 0: Abilities.DRY_SKIN }, + [Species.ALOLA_GRAVELER]: { 0: Abilities.DRY_SKIN }, + [Species.ALOLA_GOLEM]: { 0: Abilities.DRY_SKIN }, [Species.ALOLA_GRIMER]: { 0: Abilities.TOXIC_DEBRIS }, + [Species.ALOLA_MUK]: { 0: Abilities.TOXIC_DEBRIS }, - [Species.GROOKEY]: { 0: Abilities.GRASS_PELT }, - [Species.SCORBUNNY]: { 0: Abilities.NO_GUARD }, + [Species.GROOKEY]: { 0: Abilities.PICKPOCKET }, + [Species.THWACKEY]: { 0: Abilities.PICKPOCKET }, + [Species.RILLABOOM]: { 0: Abilities.GRASS_PELT, 1: Abilities.GRASS_PELT }, + [Species.SCORBUNNY]: { 0: Abilities.SHEER_FORCE }, + [Species.RABOOT]: { 0: Abilities.SHEER_FORCE }, + [Species.CINDERACE]: { 0: Abilities.NO_GUARD, 1: Abilities.NO_GUARD }, [Species.SOBBLE]: { 0: Abilities.SUPER_LUCK }, + [Species.DRIZZILE]: { 0: Abilities.SUPER_LUCK }, + [Species.INTELEON]: { 0: Abilities.SUPER_LUCK, 1: Abilities.SUPER_LUCK }, [Species.SKWOVET]: { 0: Abilities.HARVEST }, - [Species.ROOKIDEE]: { 0: Abilities.IRON_BARBS }, - [Species.BLIPBUG]: { 0: Abilities.PSYCHIC_SURGE }, + [Species.GREEDENT]: { 0: Abilities.HARVEST }, + [Species.ROOKIDEE]: { 0: Abilities.GALE_WINGS }, + [Species.CORVISQUIRE]: { 0: Abilities.GALE_WINGS }, + [Species.CORVIKNIGHT]: { 0: Abilities.IRON_BARBS, 1: Abilities.IRON_BARBS }, + [Species.BLIPBUG]: { 0: Abilities.RUN_AWAY }, + [Species.DOTTLER]: { 0: Abilities.PSYCHIC_SURGE }, + [Species.ORBEETLE]: { 0: Abilities.PSYCHIC_SURGE, 1: Abilities.PSYCHIC_SURGE }, [Species.NICKIT]: { 0: Abilities.MAGICIAN }, - [Species.GOSSIFLEUR]: { 0: Abilities.GRASSY_SURGE }, + [Species.THIEVUL]: { 0: Abilities.MAGICIAN }, + [Species.GOSSIFLEUR]: { 0: Abilities.SEED_SOWER }, + [Species.ELDEGOSS]: { 0: Abilities.GRASSY_SURGE }, [Species.WOOLOO]: { 0: Abilities.SCRAPPY }, - [Species.CHEWTLE]: { 0: Abilities.ROCKY_PAYLOAD }, - [Species.YAMPER]: { 0: Abilities.SHEER_FORCE }, + [Species.DUBWOOL]: { 0: Abilities.SCRAPPY }, + [Species.CHEWTLE]: { 0: Abilities.SOLID_ROCK }, + [Species.DREDNAW]: { 0: Abilities.SOLID_ROCK, 1: Abilities.SOLID_ROCK }, + [Species.YAMPER]: { 0: Abilities.PICKUP }, + [Species.BOLTUND]: { 0: Abilities.SHEER_FORCE }, [Species.ROLYCOLY]: { 0: Abilities.SOLID_ROCK }, - [Species.APPLIN]: { 0: Abilities.DRAGONS_MAW }, + [Species.CARKOL]: { 0: Abilities.SOLID_ROCK }, + [Species.COALOSSAL]: { 0: Abilities.SOLID_ROCK, 1: Abilities.SOLID_ROCK }, + [Species.APPLIN]: { 0: Abilities.STURDY }, + [Species.FLAPPLE]: { 0: Abilities.NO_GUARD, 1: Abilities.NO_GUARD }, + [Species.APPLETUN]: { 0: Abilities.WELL_BAKED_BODY, 1: Abilities.WELL_BAKED_BODY }, + [Species.DIPPLIN]: { 0: Abilities.PARENTAL_BOND }, + [Species.HYDRAPPLE]: { 0: Abilities.PARENTAL_BOND }, [Species.SILICOBRA]: { 0: Abilities.SAND_RUSH }, - [Species.CRAMORANT]: { 0: Abilities.LIGHTNING_ROD }, - [Species.ARROKUDA]: { 0: Abilities.INTIMIDATE }, + [Species.SANDACONDA]: { 0: Abilities.SAND_RUSH, 1: Abilities.SAND_RUSH }, + [Species.CRAMORANT]: { 0: Abilities.LIGHTNING_ROD, 1: Abilities.LIGHTNING_ROD, 2: Abilities.LIGHTNING_ROD }, + [Species.ARROKUDA]: { 0: Abilities.SPEED_BOOST }, + [Species.BARRASKEWDA]: { 0: Abilities.INTIMIDATE }, [Species.TOXEL]: { 0: Abilities.ELECTRIC_SURGE }, - [Species.SIZZLIPEDE]: { 0: Abilities.SPEED_BOOST }, + [Species.TOXTRICITY]: { 0: Abilities.ELECTRIC_SURGE, 1: Abilities.ELECTRIC_SURGE, 2: Abilities.ELECTRIC_SURGE }, + [Species.SIZZLIPEDE]: { 0: Abilities.HUSTLE }, + [Species.CENTISKORCH]: { 0: Abilities.HUSTLE, 1: Abilities.HUSTLE }, [Species.CLOBBOPUS]: { 0: Abilities.WATER_BUBBLE }, - [Species.SINISTEA]: { 0: Abilities.SHADOW_SHIELD }, + [Species.GRAPPLOCT]: { 0: Abilities.WATER_BUBBLE }, + [Species.SINISTEA]: { 0: Abilities.SHADOW_SHIELD, 1: Abilities.SHADOW_SHIELD }, + [Species.POLTEAGEIST]: { 0: Abilities.SHADOW_SHIELD, 1: Abilities.SHADOW_SHIELD }, [Species.HATENNA]: { 0: Abilities.FAIRY_AURA }, + [Species.HATTREM]: { 0: Abilities.FAIRY_AURA }, + [Species.HATTERENE]: { 0: Abilities.FAIRY_AURA, 1: Abilities.FAIRY_AURA }, [Species.IMPIDIMP]: { 0: Abilities.INTIMIDATE }, + [Species.MORGREM]: { 0: Abilities.INTIMIDATE }, + [Species.GRIMMSNARL]: { 0: Abilities.INTIMIDATE, 1: Abilities.INTIMIDATE }, [Species.MILCERY]: { 0: Abilities.REGENERATOR }, - [Species.FALINKS]: { 0: Abilities.PARENTAL_BOND }, + [Species.ALCREMIE]: { 0: Abilities.REGENERATOR, 1: Abilities.REGENERATOR, 2: Abilities.REGENERATOR, 3: Abilities.REGENERATOR, 4: Abilities.REGENERATOR, 5: Abilities.REGENERATOR, 6: Abilities.REGENERATOR, 7: Abilities.REGENERATOR, 8: Abilities.REGENERATOR, 9: Abilities.REGENERATOR }, + [Species.FALINKS]: { 0: Abilities.DAUNTLESS_SHIELD }, [Species.PINCURCHIN]: { 0: Abilities.ELECTROMORPHOSIS }, [Species.SNOM]: { 0: Abilities.SNOW_WARNING }, + [Species.FROSMOTH]: { 0: Abilities.SNOW_WARNING }, [Species.STONJOURNER]: { 0: Abilities.STURDY }, - [Species.EISCUE]: { 0: Abilities.ICE_SCALES }, - [Species.INDEEDEE]: { 0: Abilities.FRIEND_GUARD }, - [Species.MORPEKO]: { 0: Abilities.MOODY }, + [Species.EISCUE]: { 0: Abilities.ICE_SCALES, 1: Abilities.ICE_SCALES }, + [Species.INDEEDEE]: { 0: Abilities.HOSPITALITY, 1: Abilities.FRIEND_GUARD }, + [Species.MORPEKO]: { 0: Abilities.MOODY, 1: Abilities.MOODY }, [Species.CUFANT]: { 0: Abilities.EARTH_EATER }, + [Species.COPPERAJAH]: { 0: Abilities.EARTH_EATER, 1: Abilities.EARTH_EATER }, [Species.DRACOZOLT]: { 0: Abilities.NO_GUARD }, [Species.ARCTOZOLT]: { 0: Abilities.WATER_ABSORB }, [Species.DRACOVISH]: { 0: Abilities.SWIFT_SWIM }, [Species.ARCTOVISH]: { 0: Abilities.STRONG_JAW }, - [Species.DURALUDON]: { 0: Abilities.STEELWORKER }, - [Species.DREEPY]: { 0: Abilities.PARENTAL_BOND }, - [Species.ZACIAN]: { 0: Abilities.UNNERVE }, - [Species.ZAMAZENTA]: { 0: Abilities.UNNERVE }, - [Species.ETERNATUS]: { 0: Abilities.NEUTRALIZING_GAS }, + [Species.DURALUDON]: { 0: Abilities.FILTER, 1: Abilities.UNAWARE }, + [Species.ARCHALUDON]: { 0: Abilities.TRANSISTOR }, + [Species.DREEPY]: { 0: Abilities.TECHNICIAN }, + [Species.DRAKLOAK]: { 0: Abilities.PARENTAL_BOND }, + [Species.DRAGAPULT]: { 0: Abilities.PARENTAL_BOND }, + [Species.ZACIAN]: { 0: Abilities.UNNERVE, 1: Abilities.UNNERVE }, + [Species.ZAMAZENTA]: { 0: Abilities.UNNERVE, 1: Abilities.UNNERVE }, + [Species.ETERNATUS]: { 0: Abilities.NEUTRALIZING_GAS, 1: Abilities.NEUTRALIZING_GAS }, [Species.KUBFU]: { 0: Abilities.IRON_FIST }, - [Species.ZARUDE]: { 0: Abilities.TOUGH_CLAWS }, + [Species.URSHIFU]: { 0: Abilities.IRON_FIST, 1: Abilities.IRON_FIST, 2: Abilities.IRON_FIST, 3: Abilities.IRON_FIST }, + [Species.ZARUDE]: { 0: Abilities.TOUGH_CLAWS, 1: Abilities.TOUGH_CLAWS }, [Species.REGIELEKI]: { 0: Abilities.ELECTRIC_SURGE }, [Species.REGIDRAGO]: { 0: Abilities.MULTISCALE }, [Species.GLASTRIER]: { 0: Abilities.FILTER }, - [Species.SPECTRIER]: { 0: Abilities.SHADOW_SHIELD }, - [Species.CALYREX]: { 0: Abilities.HARVEST }, - [Species.ENAMORUS]: { 0: Abilities.FAIRY_AURA }, + [Species.SPECTRIER]: { 0: Abilities.DAZZLING }, + [Species.CALYREX]: { 0: Abilities.HARVEST, 1: Abilities.FILTER, 2: Abilities.DAZZLING }, + [Species.ENAMORUS]: { 0: Abilities.FAIRY_AURA, 1: Abilities.FAIRY_AURA }, [Species.GALAR_MEOWTH]: { 0: Abilities.UNBURDEN }, + [Species.PERRSERKER]: { 0: Abilities.UNBURDEN }, [Species.GALAR_PONYTA]: { 0: Abilities.CHILLING_NEIGH }, - [Species.GALAR_SLOWPOKE]: { 0: Abilities.UNAWARE }, - [Species.GALAR_FARFETCHD]: { 0: Abilities.INTREPID_SWORD }, + [Species.GALAR_RAPIDASH]: { 0: Abilities.CHILLING_NEIGH }, + [Species.GALAR_SLOWPOKE]: { 0: Abilities.OBLIVIOUS }, + [Species.GALAR_SLOWBRO]: { 0: Abilities.NEUROFORCE }, + [Species.GALAR_SLOWKING]: { 0: Abilities.INTIMIDATE }, + [Species.GALAR_FARFETCHD]: { 0: Abilities.STAKEOUT }, + [Species.SIRFETCHD]: { 0: Abilities.INTREPID_SWORD }, [Species.GALAR_ARTICUNO]: { 0: Abilities.SERENE_GRACE }, [Species.GALAR_ZAPDOS]: { 0: Abilities.TOUGH_CLAWS }, [Species.GALAR_MOLTRES]: { 0: Abilities.DARK_AURA }, [Species.GALAR_CORSOLA]: { 0: Abilities.SHADOW_SHIELD }, + [Species.CURSOLA]: { 0: Abilities.SHADOW_SHIELD }, [Species.GALAR_ZIGZAGOON]: { 0: Abilities.POISON_HEAL }, + [Species.GALAR_LINOONE]: { 0: Abilities.POISON_HEAL }, + [Species.OBSTAGOON]: { 0: Abilities.POISON_HEAL }, [Species.GALAR_DARUMAKA]: { 0: Abilities.FLASH_FIRE }, + [Species.GALAR_DARMANITAN]: { 0: Abilities.FLASH_FIRE, 1: Abilities.FLASH_FIRE }, [Species.GALAR_YAMASK]: { 0: Abilities.TABLETS_OF_RUIN }, + [Species.RUNERIGUS]: { 0: Abilities.TABLETS_OF_RUIN }, [Species.GALAR_STUNFISK]: { 0: Abilities.ARENA_TRAP }, [Species.HISUI_GROWLITHE]: { 0: Abilities.RECKLESS }, + [Species.HISUI_ARCANINE]: { 0: Abilities.RECKLESS }, [Species.HISUI_VOLTORB]: { 0: Abilities.TRANSISTOR }, + [Species.HISUI_ELECTRODE]: { 0: Abilities.TRANSISTOR }, [Species.HISUI_QWILFISH]: { 0: Abilities.MERCILESS }, + [Species.OVERQWIL]: { 0: Abilities.MERCILESS }, [Species.HISUI_SNEASEL]: { 0: Abilities.SCRAPPY }, + [Species.SNEASLER]: { 0: Abilities.SCRAPPY }, [Species.HISUI_ZORUA]: { 0: Abilities.ADAPTABILITY }, + [Species.HISUI_ZOROARK]: { 0: Abilities.ADAPTABILITY }, - [Species.SPRIGATITO]: { 0: Abilities.MAGICIAN }, - [Species.FUECOCO]: { 0: Abilities.PUNK_ROCK }, + [Species.SPRIGATITO]: { 0: Abilities.PICKUP }, + [Species.FLORAGATO]: { 0: Abilities.MAGICIAN }, + [Species.MEOWSCARADA]: { 0: Abilities.MAGICIAN }, + [Species.FUECOCO]: { 0: Abilities.GLUTTONY }, + [Species.CROCALOR]: { 0: Abilities.PUNK_ROCK }, + [Species.SKELEDIRGE]: { 0: Abilities.PUNK_ROCK }, [Species.QUAXLY]: { 0: Abilities.OPPORTUNIST }, + [Species.QUAXWELL]: { 0: Abilities.OPPORTUNIST }, + [Species.QUAQUAVAL]: { 0: Abilities.OPPORTUNIST }, [Species.LECHONK]: { 0: Abilities.SIMPLE }, + [Species.OINKOLOGNE]: { 0: Abilities.SIMPLE, 1: Abilities.SIMPLE }, [Species.TAROUNTULA]: { 0: Abilities.HONEY_GATHER }, - [Species.NYMBLE]: { 0: Abilities.GUTS }, + [Species.SPIDOPS]: { 0: Abilities.HONEY_GATHER }, + [Species.NYMBLE]: { 0: Abilities.TECHNICIAN }, + [Species.LOKIX]: { 0: Abilities.GUTS }, [Species.PAWMI]: { 0: Abilities.TRANSISTOR }, - [Species.TANDEMAUS]: { 0: Abilities.SCRAPPY }, + [Species.PAWMO]: { 0: Abilities.TRANSISTOR }, + [Species.PAWMOT]: { 0: Abilities.TRANSISTOR }, + [Species.TANDEMAUS]: { 0: Abilities.FRIEND_GUARD }, + [Species.MAUSHOLD]: { 0: Abilities.SCRAPPY, 1: Abilities.SCRAPPY }, [Species.FIDOUGH]: { 0: Abilities.WATER_ABSORB }, + [Species.DACHSBUN]: { 0: Abilities.WATER_ABSORB }, [Species.SMOLIV]: { 0: Abilities.RIPEN }, - [Species.SQUAWKABILLY]: { 0: Abilities.MOXIE }, + [Species.DOLLIV]: { 0: Abilities.RIPEN }, + [Species.ARBOLIVA]: { 0: Abilities.RIPEN }, + [Species.SQUAWKABILLY]: { 0: Abilities.MOXIE, 1: Abilities.MOXIE, 2: Abilities.MOXIE, 3: Abilities.MOXIE }, [Species.NACLI]: { 0: Abilities.SOLID_ROCK }, - [Species.CHARCADET]: { 0: Abilities.PRISM_ARMOR }, - [Species.TADBULB]: { 0: Abilities.STAMINA }, + [Species.NACLSTACK]: { 0: Abilities.SOLID_ROCK }, + [Species.GARGANACL]: { 0: Abilities.SOLID_ROCK }, + [Species.CHARCADET]: { 0: Abilities.BATTLE_ARMOR }, + [Species.ARMAROUGE]: { 0: Abilities.PRISM_ARMOR }, + [Species.CERULEDGE]: { 0: Abilities.PRISM_ARMOR }, + [Species.TADBULB]: { 0: Abilities.LEVITATE }, + [Species.BELLIBOLT]: { 0: Abilities.STAMINA }, [Species.WATTREL]: { 0: Abilities.SHEER_FORCE }, + [Species.KILOWATTREL]: { 0: Abilities.SHEER_FORCE }, [Species.MASCHIFF]: { 0: Abilities.STRONG_JAW }, + [Species.MABOSSTIFF]: { 0: Abilities.STRONG_JAW }, [Species.SHROODLE]: { 0: Abilities.CORROSION }, - [Species.BRAMBLIN]: { 0: Abilities.SHADOW_SHIELD }, - [Species.TOEDSCOOL]: { 0: Abilities.PRANKSTER }, + [Species.GRAFAIAI]: { 0: Abilities.CORROSION }, + [Species.BRAMBLIN]: { 0: Abilities.WANDERING_SPIRIT }, + [Species.BRAMBLEGHAST]: { 0: Abilities.SHADOW_SHIELD }, + [Species.TOEDSCOOL]: { 0: Abilities.RUN_AWAY }, + [Species.TOEDSCRUEL]: { 0: Abilities.PRANKSTER }, [Species.KLAWF]: { 0: Abilities.WATER_ABSORB }, - [Species.CAPSAKID]: { 0: Abilities.PARENTAL_BOND }, + [Species.CAPSAKID]: { 0: Abilities.FLOWER_GIFT }, + [Species.SCOVILLAIN]: { 0: Abilities.PARENTAL_BOND }, [Species.RELLOR]: { 0: Abilities.PRANKSTER }, + [Species.RABSCA]: { 0: Abilities.PRANKSTER }, [Species.FLITTLE]: { 0: Abilities.DAZZLING }, + [Species.ESPATHRA]: { 0: Abilities.DAZZLING }, [Species.TINKATINK]: { 0: Abilities.STEELWORKER }, + [Species.TINKATUFF]: { 0: Abilities.STEELWORKER }, + [Species.TINKATON]: { 0: Abilities.STEELWORKER }, [Species.WIGLETT]: { 0: Abilities.STURDY }, + [Species.WUGTRIO]: { 0: Abilities.STURDY }, [Species.BOMBIRDIER]: { 0: Abilities.UNBURDEN }, - [Species.FINIZEN]: { 0: Abilities.IRON_FIST }, + [Species.FINIZEN]: { 0: Abilities.SWIFT_SWIM }, + [Species.PALAFIN]: { 0: Abilities.EMERGENCY_EXIT, 1: Abilities.IRON_FIST }, [Species.VAROOM]: { 0: Abilities.LEVITATE }, + [Species.REVAVROOM]: { 0: Abilities.LEVITATE, 1: Abilities.DARK_AURA, 2: Abilities.FLASH_FIRE, 3: Abilities.MERCILESS, 4: Abilities.FILTER, 5: Abilities.SCRAPPY }, [Species.CYCLIZAR]: { 0: Abilities.PROTEAN }, [Species.ORTHWORM]: { 0: Abilities.REGENERATOR }, - [Species.GLIMMET]: { 0: Abilities.TERA_SHELL }, + [Species.GLIMMET]: { 0: Abilities.STURDY }, + [Species.GLIMMORA]: { 0: Abilities.TERA_SHELL }, [Species.GREAVARD]: { 0: Abilities.UNAWARE }, + [Species.HOUNDSTONE]: { 0: Abilities.UNAWARE }, [Species.FLAMIGO]: { 0: Abilities.MOXIE }, [Species.CETODDLE]: { 0: Abilities.REFRIGERATE }, + [Species.CETITAN]: { 0: Abilities.REFRIGERATE }, [Species.VELUZA]: { 0: Abilities.SUPER_LUCK }, [Species.DONDOZO]: { 0: Abilities.DRAGONS_MAW }, - [Species.TATSUGIRI]: { 0: Abilities.FLUFFY }, + [Species.TATSUGIRI]: { 0: Abilities.FLUFFY, 1: Abilities.FLUFFY, 2: Abilities.FLUFFY }, [Species.GREAT_TUSK]: { 0: Abilities.INTIMIDATE }, [Species.SCREAM_TAIL]: { 0: Abilities.UNAWARE }, [Species.BRUTE_BONNET]: { 0: Abilities.CHLOROPHYLL }, @@ -562,29 +1070,34 @@ export const starterPassiveAbilities: StarterPassiveAbilities = { [Species.IRON_MOTH]: { 0: Abilities.LEVITATE }, [Species.IRON_THORNS]: { 0: Abilities.SAND_STREAM }, [Species.FRIGIBAX]: { 0: Abilities.INTIMIDATE }, - [Species.GIMMIGHOUL]: { 0: Abilities.HONEY_GATHER }, + [Species.ARCTIBAX]: { 0: Abilities.INTIMIDATE }, + [Species.BAXCALIBUR]: { 0: Abilities.INTIMIDATE }, + [Species.GIMMIGHOUL]: { 0: Abilities.HONEY_GATHER, 1: Abilities.HONEY_GATHER }, + [Species.GHOLDENGO]: { 0: Abilities.HONEY_GATHER }, [Species.WO_CHIEN]: { 0: Abilities.VESSEL_OF_RUIN }, [Species.CHIEN_PAO]: { 0: Abilities.INTIMIDATE }, [Species.TING_LU]: { 0: Abilities.STAMINA }, [Species.CHI_YU]: { 0: Abilities.BERSERK }, [Species.ROARING_MOON]: { 0: Abilities.INTIMIDATE }, [Species.IRON_VALIANT]: { 0: Abilities.NEUROFORCE }, - [Species.KORAIDON]: { 0: Abilities.OPPORTUNIST }, - [Species.MIRAIDON]: { 0: Abilities.OPPORTUNIST }, + [Species.KORAIDON]: { 0: Abilities.THERMAL_EXCHANGE }, + [Species.MIRAIDON]: { 0: Abilities.COMPOUND_EYES }, [Species.WALKING_WAKE]: { 0: Abilities.BEAST_BOOST }, [Species.IRON_LEAVES]: { 0: Abilities.SHARPNESS }, - [Species.POLTCHAGEIST]: { 0: Abilities.TRIAGE }, + [Species.POLTCHAGEIST]: { 0: Abilities.TRIAGE, 1: Abilities.TRIAGE }, + [Species.SINISTCHA]: { 0: Abilities.TRIAGE, 1: Abilities.TRIAGE }, [Species.OKIDOGI]: { 0: Abilities.DARK_AURA }, [Species.MUNKIDORI]: { 0: Abilities.MAGICIAN }, [Species.FEZANDIPITI]: { 0: Abilities.PIXILATE }, - [Species.OGERPON]: { 0: Abilities.OPPORTUNIST }, + [Species.OGERPON]: { 0: Abilities.OPPORTUNIST, 1: Abilities.SUPER_LUCK, 2: Abilities.FLASH_FIRE, 3: Abilities.MAGIC_GUARD, 4: Abilities.OPPORTUNIST, 5: Abilities.SUPER_LUCK, 6: Abilities.FLASH_FIRE, 7: Abilities.MAGIC_GUARD }, [Species.GOUGING_FIRE]: { 0: Abilities.BEAST_BOOST }, [Species.RAGING_BOLT]: { 0: Abilities.BEAST_BOOST }, [Species.IRON_BOULDER]: { 0: Abilities.SHARPNESS }, [Species.IRON_CROWN]: { 0: Abilities.SHARPNESS }, - [Species.TERAPAGOS]: { 0: Abilities.SHIELD_DUST }, + [Species.TERAPAGOS]: { 0: Abilities.SHIELD_DUST, 1: Abilities.SHIELD_DUST, 2: Abilities.SHIELD_DUST }, [Species.PECHARUNT]: { 0: Abilities.TOXIC_CHAIN }, - [Species.PALDEA_TAUROS]: { 0: Abilities.ADAPTABILITY }, - [Species.PALDEA_WOOPER]: { 0: Abilities.THICK_FAT }, + [Species.PALDEA_TAUROS]: { 0: Abilities.STAMINA, 1: Abilities.ADAPTABILITY, 2: Abilities.ADAPTABILITY }, + [Species.PALDEA_WOOPER]: { 0: Abilities.POISON_TOUCH }, + [Species.CLODSIRE]: { 0: Abilities.THICK_FAT }, [Species.BLOODMOON_URSALUNA]: { 0: Abilities.BERSERK } }; diff --git a/src/data/balance/pokemon-evolutions.ts b/src/data/balance/pokemon-evolutions.ts index c34bc229bd7..17f71f3c3c9 100644 --- a/src/data/balance/pokemon-evolutions.ts +++ b/src/data/balance/pokemon-evolutions.ts @@ -3,7 +3,7 @@ import { Gender } from "#app/data/gender"; import { PokeballType } from "#enums/pokeball"; import type Pokemon from "#app/field/pokemon"; import { PokemonType } from "#enums/pokemon-type"; -import * as Utils from "#app/utils"; +import { randSeedInt } from "#app/utils"; import { WeatherType } from "#enums/weather-type"; import { Nature } from "#enums/nature"; import { Biome } from "#enums/biome"; @@ -179,7 +179,7 @@ class TimeOfDayEvolutionCondition extends SpeciesEvolutionCondition { class MoveEvolutionCondition extends SpeciesEvolutionCondition { public move: Moves; constructor(move: Moves) { - super(p => p.moveset.filter(m => m?.moveId === move).length > 0); + super(p => p.moveset.filter(m => m.moveId === move).length > 0); this.move = move; const moveKey = Moves[this.move].split("_").filter(f => f).map((f, i) => i ? `${f[0]}${f.slice(1).toLowerCase()}` : f.toLowerCase()).join(""); this.description = i18next.t("pokemonEvolutions:move", { move: i18next.t(`move:${moveKey}.name`) }); @@ -282,7 +282,7 @@ class TyrogueEvolutionCondition extends SpeciesEvolutionCondition { public move: Moves; constructor(move: Moves) { super(p => - p.getMoveset(true).find(m => m && [ Moves.LOW_SWEEP, Moves.MACH_PUNCH, Moves.RAPID_SPIN ].includes(m?.moveId))?.moveId === move); + p.getMoveset(true).find(m => m && [ Moves.LOW_SWEEP, Moves.MACH_PUNCH, Moves.RAPID_SPIN ].includes(m.moveId))?.moveId === move); this.move = move; const moveKey = Moves[this.move].split("_").filter(f => f).map((f, i) => i ? `${f[0]}${f.slice(1).toLowerCase()}` : f.toLowerCase()).join(""); this.description = i18next.t("pokemonEvolutions:move", { move: i18next.t(`move:${moveKey}.name`) }); @@ -303,11 +303,11 @@ class MoveTimeOfDayEvolutionCondition extends SpeciesEvolutionCondition { public timesOfDay: TimeOfDay[]; constructor(move: Moves, tod: "day" | "night") { if (tod === "day") { - super(p => p.moveset.filter(m => m?.moveId === move).length > 0 && (globalScene.arena.getTimeOfDay() === TimeOfDay.DAWN || globalScene.arena.getTimeOfDay() === TimeOfDay.DAY)); + super(p => p.moveset.filter(m => m.moveId === move).length > 0 && (globalScene.arena.getTimeOfDay() === TimeOfDay.DAWN || globalScene.arena.getTimeOfDay() === TimeOfDay.DAY)); this.move = move; this.timesOfDay = [ TimeOfDay.DAWN, TimeOfDay.DAY ]; } else if (tod === "night") { - super(p => p.moveset.filter(m => m?.moveId === move).length > 0 && (globalScene.arena.getTimeOfDay() === TimeOfDay.DUSK || globalScene.arena.getTimeOfDay() === TimeOfDay.NIGHT)); + super(p => p.moveset.filter(m => m.moveId === move).length > 0 && (globalScene.arena.getTimeOfDay() === TimeOfDay.DUSK || globalScene.arena.getTimeOfDay() === TimeOfDay.NIGHT)); this.move = move; this.timesOfDay = [ TimeOfDay.DUSK, TimeOfDay.NIGHT ]; } else { @@ -332,8 +332,8 @@ class DunsparceEvolutionCondition extends SpeciesEvolutionCondition { constructor() { super(p => { let ret = false; - if (p.moveset.filter(m => m?.moveId === Moves.HYPER_DRILL).length > 0) { - globalScene.executeWithSeedOffset(() => ret = !Utils.randSeedInt(4), p.id); + if (p.moveset.filter(m => m.moveId === Moves.HYPER_DRILL).length > 0) { + globalScene.executeWithSeedOffset(() => ret = !randSeedInt(4), p.id); } return ret; }); @@ -346,7 +346,7 @@ class TandemausEvolutionCondition extends SpeciesEvolutionCondition { constructor() { super(p => { let ret = false; - globalScene.executeWithSeedOffset(() => ret = !Utils.randSeedInt(4), p.id); + globalScene.executeWithSeedOffset(() => ret = !randSeedInt(4), p.id); return ret; }); } @@ -1540,13 +1540,13 @@ export const pokemonEvolutions: PokemonEvolutions = { new SpeciesEvolution(Species.TOGEKISS, 1, EvolutionItem.SHINY_STONE, null, SpeciesWildEvolutionDelay.VERY_LONG) ], [Species.AIPOM]: [ - new SpeciesEvolution(Species.AMBIPOM, 32, null, new MoveEvolutionCondition(Moves.DOUBLE_HIT), SpeciesWildEvolutionDelay.LONG) + new SpeciesEvolution(Species.AMBIPOM, 32, null, new MoveEvolutionCondition(Moves.DOUBLE_HIT), SpeciesWildEvolutionDelay.LONG) ], [Species.SUNKERN]: [ new SpeciesEvolution(Species.SUNFLORA, 1, EvolutionItem.SUN_STONE, null, SpeciesWildEvolutionDelay.LONG) ], [Species.YANMA]: [ - new SpeciesEvolution(Species.YANMEGA, 33, null, new MoveEvolutionCondition(Moves.ANCIENT_POWER), SpeciesWildEvolutionDelay.LONG) + new SpeciesEvolution(Species.YANMEGA, 33, null, new MoveEvolutionCondition(Moves.ANCIENT_POWER), SpeciesWildEvolutionDelay.LONG) ], [Species.MURKROW]: [ new SpeciesEvolution(Species.HONCHKROW, 1, EvolutionItem.DUSK_STONE, null, SpeciesWildEvolutionDelay.VERY_LONG) @@ -1555,11 +1555,11 @@ export const pokemonEvolutions: PokemonEvolutions = { new SpeciesEvolution(Species.MISMAGIUS, 1, EvolutionItem.DUSK_STONE, null, SpeciesWildEvolutionDelay.VERY_LONG) ], [Species.GIRAFARIG]: [ - new SpeciesEvolution(Species.FARIGIRAF, 32, null, new MoveEvolutionCondition(Moves.TWIN_BEAM), SpeciesWildEvolutionDelay.LONG) + new SpeciesEvolution(Species.FARIGIRAF, 32, null, new MoveEvolutionCondition(Moves.TWIN_BEAM), SpeciesWildEvolutionDelay.LONG) ], [Species.DUNSPARCE]: [ new SpeciesFormEvolution(Species.DUDUNSPARCE, "", "three-segment", 32, null, new DunsparceEvolutionCondition(), SpeciesWildEvolutionDelay.LONG), - new SpeciesFormEvolution(Species.DUDUNSPARCE, "", "two-segment", 32, null, new MoveEvolutionCondition(Moves.HYPER_DRILL), SpeciesWildEvolutionDelay.LONG) + new SpeciesFormEvolution(Species.DUDUNSPARCE, "", "two-segment", 32, null, new MoveEvolutionCondition(Moves.HYPER_DRILL), SpeciesWildEvolutionDelay.LONG) ], [Species.GLIGAR]: [ new SpeciesEvolution(Species.GLISCOR, 1, EvolutionItem.RAZOR_FANG, new TimeOfDayEvolutionCondition("night") /* Razor fang at night*/, SpeciesWildEvolutionDelay.VERY_LONG) @@ -1571,10 +1571,10 @@ export const pokemonEvolutions: PokemonEvolutions = { new SpeciesEvolution(Species.URSALUNA, 1, EvolutionItem.PEAT_BLOCK, null, SpeciesWildEvolutionDelay.VERY_LONG) //Ursaring does not evolve into Bloodmoon Ursaluna ], [Species.PILOSWINE]: [ - new SpeciesEvolution(Species.MAMOSWINE, 1, null, new MoveEvolutionCondition(Moves.ANCIENT_POWER), SpeciesWildEvolutionDelay.VERY_LONG) + new SpeciesEvolution(Species.MAMOSWINE, 1, null, new MoveEvolutionCondition(Moves.ANCIENT_POWER), SpeciesWildEvolutionDelay.VERY_LONG) ], [Species.STANTLER]: [ - new SpeciesEvolution(Species.WYRDEER, 25, null, new MoveEvolutionCondition(Moves.PSYSHIELD_BASH), SpeciesWildEvolutionDelay.VERY_LONG) + new SpeciesEvolution(Species.WYRDEER, 25, null, new MoveEvolutionCondition(Moves.PSYSHIELD_BASH), SpeciesWildEvolutionDelay.VERY_LONG) ], [Species.LOMBRE]: [ new SpeciesEvolution(Species.LUDICOLO, 1, EvolutionItem.WATER_STONE, null, SpeciesWildEvolutionDelay.LONG) @@ -1592,7 +1592,7 @@ export const pokemonEvolutions: PokemonEvolutions = { new SpeciesEvolution(Species.ROSERADE, 1, EvolutionItem.SHINY_STONE, null, SpeciesWildEvolutionDelay.VERY_LONG) ], [Species.BONSLY]: [ - new SpeciesEvolution(Species.SUDOWOODO, 1, null, new MoveEvolutionCondition(Moves.MIMIC), SpeciesWildEvolutionDelay.MEDIUM) + new SpeciesEvolution(Species.SUDOWOODO, 1, null, new MoveEvolutionCondition(Moves.MIMIC), SpeciesWildEvolutionDelay.MEDIUM) ], [Species.MIME_JR]: [ new SpeciesEvolution(Species.GALAR_MR_MIME, 1, null, new MoveTimeOfDayEvolutionCondition(Moves.MIMIC, "night"), SpeciesWildEvolutionDelay.MEDIUM), @@ -1651,10 +1651,10 @@ export const pokemonEvolutions: PokemonEvolutions = { new SpeciesFormEvolution(Species.LYCANROC, "", "midnight", 25, null, new TimeOfDayEvolutionCondition("night")) ], [Species.STEENEE]: [ - new SpeciesEvolution(Species.TSAREENA, 28, null, new MoveEvolutionCondition(Moves.STOMP), SpeciesWildEvolutionDelay.LONG) + new SpeciesEvolution(Species.TSAREENA, 28, null, new MoveEvolutionCondition(Moves.STOMP), SpeciesWildEvolutionDelay.LONG) ], [Species.POIPOLE]: [ - new SpeciesEvolution(Species.NAGANADEL, 1, null, new MoveEvolutionCondition(Moves.DRAGON_PULSE), SpeciesWildEvolutionDelay.LONG) + new SpeciesEvolution(Species.NAGANADEL, 1, null, new MoveEvolutionCondition(Moves.DRAGON_PULSE), SpeciesWildEvolutionDelay.LONG) ], [Species.ALOLA_SANDSHREW]: [ new SpeciesEvolution(Species.ALOLA_SANDSLASH, 1, EvolutionItem.ICE_STONE, null, SpeciesWildEvolutionDelay.LONG) @@ -1720,7 +1720,7 @@ export const pokemonEvolutions: PokemonEvolutions = { new SpeciesEvolution(Species.HISUI_ELECTRODE, 1, EvolutionItem.LEAF_STONE, null, SpeciesWildEvolutionDelay.LONG) ], [Species.HISUI_QWILFISH]: [ - new SpeciesEvolution(Species.OVERQWIL, 28, null, new MoveEvolutionCondition(Moves.BARB_BARRAGE), SpeciesWildEvolutionDelay.LONG) + new SpeciesEvolution(Species.OVERQWIL, 28, null, new MoveEvolutionCondition(Moves.BARB_BARRAGE), SpeciesWildEvolutionDelay.LONG) ], [Species.HISUI_SNEASEL]: [ new SpeciesEvolution(Species.SNEASLER, 1, EvolutionItem.RAZOR_CLAW, new TimeOfDayEvolutionCondition("day") /* Razor claw at day*/, SpeciesWildEvolutionDelay.VERY_LONG) diff --git a/src/data/balance/species-egg-tiers.ts b/src/data/balance/species-egg-tiers.ts index fee48695565..0db2c917589 100644 --- a/src/data/balance/species-egg-tiers.ts +++ b/src/data/balance/species-egg-tiers.ts @@ -169,7 +169,7 @@ export const speciesEggTiers = { [Species.CACNEA]: EggTier.COMMON, [Species.SWABLU]: EggTier.COMMON, [Species.ZANGOOSE]: EggTier.RARE, - [Species.SEVIPER]: EggTier.COMMON, + [Species.SEVIPER]: EggTier.RARE, [Species.LUNATONE]: EggTier.COMMON, [Species.SOLROCK]: EggTier.COMMON, [Species.BARBOACH]: EggTier.COMMON, diff --git a/src/data/balance/tms.ts b/src/data/balance/tms.ts index 788ffd4f273..62199fd6968 100644 --- a/src/data/balance/tms.ts +++ b/src/data/balance/tms.ts @@ -19126,6 +19126,8 @@ export const tmSpecies: TmSpecies = { Species.KROOKODILE, Species.SCRAGGY, Species.SCRAFTY, + Species.YAMASK, + Species.COFAGRIGUS, Species.SAWSBUCK, Species.LITWICK, Species.LAMPENT, @@ -19163,6 +19165,7 @@ export const tmSpecies: TmSpecies = { Species.SINISTEA, Species.POLTEAGEIST, Species.PERRSERKER, + Species.RUNERIGUS, Species.PINCURCHIN, Species.STONJOURNER, Species.CUFANT, @@ -19228,6 +19231,7 @@ export const tmSpecies: TmSpecies = { Species.GALAR_SLOWBRO, Species.GALAR_WEEZING, Species.GALAR_SLOWKING, + Species.GALAR_YAMASK, Species.HISUI_ELECTRODE, Species.HISUI_TYPHLOSION, Species.HISUI_QWILFISH, @@ -30922,6 +30926,7 @@ export const tmSpecies: TmSpecies = { Species.MURKROW, Species.SLOWKING, Species.MISDREAVUS, + Species.UNOWN, Species.GIRAFARIG, Species.PINECO, Species.FORRETRESS, @@ -40134,6 +40139,8 @@ export const tmSpecies: TmSpecies = { Species.MEOWSTIC, Species.SPRITZEE, Species.AROMATISSE, + Species.INKAY, + Species.MALAMAR, Species.SYLVEON, Species.CARBINK, Species.PHANTUMP, @@ -49173,6 +49180,7 @@ export const tmSpecies: TmSpecies = { Species.KANGASKHAN, Species.GOLDEEN, Species.SEAKING, + Species.GYARADOS, Species.LAPRAS, Species.VAPOREON, Species.KABUTOPS, @@ -52587,6 +52595,7 @@ export const tmSpecies: TmSpecies = { Species.SNORLAX, Species.MEWTWO, Species.MEW, + Species.MEGANIUM, Species.CYNDAQUIL, Species.QUILAVA, Species.TYPHLOSION, @@ -66205,7 +66214,11 @@ export const tmSpecies: TmSpecies = { Species.SQUIRTLE, Species.WARTORTLE, Species.BLASTOISE, + Species.CATERPIE, + Species.METAPOD, Species.BUTTERFREE, + Species.WEEDLE, + Species.KAKUNA, Species.BEEDRILL, Species.PIDGEY, Species.PIDGEOTTO, @@ -66451,7 +66464,10 @@ export const tmSpecies: TmSpecies = { Species.MIGHTYENA, Species.ZIGZAGOON, Species.LINOONE, + Species.WURMPLE, + Species.SILCOON, Species.BEAUTIFLY, + Species.CASCOON, Species.DUSTOX, Species.LOTAD, Species.LOMBRE, @@ -66987,6 +67003,8 @@ export const tmSpecies: TmSpecies = { Species.STAKATAKA, Species.BLACEPHALON, Species.ZERAORA, + Species.MELTAN, + Species.MELMETAL, Species.ALOLA_RATTATA, Species.ALOLA_RATICATE, Species.ALOLA_RAICHU, @@ -67020,8 +67038,19 @@ export const tmSpecies: TmSpecies = { Species.ROOKIDEE, Species.CORVISQUIRE, Species.CORVIKNIGHT, + Species.BLIPBUG, + Species.DOTTLER, + Species.ORBEETLE, + Species.NICKIT, + Species.THIEVUL, + Species.GOSSIFLEUR, + Species.ELDEGOSS, + Species.WOOLOO, + Species.DUBWOOL, Species.CHEWTLE, Species.DREDNAW, + Species.YAMPER, + Species.BOLTUND, Species.ROLYCOLY, Species.CARKOL, Species.COALOSSAL, @@ -67035,6 +67064,10 @@ export const tmSpecies: TmSpecies = { Species.BARRASKEWDA, Species.TOXEL, Species.TOXTRICITY, + Species.SIZZLIPEDE, + Species.CENTISKORCH, + Species.CLOBBOPUS, + Species.GRAPPLOCT, Species.SINISTEA, Species.POLTEAGEIST, Species.HATENNA, @@ -67043,7 +67076,14 @@ export const tmSpecies: TmSpecies = { Species.IMPIDIMP, Species.MORGREM, Species.GRIMMSNARL, + Species.OBSTAGOON, Species.PERRSERKER, + Species.CURSOLA, + Species.SIRFETCHD, + Species.MR_RIME, + Species.RUNERIGUS, + Species.MILCERY, + Species.ALCREMIE, Species.FALINKS, Species.PINCURCHIN, Species.SNOM, @@ -67054,6 +67094,11 @@ export const tmSpecies: TmSpecies = { Species.MORPEKO, Species.CUFANT, Species.COPPERAJAH, + Species.DRACOZOLT, + Species.ARCTOZOLT, + Species.DRACOVISH, + Species.ARCTOVISH, + Species.DURALUDON, Species.DREEPY, Species.DRAKLOAK, Species.DRAGAPULT, @@ -67195,13 +67240,24 @@ export const tmSpecies: TmSpecies = { Species.IRON_CROWN, Species.PECHARUNT, Species.GALAR_MEOWTH, + Species.GALAR_PONYTA, + Species.GALAR_RAPIDASH, Species.GALAR_SLOWPOKE, Species.GALAR_SLOWBRO, + Species.GALAR_FARFETCHD, Species.GALAR_WEEZING, + Species.GALAR_MR_MIME, Species.GALAR_ARTICUNO, Species.GALAR_ZAPDOS, Species.GALAR_MOLTRES, Species.GALAR_SLOWKING, + Species.GALAR_CORSOLA, + Species.GALAR_ZIGZAGOON, + Species.GALAR_LINOONE, + Species.GALAR_DARUMAKA, + Species.GALAR_DARMANITAN, + Species.GALAR_YAMASK, + Species.GALAR_STUNFISK, Species.HISUI_GROWLITHE, Species.HISUI_ARCANINE, Species.HISUI_VOLTORB, diff --git a/src/data/battle-anims.ts b/src/data/battle-anims.ts index 86060ef4bfc..511c80bee72 100644 --- a/src/data/battle-anims.ts +++ b/src/data/battle-anims.ts @@ -4,7 +4,6 @@ import { MoveFlags } from "#enums/MoveFlags"; import type Pokemon from "../field/pokemon"; import { type nil, getFrameMs, getEnumKeys, getEnumValues, animationFileName } from "../utils"; import type { BattlerIndex } from "../battle"; -import type { Element } from "json-stable-stringify"; import { Moves } from "#enums/moves"; import { SubstituteTag } from "./battler-tags"; import { isNullOrUndefined } from "../utils"; @@ -1429,7 +1428,8 @@ export class MoveAnim extends BattleAnim { public move: Moves; constructor(move: Moves, user: Pokemon, target: BattlerIndex, playOnEmptyField = false) { - super(user, globalScene.getField()[target], playOnEmptyField); + // Set target to the user pokemon if no target is found to avoid crashes + super(user, globalScene.getField()[target] ?? user, playOnEmptyField); this.move = move; } @@ -1731,10 +1731,12 @@ export async function populateAnims() { let props: string[]; for (let p = 0; p < propSets.length; p++) { props = propSets[p]; + // @ts-ignore TODO const ai = props.indexOf(a.key); if (ai === -1) { continue; } + // @ts-ignore TODO const bi = props.indexOf(b.key); return ai < bi ? -1 : ai > bi ? 1 : 0; diff --git a/src/data/battler-tags.ts b/src/data/battler-tags.ts index 4952488b48e..76e91485460 100644 --- a/src/data/battler-tags.ts +++ b/src/data/battler-tags.ts @@ -5,6 +5,7 @@ import { BlockNonDirectDamageAbAttr, FlinchEffectAbAttr, ProtectStatAbAttr, + ConditionalUserFieldProtectStatAbAttr, ReverseDrainAbAttr, } from "#app/data/ability"; import { ChargeAnim, CommonAnim, CommonBattleAnim, MoveChargeAnim } from "#app/data/battle-anims"; @@ -29,7 +30,6 @@ import { CommonAnimPhase } from "#app/phases/common-anim-phase"; import { MoveEffectPhase } from "#app/phases/move-effect-phase"; import { MovePhase } from "#app/phases/move-phase"; import { PokemonHealPhase } from "#app/phases/pokemon-heal-phase"; -import { ShowAbilityPhase } from "#app/phases/show-ability-phase"; import type { StatStageChangeCallback } from "#app/phases/stat-stage-change-phase"; import { StatStageChangePhase } from "#app/phases/stat-stage-change-phase"; import i18next from "#app/plugins/i18n"; @@ -42,7 +42,7 @@ import { Species } from "#enums/species"; import { EFFECTIVE_STATS, getStatKey, Stat, type BattleStat, type EffectiveStat } from "#enums/stat"; import { StatusEffect } from "#enums/status-effect"; import { WeatherType } from "#enums/weather-type"; -import * as Utils from "../utils"; +import { isNullOrUndefined } from "#app/utils"; export enum BattlerTagLapseType { FAINT, @@ -302,7 +302,7 @@ export class DisabledTag extends MoveRestrictionBattlerTag { super.onAdd(pokemon); const move = pokemon.getLastXMoves(-1).find(m => !m.virtual); - if (Utils.isNullOrUndefined(move) || move.move === Moves.STRUGGLE || move.move === Moves.NONE) { + if (isNullOrUndefined(move) || move.move === Moves.STRUGGLE || move.move === Moves.NONE) { return; } @@ -1174,13 +1174,13 @@ export class EncoreTag extends MoveRestrictionBattlerTag { const movePhase = globalScene.findPhase(m => m instanceof MovePhase && m.pokemon === pokemon); if (movePhase) { - const movesetMove = pokemon.getMoveset().find(m => m!.moveId === this.moveId); // TODO: is this bang correct? + const movesetMove = pokemon.getMoveset().find(m => m.moveId === this.moveId); if (movesetMove) { const lastMove = pokemon.getLastXMoves(1)[0]; globalScene.tryReplacePhase( m => m instanceof MovePhase && m.pokemon === pokemon, - new MovePhase(pokemon, lastMove.targets!, movesetMove), - ); // TODO: is this bang correct? + new MovePhase(pokemon, lastMove.targets ?? [], movesetMove), + ); } } } @@ -1191,7 +1191,7 @@ export class EncoreTag extends MoveRestrictionBattlerTag { */ override lapse(pokemon: Pokemon, lapseType: BattlerTagLapseType): boolean { if (lapseType === BattlerTagLapseType.CUSTOM) { - const encoredMove = pokemon.getMoveset().find(m => m?.moveId === this.moveId); + const encoredMove = pokemon.getMoveset().find(m => m.moveId === this.moveId); if (encoredMove && encoredMove?.getPpRatio() > 0) { return true; } @@ -1644,7 +1644,9 @@ export class ContactDamageProtectedTag extends ProtectedTag { if (effectPhase instanceof MoveEffectPhase && effectPhase.move.getMove().hasFlag(MoveFlags.MAKES_CONTACT)) { const attacker = effectPhase.getPokemon(); if (!attacker.hasAbilityWithAttr(BlockNonDirectDamageAbAttr)) { - attacker.damageAndUpdate(toDmgValue(attacker.getMaxHp() * (1 / this.damageRatio)), { result: HitResult.INDIRECT }); + attacker.damageAndUpdate(toDmgValue(attacker.getMaxHp() * (1 / this.damageRatio)), { + result: HitResult.INDIRECT, + }); } } } @@ -1898,12 +1900,14 @@ export class TruantTag extends AbilityBattlerTag { if (lastMove && lastMove.move !== Moves.NONE) { (globalScene.getCurrentPhase() as MovePhase).cancel(); - globalScene.unshiftPhase(new ShowAbilityPhase(pokemon.id, passive)); + // TODO: Ability displays should be handled by the ability + globalScene.queueAbilityDisplay(pokemon, passive, true); globalScene.queueMessage( i18next.t("battlerTags:truantLapse", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), }), ); + globalScene.queueAbilityDisplay(pokemon, passive, false); } return true; @@ -1970,7 +1974,7 @@ export class HighestStatBoostTag extends AbilityBattlerTag { let highestStat: EffectiveStat; EFFECTIVE_STATS.map(s => - pokemon.getEffectiveStat(s, undefined, undefined, undefined, undefined, undefined, undefined, true), + pokemon.getEffectiveStat(s, undefined, undefined, undefined, undefined, undefined, undefined, undefined, true), ).reduce((highestValue: number, value: number, i: number) => { if (value > highestValue) { highestStat = EFFECTIVE_STATS[i]; @@ -2149,6 +2153,21 @@ export class TypeBoostTag extends BattlerTag { lapse(pokemon: Pokemon, lapseType: BattlerTagLapseType): boolean { return lapseType !== BattlerTagLapseType.CUSTOM || super.lapse(pokemon, lapseType); } + + override onAdd(pokemon: Pokemon): void { + globalScene.queueMessage( + i18next.t("abilityTriggers:typeImmunityPowerBoost", { + pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), + typeName: i18next.t(`pokemonInfo:Type.${PokemonType[this.boostedType]}`), + }), + ); + } + + override onOverlap(pokemon: Pokemon): void { + globalScene.queueMessage( + i18next.t("abilityTriggers:moveImmunity", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) }), + ); + } } export class CritBoostTag extends BattlerTag { @@ -2240,7 +2259,9 @@ export class SaltCuredTag extends BattlerTag { if (!cancelled.value) { const pokemonSteelOrWater = pokemon.isOfType(PokemonType.STEEL) || pokemon.isOfType(PokemonType.WATER); - pokemon.damageAndUpdate(toDmgValue(pokemonSteelOrWater ? pokemon.getMaxHp() / 4 : pokemon.getMaxHp() / 8), { result: HitResult.INDIRECT }); + pokemon.damageAndUpdate(toDmgValue(pokemonSteelOrWater ? pokemon.getMaxHp() / 4 : pokemon.getMaxHp() / 8), { + result: HitResult.INDIRECT, + }); globalScene.queueMessage( i18next.t("battlerTags:saltCuredLapse", { @@ -3005,6 +3026,7 @@ export class MysteryEncounterPostSummonTag extends BattlerTag { if (lapseType === BattlerTagLapseType.CUSTOM) { const cancelled = new BooleanHolder(false); applyAbAttrs(ProtectStatAbAttr, pokemon, cancelled); + applyAbAttrs(ConditionalUserFieldProtectStatAbAttr, pokemon, cancelled, false, pokemon); if (!cancelled.value) { if (pokemon.mysteryEncounterBattleEffects) { pokemon.mysteryEncounterBattleEffects(pokemon); @@ -3184,7 +3206,7 @@ export class ImprisonTag extends MoveRestrictionBattlerTag { public override isMoveRestricted(move: Moves, _user: Pokemon): boolean { const source = this.getSourcePokemon(); if (source) { - const sourceMoveset = source.getMoveset().map(m => m!.moveId); + const sourceMoveset = source.getMoveset().map(m => m.moveId); return sourceMoveset?.includes(move) && source.isActive(true); } return false; @@ -3354,7 +3376,7 @@ export class GrudgeTag extends BattlerTag { if (lapseType === BattlerTagLapseType.CUSTOM && sourcePokemon) { if (sourcePokemon.isActive() && pokemon.isOpponent(sourcePokemon)) { const lastMove = pokemon.turnData.attacksReceived[0]; - const lastMoveData = sourcePokemon.getMoveset().find(m => m?.moveId === lastMove.move); + const lastMoveData = sourcePokemon.getMoveset().find(m => m.moveId === lastMove.move); if (lastMoveData && lastMove.move !== Moves.STRUGGLE) { lastMoveData.ppUsed = lastMoveData.getMovePp(); globalScene.queueMessage( diff --git a/src/data/berry.ts b/src/data/berry.ts index ed8ae8d2b62..8a58d337aa4 100644 --- a/src/data/berry.ts +++ b/src/data/berry.ts @@ -2,7 +2,7 @@ import { getPokemonNameWithAffix } from "../messages"; import type Pokemon from "../field/pokemon"; import { HitResult } from "../field/pokemon"; import { getStatusEffectHealText } from "./status-effect"; -import * as Utils from "../utils"; +import { NumberHolder, toDmgValue, randSeedInt } from "#app/utils"; import { DoubleBerryEffectAbAttr, PostItemLostAbAttr, @@ -43,7 +43,7 @@ export function getBerryPredicate(berryType: BerryType): BerryPredicate { case BerryType.APICOT: case BerryType.SALAC: return (pokemon: Pokemon) => { - const threshold = new Utils.NumberHolder(0.25); + const threshold = new NumberHolder(0.25); // Offset BerryType such that LIECHI -> Stat.ATK = 1, GANLON -> Stat.DEF = 2, so on and so forth const stat: BattleStat = berryType - BerryType.ENIGMA; applyAbAttrs(ReduceBerryUseThresholdAbAttr, pokemon, null, false, threshold); @@ -51,21 +51,21 @@ export function getBerryPredicate(berryType: BerryType): BerryPredicate { }; case BerryType.LANSAT: return (pokemon: Pokemon) => { - const threshold = new Utils.NumberHolder(0.25); + const threshold = new NumberHolder(0.25); applyAbAttrs(ReduceBerryUseThresholdAbAttr, pokemon, null, false, threshold); return pokemon.getHpRatio() < 0.25 && !pokemon.getTag(BattlerTagType.CRIT_BOOST); }; case BerryType.STARF: return (pokemon: Pokemon) => { - const threshold = new Utils.NumberHolder(0.25); + const threshold = new NumberHolder(0.25); applyAbAttrs(ReduceBerryUseThresholdAbAttr, pokemon, null, false, threshold); return pokemon.getHpRatio() < 0.25; }; case BerryType.LEPPA: return (pokemon: Pokemon) => { - const threshold = new Utils.NumberHolder(0.25); + const threshold = new NumberHolder(0.25); applyAbAttrs(ReduceBerryUseThresholdAbAttr, pokemon, null, false, threshold); - return !!pokemon.getMoveset().find(m => !m?.getPpRatio()); + return !!pokemon.getMoveset().find(m => !m.getPpRatio()); }; } } @@ -80,7 +80,7 @@ export function getBerryEffectFunc(berryType: BerryType): BerryEffectFunc { if (pokemon.battleData) { pokemon.battleData.berriesEaten.push(berryType); } - const hpHealed = new Utils.NumberHolder(Utils.toDmgValue(pokemon.getMaxHp() / 4)); + const hpHealed = new NumberHolder(toDmgValue(pokemon.getMaxHp() / 4)); applyAbAttrs(DoubleBerryEffectAbAttr, pokemon, null, false, hpHealed); globalScene.unshiftPhase( new PokemonHealPhase( @@ -118,7 +118,7 @@ export function getBerryEffectFunc(berryType: BerryType): BerryEffectFunc { } // Offset BerryType such that LIECHI -> Stat.ATK = 1, GANLON -> Stat.DEF = 2, so on and so forth const stat: BattleStat = berryType - BerryType.ENIGMA; - const statStages = new Utils.NumberHolder(1); + const statStages = new NumberHolder(1); applyAbAttrs(DoubleBerryEffectAbAttr, pokemon, null, false, statStages); globalScene.unshiftPhase(new StatStageChangePhase(pokemon.getBattlerIndex(), true, [stat], statStages.value)); applyPostItemLostAbAttrs(PostItemLostAbAttr, berryOwner ?? pokemon, false); @@ -136,8 +136,8 @@ export function getBerryEffectFunc(berryType: BerryType): BerryEffectFunc { if (pokemon.battleData) { pokemon.battleData.berriesEaten.push(berryType); } - const randStat = Utils.randSeedInt(Stat.SPD, Stat.ATK); - const stages = new Utils.NumberHolder(2); + const randStat = randSeedInt(Stat.SPD, Stat.ATK); + const stages = new NumberHolder(2); applyAbAttrs(DoubleBerryEffectAbAttr, pokemon, null, false, stages); globalScene.unshiftPhase(new StatStageChangePhase(pokemon.getBattlerIndex(), true, [randStat], stages.value)); applyPostItemLostAbAttrs(PostItemLostAbAttr, berryOwner ?? pokemon, false); @@ -147,9 +147,9 @@ export function getBerryEffectFunc(berryType: BerryType): BerryEffectFunc { if (pokemon.battleData) { pokemon.battleData.berriesEaten.push(berryType); } - const ppRestoreMove = pokemon.getMoveset().find(m => !m?.getPpRatio()) - ? pokemon.getMoveset().find(m => !m?.getPpRatio()) - : pokemon.getMoveset().find(m => m!.getPpRatio() < 1); // TODO: is this bang correct? + 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); globalScene.queueMessage( diff --git a/src/data/challenge.ts b/src/data/challenge.ts index a54f72aa7cc..51616c3f00f 100644 --- a/src/data/challenge.ts +++ b/src/data/challenge.ts @@ -1,4 +1,4 @@ -import * as Utils from "#app/utils"; +import { BooleanHolder, type NumberHolder, randSeedItem, deepCopy } from "#app/utils"; import i18next from "i18next"; import type { DexAttrProps, GameData } from "#app/system/game-data"; import { defaultStarterSpecies } from "#app/system/game-data"; @@ -10,7 +10,6 @@ import { PokemonMove } from "#app/field/pokemon"; import type { FixedBattleConfig } from "#app/battle"; import { ClassicFixedBossWaves, BattleType, getRandomTrainerFunc } from "#app/battle"; import Trainer, { TrainerVariant } from "#app/field/trainer"; -import type { GameMode } from "#app/game-mode"; import { PokemonType } from "#enums/pokemon-type"; import { Challenges } from "#enums/challenges"; import { Species } from "#enums/species"; @@ -284,30 +283,30 @@ export abstract class Challenge { /** * 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 _valid {@link BooleanHolder} A BooleanHolder, the value gets set to false if the pokemon isn't allowed. * @param _dexAttr {@link DexAttrProps} The dex attributes of the pokemon. * @returns {@link boolean} Whether this function did anything. */ - applyStarterChoice(_pokemon: PokemonSpecies, _valid: Utils.BooleanHolder, _dexAttr: DexAttrProps): boolean { + applyStarterChoice(_pokemon: PokemonSpecies, _valid: BooleanHolder, _dexAttr: DexAttrProps): 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. + * @param _points {@link NumberHolder} The amount of points you have available. * @returns {@link boolean} Whether this function did anything. */ - applyStarterPoints(_points: Utils.NumberHolder): boolean { + applyStarterPoints(_points: 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. + * @param _cost {@link NumberHolder} The cost of the starter. * @returns {@link boolean} Whether this function did anything. */ - applyStarterCost(_species: Species, _cost: Utils.NumberHolder): boolean { + applyStarterCost(_species: Species, _cost: NumberHolder): boolean { return false; } @@ -323,10 +322,10 @@ export abstract class Challenge { /** * 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. + * @param _valid {@link 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 { + applyPokemonInBattle(_pokemon: Pokemon, _valid: BooleanHolder): boolean { return false; } @@ -342,51 +341,50 @@ export abstract class Challenge { /** * An apply function for TYPE_EFFECTIVENESS challenges. Derived classes should alter this. - * @param _effectiveness {@linkcode Utils.NumberHolder} The current effectiveness of the move. + * @param _effectiveness {@linkcode NumberHolder} The current effectiveness of the move. * @returns Whether this function did anything. */ - applyTypeEffectiveness(_effectiveness: Utils.NumberHolder): boolean { + applyTypeEffectiveness(_effectiveness: NumberHolder): boolean { return false; } /** * An apply function for AI_LEVEL challenges. Derived classes should alter this. - * @param _level {@link Utils.NumberHolder} The generated level. + * @param _level {@link NumberHolder} The generated level. * @param _levelCap {@link Number} The current level cap. * @param _isTrainer {@link Boolean} Whether this is a trainer pokemon. * @param _isBoss {@link Boolean} Whether this is a non-trainer boss pokemon. * @returns {@link boolean} Whether this function did anything. */ - applyLevelChange(_level: Utils.NumberHolder, _levelCap: number, _isTrainer: boolean, _isBoss: boolean): boolean { + applyLevelChange(_level: NumberHolder, _levelCap: number, _isTrainer: boolean, _isBoss: boolean): boolean { return false; } /** * An apply function for AI_MOVE_SLOTS challenges. Derived classes should alter this. * @param pokemon {@link Pokemon} The pokemon that is being considered. - * @param moveSlots {@link Utils.NumberHolder} The amount of move slots. + * @param moveSlots {@link NumberHolder} The amount of move slots. * @returns {@link boolean} Whether this function did anything. */ - applyMoveSlot(_pokemon: Pokemon, _moveSlots: Utils.NumberHolder): boolean { + applyMoveSlot(_pokemon: Pokemon, _moveSlots: NumberHolder): 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. + * @param hasPassive {@link BooleanHolder} Whether it should have its passive. * @returns {@link boolean} Whether this function did anything. */ - applyPassiveAccess(_pokemon: Pokemon, _hasPassive: Utils.BooleanHolder): boolean { + applyPassiveAccess(_pokemon: Pokemon, _hasPassive: 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 { + applyGameModeModify(): boolean { return false; } @@ -395,15 +393,10 @@ export abstract class Challenge { * @param _pokemon {@link Pokemon} What pokemon would learn the move. * @param _moveSource {@link MoveSourceType} What source the pokemon would get the move from. * @param _move {@link Moves} The move in question. - * @param _level {@link Utils.NumberHolder} The level threshold for access. + * @param _level {@link NumberHolder} The level threshold for access. * @returns {@link boolean} Whether this function did anything. */ - applyMoveAccessLevel( - _pokemon: Pokemon, - _moveSource: MoveSourceType, - _move: Moves, - _level: Utils.NumberHolder, - ): boolean { + applyMoveAccessLevel(_pokemon: Pokemon, _moveSource: MoveSourceType, _move: Moves, _level: NumberHolder): boolean { return false; } @@ -412,10 +405,10 @@ export abstract class Challenge { * @param _pokemon {@link Pokemon} What pokemon would learn the move. * @param _moveSource {@link MoveSourceType} What source the pokemon would get the move from. * @param _move {@link Moves} The move in question. - * @param _weight {@link Utils.NumberHolder} The base weight of the move + * @param _weight {@link NumberHolder} The base weight of the move * @returns {@link boolean} Whether this function did anything. */ - applyMoveWeight(_pokemon: Pokemon, _moveSource: MoveSourceType, _move: Moves, _level: Utils.NumberHolder): boolean { + applyMoveWeight(_pokemon: Pokemon, _moveSource: MoveSourceType, _move: Moves, _level: NumberHolder): boolean { return false; } @@ -440,7 +433,7 @@ export class SingleGenerationChallenge extends Challenge { super(Challenges.SINGLE_GENERATION, 9); } - applyStarterChoice(pokemon: PokemonSpecies, valid: Utils.BooleanHolder): boolean { + applyStarterChoice(pokemon: PokemonSpecies, valid: BooleanHolder): boolean { if (pokemon.generation !== this.value) { valid.value = false; return true; @@ -448,9 +441,9 @@ export class SingleGenerationChallenge extends Challenge { return false; } - applyPokemonInBattle(pokemon: Pokemon, valid: Utils.BooleanHolder): boolean { + applyPokemonInBattle(pokemon: Pokemon, valid: BooleanHolder): boolean { const baseGeneration = getPokemonSpecies(pokemon.species.speciesId).generation; - const fusionGeneration = pokemon.isFusion() ? getPokemonSpecies(pokemon.fusionSpecies!.speciesId).generation : 0; // TODO: is the bang on fusionSpecies correct? + const fusionGeneration = pokemon.isFusion() ? getPokemonSpecies(pokemon.fusionSpecies!.speciesId).generation : 0; if ( pokemon.isPlayer() && (baseGeneration !== this.value || (pokemon.isFusion() && fusionGeneration !== this.value)) @@ -577,7 +570,7 @@ export class SingleGenerationChallenge extends Challenge { TrainerType.AARON, TrainerType.SHAUNTAL, TrainerType.MALVA, - Utils.randSeedItem([TrainerType.HALA, TrainerType.MOLAYNE]), + randSeedItem([TrainerType.HALA, TrainerType.MOLAYNE]), TrainerType.MARNIE_ELITE, TrainerType.RIKA, ]; @@ -604,7 +597,7 @@ export class SingleGenerationChallenge extends Challenge { TrainerType.GRIMSLEY, TrainerType.WIKSTROM, TrainerType.ACEROLA, - Utils.randSeedItem([TrainerType.BEA_ELITE, TrainerType.ALLISTER_ELITE]), + randSeedItem([TrainerType.BEA_ELITE, TrainerType.ALLISTER_ELITE]), TrainerType.LARRY_ELITE, ]; break; @@ -624,14 +617,14 @@ export class SingleGenerationChallenge extends Challenge { case ClassicFixedBossWaves.CHAMPION: trainerTypes = [ TrainerType.BLUE, - Utils.randSeedItem([TrainerType.RED, TrainerType.LANCE_CHAMPION]), - Utils.randSeedItem([TrainerType.STEVEN, TrainerType.WALLACE]), + randSeedItem([TrainerType.RED, TrainerType.LANCE_CHAMPION]), + randSeedItem([TrainerType.STEVEN, TrainerType.WALLACE]), TrainerType.CYNTHIA, - Utils.randSeedItem([TrainerType.ALDER, TrainerType.IRIS]), + randSeedItem([TrainerType.ALDER, TrainerType.IRIS]), TrainerType.DIANTHA, - Utils.randSeedItem([TrainerType.KUKUI, TrainerType.HAU]), - Utils.randSeedItem([TrainerType.LEON, TrainerType.MUSTARD]), - Utils.randSeedItem([TrainerType.GEETA, TrainerType.NEMONA]), + randSeedItem([TrainerType.KUKUI, TrainerType.HAU]), + randSeedItem([TrainerType.LEON, TrainerType.MUSTARD]), + randSeedItem([TrainerType.GEETA, TrainerType.NEMONA]), ]; break; } @@ -720,7 +713,7 @@ export class SingleTypeChallenge extends Challenge { super(Challenges.SINGLE_TYPE, 18); } - override applyStarterChoice(pokemon: PokemonSpecies, valid: Utils.BooleanHolder, dexAttr: DexAttrProps): boolean { + override applyStarterChoice(pokemon: PokemonSpecies, valid: BooleanHolder, dexAttr: DexAttrProps): boolean { const speciesForm = getPokemonSpeciesForm(pokemon.speciesId, dexAttr.formIndex); const types = [speciesForm.type1, speciesForm.type2]; if (!types.includes(this.value - 1)) { @@ -730,7 +723,7 @@ export class SingleTypeChallenge extends Challenge { return false; } - applyPokemonInBattle(pokemon: Pokemon, valid: Utils.BooleanHolder): boolean { + applyPokemonInBattle(pokemon: Pokemon, valid: BooleanHolder): boolean { if ( pokemon.isPlayer() && !pokemon.isOfType(this.value - 1, false, false, true) && @@ -800,7 +793,7 @@ export class FreshStartChallenge extends Challenge { super(Challenges.FRESH_START, 1); } - applyStarterChoice(pokemon: PokemonSpecies, valid: Utils.BooleanHolder): boolean { + applyStarterChoice(pokemon: PokemonSpecies, valid: BooleanHolder): boolean { if (!defaultStarterSpecies.includes(pokemon.speciesId)) { valid.value = false; return true; @@ -808,7 +801,7 @@ export class FreshStartChallenge extends Challenge { return false; } - applyStarterCost(species: Species, cost: Utils.NumberHolder): boolean { + applyStarterCost(species: Species, cost: NumberHolder): boolean { if (defaultStarterSpecies.includes(species)) { cost.value = speciesStarterCosts[species]; return true; @@ -866,7 +859,7 @@ export class InverseBattleChallenge extends Challenge { return 0; } - applyTypeEffectiveness(effectiveness: Utils.NumberHolder): boolean { + applyTypeEffectiveness(effectiveness: NumberHolder): boolean { if (effectiveness.value < 1) { effectiveness.value = 2; return true; @@ -889,7 +882,7 @@ export class FlipStatChallenge extends Challenge { } override applyFlipStat(_pokemon: Pokemon, baseStats: number[]) { - const origStats = Utils.deepCopy(baseStats); + const origStats = deepCopy(baseStats); baseStats[0] = origStats[5]; baseStats[1] = origStats[4]; baseStats[2] = origStats[3]; @@ -925,7 +918,7 @@ export class LowerStarterMaxCostChallenge extends Challenge { return (DEFAULT_PARTY_MAX_COST - overrideValue).toString(); } - applyStarterChoice(pokemon: PokemonSpecies, valid: Utils.BooleanHolder): boolean { + applyStarterChoice(pokemon: PokemonSpecies, valid: BooleanHolder): boolean { if (speciesStarterCosts[pokemon.speciesId] > DEFAULT_PARTY_MAX_COST - this.value) { valid.value = false; return true; @@ -959,7 +952,7 @@ export class LowerStarterPointsChallenge extends Challenge { return (DEFAULT_PARTY_MAX_COST - overrideValue).toString(); } - applyStarterPoints(points: Utils.NumberHolder): boolean { + applyStarterPoints(points: NumberHolder): boolean { points.value -= this.value; return true; } @@ -974,198 +967,159 @@ export class LowerStarterPointsChallenge extends Challenge { /** * 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 valid {@link BooleanHolder} A BooleanHolder, the value gets set to false if the pokemon isn't allowed. * @param dexAttr {@link DexAttrProps} The dex attributes of the pokemon. * @returns True if any challenge was successfully applied. */ export function applyChallenges( - gameMode: GameMode, challengeType: ChallengeType.STARTER_CHOICE, pokemon: PokemonSpecies, - valid: Utils.BooleanHolder, + valid: BooleanHolder, dexAttr: DexAttrProps, ): 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. + * @param points {@link 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; +export function applyChallenges(challengeType: ChallengeType.STARTER_POINTS, points: 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. + * @param points {@link 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, + cost: 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; +export function applyChallenges(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. + * @param valid {@link BooleanHolder} A BooleanHolder, the value gets set to false if the pokemon isn't allowed. * @returns True if any challenge was successfully applied. */ export function applyChallenges( - gameMode: GameMode, challengeType: ChallengeType.POKEMON_IN_BATTLE, pokemon: Pokemon, - valid: Utils.BooleanHolder, + valid: 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 type effectiveness. - * @param gameMode {@linkcode GameMode} The current gameMode * @param challengeType {@linkcode ChallengeType} ChallengeType.TYPE_EFFECTIVENESS - * @param effectiveness {@linkcode Utils.NumberHolder} The current effectiveness of the move. + * @param effectiveness {@linkcode NumberHolder} The current effectiveness of the move. * @returns True if any challenge was successfully applied. */ -export function applyChallenges( - gameMode: GameMode, - challengeType: ChallengeType.TYPE_EFFECTIVENESS, - effectiveness: Utils.NumberHolder, -): boolean; +export function applyChallenges(challengeType: ChallengeType.TYPE_EFFECTIVENESS, effectiveness: NumberHolder): 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.NumberHolder} The generated level of the pokemon. + * @param level {@link NumberHolder} The generated level of the pokemon. * @param levelCap {@link Number} The maximum level cap for the current wave. * @param isTrainer {@link Boolean} Whether this is a trainer pokemon. * @param isBoss {@link Boolean} Whether this is a non-trainer boss pokemon. * @returns True if any challenge was successfully applied. */ export function applyChallenges( - gameMode: GameMode, challengeType: ChallengeType.AI_LEVEL, - level: Utils.NumberHolder, + level: NumberHolder, levelCap: number, isTrainer: boolean, isBoss: boolean, ): boolean; /** * Apply all challenges that modify how many move slots the AI has. - * @param gameMode {@link GameMode} The current gameMode * @param challengeType {@link ChallengeType} ChallengeType.AI_MOVE_SLOTS * @param pokemon {@link Pokemon} The pokemon being considered. - * @param moveSlots {@link Utils.NumberHolder} The amount of move slots. + * @param moveSlots {@link NumberHolder} The amount of move slots. * @returns True if any challenge was successfully applied. */ export function applyChallenges( - gameMode: GameMode, challengeType: ChallengeType.AI_MOVE_SLOTS, pokemon: Pokemon, - moveSlots: Utils.NumberHolder, + moveSlots: NumberHolder, ): 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. + * @param hasPassive {@link 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, + hasPassive: 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; +export function applyChallenges(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.NumberHolder} The level threshold for access. + * @param level {@link NumberHolder} The level threshold for access. * @returns True if any challenge was successfully applied. */ export function applyChallenges( - gameMode: GameMode, challengeType: ChallengeType.MOVE_ACCESS, pokemon: Pokemon, moveSource: MoveSourceType, move: Moves, - level: Utils.NumberHolder, + level: NumberHolder, ): 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.NumberHolder} The weight of the move. + * @param weight {@link NumberHolder} The weight of the move. * @returns True if any challenge was successfully applied. */ export function applyChallenges( - gameMode: GameMode, challengeType: ChallengeType.MOVE_WEIGHT, pokemon: Pokemon, moveSource: MoveSourceType, move: Moves, - weight: Utils.NumberHolder, + weight: NumberHolder, ): boolean; -export function applyChallenges( - gameMode: GameMode, - challengeType: ChallengeType.FLIP_STAT, - pokemon: Pokemon, - baseStats: number[], -): boolean; +export function applyChallenges(challengeType: ChallengeType.FLIP_STAT, pokemon: Pokemon, baseStats: number[]): boolean; -export function applyChallenges(gameMode: GameMode, challengeType: ChallengeType, ...args: any[]): boolean { +export function applyChallenges(challengeType: ChallengeType, ...args: any[]): boolean { let ret = false; - gameMode.challenges.forEach(c => { + globalScene.gameMode.challenges.forEach(c => { if (c.value !== 0) { switch (challengeType) { case ChallengeType.STARTER_CHOICE: @@ -1199,7 +1153,7 @@ export function applyChallenges(gameMode: GameMode, challengeType: ChallengeType ret ||= c.applyPassiveAccess(args[0], args[1]); break; case ChallengeType.GAME_MODE_MODIFY: - ret ||= c.applyGameModeModify(gameMode); + ret ||= c.applyGameModeModify(); break; case ChallengeType.MOVE_ACCESS: ret ||= c.applyMoveAccessLevel(args[0], args[1], args[2], args[3]); @@ -1263,8 +1217,8 @@ export function initChallenges() { */ export function checkStarterValidForChallenge(species: PokemonSpecies, props: DexAttrProps, soft: boolean) { if (!soft) { - const isValidForChallenge = new Utils.BooleanHolder(true); - applyChallenges(globalScene.gameMode, ChallengeType.STARTER_CHOICE, species, isValidForChallenge, props); + const isValidForChallenge = new BooleanHolder(true); + applyChallenges(ChallengeType.STARTER_CHOICE, species, isValidForChallenge, props); return isValidForChallenge.value; } // We check the validity of every evolution and form change, and require that at least one is valid @@ -1301,8 +1255,8 @@ export function checkStarterValidForChallenge(species: PokemonSpecies, props: De * @returns `true` if the species is considered valid. */ function checkSpeciesValidForChallenge(species: PokemonSpecies, props: DexAttrProps, soft: boolean) { - const isValidForChallenge = new Utils.BooleanHolder(true); - applyChallenges(globalScene.gameMode, ChallengeType.STARTER_CHOICE, species, isValidForChallenge, props); + const isValidForChallenge = new BooleanHolder(true); + applyChallenges(ChallengeType.STARTER_CHOICE, species, isValidForChallenge, props); if (!soft || !pokemonFormChanges.hasOwnProperty(species.speciesId)) { return isValidForChallenge.value; } @@ -1310,29 +1264,22 @@ function checkSpeciesValidForChallenge(species: PokemonSpecies, props: DexAttrPr if (soft && isValidForChallenge.value) { return true; } - pokemonFormChanges[species.speciesId].forEach(f1 => { - // Exclude form changes that require the mon to be on the field to begin with, - // such as Castform - if (!("item" in f1)) { - return; + + const result = pokemonFormChanges[species.speciesId].some(f1 => { + // Exclude form changes that require the mon to be on the field to begin with + if (!("item" in f1.trigger)) { + return false; } - species.forms.forEach((f2, formIndex) => { + + return species.forms.some((f2, formIndex) => { if (f1.formKey === f2.formKey) { - const formProps = { ...props }; - formProps.formIndex = formIndex; - const isFormValidForChallenge = new Utils.BooleanHolder(true); - applyChallenges( - globalScene.gameMode, - ChallengeType.STARTER_CHOICE, - species, - isFormValidForChallenge, - formProps, - ); - if (isFormValidForChallenge.value) { - return true; - } + const formProps = { ...props, formIndex }; + const isFormValidForChallenge = new BooleanHolder(true); + applyChallenges(ChallengeType.STARTER_CHOICE, species, isFormValidForChallenge, formProps); + return isFormValidForChallenge.value; } + return false; }); }); - return false; + return result; } diff --git a/src/data/daily-run.ts b/src/data/daily-run.ts index 22fb7db10ae..3438510d613 100644 --- a/src/data/daily-run.ts +++ b/src/data/daily-run.ts @@ -3,7 +3,7 @@ import type { Species } from "#enums/species"; import { globalScene } from "#app/global-scene"; import { PlayerPokemon } from "#app/field/pokemon"; import type { Starter } from "#app/ui/starter-select-ui-handler"; -import * as Utils from "#app/utils"; +import { randSeedGauss, randSeedInt, randSeedItem, getEnumValues } from "#app/utils"; import type { PokemonSpeciesForm } from "#app/data/pokemon-species"; import PokemonSpecies, { getPokemonSpecies, getPokemonSpeciesForm } from "#app/data/pokemon-species"; import { speciesStarterCosts } from "#app/data/balance/starters"; @@ -43,8 +43,8 @@ export function getDailyRunStarters(seed: string): Starter[] { } const starterCosts: number[] = []; - starterCosts.push(Math.min(Math.round(3.5 + Math.abs(Utils.randSeedGauss(1))), 8)); - starterCosts.push(Utils.randSeedInt(9 - starterCosts[0], 1)); + starterCosts.push(Math.min(Math.round(3.5 + Math.abs(randSeedGauss(1))), 8)); + starterCosts.push(randSeedInt(9 - starterCosts[0], 1)); starterCosts.push(10 - (starterCosts[0] + starterCosts[1])); for (let c = 0; c < starterCosts.length; c++) { @@ -52,7 +52,7 @@ export function getDailyRunStarters(seed: string): Starter[] { const costSpecies = Object.keys(speciesStarterCosts) .map(s => Number.parseInt(s) as Species) .filter(s => speciesStarterCosts[s] === cost); - const randPkmSpecies = getPokemonSpecies(Utils.randSeedItem(costSpecies)); + const randPkmSpecies = getPokemonSpecies(randSeedItem(costSpecies)); const starterSpecies = getPokemonSpecies( randPkmSpecies.getTrainerSpeciesForLevel(startingLevel, true, PartyMemberStrength.STRONGER), ); @@ -143,7 +143,7 @@ const dailyBiomeWeights: BiomeWeights = { }; export function getDailyStartingBiome(): Biome { - const biomes = Utils.getEnumValues(Biome).filter(b => b !== Biome.TOWN && b !== Biome.END); + const biomes = getEnumValues(Biome).filter(b => b !== Biome.TOWN && b !== Biome.END); let totalWeight = 0; const biomeThresholds: number[] = []; @@ -155,7 +155,7 @@ export function getDailyStartingBiome(): Biome { biomeThresholds.push(totalWeight); } - const randInt = Utils.randSeedInt(totalWeight); + const randInt = randSeedInt(totalWeight); for (let i = 0; i < biomes.length; i++) { if (randInt < biomeThresholds[i]) { @@ -164,5 +164,5 @@ export function getDailyStartingBiome(): Biome { } // Fallback in case something went wrong - return biomes[Utils.randSeedInt(biomes.length)]; + return biomes[randSeedInt(biomes.length)]; } diff --git a/src/data/dialogue.ts b/src/data/dialogue.ts index 208e269bd9c..fa640e92b00 100644 --- a/src/data/dialogue.ts +++ b/src/data/dialogue.ts @@ -1,6 +1,6 @@ import { BattleSpec } from "#enums/battle-spec"; import { TrainerType } from "#enums/trainer-type"; -import { trainerConfigs } from "./trainer-config"; +import { trainerConfigs } from "./trainers/trainer-config"; export interface TrainerTypeMessages { encounter?: string | string[]; @@ -312,6 +312,113 @@ export const trainerTypeDialogue: TrainerTypeDialogue = { victory: ["dialogue:sailor.victory.1", "dialogue:sailor.victory.2", "dialogue:sailor.victory.3"], }, ], + [TrainerType.CLERK]: [ + { + encounter: ["dialogue:clerk.encounter.1", "dialogue:clerk.encounter.2", "dialogue:clerk.encounter.3"], + victory: ["dialogue:clerk.victory.1", "dialogue:clerk.victory.2", "dialogue:clerk.victory.3"], + }, + { + encounter: [ + "dialogue:clerk_female.encounter.1", + "dialogue:clerk_female.encounter.2", + "dialogue:clerk_female.encounter.3", + ], + victory: [ + "dialogue:clerk_female.victory.1", + "dialogue:clerk_female.victory.2", + "dialogue:clerk_female.victory.3", + ], + }, + ], + [TrainerType.HOOLIGANS]: [ + { + encounter: ["dialogue:hooligans.encounter.1", "dialogue:hooligans.encounter.2"], + victory: ["dialogue:hooligans.victory.1", "dialogue:hooligans.victory.2"], + }, + ], + [TrainerType.MUSICIAN]: [ + { + encounter: [ + "dialogue:musician.encounter.1", + "dialogue:musician.encounter.2", + "dialogue:musician.encounter.3", + "dialogue:musician.encounter.4", + ], + victory: ["dialogue:musician.victory.1", "dialogue:musician.victory.2", "dialogue:musician.victory.3"], + }, + ], + [TrainerType.PILOT]: [ + { + encounter: [ + "dialogue:pilot.encounter.1", + "dialogue:pilot.encounter.2", + "dialogue:pilot.encounter.3", + "dialogue:pilot.encounter.4", + ], + victory: [ + "dialogue:pilot.victory.1", + "dialogue:pilot.victory.2", + "dialogue:pilot.victory.3", + "dialogue:pilot.victory.4", + ], + }, + ], + [TrainerType.POKEFAN]: [ + { + encounter: ["dialogue:pokefan.encounter.1", "dialogue:pokefan.encounter.2", "dialogue:pokefan.encounter.3"], + victory: ["dialogue:pokefan.victory.1", "dialogue:pokefan.victory.2", "dialogue:pokefan.victory.3"], + }, + { + encounter: [ + "dialogue:pokefan_female.encounter.1", + "dialogue:pokefan_female.encounter.2", + "dialogue:pokefan_female.encounter.3", + ], + victory: [ + "dialogue:pokefan_female.victory.1", + "dialogue:pokefan_female.victory.2", + "dialogue:pokefan_female.victory.3", + ], + }, + ], + [TrainerType.RICH]: [ + { + encounter: ["dialogue:rich.encounter.1", "dialogue:rich.encounter.2", "dialogue:rich.encounter.3"], + victory: ["dialogue:rich.victory.1", "dialogue:rich.victory.2", "dialogue:rich.victory.3"], + }, + { + encounter: [ + "dialogue:rich_female.encounter.1", + "dialogue:rich_female.encounter.2", + "dialogue:rich_female.encounter.3", + ], + victory: ["dialogue:rich_female.victory.1", "dialogue:rich_female.victory.2", "dialogue:rich_female.victory.3"], + }, + ], + [TrainerType.RICH_KID]: [ + { + encounter: ["dialogue:rich_kid.encounter.1", "dialogue:rich_kid.encounter.2", "dialogue:rich_kid.encounter.3"], + victory: [ + "dialogue:rich_kid.victory.1", + "dialogue:rich_kid.victory.2", + "dialogue:rich_kid.victory.3", + "dialogue:rich_kid.victory.4", + ], + }, + { + encounter: [ + "dialogue:rich_kid_female.encounter.1", + "dialogue:rich_kid_female.encounter.2", + "dialogue:rich_kid_female.encounter.3", + ], + victory: [ + "dialogue:rich_kid_female.victory.1", + "dialogue:rich_kid_female.victory.2", + "dialogue:rich_kid_female.victory.3", + "dialogue:rich_kid_female.victory.4", + ], + }, + ], [TrainerType.ROCKET_GRUNT]: [ { encounter: [ diff --git a/src/data/egg.ts b/src/data/egg.ts index 0dabf8f1119..13ab0bec479 100644 --- a/src/data/egg.ts +++ b/src/data/egg.ts @@ -4,7 +4,7 @@ import type PokemonSpecies from "#app/data/pokemon-species"; import { getPokemonSpecies } from "#app/data/pokemon-species"; import { speciesStarterCosts } from "#app/data/balance/starters"; import { VariantTier } from "#enums/variant-tier"; -import * as Utils from "#app/utils"; +import { randInt, randomString, randSeedInt, getIvsFromId } from "#app/utils"; import Overrides from "#app/overrides"; import { pokemonPrevolutions } from "#app/data/balance/pokemon-evolutions"; import type { PlayerPokemon } from "#app/field/pokemon"; @@ -171,7 +171,7 @@ export class Egg { this.checkForPityTierOverrides(); } - this._id = eggOptions?.id ?? Utils.randInt(EGG_SEED, EGG_SEED * this._tier); + this._id = eggOptions?.id ?? randInt(EGG_SEED, EGG_SEED * this._tier); this._sourceType = eggOptions?.sourceType ?? undefined; this._hatchWaves = eggOptions?.hatchWaves ?? this.getEggTierDefaultHatchWaves(); @@ -203,7 +203,7 @@ export class Egg { } }; - const seedOverride = Utils.randomString(24); + const seedOverride = randomString(24); globalScene.executeWithSeedOffset( () => { generateEggProperties(eggOptions); @@ -248,18 +248,15 @@ export class Egg { let pokemonSpecies = getPokemonSpecies(this._species); // Special condition to have Phione eggs also have a chance of generating Manaphy if (this._species === Species.PHIONE && this._sourceType === EggSourceType.SAME_SPECIES_EGG) { - pokemonSpecies = getPokemonSpecies( - Utils.randSeedInt(MANAPHY_EGG_MANAPHY_RATE) ? Species.PHIONE : Species.MANAPHY, - ); + pokemonSpecies = getPokemonSpecies(randSeedInt(MANAPHY_EGG_MANAPHY_RATE) ? Species.PHIONE : Species.MANAPHY); } // Sets the hidden ability if a hidden ability exists and // the override is set or the egg hits the chance let abilityIndex: number | undefined = undefined; const sameSpeciesEggHACheck = - this._sourceType === EggSourceType.SAME_SPECIES_EGG && !Utils.randSeedInt(SAME_SPECIES_EGG_HA_RATE); - const gachaEggHACheck = - !(this._sourceType === EggSourceType.SAME_SPECIES_EGG) && !Utils.randSeedInt(GACHA_EGG_HA_RATE); + this._sourceType === EggSourceType.SAME_SPECIES_EGG && !randSeedInt(SAME_SPECIES_EGG_HA_RATE); + const gachaEggHACheck = !(this._sourceType === EggSourceType.SAME_SPECIES_EGG) && !randSeedInt(GACHA_EGG_HA_RATE); if (pokemonSpecies.abilityHidden && (this._overrideHiddenAbility || sameSpeciesEggHACheck || gachaEggHACheck)) { abilityIndex = 2; } @@ -269,7 +266,7 @@ export class Egg { ret.shiny = this._isShiny; ret.variant = this._variantTier; - const secondaryIvs = Utils.getIvsFromId(Utils.randSeedInt(4294967295)); + const secondaryIvs = getIvsFromId(randSeedInt(4294967295)); for (let s = 0; s < ret.ivs.length; s++) { ret.ivs[s] = Math.max(ret.ivs[s], secondaryIvs[s]); @@ -370,7 +367,7 @@ export class Egg { } const tierMultiplier = this.isManaphyEgg() ? 2 : Math.pow(2, 3 - this.tier); - return Utils.randSeedInt(baseChance * tierMultiplier) ? Utils.randSeedInt(3) : 3; + return randSeedInt(baseChance * tierMultiplier) ? randSeedInt(3) : 3; } private getEggTierDefaultHatchWaves(eggTier?: EggTier): number { @@ -392,7 +389,7 @@ export class Egg { private rollEggTier(): EggTier { const tierValueOffset = this._sourceType === EggSourceType.GACHA_LEGENDARY ? GACHA_LEGENDARY_UP_THRESHOLD_OFFSET : 0; - const tierValue = Utils.randInt(256); + const tierValue = randInt(256); return tierValue >= GACHA_DEFAULT_COMMON_EGG_THRESHOLD + tierValueOffset ? EggTier.COMMON : tierValue >= GACHA_DEFAULT_RARE_EGG_THRESHOLD + tierValueOffset @@ -417,11 +414,11 @@ export class Egg { * when Utils.randSeedInt(8) = 1, and by making the generatePlayerPokemon() species * check pass when Utils.randSeedInt(8) = 0, we can tell them apart during tests. */ - const rand = Utils.randSeedInt(MANAPHY_EGG_MANAPHY_RATE) !== 1; + const rand = randSeedInt(MANAPHY_EGG_MANAPHY_RATE) !== 1; return rand ? Species.PHIONE : Species.MANAPHY; } if (this.tier === EggTier.LEGENDARY && this._sourceType === EggSourceType.GACHA_LEGENDARY) { - if (!Utils.randSeedInt(2)) { + if (!randSeedInt(2)) { return getLegendaryGachaSpeciesForTimestamp(this.timestamp); } } @@ -501,7 +498,7 @@ export class Egg { let species: Species; - const rand = Utils.randSeedInt(totalWeight); + const rand = randSeedInt(totalWeight); for (let s = 0; s < speciesWeights.length; s++) { if (rand < speciesWeights[s]) { species = speciesPool[s]; @@ -539,7 +536,7 @@ export class Egg { break; } - return !Utils.randSeedInt(shinyChance); + return !randSeedInt(shinyChance); } // Uses the same logic as pokemon.generateVariant(). I would like to only have this logic in one @@ -550,7 +547,7 @@ export class Egg { return VariantTier.STANDARD; } - const rand = Utils.randSeedInt(10); + const rand = randSeedInt(10); if (rand >= SHINY_VARIANT_CHANCE) { return VariantTier.STANDARD; // 6/10 } diff --git a/src/data/moves/move.ts b/src/data/moves/move.ts index 1555967789c..962a13bb840 100644 --- a/src/data/moves/move.ts +++ b/src/data/moves/move.ts @@ -29,9 +29,7 @@ import { } from "../status-effect"; import { getTypeDamageMultiplier } from "../type"; import { PokemonType } from "#enums/pokemon-type"; -import type { Constructor } from "#app/utils"; -import { NumberHolder } from "#app/utils"; -import * as Utils from "../../utils"; +import { BooleanHolder, NumberHolder, isNullOrUndefined, toDmgValue, randSeedItem, randSeedInt, getEnumValues, toReadableString, type Constructor } from "#app/utils"; import { WeatherType } from "#enums/weather-type"; import type { ArenaTrapTag } from "../arena-tag"; import { ArenaTagSide, WeakenMoveTypeTag } from "../arena-tag"; @@ -64,9 +62,6 @@ import { PostDamageForceSwitchAbAttr, PostItemLostAbAttr, ReverseDrainAbAttr, - UncopiableAbilityAbAttr, - UnsuppressableAbilityAbAttr, - UnswappableAbilityAbAttr, UserFieldMoveTypePowerBoostAbAttr, VariableMovePowerAbAttr, WonderSkinAbAttr, @@ -109,7 +104,6 @@ import { PokemonHealPhase } from "#app/phases/pokemon-heal-phase"; import { StatStageChangePhase } from "#app/phases/stat-stage-change-phase"; import { SwitchPhase } from "#app/phases/switch-phase"; import { SwitchSummonPhase } from "#app/phases/switch-summon-phase"; -import { ShowAbilityPhase } from "#app/phases/show-ability-phase"; import { SpeciesFormChangeRevertWeatherFormTrigger } from "../pokemon-forms"; import type { GameMode } from "#app/game-mode"; import { applyChallenges, ChallengeType } from "../challenge"; @@ -350,13 +344,13 @@ export default class Move implements Localizable { * @param target The {@linkcode Pokemon} targeted by this move * @returns `true` if the move can bypass the target's Substitute; `false` otherwise. */ - hitsSubstitute(user: Pokemon, target: Pokemon | null): boolean { + hitsSubstitute(user: Pokemon, target?: Pokemon): boolean { if ([ MoveTarget.USER, MoveTarget.USER_SIDE, MoveTarget.ENEMY_SIDE, MoveTarget.BOTH_SIDES ].includes(this.moveTarget) || !target?.getTag(BattlerTagType.SUBSTITUTE)) { return false; } - const bypassed = new Utils.BooleanHolder(false); + const bypassed = new BooleanHolder(false); // TODO: Allow this to be simulated applyAbAttrs(InfiltratorAbAttr, user, null, false, bypassed); @@ -622,12 +616,30 @@ export default class Move implements Localizable { /** * Checks if the move flag applies to the pokemon(s) using/receiving the move + * + * This method will take the `user`'s ability into account when reporting flags, e.g. + * calling this method for {@linkcode MoveFlags.MAKES_CONTACT | MAKES_CONTACT} + * will return `false` if the user has a {@linkcode Abilities.LONG_REACH} that is not being suppressed. + * + * **Note:** This method only checks if the move should have effectively have the flag applied to its use. + * It does *not* check whether the flag will trigger related effects. + * For example using this method to check {@linkcode MoveFlags.WIND_MOVE} + * will not consider {@linkcode Abilities.WIND_RIDER | Wind Rider }. + * + * To simply check whether the move has a flag, use {@linkcode hasFlag}. * @param flag {@linkcode MoveFlags} MoveFlag to check on user and/or target * @param user {@linkcode Pokemon} the Pokemon using the move * @param target {@linkcode Pokemon} the Pokemon receiving the move + * @param isFollowUp (defaults to `false`) `true` if the move was used as a follow up * @returns boolean + * @see {@linkcode hasFlag} */ - checkFlag(flag: MoveFlags, user: Pokemon, target: Pokemon | null): boolean { + doesFlagEffectApply({ flag, user, target, isFollowUp = false }: { + flag: MoveFlags; + user: Pokemon; + target?: Pokemon; + isFollowUp?: boolean; + }): boolean { // special cases below, eg: if the move flag is MAKES_CONTACT, and the user pokemon has an ability that ignores contact (like "Long Reach"), then overrides and move does not make contact switch (flag) { case MoveFlags.MAKES_CONTACT: @@ -637,16 +649,18 @@ export default class Move implements Localizable { break; case MoveFlags.IGNORE_ABILITIES: if (user.hasAbilityWithAttr(MoveAbilityBypassAbAttr)) { - const abilityEffectsIgnored = new Utils.BooleanHolder(false); + const abilityEffectsIgnored = new BooleanHolder(false); applyAbAttrs(MoveAbilityBypassAbAttr, user, abilityEffectsIgnored, false, this); if (abilityEffectsIgnored.value) { return true; } + // Sunsteel strike, Moongeist beam, and photon geyser will not ignore abilities if invoked + // by another move, such as via metronome. } - break; + return this.hasFlag(MoveFlags.IGNORE_ABILITIES) && !isFollowUp; case MoveFlags.IGNORE_PROTECT: if (user.hasAbilityWithAttr(IgnoreProtectOnContactAbAttr) - && this.checkFlag(MoveFlags.MAKES_CONTACT, user, null)) { + && this.doesFlagEffectApply({ flag: MoveFlags.MAKES_CONTACT, user })) { return true; } break; @@ -739,7 +753,7 @@ export default class Move implements Localizable { * @returns The calculated accuracy of the move. */ calculateBattleAccuracy(user: Pokemon, target: Pokemon, simulated: boolean = false) { - const moveAccuracy = new Utils.NumberHolder(this.accuracy); + const moveAccuracy = new NumberHolder(this.accuracy); applyMoveAttrs(VariableAccuracyAttr, user, target, this, moveAccuracy); applyPreDefendAbAttrs(WonderSkinAbAttr, target, user, this, { value: false }, simulated, moveAccuracy); @@ -781,8 +795,8 @@ export default class Move implements Localizable { return -1; } - const power = new Utils.NumberHolder(this.power); - const typeChangeMovePowerMultiplier = new Utils.NumberHolder(1); + const power = new NumberHolder(this.power); + const typeChangeMovePowerMultiplier = new NumberHolder(1); applyPreAttackAbAttrs(MoveTypeChangeAbAttr, source, target, this, true, null, typeChangeMovePowerMultiplier); @@ -792,9 +806,9 @@ export default class Move implements Localizable { } applyPreAttackAbAttrs(VariableMovePowerAbAttr, source, target, this, simulated, power); - - if (source.getAlly()) { - applyPreAttackAbAttrs(AllyMoveCategoryPowerBoostAbAttr, source.getAlly(), target, this, simulated, power); + const ally = source.getAlly(); + if (!isNullOrUndefined(ally)) { + applyPreAttackAbAttrs(AllyMoveCategoryPowerBoostAbAttr, ally, target, this, simulated, power); } const fieldAuras = new Set( @@ -834,7 +848,7 @@ export default class Move implements Localizable { } getPriority(user: Pokemon, simulated: boolean = true) { - const priority = new Utils.NumberHolder(this.priority); + const priority = new NumberHolder(this.priority); applyMoveAttrs(IncrementMovePriorityAttr, user, null, this, priority); applyAbAttrs(ChangeMovePriorityAbAttr, user, null, simulated, this, priority); @@ -905,7 +919,7 @@ export default class Move implements Localizable { SacrificialAttrOnHit ]; - // ...and cannot enhance these specific moves. + // ...and cannot enhance these specific moves const exceptMoves: Moves[] = [ Moves.FLING, Moves.UPROAR, @@ -914,10 +928,15 @@ export default class Move implements Localizable { Moves.ENDEAVOR ]; + // ...and cannot enhance Pollen Puff when targeting an ally. + const ally = user.getAlly(); + const exceptPollenPuffAlly: boolean = this.id === Moves.POLLEN_PUFF && !isNullOrUndefined(ally) && targets.includes(ally.getBattlerIndex()) + return (!restrictSpread || !isMultiTarget) && !this.isChargingMove() && !exceptAttrs.some(attr => this.hasAttr(attr)) && !exceptMoves.some(id => this.id === id) + && !exceptPollenPuffAlly && this.category !== MoveCategory.STATUS; } } @@ -950,7 +969,7 @@ export class AttackMove extends Move { const effectiveness = target.getAttackTypeEffectiveness(this.type, user, undefined, undefined, this); attackScore = Math.pow(effectiveness - 1, 2) * (effectiveness < 1 ? -2 : 2); const [ thisStat, offStat ]: EffectiveStat[] = this.category === MoveCategory.PHYSICAL ? [ Stat.ATK, Stat.SPATK ] : [ Stat.SPATK, Stat.ATK ]; - const statHolder = new Utils.NumberHolder(user.getEffectiveStat(thisStat, target)); + const statHolder = new NumberHolder(user.getEffectiveStat(thisStat, target)); const offStatValue = user.getEffectiveStat(offStat, target); applyMoveAttrs(VariableAtkAttr, user, target, move, statHolder); const statRatio = offStatValue / statHolder.value; @@ -960,7 +979,7 @@ export class AttackMove extends Move { attackScore *= 1.5; } - const power = new Utils.NumberHolder(this.calculateEffectivePower()); + const power = new NumberHolder(this.calculateEffectivePower()); applyMoveAttrs(VariablePowerAttr, user, target, move, power); attackScore += Math.floor(power.value / 5); @@ -1213,7 +1232,7 @@ export class MoveEffectAttr extends MoveAttr { canApply(user: Pokemon, target: Pokemon, move: Move, args?: any[]) { return !! (this.selfTarget ? user.hp && !user.getTag(BattlerTagType.FRENZY) : target.hp) && (this.selfTarget || !target.getTag(BattlerTagType.PROTECTED) || - move.checkFlag(MoveFlags.IGNORE_PROTECT, user, target)); + move.doesFlagEffectApply({ flag: MoveFlags.IGNORE_PROTECT, user, target })); } /** Applies move effects so long as they are able based on {@linkcode canApply} */ @@ -1231,9 +1250,9 @@ export class MoveEffectAttr extends MoveAttr { * @returns Move effect chance value. */ getMoveChance(user: Pokemon, target: Pokemon, move: Move, selfEffect?: Boolean, showAbility?: Boolean): number { - const moveChance = new Utils.NumberHolder(this.effectChanceOverride ?? move.chance); + const moveChance = new NumberHolder(this.effectChanceOverride ?? move.chance); - applyAbAttrs(MoveEffectChanceMultiplierAbAttr, user, null, false, moveChance, move, target, selfEffect, showAbility); + applyAbAttrs(MoveEffectChanceMultiplierAbAttr, user, null, !showAbility, moveChance, move); if ((!move.hasAttr(FlinchAttr) || moveChance.value <= move.chance) && !move.hasAttr(SecretPowerAttr)) { const userSide = user.isPlayer() ? ArenaTagSide.PLAYER : ArenaTagSide.ENEMY; @@ -1241,7 +1260,7 @@ export class MoveEffectAttr extends MoveAttr { } if (!selfEffect) { - applyPreDefendAbAttrs(IgnoreMoveEffectsAbAttr, target, user, null, null, false, moveChance); + applyPreDefendAbAttrs(IgnoreMoveEffectsAbAttr, target, user, null, null, !showAbility, moveChance); } return moveChance.value; } @@ -1394,7 +1413,7 @@ export class RespectAttackTypeImmunityAttr extends MoveAttr { } export class IgnoreOpponentStatStagesAttr extends MoveAttr { apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { - (args[0] as Utils.BooleanHolder).value = true; + (args[0] as BooleanHolder).value = true; return true; } @@ -1402,7 +1421,7 @@ export class IgnoreOpponentStatStagesAttr extends MoveAttr { export class HighCritAttr extends MoveAttr { apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { - (args[0] as Utils.NumberHolder).value++; + (args[0] as NumberHolder).value++; return true; } @@ -1414,7 +1433,7 @@ export class HighCritAttr extends MoveAttr { export class CritOnlyAttr extends MoveAttr { apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { - (args[0] as Utils.BooleanHolder).value = true; + (args[0] as BooleanHolder).value = true; return true; } @@ -1434,7 +1453,7 @@ export class FixedDamageAttr extends MoveAttr { } apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { - (args[0] as Utils.NumberHolder).value = this.getDamage(user, target, move); + (args[0] as NumberHolder).value = this.getDamage(user, target, move); return true; } @@ -1450,7 +1469,7 @@ export class UserHpDamageAttr extends FixedDamageAttr { } apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { - (args[0] as Utils.NumberHolder).value = user.hp; + (args[0] as NumberHolder).value = user.hp; return true; } @@ -1471,7 +1490,7 @@ export class TargetHalfHpDamageAttr extends FixedDamageAttr { const lensCount = user.getHeldItems().find(i => i instanceof PokemonMultiHitModifier)?.getStackCount() ?? 0; if (lensCount <= 0) { // no multi lenses; we can just halve the target's hp and call it a day - (args[0] as Utils.NumberHolder).value = Utils.toDmgValue(target.hp / 2); + (args[0] as NumberHolder).value = toDmgValue(target.hp / 2); return true; } @@ -1482,11 +1501,11 @@ export class TargetHalfHpDamageAttr extends FixedDamageAttr { this.initialHp = target.hp; default: // multi lens added hit; use initialHp tracker to ensure correct damage - (args[0] as Utils.NumberHolder).value = Utils.toDmgValue(this.initialHp / 2); + (args[0] as NumberHolder).value = toDmgValue(this.initialHp / 2); return true; case lensCount + 1: // parental bond added hit; calc damage as normal - (args[0] as Utils.NumberHolder).value = Utils.toDmgValue(target.hp / 2); + (args[0] as NumberHolder).value = toDmgValue(target.hp / 2); return true; } } @@ -1502,7 +1521,7 @@ export class MatchHpAttr extends FixedDamageAttr { } apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { - (args[0] as Utils.NumberHolder).value = target.hp - user.hp; + (args[0] as NumberHolder).value = target.hp - user.hp; return true; } @@ -1532,7 +1551,7 @@ export class CounterDamageAttr extends FixedDamageAttr { apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { const damage = user.turnData.attacksReceived.filter(ar => this.moveFilter(allMoves[ar.move])).reduce((total: number, ar: AttackMoveResult) => total + ar.damage, 0); - (args[0] as Utils.NumberHolder).value = Utils.toDmgValue(damage * this.multiplier); + (args[0] as NumberHolder).value = toDmgValue(damage * this.multiplier); return true; } @@ -1558,13 +1577,13 @@ export class RandomLevelDamageAttr extends FixedDamageAttr { } getDamage(user: Pokemon, target: Pokemon, move: Move): number { - return Utils.toDmgValue(user.level * (user.randSeedIntRange(50, 150) * 0.01)); + return toDmgValue(user.level * (user.randSeedIntRange(50, 150) * 0.01)); } } export class ModifiedDamageAttr extends MoveAttr { apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { - const initialDamage = args[0] as Utils.NumberHolder; + const initialDamage = args[0] as NumberHolder; initialDamage.value = this.getModifiedDamage(user, target, move, initialDamage.value); return true; @@ -1580,10 +1599,6 @@ export class SurviveDamageAttr extends ModifiedDamageAttr { return Math.min(damage, target.hp - 1); } - getCondition(): MoveConditionFunc { - return (user, target, move) => target.hp > 1; - } - getUserBenefitScore(user: Pokemon, target: Pokemon, move: Move): number { return target.hp > 1 ? 0 : -20; } @@ -1621,7 +1636,7 @@ export class RecoilAttr extends MoveEffectAttr { return false; } - const cancelled = new Utils.BooleanHolder(false); + const cancelled = new BooleanHolder(false); if (!this.unblockable) { applyAbAttrs(BlockRecoilDamageAttr, user, cancelled); applyAbAttrs(BlockNonDirectDamageAbAttr, user, cancelled); @@ -1638,7 +1653,7 @@ export class RecoilAttr extends MoveEffectAttr { const damageValue = (!this.useHp ? user.turnData.totalDamageDealt : user.getMaxHp()) * this.damageRatio; const minValue = user.turnData.totalDamageDealt ? 1 : 0; - const recoilDamage = Utils.toDmgValue(damageValue, minValue); + const recoilDamage = toDmgValue(damageValue, minValue); if (!recoilDamage) { return false; } @@ -1755,11 +1770,11 @@ export class HalfSacrificialAttr extends MoveEffectAttr { return false; } - const cancelled = new Utils.BooleanHolder(false); + const cancelled = new BooleanHolder(false); // Check to see if the Pokemon has an ability that blocks non-direct damage applyAbAttrs(BlockNonDirectDamageAbAttr, user, cancelled); if (!cancelled.value) { - user.damageAndUpdate(Utils.toDmgValue(user.getMaxHp() / 2), { result: HitResult.INDIRECT, ignoreSegments: true }); + user.damageAndUpdate(toDmgValue(user.getMaxHp() / 2), { result: HitResult.INDIRECT, ignoreSegments: true }); globalScene.queueMessage(i18next.t("moveTriggers:cutHpPowerUpMove", { pokemonName: getPokemonNameWithAffix(user) })); // Queue recoil message } return true; @@ -1865,7 +1880,7 @@ export class HealAttr extends MoveEffectAttr { */ addHealPhase(target: Pokemon, healRatio: number) { globalScene.unshiftPhase(new PokemonHealPhase(target.getBattlerIndex(), - Utils.toDmgValue(target.getMaxHp() * healRatio), i18next.t("moveTriggers:healHp", { pokemonName: getPokemonNameWithAffix(target) }), true, !this.showAnim)); + toDmgValue(target.getMaxHp() * healRatio), i18next.t("moveTriggers:healHp", { pokemonName: getPokemonNameWithAffix(target) }), true, !this.showAnim)); } getTargetBenefitScore(user: Pokemon, target: Pokemon, move: Move): number { @@ -1881,14 +1896,14 @@ export class HealAttr extends MoveEffectAttr { */ export class PartyStatusCureAttr extends MoveEffectAttr { /** Message to display after using move */ - private message: string; + private message: string | null; /** Skips mons with this ability, ie. Soundproof */ private abilityCondition: Abilities; constructor(message: string | null, abilityCondition: Abilities) { super(); - this.message = message!; // TODO: is this bang correct? + this.message = message; this.abilityCondition = abilityCondition; } @@ -1927,7 +1942,9 @@ export class PartyStatusCureAttr extends MoveEffectAttr { pokemon.resetStatus(); pokemon.updateInfo(); } else { - globalScene.unshiftPhase(new ShowAbilityPhase(pokemon.id, pokemon.getPassiveAbility()?.id === this.abilityCondition)); + // TODO: Ability displays should be handled by the ability + globalScene.queueAbilityDisplay(pokemon, pokemon.getPassiveAbility()?.id === this.abilityCondition, true); + globalScene.queueAbilityDisplay(pokemon, pokemon.getPassiveAbility()?.id === this.abilityCondition, false); } } } @@ -1946,9 +1963,9 @@ export class FlameBurstAttr extends MoveEffectAttr { */ apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { const targetAlly = target.getAlly(); - const cancelled = new Utils.BooleanHolder(false); + const cancelled = new BooleanHolder(false); - if (targetAlly) { + if (!isNullOrUndefined(targetAlly)) { applyAbAttrs(BlockNonDirectDamageAbAttr, targetAlly, cancelled); } @@ -1961,7 +1978,7 @@ export class FlameBurstAttr extends MoveEffectAttr { } getTargetBenefitScore(user: Pokemon, target: Pokemon, move: Move): number { - return target.getAlly() ? -5 : 0; + return !isNullOrUndefined(target.getAlly()) ? -5 : 0; } } @@ -2029,11 +2046,11 @@ export class IgnoreWeatherTypeDebuffAttr extends MoveAttr { * @param user {@linkcode Pokemon} that used the move * @param target N/A * @param move {@linkcode Move} with this attribute - * @param args [0] {@linkcode Utils.NumberHolder} for arenaAttackTypeMultiplier + * @param args [0] {@linkcode NumberHolder} for arenaAttackTypeMultiplier * @returns true if the function succeeds */ apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { - const weatherModifier = args[0] as Utils.NumberHolder; + const weatherModifier = args[0] as NumberHolder; //If the type-based attack power modifier due to weather (e.g. Water moves in Sun) is below 1, set it to 1 if (globalScene.arena.weather?.weatherType === this.weather) { weatherModifier.value = Math.max(weatherModifier.value, 1); @@ -2103,10 +2120,10 @@ export class BoostHealAttr extends HealAttr { /** The lambda expression to check against when boosting the healing value */ private condition?: MoveConditionFunc; - constructor(normalHealRatio?: number, boostedHealRatio?: number, showAnim?: boolean, selfTarget?: boolean, condition?: MoveConditionFunc) { + constructor(normalHealRatio: number = 0.5, boostedHealRatio: number = 2 / 3, showAnim?: boolean, selfTarget?: boolean, condition?: MoveConditionFunc) { super(normalHealRatio, showAnim, selfTarget); - this.normalHealRatio = normalHealRatio!; // TODO: is this bang correct? - this.boostedHealRatio = boostedHealRatio!; // TODO: is this bang correct? + this.normalHealRatio = normalHealRatio; + this.boostedHealRatio = boostedHealRatio; this.condition = condition; } @@ -2184,7 +2201,7 @@ export class HitHealAttr extends MoveEffectAttr { message = i18next.t("battle:drainMessage", { pokemonName: getPokemonNameWithAffix(target) }); } else { // Default healing formula used by draining moves like Absorb, Draining Kiss, Bitter Blade, etc. - healAmount = Utils.toDmgValue(user.turnData.singleHitDamageDealt * this.healRatio); + healAmount = toDmgValue(user.turnData.singleHitDamageDealt * this.healRatio); message = i18next.t("battle:regainHealth", { pokemonName: getPokemonNameWithAffix(user) }); } if (reverseDrain) { @@ -2242,7 +2259,7 @@ export class IncrementMovePriorityAttr extends MoveAttr { * @param user {@linkcode Pokemon} using this move * @param target {@linkcode Pokemon} target of this move * @param move {@linkcode Move} being used - * @param args [0] {@linkcode Utils.NumberHolder} for move priority. + * @param args [0] {@linkcode NumberHolder} for move priority. * @returns true if function succeeds */ apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { @@ -2250,7 +2267,7 @@ export class IncrementMovePriorityAttr extends MoveAttr { return false; } - (args[0] as Utils.NumberHolder).value += this.increaseAmount; + (args[0] as NumberHolder).value += this.increaseAmount; return true; } } @@ -2288,15 +2305,15 @@ export class MultiHitAttr extends MoveAttr { * @param user {@linkcode Pokemon} that used the attack * @param target {@linkcode Pokemon} targeted by the attack * @param move {@linkcode Move} being used - * @param args [0] {@linkcode Utils.NumberHolder} storing the hit count of the attack + * @param args [0] {@linkcode NumberHolder} storing the hit count of the attack * @returns True */ apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { - const hitType = new Utils.NumberHolder(this.intrinsicMultiHitType); + const hitType = new NumberHolder(this.intrinsicMultiHitType); applyMoveAttrs(ChangeMultiHitTypeAttr, user, target, move, hitType); this.multiHitType = hitType.value; - (args[0] as Utils.NumberHolder).value = this.getHitCount(user, target); + (args[0] as NumberHolder).value = this.getHitCount(user, target); return true; } @@ -2317,7 +2334,7 @@ export class MultiHitAttr extends MoveAttr { case MultiHitType._2_TO_5: { const rand = user.randSeedInt(20); - const hitValue = new Utils.NumberHolder(rand); + const hitValue = new NumberHolder(rand); applyAbAttrs(MaxMultiHitAbAttr, user, null, false, hitValue); if (hitValue.value >= 13) { return 2; @@ -2395,7 +2412,7 @@ export class ChangeMultiHitTypeAttr extends MoveAttr { export class WaterShurikenMultiHitTypeAttr extends ChangeMultiHitTypeAttr { apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { if (user.species.speciesId === Species.GRENINJA && user.hasAbility(Abilities.BATTLE_BOND) && user.formIndex === 2) { - (args[0] as Utils.NumberHolder).value = MultiHitType._3; + (args[0] as NumberHolder).value = MultiHitType._3; return true; } return false; @@ -2424,12 +2441,8 @@ export class StatusEffectAttr extends MoveEffectAttr { const statusCheck = moveChance < 0 || moveChance === 100 || user.randSeedInt(100) < moveChance; if (statusCheck) { const pokemon = this.selfTarget ? user : target; - if (pokemon.status) { - if (this.overrideStatus) { - pokemon.resetStatus(); - } else { - return false; - } + if (pokemon.status && !this.overrideStatus) { + return false; } if (user !== target && target.isSafeguarded(user)) { @@ -2438,8 +2451,8 @@ export class StatusEffectAttr extends MoveEffectAttr { } return false; } - if ((!pokemon.status || (pokemon.status.effect === this.effect && moveChance < 0)) - && pokemon.trySetStatus(this.effect, true, user, this.turnsRemaining)) { + if (((!pokemon.status || this.overrideStatus) || (pokemon.status.effect === this.effect && moveChance < 0)) + && pokemon.trySetStatus(this.effect, true, user, this.turnsRemaining, null, this.overrideStatus)) { applyPostAttackAbAttrs(ConfusionOnStatusEffectAbAttr, user, target, move, null, false, this.effect); return true; } @@ -2465,7 +2478,7 @@ export class MultiStatusEffectAttr extends StatusEffectAttr { } apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { - this.effect = Utils.randSeedItem(this.effects); + this.effect = randSeedItem(this.effects); const result = super.apply(user, target, move, args); return result; } @@ -2597,7 +2610,7 @@ export class RemoveHeldItemAttr extends MoveEffectAttr { return false; } - const cancelled = new Utils.BooleanHolder(false); + const cancelled = new BooleanHolder(false); applyAbAttrs(BlockItemTheftAbAttr, target, cancelled); // Check for abilities that block item theft if (cancelled.value === true) { @@ -2671,7 +2684,7 @@ export class EatBerryAttr extends MoveEffectAttr { return false; } this.chosenBerry = heldBerries[user.randSeedInt(heldBerries.length)]; - const preserve = new Utils.BooleanHolder(false); + const preserve = new BooleanHolder(false); globalScene.applyModifiers(PreserveBerryModifier, target.isPlayer(), target, preserve); // check for berry pouch preservation if (!preserve.value) { this.reduceBerryModifier(target); @@ -2694,7 +2707,7 @@ export class EatBerryAttr extends MoveEffectAttr { eatBerry(consumer: Pokemon, berryOwner?: Pokemon) { getBerryEffectFunc(this.chosenBerry!.berryType)(consumer, berryOwner); // consumer eats the berry - applyAbAttrs(HealFromBerryUseAbAttr, consumer, new Utils.BooleanHolder(false)); + applyAbAttrs(HealFromBerryUseAbAttr, consumer, new BooleanHolder(false)); } } @@ -2718,7 +2731,7 @@ export class StealEatBerryAttr extends EatBerryAttr { if (move.hitsSubstitute(user, target)) { return false; } - const cancelled = new Utils.BooleanHolder(false); + const cancelled = new BooleanHolder(false); applyAbAttrs(BlockItemTheftAbAttr, target, cancelled); // check for abilities that block item theft if (cancelled.value === true) { return false; @@ -2831,11 +2844,11 @@ export class BypassBurnDamageReductionAttr extends MoveAttr { * @param user N/A * @param target N/A * @param move {@linkcode Move} with this attribute - * @param args [0] {@linkcode Utils.BooleanHolder} for burnDamageReductionCancelled + * @param args [0] {@linkcode BooleanHolder} for burnDamageReductionCancelled * @returns true if the function succeeds */ apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { - (args[0] as Utils.BooleanHolder).value = true; + (args[0] as BooleanHolder).value = true; return true; } @@ -2851,7 +2864,7 @@ export class WeatherChangeAttr extends MoveEffectAttr { } apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { - return globalScene.arena.trySetWeather(this.weatherType, true); + return globalScene.arena.trySetWeather(this.weatherType, user); } getCondition(): MoveConditionFunc { @@ -2870,7 +2883,7 @@ export class ClearWeatherAttr extends MoveEffectAttr { apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { if (globalScene.arena.weather?.weatherType === this.weatherType) { - return globalScene.arena.trySetWeather(WeatherType.NONE, true); + return globalScene.arena.trySetWeather(WeatherType.NONE, user); } return false; @@ -2887,7 +2900,7 @@ export class TerrainChangeAttr extends MoveEffectAttr { } apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { - return globalScene.arena.trySetTerrain(this.terrainType, true, true); + return globalScene.arena.trySetTerrain(this.terrainType, true, user); } getCondition(): MoveConditionFunc { @@ -2906,7 +2919,7 @@ export class ClearTerrainAttr extends MoveEffectAttr { } apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { - return globalScene.arena.trySetTerrain(TerrainType.NONE, true, true); + return globalScene.arena.trySetTerrain(TerrainType.NONE, true, user); } } @@ -2916,14 +2929,14 @@ export class OneHitKOAttr extends MoveAttr { return false; } - (args[0] as Utils.BooleanHolder).value = true; + (args[0] as BooleanHolder).value = true; return true; } getCondition(): MoveConditionFunc { return (user, target, move) => { - const cancelled = new Utils.BooleanHolder(false); + const cancelled = new BooleanHolder(false); applyAbAttrs(BlockOneHitKOAbAttr, target, cancelled); return !cancelled.value && user.level >= target.level; }; @@ -2950,12 +2963,12 @@ export class InstantChargeAttr extends MoveAttr { * @param target n/a * @param move the {@linkcode Move} associated with this attribute * @param args - * - `[0]` a {@linkcode Utils.BooleanHolder | BooleanHolder} for the "instant charge" flag + * - `[0]` a {@linkcode BooleanHolder | BooleanHolder} for the "instant charge" flag * @returns `true` if the instant charge condition is met; `false` otherwise. */ override apply(user: Pokemon, target: Pokemon | null, move: Move, args: any[]): boolean { const instantCharge = args[0]; - if (!(instantCharge instanceof Utils.BooleanHolder)) { + if (!(instantCharge instanceof BooleanHolder)) { return false; } @@ -2977,7 +2990,7 @@ export class WeatherInstantChargeAttr extends InstantChargeAttr { super((user, move) => { const currentWeather = globalScene.arena.weather; - if (Utils.isNullOrUndefined(currentWeather?.weatherType)) { + if (isNullOrUndefined(currentWeather?.weatherType)) { return false; } else { return !currentWeather?.isEffectSuppressed() @@ -3020,7 +3033,7 @@ export class DelayedAttackAttr extends OverrideMoveEffectAttr { return true; } - const overridden = args[0] as Utils.BooleanHolder; + const overridden = args[0] as BooleanHolder; const virtual = args[1] as boolean; if (!virtual) { @@ -3054,7 +3067,7 @@ export class AwaitCombinedPledgeAttr extends OverrideMoveEffectAttr { * @param target n/a * @param move the {@linkcode Move} being used * @param args - * - [0] a {@linkcode Utils.BooleanHolder} indicating whether the move's base + * - [0] a {@linkcode BooleanHolder} indicating whether the move's base * effects should be overridden this turn. * @returns `true` if base move effects were overridden; `false` otherwise */ @@ -3065,7 +3078,7 @@ export class AwaitCombinedPledgeAttr extends OverrideMoveEffectAttr { return false; } - const overridden = args[0] as Utils.BooleanHolder; + const overridden = args[0] as BooleanHolder; const allyMovePhase = globalScene.findPhase((phase) => phase instanceof MovePhase && phase.pokemon.isPlayer() === user.isPlayer()); if (allyMovePhase) { @@ -3374,14 +3387,14 @@ export class SecretPowerAttr extends MoveEffectAttr { export class PostVictoryStatStageChangeAttr extends MoveAttr { private stats: BattleStat[]; private stages: number; - private condition: MoveConditionFunc | null; + private condition?: MoveConditionFunc; private showMessage: boolean; constructor(stats: BattleStat[], stages: number, selfTarget?: boolean, condition?: MoveConditionFunc, showMessage: boolean = true, firstHitOnly: boolean = false) { super(); this.stats = stats; this.stages = stages; - this.condition = condition!; // TODO: is this bang correct? + this.condition = condition; this.showMessage = showMessage; } applyPostVictory(user: Pokemon, target: Pokemon, move: Move): void { @@ -3436,7 +3449,7 @@ export class CutHpStatStageBoostAttr extends StatStageChangeAttr { this.messageCallback = messageCallback; } override apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { - user.damageAndUpdate(Utils.toDmgValue(user.getMaxHp() / this.cutRatio), { result: HitResult.INDIRECT }); + user.damageAndUpdate(toDmgValue(user.getMaxHp() / this.cutRatio), { result: HitResult.INDIRECT }); user.updateInfo(); const ret = super.apply(user, target, move, args); if (this.messageCallback) { @@ -3648,12 +3661,12 @@ export class LessPPMorePowerAttr extends VariablePowerAttr { * @param user {@linkcode Pokemon} using this move * @param target {@linkcode Pokemon} target of this move * @param move {@linkcode Move} being used - * @param args [0] {@linkcode Utils.NumberHolder} of power + * @param args [0] {@linkcode NumberHolder} of power * @returns true if the function succeeds */ apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { const ppMax = move.pp; - const ppUsed = user.moveset.find((m) => m?.moveId === move.id)?.ppUsed!; // TODO: is the bang correct? + const ppUsed = user.moveset.find((m) => m.moveId === move.id)?.ppUsed ?? 0; let ppRemains = ppMax - ppUsed; /** Reduce to 0 to avoid negative numbers if user has 1PP before attack and target has Ability.PRESSURE */ @@ -3661,7 +3674,7 @@ export class LessPPMorePowerAttr extends VariablePowerAttr { ppRemains = 0; } - const power = args[0] as Utils.NumberHolder; + const power = args[0] as NumberHolder; switch (ppRemains) { case 0: @@ -3694,7 +3707,7 @@ export class MovePowerMultiplierAttr extends VariablePowerAttr { } apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { - const power = args[0] as Utils.NumberHolder; + const power = args[0] as NumberHolder; power.value *= this.powerMultiplierFunc(user, target, move); return true; @@ -3734,7 +3747,7 @@ export class BeatUpAttr extends VariablePowerAttr { * @returns true if the function succeeds */ apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { - const power = args[0] as Utils.NumberHolder; + const power = args[0] as NumberHolder; const party = user.isPlayer() ? globalScene.getPlayerParty() : globalScene.getEnemyParty(); const allyCount = party.filter(pokemon => { @@ -3749,7 +3762,7 @@ export class BeatUpAttr extends VariablePowerAttr { const doublePowerChanceMessageFunc = (user: Pokemon, target: Pokemon, move: Move) => { let message: string = ""; globalScene.executeWithSeedOffset(() => { - const rand = Utils.randSeedInt(100); + const rand = randSeedInt(100); if (rand < move.chance) { message = i18next.t("moveTriggers:goingAllOutForAttack", { pokemonName: getPokemonNameWithAffix(user) }); } @@ -3760,9 +3773,9 @@ const doublePowerChanceMessageFunc = (user: Pokemon, target: Pokemon, move: Move export class DoublePowerChanceAttr extends VariablePowerAttr { apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { let rand: number; - globalScene.executeWithSeedOffset(() => rand = Utils.randSeedInt(100), globalScene.currentBattle.turn << 6, globalScene.waveSeed); + globalScene.executeWithSeedOffset(() => rand = randSeedInt(100), globalScene.currentBattle.turn << 6, globalScene.waveSeed); if (rand! < move.chance) { - const power = args[0] as Utils.NumberHolder; + const power = args[0] as NumberHolder; power.value *= 2; return true; } @@ -3779,7 +3792,13 @@ export abstract class ConsecutiveUsePowerMultiplierAttr extends MovePowerMultipl let count = 0; let turnMove: TurnMove | undefined; - while (((turnMove = moveHistory.shift())?.move === move.id || (comboMoves.length && comboMoves.includes(turnMove?.move!))) && (!resetOnFail || turnMove?.result === MoveResult.SUCCESS)) { // TODO: is this bang correct? + while ( + ( + (turnMove = moveHistory.shift())?.move === move.id + || (comboMoves.length && comboMoves.includes(turnMove?.move ?? Moves.NONE)) + ) + && (!resetOnFail || turnMove?.result === MoveResult.SUCCESS) + ) { if (count < (limit - 1)) { count++; } else if (resetOnLimit) { @@ -3810,7 +3829,7 @@ export class ConsecutiveUseMultiBasePowerAttr extends ConsecutiveUsePowerMultipl export class WeightPowerAttr extends VariablePowerAttr { apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { - const power = args[0] as Utils.NumberHolder; + const power = args[0] as NumberHolder; const targetWeight = target.getWeight(); const weightThresholds = [ 10, 25, 50, 100, 200 ]; @@ -3844,7 +3863,7 @@ export class ElectroBallPowerAttr extends VariablePowerAttr { * @returns true if the function succeeds */ apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { - const power = args[0] as Utils.NumberHolder; + const power = args[0] as NumberHolder; const statRatio = target.getEffectiveStat(Stat.SPD) / user.getEffectiveStat(Stat.SPD); const statThresholds = [ 0.25, 1 / 3, 0.5, 1, -1 ]; @@ -3879,7 +3898,7 @@ export class GyroBallPowerAttr extends VariablePowerAttr { * @returns true if the function succeeds */ apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { - const power = args[0] as Utils.NumberHolder; + const power = args[0] as NumberHolder; const userSpeed = user.getEffectiveStat(Stat.SPD); if (userSpeed < 1) { // Gen 6+ always have 1 base power @@ -3894,7 +3913,7 @@ export class GyroBallPowerAttr extends VariablePowerAttr { export class LowHpPowerAttr extends VariablePowerAttr { apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { - const power = args[0] as Utils.NumberHolder; + const power = args[0] as NumberHolder; const hpRatio = user.getHpRatio(); switch (true) { @@ -3924,7 +3943,7 @@ export class LowHpPowerAttr extends VariablePowerAttr { export class CompareWeightPowerAttr extends VariablePowerAttr { apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { - const power = args[0] as Utils.NumberHolder; + const power = args[0] as NumberHolder; const userWeight = user.getWeight(); const targetWeight = target.getWeight(); @@ -3958,7 +3977,7 @@ export class CompareWeightPowerAttr extends VariablePowerAttr { export class HpPowerAttr extends VariablePowerAttr { apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { - (args[0] as Utils.NumberHolder).value = Utils.toDmgValue(150 * user.getHpRatio()); + (args[0] as NumberHolder).value = toDmgValue(150 * user.getHpRatio()); return true; } @@ -3986,7 +4005,7 @@ export class OpponentHighHpPowerAttr extends VariablePowerAttr { * @returns true */ apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { - (args[0] as Utils.NumberHolder).value = Utils.toDmgValue(this.maxBasePower * target.getHpRatio()); + (args[0] as NumberHolder).value = toDmgValue(this.maxBasePower * target.getHpRatio()); return true; } @@ -3996,7 +4015,7 @@ export class FirstAttackDoublePowerAttr extends VariablePowerAttr { apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { console.log(target.getLastXMoves(1), globalScene.currentBattle.turn); if (!target.getLastXMoves(1).find(m => m.turn === globalScene.currentBattle.turn)) { - (args[0] as Utils.NumberHolder).value *= 2; + (args[0] as NumberHolder).value *= 2; return true; } @@ -4008,7 +4027,7 @@ export class FirstAttackDoublePowerAttr extends VariablePowerAttr { export class TurnDamagedDoublePowerAttr extends VariablePowerAttr { apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { if (user.turnData.attacksReceived.find(r => r.damage && r.sourceId === target.id)) { - (args[0] as Utils.NumberHolder).value *= 2; + (args[0] as NumberHolder).value *= 2; return true; } @@ -4021,7 +4040,7 @@ const magnitudeMessageFunc = (user: Pokemon, target: Pokemon, move: Move) => { globalScene.executeWithSeedOffset(() => { const magnitudeThresholds = [ 5, 15, 35, 65, 75, 95 ]; - const rand = Utils.randSeedInt(100); + const rand = randSeedInt(100); let m = 0; for (; m < magnitudeThresholds.length; m++) { @@ -4037,14 +4056,14 @@ const magnitudeMessageFunc = (user: Pokemon, target: Pokemon, move: Move) => { export class MagnitudePowerAttr extends VariablePowerAttr { apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { - const power = args[0] as Utils.NumberHolder; + const power = args[0] as NumberHolder; const magnitudeThresholds = [ 5, 15, 35, 65, 75, 95 ]; const magnitudePowers = [ 10, 30, 50, 70, 90, 100, 110, 150 ]; let rand: number; - globalScene.executeWithSeedOffset(() => rand = Utils.randSeedInt(100), globalScene.currentBattle.turn << 6, globalScene.waveSeed); + globalScene.executeWithSeedOffset(() => rand = randSeedInt(100), globalScene.currentBattle.turn << 6, globalScene.waveSeed); let m = 0; for (; m < magnitudeThresholds.length; m++) { @@ -4062,7 +4081,7 @@ export class MagnitudePowerAttr extends VariablePowerAttr { export class AntiSunlightPowerDecreaseAttr extends VariablePowerAttr { apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { if (!globalScene.arena.weather?.isEffectSuppressed()) { - const power = args[0] as Utils.NumberHolder; + const power = args[0] as NumberHolder; const weatherType = globalScene.arena.weather?.weatherType || WeatherType.NONE; switch (weatherType) { case WeatherType.RAIN: @@ -4089,7 +4108,7 @@ export class FriendshipPowerAttr extends VariablePowerAttr { } apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { - const power = args[0] as Utils.NumberHolder; + const power = args[0] as NumberHolder; const friendshipPower = Math.floor(Math.min(user instanceof PlayerPokemon ? user.friendship : user.species.baseFriendship, 255) / 2.5); power.value = Math.max(!this.invert ? friendshipPower : 102 - friendshipPower, 1); @@ -4105,7 +4124,7 @@ export class FriendshipPowerAttr extends VariablePowerAttr { export class RageFistPowerAttr extends VariablePowerAttr { apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { const { hitCount, prevHitCount } = user.battleData; - const basePower: Utils.NumberHolder = args[0]; + const basePower: NumberHolder = args[0]; this.updateHitReceivedCount(user, hitCount, prevHitCount); @@ -4150,7 +4169,7 @@ export class PositiveStatStagePowerAttr extends VariablePowerAttr { apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { const positiveStatStages: number = countPositiveStatStages(user); - (args[0] as Utils.NumberHolder).value += positiveStatStages * 20; + (args[0] as NumberHolder).value += positiveStatStages * 20; return true; } } @@ -4173,7 +4192,7 @@ export class PunishmentPowerAttr extends VariablePowerAttr { */ apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { const positiveStatStages: number = countPositiveStatStages(target); - (args[0] as Utils.NumberHolder).value = Math.min( + (args[0] as NumberHolder).value = Math.min( this.PUNISHMENT_MAX_BASE_POWER, this.PUNISHMENT_MIN_BASE_POWER + positiveStatStages * 20 ); @@ -4189,18 +4208,18 @@ export class PresentPowerAttr extends VariablePowerAttr { */ const firstHit = (user.turnData.hitCount === user.turnData.hitsLeft); - const powerSeed = Utils.randSeedInt(firstHit ? 100 : 80); + const powerSeed = randSeedInt(firstHit ? 100 : 80); if (powerSeed <= 40) { - (args[0] as Utils.NumberHolder).value = 40; + (args[0] as NumberHolder).value = 40; } else if (40 < powerSeed && powerSeed <= 70) { - (args[0] as Utils.NumberHolder).value = 80; + (args[0] as NumberHolder).value = 80; } else if (70 < powerSeed && powerSeed <= 80) { - (args[0] as Utils.NumberHolder).value = 120; + (args[0] as NumberHolder).value = 120; } else if (80 < powerSeed && powerSeed <= 100) { // If this move is multi-hit, disable all other hits user.stopMultiHit(); globalScene.unshiftPhase(new PokemonHealPhase(target.getBattlerIndex(), - Utils.toDmgValue(target.getMaxHp() / 4), i18next.t("moveTriggers:regainedHealth", { pokemonName: getPokemonNameWithAffix(target) }), true)); + toDmgValue(target.getMaxHp() / 4), i18next.t("moveTriggers:regainedHealth", { pokemonName: getPokemonNameWithAffix(target) }), true)); } return true; @@ -4210,7 +4229,7 @@ export class PresentPowerAttr extends VariablePowerAttr { export class WaterShurikenPowerAttr extends VariablePowerAttr { apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { if (user.species.speciesId === Species.GRENINJA && user.hasAbility(Abilities.BATTLE_BOND) && user.formIndex === 2) { - (args[0] as Utils.NumberHolder).value = 20; + (args[0] as NumberHolder).value = 20; return true; } return false; @@ -4232,7 +4251,7 @@ export class SpitUpPowerAttr extends VariablePowerAttr { const stockpilingTag = user.getTag(StockpilingTag); if (stockpilingTag && stockpilingTag.stockpiledCount > 0) { - const power = args[0] as Utils.NumberHolder; + const power = args[0] as NumberHolder; power.value = this.multiplier * stockpilingTag.stockpiledCount; return true; } @@ -4300,12 +4319,12 @@ export class MultiHitPowerIncrementAttr extends VariablePowerAttr { * @param user {@linkcode Pokemon} that used the move * @param target {@linkcode Pokemon} that the move was used on * @param move {@linkcode Move} with this attribute - * @param args [0] {@linkcode Utils.NumberHolder} for final calculated power of move + * @param args [0] {@linkcode NumberHolder} for final calculated power of move * @returns true if attribute application succeeds */ apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { const hitsTotal = user.turnData.hitCount - Math.max(user.turnData.hitsLeft, 0); - const power = args[0] as Utils.NumberHolder; + const power = args[0] as NumberHolder; power.value = move.power * (1 + hitsTotal % this.maxHits); @@ -4337,11 +4356,11 @@ export class LastMoveDoublePowerAttr extends VariablePowerAttr { * @param user {@linkcode Pokemon} that used the move * @param target N/A * @param move N/A - * @param args [0] {@linkcode Utils.NumberHolder} that holds the resulting power of the move + * @param args [0] {@linkcode NumberHolder} that holds the resulting power of the move * @returns true if attribute application succeeds, false otherwise */ apply(user: Pokemon, _target: Pokemon, _move: Move, args: any[]): boolean { - const power = args[0] as Utils.NumberHolder; + const power = args[0] as NumberHolder; const enemy = user.getOpponent(0); const pokemonActed: Pokemon[] = []; @@ -4353,10 +4372,10 @@ export class LastMoveDoublePowerAttr extends VariablePowerAttr { const userAlly = user.getAlly(); const enemyAlly = enemy?.getAlly(); - if (userAlly && userAlly.turnData.acted) { + if (!isNullOrUndefined(userAlly) && userAlly.turnData.acted) { pokemonActed.push(userAlly); } - if (enemyAlly && enemyAlly.turnData.acted) { + if (!isNullOrUndefined(enemyAlly) && enemyAlly.turnData.acted) { pokemonActed.push(enemyAlly); } } @@ -4365,8 +4384,8 @@ export class LastMoveDoublePowerAttr extends VariablePowerAttr { for (const p of pokemonActed) { const [ lastMove ] = p.getLastXMoves(1); - if (lastMove?.result !== MoveResult.FAIL) { - if ((lastMove?.result === MoveResult.SUCCESS) && (lastMove?.move === this.move)) { + if (lastMove.result !== MoveResult.FAIL) { + if ((lastMove.result === MoveResult.SUCCESS) && (lastMove.move === this.move)) { power.value *= 2; return true; } else { @@ -4386,7 +4405,7 @@ export class LastMoveDoublePowerAttr extends VariablePowerAttr { export class CombinedPledgePowerAttr extends VariablePowerAttr { override apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { const power = args[0]; - if (!(power instanceof Utils.NumberHolder)) { + if (!(power instanceof NumberHolder)) { return false; } const combinedPledgeMove = user.turnData.combiningPledge; @@ -4405,7 +4424,7 @@ export class CombinedPledgePowerAttr extends VariablePowerAttr { export class CombinedPledgeStabBoostAttr extends MoveAttr { override apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { const stabMultiplier = args[0]; - if (!(stabMultiplier instanceof Utils.NumberHolder)) { + if (!(stabMultiplier instanceof NumberHolder)) { return false; } const combinedPledgeMove = user.turnData.combiningPledge; @@ -4426,7 +4445,7 @@ export class CombinedPledgeStabBoostAttr extends MoveAttr { export class RoundPowerAttr extends VariablePowerAttr { override apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { const power = args[0]; - if (!(power instanceof Utils.NumberHolder)) { + if (!(power instanceof NumberHolder)) { return false; } @@ -4551,7 +4570,7 @@ export class TargetAtkUserAtkAttr extends VariableAtkAttr { super(); } apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { - (args[0] as Utils.NumberHolder).value = target.getEffectiveStat(Stat.ATK, target); + (args[0] as NumberHolder).value = target.getEffectiveStat(Stat.ATK, target); return true; } } @@ -4562,7 +4581,7 @@ export class DefAtkAttr extends VariableAtkAttr { } apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { - (args[0] as Utils.NumberHolder).value = user.getEffectiveStat(Stat.DEF, target); + (args[0] as NumberHolder).value = user.getEffectiveStat(Stat.DEF, target); return true; } } @@ -4584,7 +4603,7 @@ export class DefDefAttr extends VariableDefAttr { } apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { - (args[0] as Utils.NumberHolder).value = target.getEffectiveStat(Stat.DEF, user); + (args[0] as NumberHolder).value = target.getEffectiveStat(Stat.DEF, user); return true; } } @@ -4602,7 +4621,7 @@ export class VariableAccuracyAttr extends MoveAttr { export class ThunderAccuracyAttr extends VariableAccuracyAttr { apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { if (!globalScene.arena.weather?.isEffectSuppressed()) { - const accuracy = args[0] as Utils.NumberHolder; + const accuracy = args[0] as NumberHolder; const weatherType = globalScene.arena.weather?.weatherType || WeatherType.NONE; switch (weatherType) { case WeatherType.SUNNY: @@ -4628,7 +4647,7 @@ export class ThunderAccuracyAttr extends VariableAccuracyAttr { export class StormAccuracyAttr extends VariableAccuracyAttr { apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { if (!globalScene.arena.weather?.isEffectSuppressed()) { - const accuracy = args[0] as Utils.NumberHolder; + const accuracy = args[0] as NumberHolder; const weatherType = globalScene.arena.weather?.weatherType || WeatherType.NONE; switch (weatherType) { case WeatherType.RAIN: @@ -4659,7 +4678,7 @@ export class AlwaysHitMinimizeAttr extends VariableAccuracyAttr { */ apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { if (target.getTag(BattlerTagType.MINIMIZED)) { - const accuracy = args[0] as Utils.NumberHolder; + const accuracy = args[0] as NumberHolder; accuracy.value = -1; return true; @@ -4672,7 +4691,7 @@ export class AlwaysHitMinimizeAttr extends VariableAccuracyAttr { export class ToxicAccuracyAttr extends VariableAccuracyAttr { apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { if (user.isOfType(PokemonType.POISON)) { - const accuracy = args[0] as Utils.NumberHolder; + const accuracy = args[0] as NumberHolder; accuracy.value = -1; return true; } @@ -4684,7 +4703,7 @@ export class ToxicAccuracyAttr extends VariableAccuracyAttr { export class BlizzardAccuracyAttr extends VariableAccuracyAttr { apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { if (!globalScene.arena.weather?.isEffectSuppressed()) { - const accuracy = args[0] as Utils.NumberHolder; + const accuracy = args[0] as NumberHolder; const weatherType = globalScene.arena.weather?.weatherType || WeatherType.NONE; if (weatherType === WeatherType.HAIL || weatherType === WeatherType.SNOW) { accuracy.value = -1; @@ -4704,7 +4723,7 @@ export class VariableMoveCategoryAttr extends MoveAttr { export class PhotonGeyserCategoryAttr extends VariableMoveCategoryAttr { apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { - const category = (args[0] as Utils.NumberHolder); + const category = (args[0] as NumberHolder); if (user.getEffectiveStat(Stat.ATK, target, move) > user.getEffectiveStat(Stat.SPATK, target, move)) { category.value = MoveCategory.PHYSICAL; @@ -4724,7 +4743,7 @@ export class PhotonGeyserCategoryAttr extends VariableMoveCategoryAttr { */ export class TeraMoveCategoryAttr extends VariableMoveCategoryAttr { apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { - const category = (args[0] as Utils.NumberHolder); + const category = (args[0] as NumberHolder); if (user.isTerastallized && user.getEffectiveStat(Stat.ATK, target, move, true, true, false, false, true) > user.getEffectiveStat(Stat.SPATK, target, move, true, true, false, false, true)) { @@ -4748,12 +4767,12 @@ export class TeraBlastPowerAttr extends VariablePowerAttr { * @param target n/a * @param move {@linkcode Move} the Move with this attribute (i.e. Tera Blast) * @param args - * - [0] {@linkcode Utils.NumberHolder} the applied move's power, factoring in + * - [0] {@linkcode NumberHolder} the applied move's power, factoring in * previously applied power modifiers. * @returns */ apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { - const power = args[0] as Utils.NumberHolder; + const power = args[0] as NumberHolder; if (user.isTerastallized && user.getTeraType() === PokemonType.STELLAR) { power.value = 100; return true; @@ -4773,11 +4792,11 @@ export class StatusCategoryOnAllyAttr extends VariableMoveCategoryAttr { * @param user {@linkcode Pokemon} using the move * @param target {@linkcode Pokemon} target of the move * @param move {@linkcode Move} with this attribute - * @param args [0] {@linkcode Utils.NumberHolder} The category of the move + * @param args [0] {@linkcode NumberHolder} The category of the move * @returns true if the function succeeds */ apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { - const category = (args[0] as Utils.NumberHolder); + const category = (args[0] as NumberHolder); if (user.getAlly() === target) { category.value = MoveCategory.STATUS; @@ -4790,10 +4809,10 @@ export class StatusCategoryOnAllyAttr extends VariableMoveCategoryAttr { export class ShellSideArmCategoryAttr extends VariableMoveCategoryAttr { apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { - const category = (args[0] as Utils.NumberHolder); + const category = (args[0] as NumberHolder); - const predictedPhysDmg = target.getBaseDamage(user, move, MoveCategory.PHYSICAL, true, true); - const predictedSpecDmg = target.getBaseDamage(user, move, MoveCategory.SPECIAL, true, true); + const predictedPhysDmg = target.getBaseDamage(user, move, MoveCategory.PHYSICAL, true, true, true, true); + const predictedSpecDmg = target.getBaseDamage(user, move, MoveCategory.SPECIAL, true, true, true, true); if (predictedPhysDmg > predictedSpecDmg) { category.value = MoveCategory.PHYSICAL; @@ -4815,7 +4834,7 @@ export class VariableMoveTypeAttr extends MoveAttr { export class FormChangeItemTypeAttr extends VariableMoveTypeAttr { apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { const moveType = args[0]; - if (!(moveType instanceof Utils.NumberHolder)) { + if (!(moveType instanceof NumberHolder)) { return false; } @@ -4833,7 +4852,7 @@ export class FormChangeItemTypeAttr extends VariableMoveTypeAttr { export class TechnoBlastTypeAttr extends VariableMoveTypeAttr { apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { const moveType = args[0]; - if (!(moveType instanceof Utils.NumberHolder)) { + if (!(moveType instanceof NumberHolder)) { return false; } @@ -4867,7 +4886,7 @@ export class TechnoBlastTypeAttr extends VariableMoveTypeAttr { export class AuraWheelTypeAttr extends VariableMoveTypeAttr { apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { const moveType = args[0]; - if (!(moveType instanceof Utils.NumberHolder)) { + if (!(moveType instanceof NumberHolder)) { return false; } @@ -4892,7 +4911,7 @@ export class AuraWheelTypeAttr extends VariableMoveTypeAttr { export class RagingBullTypeAttr extends VariableMoveTypeAttr { apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { const moveType = args[0]; - if (!(moveType instanceof Utils.NumberHolder)) { + if (!(moveType instanceof NumberHolder)) { return false; } @@ -4920,7 +4939,7 @@ export class RagingBullTypeAttr extends VariableMoveTypeAttr { export class IvyCudgelTypeAttr extends VariableMoveTypeAttr { apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { const moveType = args[0]; - if (!(moveType instanceof Utils.NumberHolder)) { + if (!(moveType instanceof NumberHolder)) { return false; } @@ -4955,7 +4974,7 @@ export class IvyCudgelTypeAttr extends VariableMoveTypeAttr { export class WeatherBallTypeAttr extends VariableMoveTypeAttr { apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { const moveType = args[0]; - if (!(moveType instanceof Utils.NumberHolder)) { + if (!(moveType instanceof NumberHolder)) { return false; } @@ -4997,12 +5016,12 @@ export class TerrainPulseTypeAttr extends VariableMoveTypeAttr { * @param user {@linkcode Pokemon} using this move * @param target N/A * @param move N/A - * @param args [0] {@linkcode Utils.NumberHolder} The move's type to be modified + * @param args [0] {@linkcode NumberHolder} The move's type to be modified * @returns true if the function succeeds */ apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { const moveType = args[0]; - if (!(moveType instanceof Utils.NumberHolder)) { + if (!(moveType instanceof NumberHolder)) { return false; } @@ -5038,7 +5057,7 @@ export class TerrainPulseTypeAttr extends VariableMoveTypeAttr { export class HiddenPowerTypeAttr extends VariableMoveTypeAttr { apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { const moveType = args[0]; - if (!(moveType instanceof Utils.NumberHolder)) { + if (!(moveType instanceof NumberHolder)) { return false; } @@ -5073,7 +5092,7 @@ export class TeraBlastTypeAttr extends VariableMoveTypeAttr { */ apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { const moveType = args[0]; - if (!(moveType instanceof Utils.NumberHolder)) { + if (!(moveType instanceof NumberHolder)) { return false; } @@ -5096,12 +5115,12 @@ export class TeraStarstormTypeAttr extends VariableMoveTypeAttr { * @param user the {@linkcode Pokemon} using the move * @param target n/a * @param move n/a - * @param args[0] {@linkcode Utils.NumberHolder} the move type + * @param args[0] {@linkcode NumberHolder} the move type * @returns `true` if the move type is changed to {@linkcode PokemonType.STELLAR}, `false` otherwise */ override apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { if (user.isTerastallized && user.hasSpecies(Species.TERAPAGOS)) { - const moveType = args[0] as Utils.NumberHolder; + const moveType = args[0] as NumberHolder; moveType.value = PokemonType.STELLAR; return true; @@ -5113,7 +5132,7 @@ export class TeraStarstormTypeAttr extends VariableMoveTypeAttr { export class MatchUserTypeAttr extends VariableMoveTypeAttr { apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { const moveType = args[0]; - if (!(moveType instanceof Utils.NumberHolder)) { + if (!(moveType instanceof NumberHolder)) { return false; } const userTypes = user.getTypes(true); @@ -5139,7 +5158,7 @@ export class MatchUserTypeAttr extends VariableMoveTypeAttr { export class CombinedPledgeTypeAttr extends VariableMoveTypeAttr { override apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { const moveType = args[0]; - if (!(moveType instanceof Utils.NumberHolder)) { + if (!(moveType instanceof NumberHolder)) { return false; } @@ -5182,7 +5201,7 @@ export class VariableMoveTypeMultiplierAttr extends MoveAttr { export class NeutralDamageAgainstFlyingTypeMultiplierAttr extends VariableMoveTypeMultiplierAttr { apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { if (!target.getTag(BattlerTagType.IGNORE_FLYING)) { - const multiplier = args[0] as Utils.NumberHolder; + const multiplier = args[0] as NumberHolder; //When a flying type is hit, the first hit is always 1x multiplier. if (target.isOfType(PokemonType.FLYING)) { multiplier.value = 1; @@ -5200,11 +5219,11 @@ export class IceNoEffectTypeAttr extends VariableMoveTypeMultiplierAttr { * @param user n/a * @param target The {@linkcode Pokemon} targeted by the move * @param move n/a - * @param args `[0]` a {@linkcode Utils.NumberHolder | NumberHolder} containing a type effectiveness multiplier + * @param args `[0]` a {@linkcode NumberHolder | NumberHolder} containing a type effectiveness multiplier * @returns `true` if this Ice-type immunity applies; `false` otherwise */ apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { - const multiplier = args[0] as Utils.NumberHolder; + const multiplier = args[0] as NumberHolder; if (target.isOfType(PokemonType.ICE)) { multiplier.value = 0; return true; @@ -5215,7 +5234,7 @@ export class IceNoEffectTypeAttr extends VariableMoveTypeMultiplierAttr { export class FlyingTypeMultiplierAttr extends VariableMoveTypeMultiplierAttr { apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { - const multiplier = args[0] as Utils.NumberHolder; + const multiplier = args[0] as NumberHolder; multiplier.value *= target.getAttackTypeEffectiveness(PokemonType.FLYING, user); return true; } @@ -5244,7 +5263,7 @@ export class VariableMoveTypeChartAttr extends MoveAttr { */ export class FreezeDryAttr extends VariableMoveTypeChartAttr { apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { - const multiplier = args[0] as Utils.NumberHolder; + const multiplier = args[0] as NumberHolder; const defType = args[1] as PokemonType; if (defType === PokemonType.WATER) { @@ -5258,7 +5277,7 @@ export class FreezeDryAttr extends VariableMoveTypeChartAttr { export class OneHitKOAccuracyAttr extends VariableAccuracyAttr { apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { - const accuracy = args[0] as Utils.NumberHolder; + const accuracy = args[0] as NumberHolder; if (user.level < target.level) { accuracy.value = 0; } else { @@ -5280,7 +5299,7 @@ export class SheerColdAccuracyAttr extends OneHitKOAccuracyAttr { * @returns Returns true if move is successful, false if misses. */ apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { - const accuracy = args[0] as Utils.NumberHolder; + const accuracy = args[0] as NumberHolder; if (user.level < target.level) { accuracy.value = 0; } else { @@ -5322,15 +5341,15 @@ export class NoEffectAttr extends MoveAttr { } const crashDamageFunc = (user: Pokemon, move: Move) => { - const cancelled = new Utils.BooleanHolder(false); + const cancelled = new BooleanHolder(false); applyAbAttrs(BlockNonDirectDamageAbAttr, user, cancelled); if (cancelled.value) { return false; } - user.damageAndUpdate(Utils.toDmgValue(user.getMaxHp() / 2), { result: HitResult.INDIRECT }); + user.damageAndUpdate(toDmgValue(user.getMaxHp() / 2), { result: HitResult.INDIRECT }); globalScene.queueMessage(i18next.t("moveTriggers:keptGoingAndCrashed", { pokemonName: getPokemonNameWithAffix(user) })); - user.turnData.damageTaken += Utils.toDmgValue(user.getMaxHp() / 2); + user.turnData.damageTaken += toDmgValue(user.getMaxHp() / 2); return true; }; @@ -5461,7 +5480,7 @@ export class AddBattlerTagAttr extends MoveEffectAttr { : null; } - getTagTargetBenefitScore(user: Pokemon, target: Pokemon, move: Move): number | void { + getTagTargetBenefitScore(): number { switch (this.tagType) { case BattlerTagType.RECHARGING: case BattlerTagType.PERISH_SONG: @@ -5506,6 +5525,9 @@ export class AddBattlerTagAttr extends MoveEffectAttr { case BattlerTagType.CRIT_BOOST: case BattlerTagType.ALWAYS_CRIT: return 5; + default: + console.warn(`BattlerTag ${BattlerTagType[this.tagType]} is missing a score!`); + return 0; } } @@ -5514,7 +5536,7 @@ export class AddBattlerTagAttr extends MoveEffectAttr { if (moveChance < 0) { moveChance = 100; } - return Math.floor(this.getTagTargetBenefitScore(user, target, move)! * (moveChance / 100)); // TODO: is the bang correct? + return Math.floor(this.getTagTargetBenefitScore() * (moveChance / 100)); } } @@ -5769,7 +5791,7 @@ export class ProtectAttr extends AddBattlerTagAttr { while (moveHistory.length) { turnMove = moveHistory.shift(); - if (!allMoves[turnMove?.move!].hasAttr(ProtectAttr) || turnMove?.result !== MoveResult.SUCCESS) { // TODO: is the bang correct? + if (!allMoves[turnMove?.move ?? Moves.NONE].hasAttr(ProtectAttr) || turnMove?.result !== MoveResult.SUCCESS) { break; } timesUsed++; @@ -5900,7 +5922,7 @@ export class AddArenaTagAttr extends MoveEffectAttr { } if ((move.chance < 0 || move.chance === 100 || user.randSeedInt(100) < move.chance) && user.getLastXMoves(1)[0]?.result === MoveResult.SUCCESS) { - const side = (this.selfSideTarget ? user : target).isPlayer() ? ArenaTagSide.PLAYER : ArenaTagSide.ENEMY; + const side = ((this.selfSideTarget ? user : target).isPlayer() !== (move.hasAttr(AddArenaTrapTagAttr) && target === user)) ? ArenaTagSide.PLAYER : ArenaTagSide.ENEMY; globalScene.arena.addTag(this.tagType, this.turnCount, move.id, user.id, side); return true; } @@ -5949,7 +5971,7 @@ export class RemoveArenaTagsAttr extends MoveEffectAttr { export class AddArenaTrapTagAttr extends AddArenaTagAttr { getCondition(): MoveConditionFunc { return (user, target, move) => { - const side = (this.selfSideTarget ? user : target).isPlayer() ? ArenaTagSide.PLAYER : ArenaTagSide.ENEMY; + const side = (this.selfSideTarget !== user.isPlayer()) ? ArenaTagSide.ENEMY : ArenaTagSide.PLAYER; const tag = globalScene.arena.getTagOnSide(this.tagType, side) as ArenaTrapTag; if (!tag) { return true; @@ -6153,11 +6175,10 @@ export class RevivalBlessingAttr extends MoveEffectAttr { const pokemon = faintedPokemon[user.randSeedInt(faintedPokemon.length)]; const slotIndex = globalScene.getEnemyParty().findIndex((p) => pokemon.id === p.id); pokemon.resetStatus(); - pokemon.heal(Math.min(Utils.toDmgValue(0.5 * pokemon.getMaxHp()), pokemon.getMaxHp())); + pokemon.heal(Math.min(toDmgValue(0.5 * pokemon.getMaxHp()), pokemon.getMaxHp())); globalScene.queueMessage(i18next.t("moveTriggers:revivalBlessing", { pokemonName: getPokemonNameWithAffix(pokemon) }), 0, true); - - if (globalScene.currentBattle.double && globalScene.getEnemyParty().length > 1) { - const allyPokemon = user.getAlly(); + const allyPokemon = user.getAlly(); + if (globalScene.currentBattle.double && globalScene.getEnemyParty().length > 1 && !isNullOrUndefined(allyPokemon)) { // Handle cases where revived pokemon needs to get switched in on same turn if (allyPokemon.isFainted() || allyPokemon === pokemon) { // Enemy switch phase should be removed and replaced with the revived pkmn switching in @@ -6336,18 +6357,19 @@ export class ForceSwitchOutAttr extends MoveEffectAttr { return false; } + const allyPokemon = switchOutTarget.getAlly(); + if (switchOutTarget.hp > 0) { switchOutTarget.leaveField(false); globalScene.queueMessage(i18next.t("moveTriggers:fled", { pokemonName: getPokemonNameWithAffix(switchOutTarget) }), null, true, 500); // in double battles redirect potential moves off fled pokemon - if (globalScene.currentBattle.double) { - const allyPokemon = switchOutTarget.getAlly(); + if (globalScene.currentBattle.double && !isNullOrUndefined(allyPokemon)) { globalScene.redirectPokemonMoves(switchOutTarget, allyPokemon); } } - if (!switchOutTarget.getAlly()?.isActive(true)) { + if (!allyPokemon?.isActive(true)) { globalScene.clearEnemyHeldItemModifiers(); if (switchOutTarget.hp) { @@ -6365,7 +6387,7 @@ export class ForceSwitchOutAttr extends MoveEffectAttr { } getFailedText(_user: Pokemon, target: Pokemon, _move: Move): string | undefined { - const blockedByAbility = new Utils.BooleanHolder(false); + const blockedByAbility = new BooleanHolder(false); applyAbAttrs(ForceSwitchOutImmunityAbAttr, target, blockedByAbility); if (blockedByAbility.value) { return i18next.t("moveTriggers:cannotBeSwitchedOut", { pokemonName: getPokemonNameWithAffix(target) }); @@ -6393,7 +6415,7 @@ export class ForceSwitchOutAttr extends MoveEffectAttr { return false; } - const blockedByAbility = new Utils.BooleanHolder(false); + const blockedByAbility = new BooleanHolder(false); applyAbAttrs(ForceSwitchOutImmunityAbAttr, target, blockedByAbility); return !blockedByAbility.value; } @@ -6445,7 +6467,7 @@ export class ForceSwitchOutAttr extends MoveEffectAttr { export class ChillyReceptionAttr extends ForceSwitchOutAttr { apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { - globalScene.arena.trySetWeather(WeatherType.SNOW, true); + globalScene.arena.trySetWeather(WeatherType.SNOW, user); return super.apply(user, target, move, args); } @@ -6688,7 +6710,7 @@ export class FirstMoveTypeAttr extends MoveEffectAttr { return false; } - const firstMoveType = target.getMoveset()[0]?.getMove().type!; // TODO: is this bang correct? + const firstMoveType = target.getMoveset()[0].getMove().type; user.summonData.types = [ firstMoveType ]; globalScene.queueMessage(i18next.t("battle:transformedIntoType", { pokemonName: getPokemonNameWithAffix(user), type: i18next.t(`pokemonInfo:Type.${PokemonType[firstMoveType]}`) })); @@ -6709,6 +6731,8 @@ class CallMoveAttr extends OverrideMoveEffectAttr { const replaceMoveTarget = move.moveTarget === MoveTarget.NEAR_OTHER ? MoveTarget.NEAR_ENEMY : undefined; const moveTargets = getMoveTargets(user, move.id, replaceMoveTarget); if (moveTargets.targets.length === 0) { + globalScene.queueMessage(i18next.t("battle:attackFailed")); + console.log("CallMoveAttr failed due to no targets."); return false; } const targets = moveTargets.multiple || moveTargets.targets.length === 1 @@ -6750,7 +6774,7 @@ export class RandomMoveAttr extends CallMoveAttr { * @param args Unused */ override apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { - const moveIds = Utils.getEnumValues(Moves).map(m => !this.invalidMoves.has(m) && !allMoves[m].name.endsWith(" (N)") ? m : Moves.NONE); + const moveIds = getEnumValues(Moves).map(m => !this.invalidMoves.has(m) && !allMoves[m].name.endsWith(" (N)") ? m : Moves.NONE); let moveId: Moves = Moves.NONE; do { moveId = this.getMoveOverride() ?? moveIds[user.randSeedInt(moveIds.length)]; @@ -7005,7 +7029,7 @@ export class RepeatMoveAttr extends MoveEffectAttr { apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { // get the last move used (excluding status based failures) as well as the corresponding moveset slot const lastMove = target.getLastXMoves(-1).find(m => m.move !== Moves.NONE)!; - const movesetMove = target.getMoveset().find(m => m?.moveId === lastMove.move)!; + const movesetMove = target.getMoveset().find(m => m.moveId === lastMove.move)!; // If the last move used can hit more than one target or has variable targets, // re-compute the targets for the attack // (mainly for alternating double/single battle shenanigans) @@ -7021,7 +7045,7 @@ export class RepeatMoveAttr extends MoveEffectAttr { const firstTarget = globalScene.getField()[moveTargets[0]]; if (globalScene.currentBattle.double && moveTargets.length === 1 && firstTarget.isFainted() && firstTarget !== target.getAlly()) { const ally = firstTarget.getAlly(); - if (ally.isActive()) { // ally exists, is not dead and can sponge the blast + if (!isNullOrUndefined(ally) && ally.isActive()) { // ally exists, is not dead and can sponge the blast moveTargets = [ ally.getBattlerIndex() ]; } } @@ -7039,7 +7063,7 @@ export class RepeatMoveAttr extends MoveEffectAttr { getCondition(): MoveConditionFunc { return (user, target, move) => { const lastMove = target.getLastXMoves(-1).find(m => m.move !== Moves.NONE); - const movesetMove = target.getMoveset().find(m => m?.moveId === lastMove?.move); + const movesetMove = target.getMoveset().find(m => m.moveId === lastMove?.move); const uninstructableMoves = [ // Locking/Continually Executed moves Moves.OUTRAGE, @@ -7134,19 +7158,19 @@ export class ReducePpMoveAttr extends MoveEffectAttr { * * @param user {@linkcode Pokemon} that used the attack * @param target {@linkcode Pokemon} targeted by the attack - * @param move {@linkcode Move} being used + * @param move N/A * @param args N/A - * @returns {boolean} true + * @returns `true` */ apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { // Null checks can be skipped due to condition function - const lastMove = target.getLastXMoves().find(() => true); - const movesetMove = target.getMoveset().find(m => m?.moveId === lastMove?.move); - const lastPpUsed = movesetMove?.ppUsed!; // TODO: is the bang correct? - movesetMove!.ppUsed = Math.min((movesetMove?.ppUsed!) + this.reduction, movesetMove?.getMovePp()!); // TODO: is the bang correct? + const lastMove = target.getLastXMoves()[0]; + const movesetMove = target.getMoveset().find(m => m.moveId === lastMove.move)!; + const lastPpUsed = movesetMove.ppUsed; + movesetMove.ppUsed = Math.min((lastPpUsed) + this.reduction, movesetMove.getMovePp()); - const message = i18next.t("battle:ppReduced", { targetName: getPokemonNameWithAffix(target), moveName: movesetMove?.getName(), reduction: (movesetMove?.ppUsed!) - lastPpUsed }); // TODO: is the bang correct? - globalScene.eventTarget.dispatchEvent(new MoveUsedEvent(target?.id, movesetMove?.getMove()!, movesetMove?.ppUsed!)); // TODO: are these bangs correct? + const message = i18next.t("battle:ppReduced", { targetName: getPokemonNameWithAffix(target), moveName: movesetMove.getName(), reduction: (movesetMove.ppUsed) - lastPpUsed }); + globalScene.eventTarget.dispatchEvent(new MoveUsedEvent(target.id, movesetMove.getMove(), movesetMove.ppUsed)); globalScene.queueMessage(message); return true; @@ -7154,9 +7178,9 @@ export class ReducePpMoveAttr extends MoveEffectAttr { getCondition(): MoveConditionFunc { return (user, target, move) => { - const lastMove = target.getLastXMoves().find(() => true); + const lastMove = target.getLastXMoves()[0]; if (lastMove) { - const movesetMove = target.getMoveset().find(m => m?.moveId === lastMove.move); + const movesetMove = target.getMoveset().find(m => m.moveId === lastMove.move); return !!movesetMove?.getPpRatio(); } return false; @@ -7164,9 +7188,9 @@ export class ReducePpMoveAttr extends MoveEffectAttr { } getTargetBenefitScore(user: Pokemon, target: Pokemon, move: Move): number { - const lastMove = target.getLastXMoves().find(() => true); + const lastMove = target.getLastXMoves()[0]; if (lastMove) { - const movesetMove = target.getMoveset().find(m => m?.moveId === lastMove.move); + const movesetMove = target.getMoveset().find(m => m.moveId === lastMove.move); if (movesetMove) { const maxPp = movesetMove.getMovePp(); const ppLeft = maxPp - movesetMove.ppUsed; @@ -7203,7 +7227,7 @@ export class AttackReducePpMoveAttr extends ReducePpMoveAttr { apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { const lastMove = target.getLastXMoves().find(() => true); if (lastMove) { - const movesetMove = target.getMoveset().find(m => m?.moveId === lastMove.move); + const movesetMove = target.getMoveset().find(m => m.moveId === lastMove.move); if (Boolean(movesetMove?.getPpRatio())) { super.apply(user, target, move, args); } @@ -7249,7 +7273,7 @@ export class MovesetCopyMoveAttr extends OverrideMoveEffectAttr { const copiedMove = allMoves[targetMoves[0].move]; - const thisMoveIndex = user.getMoveset().findIndex(m => m?.moveId === move.id); + const thisMoveIndex = user.getMoveset().findIndex(m => m.moveId === move.id); if (thisMoveIndex === -1) { return false; @@ -7301,7 +7325,7 @@ export class SketchAttr extends MoveEffectAttr { } const sketchedMove = allMoves[targetMove.move]; - const sketchIndex = user.getMoveset().findIndex(m => m?.moveId === move.id); + const sketchIndex = user.getMoveset().findIndex(m => m.moveId === move.id); if (sketchIndex === -1) { return false; } @@ -7340,7 +7364,7 @@ export class SketchAttr extends MoveEffectAttr { return false; } - if (user.getMoveset().find(m => m?.moveId === targetMove.move)) { + if (user.getMoveset().find(m => m.moveId === targetMove.move)) { return false; } @@ -7365,16 +7389,18 @@ export class AbilityChangeAttr extends MoveEffectAttr { const moveTarget = this.selfTarget ? user : target; - globalScene.queueMessage(i18next.t("moveTriggers:acquiredAbility", { pokemonName: getPokemonNameWithAffix((this.selfTarget ? user : target)), abilityName: allAbilities[this.ability].name })); - + globalScene.triggerPokemonFormChange(moveTarget, SpeciesFormChangeRevertWeatherFormTrigger); + if (moveTarget.breakIllusion()) { + globalScene.queueMessage(i18next.t("abilityTriggers:illusionBreak", { pokemonName: getPokemonNameWithAffix(moveTarget) })); + } + globalScene.queueMessage(i18next.t("moveTriggers:acquiredAbility", { pokemonName: getPokemonNameWithAffix(moveTarget), abilityName: allAbilities[this.ability].name })); moveTarget.setTempAbility(allAbilities[this.ability]); globalScene.triggerPokemonFormChange(moveTarget, SpeciesFormChangeRevertWeatherFormTrigger); - return true; } getCondition(): MoveConditionFunc { - return (user, target, move) => !(this.selfTarget ? user : target).getAbility().hasAttr(UnsuppressableAbilityAbAttr) && (this.selfTarget ? user : target).getAbility().id !== this.ability; + return (user, target, move) => (this.selfTarget ? user : target).getAbility().isReplaceable && (this.selfTarget ? user : target).getAbility().id !== this.ability; } } @@ -7395,10 +7421,11 @@ export class AbilityCopyAttr extends MoveEffectAttr { globalScene.queueMessage(i18next.t("moveTriggers:copiedTargetAbility", { pokemonName: getPokemonNameWithAffix(user), targetName: getPokemonNameWithAffix(target), abilityName: allAbilities[target.getAbility().id].name })); user.setTempAbility(target.getAbility()); + const ally = user.getAlly(); - if (this.copyToPartner && globalScene.currentBattle?.double && user.getAlly().hp) { - globalScene.queueMessage(i18next.t("moveTriggers:copiedTargetAbility", { pokemonName: getPokemonNameWithAffix(user.getAlly()), targetName: getPokemonNameWithAffix(target), abilityName: allAbilities[target.getAbility().id].name })); - user.getAlly().setTempAbility(target.getAbility()); + if (this.copyToPartner && globalScene.currentBattle?.double && !isNullOrUndefined(ally) && ally.hp) { // TODO is this the best way to check that the ally is active? + globalScene.queueMessage(i18next.t("moveTriggers:copiedTargetAbility", { pokemonName: getPokemonNameWithAffix(ally), targetName: getPokemonNameWithAffix(target), abilityName: allAbilities[target.getAbility().id].name })); + ally.setTempAbility(target.getAbility()); } return true; @@ -7406,9 +7433,10 @@ export class AbilityCopyAttr extends MoveEffectAttr { getCondition(): MoveConditionFunc { return (user, target, move) => { - let ret = !target.getAbility().hasAttr(UncopiableAbilityAbAttr) && !user.getAbility().hasAttr(UnsuppressableAbilityAbAttr); + const ally = user.getAlly(); + let ret = target.getAbility().isCopiable && user.getAbility().isReplaceable; if (this.copyToPartner && globalScene.currentBattle?.double) { - ret = ret && (!user.getAlly().hp || !user.getAlly().getAbility().hasAttr(UnsuppressableAbilityAbAttr)); + ret = ret && (!ally?.hp || ally?.getAbility().isReplaceable); } else { ret = ret && user.getAbility().id !== target.getAbility().id; } @@ -7437,7 +7465,7 @@ export class AbilityGiveAttr extends MoveEffectAttr { } getCondition(): MoveConditionFunc { - return (user, target, move) => !user.getAbility().hasAttr(UncopiableAbilityAbAttr) && !target.getAbility().hasAttr(UnsuppressableAbilityAbAttr) && user.getAbility().id !== target.getAbility().id; + return (user, target, move) => user.getAbility().isCopiable && target.getAbility().isReplaceable && user.getAbility().id !== target.getAbility().id; } } @@ -7460,7 +7488,7 @@ export class SwitchAbilitiesAttr extends MoveEffectAttr { } getCondition(): MoveConditionFunc { - return (user, target, move) => !user.getAbility().hasAttr(UnswappableAbilityAbAttr) && !target.getAbility().hasAttr(UnswappableAbilityAbAttr); + return (user, target, move) => [user, target].every(pkmn => pkmn.getAbility().isSwappable); } } @@ -7490,7 +7518,7 @@ export class SuppressAbilitiesAttr extends MoveEffectAttr { /** Causes the effect to fail when the target's ability is unsupressable or already suppressed. */ getCondition(): MoveConditionFunc { - return (user, target, move) => !target.getAbility().hasAttr(UnsuppressableAbilityAbAttr) && !target.summonData.abilitySuppressed; + return (user, target, move) => target.getAbility().isSuppressable && !target.summonData.abilitySuppressed; } } @@ -7790,7 +7818,7 @@ export class LastResortAttr extends MoveAttr { getCondition(): MoveConditionFunc { return (user: Pokemon, target: Pokemon, move: Move) => { const uniqueUsedMoveIds = new Set(); - const movesetMoveIds = user.getMoveset().map(m => m?.moveId); + const movesetMoveIds = user.getMoveset().map(m => m.moveId); user.getMoveHistory().map(m => { if (m.move !== move.id && movesetMoveIds.find(mm => mm === m.move)) { uniqueUsedMoveIds.add(m.move); @@ -7811,7 +7839,7 @@ export class VariableTargetAttr extends MoveAttr { } apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { - const targetVal = args[0] as Utils.NumberHolder; + const targetVal = args[0] as NumberHolder; targetVal.value = this.targetChangeFunc(user, target, move); return true; } @@ -7902,7 +7930,7 @@ const failOnBossCondition: MoveConditionFunc = (user, target, move) => !target.i const failIfSingleBattle: MoveConditionFunc = (user, target, move) => globalScene.currentBattle.double; const failIfDampCondition: MoveConditionFunc = (user, target, move) => { - const cancelled = new Utils.BooleanHolder(false); + const cancelled = new BooleanHolder(false); globalScene.getField(true).map(p=>applyAbAttrs(FieldPreventExplosiveMovesAbAttr, p, cancelled)); // Queue a message if an ability prevented usage of the move if (cancelled.value) { @@ -8037,7 +8065,7 @@ export class UpperHandCondition extends MoveCondition { export class hitsSameTypeAttr extends VariableMoveTypeMultiplierAttr { apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { - const multiplier = args[0] as Utils.NumberHolder; + const multiplier = args[0] as NumberHolder; if (!user.getTypes().some(type => target.getTypes().includes(type))) { multiplier.value = 0; return true; @@ -8088,7 +8116,7 @@ export class ResistLastMoveTypeAttr extends MoveEffectAttr { } const type = validTypes[user.randSeedInt(validTypes.length)]; user.summonData.types = [ type ]; - globalScene.queueMessage(i18next.t("battle:transformedIntoType", { pokemonName: getPokemonNameWithAffix(user), type: Utils.toReadableString(PokemonType[type]) })); + globalScene.queueMessage(i18next.t("battle:transformedIntoType", { pokemonName: getPokemonNameWithAffix(user), type: toReadableString(PokemonType[type]) })); user.updateInfo(); return true; @@ -8104,7 +8132,7 @@ export class ResistLastMoveTypeAttr extends MoveEffectAttr { for (let i = 0; i < Object.keys(PokemonType).length; i++) { const multiplier = new NumberHolder(1); multiplier.value = getTypeDamageMultiplier(type, i); - applyChallenges(gameMode, ChallengeType.TYPE_EFFECTIVENESS, multiplier); + applyChallenges(ChallengeType.TYPE_EFFECTIVENESS, multiplier); if (multiplier.value < 1) { typeResistances.push(i); } @@ -8162,7 +8190,7 @@ export type MoveTargetSet = { }; export function getMoveTargets(user: Pokemon, move: Moves, replaceTarget?: MoveTarget): MoveTargetSet { - const variableTarget = new Utils.NumberHolder(0); + const variableTarget = new NumberHolder(0); user.getOpponents().forEach(p => applyMoveAttrs(VariableTargetAttr, user, p, allMoves[move], variableTarget)); let moveTarget: MoveTarget | undefined; @@ -8179,6 +8207,7 @@ export function getMoveTargets(user: Pokemon, move: Moves, replaceTarget?: MoveT let set: Pokemon[] = []; let multiple = false; + const ally: Pokemon | undefined = user.getAlly(); switch (moveTarget) { case MoveTarget.USER: @@ -8189,7 +8218,7 @@ export function getMoveTargets(user: Pokemon, move: Moves, replaceTarget?: MoveT case MoveTarget.OTHER: case MoveTarget.ALL_NEAR_OTHERS: case MoveTarget.ALL_OTHERS: - set = (opponents.concat([ user.getAlly() ])); + set = !isNullOrUndefined(ally) ? (opponents.concat([ ally ])) : opponents; multiple = moveTarget === MoveTarget.ALL_NEAR_OTHERS || moveTarget === MoveTarget.ALL_OTHERS; break; case MoveTarget.NEAR_ENEMY: @@ -8206,21 +8235,22 @@ export function getMoveTargets(user: Pokemon, move: Moves, replaceTarget?: MoveT return { targets: [ -1 as BattlerIndex ], multiple: false }; case MoveTarget.NEAR_ALLY: case MoveTarget.ALLY: - set = [ user.getAlly() ]; + set = !isNullOrUndefined(ally) ? [ ally ] : []; break; case MoveTarget.USER_OR_NEAR_ALLY: case MoveTarget.USER_AND_ALLIES: case MoveTarget.USER_SIDE: - set = [ user, user.getAlly() ]; + set = !isNullOrUndefined(ally) ? [ user, ally ] : [ user ]; multiple = moveTarget !== MoveTarget.USER_OR_NEAR_ALLY; break; case MoveTarget.ALL: case MoveTarget.BOTH_SIDES: - set = [ user, user.getAlly() ].concat(opponents); + set = (!isNullOrUndefined(ally) ? [ user, ally ] : [ user ]).concat(opponents); multiple = true; break; case MoveTarget.CURSE: - set = user.getTypes(true).includes(PokemonType.GHOST) ? (opponents.concat([ user.getAlly() ])) : [ user ]; + const extraTargets = !isNullOrUndefined(ally) ? [ ally ] : []; + set = user.getTypes(true).includes(PokemonType.GHOST) ? (opponents.concat(extraTargets)) : [ user ]; break; } @@ -8378,7 +8408,7 @@ export function initMoves() { .attr(AddBattlerTagAttr, BattlerTagType.DISABLED, false, true) .condition((user, target, move) => { const lastRealMove = target.getLastXMoves(-1).find(m => !m.virtual); - return !Utils.isNullOrUndefined(lastRealMove) && lastRealMove.move !== Moves.NONE && lastRealMove.move !== Moves.STRUGGLE; + return !isNullOrUndefined(lastRealMove) && lastRealMove.move !== Moves.NONE && lastRealMove.move !== Moves.STRUGGLE; }) .ignoresSubstitute() .reflectable(), @@ -8645,6 +8675,8 @@ export function initMoves() { .makesContact(false), new StatusMove(Moves.TRANSFORM, PokemonType.NORMAL, -1, 10, -1, 0, 1) .attr(TransformAttr) + .condition((user, target, move) => !target.getTag(BattlerTagType.SUBSTITUTE)) + .condition((user, target, move) => !target.summonData?.illusion && !user.summonData?.illusion) // transforming from or into fusion pokemon causes various problems (such as crashes) .condition((user, target, move) => !target.getTag(BattlerTagType.SUBSTITUTE) && !user.fusionSpecies && !target.fusionSpecies) .ignoresProtect(), @@ -8683,7 +8715,7 @@ export function initMoves() { new SelfStatusMove(Moves.REST, PokemonType.PSYCHIC, -1, 5, -1, 0, 1) .attr(StatusEffectAttr, StatusEffect.SLEEP, true, 3, true) .attr(HealAttr, 1, true) - .condition((user, target, move) => !user.isFullHp() && user.canSetStatus(StatusEffect.SLEEP, true, true)) + .condition((user, target, move) => !user.isFullHp() && user.canSetStatus(StatusEffect.SLEEP, true, true, user)) .triageMove(), new AttackMove(Moves.ROCK_SLIDE, PokemonType.ROCK, MoveCategory.PHYSICAL, 75, 90, 10, 30, 0, 1) .attr(FlinchAttr) @@ -9186,7 +9218,17 @@ export function initMoves() { .attr(FlinchAttr), new AttackMove(Moves.WEATHER_BALL, PokemonType.NORMAL, MoveCategory.SPECIAL, 50, 100, 10, -1, 0, 3) .attr(WeatherBallTypeAttr) - .attr(MovePowerMultiplierAttr, (user, target, move) => [ WeatherType.SUNNY, WeatherType.RAIN, WeatherType.SANDSTORM, WeatherType.HAIL, WeatherType.SNOW, WeatherType.FOG, WeatherType.HEAVY_RAIN, WeatherType.HARSH_SUN ].includes(globalScene.arena.weather?.weatherType!) && !globalScene.arena.weather?.isEffectSuppressed() ? 2 : 1) // TODO: is this bang correct? + .attr(MovePowerMultiplierAttr, (user, target, move) => { + const weather = globalScene.arena.weather; + if (!weather) { + return 1; + } + const weatherTypes = [ WeatherType.SUNNY, WeatherType.RAIN, WeatherType.SANDSTORM, WeatherType.HAIL, WeatherType.SNOW, WeatherType.FOG, WeatherType.HEAVY_RAIN, WeatherType.HARSH_SUN ]; + if (weatherTypes.includes(weather.weatherType) && !weather.isEffectSuppressed()) { + return 2; + } + return 1; + }) .ballBombMove(), new StatusMove(Moves.AROMATHERAPY, PokemonType.GRASS, -1, 5, -1, 0, 3) .attr(PartyStatusCureAttr, i18next.t("moveTriggers:soothingAromaWaftedThroughArea"), Abilities.SAP_SIPPER) @@ -9426,7 +9468,13 @@ export function initMoves() { .attr(AbilityChangeAttr, Abilities.INSOMNIA) .reflectable(), new AttackMove(Moves.SUCKER_PUNCH, PokemonType.DARK, MoveCategory.PHYSICAL, 70, 100, 5, -1, 1, 4) - .condition((user, target, move) => globalScene.currentBattle.turnCommands[target.getBattlerIndex()]?.command === Command.FIGHT && !target.turnData.acted && allMoves[globalScene.currentBattle.turnCommands[target.getBattlerIndex()]?.move?.move!].category !== MoveCategory.STATUS), // TODO: is this bang correct? + .condition((user, target, move) => { + const turnCommand = globalScene.currentBattle.turnCommands[target.getBattlerIndex()]; + if (!turnCommand || !turnCommand.move) { + return false; + } + return (turnCommand.command === Command.FIGHT && !target.turnData.acted && allMoves[turnCommand.move.move].category !== MoveCategory.STATUS); + }), new StatusMove(Moves.TOXIC_SPIKES, PokemonType.POISON, -1, 20, -1, 0, 4) .attr(AddArenaTrapTagAttr, ArenaTagType.TOXIC_SPIKES) .target(MoveTarget.ENEMY_SIDE) @@ -9670,7 +9718,7 @@ export function initMoves() { .condition(failOnGravityCondition) .condition((_user, target, _move) => ![ Species.DIGLETT, Species.DUGTRIO, Species.ALOLA_DIGLETT, Species.ALOLA_DUGTRIO, Species.SANDYGAST, Species.PALOSSAND, Species.WIGLETT, Species.WUGTRIO ].includes(target.species.speciesId)) .condition((_user, target, _move) => !(target.species.speciesId === Species.GENGAR && target.getFormKey() === "mega")) - .condition((_user, target, _move) => Utils.isNullOrUndefined(target.getTag(BattlerTagType.INGRAIN)) && Utils.isNullOrUndefined(target.getTag(BattlerTagType.IGNORE_FLYING))) + .condition((_user, target, _move) => isNullOrUndefined(target.getTag(BattlerTagType.INGRAIN)) && isNullOrUndefined(target.getTag(BattlerTagType.IGNORE_FLYING))) .attr(AddBattlerTagAttr, BattlerTagType.TELEKINESIS, false, true, 3) .attr(AddBattlerTagAttr, BattlerTagType.FLOATING, false, true, 3) .reflectable(), @@ -10098,7 +10146,7 @@ export function initMoves() { .attr(StatStageChangeAttr, [ Stat.DEF, Stat.SPDEF ], 1, false, { condition: (user, target, move) => !![ Abilities.PLUS, Abilities.MINUS ].find(a => target.hasAbility(a, false)) }) .ignoresSubstitute() .target(MoveTarget.USER_AND_ALLIES) - .condition((user, target, move) => !![ user, user.getAlly() ].filter(p => p?.isActive()).find(p => !![ Abilities.PLUS, Abilities.MINUS ].find(a => p.hasAbility(a, false)))), + .condition((user, target, move) => !![ user, user.getAlly() ].filter(p => p?.isActive()).find(p => !![ Abilities.PLUS, Abilities.MINUS ].find(a => p?.hasAbility(a, false)))), new StatusMove(Moves.HAPPY_HOUR, PokemonType.NORMAL, -1, 30, -1, 0, 6) // No animation .attr(AddArenaTagAttr, ArenaTagType.HAPPY_HOUR, null, true) .target(MoveTarget.USER_SIDE), @@ -10288,7 +10336,7 @@ export function initMoves() { .attr(StatStageChangeAttr, [ Stat.ATK, Stat.SPATK ], 1, false, { condition: (user, target, move) => !![ Abilities.PLUS, Abilities.MINUS ].find(a => target.hasAbility(a, false)) }) .ignoresSubstitute() .target(MoveTarget.USER_AND_ALLIES) - .condition((user, target, move) => !![ user, user.getAlly() ].filter(p => p?.isActive()).find(p => !![ Abilities.PLUS, Abilities.MINUS ].find(a => p.hasAbility(a, false)))), + .condition((user, target, move) => !![ user, user.getAlly() ].filter(p => p?.isActive()).find(p => !![ Abilities.PLUS, Abilities.MINUS ].find(a => p?.hasAbility(a, false)))), new AttackMove(Moves.THROAT_CHOP, PokemonType.DARK, MoveCategory.PHYSICAL, 80, 100, 15, 100, 0, 7) .attr(AddBattlerTagAttr, BattlerTagType.THROAT_CHOPPED), new AttackMove(Moves.POLLEN_PUFF, PokemonType.BUG, MoveCategory.SPECIAL, 90, 100, 15, -1, 0, 7) @@ -10321,8 +10369,12 @@ export function initMoves() { .ignoresSubstitute(), new AttackMove(Moves.SMART_STRIKE, PokemonType.STEEL, MoveCategory.PHYSICAL, 70, -1, 10, -1, 0, 7), new StatusMove(Moves.PURIFY, PokemonType.POISON, -1, 20, -1, 0, 7) - .condition( - (user: Pokemon, target: Pokemon, move: Move) => isNonVolatileStatusEffect(target.status?.effect!)) // TODO: is this bang correct? + .condition((user, target, move) => { + if (!target.status) { + return false; + } + return isNonVolatileStatusEffect(target.status.effect); + }) .attr(HealAttr, 0.5) .attr(HealStatusEffectAttr, false, getNonVolatileStatusEffects()) .triageMove() @@ -11041,7 +11093,13 @@ export function initMoves() { .slicingMove(), new AttackMove(Moves.HYDRO_STEAM, PokemonType.WATER, MoveCategory.SPECIAL, 80, 100, 15, -1, 0, 9) .attr(IgnoreWeatherTypeDebuffAttr, WeatherType.SUNNY) - .attr(MovePowerMultiplierAttr, (user, target, move) => [ WeatherType.SUNNY, WeatherType.HARSH_SUN ].includes(globalScene.arena.weather?.weatherType!) && !globalScene.arena.weather?.isEffectSuppressed() ? 1.5 : 1), // TODO: is this bang correct? + .attr(MovePowerMultiplierAttr, (user, target, move) => { + const weather = globalScene.arena.weather; + if (!weather) { + return 1; + } + return [ WeatherType.SUNNY, WeatherType.HARSH_SUN ].includes(weather.weatherType) && !weather.isEffectSuppressed() ? 1.5 : 1; + }), new AttackMove(Moves.RUINATION, PokemonType.DARK, MoveCategory.SPECIAL, -1, 90, 10, -1, 0, 9) .attr(TargetHalfHpDamageAttr), new AttackMove(Moves.COLLISION_COURSE, PokemonType.FIGHTING, MoveCategory.PHYSICAL, 100, 100, 5, -1, 0, 9) @@ -11156,7 +11214,13 @@ export function initMoves() { .attr(ProtectAttr, BattlerTagType.BURNING_BULWARK) .condition(failIfLastCondition), new AttackMove(Moves.THUNDERCLAP, PokemonType.ELECTRIC, MoveCategory.SPECIAL, 70, 100, 5, -1, 1, 9) - .condition((user, target, move) => globalScene.currentBattle.turnCommands[target.getBattlerIndex()]?.command === Command.FIGHT && !target.turnData.acted && allMoves[globalScene.currentBattle.turnCommands[target.getBattlerIndex()]?.move?.move!].category !== MoveCategory.STATUS), // TODO: is this bang correct? + .condition((user, target, move) => { + const turnCommand = globalScene.currentBattle.turnCommands[target.getBattlerIndex()]; + if (!turnCommand || !turnCommand.move) { + return false; + } + return (turnCommand.command === Command.FIGHT && !target.turnData.acted && allMoves[turnCommand.move.move].category !== MoveCategory.STATUS); + }), new AttackMove(Moves.MIGHTY_CLEAVE, PokemonType.ROCK, MoveCategory.PHYSICAL, 95, 100, 5, -1, 0, 9) .slicingMove() .ignoresProtect(), diff --git a/src/data/mystery-encounters/encounters/a-trainers-test-encounter.ts b/src/data/mystery-encounters/encounters/a-trainers-test-encounter.ts index 6cea85346b3..a49157f8e88 100644 --- a/src/data/mystery-encounters/encounters/a-trainers-test-encounter.ts +++ b/src/data/mystery-encounters/encounters/a-trainers-test-encounter.ts @@ -6,7 +6,7 @@ import { setEncounterRewards, transitionMysteryEncounterIntroVisuals, } from "#app/data/mystery-encounters/utils/encounter-phase-utils"; -import { trainerConfigs } from "#app/data/trainer-config"; +import { trainerConfigs } from "#app/data/trainers/trainer-config"; import { MysteryEncounterType } from "#enums/mystery-encounter-type"; import type MysteryEncounter from "#app/data/mystery-encounters/mystery-encounter"; import { MysteryEncounterBuilder } from "#app/data/mystery-encounters/mystery-encounter"; diff --git a/src/data/mystery-encounters/encounters/absolute-avarice-encounter.ts b/src/data/mystery-encounters/encounters/absolute-avarice-encounter.ts index ca44782691d..85f40a41e51 100644 --- a/src/data/mystery-encounters/encounters/absolute-avarice-encounter.ts +++ b/src/data/mystery-encounters/encounters/absolute-avarice-encounter.ts @@ -31,7 +31,7 @@ import { catchPokemon, getHighestLevelPlayerPokemon, } from "#app/data/mystery-encounters/utils/encounter-pokemon-utils"; -import { TrainerSlot } from "#app/data/trainer-config"; +import { TrainerSlot } from "#enums/trainer-slot"; import { PokeballType } from "#enums/pokeball"; import type HeldModifierConfig from "#app/interfaces/held-modifier-config"; import type { BerryType } from "#enums/berry-type"; diff --git a/src/data/mystery-encounters/encounters/bug-type-superfan-encounter.ts b/src/data/mystery-encounters/encounters/bug-type-superfan-encounter.ts index 15cba1fa103..1e4c9a3b957 100644 --- a/src/data/mystery-encounters/encounters/bug-type-superfan-encounter.ts +++ b/src/data/mystery-encounters/encounters/bug-type-superfan-encounter.ts @@ -9,13 +9,10 @@ import { setEncounterRewards, transitionMysteryEncounterIntroVisuals, } from "#app/data/mystery-encounters/utils/encounter-phase-utils"; -import { - getRandomPartyMemberFunc, - trainerConfigs, - TrainerPartyCompoundTemplate, - TrainerPartyTemplate, - TrainerSlot, -} from "#app/data/trainer-config"; +import { getRandomPartyMemberFunc, trainerConfigs } from "#app/data/trainers/trainer-config"; +import { TrainerPartyCompoundTemplate } from "#app/data/trainers/TrainerPartyTemplate"; +import { TrainerPartyTemplate } from "#app/data/trainers/TrainerPartyTemplate"; +import { TrainerSlot } from "#enums/trainer-slot"; import { MysteryEncounterType } from "#enums/mystery-encounter-type"; import { PartyMemberStrength } from "#enums/party-member-strength"; import { globalScene } from "#app/global-scene"; diff --git a/src/data/mystery-encounters/encounters/clowning-around-encounter.ts b/src/data/mystery-encounters/encounters/clowning-around-encounter.ts index 2b499d938cd..eca99fc0c13 100644 --- a/src/data/mystery-encounters/encounters/clowning-around-encounter.ts +++ b/src/data/mystery-encounters/encounters/clowning-around-encounter.ts @@ -8,7 +8,9 @@ import { setEncounterRewards, transitionMysteryEncounterIntroVisuals, } from "#app/data/mystery-encounters/utils/encounter-phase-utils"; -import { trainerConfigs, TrainerPartyCompoundTemplate, TrainerPartyTemplate } from "#app/data/trainer-config"; +import { trainerConfigs } from "#app/data/trainers/trainer-config"; +import { TrainerPartyCompoundTemplate } from "#app/data/trainers/TrainerPartyTemplate"; +import { TrainerPartyTemplate } from "#app/data/trainers/TrainerPartyTemplate"; import { ModifierTier } from "#app/modifier/modifier-tier"; import type { PokemonHeldItemModifierType } from "#app/modifier/modifier-type"; import { ModifierPoolType, modifierTypes } from "#app/modifier/modifier-type"; diff --git a/src/data/mystery-encounters/encounters/dancing-lessons-encounter.ts b/src/data/mystery-encounters/encounters/dancing-lessons-encounter.ts index 91f168371cf..75527e1f8c1 100644 --- a/src/data/mystery-encounters/encounters/dancing-lessons-encounter.ts +++ b/src/data/mystery-encounters/encounters/dancing-lessons-encounter.ts @@ -20,7 +20,7 @@ import { STANDARD_ENCOUNTER_BOOSTED_LEVEL_MODIFIER, } from "#app/data/mystery-encounters/utils/encounter-pokemon-utils"; import { getPokemonSpecies } from "#app/data/pokemon-species"; -import { TrainerSlot } from "#app/data/trainer-config"; +import { TrainerSlot } from "#enums/trainer-slot"; import type { PlayerPokemon } from "#app/field/pokemon"; import type Pokemon from "#app/field/pokemon"; import { EnemyPokemon, PokemonMove } from "#app/field/pokemon"; diff --git a/src/data/mystery-encounters/encounters/delibirdy-encounter.ts b/src/data/mystery-encounters/encounters/delibirdy-encounter.ts index c1486ff100b..364484cb511 100644 --- a/src/data/mystery-encounters/encounters/delibirdy-encounter.ts +++ b/src/data/mystery-encounters/encounters/delibirdy-encounter.ts @@ -37,6 +37,7 @@ import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; import { MysteryEncounterType } from "#enums/mystery-encounter-type"; import { Species } from "#enums/species"; +import { timedEventManager } from "#app/global-event-manager"; /** the i18n namespace for this encounter */ const namespace = "mysteryEncounters/delibirdy"; @@ -56,7 +57,7 @@ const OPTION_3_DISALLOWED_MODIFIERS = [ const DELIBIRDY_MONEY_PRICE_MULTIPLIER = 2; const doEventReward = () => { - const event_buff = globalScene.eventManager.getDelibirdyBuff(); + const event_buff = timedEventManager.getDelibirdyBuff(); if (event_buff.length > 0) { const candidates = event_buff.filter(c => { const mtype = generateModifierType(modifierTypes[c]); diff --git a/src/data/mystery-encounters/encounters/fiery-fallout-encounter.ts b/src/data/mystery-encounters/encounters/fiery-fallout-encounter.ts index d9bd6983d97..6118fe3d0de 100644 --- a/src/data/mystery-encounters/encounters/fiery-fallout-encounter.ts +++ b/src/data/mystery-encounters/encounters/fiery-fallout-encounter.ts @@ -140,7 +140,8 @@ export const FieryFalloutEncounter: MysteryEncounter = MysteryEncounterBuilder.w // Load animations/sfx for Volcarona moves loadCustomMovesForEncounter([Moves.FIRE_SPIN, Moves.QUIVER_DANCE]); - globalScene.arena.trySetWeather(WeatherType.SUNNY, true); + const pokemon = globalScene.getEnemyPokemon(); + globalScene.arena.trySetWeather(WeatherType.SUNNY, pokemon); encounter.setDialogueToken("volcaronaName", getPokemonSpecies(Species.VOLCARONA).getName()); diff --git a/src/data/mystery-encounters/encounters/fun-and-games-encounter.ts b/src/data/mystery-encounters/encounters/fun-and-games-encounter.ts index c95810b94d0..282c6c149ff 100644 --- a/src/data/mystery-encounters/encounters/fun-and-games-encounter.ts +++ b/src/data/mystery-encounters/encounters/fun-and-games-encounter.ts @@ -10,7 +10,7 @@ import { globalScene } from "#app/global-scene"; import type MysteryEncounter from "#app/data/mystery-encounters/mystery-encounter"; import { MysteryEncounterBuilder } from "#app/data/mystery-encounters/mystery-encounter"; import { MysteryEncounterOptionBuilder } from "#app/data/mystery-encounters/mystery-encounter-option"; -import { TrainerSlot } from "#app/data/trainer-config"; +import { TrainerSlot } from "#enums/trainer-slot"; import type { PlayerPokemon } from "#app/field/pokemon"; import type Pokemon from "#app/field/pokemon"; import { FieldPosition } from "#app/field/pokemon"; diff --git a/src/data/mystery-encounters/encounters/global-trade-system-encounter.ts b/src/data/mystery-encounters/encounters/global-trade-system-encounter.ts index a81392941ba..f80620647b0 100644 --- a/src/data/mystery-encounters/encounters/global-trade-system-encounter.ts +++ b/src/data/mystery-encounters/encounters/global-trade-system-encounter.ts @@ -3,7 +3,7 @@ import { selectPokemonForOption, setEncounterRewards, } from "#app/data/mystery-encounters/utils/encounter-phase-utils"; -import { TrainerSlot } from "#app/data/trainer-config"; +import { TrainerSlot } from "#enums/trainer-slot"; import { ModifierTier } from "#app/modifier/modifier-tier"; import { MusicPreference } from "#app/system/settings/settings"; import type { ModifierTypeOption } from "#app/modifier/modifier-type"; @@ -23,7 +23,7 @@ import { allSpecies, getPokemonSpecies } from "#app/data/pokemon-species"; import { getTypeRgb } from "#app/data/type"; import { MysteryEncounterOptionBuilder } from "#app/data/mystery-encounters/mystery-encounter-option"; import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode"; -import { NumberHolder, isNullOrUndefined, randInt, randSeedInt, randSeedShuffle } from "#app/utils"; +import { NumberHolder, isNullOrUndefined, randInt, randSeedInt, randSeedShuffle, randSeedItem } from "#app/utils"; import type { PlayerPokemon } from "#app/field/pokemon"; import type Pokemon from "#app/field/pokemon"; import { EnemyPokemon, PokemonMove } from "#app/field/pokemon"; @@ -41,11 +41,12 @@ import { Gender, getGenderSymbol } from "#app/data/gender"; import { getNatureName } from "#app/data/nature"; import { getPokeballAtlasKey, getPokeballTintColor } from "#app/data/pokeball"; import { getEncounterText, showEncounterText } from "#app/data/mystery-encounters/utils/encounter-dialogue-utils"; -import { trainerNamePools } from "#app/data/trainer-names"; import { CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES } from "#app/game-mode"; import { addPokemonDataToDexAndValidateAchievements } from "#app/data/mystery-encounters/utils/encounter-pokemon-utils"; import type { PokeballType } from "#enums/pokeball"; import { doShinySparkleAnim } from "#app/field/anims"; +import { TrainerType } from "#enums/trainer-type"; +import { timedEventManager } from "#app/global-event-manager"; /** the i18n namespace for the encounter */ const namespace = "mysteryEncounters/globalTradeSystem"; @@ -273,8 +274,8 @@ export const GlobalTradeSystemEncounter: MysteryEncounter = MysteryEncounterBuil // Extra shiny roll at 1/128 odds (boosted by events and charms) if (!tradePokemon.shiny) { const shinyThreshold = new NumberHolder(WONDER_TRADE_SHINY_CHANCE); - if (globalScene.eventManager.isEventActive()) { - shinyThreshold.value *= globalScene.eventManager.getShinyMultiplier(); + if (timedEventManager.isEventActive()) { + shinyThreshold.value *= timedEventManager.getShinyMultiplier(); } globalScene.applyModifiers(ShinyRateBoosterModifier, true, shinyThreshold); @@ -306,7 +307,7 @@ export const GlobalTradeSystemEncounter: MysteryEncounter = MysteryEncounterBuil if (eggMoves) { // Cannot gen the rare egg move, only 1 of the first 3 common moves const eggMove = eggMoves[randSeedInt(3)]; - if (!tradePokemon.moveset.some(m => m?.moveId === eggMove)) { + if (!tradePokemon.moveset.some(m => m.moveId === eggMove)) { if (tradePokemon.moveset.length < 4) { tradePokemon.moveset.push(new PokemonMove(eggMove)); } else { @@ -982,15 +983,13 @@ function doTradeReceivedSequence( } function generateRandomTraderName() { - const length = Object.keys(trainerNamePools).length; + const length = TrainerType.YOUNGSTER - TrainerType.ACE_TRAINER + 1; // +1 avoids TrainerType.UNKNOWN - let trainerTypePool = trainerNamePools[randInt(length) + 1]; - while (!trainerTypePool) { - trainerTypePool = trainerNamePools[randInt(length) + 1]; - } + const classKey = `trainersCommon:${TrainerType[randInt(length) + 1]}`; // Some trainers have 2 gendered pools, some do not - const genderedPool = trainerTypePool[randInt(trainerTypePool.length)]; - const trainerNameString = Array.isArray(genderedPool) ? genderedPool[randInt(genderedPool.length)] : genderedPool; + const genderKey = i18next.exists(`${classKey}.MALE`) ? (randInt(2) === 0 ? ".MALE" : ".FEMALE") : ""; + const trainerNameKey = randSeedItem(Object.keys(i18next.t(`${classKey}${genderKey}`, { returnObjects: true }))); + const trainerNameString = i18next.t(`${classKey}${genderKey}.${trainerNameKey}`); // Some names have an '&' symbol and need to be trimmed to a single name instead of a double name const trainerNames = trainerNameString.split(" & "); return trainerNames[randInt(trainerNames.length)]; diff --git a/src/data/mystery-encounters/encounters/mysterious-challengers-encounter.ts b/src/data/mystery-encounters/encounters/mysterious-challengers-encounter.ts index bf60e982b15..5f88ca083c0 100644 --- a/src/data/mystery-encounters/encounters/mysterious-challengers-encounter.ts +++ b/src/data/mystery-encounters/encounters/mysterious-challengers-encounter.ts @@ -3,18 +3,16 @@ import { initBattleWithEnemyConfig, setEncounterRewards, } from "#app/data/mystery-encounters/utils/encounter-phase-utils"; -import { - trainerConfigs, - TrainerPartyCompoundTemplate, - TrainerPartyTemplate, - trainerPartyTemplates, -} from "#app/data/trainer-config"; +import { trainerConfigs } from "#app/data/trainers/trainer-config"; +import { trainerPartyTemplates } from "#app/data/trainers/TrainerPartyTemplate"; +import { TrainerPartyCompoundTemplate } from "#app/data/trainers/TrainerPartyTemplate"; +import { TrainerPartyTemplate } from "#app/data/trainers/TrainerPartyTemplate"; import { ModifierTier } from "#app/modifier/modifier-tier"; import { modifierTypes } from "#app/modifier/modifier-type"; import { MysteryEncounterType } from "#enums/mystery-encounter-type"; import { PartyMemberStrength } from "#enums/party-member-strength"; import { globalScene } from "#app/global-scene"; -import * as Utils from "#app/utils"; +import { randSeedInt } from "#app/utils"; import type MysteryEncounter from "#app/data/mystery-encounters/mystery-encounter"; import { MysteryEncounterBuilder } from "#app/data/mystery-encounters/mystery-encounter"; import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; @@ -48,7 +46,7 @@ export const MysteriousChallengersEncounter: MysteryEncounter = MysteryEncounter const normalConfig = trainerConfigs[normalTrainerType].clone(); let female = false; if (normalConfig.hasGenders) { - female = !!Utils.randSeedInt(2); + female = !!randSeedInt(2); } const normalSpriteKey = normalConfig.getSpriteKey(female, normalConfig.doubleOnly); encounter.enemyPartyConfigs.push({ @@ -78,7 +76,7 @@ export const MysteriousChallengersEncounter: MysteryEncounter = MysteryEncounter hardConfig.setPartyTemplates(hardTemplate); female = false; if (hardConfig.hasGenders) { - female = !!Utils.randSeedInt(2); + female = !!randSeedInt(2); } const hardSpriteKey = hardConfig.getSpriteKey(female, hardConfig.doubleOnly); encounter.enemyPartyConfigs.push({ @@ -98,7 +96,7 @@ export const MysteriousChallengersEncounter: MysteryEncounter = MysteryEncounter brutalConfig.partyTemplateFunc = null; // Overrides gym leader party template func female = false; if (brutalConfig.hasGenders) { - female = !!Utils.randSeedInt(2); + female = !!randSeedInt(2); } const brutalSpriteKey = brutalConfig.getSpriteKey(female, brutalConfig.doubleOnly); encounter.enemyPartyConfigs.push({ diff --git a/src/data/mystery-encounters/encounters/safari-zone-encounter.ts b/src/data/mystery-encounters/encounters/safari-zone-encounter.ts index f231e4abdb8..8c45fde3079 100644 --- a/src/data/mystery-encounters/encounters/safari-zone-encounter.ts +++ b/src/data/mystery-encounters/encounters/safari-zone-encounter.ts @@ -10,7 +10,7 @@ import type MysteryEncounter from "#app/data/mystery-encounters/mystery-encounte import { MysteryEncounterBuilder } from "#app/data/mystery-encounters/mystery-encounter"; import type MysteryEncounterOption from "#app/data/mystery-encounters/mystery-encounter-option"; import { MysteryEncounterOptionBuilder } from "#app/data/mystery-encounters/mystery-encounter-option"; -import { TrainerSlot } from "#app/data/trainer-config"; +import { TrainerSlot } from "#enums/trainer-slot"; import { HiddenAbilityRateBoosterModifier, IvScannerModifier } from "#app/modifier/modifier"; import type { EnemyPokemon } from "#app/field/pokemon"; import { PokeballType } from "#enums/pokeball"; diff --git a/src/data/mystery-encounters/encounters/teleporting-hijinks-encounter.ts b/src/data/mystery-encounters/encounters/teleporting-hijinks-encounter.ts index c7220192caa..806a89a7131 100644 --- a/src/data/mystery-encounters/encounters/teleporting-hijinks-encounter.ts +++ b/src/data/mystery-encounters/encounters/teleporting-hijinks-encounter.ts @@ -24,7 +24,7 @@ import { Biome } from "#enums/biome"; import { getBiomeKey } from "#app/field/arena"; import { PokemonType } from "#enums/pokemon-type"; import { getPartyLuckValue, modifierTypes } from "#app/modifier/modifier-type"; -import { TrainerSlot } from "#app/data/trainer-config"; +import { TrainerSlot } from "#enums/trainer-slot"; import { BattlerTagType } from "#enums/battler-tag-type"; import { getPokemonNameWithAffix } from "#app/messages"; import { StatStageChangePhase } from "#app/phases/stat-stage-change-phase"; diff --git a/src/data/mystery-encounters/encounters/the-expert-pokemon-breeder-encounter.ts b/src/data/mystery-encounters/encounters/the-expert-pokemon-breeder-encounter.ts index 2b29046f738..c189e341089 100644 --- a/src/data/mystery-encounters/encounters/the-expert-pokemon-breeder-encounter.ts +++ b/src/data/mystery-encounters/encounters/the-expert-pokemon-breeder-encounter.ts @@ -4,7 +4,7 @@ import { initBattleWithEnemyConfig, setEncounterRewards, } from "#app/data/mystery-encounters/utils/encounter-phase-utils"; -import { trainerConfigs } from "#app/data/trainer-config"; +import { trainerConfigs } from "#app/data/trainers/trainer-config"; import { MysteryEncounterType } from "#enums/mystery-encounter-type"; import { globalScene } from "#app/global-scene"; import { randSeedShuffle } from "#app/utils"; @@ -30,7 +30,6 @@ import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode import { modifierTypes } from "#app/modifier/modifier-type"; import { PokemonType } from "#enums/pokemon-type"; import { getPokeballTintColor } from "#app/data/pokeball"; -import type { PokemonHeldItemModifier } from "#app/modifier/modifier"; /** the i18n namespace for the encounter */ const namespace = "mysteryEncounters/theExpertPokemonBreeder"; diff --git a/src/data/mystery-encounters/encounters/the-strong-stuff-encounter.ts b/src/data/mystery-encounters/encounters/the-strong-stuff-encounter.ts index e54df048430..c994c6e993f 100644 --- a/src/data/mystery-encounters/encounters/the-strong-stuff-encounter.ts +++ b/src/data/mystery-encounters/encounters/the-strong-stuff-encounter.ts @@ -93,7 +93,7 @@ export const TheStrongStuffEncounter: MysteryEncounter = MysteryEncounterBuilder bossSegments: 5, shiny: false, // Shiny lock because shiny is rolled only if the battle option is picked customPokemonData: new CustomPokemonData({ spriteScale: 1.25 }), - nature: Nature.BOLD, + nature: Nature.HARDY, moveSet: [Moves.INFESTATION, Moves.SALT_CURE, Moves.GASTRO_ACID, Moves.HEAL_ORDER], modifierConfigs: [ { @@ -117,7 +117,7 @@ export const TheStrongStuffEncounter: MysteryEncounter = MysteryEncounterBuilder mysteryEncounterBattleEffects: (pokemon: Pokemon) => { queueEncounterMessage(`${namespace}:option.2.stat_boost`); globalScene.unshiftPhase( - new StatStageChangePhase(pokemon.getBattlerIndex(), true, [Stat.DEF, Stat.SPDEF], 2), + new StatStageChangePhase(pokemon.getBattlerIndex(), true, [Stat.DEF, Stat.SPDEF], 1), ); }, }, diff --git a/src/data/mystery-encounters/encounters/trash-to-treasure-encounter.ts b/src/data/mystery-encounters/encounters/trash-to-treasure-encounter.ts index 1c617aa2c7f..e60fe0ddc18 100644 --- a/src/data/mystery-encounters/encounters/trash-to-treasure-encounter.ts +++ b/src/data/mystery-encounters/encounters/trash-to-treasure-encounter.ts @@ -27,6 +27,7 @@ import { Moves } from "#enums/moves"; import { BattlerIndex } from "#app/battle"; import { PokemonMove } from "#app/field/pokemon"; import { CLASSIC_MODE_MYSTERY_ENCOUNTER_WAVES } from "#app/game-mode"; +import { randSeedInt } from "#app/utils"; /** the i18n namespace for this encounter */ const namespace = "mysteryEncounters/trashToTreasure"; @@ -80,7 +81,43 @@ export const TrashToTreasureEncounter: MysteryEncounter = MysteryEncounterBuilde shiny: false, // Shiny lock because of custom intro sprite formIndex: 1, // Gmax bossSegmentModifier: 1, // +1 Segment from normal - moveSet: [Moves.PAYBACK, Moves.GUNK_SHOT, Moves.STOMPING_TANTRUM, Moves.DRAIN_PUNCH], + moveSet: [Moves.GUNK_SHOT, Moves.STOMPING_TANTRUM, Moves.HAMMER_ARM, Moves.PAYBACK], + modifierConfigs: [ + { + modifier: generateModifierType(modifierTypes.BERRY) as PokemonHeldItemModifierType, + }, + { + modifier: generateModifierType(modifierTypes.BERRY) as PokemonHeldItemModifierType, + }, + { + modifier: generateModifierType(modifierTypes.BERRY) as PokemonHeldItemModifierType, + }, + { + modifier: generateModifierType(modifierTypes.BERRY) as PokemonHeldItemModifierType, + }, + { + modifier: generateModifierType(modifierTypes.BASE_STAT_BOOSTER) as PokemonHeldItemModifierType, + }, + { + modifier: generateModifierType(modifierTypes.BASE_STAT_BOOSTER) as PokemonHeldItemModifierType, + }, + { + modifier: generateModifierType(modifierTypes.TOXIC_ORB) as PokemonHeldItemModifierType, + stackCount: randSeedInt(2, 0), + }, + { + modifier: generateModifierType(modifierTypes.SOOTHE_BELL) as PokemonHeldItemModifierType, + stackCount: randSeedInt(2, 1), + }, + { + modifier: generateModifierType(modifierTypes.LUCKY_EGG) as PokemonHeldItemModifierType, + stackCount: randSeedInt(3, 1), + }, + { + modifier: generateModifierType(modifierTypes.GOLDEN_EGG) as PokemonHeldItemModifierType, + stackCount: randSeedInt(2, 0), + }, + ], }; const config: EnemyPartyConfig = { levelAdditiveModifier: 0.5, @@ -90,7 +127,7 @@ export const TrashToTreasureEncounter: MysteryEncounter = MysteryEncounterBuilde encounter.enemyPartyConfigs = [config]; // Load animations/sfx for Garbodor fight start moves - loadCustomMovesForEncounter([Moves.TOXIC, Moves.AMNESIA]); + loadCustomMovesForEncounter([Moves.TOXIC, Moves.STOCKPILE]); globalScene.loadSe("PRSFX- Dig2", "battle_anims", "PRSFX- Dig2.wav"); globalScene.loadSe("PRSFX- Venom Drench", "battle_anims", "PRSFX- Venom Drench.wav"); @@ -115,7 +152,7 @@ export const TrashToTreasureEncounter: MysteryEncounter = MysteryEncounterBuilde doGarbageDig(); }) .withOptionPhase(async () => { - // Gain 2 Leftovers and 2 Shell Bell + // Gain 2 Leftovers and 1 Shell Bell await transitionMysteryEncounterIntroVisuals(); await tryApplyDigRewardItems(); @@ -175,7 +212,7 @@ export const TrashToTreasureEncounter: MysteryEncounter = MysteryEncounterBuilde { sourceBattlerIndex: BattlerIndex.ENEMY, targets: [BattlerIndex.ENEMY], - move: new PokemonMove(Moves.AMNESIA), + move: new PokemonMove(Moves.STOCKPILE), ignorePp: true, }, ); @@ -231,21 +268,7 @@ async function tryApplyDigRewardItems() { true, ); - // First Shell bell - for (const pokemon of party) { - const heldItems = globalScene.findModifiers( - m => m instanceof PokemonHeldItemModifier && m.pokemonId === pokemon.id, - true, - ) as PokemonHeldItemModifier[]; - const existingShellBell = heldItems.find(m => m instanceof HitHealModifier) as HitHealModifier; - - if (!existingShellBell || existingShellBell.getStackCount() < existingShellBell.getMaxStackCount()) { - await applyModifierTypeToPlayerPokemon(pokemon, shellBell); - break; - } - } - - // Second Shell bell + // Only Shell bell for (const pokemon of party) { const heldItems = globalScene.findModifiers( m => m instanceof PokemonHeldItemModifier && m.pokemonId === pokemon.id, @@ -263,7 +286,7 @@ async function tryApplyDigRewardItems() { await showEncounterText( i18next.t("battle:rewardGainCount", { modifierName: shellBell.name, - count: 2, + count: 1, }), null, undefined, diff --git a/src/data/mystery-encounters/encounters/weird-dream-encounter.ts b/src/data/mystery-encounters/encounters/weird-dream-encounter.ts index 758e3fabd76..22ec52e976c 100644 --- a/src/data/mystery-encounters/encounters/weird-dream-encounter.ts +++ b/src/data/mystery-encounters/encounters/weird-dream-encounter.ts @@ -41,7 +41,8 @@ import { TrainerType } from "#enums/trainer-type"; import PokemonData from "#app/system/pokemon-data"; import { Nature } from "#enums/nature"; import type HeldModifierConfig from "#app/interfaces/held-modifier-config"; -import { trainerConfigs, TrainerPartyTemplate } from "#app/data/trainer-config"; +import { trainerConfigs } from "#app/data/trainers/trainer-config"; +import { TrainerPartyTemplate } from "#app/data/trainers/TrainerPartyTemplate"; import { PartyMemberStrength } from "#enums/party-member-strength"; /** i18n namespace for encounter */ @@ -781,7 +782,7 @@ async function addEggMoveToNewPokemonMoveset( let randomEggMoveIndex = eggMoveIndices.pop(); let randomEggMove = !isNullOrUndefined(randomEggMoveIndex) ? eggMoves[randomEggMoveIndex] : null; let retries = 0; - while (retries < 3 && (!randomEggMove || newPokemon.moveset.some(m => m?.moveId === randomEggMove))) { + while (retries < 3 && (!randomEggMove || newPokemon.moveset.some(m => m.moveId === randomEggMove))) { // If Pokemon already knows this move, roll for another egg move randomEggMoveIndex = eggMoveIndices.pop(); randomEggMove = !isNullOrUndefined(randomEggMoveIndex) ? eggMoves[randomEggMoveIndex] : null; @@ -789,7 +790,7 @@ async function addEggMoveToNewPokemonMoveset( } if (randomEggMove) { - if (!newPokemon.moveset.some(m => m?.moveId === randomEggMove)) { + if (!newPokemon.moveset.some(m => m.moveId === randomEggMove)) { if (newPokemon.moveset.length < 4) { newPokemon.moveset.push(new PokemonMove(randomEggMove)); } else { @@ -820,16 +821,13 @@ async function addEggMoveToNewPokemonMoveset( */ function addFavoredMoveToNewPokemonMoveset( newPokemon: PlayerPokemon, - newPokemonGeneratedMoveset: (PokemonMove | null)[], + newPokemonGeneratedMoveset: PokemonMove[], newEggMoveIndex: number | null, ) { let favoredMove: PokemonMove | null = null; for (const move of newPokemonGeneratedMoveset) { // Needs to match first type, second type will be replaced - if ( - move?.getMove().type === newPokemon.getTypes()[0] && - !newPokemon.moveset.some(m => m?.moveId === move?.moveId) - ) { + if (move?.getMove().type === newPokemon.getTypes()[0] && !newPokemon.moveset.some(m => m.moveId === move.moveId)) { favoredMove = move; break; } @@ -839,7 +837,7 @@ function addFavoredMoveToNewPokemonMoveset( if (!favoredMove) { for (const move of newPokemonGeneratedMoveset) { // Needs to match first type, second type will be replaced - if (!newPokemon.moveset.some(m => m?.moveId === move?.moveId)) { + if (!newPokemon.moveset.some(m => m.moveId === move.moveId)) { favoredMove = move; break; } diff --git a/src/data/mystery-encounters/mystery-encounter-requirements.ts b/src/data/mystery-encounters/mystery-encounter-requirements.ts index e9398547740..f9aedf2c1a7 100644 --- a/src/data/mystery-encounters/mystery-encounter-requirements.ts +++ b/src/data/mystery-encounters/mystery-encounter-requirements.ts @@ -576,19 +576,19 @@ export class MoveRequirement extends EncounterPokemonRequirement { return partyPokemon.filter( pokemon => (!this.excludeDisallowedPokemon || pokemon.isAllowedInBattle()) && - pokemon.moveset.some(move => move?.moveId && this.requiredMoves.includes(move.moveId)), + pokemon.moveset.some(move => move.moveId && this.requiredMoves.includes(move.moveId)), ); } // for an inverted query, we only want to get the pokemon that don't have ANY of the listed moves return partyPokemon.filter( pokemon => (!this.excludeDisallowedPokemon || pokemon.isAllowedInBattle()) && - !pokemon.moveset.some(move => move?.moveId && this.requiredMoves.includes(move.moveId)), + !pokemon.moveset.some(move => move.moveId && this.requiredMoves.includes(move.moveId)), ); } override getDialogueToken(pokemon?: PlayerPokemon): [string, string] { - const includedMoves = pokemon?.moveset.filter(move => move?.moveId && this.requiredMoves.includes(move.moveId)); + const includedMoves = pokemon?.moveset.filter(move => move.moveId && this.requiredMoves.includes(move.moveId)); if (includedMoves && includedMoves.length > 0 && includedMoves[0]) { return ["move", includedMoves[0].getName()]; } @@ -626,7 +626,7 @@ export class CompatibleMoveRequirement extends EncounterPokemonRequirement { return partyPokemon.filter( pokemon => this.requiredMoves.filter(learnableMove => - pokemon.compatibleTms.filter(tm => !pokemon.moveset.find(m => m?.moveId === tm)).includes(learnableMove), + pokemon.compatibleTms.filter(tm => !pokemon.moveset.find(m => m.moveId === tm)).includes(learnableMove), ).length > 0, ); } @@ -634,14 +634,14 @@ export class CompatibleMoveRequirement extends EncounterPokemonRequirement { return partyPokemon.filter( pokemon => this.requiredMoves.filter(learnableMove => - pokemon.compatibleTms.filter(tm => !pokemon.moveset.find(m => m?.moveId === tm)).includes(learnableMove), + pokemon.compatibleTms.filter(tm => !pokemon.moveset.find(m => m.moveId === tm)).includes(learnableMove), ).length === 0, ); } override getDialogueToken(pokemon?: PlayerPokemon): [string, string] { const includedCompatMoves = this.requiredMoves.filter(reqMove => - pokemon?.compatibleTms.filter(tm => !pokemon.moveset.find(m => m?.moveId === tm)).includes(reqMove), + pokemon?.compatibleTms.filter(tm => !pokemon.moveset.find(m => m.moveId === tm)).includes(reqMove), ); if (includedCompatMoves.length > 0) { return ["compatibleMove", Moves[includedCompatMoves[0]]]; diff --git a/src/data/mystery-encounters/mystery-encounter.ts b/src/data/mystery-encounters/mystery-encounter.ts index 53e976cda8a..ff098d4d7dd 100644 --- a/src/data/mystery-encounters/mystery-encounter.ts +++ b/src/data/mystery-encounters/mystery-encounter.ts @@ -5,7 +5,7 @@ import { capitalizeFirstLetter, isNullOrUndefined } from "#app/utils"; import type { MysteryEncounterType } from "#enums/mystery-encounter-type"; import type { MysteryEncounterSpriteConfig } from "#app/field/mystery-encounter-intro"; import MysteryEncounterIntroVisuals from "#app/field/mystery-encounter-intro"; -import * as Utils from "#app/utils"; +import { randSeedInt } from "#app/utils"; import type { StatusEffect } from "#enums/status-effect"; import type { OptionTextDisplay } from "./mystery-encounter-dialogue"; import type MysteryEncounterDialogue from "./mystery-encounter-dialogue"; @@ -378,13 +378,13 @@ export default class MysteryEncounter implements IMysteryEncounter { } if (truePrimaryPool.length > 0) { // Always choose from the non-overlapping pokemon first - this.primaryPokemon = truePrimaryPool[Utils.randSeedInt(truePrimaryPool.length, 0)]; + this.primaryPokemon = truePrimaryPool[randSeedInt(truePrimaryPool.length, 0)]; return true; } // If there are multiple overlapping pokemon, we're okay - just choose one and take it out of the primary pokemon pool if (overlap.length > 1 || this.secondaryPokemon.length - overlap.length >= 1) { // is this working? - this.primaryPokemon = overlap[Utils.randSeedInt(overlap.length, 0)]; + this.primaryPokemon = overlap[randSeedInt(overlap.length, 0)]; this.secondaryPokemon = this.secondaryPokemon.filter(supp => supp !== this.primaryPokemon); return true; } @@ -394,7 +394,7 @@ export default class MysteryEncounter implements IMysteryEncounter { return false; } // this means we CAN have the same pokemon be a primary and secondary pokemon, so just choose any qualifying one randomly. - this.primaryPokemon = qualified[Utils.randSeedInt(qualified.length, 0)]; + this.primaryPokemon = qualified[randSeedInt(qualified.length, 0)]; return true; } diff --git a/src/data/mystery-encounters/mystery-encounters.ts b/src/data/mystery-encounters/mystery-encounters.ts index 354f69d0ca3..5dd952b2bce 100644 --- a/src/data/mystery-encounters/mystery-encounters.ts +++ b/src/data/mystery-encounters/mystery-encounters.ts @@ -332,7 +332,6 @@ export function initMysteryEncounters() { }); // Add ANY biome encounters to biome map - // eslint-disable-next-line let _encounterBiomeTableLog = ""; mysteryEncountersByBiome.forEach((biomeEncounters, biome) => { anyBiomeEncounters.forEach(encounter => { diff --git a/src/data/mystery-encounters/utils/encounter-phase-utils.ts b/src/data/mystery-encounters/utils/encounter-phase-utils.ts index d37ac340a7c..a9f6b787878 100644 --- a/src/data/mystery-encounters/utils/encounter-phase-utils.ts +++ b/src/data/mystery-encounters/utils/encounter-phase-utils.ts @@ -30,8 +30,7 @@ import type { OptionSelectConfig, OptionSelectItem } from "#app/ui/abstact-optio import type { PartyOption, PokemonSelectFilter } from "#app/ui/party-ui-handler"; import { PartyUiMode } from "#app/ui/party-ui-handler"; import { Mode } from "#app/ui/ui"; -import * as Utils from "#app/utils"; -import { isNullOrUndefined, randSeedInt, randSeedItem } from "#app/utils"; +import { isNullOrUndefined, randSeedInt, randomString, randSeedItem } from "#app/utils"; import type { BattlerTagType } from "#enums/battler-tag-type"; import { Biome } from "#enums/biome"; import type { TrainerType } from "#enums/trainer-type"; @@ -43,8 +42,9 @@ import type { Moves } from "#enums/moves"; import { initMoveAnim, loadMoveAnimAssets } from "#app/data/battle-anims"; import { MysteryEncounterMode } from "#enums/mystery-encounter-mode"; import { Status } from "#app/data/status-effect"; -import type { TrainerConfig } from "#app/data/trainer-config"; -import { trainerConfigs, TrainerSlot } from "#app/data/trainer-config"; +import type { TrainerConfig } from "#app/data/trainers/trainer-config"; +import { trainerConfigs } from "#app/data/trainers/trainer-config"; +import { TrainerSlot } from "#enums/trainer-slot"; import type PokemonSpecies from "#app/data/pokemon-species"; import type { IEggOptions } from "#app/data/egg"; import { Egg } from "#app/data/egg"; @@ -57,13 +57,14 @@ import { BattleEndPhase } from "#app/phases/battle-end-phase"; import { GameOverPhase } from "#app/phases/game-over-phase"; import { SelectModifierPhase } from "#app/phases/select-modifier-phase"; import { PartyExpPhase } from "#app/phases/party-exp-phase"; -import type { Variant } from "#app/data/variant"; +import type { Variant } from "#app/sprites/variant"; import { StatusEffect } from "#enums/status-effect"; import { globalScene } from "#app/global-scene"; import { getPokemonSpecies } from "#app/data/pokemon-species"; import { PokemonType } from "#enums/pokemon-type"; import { getNatureName } from "#app/data/nature"; import { getPokemonNameWithAffix } from "#app/messages"; +import { timedEventManager } from "#app/global-event-manager"; /** * Animates exclamation sprite over trainer's head at start of encounter @@ -166,7 +167,7 @@ export async function initBattleWithEnemyConfig(partyConfig: EnemyPartyConfig): const doubleTrainer = trainerConfig.doubleOnly || (trainerConfig.hasDouble && !!partyConfig.doubleBattle); doubleBattle = doubleTrainer; - const trainerFemale = isNullOrUndefined(partyConfig.female) ? !!Utils.randSeedInt(2) : partyConfig.female; + const trainerFemale = isNullOrUndefined(partyConfig.female) ? !!randSeedInt(2) : partyConfig.female; const newTrainer = new Trainer( trainerConfig.trainerType, doubleTrainer ? TrainerVariant.DOUBLE : trainerFemale ? TrainerVariant.FEMALE : TrainerVariant.DEFAULT, @@ -284,7 +285,7 @@ export async function initBattleWithEnemyConfig(partyConfig: EnemyPartyConfig): // Generate new id, reset status and HP in case using data source if (config.dataSource) { - enemyPokemon.id = Utils.randSeedInt(4294967296); + enemyPokemon.id = randSeedInt(4294967296); } // Set form @@ -1045,7 +1046,7 @@ export function handleMysteryEncounterTurnStartEffects(): boolean { export function getRandomEncounterSpecies(level: number, isBoss = false, rerollHidden = false): EnemyPokemon { let bossSpecies: PokemonSpecies; let isEventEncounter = false; - const eventEncounters = globalScene.eventManager.getEventEncounters(); + const eventEncounters = timedEventManager.getEventEncounters(); let formIndex: number | undefined; if (eventEncounters.length > 0 && randSeedInt(2) === 1) { @@ -1113,7 +1114,7 @@ export function calculateMEAggregateStats(baseSpawnWeight: number) { const validMEfloorsByBiome = new Map(biomes.map(b => [b, 0])); let currentBiome = Biome.TOWN; let currentArena = globalScene.newArena(currentBiome); - globalScene.setSeed(Utils.randomString(24)); + globalScene.setSeed(randomString(24)); globalScene.resetSeed(); for (let i = 10; i < 180; i++) { // Boss @@ -1128,16 +1129,16 @@ export function calculateMEAggregateStats(baseSpawnWeight: number) { globalScene.executeWithSeedOffset(() => { biomes = (biomeLinks[currentBiome] as (Biome | [Biome, number])[]) .filter(b => { - return !Array.isArray(b) || !Utils.randSeedInt(b[1]); + return !Array.isArray(b) || !randSeedInt(b[1]); }) .map(b => (!Array.isArray(b) ? b : b[0])); }, i * 100); if (biomes! && biomes.length > 0) { const specialBiomes = biomes.filter(b => alwaysPickTheseBiomes.includes(b)); if (specialBiomes.length > 0) { - currentBiome = specialBiomes[Utils.randSeedInt(specialBiomes.length)]; + currentBiome = specialBiomes[randSeedInt(specialBiomes.length)]; } else { - currentBiome = biomes[Utils.randSeedInt(biomes.length)]; + currentBiome = biomes[randSeedInt(biomes.length)]; } } } else if (biomeLinks.hasOwnProperty(currentBiome)) { @@ -1165,7 +1166,7 @@ export function calculateMEAggregateStats(baseSpawnWeight: number) { // Otherwise, roll encounter - const roll = Utils.randSeedInt(256); + const roll = randSeedInt(256); validMEfloorsByBiome.set(Biome[currentBiome], (validMEfloorsByBiome.get(Biome[currentBiome]) ?? 0) + 1); // If total number of encounters is lower than expected for the run, slightly favor a new encounter @@ -1190,7 +1191,7 @@ export function calculateMEAggregateStats(baseSpawnWeight: number) { tierWeights[1] = tierWeights[1] - 4 * numEncounters[1]; const totalWeight = tierWeights.reduce((a, b) => a + b); - const tierValue = Utils.randSeedInt(totalWeight); + const tierValue = randSeedInt(totalWeight); const commonThreshold = totalWeight - tierWeights[0]; // 64 - 32 = 32 const uncommonThreshold = totalWeight - tierWeights[0] - tierWeights[1]; // 64 - 32 - 16 = 16 const rareThreshold = totalWeight - tierWeights[0] - tierWeights[1] - tierWeights[2]; // 64 - 32 - 16 - 10 = 6 @@ -1279,7 +1280,7 @@ export function calculateRareSpawnAggregateStats(luckValue: number) { const calculateNumRareEncounters = (): any[] => { const bossEncountersByRarity = [0, 0, 0, 0]; - globalScene.setSeed(Utils.randomString(24)); + globalScene.setSeed(randomString(24)); globalScene.resetSeed(); // There are 12 wild boss floors for (let i = 0; i < 12; i++) { @@ -1289,7 +1290,7 @@ export function calculateRareSpawnAggregateStats(luckValue: number) { if (!Number.isNaN(luckValue)) { luckModifier = luckValue * 0.5; } - const tierValue = Utils.randSeedInt(64 - luckModifier); + const tierValue = randSeedInt(64 - luckModifier); const tier = tierValue >= 20 ? BiomePoolTier.BOSS diff --git a/src/data/mystery-encounters/utils/encounter-pokemon-utils.ts b/src/data/mystery-encounters/utils/encounter-pokemon-utils.ts index 275078dbace..a4787e819b8 100644 --- a/src/data/mystery-encounters/utils/encounter-pokemon-utils.ts +++ b/src/data/mystery-encounters/utils/encounter-pokemon-utils.ts @@ -741,6 +741,26 @@ export async function catchPokemon( false, ); }, + () => { + const attributes = { + shiny: pokemon.shiny, + variant: pokemon.variant, + form: pokemon.formIndex, + female: pokemon.gender === Gender.FEMALE, + }; + globalScene.ui.setOverlayMode( + Mode.POKEDEX_PAGE, + pokemon.species, + pokemon.formIndex, + attributes, + null, + () => { + globalScene.ui.setMode(Mode.MESSAGE).then(() => { + promptRelease(); + }); + }, + ); + }, () => { globalScene.ui.setMode( Mode.PARTY, diff --git a/src/data/nature.ts b/src/data/nature.ts index e23d92c14b0..2ab4723c10d 100644 --- a/src/data/nature.ts +++ b/src/data/nature.ts @@ -1,4 +1,4 @@ -import * as Utils from "../utils"; +import { toReadableString } from "#app/utils"; import { TextStyle, getBBCodeFrag } from "../ui/text"; import { Nature } from "#enums/nature"; import { UiTheme } from "#enums/ui-theme"; @@ -12,7 +12,7 @@ export function getNatureName( ignoreBBCode = false, uiTheme: UiTheme = UiTheme.DEFAULT, ): string { - let ret = Utils.toReadableString(Nature[nature]); + let ret = toReadableString(Nature[nature]); //Translating nature if (i18next.exists(`nature:${ret}`)) { ret = i18next.t(`nature:${ret}` as any); diff --git a/src/data/pokemon-forms.ts b/src/data/pokemon-forms.ts index 4636e68d6d6..63e166c7fc4 100644 --- a/src/data/pokemon-forms.ts +++ b/src/data/pokemon-forms.ts @@ -363,7 +363,7 @@ export class SpeciesFormChangeMoveLearnedTrigger extends SpeciesFormChangeTrigge } canChange(pokemon: Pokemon): boolean { - return !!pokemon.moveset.filter(m => m?.moveId === this.move).length === this.known; + return !!pokemon.moveset.filter(m => m.moveId === this.move).length === this.known; } } diff --git a/src/data/pokemon-species.ts b/src/data/pokemon-species.ts index d172173e9df..a27c00121dc 100644 --- a/src/data/pokemon-species.ts +++ b/src/data/pokemon-species.ts @@ -8,7 +8,7 @@ import type { AnySound } from "#app/battle-scene"; import { globalScene } from "#app/global-scene"; import type { GameMode } from "#app/game-mode"; import { DexAttr, type StarterMoveset } from "#app/system/game-data"; -import * as Utils from "#app/utils"; +import { isNullOrUndefined, capitalizeString, randSeedInt, randSeedGauss, randSeedItem } from "#app/utils"; import { uncatchableSpecies } from "#app/data/balance/biomes"; import { speciesEggMoves } from "#app/data/balance/egg-moves"; import { GrowthRate } from "#app/data/exp"; @@ -26,11 +26,12 @@ import { pokemonSpeciesLevelMoves, } from "#app/data/balance/pokemon-level-moves"; import type { Stat } from "#enums/stat"; -import type { Variant, VariantSet } from "#app/data/variant"; -import { variantData } from "#app/data/variant"; +import type { Variant, VariantSet } from "#app/sprites/variant"; +import { variantData } from "#app/sprites/variant"; import { speciesStarterCosts, POKERUS_STARTER_COUNT } from "#app/data/balance/starters"; import { SpeciesFormKey } from "#enums/species-form-key"; import { starterPassiveAbilities } from "#app/data/balance/passives"; +import { loadPokemonVariantAssets } from "#app/sprites/pokemon-sprite"; export enum Region { NORMAL, @@ -289,7 +290,7 @@ export abstract class PokemonSpeciesForm { * @returns The id of the ability */ getPassiveAbility(formIndex?: number): Abilities { - if (Utils.isNullOrUndefined(formIndex)) { + if (isNullOrUndefined(formIndex)) { formIndex = this.formIndex; } let starterSpeciesId = this.speciesId; @@ -387,6 +388,7 @@ export abstract class PokemonSpeciesForm { return `${/_[1-3]$/.test(spriteId) ? "variant/" : ""}${spriteId}`; } + /** Compute the sprite ID of the pokemon form. */ getSpriteId(female: boolean, formIndex?: number, shiny?: boolean, variant = 0, back?: boolean): string { if (formIndex === undefined || this instanceof PokemonForm) { formIndex = this.formIndex; @@ -394,7 +396,9 @@ export abstract class PokemonSpeciesForm { const formSpriteKey = this.getFormSpriteKey(formIndex); const showGenderDiffs = - this.genderDiffs && female && ![SpeciesFormKey.MEGA, SpeciesFormKey.GIGANTAMAX].find(k => formSpriteKey === k); + this.genderDiffs && + female && + ![SpeciesFormKey.MEGA, SpeciesFormKey.GIGANTAMAX].includes(formSpriteKey as SpeciesFormKey); const baseSpriteKey = `${showGenderDiffs ? "female__" : ""}${this.speciesId}${formSpriteKey ? `-${formSpriteKey}` : ""}`; @@ -585,18 +589,19 @@ export abstract class PokemonSpeciesForm { return true; } - loadAssets( + async loadAssets( female: boolean, formIndex?: number, - shiny?: boolean, + shiny = false, variant?: Variant, - startLoad?: boolean, - back?: boolean, + startLoad = false, + back = false, ): Promise { - return new Promise(resolve => { - const spriteKey = this.getSpriteKey(female, formIndex, shiny, variant, back); - globalScene.loadPokemonAtlas(spriteKey, this.getSpriteAtlasPath(female, formIndex, shiny, variant, back)); - globalScene.load.audio(`${this.getCryKey(formIndex)}`, `audio/${this.getCryKey(formIndex)}.m4a`); + const spriteKey = this.getSpriteKey(female, formIndex, shiny, variant, back); + globalScene.loadPokemonAtlas(spriteKey, this.getSpriteAtlasPath(female, formIndex, shiny, variant, back)); + globalScene.load.audio(this.getCryKey(formIndex), `audio/${this.getCryKey(formIndex)}.m4a`); + + return new Promise(resolve => { globalScene.load.once(Phaser.Loader.Events.COMPLETE, () => { const originalWarn = console.warn; // Ignore warnings for missing frames, because there will be a lot @@ -621,7 +626,9 @@ export abstract class PokemonSpeciesForm { const spritePath = this.getSpriteAtlasPath(female, formIndex, shiny, variant, back) .replace("variant/", "") .replace(/_[1-3]$/, ""); - globalScene.loadPokemonVariantAssets(spriteKey, spritePath, variant).then(() => resolve()); + if (!isNullOrUndefined(variant)) { + loadPokemonVariantAssets(spriteKey, spritePath, variant).then(() => resolve()); + } }); if (startLoad) { if (!globalScene.load.isLoading()) { @@ -845,8 +852,8 @@ export default class PokemonSpecies extends PokemonSpeciesForm implements Locali */ getFormNameToDisplay(formIndex = 0, append = false): string { const formKey = this.forms?.[formIndex!]?.formKey; - const formText = Utils.capitalizeString(formKey, "-", false, false) || ""; - const speciesName = Utils.capitalizeString(Species[this.speciesId], "_", true, false); + const formText = capitalizeString(formKey, "-", false, false) || ""; + const speciesName = capitalizeString(Species[this.speciesId], "_", true, false); let ret = ""; const region = this.getRegion(); @@ -877,7 +884,7 @@ export default class PokemonSpecies extends PokemonSpeciesForm implements Locali if (i18next.exists(i18key)) { ret = i18next.t(i18key); } else { - const rootSpeciesName = Utils.capitalizeString(Species[this.getRootSpeciesId()], "_", true, false); + const rootSpeciesName = capitalizeString(Species[this.getRootSpeciesId()], "_", true, false); const i18RootKey = `pokemonForm:${rootSpeciesName}${formText}`; ret = i18next.exists(i18RootKey) ? i18next.t(i18RootKey) : formText; } @@ -1072,7 +1079,7 @@ export default class PokemonSpecies extends PokemonSpeciesForm implements Locali return this.speciesId; } - const randValue = evolutionPool.size === 1 ? 0 : Utils.randSeedInt(totalWeight); + const randValue = evolutionPool.size === 1 ? 0 : randSeedInt(totalWeight); for (const weight of evolutionPool.keys()) { if (randValue < weight) { @@ -1157,7 +1164,7 @@ export default class PokemonSpecies extends PokemonSpeciesForm implements Locali Math.min( Math.max( evolution?.level! + - Math.round(Utils.randSeedGauss(0.5, 1 + levelDiff * 0.2) * Math.max(evolution?.wildDelay!, 0.5) * 5) - + Math.round(randSeedGauss(0.5, 1 + levelDiff * 0.2) * Math.max(evolution?.wildDelay!, 0.5) * 5) - 1, 2, evolution?.level!, @@ -1175,7 +1182,7 @@ export default class PokemonSpecies extends PokemonSpeciesForm implements Locali Math.min( Math.max( lastPrevolutionLevel + - Math.round(Utils.randSeedGauss(0.5, 1 + levelDiff * 0.2) * Math.max(evolution?.wildDelay!, 0.5) * 5), + Math.round(randSeedGauss(0.5, 1 + levelDiff * 0.2) * Math.max(evolution?.wildDelay!, 0.5) * 5), lastPrevolutionLevel + 1, evolution?.level!, ), @@ -1360,7 +1367,7 @@ export function getPokerusStarters(): PokemonSpecies[] { globalScene.executeWithSeedOffset( () => { while (pokerusStarters.length < POKERUS_STARTER_COUNT) { - const randomSpeciesId = Number.parseInt(Utils.randSeedItem(Object.keys(speciesStarterCosts)), 10); + const randomSpeciesId = Number.parseInt(randSeedItem(Object.keys(speciesStarterCosts)), 10); const species = getPokemonSpecies(randomSpeciesId); if (!pokerusStarters.includes(species)) { pokerusStarters.push(species); @@ -1383,7 +1390,7 @@ export function initSpecies() { new PokemonSpecies(Species.VENUSAUR, 1, false, false, false, "Seed Pokémon", PokemonType.GRASS, PokemonType.POISON, 2, 100, Abilities.OVERGROW, Abilities.NONE, Abilities.CHLOROPHYLL, 525, 80, 82, 83, 100, 100, 80, 45, 50, 263, GrowthRate.MEDIUM_SLOW, 87.5, true, true, new PokemonForm("Normal", "", PokemonType.GRASS, PokemonType.POISON, 2, 100, Abilities.OVERGROW, Abilities.NONE, Abilities.CHLOROPHYLL, 525, 80, 82, 83, 100, 100, 80, 45, 50, 263, true, null, true), new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.GRASS, PokemonType.POISON, 2.4, 155.5, Abilities.THICK_FAT, Abilities.THICK_FAT, Abilities.THICK_FAT, 625, 80, 100, 123, 122, 120, 80, 45, 50, 263, true), - new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.GRASS, PokemonType.POISON, 24, 999.9, Abilities.EFFECT_SPORE, Abilities.NONE, Abilities.EFFECT_SPORE, 625, 120, 82, 98, 130, 115, 80, 45, 50, 263, true), + new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.GRASS, PokemonType.POISON, 24, 999.9, Abilities.EFFECT_SPORE, Abilities.NONE, Abilities.EFFECT_SPORE, 625, 120, 122, 90, 108, 105, 80, 45, 50, 263, true), ), new PokemonSpecies(Species.CHARMANDER, 1, false, false, false, "Lizard Pokémon", PokemonType.FIRE, null, 0.6, 8.5, Abilities.BLAZE, Abilities.NONE, Abilities.SOLAR_POWER, 309, 39, 52, 43, 60, 50, 65, 45, 50, 62, GrowthRate.MEDIUM_SLOW, 87.5, false), new PokemonSpecies(Species.CHARMELEON, 1, false, false, false, "Flame Pokémon", PokemonType.FIRE, null, 1.1, 19, Abilities.BLAZE, Abilities.NONE, Abilities.SOLAR_POWER, 405, 58, 64, 58, 80, 65, 80, 45, 50, 142, GrowthRate.MEDIUM_SLOW, 87.5, false), @@ -1391,20 +1398,20 @@ export function initSpecies() { new PokemonForm("Normal", "", PokemonType.FIRE, PokemonType.FLYING, 1.7, 90.5, Abilities.BLAZE, Abilities.NONE, Abilities.SOLAR_POWER, 534, 78, 84, 78, 109, 85, 100, 45, 50, 267, false, null, true), new PokemonForm("Mega X", SpeciesFormKey.MEGA_X, PokemonType.FIRE, PokemonType.DRAGON, 1.7, 110.5, Abilities.TOUGH_CLAWS, Abilities.NONE, Abilities.TOUGH_CLAWS, 634, 78, 130, 111, 130, 85, 100, 45, 50, 267), new PokemonForm("Mega Y", SpeciesFormKey.MEGA_Y, PokemonType.FIRE, PokemonType.FLYING, 1.7, 100.5, Abilities.DROUGHT, Abilities.NONE, Abilities.DROUGHT, 634, 78, 104, 78, 159, 115, 100, 45, 50, 267), - new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.FIRE, PokemonType.FLYING, 28, 999.9, Abilities.BERSERK, Abilities.NONE, Abilities.BERSERK, 634, 118, 84, 93, 139, 100, 100, 45, 50, 267), + new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.FIRE, PokemonType.FLYING, 28, 999.9, Abilities.BERSERK, Abilities.NONE, Abilities.BERSERK, 634, 118, 99, 88, 134, 95, 100, 45, 50, 267), ), new PokemonSpecies(Species.SQUIRTLE, 1, false, false, false, "Tiny Turtle Pokémon", PokemonType.WATER, null, 0.5, 9, Abilities.TORRENT, Abilities.NONE, Abilities.RAIN_DISH, 314, 44, 48, 65, 50, 64, 43, 45, 50, 63, GrowthRate.MEDIUM_SLOW, 87.5, false), new PokemonSpecies(Species.WARTORTLE, 1, false, false, false, "Turtle Pokémon", PokemonType.WATER, null, 1, 22.5, Abilities.TORRENT, Abilities.NONE, Abilities.RAIN_DISH, 405, 59, 63, 80, 65, 80, 58, 45, 50, 142, GrowthRate.MEDIUM_SLOW, 87.5, false), new PokemonSpecies(Species.BLASTOISE, 1, false, false, false, "Shellfish Pokémon", PokemonType.WATER, null, 1.6, 85.5, Abilities.TORRENT, Abilities.NONE, Abilities.RAIN_DISH, 530, 79, 83, 100, 85, 105, 78, 45, 50, 265, GrowthRate.MEDIUM_SLOW, 87.5, false, true, new PokemonForm("Normal", "", PokemonType.WATER, null, 1.6, 85.5, Abilities.TORRENT, Abilities.NONE, Abilities.RAIN_DISH, 530, 79, 83, 100, 85, 105, 78, 45, 50, 265, false, null, true), new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.WATER, null, 1.6, 101.1, Abilities.MEGA_LAUNCHER, Abilities.NONE, Abilities.MEGA_LAUNCHER, 630, 79, 103, 120, 135, 115, 78, 45, 50, 265), - new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.WATER, PokemonType.STEEL, 25, 999.9, Abilities.SHELL_ARMOR, Abilities.NONE, Abilities.SHELL_ARMOR, 630, 119, 83, 135, 115, 110, 68, 45, 50, 265), + new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.WATER, PokemonType.STEEL, 25, 999.9, Abilities.SHELL_ARMOR, Abilities.NONE, Abilities.SHELL_ARMOR, 630, 119, 108, 125, 105, 110, 63, 45, 50, 265), ), new PokemonSpecies(Species.CATERPIE, 1, false, false, false, "Worm Pokémon", PokemonType.BUG, null, 0.3, 2.9, Abilities.SHIELD_DUST, Abilities.NONE, Abilities.RUN_AWAY, 195, 45, 30, 35, 20, 20, 45, 255, 50, 39, GrowthRate.MEDIUM_FAST, 50, false), new PokemonSpecies(Species.METAPOD, 1, false, false, false, "Cocoon Pokémon", PokemonType.BUG, null, 0.7, 9.9, Abilities.SHED_SKIN, Abilities.NONE, Abilities.SHED_SKIN, 205, 50, 20, 55, 25, 25, 30, 120, 50, 72, GrowthRate.MEDIUM_FAST, 50, false), new PokemonSpecies(Species.BUTTERFREE, 1, false, false, false, "Butterfly Pokémon", PokemonType.BUG, PokemonType.FLYING, 1.1, 32, Abilities.COMPOUND_EYES, Abilities.NONE, Abilities.TINTED_LENS, 395, 60, 45, 50, 90, 80, 70, 45, 50, 198, GrowthRate.MEDIUM_FAST, 50, true, true, new PokemonForm("Normal", "", PokemonType.BUG, PokemonType.FLYING, 1.1, 32, Abilities.COMPOUND_EYES, Abilities.NONE, Abilities.TINTED_LENS, 395, 60, 45, 50, 90, 80, 70, 45, 50, 198, true, null, true), - new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.BUG, PokemonType.FLYING, 17, 999.9, Abilities.COMPOUND_EYES, Abilities.NONE, Abilities.COMPOUND_EYES, 495, 85, 35, 80, 120, 90, 85, 45, 50, 198, true), + new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.BUG, PokemonType.FLYING, 17, 999.9, Abilities.COMPOUND_EYES, Abilities.NONE, Abilities.COMPOUND_EYES, 495, 80, 40, 75, 120, 95, 85, 45, 50, 198, true), ), new PokemonSpecies(Species.WEEDLE, 1, false, false, false, "Hairy Bug Pokémon", PokemonType.BUG, PokemonType.POISON, 0.3, 3.2, Abilities.SHIELD_DUST, Abilities.NONE, Abilities.RUN_AWAY, 195, 40, 35, 30, 20, 20, 50, 255, 70, 39, GrowthRate.MEDIUM_FAST, 50, false), new PokemonSpecies(Species.KAKUNA, 1, false, false, false, "Cocoon Pokémon", PokemonType.BUG, PokemonType.POISON, 0.6, 10, Abilities.SHED_SKIN, Abilities.NONE, Abilities.SHED_SKIN, 205, 45, 25, 50, 25, 25, 35, 120, 70, 72, GrowthRate.MEDIUM_FAST, 50, false), @@ -1485,7 +1492,7 @@ export function initSpecies() { new PokemonSpecies(Species.MACHOKE, 1, false, false, false, "Superpower Pokémon", PokemonType.FIGHTING, null, 1.5, 70.5, Abilities.GUTS, Abilities.NO_GUARD, Abilities.STEADFAST, 405, 80, 100, 70, 50, 60, 45, 90, 50, 142, GrowthRate.MEDIUM_SLOW, 75, false), new PokemonSpecies(Species.MACHAMP, 1, false, false, false, "Superpower Pokémon", PokemonType.FIGHTING, null, 1.6, 130, Abilities.GUTS, Abilities.NO_GUARD, Abilities.STEADFAST, 505, 90, 130, 80, 65, 85, 55, 45, 50, 253, GrowthRate.MEDIUM_SLOW, 75, false, true, new PokemonForm("Normal", "", PokemonType.FIGHTING, null, 1.6, 130, Abilities.GUTS, Abilities.NO_GUARD, Abilities.STEADFAST, 505, 90, 130, 80, 65, 85, 55, 45, 50, 253, false, null, true), - new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.FIGHTING, null, 25, 999.9, Abilities.GUTS, Abilities.GUTS, Abilities.GUTS, 605, 115, 170, 95, 65, 95, 65, 45, 50, 253), + new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.FIGHTING, null, 25, 999.9, Abilities.GUTS, Abilities.GUTS, Abilities.GUTS, 605, 120, 170, 85, 75, 90, 65, 45, 50, 253), ), new PokemonSpecies(Species.BELLSPROUT, 1, false, false, false, "Flower Pokémon", PokemonType.GRASS, PokemonType.POISON, 0.7, 4, Abilities.CHLOROPHYLL, Abilities.NONE, Abilities.GLUTTONY, 300, 50, 75, 35, 70, 30, 40, 255, 70, 60, GrowthRate.MEDIUM_SLOW, 50, false), new PokemonSpecies(Species.WEEPINBELL, 1, false, false, false, "Flycatcher Pokémon", PokemonType.GRASS, PokemonType.POISON, 1, 6.4, Abilities.CHLOROPHYLL, Abilities.NONE, Abilities.GLUTTONY, 390, 65, 90, 50, 85, 45, 55, 120, 70, 137, GrowthRate.MEDIUM_SLOW, 50, false), @@ -1526,7 +1533,7 @@ export function initSpecies() { new PokemonSpecies(Species.KRABBY, 1, false, false, false, "River Crab Pokémon", PokemonType.WATER, null, 0.4, 6.5, Abilities.HYPER_CUTTER, Abilities.SHELL_ARMOR, Abilities.SHEER_FORCE, 325, 30, 105, 90, 25, 25, 50, 225, 50, 65, GrowthRate.MEDIUM_FAST, 50, false), new PokemonSpecies(Species.KINGLER, 1, false, false, false, "Pincer Pokémon", PokemonType.WATER, null, 1.3, 60, Abilities.HYPER_CUTTER, Abilities.SHELL_ARMOR, Abilities.SHEER_FORCE, 475, 55, 130, 115, 50, 50, 75, 60, 50, 166, GrowthRate.MEDIUM_FAST, 50, false, true, new PokemonForm("Normal", "", PokemonType.WATER, null, 1.3, 60, Abilities.HYPER_CUTTER, Abilities.SHELL_ARMOR, Abilities.SHEER_FORCE, 475, 55, 130, 115, 50, 50, 75, 60, 50, 166, false, null, true), - new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.WATER, null, 19, 999.9, Abilities.TOUGH_CLAWS, Abilities.TOUGH_CLAWS, Abilities.TOUGH_CLAWS, 575, 90, 155, 140, 50, 70, 70, 60, 50, 166), + new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.WATER, null, 19, 999.9, Abilities.TOUGH_CLAWS, Abilities.TOUGH_CLAWS, Abilities.TOUGH_CLAWS, 575, 92, 145, 140, 60, 65, 73, 60, 50, 166), ), new PokemonSpecies(Species.VOLTORB, 1, false, false, false, "Ball Pokémon", PokemonType.ELECTRIC, null, 0.5, 10.4, Abilities.SOUNDPROOF, Abilities.STATIC, Abilities.AFTERMATH, 330, 40, 30, 50, 55, 55, 100, 190, 70, 66, GrowthRate.MEDIUM_FAST, null, false), new PokemonSpecies(Species.ELECTRODE, 1, false, false, false, "Ball Pokémon", PokemonType.ELECTRIC, null, 1.2, 66.6, Abilities.SOUNDPROOF, Abilities.STATIC, Abilities.AFTERMATH, 490, 60, 50, 70, 80, 80, 150, 60, 70, 172, GrowthRate.MEDIUM_FAST, null, false), @@ -1570,13 +1577,13 @@ export function initSpecies() { ), new PokemonSpecies(Species.LAPRAS, 1, false, false, false, "Transport Pokémon", PokemonType.WATER, PokemonType.ICE, 2.5, 220, Abilities.WATER_ABSORB, Abilities.SHELL_ARMOR, Abilities.HYDRATION, 535, 130, 85, 80, 85, 95, 60, 45, 50, 187, GrowthRate.SLOW, 50, false, true, new PokemonForm("Normal", "", PokemonType.WATER, PokemonType.ICE, 2.5, 220, Abilities.WATER_ABSORB, Abilities.SHELL_ARMOR, Abilities.HYDRATION, 535, 130, 85, 80, 85, 95, 60, 45, 50, 187, false, null, true), - new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.WATER, PokemonType.ICE, 24, 999.9, Abilities.SHIELD_DUST, Abilities.SHIELD_DUST, Abilities.SHIELD_DUST, 635, 170, 85, 85, 105, 130, 60, 45, 50, 187), + new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.WATER, PokemonType.ICE, 24, 999.9, Abilities.SHIELD_DUST, Abilities.SHIELD_DUST, Abilities.SHIELD_DUST, 635, 170, 97, 85, 107, 111, 65, 45, 50, 187), ), new PokemonSpecies(Species.DITTO, 1, false, false, false, "Transform Pokémon", PokemonType.NORMAL, null, 0.3, 4, Abilities.LIMBER, Abilities.NONE, Abilities.IMPOSTER, 288, 48, 48, 48, 48, 48, 48, 35, 50, 101, GrowthRate.MEDIUM_FAST, null, false), new PokemonSpecies(Species.EEVEE, 1, false, false, false, "Evolution Pokémon", PokemonType.NORMAL, null, 0.3, 6.5, Abilities.RUN_AWAY, Abilities.ADAPTABILITY, Abilities.ANTICIPATION, 325, 55, 55, 50, 45, 65, 55, 45, 50, 65, GrowthRate.MEDIUM_FAST, 87.5, false, true, new PokemonForm("Normal", "", PokemonType.NORMAL, null, 0.3, 6.5, Abilities.RUN_AWAY, Abilities.ADAPTABILITY, Abilities.ANTICIPATION, 325, 55, 55, 50, 45, 65, 55, 45, 50, 65, false, null, true), new PokemonForm("Partner", "partner", PokemonType.NORMAL, null, 0.3, 6.5, Abilities.RUN_AWAY, Abilities.ADAPTABILITY, Abilities.ANTICIPATION, 435, 65, 75, 70, 65, 85, 75, 45, 50, 65, false, null, true), - new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.NORMAL, null, 18, 999.9, Abilities.PROTEAN, Abilities.PROTEAN, Abilities.PROTEAN, 535, 110, 90, 70, 95, 85, 85, 45, 50, 65), //+100 BST from Partner Form + new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.NORMAL, null, 18, 999.9, Abilities.PROTEAN, Abilities.PROTEAN, Abilities.PROTEAN, 535, 110, 95, 70, 90, 85, 85, 45, 50, 65), //+100 BST from Partner Form ), new PokemonSpecies(Species.VAPOREON, 1, false, false, false, "Bubble Jet Pokémon", PokemonType.WATER, null, 1, 29, Abilities.WATER_ABSORB, Abilities.NONE, Abilities.HYDRATION, 525, 130, 65, 60, 110, 95, 65, 45, 50, 184, GrowthRate.MEDIUM_FAST, 87.5, false), new PokemonSpecies(Species.JOLTEON, 1, false, false, false, "Lightning Pokémon", PokemonType.ELECTRIC, null, 0.8, 24.5, Abilities.VOLT_ABSORB, Abilities.NONE, Abilities.QUICK_FEET, 525, 65, 65, 60, 110, 95, 130, 45, 50, 184, GrowthRate.MEDIUM_FAST, 87.5, false), @@ -1592,7 +1599,7 @@ export function initSpecies() { ), new PokemonSpecies(Species.SNORLAX, 1, false, false, false, "Sleeping Pokémon", PokemonType.NORMAL, null, 2.1, 460, Abilities.IMMUNITY, Abilities.THICK_FAT, Abilities.GLUTTONY, 540, 160, 110, 65, 65, 110, 30, 25, 50, 189, GrowthRate.SLOW, 87.5, false, true, new PokemonForm("Normal", "", PokemonType.NORMAL, null, 2.1, 460, Abilities.IMMUNITY, Abilities.THICK_FAT, Abilities.GLUTTONY, 540, 160, 110, 65, 65, 110, 30, 25, 50, 189, false, null, true), - new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.NORMAL, null, 35, 999.9, Abilities.HARVEST, Abilities.HARVEST, Abilities.HARVEST, 640, 200, 135, 80, 80, 125, 20, 25, 50, 189), + new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.NORMAL, null, 35, 999.9, Abilities.HARVEST, Abilities.HARVEST, Abilities.HARVEST, 640, 210, 135, 70, 90, 115, 20, 25, 50, 189), ), new PokemonSpecies(Species.ARTICUNO, 1, true, false, false, "Freeze Pokémon", PokemonType.ICE, PokemonType.FLYING, 1.7, 55.4, Abilities.PRESSURE, Abilities.NONE, Abilities.SNOW_CLOAK, 580, 90, 85, 100, 95, 125, 85, 3, 35, 290, GrowthRate.SLOW, null, false), new PokemonSpecies(Species.ZAPDOS, 1, true, false, false, "Electric Pokémon", PokemonType.ELECTRIC, PokemonType.FLYING, 1.6, 52.6, Abilities.PRESSURE, Abilities.NONE, Abilities.STATIC, 580, 90, 90, 85, 125, 90, 100, 3, 35, 290, GrowthRate.SLOW, null, false), @@ -2086,7 +2093,7 @@ export function initSpecies() { new PokemonSpecies(Species.PORYGON_Z, 4, false, false, false, "Virtual Pokémon", PokemonType.NORMAL, null, 0.9, 34, Abilities.ADAPTABILITY, Abilities.DOWNLOAD, Abilities.ANALYTIC, 535, 85, 80, 70, 135, 75, 90, 30, 50, 268, GrowthRate.MEDIUM_FAST, null, false), new PokemonSpecies(Species.GALLADE, 4, false, false, false, "Blade Pokémon", PokemonType.PSYCHIC, PokemonType.FIGHTING, 1.6, 52, Abilities.STEADFAST, Abilities.SHARPNESS, Abilities.JUSTIFIED, 518, 68, 125, 65, 65, 115, 80, 45, 35, 259, GrowthRate.SLOW, 100, false, true, new PokemonForm("Normal", "", PokemonType.PSYCHIC, PokemonType.FIGHTING, 1.6, 52, Abilities.STEADFAST, Abilities.SHARPNESS, Abilities.JUSTIFIED, 518, 68, 125, 65, 65, 115, 80, 45, 35, 259, false, null, true), - new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.PSYCHIC, PokemonType.FIGHTING, 1.6, 56.4, Abilities.SHARPNESS, Abilities.SHARPNESS, Abilities.SHARPNESS, 618, 68, 165, 95, 65, 115, 110, 45, 35, 259), + new PokemonForm("Mega", SpeciesFormKey.MEGA, PokemonType.PSYCHIC, PokemonType.FIGHTING, 1.6, 56.4, Abilities.INNER_FOCUS, Abilities.INNER_FOCUS, Abilities.INNER_FOCUS, 618, 68, 165, 95, 65, 115, 110, 45, 35, 259), ), new PokemonSpecies(Species.PROBOPASS, 4, false, false, false, "Compass Pokémon", PokemonType.ROCK, PokemonType.STEEL, 1.4, 340, Abilities.STURDY, Abilities.MAGNET_PULL, Abilities.SAND_FORCE, 525, 60, 55, 145, 75, 150, 40, 60, 70, 184, GrowthRate.MEDIUM_FAST, 50, false), new PokemonSpecies(Species.DUSKNOIR, 4, false, false, false, "Gripper Pokémon", PokemonType.GHOST, null, 2.2, 106.6, Abilities.PRESSURE, Abilities.NONE, Abilities.FRISK, 525, 45, 100, 135, 65, 135, 45, 45, 35, 263, GrowthRate.FAST, 50, false), @@ -2232,7 +2239,7 @@ export function initSpecies() { new PokemonSpecies(Species.TRUBBISH, 5, false, false, false, "Trash Bag Pokémon", PokemonType.POISON, null, 0.6, 31, Abilities.STENCH, Abilities.STICKY_HOLD, Abilities.AFTERMATH, 329, 50, 50, 62, 40, 62, 65, 190, 50, 66, GrowthRate.MEDIUM_FAST, 50, false), new PokemonSpecies(Species.GARBODOR, 5, false, false, false, "Trash Heap Pokémon", PokemonType.POISON, null, 1.9, 107.3, Abilities.STENCH, Abilities.WEAK_ARMOR, Abilities.AFTERMATH, 474, 80, 95, 82, 60, 82, 75, 60, 50, 166, GrowthRate.MEDIUM_FAST, 50, false, true, new PokemonForm("Normal", "", PokemonType.POISON, null, 1.9, 107.3, Abilities.STENCH, Abilities.WEAK_ARMOR, Abilities.AFTERMATH, 474, 80, 95, 82, 60, 82, 75, 60, 50, 166, false, null, true), - new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.POISON, PokemonType.STEEL, 21, 999.9, Abilities.TOXIC_DEBRIS, Abilities.TOXIC_DEBRIS, Abilities.TOXIC_DEBRIS, 574, 135, 125, 102, 57, 102, 53, 60, 50, 166), + new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.POISON, PokemonType.STEEL, 21, 999.9, Abilities.TOXIC_DEBRIS, Abilities.TOXIC_DEBRIS, Abilities.TOXIC_DEBRIS, 574, 115, 121, 102, 81, 102, 53, 60, 50, 166), ), new PokemonSpecies(Species.ZORUA, 5, false, false, false, "Tricky Fox Pokémon", PokemonType.DARK, null, 0.7, 12.5, Abilities.ILLUSION, Abilities.NONE, Abilities.NONE, 330, 40, 65, 40, 80, 40, 65, 75, 50, 66, GrowthRate.MEDIUM_SLOW, 87.5, false), new PokemonSpecies(Species.ZOROARK, 5, false, false, false, "Illusion Fox Pokémon", PokemonType.DARK, null, 1.6, 81.1, Abilities.ILLUSION, Abilities.NONE, Abilities.NONE, 510, 60, 105, 60, 120, 60, 105, 45, 50, 179, GrowthRate.MEDIUM_SLOW, 87.5, false), @@ -2357,16 +2364,16 @@ export function initSpecies() { new PokemonSpecies(Species.DELPHOX, 6, false, false, false, "Fox Pokémon", PokemonType.FIRE, PokemonType.PSYCHIC, 1.5, 39, Abilities.BLAZE, Abilities.NONE, Abilities.MAGICIAN, 534, 75, 69, 72, 114, 100, 104, 45, 70, 267, GrowthRate.MEDIUM_SLOW, 87.5, false), new PokemonSpecies(Species.FROAKIE, 6, false, false, false, "Bubble Frog Pokémon", PokemonType.WATER, null, 0.3, 7, Abilities.TORRENT, Abilities.NONE, Abilities.PROTEAN, 314, 41, 56, 40, 62, 44, 71, 45, 70, 63, GrowthRate.MEDIUM_SLOW, 87.5, false, false, new PokemonForm("Normal", "", PokemonType.WATER, null, 0.3, 7, Abilities.TORRENT, Abilities.NONE, Abilities.PROTEAN, 314, 41, 56, 40, 62, 44, 71, 45, 70, 63, false, null, true), - new PokemonForm("Battle Bond", "battle-bond", PokemonType.WATER, null, 0.3, 7, Abilities.TORRENT, Abilities.NONE, Abilities.PROTEAN, 314, 41, 56, 40, 62, 44, 71, 45, 70, 63, false, "", true), + new PokemonForm("Battle Bond", "battle-bond", PokemonType.WATER, null, 0.3, 7, Abilities.TORRENT, Abilities.NONE, Abilities.TORRENT, 314, 41, 56, 40, 62, 44, 71, 45, 70, 63, false, "", true), ), new PokemonSpecies(Species.FROGADIER, 6, false, false, false, "Bubble Frog Pokémon", PokemonType.WATER, null, 0.6, 10.9, Abilities.TORRENT, Abilities.NONE, Abilities.PROTEAN, 405, 54, 63, 52, 83, 56, 97, 45, 70, 142, GrowthRate.MEDIUM_SLOW, 87.5, false, false, new PokemonForm("Normal", "", PokemonType.WATER, null, 0.6, 10.9, Abilities.TORRENT, Abilities.NONE, Abilities.PROTEAN, 405, 54, 63, 52, 83, 56, 97, 45, 70, 142, false, null, true), - new PokemonForm("Battle Bond", "battle-bond", PokemonType.WATER, null, 0.6, 10.9, Abilities.TORRENT, Abilities.NONE, Abilities.PROTEAN, 405, 54, 63, 52, 83, 56, 97, 45, 70, 142, false, "", true), + new PokemonForm("Battle Bond", "battle-bond", PokemonType.WATER, null, 0.6, 10.9, Abilities.TORRENT, Abilities.NONE, Abilities.NONE, 405, 54, 63, 52, 83, 56, 97, 45, 70, 142, false, "", true), ), new PokemonSpecies(Species.GRENINJA, 6, false, false, false, "Ninja Pokémon", PokemonType.WATER, PokemonType.DARK, 1.5, 40, Abilities.TORRENT, Abilities.NONE, Abilities.PROTEAN, 530, 72, 95, 67, 103, 71, 122, 45, 70, 265, GrowthRate.MEDIUM_SLOW, 87.5, false, false, new PokemonForm("Normal", "", PokemonType.WATER, PokemonType.DARK, 1.5, 40, Abilities.TORRENT, Abilities.NONE, Abilities.PROTEAN, 530, 72, 95, 67, 103, 71, 122, 45, 70, 265, false, null, true), new PokemonForm("Battle Bond", "battle-bond", PokemonType.WATER, PokemonType.DARK, 1.5, 40, Abilities.BATTLE_BOND, Abilities.NONE, Abilities.BATTLE_BOND, 530, 72, 95, 67, 103, 71, 122, 45, 70, 265, false, "", true), - new PokemonForm("Ash", "ash", PokemonType.WATER, PokemonType.DARK, 1.5, 40, Abilities.BATTLE_BOND, Abilities.NONE, Abilities.BATTLE_BOND, 640, 72, 145, 67, 153, 71, 132, 45, 70, 265), + new PokemonForm("Ash", "ash", PokemonType.WATER, PokemonType.DARK, 1.5, 40, Abilities.BATTLE_BOND, Abilities.NONE, Abilities.NONE, 640, 72, 145, 67, 153, 71, 132, 45, 70, 265), ), new PokemonSpecies(Species.BUNNELBY, 6, false, false, false, "Digging Pokémon", PokemonType.NORMAL, null, 0.4, 5, Abilities.PICKUP, Abilities.CHEEK_POUCH, Abilities.HUGE_POWER, 237, 38, 36, 38, 32, 36, 57, 255, 50, 47, GrowthRate.MEDIUM_FAST, 50, false), new PokemonSpecies(Species.DIGGERSBY, 6, false, false, false, "Digging Pokémon", PokemonType.NORMAL, PokemonType.GROUND, 1, 42.4, Abilities.PICKUP, Abilities.CHEEK_POUCH, Abilities.HUGE_POWER, 423, 85, 56, 77, 50, 77, 78, 127, 50, 148, GrowthRate.MEDIUM_FAST, 50, false), @@ -2707,25 +2714,25 @@ export function initSpecies() { new PokemonSpecies(Species.MELTAN, 7, false, false, true, "Hex Nut Pokémon", PokemonType.STEEL, null, 0.2, 8, Abilities.MAGNET_PULL, Abilities.NONE, Abilities.NONE, 300, 46, 65, 65, 55, 35, 34, 3, 0, 150, GrowthRate.SLOW, null, false), new PokemonSpecies(Species.MELMETAL, 7, false, false, true, "Hex Nut Pokémon", PokemonType.STEEL, null, 2.5, 800, Abilities.IRON_FIST, Abilities.NONE, Abilities.NONE, 600, 135, 143, 143, 80, 65, 34, 3, 0, 300, GrowthRate.SLOW, null, false, true, new PokemonForm("Normal", "", PokemonType.STEEL, null, 2.5, 800, Abilities.IRON_FIST, Abilities.NONE, Abilities.NONE, 600, 135, 143, 143, 80, 65, 34, 3, 0, 300, false, null, true), - new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.STEEL, null, 25, 999.9, Abilities.IRON_FIST, Abilities.NONE, Abilities.NONE, 700, 175, 165, 155, 85, 75, 45, 3, 0, 300), + new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.STEEL, null, 25, 999.9, Abilities.IRON_FIST, Abilities.NONE, Abilities.NONE, 700, 170, 158, 158, 95, 75, 44, 3, 0, 300), ), new PokemonSpecies(Species.GROOKEY, 8, false, false, false, "Chimp Pokémon", PokemonType.GRASS, null, 0.3, 5, Abilities.OVERGROW, Abilities.NONE, Abilities.GRASSY_SURGE, 310, 50, 65, 50, 40, 40, 65, 45, 50, 62, GrowthRate.MEDIUM_SLOW, 87.5, false), new PokemonSpecies(Species.THWACKEY, 8, false, false, false, "Beat Pokémon", PokemonType.GRASS, null, 0.7, 14, Abilities.OVERGROW, Abilities.NONE, Abilities.GRASSY_SURGE, 420, 70, 85, 70, 55, 60, 80, 45, 50, 147, GrowthRate.MEDIUM_SLOW, 87.5, false), new PokemonSpecies(Species.RILLABOOM, 8, false, false, false, "Drummer Pokémon", PokemonType.GRASS, null, 2.1, 90, Abilities.OVERGROW, Abilities.NONE, Abilities.GRASSY_SURGE, 530, 100, 125, 90, 60, 70, 85, 45, 50, 265, GrowthRate.MEDIUM_SLOW, 87.5, false, true, new PokemonForm("Normal", "", PokemonType.GRASS, null, 2.1, 90, Abilities.OVERGROW, Abilities.NONE, Abilities.GRASSY_SURGE, 530, 100, 125, 90, 60, 70, 85, 45, 50, 265, false, null, true), - new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.GRASS, null, 28, 999.9, Abilities.GRASSY_SURGE, Abilities.NONE, Abilities.GRASSY_SURGE, 630, 125, 150, 105, 85, 85, 80, 45, 50, 265), + new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.GRASS, null, 28, 999.9, Abilities.GRASSY_SURGE, Abilities.NONE, Abilities.GRASSY_SURGE, 630, 125, 140, 105, 90, 85, 85, 45, 50, 265), ), new PokemonSpecies(Species.SCORBUNNY, 8, false, false, false, "Rabbit Pokémon", PokemonType.FIRE, null, 0.3, 4.5, Abilities.BLAZE, Abilities.NONE, Abilities.LIBERO, 310, 50, 71, 40, 40, 40, 69, 45, 50, 62, GrowthRate.MEDIUM_SLOW, 87.5, false), new PokemonSpecies(Species.RABOOT, 8, false, false, false, "Rabbit Pokémon", PokemonType.FIRE, null, 0.6, 9, Abilities.BLAZE, Abilities.NONE, Abilities.LIBERO, 420, 65, 86, 60, 55, 60, 94, 45, 50, 147, GrowthRate.MEDIUM_SLOW, 87.5, false), new PokemonSpecies(Species.CINDERACE, 8, false, false, false, "Striker Pokémon", PokemonType.FIRE, null, 1.4, 33, Abilities.BLAZE, Abilities.NONE, Abilities.LIBERO, 530, 80, 116, 75, 65, 75, 119, 45, 50, 265, GrowthRate.MEDIUM_SLOW, 87.5, false, true, new PokemonForm("Normal", "", PokemonType.FIRE, null, 1.4, 33, Abilities.BLAZE, Abilities.NONE, Abilities.LIBERO, 530, 80, 116, 75, 65, 75, 119, 45, 50, 265, false, null, true), - new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.FIRE, null, 27, 999.9, Abilities.LIBERO, Abilities.NONE, Abilities.LIBERO, 630, 100, 146, 80, 90, 80, 134, 45, 50, 265), + new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.FIRE, null, 27, 999.9, Abilities.LIBERO, Abilities.NONE, Abilities.LIBERO, 630, 100, 141, 80, 95, 80, 134, 45, 50, 265), ), new PokemonSpecies(Species.SOBBLE, 8, false, false, false, "Water Lizard Pokémon", PokemonType.WATER, null, 0.3, 4, Abilities.TORRENT, Abilities.NONE, Abilities.SNIPER, 310, 50, 40, 40, 70, 40, 70, 45, 50, 62, GrowthRate.MEDIUM_SLOW, 87.5, false), new PokemonSpecies(Species.DRIZZILE, 8, false, false, false, "Water Lizard Pokémon", PokemonType.WATER, null, 0.7, 11.5, Abilities.TORRENT, Abilities.NONE, Abilities.SNIPER, 420, 65, 60, 55, 95, 55, 90, 45, 50, 147, GrowthRate.MEDIUM_SLOW, 87.5, false), new PokemonSpecies(Species.INTELEON, 8, false, false, false, "Secret Agent Pokémon", PokemonType.WATER, null, 1.9, 45.2, Abilities.TORRENT, Abilities.NONE, Abilities.SNIPER, 530, 70, 85, 65, 125, 65, 120, 45, 50, 265, GrowthRate.MEDIUM_SLOW, 87.5, false, true, new PokemonForm("Normal", "", PokemonType.WATER, null, 1.9, 45.2, Abilities.TORRENT, Abilities.NONE, Abilities.SNIPER, 530, 70, 85, 65, 125, 65, 120, 45, 50, 265, false, null, true), - new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.WATER, null, 40, 999.9, Abilities.SNIPER, Abilities.NONE, Abilities.SNIPER, 630, 95, 97, 77, 147, 77, 137, 45, 50, 265), + new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.WATER, null, 40, 999.9, Abilities.SNIPER, Abilities.NONE, Abilities.SNIPER, 630, 95, 117, 67, 147, 67, 137, 45, 50, 265), ), new PokemonSpecies(Species.SKWOVET, 8, false, false, false, "Cheeky Pokémon", PokemonType.NORMAL, null, 0.3, 2.5, Abilities.CHEEK_POUCH, Abilities.NONE, Abilities.GLUTTONY, 275, 70, 55, 55, 35, 35, 25, 255, 50, 55, GrowthRate.MEDIUM_FAST, 50, false), new PokemonSpecies(Species.GREEDENT, 8, false, false, false, "Greedy Pokémon", PokemonType.NORMAL, null, 0.6, 6, Abilities.CHEEK_POUCH, Abilities.NONE, Abilities.GLUTTONY, 460, 120, 95, 95, 55, 75, 20, 90, 50, 161, GrowthRate.MEDIUM_FAST, 50, false), @@ -2733,13 +2740,13 @@ export function initSpecies() { new PokemonSpecies(Species.CORVISQUIRE, 8, false, false, false, "Raven Pokémon", PokemonType.FLYING, null, 0.8, 16, Abilities.KEEN_EYE, Abilities.UNNERVE, Abilities.BIG_PECKS, 365, 68, 67, 55, 43, 55, 77, 120, 50, 128, GrowthRate.MEDIUM_SLOW, 50, false), new PokemonSpecies(Species.CORVIKNIGHT, 8, false, false, false, "Raven Pokémon", PokemonType.FLYING, PokemonType.STEEL, 2.2, 75, Abilities.PRESSURE, Abilities.UNNERVE, Abilities.MIRROR_ARMOR, 495, 98, 87, 105, 53, 85, 67, 45, 50, 248, GrowthRate.MEDIUM_SLOW, 50, false, true, new PokemonForm("Normal", "", PokemonType.FLYING, PokemonType.STEEL, 2.2, 75, Abilities.PRESSURE, Abilities.UNNERVE, Abilities.MIRROR_ARMOR, 495, 98, 87, 105, 53, 85, 67, 45, 50, 248, false, null, true), - new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.FLYING, PokemonType.STEEL, 14, 999.9, Abilities.MIRROR_ARMOR, Abilities.MIRROR_ARMOR, Abilities.MIRROR_ARMOR, 595, 128, 102, 140, 53, 95, 77, 45, 50, 248), + new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.FLYING, PokemonType.STEEL, 14, 999.9, Abilities.MIRROR_ARMOR, Abilities.MIRROR_ARMOR, Abilities.MIRROR_ARMOR, 595, 118, 112, 135, 63, 90, 77, 45, 50, 248), ), new PokemonSpecies(Species.BLIPBUG, 8, false, false, false, "Larva Pokémon", PokemonType.BUG, null, 0.4, 8, Abilities.SWARM, Abilities.COMPOUND_EYES, Abilities.TELEPATHY, 180, 25, 20, 20, 25, 45, 45, 255, 50, 36, GrowthRate.MEDIUM_FAST, 50, false), new PokemonSpecies(Species.DOTTLER, 8, false, false, false, "Radome Pokémon", PokemonType.BUG, PokemonType.PSYCHIC, 0.4, 19.5, Abilities.SWARM, Abilities.COMPOUND_EYES, Abilities.TELEPATHY, 335, 50, 35, 80, 50, 90, 30, 120, 50, 117, GrowthRate.MEDIUM_FAST, 50, false), new PokemonSpecies(Species.ORBEETLE, 8, false, false, false, "Seven Spot Pokémon", PokemonType.BUG, PokemonType.PSYCHIC, 0.4, 40.8, Abilities.SWARM, Abilities.FRISK, Abilities.TELEPATHY, 505, 60, 45, 110, 80, 120, 90, 45, 50, 253, GrowthRate.MEDIUM_FAST, 50, false, true, new PokemonForm("Normal", "", PokemonType.BUG, PokemonType.PSYCHIC, 0.4, 40.8, Abilities.SWARM, Abilities.FRISK, Abilities.TELEPATHY, 505, 60, 45, 110, 80, 120, 90, 45, 50, 253, false, null, true), - new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.BUG, PokemonType.PSYCHIC, 14, 999.9, Abilities.TRACE, Abilities.TRACE, Abilities.TRACE, 605, 90, 45, 130, 110, 140, 90, 45, 50, 253), + new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.BUG, PokemonType.PSYCHIC, 14, 999.9, Abilities.TRACE, Abilities.TRACE, Abilities.TRACE, 605, 75, 50, 140, 100, 150, 90, 45, 50, 253), ), new PokemonSpecies(Species.NICKIT, 8, false, false, false, "Fox Pokémon", PokemonType.DARK, null, 0.6, 8.9, Abilities.RUN_AWAY, Abilities.UNBURDEN, Abilities.STAKEOUT, 245, 40, 28, 28, 47, 52, 50, 255, 50, 49, GrowthRate.FAST, 50, false), new PokemonSpecies(Species.THIEVUL, 8, false, false, false, "Fox Pokémon", PokemonType.DARK, null, 1.2, 19.9, Abilities.RUN_AWAY, Abilities.UNBURDEN, Abilities.STAKEOUT, 455, 70, 58, 58, 87, 92, 90, 127, 50, 159, GrowthRate.FAST, 50, false), @@ -2750,7 +2757,7 @@ export function initSpecies() { new PokemonSpecies(Species.CHEWTLE, 8, false, false, false, "Snapping Pokémon", PokemonType.WATER, null, 0.3, 8.5, Abilities.STRONG_JAW, Abilities.SHELL_ARMOR, Abilities.SWIFT_SWIM, 284, 50, 64, 50, 38, 38, 44, 255, 50, 57, GrowthRate.MEDIUM_FAST, 50, false), new PokemonSpecies(Species.DREDNAW, 8, false, false, false, "Bite Pokémon", PokemonType.WATER, PokemonType.ROCK, 1, 115.5, Abilities.STRONG_JAW, Abilities.SHELL_ARMOR, Abilities.SWIFT_SWIM, 485, 90, 115, 90, 48, 68, 74, 75, 50, 170, GrowthRate.MEDIUM_FAST, 50, false, true, new PokemonForm("Normal", "", PokemonType.WATER, PokemonType.ROCK, 1, 115.5, Abilities.STRONG_JAW, Abilities.SHELL_ARMOR, Abilities.SWIFT_SWIM, 485, 90, 115, 90, 48, 68, 74, 75, 50, 170, false, null, true), - new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.WATER, PokemonType.ROCK, 24, 999.9, Abilities.STRONG_JAW, Abilities.STRONG_JAW, Abilities.STRONG_JAW, 585, 115, 145, 115, 43, 83, 84, 75, 50, 170), + new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.WATER, PokemonType.ROCK, 24, 999.9, Abilities.STRONG_JAW, Abilities.STRONG_JAW, Abilities.STRONG_JAW, 585, 115, 137, 115, 61, 83, 74, 75, 50, 170), ), new PokemonSpecies(Species.YAMPER, 8, false, false, false, "Puppy Pokémon", PokemonType.ELECTRIC, null, 0.3, 13.5, Abilities.BALL_FETCH, Abilities.NONE, Abilities.RATTLED, 270, 59, 45, 50, 40, 50, 26, 255, 50, 54, GrowthRate.FAST, 50, false), new PokemonSpecies(Species.BOLTUND, 8, false, false, false, "Dog Pokémon", PokemonType.ELECTRIC, null, 1, 34, Abilities.STRONG_JAW, Abilities.NONE, Abilities.COMPETITIVE, 490, 69, 90, 60, 90, 60, 121, 45, 50, 172, GrowthRate.FAST, 50, false), @@ -2758,21 +2765,21 @@ export function initSpecies() { new PokemonSpecies(Species.CARKOL, 8, false, false, false, "Coal Pokémon", PokemonType.ROCK, PokemonType.FIRE, 1.1, 78, Abilities.STEAM_ENGINE, Abilities.FLAME_BODY, Abilities.FLASH_FIRE, 410, 80, 60, 90, 60, 70, 50, 120, 50, 144, GrowthRate.MEDIUM_SLOW, 50, false), new PokemonSpecies(Species.COALOSSAL, 8, false, false, false, "Coal Pokémon", PokemonType.ROCK, PokemonType.FIRE, 2.8, 310.5, Abilities.STEAM_ENGINE, Abilities.FLAME_BODY, Abilities.FLASH_FIRE, 510, 110, 80, 120, 80, 90, 30, 45, 50, 255, GrowthRate.MEDIUM_SLOW, 50, false, true, new PokemonForm("Normal", "", PokemonType.ROCK, PokemonType.FIRE, 2.8, 310.5, Abilities.STEAM_ENGINE, Abilities.FLAME_BODY, Abilities.FLASH_FIRE, 510, 110, 80, 120, 80, 90, 30, 45, 50, 255, false, null, true), - new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.ROCK, PokemonType.FIRE, 42, 999.9, Abilities.STEAM_ENGINE, Abilities.STEAM_ENGINE, Abilities.STEAM_ENGINE, 610, 140, 95, 130, 95, 110, 40, 45, 50, 255), + new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.ROCK, PokemonType.FIRE, 42, 999.9, Abilities.STEAM_ENGINE, Abilities.STEAM_ENGINE, Abilities.STEAM_ENGINE, 610, 140, 100, 132, 95, 100, 43, 45, 50, 255), ), new PokemonSpecies(Species.APPLIN, 8, false, false, false, "Apple Core Pokémon", PokemonType.GRASS, PokemonType.DRAGON, 0.2, 0.5, Abilities.RIPEN, Abilities.GLUTTONY, Abilities.BULLETPROOF, 260, 40, 40, 80, 40, 40, 20, 255, 50, 52, GrowthRate.ERRATIC, 50, false), new PokemonSpecies(Species.FLAPPLE, 8, false, false, false, "Apple Wing Pokémon", PokemonType.GRASS, PokemonType.DRAGON, 0.3, 1, Abilities.RIPEN, Abilities.GLUTTONY, Abilities.HUSTLE, 485, 70, 110, 80, 95, 60, 70, 45, 50, 170, GrowthRate.ERRATIC, 50, false, true, new PokemonForm("Normal", "", PokemonType.GRASS, PokemonType.DRAGON, 0.3, 1, Abilities.RIPEN, Abilities.GLUTTONY, Abilities.HUSTLE, 485, 70, 110, 80, 95, 60, 70, 45, 50, 170, false, null, true), - new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.GRASS, PokemonType.DRAGON, 24, 999.9, Abilities.HUSTLE, Abilities.HUSTLE, Abilities.HUSTLE, 585, 90, 130, 100, 85, 80, 100, 45, 50, 170), + new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.GRASS, PokemonType.DRAGON, 24, 999.9, Abilities.HUSTLE, Abilities.HUSTLE, Abilities.HUSTLE, 585, 100, 125, 90, 105, 70, 95, 45, 50, 170), ), new PokemonSpecies(Species.APPLETUN, 8, false, false, false, "Apple Nectar Pokémon", PokemonType.GRASS, PokemonType.DRAGON, 0.4, 13, Abilities.RIPEN, Abilities.GLUTTONY, Abilities.THICK_FAT, 485, 110, 85, 80, 100, 80, 30, 45, 50, 170, GrowthRate.ERRATIC, 50, false, true, new PokemonForm("Normal", "", PokemonType.GRASS, PokemonType.DRAGON, 0.4, 13, Abilities.RIPEN, Abilities.GLUTTONY, Abilities.THICK_FAT, 485, 110, 85, 80, 100, 80, 30, 45, 50, 170, false, null, true), - new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.GRASS, PokemonType.DRAGON, 24, 999.9, Abilities.THICK_FAT, Abilities.THICK_FAT, Abilities.THICK_FAT, 585, 130, 75, 115, 125, 115, 25, 45, 50, 170), + new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.GRASS, PokemonType.DRAGON, 24, 999.9, Abilities.THICK_FAT, Abilities.THICK_FAT, Abilities.THICK_FAT, 585, 150, 100, 95, 115, 95, 30, 45, 50, 170), ), new PokemonSpecies(Species.SILICOBRA, 8, false, false, false, "Sand Snake Pokémon", PokemonType.GROUND, null, 2.2, 7.6, Abilities.SAND_SPIT, Abilities.SHED_SKIN, Abilities.SAND_VEIL, 315, 52, 57, 75, 35, 50, 46, 255, 50, 63, GrowthRate.MEDIUM_FAST, 50, false), new PokemonSpecies(Species.SANDACONDA, 8, false, false, false, "Sand Snake Pokémon", PokemonType.GROUND, null, 3.8, 65.5, Abilities.SAND_SPIT, Abilities.SHED_SKIN, Abilities.SAND_VEIL, 510, 72, 107, 125, 65, 70, 71, 120, 50, 179, GrowthRate.MEDIUM_FAST, 50, false, true, new PokemonForm("Normal", "", PokemonType.GROUND, null, 3.8, 65.5, Abilities.SAND_SPIT, Abilities.SHED_SKIN, Abilities.SAND_VEIL, 510, 72, 107, 125, 65, 70, 71, 120, 50, 179, false, null, true), - new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.GROUND, null, 22, 999.9, Abilities.SAND_SPIT, Abilities.SAND_SPIT, Abilities.SAND_SPIT, 610, 117, 137, 140, 55, 80, 81, 120, 50, 179), + new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.GROUND, null, 22, 999.9, Abilities.SAND_SPIT, Abilities.SAND_SPIT, Abilities.SAND_SPIT, 610, 102, 137, 140, 70, 80, 81, 120, 50, 179), ), new PokemonSpecies(Species.CRAMORANT, 8, false, false, false, "Gulp Pokémon", PokemonType.FLYING, PokemonType.WATER, 0.8, 18, Abilities.GULP_MISSILE, Abilities.NONE, Abilities.NONE, 475, 70, 85, 55, 85, 95, 85, 45, 50, 166, GrowthRate.MEDIUM_FAST, 50, false, false, new PokemonForm("Normal", "", PokemonType.FLYING, PokemonType.WATER, 0.8, 18, Abilities.GULP_MISSILE, Abilities.NONE, Abilities.NONE, 475, 70, 85, 55, 85, 95, 85, 45, 50, 166, false, null, true), @@ -2785,12 +2792,12 @@ export function initSpecies() { new PokemonSpecies(Species.TOXTRICITY, 8, false, false, false, "Punk Pokémon", PokemonType.ELECTRIC, PokemonType.POISON, 1.6, 40, Abilities.PUNK_ROCK, Abilities.PLUS, Abilities.TECHNICIAN, 502, 75, 98, 70, 114, 70, 75, 45, 50, 176, GrowthRate.MEDIUM_SLOW, 50, false, true, new PokemonForm("Amped Form", "amped", PokemonType.ELECTRIC, PokemonType.POISON, 1.6, 40, Abilities.PUNK_ROCK, Abilities.PLUS, Abilities.TECHNICIAN, 502, 75, 98, 70, 114, 70, 75, 45, 50, 176, false, "", true), new PokemonForm("Low-Key Form", "lowkey", PokemonType.ELECTRIC, PokemonType.POISON, 1.6, 40, Abilities.PUNK_ROCK, Abilities.MINUS, Abilities.TECHNICIAN, 502, 75, 98, 70, 114, 70, 75, 45, 50, 176, false, "lowkey", true), - new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.ELECTRIC, PokemonType.POISON, 24, 999.9, Abilities.PUNK_ROCK, Abilities.PUNK_ROCK, Abilities.PUNK_ROCK, 602, 114, 98, 82, 144, 82, 82, 45, 50, 176), + new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.ELECTRIC, PokemonType.POISON, 24, 999.9, Abilities.PUNK_ROCK, Abilities.PUNK_ROCK, Abilities.PUNK_ROCK, 602, 114, 105, 82, 137, 82, 82, 45, 50, 176), ), new PokemonSpecies(Species.SIZZLIPEDE, 8, false, false, false, "Radiator Pokémon", PokemonType.FIRE, PokemonType.BUG, 0.7, 1, Abilities.FLASH_FIRE, Abilities.WHITE_SMOKE, Abilities.FLAME_BODY, 305, 50, 65, 45, 50, 50, 45, 190, 50, 61, GrowthRate.MEDIUM_FAST, 50, false), new PokemonSpecies(Species.CENTISKORCH, 8, false, false, false, "Radiator Pokémon", PokemonType.FIRE, PokemonType.BUG, 3, 120, Abilities.FLASH_FIRE, Abilities.WHITE_SMOKE, Abilities.FLAME_BODY, 525, 100, 115, 65, 90, 90, 65, 75, 50, 184, GrowthRate.MEDIUM_FAST, 50, false, true, new PokemonForm("Normal", "", PokemonType.FIRE, PokemonType.BUG, 3, 120, Abilities.FLASH_FIRE, Abilities.WHITE_SMOKE, Abilities.FLAME_BODY, 525, 100, 115, 65, 90, 90, 65, 75, 50, 184, false, null, true), - new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.FIRE, PokemonType.BUG, 75, 999.9, Abilities.FLASH_FIRE, Abilities.FLASH_FIRE, Abilities.FLASH_FIRE, 625, 140, 145, 75, 90, 100, 75, 75, 50, 184), + new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.FIRE, PokemonType.BUG, 75, 999.9, Abilities.FLASH_FIRE, Abilities.FLASH_FIRE, Abilities.FLASH_FIRE, 625, 130, 125, 75, 94, 100, 101, 75, 50, 184), ), new PokemonSpecies(Species.CLOBBOPUS, 8, false, false, false, "Tantrum Pokémon", PokemonType.FIGHTING, null, 0.6, 4, Abilities.LIMBER, Abilities.NONE, Abilities.TECHNICIAN, 310, 50, 68, 60, 50, 50, 32, 180, 50, 62, GrowthRate.MEDIUM_SLOW, 50, false), new PokemonSpecies(Species.GRAPPLOCT, 8, false, false, false, "Jujitsu Pokémon", PokemonType.FIGHTING, null, 1.6, 39, Abilities.LIMBER, Abilities.NONE, Abilities.TECHNICIAN, 480, 80, 118, 90, 70, 80, 42, 45, 50, 168, GrowthRate.MEDIUM_SLOW, 50, false), @@ -2806,13 +2813,13 @@ export function initSpecies() { new PokemonSpecies(Species.HATTREM, 8, false, false, false, "Serene Pokémon", PokemonType.PSYCHIC, null, 0.6, 4.8, Abilities.HEALER, Abilities.ANTICIPATION, Abilities.MAGIC_BOUNCE, 370, 57, 40, 65, 86, 73, 49, 120, 50, 130, GrowthRate.SLOW, 0, false), new PokemonSpecies(Species.HATTERENE, 8, false, false, false, "Silent Pokémon", PokemonType.PSYCHIC, PokemonType.FAIRY, 2.1, 5.1, Abilities.HEALER, Abilities.ANTICIPATION, Abilities.MAGIC_BOUNCE, 510, 57, 90, 95, 136, 103, 29, 45, 50, 255, GrowthRate.SLOW, 0, false, true, new PokemonForm("Normal", "", PokemonType.PSYCHIC, PokemonType.FAIRY, 2.1, 5.1, Abilities.HEALER, Abilities.ANTICIPATION, Abilities.MAGIC_BOUNCE, 510, 57, 90, 95, 136, 103, 29, 45, 50, 255, false, null, true), - new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.PSYCHIC, PokemonType.FAIRY, 26, 999.9, Abilities.MAGIC_BOUNCE, Abilities.MAGIC_BOUNCE, Abilities.MAGIC_BOUNCE, 610, 97, 90, 105, 146, 122, 50, 45, 50, 255), + new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.PSYCHIC, PokemonType.FAIRY, 26, 999.9, Abilities.MAGIC_BOUNCE, Abilities.MAGIC_BOUNCE, Abilities.MAGIC_BOUNCE, 610, 87, 100, 110, 146, 118, 49, 45, 50, 255), ), new PokemonSpecies(Species.IMPIDIMP, 8, false, false, false, "Wily Pokémon", PokemonType.DARK, PokemonType.FAIRY, 0.4, 5.5, Abilities.PRANKSTER, Abilities.FRISK, Abilities.PICKPOCKET, 265, 45, 45, 30, 55, 40, 50, 255, 50, 53, GrowthRate.MEDIUM_FAST, 100, false), new PokemonSpecies(Species.MORGREM, 8, false, false, false, "Devious Pokémon", PokemonType.DARK, PokemonType.FAIRY, 0.8, 12.5, Abilities.PRANKSTER, Abilities.FRISK, Abilities.PICKPOCKET, 370, 65, 60, 45, 75, 55, 70, 120, 50, 130, GrowthRate.MEDIUM_FAST, 100, false), new PokemonSpecies(Species.GRIMMSNARL, 8, false, false, false, "Bulk Up Pokémon", PokemonType.DARK, PokemonType.FAIRY, 1.5, 61, Abilities.PRANKSTER, Abilities.FRISK, Abilities.PICKPOCKET, 510, 95, 120, 65, 95, 75, 60, 45, 50, 255, GrowthRate.MEDIUM_FAST, 100, false, true, new PokemonForm("Normal", "", PokemonType.DARK, PokemonType.FAIRY, 1.5, 61, Abilities.PRANKSTER, Abilities.FRISK, Abilities.PICKPOCKET, 510, 95, 120, 65, 95, 75, 60, 45, 50, 255, false, null, true), - new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.DARK, PokemonType.FAIRY, 32, 999.9, Abilities.PRANKSTER, Abilities.PRANKSTER, Abilities.PRANKSTER, 610, 135, 138, 77, 110, 85, 65, 45, 50, 255), + new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.DARK, PokemonType.FAIRY, 32, 999.9, Abilities.PRANKSTER, Abilities.PRANKSTER, Abilities.PRANKSTER, 610, 130, 138, 75, 110, 92, 65, 45, 50, 255), ), new PokemonSpecies(Species.OBSTAGOON, 8, false, false, false, "Blocking Pokémon", PokemonType.DARK, PokemonType.NORMAL, 1.6, 46, Abilities.RECKLESS, Abilities.GUTS, Abilities.DEFIANT, 520, 93, 90, 101, 60, 81, 95, 45, 50, 260, GrowthRate.MEDIUM_FAST, 50, false), new PokemonSpecies(Species.PERRSERKER, 8, false, false, false, "Viking Pokémon", PokemonType.STEEL, null, 0.8, 28, Abilities.BATTLE_ARMOR, Abilities.TOUGH_CLAWS, Abilities.STEELY_SPIRIT, 440, 70, 110, 100, 50, 60, 50, 90, 50, 154, GrowthRate.MEDIUM_FAST, 50, false), @@ -2831,7 +2838,7 @@ export function initSpecies() { new PokemonForm("Ruby Swirl", "ruby-swirl", PokemonType.FAIRY, null, 0.3, 0.5, Abilities.SWEET_VEIL, Abilities.NONE, Abilities.AROMA_VEIL, 495, 65, 60, 75, 110, 121, 64, 100, 50, 173, false, null, true), new PokemonForm("Caramel Swirl", "caramel-swirl", PokemonType.FAIRY, null, 0.3, 0.5, Abilities.SWEET_VEIL, Abilities.NONE, Abilities.AROMA_VEIL, 495, 65, 60, 75, 110, 121, 64, 100, 50, 173, false, null, true), new PokemonForm("Rainbow Swirl", "rainbow-swirl", PokemonType.FAIRY, null, 0.3, 0.5, Abilities.SWEET_VEIL, Abilities.NONE, Abilities.AROMA_VEIL, 495, 65, 60, 75, 110, 121, 64, 100, 50, 173, false, null, true), - new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.FAIRY, null, 30, 999.9, Abilities.MISTY_SURGE, Abilities.NONE, Abilities.MISTY_SURGE, 595, 135, 60, 75, 130, 131, 64, 100, 50, 173), + new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.FAIRY, null, 30, 999.9, Abilities.MISTY_SURGE, Abilities.NONE, Abilities.MISTY_SURGE, 595, 105, 70, 85, 130, 141, 64, 100, 50, 173), ), new PokemonSpecies(Species.FALINKS, 8, false, false, false, "Formation Pokémon", PokemonType.FIGHTING, null, 3, 62, Abilities.BATTLE_ARMOR, Abilities.NONE, Abilities.DEFIANT, 470, 65, 100, 100, 70, 60, 75, 45, 50, 165, GrowthRate.MEDIUM_FAST, null, false), new PokemonSpecies(Species.PINCURCHIN, 8, false, false, false, "Sea Urchin Pokémon", PokemonType.ELECTRIC, null, 0.3, 1, Abilities.LIGHTNING_ROD, Abilities.NONE, Abilities.ELECTRIC_SURGE, 435, 48, 101, 95, 91, 85, 15, 75, 50, 152, GrowthRate.MEDIUM_FAST, 50, false), @@ -2853,7 +2860,7 @@ export function initSpecies() { new PokemonSpecies(Species.CUFANT, 8, false, false, false, "Copperderm Pokémon", PokemonType.STEEL, null, 1.2, 100, Abilities.SHEER_FORCE, Abilities.NONE, Abilities.HEAVY_METAL, 330, 72, 80, 49, 40, 49, 40, 190, 50, 66, GrowthRate.MEDIUM_FAST, 50, false), new PokemonSpecies(Species.COPPERAJAH, 8, false, false, false, "Copperderm Pokémon", PokemonType.STEEL, null, 3, 650, Abilities.SHEER_FORCE, Abilities.NONE, Abilities.HEAVY_METAL, 500, 122, 130, 69, 80, 69, 30, 90, 50, 175, GrowthRate.MEDIUM_FAST, 50, false, true, new PokemonForm("Normal", "", PokemonType.STEEL, null, 3, 650, Abilities.SHEER_FORCE, Abilities.NONE, Abilities.HEAVY_METAL, 500, 122, 130, 69, 80, 69, 30, 90, 50, 175, false, null, true), - new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.STEEL, PokemonType.GROUND, 23, 999.9, Abilities.MOLD_BREAKER, Abilities.NONE, Abilities.MOLD_BREAKER, 600, 167, 155, 89, 80, 89, 20, 90, 50, 175), + new PokemonForm("G-Max", SpeciesFormKey.GIGANTAMAX, PokemonType.STEEL, PokemonType.GROUND, 23, 999.9, Abilities.MOLD_BREAKER, Abilities.NONE, Abilities.MOLD_BREAKER, 600, 177, 155, 79, 90, 79, 20, 90, 50, 175), ), new PokemonSpecies(Species.DRACOZOLT, 8, false, false, false, "Fossil Pokémon", PokemonType.ELECTRIC, PokemonType.DRAGON, 1.8, 190, Abilities.VOLT_ABSORB, Abilities.HUSTLE, Abilities.SAND_RUSH, 505, 90, 100, 90, 80, 70, 75, 45, 50, 177, GrowthRate.SLOW, null, false), new PokemonSpecies(Species.ARCTOZOLT, 8, false, false, false, "Fossil Pokémon", PokemonType.ELECTRIC, PokemonType.ICE, 2.3, 150, Abilities.VOLT_ABSORB, Abilities.STATIC, Abilities.SLUSH_RUSH, 505, 90, 100, 90, 90, 80, 55, 45, 50, 177, GrowthRate.SLOW, null, false), @@ -2882,8 +2889,8 @@ export function initSpecies() { new PokemonSpecies(Species.URSHIFU, 8, true, false, false, "Wushu Pokémon", PokemonType.FIGHTING, PokemonType.DARK, 1.9, 105, Abilities.UNSEEN_FIST, Abilities.NONE, Abilities.NONE, 550, 100, 130, 100, 63, 60, 97, 3, 50, 275, GrowthRate.SLOW, 87.5, false, true, new PokemonForm("Single Strike Style", "single-strike", PokemonType.FIGHTING, PokemonType.DARK, 1.9, 105, Abilities.UNSEEN_FIST, Abilities.NONE, Abilities.NONE, 550, 100, 130, 100, 63, 60, 97, 3, 50, 275, false, "", true), new PokemonForm("Rapid Strike Style", "rapid-strike", PokemonType.FIGHTING, PokemonType.WATER, 1.9, 105, Abilities.UNSEEN_FIST, Abilities.NONE, Abilities.NONE, 550, 100, 130, 100, 63, 60, 97, 3, 50, 275, false, null, true), - new PokemonForm("G-Max Single Strike Style", SpeciesFormKey.GIGANTAMAX_SINGLE, PokemonType.FIGHTING, PokemonType.DARK, 29, 999.9, Abilities.UNSEEN_FIST, Abilities.NONE, Abilities.NONE, 650, 125, 150, 115, 73, 70, 117, 3, 50, 275), - new PokemonForm("G-Max Rapid Strike Style", SpeciesFormKey.GIGANTAMAX_RAPID, PokemonType.FIGHTING, PokemonType.WATER, 26, 999.9, Abilities.UNSEEN_FIST, Abilities.NONE, Abilities.NONE, 650, 125, 150, 115, 73, 70, 117, 3, 50, 275), + new PokemonForm("G-Max Single Strike Style", SpeciesFormKey.GIGANTAMAX_SINGLE, PokemonType.FIGHTING, PokemonType.DARK, 29, 999.9, Abilities.UNSEEN_FIST, Abilities.NONE, Abilities.NONE, 650, 125, 145, 115, 83, 70, 112, 3, 50, 275), + new PokemonForm("G-Max Rapid Strike Style", SpeciesFormKey.GIGANTAMAX_RAPID, PokemonType.FIGHTING, PokemonType.WATER, 26, 999.9, Abilities.UNSEEN_FIST, Abilities.NONE, Abilities.NONE, 650, 125, 145, 115, 83, 70, 112, 3, 50, 275), ), new PokemonSpecies(Species.ZARUDE, 8, false, false, true, "Rogue Monkey Pokémon", PokemonType.DARK, PokemonType.GRASS, 1.8, 70, Abilities.LEAF_GUARD, Abilities.NONE, Abilities.NONE, 600, 105, 120, 105, 70, 95, 105, 3, 0, 300, GrowthRate.SLOW, null, false, false, new PokemonForm("Normal", "", PokemonType.DARK, PokemonType.GRASS, 1.8, 70, Abilities.LEAF_GUARD, Abilities.NONE, Abilities.NONE, 600, 105, 120, 105, 70, 95, 105, 3, 0, 300, false, null, true), @@ -3054,11 +3061,11 @@ export function initSpecies() { new PokemonSpecies(Species.DIPPLIN, 9, false, false, false, "Candy Apple Pokémon", PokemonType.GRASS, PokemonType.DRAGON, 0.4, 9.7, Abilities.SUPERSWEET_SYRUP, Abilities.GLUTTONY, Abilities.STICKY_HOLD, 485, 80, 80, 110, 95, 80, 40, 45, 50, 170, GrowthRate.ERRATIC, 50, false), new PokemonSpecies(Species.POLTCHAGEIST, 9, false, false, false, "Matcha Pokémon", PokemonType.GRASS, PokemonType.GHOST, 0.1, 1.1, Abilities.HOSPITALITY, Abilities.NONE, Abilities.HEATPROOF, 308, 40, 45, 45, 74, 54, 50, 120, 50, 62, GrowthRate.SLOW, null, false, false, new PokemonForm("Counterfeit Form", "counterfeit", PokemonType.GRASS, PokemonType.GHOST, 0.1, 1.1, Abilities.HOSPITALITY, Abilities.NONE, Abilities.HEATPROOF, 308, 40, 45, 45, 74, 54, 50, 120, 50, 62, false, null, true), - new PokemonForm("Artisan Form", "artisan", PokemonType.GRASS, PokemonType.GHOST, 0.1, 1.1, Abilities.HOSPITALITY, Abilities.NONE, Abilities.HEATPROOF, 308, 40, 45, 45, 74, 54, 50, 120, 50, 62, false, null, true), + new PokemonForm("Artisan Form", "artisan", PokemonType.GRASS, PokemonType.GHOST, 0.1, 1.1, Abilities.HOSPITALITY, Abilities.NONE, Abilities.HEATPROOF, 308, 40, 45, 45, 74, 54, 50, 120, 50, 62, false, null, false, true), ), new PokemonSpecies(Species.SINISTCHA, 9, false, false, false, "Matcha Pokémon", PokemonType.GRASS, PokemonType.GHOST, 0.2, 2.2, Abilities.HOSPITALITY, Abilities.NONE, Abilities.HEATPROOF, 508, 71, 60, 106, 121, 80, 70, 60, 50, 178, GrowthRate.SLOW, null, false, false, new PokemonForm("Unremarkable Form", "unremarkable", PokemonType.GRASS, PokemonType.GHOST, 0.2, 2.2, Abilities.HOSPITALITY, Abilities.NONE, Abilities.HEATPROOF, 508, 71, 60, 106, 121, 80, 70, 60, 50, 178), - new PokemonForm("Masterpiece Form", "masterpiece", PokemonType.GRASS, PokemonType.GHOST, 0.2, 2.2, Abilities.HOSPITALITY, Abilities.NONE, Abilities.HEATPROOF, 508, 71, 60, 106, 121, 80, 70, 60, 50, 178), + new PokemonForm("Masterpiece Form", "masterpiece", PokemonType.GRASS, PokemonType.GHOST, 0.2, 2.2, Abilities.HOSPITALITY, Abilities.NONE, Abilities.HEATPROOF, 508, 71, 60, 106, 121, 80, 70, 60, 50, 178, false, null, false, true), ), new PokemonSpecies(Species.OKIDOGI, 9, true, false, false, "Retainer Pokémon", PokemonType.POISON, PokemonType.FIGHTING, 1.8, 92.2, Abilities.TOXIC_CHAIN, Abilities.NONE, Abilities.GUARD_DOG, 555, 88, 128, 115, 58, 86, 80, 3, 0, 276, GrowthRate.SLOW, 100, false), new PokemonSpecies(Species.MUNKIDORI, 9, true, false, false, "Retainer Pokémon", PokemonType.POISON, PokemonType.PSYCHIC, 1, 12.2, Abilities.TOXIC_CHAIN, Abilities.NONE, Abilities.FRISK, 555, 88, 75, 66, 130, 90, 106, 3, 0, 276, GrowthRate.SLOW, 100, false), diff --git a/src/data/splash-messages.ts b/src/data/splash-messages.ts index 9fd71d9d95b..3223bbb019e 100644 --- a/src/data/splash-messages.ts +++ b/src/data/splash-messages.ts @@ -44,14 +44,17 @@ interface Season { //#region Constants /** The weight multiplier for the battles-won splash message */ -const BATTLES_WON_WEIGHT_MULTIPLIER = 10; +const BATTLES_WON_WEIGHT_MULTIPLIER = 15; +/** The weight multiplier for the Pokémon names splash message */ +const POKEMON_NAMES_WEIGHT_MULTIPLIER = 10; /** The weight multiplier for the seasonal splash messages */ -const SEASONAL_WEIGHT_MULTIPLIER = 10; +const SEASONAL_WEIGHT_MULTIPLIER = 15; //#region Common Messages const commonSplashMessages = [ ...Array(BATTLES_WON_WEIGHT_MULTIPLIER).fill("battlesWon"), + ...Array(POKEMON_NAMES_WEIGHT_MULTIPLIER).fill("underratedPokemon"), "joinTheDiscord", "infiniteLevels", "everythingIsStackable", @@ -78,7 +81,7 @@ const commonSplashMessages = [ "mostlyConsistentSeeds", "achievementPointsDontDoAnything", "nothingBeatsAJellyFilledDonut", - "dontTalkAboutTheTinkatonIncident", + "dontTalkAboutThePokemonIncident", "alsoTryPokengine", "alsoTryEmeraldRogue", "alsoTryRadicalRed", @@ -176,16 +179,113 @@ const commonSplashMessages = [ "timeForYourDeliDelivery", "goodFirstImpression", "iPreferRarerCandies", + "pocketRoguelite", + "porygonDidNothingWrong", + "critMattered", + "pickupNotRequired", + "stayHydrated", + "alsoTryCobblemon", + "alsoTryPokeDoku", + "mySleepStyleIsDoesnt", + "makeYourOwnWorldChampDifference", + "yoChampInTheMaking", + "notLiableForDecisionAnxiety", + "theAirIsTastyHere", + "continue", + "startANewRunToday", + "neverGiveUp", + "theresAlwaysNextTime", + "oneTwoThreeAndPoof", + "yourPokemonOnlyGoToLevelOneHundred", + "theBattlesWillBeLegendary", + "levelCurveBetterThanJohto", + "alsoTryShowering", + "wellStillBeHere", + "weHopeToSeeYouAgain", + "aHealthyTeamCanMeanGreaterRewards", + "aWildPokemonAppeared", + "isThisThingOn", + "needsMoreTesting", + "whoChecksStatChanges", + "whenTwoTrainersEyesMeet", + "notOfficiallyOnSteam", + "fiftyFifty", + "metaNotIncluded", + "bornToBeAWinner", + "onARollout", + "itsAlwaysNightDeepInTheAbyss", + "folksThisIsInsane", ]; //#region Seasonal Messages const seasonalSplashMessages: Season[] = [ + { + name: "New Year's", + start: "01-01", + end: "01-15", + messages: ["newYears.happyNewYear", "newYears.andAHappyNewYear"], + }, + { + name: "Valentines", + start: "02-07", + end: "02-21", + messages: [ + "valentines.happyValentines", + "valentines.fullOfLove", + "valentines.applinForYou", + "valentines.thePowerOfLoveIsThreeThirtyBST", + "valentines.haveAHeartScale", + "valentines.i<3You", + ], + }, + { + name: "April Fools", + start: "04-01", + end: "04-03", + messages: [ + "aprilFools.battlesOne", + "aprilFools.aprilFools", + "aprilFools.removedPokemon", + "aprilFools.helloKyleAmber", + "aprilFools.gotcha", + "aprilFools.alsoTryPokerogueTwo", + "aprilFools.nowWithSameScumCountermeasures", + "aprilFools.neverGonnaGiveYouGoodRolls", + "aprilFools.youBumblingBuffoon", + "aprilFools.doubleShinyOddsForTrainersOnly", + "aprilFools.nowWithZMoves", + "aprilFools.newLightType", + "aprilFools.removedMegas", + "aprilFools.nerfedYourFavorites", + "aprilFools.grrr", + "aprilFools.enabledEternatusPassiveGoodLuck", + "aprilFools.theDarkestDaySoundsLikeAFutureProblem", + "aprilFools.tmShopWhen", + "aprilFools.whoIsFinn", + "aprilFools.watchOutForShadowPokemon", + "aprilFools.nowWithDarkTypeLuxray", + "aprilFools.onlyOnPokerogueNetAGAIN", + "aprilFools.noFreeVouchers", + "aprilFools.altffourAchievementPoints", + "aprilFools.rokePogue", + "aprilFools.readMe", + "aprilFools.winningNotIncluded", + "aprilFools.timeForYourSoloUnownRun", + "aprilFools.nowARealTimeStrategyGame", + "aprilFools.nowWithQuickTimeEncounters", + "aprilFools.timeYourInputsForHigherCatchrate", + "aprilFools.certifiedButtonSimulator", + "aprilFools.iHopeYouGetSuckerPunched", + ], + }, { name: "Halloween", - start: "09-15", + start: "10-15", end: "10-31", messages: [ + "halloween.happyHalloween", + "halloween.boo", "halloween.pumpkabooAbout", "halloween.mayContainSpiders", "halloween.spookyScarySkeledirge", @@ -194,23 +294,28 @@ const seasonalSplashMessages: Season[] = [ ], }, { - name: "XMAS", + name: "Winter Holiday", start: "12-01", - end: "12-26", + end: "12-31", messages: [ - "xmas.happyHolidays", - "xmas.unaffilicatedWithDelibirdServices", - "xmas.delibirdSeason", - "xmas.diamondsFromTheSky", - "xmas.holidayStylePikachuNotIncluded", + "winterHoliday.happyHolidays", + "winterHoliday.unaffilicatedWithDelibirdServices", + "winterHoliday.delibirdSeason", + "winterHoliday.diamondsFromTheSky", + "winterHoliday.holidayStylePikachuNotIncluded", + "winterHoliday.delibirdDirectlyToYourHouse", + "winterHoliday.haveAnIceDay", + "winterHoliday.spinTheClaydol", + "winterHoliday.beGoodForGoodnessSake", + "winterHoliday.moomooMilkAndLavaCookies", + "winterHoliday.iNeedAYacheBerry", + "winterHoliday.getJolly", + "winterHoliday.tisTheSeasonToBeSpeSpa", + "winterHoliday.deckTheHalls", + "winterHoliday.saveScummingGetsYouOnTheNaughtyList", + "winterHoliday.badTrainersGetRolycoly", ], }, - { - name: "New Year's", - start: "01-01", - end: "01-31", - messages: ["newYears.happyNewYear"], - }, ]; //#endregion diff --git a/src/data/trainer-names.ts b/src/data/trainer-names.ts index c72356d88ae..195e5041d28 100644 --- a/src/data/trainer-names.ts +++ b/src/data/trainer-names.ts @@ -1,12 +1,12 @@ import { TrainerType } from "#enums/trainer-type"; -import * as Utils from "../utils"; +import { toReadableString } from "#app/utils"; class TrainerNameConfig { public urls: string[]; public femaleUrls: string[] | null; constructor(type: TrainerType, ...urls: string[]) { - this.urls = urls.length ? urls : [Utils.toReadableString(TrainerType[type]).replace(/ /g, "_")]; + this.urls = urls.length ? urls : [toReadableString(TrainerType[type]).replace(/ /g, "_")]; } hasGenderVariant(...femaleUrls: string[]): TrainerNameConfig { @@ -74,2651 +74,6 @@ const trainerNameConfigs: TrainerNameConfigs = { [TrainerType.YOUNGSTER]: new TrainerNameConfig(TrainerType.YOUNGSTER).hasGenderVariant("Lass"), }; -export const trainerNamePools = { - [TrainerType.ACE_TRAINER]: [ - [ - "Aaron", - "Allen", - "Blake", - "Brian", - "Gaven", - "Jake", - "Kevin", - "Mike", - "Nick", - "Paul", - "Ryan", - "Sean", - "Darin", - "Albert", - "Berke", - "Clyde", - "Edgar", - "George", - "Leroy", - "Owen", - "Parker", - "Randall", - "Ruben", - "Samuel", - "Vincent", - "Warren", - "Wilton", - "Zane", - "Alfred", - "Braxton", - "Felix", - "Gerald", - "Jonathan", - "Leonel", - "Marcel", - "Mitchell", - "Quincy", - "Roderick", - "Colby", - "Rolando", - "Yuji", - "Abel", - "Anton", - "Arthur", - "Cesar", - "Dalton", - "Dennis", - "Ernest", - "Garrett", - "Graham", - "Henry", - "Isaiah", - "Jonah", - "Jose", - "Keenan", - "Micah", - "Omar", - "Quinn", - "Rodolfo", - "Saul", - "Sergio", - "Skylar", - "Stefan", - "Zachery", - "Alton", - "Arabella", - "Bonita", - "Cal", - "Cody", - "French", - "Kobe", - "Paulo", - "Shaye", - "Austin", - "Beckett", - "Charlie", - "Corky", - "David", - "Dwayne", - "Elmer", - "Jesse", - "Jared", - "Johan", - "Jordan", - "Kipp", - "Lou", - "Terry", - "Tom", - "Webster", - "Billy", - "Doyle", - "Enzio", - "Geoff", - "Grant", - "Kelsey", - "Miguel", - "Pierce", - "Ray", - "Santino", - "Shel", - "Adelbert", - "Bence", - "Emil", - "Evan", - "Mathis", - "Maxim", - "Neil", - "Rico", - "Robbie", - "Theo", - "Viktor", - "Benedict", - "Cornelius", - "Hisato", - "Leopold", - "Neville", - "Vito", - "Chase", - "Cole", - "Hiroshi", - "Jackson", - "Jim", - "Kekoa", - "Makana", - "Yuki", - "Elwood", - "Seth", - "Alvin", - "Arjun", - "Arnold", - "Cameron", - "Carl", - "Carlton", - "Christopher", - "Dave", - "Dax", - "Dominic", - "Edmund", - "Finn", - "Fred", - "Garret", - "Grayson", - "Jace", - "Jaxson", - "Jay", - "Jirard", - "Johnson", - "Kayden", - "Kite", - "Louis", - "Mac", - "Marty", - "Percy", - "Raymond", - "Ronnie", - "Satch", - "Tim", - "Zach", - "Conner", - "Vince", - "Bedro", - "Boda", - "Botan", - "Daras", - "Dury", - "Herton", - "Rewn", - "Stum", - "Tock", - "Trilo", - "Berki", - "Cruik", - "Dazon", - "Desid", - "Dillot", - "Farfin", - "Forgon", - "Hebel", - "Morfon", - "Moril", - "Shadd", - "Vanhub", - "Bardo", - "Carben", - "Degin", - "Gorps", - "Klept", - "Lask", - "Malex", - "Mopar", - "Niled", - "Noxon", - "Teslor", - "Tetil", - ], - [ - "Beth", - "Carol", - "Cybil", - "Emma", - "Fran", - "Gwen", - "Irene", - "Jenn", - "Joyce", - "Kate", - "Kelly", - "Lois", - "Lola", - "Megan", - "Quinn", - "Reena", - "Cara", - "Alexa", - "Brooke", - "Caroline", - "Elaine", - "Hope", - "Jennifer", - "Jody", - "Julie", - "Lori", - "Mary", - "Michelle", - "Shannon", - "Wendy", - "Alexia", - "Alicia", - "Athena", - "Carolina", - "Cristin", - "Darcy", - "Dianne", - "Halle", - "Jazmyn", - "Katelynn", - "Keira", - "Marley", - "Allyson", - "Kathleen", - "Naomi", - "Alyssa", - "Ariana", - "Brandi", - "Breanna", - "Brenda", - "Brenna", - "Catherine", - "Clarice", - "Dana", - "Deanna", - "Destiny", - "Jamie", - "Jasmin", - "Kassandra", - "Laura", - "Maria", - "Mariah", - "Maya", - "Meagan", - "Mikayla", - "Monique", - "Natasha", - "Olivia", - "Sandra", - "Savannah", - "Sydney", - "Moira", - "Piper", - "Salma", - "Allison", - "Beverly", - "Cathy", - "Cheyenne", - "Clara", - "Dara", - "Eileen", - "Glinda", - "Junko", - "Lena", - "Lucille", - "Mariana", - "Olwen", - "Shanta", - "Stella", - "Angi", - "Belle", - "Chandra", - "Cora", - "Eve", - "Jacqueline", - "Jeanne", - "Juliet", - "Kathrine", - "Layla", - "Lucca", - "Melina", - "Miki", - "Nina", - "Sable", - "Shelly", - "Summer", - "Trish", - "Vicki", - "Alanza", - "Cordelia", - "Hilde", - "Imelda", - "Michele", - "Mireille", - "Claudia", - "Constance", - "Harriet", - "Honor", - "Melba", - "Portia", - "Alexis", - "Angela", - "Karla", - "Lindsey", - "Tori", - "Sheri", - "Jada", - "Kailee", - "Amanda", - "Annie", - "Kindra", - "Kyla", - "Sofia", - "Yvette", - "Becky", - "Flora", - "Gloria", - "Buna", - "Ferda", - "Lehan", - "Liqui", - "Lomen", - "Neira", - "Atilo", - "Detta", - "Gilly", - "Gosney", - "Levens", - "Moden", - "Rask", - "Rateis", - "Rosno", - "Tynan", - "Veron", - "Zoel", - "Cida", - "Dibsin", - "Dodin", - "Ebson", - "Equin", - "Flostin", - "Gabsen", - "Halsion", - "Hileon", - "Quelor", - "Rapeel", - "Roze", - "Tensin", - ], - ], - [TrainerType.ARTIST]: [ - ["Ismael", "William", "Horton", "Pierre", "Zach", "Gough", "Salvador", "Vincent", "Duncan"], - ["Georgia"], - ], - [TrainerType.BACKERS]: [ - ["Alf & Fred", "Hawk & Dar", "Joe & Ross", "Les & Web", "Masa & Yas", "Stu & Art"], - [ - "Ai & Ciel", - "Ami & Eira", - "Cam & Abby", - "Fey & Sue", - "Kat & Phae", - "Kay & Ali", - "Ava & Aya", - "Cleo & Rio", - "May & Mal", - ], - ], - [TrainerType.BACKPACKER]: [ - [ - "Alexander", - "Carlos", - "Herman", - "Jerome", - "Keane", - "Kelsey", - "Kiyo", - "Michael", - "Nate", - "Peter", - "Sam", - "Stephen", - "Talon", - "Terrance", - "Toru", - "Waylon", - "Boone", - "Clifford", - "Ivan", - "Kendall", - "Lowell", - "Randall", - "Reece", - "Roland", - "Shane", - "Walt", - "Farid", - "Heike", - "Joren", - "Lane", - "Roderick", - "Darnell", - "Deon", - "Emory", - "Graeme", - "Grayson", - "Aitor", - "Alex", - "Arturo", - "Asier", - "Jaime", - "Jonathan", - "Julio", - "Kevin", - "Kosuke", - "Lander", - "Markel", - "Mateo", - "Nil", - "Pau", - "Samuel", - ], - [ - "Anna", - "Corin", - "Elaine", - "Emi", - "Jill", - "Kumiko", - "Liz", - "Lois", - "Lora", - "Molly", - "Patty", - "Ruth", - "Vicki", - "Annie", - "Blossom", - "Clara", - "Eileen", - "Mae", - "Myra", - "Rachel", - "Tami", - "Ashley", - "Mikiko", - "Kiana", - "Perdy", - "Maria", - "Yuho", - "Peren", - "Barbara", - "Diane", - ], - ], - [TrainerType.BAKER]: ["Chris", "Jenn", "Lilly"], - [TrainerType.BEAUTY]: [ - "Cassie", - "Julia", - "Olivia", - "Samantha", - "Valerie", - "Victoria", - "Bridget", - "Connie", - "Jessica", - "Johanna", - "Melissa", - "Sheila", - "Shirley", - "Tiffany", - "Namiko", - "Thalia", - "Grace", - "Lola", - "Lori", - "Maura", - "Tamia", - "Cyndy", - "Devon", - "Gabriella", - "Harley", - "Lindsay", - "Nicola", - "Callie", - "Charlotte", - "Kassandra", - "December", - "Fleming", - "Nikola", - "Aimee", - "Anais", - "Brigitte", - "Cassandra", - "Andrea", - "Brittney", - "Carolyn", - "Krystal", - "Alexis", - "Alice", - "Aina", - "Anya", - "Arianna", - "Aubrey", - "Beverly", - "Camille", - "Beauty", - "Evette", - "Hansol", - "Haruka", - "Jill", - "Jo", - "Lana", - "Lois", - "Lucy", - "Mai", - "Nickie", - "Nicole", - "Prita", - "Rose", - "Shelly", - "Suzy", - "Tessa", - "Anita", - "Alissa", - "Rita", - "Cudsy", - "Eloff", - "Miru", - "Minot", - "Nevah", - "Niven", - "Ogoin", - ], - [TrainerType.BIKER]: [ - "Charles", - "Dwayne", - "Glenn", - "Harris", - "Joel", - "Riley", - "Zeke", - "Alex", - "Billy", - "Ernest", - "Gerald", - "Hideo", - "Isaac", - "Jared", - "Jaren", - "Jaxon", - "Jordy", - "Lao", - "Lukas", - "Malik", - "Nikolas", - "Ricardo", - "Ruben", - "Virgil", - "William", - "Aiden", - "Dale", - "Dan", - "Jacob", - "Markey", - "Reese", - "Teddy", - "Theron", - "Jeremy", - "Morgann", - "Phillip", - "Philip", - "Stanley", - "Dillon", - ], - [TrainerType.BLACK_BELT]: [ - [ - "Kenji", - "Lao", - "Lung", - "Nob", - "Wai", - "Yoshi", - "Atsushi", - "Daisuke", - "Hideki", - "Hitoshi", - "Kiyo", - "Koichi", - "Koji", - "Yuji", - "Cristian", - "Rhett", - "Takao", - "Theodore", - "Zander", - "Aaron", - "Hugh", - "Mike", - "Nicolas", - "Shea", - "Takashi", - "Adam", - "Carl", - "Colby", - "Darren", - "David", - "Davon", - "Derek", - "Eddie", - "Gregory", - "Griffin", - "Jarrett", - "Jeffery", - "Kendal", - "Kyle", - "Luke", - "Miles", - "Nathaniel", - "Philip", - "Rafael", - "Ray", - "Ricky", - "Sean", - "Willie", - "Ander", - "Manford", - "Benjamin", - "Corey", - "Edward", - "Grant", - "Jay", - "Kendrew", - "Kentaro", - "Ryder", - "Teppei", - "Thomas", - "Tyrone", - "Andrey", - "Donny", - "Drago", - "Gordon", - "Grigor", - "Jeriel", - "Kenneth", - "Martell", - "Mathis", - "Rich", - "Rocky", - "Rodrigo", - "Wesley", - "Zachery", - "Alonzo", - "Cadoc", - "Gunnar", - "Igor", - "Killian", - "Markus", - "Ricardo", - "Yanis", - "Banting", - "Clayton", - "Duane", - "Earl", - "Greg", - "Roy", - "Terry", - "Tracy", - "Walter", - "Alvaro", - "Curtis", - "Francis", - "Ross", - "Brice", - "Cheng", - "Dudley", - "Eric", - "Kano", - "Masahiro", - "Randy", - "Ryuji", - "Steve", - "Tadashi", - "Wong", - "Yuen", - "Brian", - "Carter", - "Reece", - "Nick", - "Yang", - ], - [ - "Cora", - "Cyndy", - "Jill", - "Laura", - "Sadie", - "Tessa", - "Vivian", - "Aisha", - "Callie", - "Danielle", - "Helene", - "Jocelyn", - "Lilith", - "Paula", - "Reyna", - "Helen", - "Kelsey", - "Tyler", - "Amy", - "Chandra", - "Hillary", - "Janie", - "Lee", - "Maggie", - "Mikiko", - "Miriam", - "Sharon", - "Susie", - "Xiao", - "Alize", - "Azra", - "Brenda", - "Chalina", - "Chan", - "Glinda", - "Maki", - "Tia", - "Tiffany", - "Wendy", - "Andrea", - "Gabrielle", - "Gerardine", - "Hailey", - "Hedvig", - "Justine", - "Kinsey", - "Sigrid", - "Veronique", - "Tess", - ], - ], - [TrainerType.BREEDER]: [ - [ - "Isaac", - "Myles", - "Salvadore", - "Albert", - "Kahlil", - "Eustace", - "Galen", - "Owen", - "Addison", - "Marcus", - "Foster", - "Cory", - "Glenn", - "Jay", - "Wesley", - "William", - "Adrian", - "Bradley", - "Jaime", - ], - [ - "Allison", - "Alize", - "Bethany", - "Lily", - "Lydia", - "Gabrielle", - "Jayden", - "Pat", - "Veronica", - "Amber", - "Jennifer", - "Kaylee", - "Adelaide", - "Brooke", - "Ethel", - "April", - "Irene", - "Magnolia", - "Amala", - "Mercy", - "Amanda", - "Ikue", - "Savannah", - "Yuka", - "Chloe", - "Debra", - "Denise", - "Elena", - ], - ], - [TrainerType.CLERK]: [ - [ - "Chaz", - "Clemens", - "Doug", - "Fredric", - "Ivan", - "Isaac", - "Nelson", - "Wade", - "Warren", - "Augustin", - "Gilligan", - "Cody", - "Jeremy", - "Shane", - "Dugal", - "Royce", - "Ronald", - ], - [ - "Alberta", - "Ingrid", - "Katie", - "Piper", - "Trisha", - "Wren", - "Britney", - "Lana", - "Jessica", - "Kristen", - "Michelle", - "Gabrielle", - ], - ], - [TrainerType.CYCLIST]: [ - ["Axel", "James", "John", "Ryan", "Hector", "Jeremiah"], - ["Kayla", "Megan", "Nicole", "Rachel", "Krissa", "Adelaide"], - ], - [TrainerType.DANCER]: [ - "Brian", - "Davey", - "Dirk", - "Edmond", - "Mickey", - "Raymond", - "Cara", - "Julia", - "Maika", - "Mireille", - "Ronda", - "Zoe", - ], - [TrainerType.DEPOT_AGENT]: ["Josh", "Hank", "Vincent"], - [TrainerType.DOCTOR]: [ - ["Hank", "Jerry", "Jules", "Logan", "Wayne", "Braid", "Derek", "Heath", "Julius", "Kit", "Graham"], - ["Kirsten", "Sachiko", "Shery", "Carol", "Dixie", "Mariah"], - ], - [TrainerType.FIREBREATHER]: ["Bill", "Burt", "Cliff", "Dick", "Lyle", "Ned", "Otis", "Ray", "Richard", "Walt"], - [TrainerType.FISHERMAN]: [ - "Andre", - "Arnold", - "Barney", - "Chris", - "Edgar", - "Henry", - "Jonah", - "Justin", - "Kyle", - "Martin", - "Marvin", - "Ralph", - "Raymond", - "Scott", - "Stephen", - "Wilton", - "Tully", - "Andrew", - "Barny", - "Carter", - "Claude", - "Dale", - "Elliot", - "Eugene", - "Ivan", - "Ned", - "Nolan", - "Roger", - "Ronald", - "Wade", - "Wayne", - "Darian", - "Kai", - "Chip", - "Hank", - "Kaden", - "Tommy", - "Tylor", - "Alec", - "Brett", - "Cameron", - "Cody", - "Cole", - "Cory", - "Erick", - "George", - "Joseph", - "Juan", - "Kenneth", - "Luc", - "Miguel", - "Travis", - "Walter", - "Zachary", - "Josh", - "Gideon", - "Kyler", - "Liam", - "Murphy", - "Bruce", - "Damon", - "Devon", - "Hubert", - "Jones", - "Lydon", - "Mick", - "Pete", - "Sean", - "Sid", - "Vince", - "Bucky", - "Dean", - "Eustace", - "Kenzo", - "Leroy", - "Mack", - "Ryder", - "Ewan", - "Finn", - "Murray", - "Seward", - "Shad", - "Wharton", - "Finley", - "Fisher", - "Fisk", - "River", - "Sheaffer", - "Timin", - "Carl", - "Ernest", - "Hal", - "Herbert", - "Hisato", - "Mike", - "Vernon", - "Harriet", - "Marina", - "Chase", - ], - [TrainerType.GUITARIST]: [ - "Anna", - "Beverly", - "January", - "Tina", - "Alicia", - "Claudia", - "Julia", - "Lidia", - "Mireia", - "Noelia", - "Sara", - "Sheila", - "Tatiana", - ], - [TrainerType.HARLEQUIN]: [ - "Charley", - "Ian", - "Jack", - "Kerry", - "Louis", - "Pat", - "Paul", - "Rick", - "Anders", - "Clarence", - "Gary", - ], - [TrainerType.HIKER]: [ - "Anthony", - "Bailey", - "Benjamin", - "Daniel", - "Erik", - "Jim", - "Kenny", - "Leonard", - "Michael", - "Parry", - "Phillip", - "Russell", - "Sidney", - "Tim", - "Timothy", - "Alan", - "Brice", - "Clark", - "Eric", - "Lenny", - "Lucas", - "Mike", - "Trent", - "Devan", - "Eli", - "Marc", - "Sawyer", - "Allen", - "Daryl", - "Dudley", - "Earl", - "Franklin", - "Jeremy", - "Marcos", - "Nob", - "Oliver", - "Wayne", - "Alexander", - "Damon", - "Jonathan", - "Justin", - "Kevin", - "Lorenzo", - "Louis", - "Maurice", - "Nicholas", - "Reginald", - "Robert", - "Theodore", - "Bruce", - "Clarke", - "Devin", - "Dwight", - "Edwin", - "Eoin", - "Noland", - "Russel", - "Andy", - "Bret", - "Darrell", - "Gene", - "Hardy", - "Hugh", - "Jebediah", - "Jeremiah", - "Kit", - "Neil", - "Terrell", - "Don", - "Doug", - "Hunter", - "Jared", - "Jerome", - "Keith", - "Manuel", - "Markus", - "Otto", - "Shelby", - "Stephen", - "Teppei", - "Tobias", - "Wade", - "Zaiem", - "Aaron", - "Alain", - "Bergin", - "Bernard", - "Brent", - "Corwin", - "Craig", - "Delmon", - "Dunstan", - "Orestes", - "Ross", - "Davian", - "Calhoun", - "David", - "Gabriel", - "Ryan", - "Thomas", - "Travis", - "Zachary", - "Anuhea", - "Barnaby", - "Claus", - "Collin", - "Colson", - "Dexter", - "Dillan", - "Eugine", - "Farkas", - "Hisato", - "Julius", - "Kenji", - "Irwin", - "Lionel", - "Paul", - "Richter", - "Valentino", - "Donald", - "Douglas", - "Kevyn", - "Chester", - ], //["Angela","Carla","Celia","Daniela","Estela","Fatima","Helena","Leire","Lucia","Luna","Manuela","Mar","Marina","Miyu","Nancy","Nerea","Paula","Rocio","Yanira"] - [TrainerType.HOOLIGANS]: ["Jim & Cas", "Rob & Sal"], - [TrainerType.HOOPSTER]: ["Bobby", "John", "Lamarcus", "Derrick", "Nicolas"], - [TrainerType.INFIELDER]: ["Alex", "Connor", "Todd"], - [TrainerType.JANITOR]: ["Caleb", "Geoff", "Brady", "Felix", "Orville", "Melvin", "Shawn"], - [TrainerType.LINEBACKER]: ["Bob", "Dan", "Jonah"], - [TrainerType.MAID]: ["Belinda", "Sophie", "Emily", "Elena", "Clare", "Alica", "Tanya", "Tammy"], - [TrainerType.MUSICIAN]: [ - "Boris", - "Preston", - "Charles", - "Clyde", - "Vincent", - "Dalton", - "Kirk", - "Shawn", - "Fabian", - "Fernando", - "Joseph", - "Marcos", - "Arturo", - "Jerry", - "Lonnie", - "Tony", - ], - [TrainerType.NURSERY_AIDE]: [ - "Autumn", - "Briana", - "Leah", - "Miho", - "Ethel", - "Hollie", - "Ilse", - "June", - "Kimya", - "Rosalyn", - ], - [TrainerType.OFFICER]: [ - "Dirk", - "Keith", - "Alex", - "Bobby", - "Caleb", - "Danny", - "Dylan", - "Thomas", - "Daniel", - "Jeff", - "Braven", - "Dell", - "Neagle", - "Haruki", - "Mitchell", - "Raymond", - ], - [TrainerType.PARASOL_LADY]: [ - "Angelica", - "Clarissa", - "Madeline", - "Akari", - "Annabell", - "Kayley", - "Rachel", - "Alexa", - "Sabrina", - "April", - "Gwyneth", - "Laura", - "Lumi", - "Mariah", - "Melita", - "Nicole", - "Tihana", - "Ingrid", - "Tyra", - ], - [TrainerType.PILOT]: ["Chase", "Leonard", "Ted", "Elron", "Ewing", "Flynn", "Winslow"], - [TrainerType.POKEFAN]: [ - [ - "Alex", - "Allan", - "Brandon", - "Carter", - "Colin", - "Derek", - "Jeremy", - "Joshua", - "Rex", - "Robert", - "Trevor", - "William", - "Colton", - "Miguel", - "Francisco", - "Kaleb", - "Leonard", - "Boone", - "Elliot", - "Jude", - "Norbert", - "Corey", - "Gabe", - "Baxter", - ], - [ - "Beverly", - "Georgia", - "Jaime", - "Ruth", - "Isabel", - "Marissa", - "Vanessa", - "Annika", - "Bethany", - "Kimberly", - "Meredith", - "Rebekah", - "Eleanor", - "Darcy", - "Lydia", - "Sachiko", - "Abigail", - "Agnes", - "Lydie", - "Roisin", - "Tara", - "Carmen", - "Janet", - ], - ], - [TrainerType.PRESCHOOLER]: [ - [ - "Billy", - "Doyle", - "Evan", - "Homer", - "Tully", - "Albert", - "Buster", - "Greg", - "Ike", - "Jojo", - "Tyrone", - "Adrian", - "Oliver", - "Hayden", - "Hunter", - "Kaleb", - "Liam", - "Dylan", - ], - [ - "Juliet", - "Mia", - "Sarah", - "Wendy", - "Winter", - "Chrissy", - "Eva", - "Lin", - "Samantha", - "Ella", - "Lily", - "Natalie", - "Ailey", - "Hannah", - "Malia", - "Kindra", - "Nancy", - ], - ], - [TrainerType.PSYCHIC]: [ - [ - "Fidel", - "Franklin", - "Gilbert", - "Greg", - "Herman", - "Jared", - "Mark", - "Nathan", - "Norman", - "Phil", - "Richard", - "Rodney", - "Cameron", - "Edward", - "Fritz", - "Joshua", - "Preston", - "Virgil", - "William", - "Alvaro", - "Blake", - "Cedric", - "Keenan", - "Nicholas", - "Dario", - "Johan", - "Lorenzo", - "Tyron", - "Bryce", - "Corbin", - "Deandre", - "Elijah", - "Kody", - "Landon", - "Maxwell", - "Mitchell", - "Sterling", - "Eli", - "Nelson", - "Vernon", - "Gaven", - "Gerard", - "Low", - "Micki", - "Perry", - "Rudolf", - "Tommy", - "Al", - "Nandor", - "Tully", - "Arthur", - "Emanuel", - "Franz", - "Harry", - "Paschal", - "Robert", - "Sayid", - "Angelo", - "Anton", - "Arin", - "Avery", - "Danny", - "Frasier", - "Harrison", - "Jaime", - "Ross", - "Rui", - "Vlad", - "Mason", - ], - [ - "Alexis", - "Hannah", - "Jacki", - "Jaclyn", - "Kayla", - "Maura", - "Samantha", - "Alix", - "Brandi", - "Edie", - "Macey", - "Mariella", - "Marlene", - "Laura", - "Rodette", - "Abigail", - "Brittney", - "Chelsey", - "Daisy", - "Desiree", - "Kendra", - "Lindsey", - "Rachael", - "Valencia", - "Belle", - "Cybil", - "Doreen", - "Dua", - "Future", - "Lin", - "Madhu", - "Alia", - "Ena", - "Joyce", - "Lynette", - "Olesia", - "Sarah", - ], - ], - [TrainerType.RANGER]: [ - [ - "Carlos", - "Jackson", - "Sebastian", - "Gav", - "Lorenzo", - "Logan", - "Nicolas", - "Trenton", - "Deshawn", - "Dwayne", - "Jeffery", - "Kyler", - "Taylor", - "Alain", - "Claude", - "Crofton", - "Forrest", - "Harry", - "Jaden", - "Keith", - "Lewis", - "Miguel", - "Pedro", - "Ralph", - "Richard", - "Bret", - "Daryl", - "Eddie", - "Johan", - "Leaf", - "Louis", - "Maxwell", - "Parker", - "Rick", - "Steve", - "Bjorn", - "Chaise", - "Dean", - "Lee", - "Maurice", - "Nash", - "Ralf", - "Reed", - "Shinobu", - "Silas", - ], - [ - "Catherine", - "Jenna", - "Sophia", - "Merdith", - "Nora", - "Beth", - "Chelsea", - "Katelyn", - "Madeline", - "Allison", - "Ashlee", - "Felicia", - "Krista", - "Annie", - "Audra", - "Brenda", - "Chloris", - "Eliza", - "Heidi", - "Irene", - "Mary", - "Mylene", - "Shanti", - "Shelly", - "Thalia", - "Anja", - "Briana", - "Dianna", - "Elaine", - "Elle", - "Hillary", - "Katie", - "Lena", - "Lois", - "Malory", - "Melita", - "Mikiko", - "Naoko", - "Serenity", - "Ambre", - "Brooke", - "Clementine", - "Melina", - "Petra", - "Twiggy", - ], - ], - [TrainerType.RICH]: [ - [ - "Alfred", - "Edward", - "Gregory", - "Preston", - "Thomas", - "Tucker", - "Walter", - "Clifford", - "Everett", - "Micah", - "Nate", - "Pierre", - "Terrance", - "Arthur", - "Brooks", - "Emanuel", - "Lamar", - "Jeremy", - "Leonardo", - "Milton", - "Frederic", - "Renaud", - "Robert", - "Yan", - "Daniel", - "Sheldon", - "Stonewall", - "Gerald", - "Ronald", - "Smith", - "Stanley", - "Reginald", - "Orson", - "Wilco", - "Caden", - "Glenn", - ], - [ - "Rebecca", - "Reina", - "Cassandra", - "Emilia", - "Grace", - "Marian", - "Elizabeth", - "Kathleen", - "Sayuri", - "Caroline", - "Judy", - ], - ], - [TrainerType.RICH_KID]: [ - [ - "Garret", - "Winston", - "Dawson", - "Enrique", - "Jason", - "Roman", - "Trey", - "Liam", - "Anthony", - "Brad", - "Cody", - "Manuel", - "Martin", - "Pierce", - "Rolan", - "Keenan", - "Filbert", - "Antoin", - "Cyus", - "Diek", - "Dugo", - "Flitz", - "Jurek", - "Lond", - "Perd", - "Quint", - "Basto", - "Benit", - "Brot", - "Denc", - "Guyit", - "Marcon", - "Perc", - "Puros", - "Roex", - "Sainz", - "Symin", - "Tark", - "Venak", - ], - [ - "Anette", - "Brianna", - "Cindy", - "Colleen", - "Daphne", - "Elizabeth", - "Naomi", - "Sarah", - "Charlotte", - "Gillian", - "Jacki", - "Lady", - "Melissa", - "Celeste", - "Colette", - "Elizandra", - "Isabel", - "Lynette", - "Magnolia", - "Sophie", - "Lina", - "Dulcie", - "Auro", - "Brin", - "Caril", - "Eloos", - "Gwin", - "Illa", - "Kowly", - "Rima", - "Ristin", - "Vesey", - "Brena", - "Deasy", - "Denslon", - "Kylet", - "Nemi", - "Rene", - "Sanol", - "Stouner", - "Sturk", - "Talmen", - "Zoila", - ], - ], - [TrainerType.ROUGHNECK]: [ - "Camron", - "Corey", - "Gabriel", - "Isaiah", - "Jamal", - "Koji", - "Luke", - "Paxton", - "Raul", - "Zeek", - "Kirby", - "Chance", - "Dave", - "Fletcher", - "Johnny", - "Reese", - "Joey", - "Ricky", - "Silvester", - "Martin", - ], - [TrainerType.SAILOR]: [ - "Alberto", - "Bost", - "Brennan", - "Brenden", - "Claude", - "Cory", - "Damian", - "Dirk", - "Duncan", - "Dwayne", - "Dylan", - "Eddie", - "Edmond", - "Elijah", - "Ernest", - "Eugene", - "Garrett", - "Golos", - "Gratin", - "Grestly", - "Harry", - "Hols", - "Hudson", - "Huey", - "Jebol", - "Jeff", - "Leonald", - "Luther", - "Kelvin", - "Kenneth", - "Kent", - "Knook", - "Marc", - "Mifis", - "Monar", - "Morkor", - "Ordes", - "Oxlin", - "Parker", - "Paul", - "Philip", - "Roberto", - "Samson", - "Skyler", - "Stanly", - "Tebu", - "Terrell", - "Trevor", - "Yasu", - "Zachariah", - ], - [TrainerType.SCIENTIST]: [ - [ - "Jed", - "Marc", - "Mitch", - "Rich", - "Ross", - "Beau", - "Braydon", - "Connor", - "Ed", - "Ivan", - "Jerry", - "Jose", - "Joshua", - "Parker", - "Rodney", - "Taylor", - "Ted", - "Travis", - "Zackery", - "Darrius", - "Emilio", - "Fredrick", - "Shaun", - "Stefano", - "Travon", - "Daniel", - "Garett", - "Gregg", - "Linden", - "Lowell", - "Trenton", - "Dudley", - "Luke", - "Markus", - "Nathan", - "Orville", - "Randall", - "Ron", - "Ronald", - "Simon", - "Steve", - "William", - "Franklin", - "Clarke", - "Jacques", - "Terrance", - "Ernst", - "Justus", - "Ikaika", - "Jayson", - "Kyle", - "Reid", - "Tyrone", - "Adam", - "Albert", - "Alphonse", - "Cory", - "Donnie", - "Elton", - "Francis", - "Gordon", - "Herbert", - "Humphrey", - "Jordan", - "Julian", - "Keaton", - "Levi", - "Melvin", - "Murray", - "West", - "Craig", - "Coren", - "Dubik", - "Kotan", - "Lethco", - "Mante", - "Mort", - "Myron", - "Odlow", - "Ribek", - "Roeck", - "Vogi", - "Vonder", - "Zogo", - "Doimo", - "Doton", - "Durel", - "Hildon", - "Kukla", - "Messa", - "Nanot", - "Platen", - "Raburn", - "Reman", - "Acrod", - "Coffy", - "Elrok", - "Foss", - "Hardig", - "Hombol", - "Hospel", - "Kaller", - "Klots", - "Krilok", - "Limar", - "Loket", - "Mesak", - "Morbit", - "Newin", - "Orill", - "Tabor", - "Tekot", - ], - [ - "Blythe", - "Chan", - "Kathrine", - "Marie", - "Maria", - "Naoko", - "Samantha", - "Satomi", - "Shannon", - "Athena", - "Caroline", - "Lumi", - "Lumina", - "Marissa", - "Sonia", - ], - ], - [TrainerType.SMASHER]: ["Aspen", "Elena", "Mari", "Amy", "Lizzy"], - [TrainerType.SNOW_WORKER]: [ - [ - "Braden", - "Brendon", - "Colin", - "Conrad", - "Dillan", - "Gary", - "Gerardo", - "Holden", - "Jackson", - "Mason", - "Quentin", - "Willy", - "Noel", - "Arnold", - "Brady", - "Brand", - "Cairn", - "Cliff", - "Don", - "Eddie", - "Felix", - "Filipe", - "Glenn", - "Gus", - "Heath", - "Matthew", - "Patton", - "Rich", - "Rob", - "Ryan", - "Scott", - "Shelby", - "Sterling", - "Tyler", - "Victor", - "Zack", - "Friedrich", - "Herman", - "Isaac", - "Leo", - "Maynard", - "Mitchell", - "Morgann", - "Nathan", - "Niel", - "Pasqual", - "Paul", - "Tavarius", - "Tibor", - "Dimitri", - "Narek", - "Yusif", - "Frank", - "Jeff", - "Vaclav", - "Ovid", - "Francis", - "Keith", - "Russel", - "Sangon", - "Toway", - "Bomber", - "Chean", - "Demit", - "Hubor", - "Kebile", - "Laber", - "Ordo", - "Retay", - "Ronix", - "Wagel", - "Dobit", - "Kaster", - "Lobel", - "Releo", - "Saken", - "Rustix", - ], - ["Georgia", "Sandra", "Yvonne"], - ], - [TrainerType.STRIKER]: ["Marco", "Roberto", "Tony"], - [TrainerType.SCHOOL_KID]: [ - [ - "Alan", - "Billy", - "Chad", - "Danny", - "Dudley", - "Jack", - "Joe", - "Johnny", - "Kipp", - "Nate", - "Ricky", - "Tommy", - "Jerry", - "Paul", - "Ted", - "Chance", - "Esteban", - "Forrest", - "Harrison", - "Connor", - "Sherman", - "Torin", - "Travis", - "Al", - "Carter", - "Edgar", - "Jem", - "Sammy", - "Shane", - "Shayne", - "Alvin", - "Keston", - "Neil", - "Seymour", - "William", - "Carson", - "Clark", - "Nolan", - ], - [ - "Georgia", - "Karen", - "Meiko", - "Christine", - "Mackenzie", - "Tiera", - "Ann", - "Gina", - "Lydia", - "Marsha", - "Millie", - "Sally", - "Serena", - "Silvia", - "Alberta", - "Cassie", - "Mara", - "Rita", - "Georgie", - "Meena", - "Nitzel", - ], - ], - [TrainerType.SWIMMER]: [ - [ - "Berke", - "Cameron", - "Charlie", - "George", - "Harold", - "Jerome", - "Kirk", - "Mathew", - "Parker", - "Randall", - "Seth", - "Simon", - "Tucker", - "Austin", - "Barry", - "Chad", - "Cody", - "Darrin", - "David", - "Dean", - "Douglas", - "Franklin", - "Gilbert", - "Herman", - "Jack", - "Luis", - "Matthew", - "Reed", - "Richard", - "Rodney", - "Roland", - "Spencer", - "Stan", - "Tony", - "Clarence", - "Declan", - "Dominik", - "Harrison", - "Kevin", - "Leonardo", - "Nolen", - "Pete", - "Santiago", - "Axle", - "Braden", - "Finn", - "Garrett", - "Mymo", - "Reece", - "Samir", - "Toby", - "Adrian", - "Colton", - "Dillon", - "Erik", - "Evan", - "Francisco", - "Glenn", - "Kurt", - "Oscar", - "Ricardo", - "Sam", - "Sheltin", - "Troy", - "Vincent", - "Wade", - "Wesley", - "Duane", - "Elmo", - "Esteban", - "Frankie", - "Ronald", - "Tyson", - "Bart", - "Matt", - "Tim", - "Wright", - "Jeffery", - "Kyle", - "Alessandro", - "Estaban", - "Kieran", - "Ramses", - "Casey", - "Dakota", - "Jared", - "Kalani", - "Keoni", - "Lawrence", - "Logan", - "Robert", - "Roddy", - "Yasu", - "Derek", - "Jacob", - "Bruce", - "Clayton", - ], - [ - "Briana", - "Dawn", - "Denise", - "Diana", - "Elaine", - "Kara", - "Kaylee", - "Lori", - "Nicole", - "Nikki", - "Paula", - "Susie", - "Wendy", - "Alice", - "Beth", - "Beverly", - "Brenda", - "Dana", - "Debra", - "Grace", - "Jenny", - "Katie", - "Laurel", - "Linda", - "Missy", - "Sharon", - "Tanya", - "Tara", - "Tisha", - "Carlee", - "Imani", - "Isabelle", - "Kyla", - "Sienna", - "Abigail", - "Amara", - "Anya", - "Connie", - "Maria", - "Melissa", - "Nora", - "Shirley", - "Shania", - "Tiffany", - "Aubree", - "Cassandra", - "Claire", - "Crystal", - "Erica", - "Gabrielle", - "Haley", - "Jessica", - "Joanna", - "Lydia", - "Mallory", - "Mary", - "Miranda", - "Paige", - "Sophia", - "Vanessa", - "Chelan", - "Debbie", - "Joy", - "Kendra", - "Leona", - "Mina", - "Caroline", - "Joyce", - "Larissa", - "Rebecca", - "Tyra", - "Dara", - "Desiree", - "Kaoru", - "Ruth", - "Coral", - "Genevieve", - "Isla", - "Marissa", - "Romy", - "Sheryl", - "Alexandria", - "Alicia", - "Chelsea", - "Jade", - "Kelsie", - "Laura", - "Portia", - "Shelby", - "Sara", - "Tiare", - "Kyra", - "Natasha", - "Layla", - "Scarlett", - "Cora", - ], - ], - [TrainerType.TWINS]: [ - "Amy & May", - "Jo & Zoe", - "Meg & Peg", - "Ann & Anne", - "Lea & Pia", - "Amy & Liv", - "Gina & Mia", - "Miu & Yuki", - "Tori & Tia", - "Eli & Anne", - "Jen & Kira", - "Joy & Meg", - "Kiri & Jan", - "Miu & Mia", - "Emma & Lil", - "Liv & Liz", - "Teri & Tia", - "Amy & Mimi", - "Clea & Gil", - "Day & Dani", - "Kay & Tia", - "Tori & Til", - "Saya & Aya", - "Emy & Lin", - "Kumi & Amy", - "Mayo & May", - "Ally & Amy", - "Lia & Lily", - "Rae & Ula", - "Sola & Ana", - "Tara & Val", - "Faith & Joy", - "Nana & Nina", - ], - [TrainerType.VETERAN]: [ - [ - "Armando", - "Brenden", - "Brian", - "Clayton", - "Edgar", - "Emanuel", - "Grant", - "Harlan", - "Terrell", - "Arlen", - "Chester", - "Hugo", - "Martell", - "Ray", - "Shaun", - "Abraham", - "Carter", - "Claude", - "Jerry", - "Lucius", - "Murphy", - "Rayne", - "Ron", - "Sinan", - "Sterling", - "Vincent", - "Zach", - "Gerard", - "Gilles", - "Louis", - "Timeo", - "Akira", - "Don", - "Eric", - "Harry", - "Leon", - "Roger", - "Angus", - "Aristo", - "Brone", - "Johnny", - ], - [ - "Julia", - "Karla", - "Kim", - "Sayuri", - "Tiffany", - "Cathy", - "Cecile", - "Chloris", - "Denae", - "Gina", - "Maya", - "Oriana", - "Portia", - "Rhona", - "Rosaline", - "Catrina", - "Inga", - "Trisha", - "Heather", - "Lynn", - "Sheri", - "Alonsa", - "Ella", - "Leticia", - "Kiara", - ], - ], - [TrainerType.WAITER]: [ - ["Bert", "Clint", "Maxwell", "Lou"], - ["Kati", "Aurora", "Bonita", "Flo", "Tia", "Jan", "Olwen", "Paget", "Paula", "Talia"], - ], - [TrainerType.WORKER]: [ - [ - "Braden", - "Brendon", - "Colin", - "Conrad", - "Dillan", - "Gary", - "Gerardo", - "Holden", - "Jackson", - "Mason", - "Quentin", - "Willy", - "Noel", - "Arnold", - "Brady", - "Brand", - "Cairn", - "Cliff", - "Don", - "Eddie", - "Felix", - "Filipe", - "Glenn", - "Gus", - "Heath", - "Matthew", - "Patton", - "Rich", - "Rob", - "Ryan", - "Scott", - "Shelby", - "Sterling", - "Tyler", - "Victor", - "Zack", - "Friedrich", - "Herman", - "Isaac", - "Leo", - "Maynard", - "Mitchell", - "Morgann", - "Nathan", - "Niel", - "Pasqual", - "Paul", - "Tavarius", - "Tibor", - "Dimitri", - "Narek", - "Yusif", - "Frank", - "Jeff", - "Vaclav", - "Ovid", - "Francis", - "Keith", - "Russel", - "Sangon", - "Toway", - "Bomber", - "Chean", - "Demit", - "Hubor", - "Kebile", - "Laber", - "Ordo", - "Retay", - "Ronix", - "Wagel", - "Dobit", - "Kaster", - "Lobel", - "Releo", - "Saken", - "Rustix", - ], - ["Georgia", "Sandra", "Yvonne"], - ], - [TrainerType.YOUNGSTER]: [ - [ - "Albert", - "Gordon", - "Ian", - "Jason", - "Jimmy", - "Mikey", - "Owen", - "Samuel", - "Warren", - "Allen", - "Ben", - "Billy", - "Calvin", - "Dillion", - "Eddie", - "Joey", - "Josh", - "Neal", - "Timmy", - "Tommy", - "Breyden", - "Deandre", - "Demetrius", - "Dillon", - "Jaylen", - "Johnson", - "Shigenobu", - "Chad", - "Cole", - "Cordell", - "Dan", - "Dave", - "Destin", - "Nash", - "Tyler", - "Yasu", - "Austin", - "Dallas", - "Darius", - "Donny", - "Jonathon", - "Logan", - "Michael", - "Oliver", - "Sebastian", - "Tristan", - "Wayne", - "Norman", - "Roland", - "Regis", - "Abe", - "Astor", - "Keita", - "Kenneth", - "Kevin", - "Kyle", - "Lester", - "Masao", - "Nicholas", - "Parker", - "Wes", - "Zachary", - "Cody", - "Henley", - "Jaye", - "Karl", - "Kenny", - "Masahiro", - "Pedro", - "Petey", - "Sinclair", - "Terrell", - "Waylon", - "Aidan", - "Anthony", - "David", - "Jacob", - "Jayden", - "Cutler", - "Ham", - "Caleb", - "Kai", - "Honus", - "Kenway", - "Bret", - "Chris", - "Cid", - "Dennis", - "Easton", - "Ken", - "Robby", - "Ronny", - "Shawn", - "Benjamin", - "Jake", - "Travis", - "Adan", - "Aday", - "Beltran", - "Elian", - "Hernan", - "Julen", - "Luka", - "Roi", - "Bernie", - "Dustin", - "Jonathan", - "Wyatt", - ], - [ - "Alice", - "Bridget", - "Carrie", - "Connie", - "Dana", - "Ellen", - "Krise", - "Laura", - "Linda", - "Michelle", - "Shannon", - "Andrea", - "Crissy", - "Janice", - "Robin", - "Sally", - "Tiana", - "Haley", - "Ali", - "Ann", - "Dalia", - "Dawn", - "Iris", - "Joana", - "Julia", - "Kay", - "Lisa", - "Megan", - "Mikaela", - "Miriam", - "Paige", - "Reli", - "Blythe", - "Briana", - "Caroline", - "Cassidy", - "Kaitlin", - "Madeline", - "Molly", - "Natalie", - "Samantha", - "Sarah", - "Cathy", - "Dye", - "Eri", - "Eva", - "Fey", - "Kara", - "Lurleen", - "Maki", - "Mali", - "Maya", - "Miki", - "Sibyl", - "Daya", - "Diana", - "Flo", - "Helia", - "Henrietta", - "Isabel", - "Mai", - "Persephone", - "Serena", - "Anna", - "Charlotte", - "Elin", - "Elsa", - "Lise", - "Sara", - "Suzette", - "Audrey", - "Emmy", - "Isabella", - "Madison", - "Rika", - "Rylee", - "Salla", - "Ellie", - "Alexandra", - "Amy", - "Lass", - "Brittany", - "Chel", - "Cindy", - "Dianne", - "Emily", - "Emma", - "Evelyn", - "Hana", - "Harleen", - "Hazel", - "Jocelyn", - "Katrina", - "Kimberly", - "Lina", - "Marge", - "Mila", - "Mizuki", - "Rena", - "Sal", - "Satoko", - "Summer", - "Tomoe", - "Vicky", - "Yue", - "Yumi", - "Lauren", - "Rei", - "Riley", - "Lois", - "Nancy", - "Tammy", - "Terry", - ], - ], - [TrainerType.HEX_MANIAC]: [ - "Kindra", - "Patricia", - "Tammy", - "Tasha", - "Valerie", - "Alaina", - "Kathleen", - "Leah", - "Makie", - "Sylvia", - "Anina", - "Arachna", - "Carrie", - "Desdemona", - "Josette", - "Luna", - "Melanie", - "Osanna", - "Raziah", - ], -}; - // function used in a commented code // biome-ignore lint/correctness/noUnusedVariables: TODO make this into a script instead of having it be in src/data... function fetchAndPopulateTrainerNames( diff --git a/src/data/trainers/TrainerPartyTemplate.ts b/src/data/trainers/TrainerPartyTemplate.ts new file mode 100644 index 00000000000..adbaacc6b55 --- /dev/null +++ b/src/data/trainers/TrainerPartyTemplate.ts @@ -0,0 +1,255 @@ +import { startingWave } from "#app/battle-scene"; +import { globalScene } from "#app/global-scene"; +import { PartyMemberStrength } from "#enums/party-member-strength"; + +export class TrainerPartyTemplate { + public size: number; + public strength: PartyMemberStrength; + public sameSpecies: boolean; + public balanced: boolean; + + constructor(size: number, strength: PartyMemberStrength, sameSpecies?: boolean, balanced?: boolean) { + this.size = size; + this.strength = strength; + this.sameSpecies = !!sameSpecies; + this.balanced = !!balanced; + } + + getStrength(_index: number): PartyMemberStrength { + return this.strength; + } + + isSameSpecies(_index: number): boolean { + return this.sameSpecies; + } + + isBalanced(_index: number): boolean { + return this.balanced; + } +} + +export class TrainerPartyCompoundTemplate extends TrainerPartyTemplate { + public templates: TrainerPartyTemplate[]; + + constructor(...templates: TrainerPartyTemplate[]) { + super( + templates.reduce((total: number, template: TrainerPartyTemplate) => { + total += template.size; + return total; + }, 0), + PartyMemberStrength.AVERAGE, + ); + this.templates = templates; + } + + getStrength(index: number): PartyMemberStrength { + let t = 0; + for (const template of this.templates) { + if (t + template.size > index) { + return template.getStrength(index - t); + } + t += template.size; + } + + return super.getStrength(index); + } + + isSameSpecies(index: number): boolean { + let t = 0; + for (const template of this.templates) { + if (t + template.size > index) { + return template.isSameSpecies(index - t); + } + t += template.size; + } + + return super.isSameSpecies(index); + } + + isBalanced(index: number): boolean { + let t = 0; + for (const template of this.templates) { + if (t + template.size > index) { + return template.isBalanced(index - t); + } + t += template.size; + } + + return super.isBalanced(index); + } +} + +export const trainerPartyTemplates = { + ONE_WEAK_ONE_STRONG: new TrainerPartyCompoundTemplate( + new TrainerPartyTemplate(1, PartyMemberStrength.WEAK), + new TrainerPartyTemplate(1, PartyMemberStrength.STRONG), + ), + ONE_AVG: new TrainerPartyTemplate(1, PartyMemberStrength.AVERAGE), + ONE_AVG_ONE_STRONG: new TrainerPartyCompoundTemplate( + new TrainerPartyTemplate(1, PartyMemberStrength.AVERAGE), + new TrainerPartyTemplate(1, PartyMemberStrength.STRONG), + ), + ONE_STRONG: new TrainerPartyTemplate(1, PartyMemberStrength.STRONG), + ONE_STRONGER: new TrainerPartyTemplate(1, PartyMemberStrength.STRONGER), + TWO_WEAKER: new TrainerPartyTemplate(2, PartyMemberStrength.WEAKER), + TWO_WEAK: new TrainerPartyTemplate(2, PartyMemberStrength.WEAK), + TWO_WEAK_ONE_AVG: new TrainerPartyCompoundTemplate( + new TrainerPartyTemplate(2, PartyMemberStrength.WEAK), + new TrainerPartyTemplate(1, PartyMemberStrength.AVERAGE), + ), + TWO_WEAK_SAME_ONE_AVG: new TrainerPartyCompoundTemplate( + new TrainerPartyTemplate(2, PartyMemberStrength.WEAK, true), + new TrainerPartyTemplate(1, PartyMemberStrength.AVERAGE), + ), + TWO_WEAK_SAME_TWO_WEAK_SAME: new TrainerPartyCompoundTemplate( + new TrainerPartyTemplate(2, PartyMemberStrength.WEAK, true), + new TrainerPartyTemplate(2, PartyMemberStrength.WEAK, true), + ), + TWO_WEAK_ONE_STRONG: new TrainerPartyCompoundTemplate( + new TrainerPartyTemplate(2, PartyMemberStrength.WEAK), + new TrainerPartyTemplate(1, PartyMemberStrength.STRONG), + ), + TWO_AVG: new TrainerPartyTemplate(2, PartyMemberStrength.AVERAGE), + TWO_AVG_ONE_STRONG: new TrainerPartyCompoundTemplate( + new TrainerPartyTemplate(2, PartyMemberStrength.AVERAGE), + new TrainerPartyTemplate(1, PartyMemberStrength.STRONG), + ), + TWO_AVG_SAME_ONE_AVG: new TrainerPartyCompoundTemplate( + new TrainerPartyTemplate(2, PartyMemberStrength.AVERAGE, true), + new TrainerPartyTemplate(1, PartyMemberStrength.AVERAGE), + ), + TWO_AVG_SAME_ONE_STRONG: new TrainerPartyCompoundTemplate( + new TrainerPartyTemplate(2, PartyMemberStrength.AVERAGE, true), + new TrainerPartyTemplate(1, PartyMemberStrength.STRONG), + ), + TWO_AVG_SAME_TWO_AVG_SAME: new TrainerPartyCompoundTemplate( + new TrainerPartyTemplate(2, PartyMemberStrength.AVERAGE, true), + new TrainerPartyTemplate(2, PartyMemberStrength.AVERAGE, true), + ), + TWO_STRONG: new TrainerPartyTemplate(2, PartyMemberStrength.STRONG), + THREE_WEAK: new TrainerPartyTemplate(3, PartyMemberStrength.WEAK), + THREE_WEAK_SAME: new TrainerPartyTemplate(3, PartyMemberStrength.WEAK, true), + THREE_AVG: new TrainerPartyTemplate(3, PartyMemberStrength.AVERAGE), + THREE_AVG_SAME: new TrainerPartyTemplate(3, PartyMemberStrength.AVERAGE, true), + THREE_WEAK_BALANCED: new TrainerPartyTemplate(3, PartyMemberStrength.WEAK, false, true), + FOUR_WEAKER: new TrainerPartyTemplate(4, PartyMemberStrength.WEAKER), + FOUR_WEAKER_SAME: new TrainerPartyTemplate(4, PartyMemberStrength.WEAKER, true), + FOUR_WEAK: new TrainerPartyTemplate(4, PartyMemberStrength.WEAK), + FOUR_WEAK_SAME: new TrainerPartyTemplate(4, PartyMemberStrength.WEAK, true), + FOUR_WEAK_BALANCED: new TrainerPartyTemplate(4, PartyMemberStrength.WEAK, false, true), + FIVE_WEAKER: new TrainerPartyTemplate(5, PartyMemberStrength.WEAKER), + FIVE_WEAK: new TrainerPartyTemplate(5, PartyMemberStrength.WEAK), + FIVE_WEAK_BALANCED: new TrainerPartyTemplate(5, PartyMemberStrength.WEAK, false, true), + SIX_WEAKER: new TrainerPartyTemplate(6, PartyMemberStrength.WEAKER), + SIX_WEAKER_SAME: new TrainerPartyTemplate(6, PartyMemberStrength.WEAKER, true), + SIX_WEAK_SAME: new TrainerPartyTemplate(6, PartyMemberStrength.WEAK, true), + SIX_WEAK_BALANCED: new TrainerPartyTemplate(6, PartyMemberStrength.WEAK, false, true), + + GYM_LEADER_1: new TrainerPartyCompoundTemplate( + new TrainerPartyTemplate(1, PartyMemberStrength.AVERAGE), + new TrainerPartyTemplate(1, PartyMemberStrength.STRONG), + ), + GYM_LEADER_2: new TrainerPartyCompoundTemplate( + new TrainerPartyTemplate(1, PartyMemberStrength.AVERAGE), + new TrainerPartyTemplate(1, PartyMemberStrength.STRONG), + new TrainerPartyTemplate(1, PartyMemberStrength.STRONGER), + ), + GYM_LEADER_3: new TrainerPartyCompoundTemplate( + new TrainerPartyTemplate(2, PartyMemberStrength.AVERAGE), + new TrainerPartyTemplate(1, PartyMemberStrength.STRONG), + new TrainerPartyTemplate(1, PartyMemberStrength.STRONGER), + ), + GYM_LEADER_4: new TrainerPartyCompoundTemplate( + new TrainerPartyTemplate(3, PartyMemberStrength.AVERAGE), + new TrainerPartyTemplate(1, PartyMemberStrength.STRONG), + new TrainerPartyTemplate(1, PartyMemberStrength.STRONGER), + ), + GYM_LEADER_5: new TrainerPartyCompoundTemplate( + new TrainerPartyTemplate(3, PartyMemberStrength.AVERAGE), + new TrainerPartyTemplate(2, PartyMemberStrength.STRONG), + new TrainerPartyTemplate(1, PartyMemberStrength.STRONGER), + ), + + ELITE_FOUR: new TrainerPartyCompoundTemplate( + new TrainerPartyTemplate(2, PartyMemberStrength.AVERAGE), + new TrainerPartyTemplate(3, PartyMemberStrength.STRONG), + new TrainerPartyTemplate(1, PartyMemberStrength.STRONGER), + ), + + CHAMPION: new TrainerPartyCompoundTemplate( + new TrainerPartyTemplate(4, PartyMemberStrength.STRONG), + new TrainerPartyTemplate(2, PartyMemberStrength.STRONGER, false, true), + ), + + RIVAL: new TrainerPartyCompoundTemplate( + new TrainerPartyTemplate(1, PartyMemberStrength.STRONG), + new TrainerPartyTemplate(1, PartyMemberStrength.AVERAGE), + ), + RIVAL_2: new TrainerPartyCompoundTemplate( + new TrainerPartyTemplate(1, PartyMemberStrength.STRONG), + new TrainerPartyTemplate(1, PartyMemberStrength.AVERAGE), + new TrainerPartyTemplate(1, PartyMemberStrength.WEAK, false, true), + ), + RIVAL_3: new TrainerPartyCompoundTemplate( + new TrainerPartyTemplate(1, PartyMemberStrength.STRONG), + new TrainerPartyTemplate(1, PartyMemberStrength.AVERAGE), + new TrainerPartyTemplate(1, PartyMemberStrength.AVERAGE, false, true), + new TrainerPartyTemplate(1, PartyMemberStrength.WEAK, false, true), + ), + RIVAL_4: new TrainerPartyCompoundTemplate( + new TrainerPartyTemplate(1, PartyMemberStrength.STRONG), + new TrainerPartyTemplate(1, PartyMemberStrength.AVERAGE), + new TrainerPartyTemplate(2, PartyMemberStrength.AVERAGE, false, true), + new TrainerPartyTemplate(1, PartyMemberStrength.WEAK, false, true), + ), + RIVAL_5: new TrainerPartyCompoundTemplate( + new TrainerPartyTemplate(1, PartyMemberStrength.STRONG), + new TrainerPartyTemplate(1, PartyMemberStrength.AVERAGE), + new TrainerPartyTemplate(3, PartyMemberStrength.AVERAGE, false, true), + new TrainerPartyTemplate(1, PartyMemberStrength.STRONG), + ), + RIVAL_6: new TrainerPartyCompoundTemplate( + new TrainerPartyTemplate(1, PartyMemberStrength.STRONG), + new TrainerPartyTemplate(1, PartyMemberStrength.AVERAGE), + new TrainerPartyTemplate(3, PartyMemberStrength.AVERAGE, false, true), + new TrainerPartyTemplate(1, PartyMemberStrength.STRONGER), + ), +}; + +/** + * The function to get variable strength grunts + * @returns the correct TrainerPartyTemplate + */ +export function getEvilGruntPartyTemplate(): TrainerPartyTemplate { + const waveIndex = globalScene.currentBattle?.waveIndex; + if (waveIndex < 40) { + return trainerPartyTemplates.TWO_AVG; + } + if (waveIndex < 63) { + return trainerPartyTemplates.THREE_AVG; + } + if (waveIndex < 65) { + return trainerPartyTemplates.TWO_AVG_ONE_STRONG; + } + if (waveIndex < 112) { + return trainerPartyTemplates.GYM_LEADER_4; // 3avg 1 strong 1 stronger + } + return trainerPartyTemplates.GYM_LEADER_5; // 3 avg 2 strong 1 stronger +} + +export function getWavePartyTemplate(...templates: TrainerPartyTemplate[]) { + const { currentBattle, gameMode } = globalScene; + const wave = gameMode.getWaveForDifficulty(currentBattle?.waveIndex || startingWave, true); + const templateIndex = Math.ceil((wave - 20) / 30); + return templates[Phaser.Math.Clamp(templateIndex, 0, templates.length - 1)]; +} + +export function getGymLeaderPartyTemplate() { + return getWavePartyTemplate( + trainerPartyTemplates.GYM_LEADER_1, + trainerPartyTemplates.GYM_LEADER_2, + trainerPartyTemplates.GYM_LEADER_3, + trainerPartyTemplates.GYM_LEADER_4, + trainerPartyTemplates.GYM_LEADER_5, + ); +} diff --git a/src/data/trainers/evil-admin-trainer-pools.ts b/src/data/trainers/evil-admin-trainer-pools.ts new file mode 100644 index 00000000000..fe68cf50c9c --- /dev/null +++ b/src/data/trainers/evil-admin-trainer-pools.ts @@ -0,0 +1,472 @@ +import type { TrainerTierPools } from "#app/data/trainers/typedefs"; +import { TrainerPoolTier } from "#enums/trainer-pool-tier"; +import { Species } from "#enums/species"; + +/** Team Rocket's admin trainer pool. */ +const ROCKET: TrainerTierPools = { + [TrainerPoolTier.COMMON]: [ + Species.RATTATA, + Species.SPEAROW, + Species.EKANS, + Species.VILEPLUME, + Species.DIGLETT, + Species.GROWLITHE, + Species.GRIMER, + Species.DROWZEE, + Species.VOLTORB, + Species.EXEGGCUTE, + Species.CUBONE, + Species.KOFFING, + Species.MAGIKARP, + Species.ZUBAT, + Species.ONIX, + Species.HOUNDOUR, + Species.MURKROW, + ], + [TrainerPoolTier.UNCOMMON]: [ + Species.ABRA, + Species.GASTLY, + Species.OMANYTE, + Species.KABUTO, + Species.PORYGON, + Species.MANKEY, + Species.SCYTHER, + Species.ELEKID, + Species.MAGBY, + Species.ALOLA_SANDSHREW, + Species.ALOLA_MEOWTH, + Species.ALOLA_GEODUDE, + Species.ALOLA_GRIMER, + Species.PALDEA_TAUROS, + ], + [TrainerPoolTier.RARE]: [Species.DRATINI, Species.LARVITAR], +}; + +/** Team Magma's admin trainer pool */ +const MAGMA: TrainerTierPools = { + [TrainerPoolTier.COMMON]: [ + Species.DIGLETT, + Species.GROWLITHE, + Species.VULPIX, + Species.KOFFING, + Species.RHYHORN, + Species.SLUGMA, + Species.HOUNDOUR, + Species.POOCHYENA, + Species.TORKOAL, + Species.ZANGOOSE, + Species.SOLROCK, + Species.BALTOY, + Species.ROLYCOLY, + ], + [TrainerPoolTier.UNCOMMON]: [ + Species.MAGBY, + Species.TRAPINCH, + Species.LILEEP, + Species.ANORITH, + Species.GOLETT, + Species.FLETCHLING, + Species.SALANDIT, + Species.TURTONATOR, + Species.TOEDSCOOL, + Species.CAPSAKID, + Species.HISUI_GROWLITHE, + ], + [TrainerPoolTier.RARE]: [Species.CHARCADET, Species.ARON], +}; + +const AQUA: TrainerTierPools = { + [TrainerPoolTier.COMMON]: [ + Species.TENTACOOL, + Species.GRIMER, + Species.AZURILL, + Species.CHINCHOU, + Species.REMORAID, + Species.POOCHYENA, + Species.LOTAD, + Species.WINGULL, + Species.WAILMER, + Species.SEVIPER, + Species.BARBOACH, + Species.CORPHISH, + Species.SPHEAL, + Species.CLAMPERL, + ], + [TrainerPoolTier.UNCOMMON]: [ + Species.MANTYKE, + Species.HORSEA, + Species.FEEBAS, + Species.TYMPOLE, + Species.SKRELP, + Species.WIMPOD, + Species.DHELMISE, + Species.ARROKUDA, + Species.CLOBBOPUS, + Species.HISUI_QWILFISH, + Species.WIGLETT, + ], + [TrainerPoolTier.RARE]: [Species.BASCULEGION, Species.DONDOZO], +}; + +const GALACTIC: TrainerTierPools = { + [TrainerPoolTier.COMMON]: [ + Species.ZUBAT, + Species.MAGNEMITE, + Species.RHYHORN, + Species.TANGELA, + Species.LICKITUNG, + Species.MAGIKARP, + Species.YANMA, + Species.MURKROW, + Species.SWINUB, + Species.ELEKID, + Species.MAGBY, + Species.BRONZOR, + Species.SKORUPI, + ], + [TrainerPoolTier.UNCOMMON]: [ + Species.ABRA, + Species.GLIGAR, + Species.SNEASEL, + Species.DUSKULL, + Species.DRIFLOON, + Species.CRANIDOS, + Species.SHIELDON, + Species.ROTOM, + Species.HISUI_QWILFISH, + ], + [TrainerPoolTier.RARE]: [Species.SPIRITOMB, Species.TEDDIURSA, Species.HISUI_SNEASEL, Species.HISUI_LILLIGANT], +}; + +const PLASMA_ZINZOLIN: TrainerTierPools = { + [TrainerPoolTier.COMMON]: [ + Species.SNEASEL, + Species.SWINUB, + Species.SNORUNT, + Species.SNOVER, + Species.TIMBURR, + Species.TYMPOLE, + Species.SANDILE, + Species.DARUMAKA, + Species.VANILLITE, + Species.FOONGUS, + Species.FRILLISH, + Species.JOLTIK, + Species.FERROSEED, + Species.CUBCHOO, + Species.GALAR_DARUMAKA, + ], + [TrainerPoolTier.UNCOMMON]: [ + Species.SPHEAL, + Species.DRILBUR, + Species.SIGILYPH, + Species.YAMASK, + Species.ZORUA, + Species.TYNAMO, + Species.MIENFOO, + Species.GOLETT, + Species.PAWNIARD, + Species.VULLABY, + Species.DURANT, + Species.BERGMITE, + Species.EISCUE, + Species.ALOLA_SANDSHREW, + Species.HISUI_ZORUA, + ], + [TrainerPoolTier.RARE]: [Species.DEINO, Species.FRIGIBAX, Species.HISUI_BRAVIARY], +}; + +const PLASMA_COLRESS: TrainerTierPools = { + [TrainerPoolTier.COMMON]: [ + Species.MAGNEMITE, + Species.GRIMER, + Species.VOLTORB, + Species.PORYGON, + Species.BRONZOR, + Species.ROTOM, + Species.MUNNA, + Species.DWEBBLE, + Species.FERROSEED, + Species.ELGYEM, + ], + [TrainerPoolTier.UNCOMMON]: [ + Species.BELDUM, + Species.SIGILYPH, + Species.TIRTOUGA, + Species.ARCHEN, + Species.TYNAMO, + Species.GOLETT, + Species.BLIPBUG, + Species.VAROOM, + Species.ALOLA_GRIMER, + Species.HISUI_VOLTORB, + ], + [TrainerPoolTier.RARE]: [Species.ELEKID, Species.MAGBY, Species.PAWNIARD, Species.DURALUDON], +}; + +const FLARE: TrainerTierPools = { + [TrainerPoolTier.COMMON]: [ + Species.ELECTRIKE, + Species.SKORUPI, + Species.PURRLOIN, + Species.FOONGUS, + Species.BUNNELBY, + Species.FLETCHLING, + Species.LITLEO, + Species.PANGORO, + Species.ESPURR, + Species.INKAY, + Species.CLAUNCHER, + Species.HELIOPTILE, + ], + [TrainerPoolTier.UNCOMMON]: [ + Species.HOUNDOUR, + Species.SNEASEL, + Species.LITWICK, + Species.HONEDGE, + Species.BINACLE, + Species.SKRELP, + Species.NOIBAT, + Species.PHANTUMP, + Species.PUMPKABOO, + ], + [TrainerPoolTier.RARE]: [Species.GOOMY, Species.HISUI_AVALUGG], +}; + +const AETHER: TrainerTierPools = { + [TrainerPoolTier.COMMON]: [ + Species.ABRA, + Species.SLOWPOKE, + Species.MAGNEMITE, + Species.EXEGGUTOR, + Species.NATU, + Species.BALTOY, + Species.MIME_JR, + Species.ELGYEM, + Species.INKAY, + Species.BRUXISH, + Species.BLIPBUG, + Species.ALOLA_RAICHU, + ], + [TrainerPoolTier.UNCOMMON]: [ + Species.RALTS, + Species.MEDITITE, + Species.BELDUM, + Species.SOLOSIS, + Species.HATENNA, + Species.STANTLER, + Species.GIRAFARIG, + Species.ALOLA_GRIMER, + Species.GALAR_SLOWPOKE, + ], + [TrainerPoolTier.RARE]: [Species.PORYGON, Species.ARMAROUGE], +}; + +const SKULL: TrainerTierPools = { + [TrainerPoolTier.COMMON]: [ + Species.GASTLY, + Species.KOFFING, + Species.ZUBAT, + Species.VENONAT, + Species.STUNKY, + Species.CROAGUNK, + Species.VENIPEDE, + Species.SCRAGGY, + Species.MAREANIE, + Species.FOMANTIS, + Species.ALOLA_GRIMER, + ], + [TrainerPoolTier.UNCOMMON]: [ + Species.NIDORAN_F, + Species.SKORUPI, + Species.PAWNIARD, + Species.VULLABY, + Species.TOXEL, + Species.GLIMMET, + Species.PALDEA_WOOPER, + Species.GALAR_SLOWPOKE, + ], + [TrainerPoolTier.RARE]: [Species.SKRELP, Species.HISUI_SNEASEL], +}; + +const MACRO_COSMOS: TrainerTierPools = { + [TrainerPoolTier.COMMON]: [ + Species.VULPIX, + Species.FEEBAS, + Species.MAWILE, + Species.FROSLASS, + Species.GOTHITA, + Species.FLABEBE, + Species.SALANDIT, + Species.TSAREENA, + Species.SINISTEA, + Species.HATENNA, + Species.INDEEDEE, + Species.GALAR_PONYTA, + ], + [TrainerPoolTier.UNCOMMON]: [ + Species.TOGEPI, + Species.VULLABY, + Species.MAREANIE, + Species.CUFANT, + Species.TINKATINK, + Species.ALOLA_VULPIX, + Species.GALAR_CORSOLA, + ], + [TrainerPoolTier.RARE]: [Species.APPLIN, Species.HISUI_LILLIGANT], +}; + +const STAR_DARK: TrainerTierPools = { + [TrainerPoolTier.COMMON]: [ + Species.MURKROW, + Species.SEEDOT, + Species.SABLEYE, + Species.CACNEA, + Species.STUNKY, + Species.SANDILE, + Species.INKAY, + Species.NYMBLE, + Species.MASCHIFF, + ], + [TrainerPoolTier.UNCOMMON]: [ + Species.UMBREON, + Species.CORPHISH, + Species.SNEASEL, + Species.ZORUA, + Species.IMPIDIMP, + Species.BOMBIRDIER, + Species.GALAR_ZIGZAGOON, + ], + [TrainerPoolTier.RARE]: [Species.DEINO, Species.SPRIGATITO], +}; + +const STAR_FIRE: TrainerTierPools = { + [TrainerPoolTier.COMMON]: [ + Species.GROWLITHE, + Species.HOUNDOUR, + Species.NUMEL, + Species.TORKOAL, + Species.FLETCHLING, + Species.LITLEO, + Species.SIZZLIPEDE, + Species.ROLYCOLY, + Species.CAPSAKID, + ], + [TrainerPoolTier.UNCOMMON]: [ + Species.PONYTA, + Species.FLAREON, + Species.MAGBY, + Species.DARUMAKA, + Species.LITWICK, + Species.SALANDIT, + Species.TURTONATOR, + ], + [TrainerPoolTier.RARE]: [Species.LARVESTA, Species.FUECOCO], +}; + +const STAR_POISON: TrainerTierPools = { + [TrainerPoolTier.COMMON]: [ + Species.GRIMER, + Species.VENONAT, + Species.SEVIPER, + Species.STUNKY, + Species.FOONGUS, + Species.MAREANIE, + Species.TOXEL, + Species.GRAFAIAI, + Species.PALDEA_WOOPER, + ], + [TrainerPoolTier.UNCOMMON]: [ + Species.ZUBAT, + Species.GASTLY, + Species.SKRELP, + Species.OVERQWIL, + Species.ALOLA_GRIMER, + Species.GALAR_SLOWPOKE, + ], + [TrainerPoolTier.RARE]: [Species.GLIMMET, Species.BULBASAUR], +}; + +const STAR_FAIRY: TrainerTierPools = { + [TrainerPoolTier.COMMON]: [ + Species.IGGLYBUFF, + Species.AZURILL, + Species.COTTONEE, + Species.FLABEBE, + Species.KLEFKI, + Species.CUTIEFLY, + Species.HATENNA, + Species.TINKATINK, + ], + [TrainerPoolTier.UNCOMMON]: [ + Species.CLEFFA, + Species.TOGEPI, + Species.GARDEVOIR, + Species.SYLVEON, + Species.MIMIKYU, + Species.IMPIDIMP, + Species.ALOLA_VULPIX, + ], + [TrainerPoolTier.RARE]: [Species.GALAR_PONYTA, Species.POPPLIO], +}; + +const STAR_FIGHTING: TrainerTierPools = { + [TrainerPoolTier.COMMON]: [ + Species.TYROGUE, + Species.SHROOMISH, + Species.MAKUHITA, + Species.RIOLU, + Species.CROAGUNK, + Species.SCRAGGY, + Species.MIENFOO, + Species.PASSIMIAN, + Species.PAWMI, + ], + [TrainerPoolTier.UNCOMMON]: [ + Species.MEDITITE, + Species.GALLADE, + Species.TIMBURR, + Species.HAWLUCHA, + Species.STUFFUL, + Species.FALINKS, + Species.FLAMIGO, + Species.PALDEA_TAUROS, + ], + [TrainerPoolTier.RARE]: [Species.JANGMO_O, Species.QUAXLY], +}; + +export type EvilTeam = + | "rocket" + | "magma" + | "aqua" + | "galactic" + | "plasma_zinzolin" + | "plasma_colress" + | "flare" + | "aether" + | "skull" + | "macro_cosmos" + | "star_dark" + | "star_fire" + | "star_poison" + | "star_fairy" + | "star_fighting"; + +/** Trainer pools for each evil admin team */ +export const evilAdminTrainerPools: Record = { + rocket: ROCKET, + magma: MAGMA, + aqua: AQUA, + galactic: GALACTIC, + plasma_zinzolin: PLASMA_ZINZOLIN, + plasma_colress: PLASMA_COLRESS, + flare: FLARE, + aether: AETHER, + macro_cosmos: MACRO_COSMOS, + skull: SKULL, + star_dark: STAR_DARK, + star_fire: STAR_FIRE, + star_poison: STAR_POISON, + star_fairy: STAR_FAIRY, + star_fighting: STAR_FIGHTING, +}; diff --git a/src/data/trainer-config.ts b/src/data/trainers/trainer-config.ts similarity index 87% rename from src/data/trainer-config.ts rename to src/data/trainers/trainer-config.ts index ffe5cdfe04c..0ab7119dab9 100644 --- a/src/data/trainer-config.ts +++ b/src/data/trainers/trainer-config.ts @@ -1,29 +1,54 @@ -import { startingWave } from "#app/battle-scene"; import { globalScene } from "#app/global-scene"; -import type { ModifierTypeFunc } from "#app/modifier/modifier-type"; import { modifierTypes } from "#app/modifier/modifier-type"; -import type { EnemyPokemon } from "#app/field/pokemon"; import { PokemonMove } from "#app/field/pokemon"; -import * as Utils from "#app/utils"; -import { PokeballType } from "#enums/pokeball"; +import { toReadableString, isNullOrUndefined, randSeedItem, randSeedInt } from "#app/utils"; import { pokemonEvolutions, pokemonPrevolutions } from "#app/data/balance/pokemon-evolutions"; -import type { PokemonSpeciesFilter } from "#app/data/pokemon-species"; -import type PokemonSpecies from "#app/data/pokemon-species"; import { getPokemonSpecies } from "#app/data/pokemon-species"; import { tmSpecies } from "#app/data/balance/tms"; -import { PokemonType } from "#enums/pokemon-type"; import { doubleBattleDialogue } from "#app/data/dialogue"; -import type { PersistentModifier } from "#app/modifier/modifier"; import { TrainerVariant } from "#app/field/trainer"; import { getIsInitialized, initI18n } from "#app/plugins/i18n"; import i18next from "i18next"; -import { Moves } from "#enums/moves"; +import { Gender } from "#app/data/gender"; +import { signatureSpecies } from "../balance/signature-species"; +import { + getEvilGruntPartyTemplate, + getGymLeaderPartyTemplate, + getWavePartyTemplate, + TrainerPartyCompoundTemplate, + TrainerPartyTemplate, + trainerPartyTemplates, +} from "./TrainerPartyTemplate"; +import { evilAdminTrainerPools } from "./evil-admin-trainer-pools"; + +// Enum imports import { PartyMemberStrength } from "#enums/party-member-strength"; import { Species } from "#enums/species"; -import { TrainerType } from "#enums/trainer-type"; -import { Gender } from "#app/data/gender"; -import { signatureSpecies } from "./balance/signature-species"; +import { PokeballType } from "#enums/pokeball"; +import { PokemonType } from "#enums/pokemon-type"; +import { Moves } from "#enums/moves"; import { Abilities } from "#enums/abilities"; +import { TeraAIMode } from "#enums/tera-ai-mode"; +import { TrainerPoolTier } from "#enums/trainer-pool-tier"; +import { TrainerSlot } from "#enums/trainer-slot"; +import { TrainerType } from "#enums/trainer-type"; +import { timedEventManager } from "#app/global-event-manager"; + +// Type imports +import type { PokemonSpeciesFilter } from "#app/data/pokemon-species"; +import type PokemonSpecies from "#app/data/pokemon-species"; +import type { ModifierTypeFunc } from "#app/modifier/modifier-type"; +import type { EnemyPokemon } from "#app/field/pokemon"; +import type { EvilTeam } from "./evil-admin-trainer-pools"; +import type { + PartyMemberFunc, + GenModifiersFunc, + GenAIFunc, + PartyTemplateFunc, + TrainerTierPools, + TrainerConfigs, + PartyMemberFuncs, +} from "./typedefs"; /** Minimum BST for Pokemon generated onto the Elite Four's teams */ const ELITE_FOUR_MINIMUM_BST = 460; @@ -31,253 +56,6 @@ const ELITE_FOUR_MINIMUM_BST = 460; /** The wave at which (non-Paldean) Gym Leaders start having Tera mons*/ const GYM_LEADER_TERA_WAVE = 100; -export enum TrainerPoolTier { - COMMON, - UNCOMMON, - RARE, - SUPER_RARE, - ULTRA_RARE, -} - -export interface TrainerTierPools { - [key: number]: Species[]; -} - -export enum TrainerSlot { - NONE, - TRAINER, - TRAINER_PARTNER, -} - -export class TrainerPartyTemplate { - public size: number; - public strength: PartyMemberStrength; - public sameSpecies: boolean; - public balanced: boolean; - - constructor(size: number, strength: PartyMemberStrength, sameSpecies?: boolean, balanced?: boolean) { - this.size = size; - this.strength = strength; - this.sameSpecies = !!sameSpecies; - this.balanced = !!balanced; - } - - getStrength(_index: number): PartyMemberStrength { - return this.strength; - } - - isSameSpecies(_index: number): boolean { - return this.sameSpecies; - } - - isBalanced(_index: number): boolean { - return this.balanced; - } -} - -export class TrainerPartyCompoundTemplate extends TrainerPartyTemplate { - public templates: TrainerPartyTemplate[]; - - constructor(...templates: TrainerPartyTemplate[]) { - super( - templates.reduce((total: number, template: TrainerPartyTemplate) => { - total += template.size; - return total; - }, 0), - PartyMemberStrength.AVERAGE, - ); - this.templates = templates; - } - - getStrength(index: number): PartyMemberStrength { - let t = 0; - for (const template of this.templates) { - if (t + template.size > index) { - return template.getStrength(index - t); - } - t += template.size; - } - - return super.getStrength(index); - } - - isSameSpecies(index: number): boolean { - let t = 0; - for (const template of this.templates) { - if (t + template.size > index) { - return template.isSameSpecies(index - t); - } - t += template.size; - } - - return super.isSameSpecies(index); - } - - isBalanced(index: number): boolean { - let t = 0; - for (const template of this.templates) { - if (t + template.size > index) { - return template.isBalanced(index - t); - } - t += template.size; - } - - return super.isBalanced(index); - } -} - -export const trainerPartyTemplates = { - ONE_WEAK_ONE_STRONG: new TrainerPartyCompoundTemplate( - new TrainerPartyTemplate(1, PartyMemberStrength.WEAK), - new TrainerPartyTemplate(1, PartyMemberStrength.STRONG), - ), - ONE_AVG: new TrainerPartyTemplate(1, PartyMemberStrength.AVERAGE), - ONE_AVG_ONE_STRONG: new TrainerPartyCompoundTemplate( - new TrainerPartyTemplate(1, PartyMemberStrength.AVERAGE), - new TrainerPartyTemplate(1, PartyMemberStrength.STRONG), - ), - ONE_STRONG: new TrainerPartyTemplate(1, PartyMemberStrength.STRONG), - ONE_STRONGER: new TrainerPartyTemplate(1, PartyMemberStrength.STRONGER), - TWO_WEAKER: new TrainerPartyTemplate(2, PartyMemberStrength.WEAKER), - TWO_WEAK: new TrainerPartyTemplate(2, PartyMemberStrength.WEAK), - TWO_WEAK_ONE_AVG: new TrainerPartyCompoundTemplate( - new TrainerPartyTemplate(2, PartyMemberStrength.WEAK), - new TrainerPartyTemplate(1, PartyMemberStrength.AVERAGE), - ), - TWO_WEAK_SAME_ONE_AVG: new TrainerPartyCompoundTemplate( - new TrainerPartyTemplate(2, PartyMemberStrength.WEAK, true), - new TrainerPartyTemplate(1, PartyMemberStrength.AVERAGE), - ), - TWO_WEAK_SAME_TWO_WEAK_SAME: new TrainerPartyCompoundTemplate( - new TrainerPartyTemplate(2, PartyMemberStrength.WEAK, true), - new TrainerPartyTemplate(2, PartyMemberStrength.WEAK, true), - ), - TWO_WEAK_ONE_STRONG: new TrainerPartyCompoundTemplate( - new TrainerPartyTemplate(2, PartyMemberStrength.WEAK), - new TrainerPartyTemplate(1, PartyMemberStrength.STRONG), - ), - TWO_AVG: new TrainerPartyTemplate(2, PartyMemberStrength.AVERAGE), - TWO_AVG_ONE_STRONG: new TrainerPartyCompoundTemplate( - new TrainerPartyTemplate(2, PartyMemberStrength.AVERAGE), - new TrainerPartyTemplate(1, PartyMemberStrength.STRONG), - ), - TWO_AVG_SAME_ONE_AVG: new TrainerPartyCompoundTemplate( - new TrainerPartyTemplate(2, PartyMemberStrength.AVERAGE, true), - new TrainerPartyTemplate(1, PartyMemberStrength.AVERAGE), - ), - TWO_AVG_SAME_ONE_STRONG: new TrainerPartyCompoundTemplate( - new TrainerPartyTemplate(2, PartyMemberStrength.AVERAGE, true), - new TrainerPartyTemplate(1, PartyMemberStrength.STRONG), - ), - TWO_AVG_SAME_TWO_AVG_SAME: new TrainerPartyCompoundTemplate( - new TrainerPartyTemplate(2, PartyMemberStrength.AVERAGE, true), - new TrainerPartyTemplate(2, PartyMemberStrength.AVERAGE, true), - ), - TWO_STRONG: new TrainerPartyTemplate(2, PartyMemberStrength.STRONG), - THREE_WEAK: new TrainerPartyTemplate(3, PartyMemberStrength.WEAK), - THREE_WEAK_SAME: new TrainerPartyTemplate(3, PartyMemberStrength.WEAK, true), - THREE_AVG: new TrainerPartyTemplate(3, PartyMemberStrength.AVERAGE), - THREE_AVG_SAME: new TrainerPartyTemplate(3, PartyMemberStrength.AVERAGE, true), - THREE_WEAK_BALANCED: new TrainerPartyTemplate(3, PartyMemberStrength.WEAK, false, true), - FOUR_WEAKER: new TrainerPartyTemplate(4, PartyMemberStrength.WEAKER), - FOUR_WEAKER_SAME: new TrainerPartyTemplate(4, PartyMemberStrength.WEAKER, true), - FOUR_WEAK: new TrainerPartyTemplate(4, PartyMemberStrength.WEAK), - FOUR_WEAK_SAME: new TrainerPartyTemplate(4, PartyMemberStrength.WEAK, true), - FOUR_WEAK_BALANCED: new TrainerPartyTemplate(4, PartyMemberStrength.WEAK, false, true), - FIVE_WEAKER: new TrainerPartyTemplate(5, PartyMemberStrength.WEAKER), - FIVE_WEAK: new TrainerPartyTemplate(5, PartyMemberStrength.WEAK), - FIVE_WEAK_BALANCED: new TrainerPartyTemplate(5, PartyMemberStrength.WEAK, false, true), - SIX_WEAKER: new TrainerPartyTemplate(6, PartyMemberStrength.WEAKER), - SIX_WEAKER_SAME: new TrainerPartyTemplate(6, PartyMemberStrength.WEAKER, true), - SIX_WEAK_SAME: new TrainerPartyTemplate(6, PartyMemberStrength.WEAK, true), - SIX_WEAK_BALANCED: new TrainerPartyTemplate(6, PartyMemberStrength.WEAK, false, true), - - GYM_LEADER_1: new TrainerPartyCompoundTemplate( - new TrainerPartyTemplate(1, PartyMemberStrength.AVERAGE), - new TrainerPartyTemplate(1, PartyMemberStrength.STRONG), - ), - GYM_LEADER_2: new TrainerPartyCompoundTemplate( - new TrainerPartyTemplate(1, PartyMemberStrength.AVERAGE), - new TrainerPartyTemplate(1, PartyMemberStrength.STRONG), - new TrainerPartyTemplate(1, PartyMemberStrength.STRONGER), - ), - GYM_LEADER_3: new TrainerPartyCompoundTemplate( - new TrainerPartyTemplate(2, PartyMemberStrength.AVERAGE), - new TrainerPartyTemplate(1, PartyMemberStrength.STRONG), - new TrainerPartyTemplate(1, PartyMemberStrength.STRONGER), - ), - GYM_LEADER_4: new TrainerPartyCompoundTemplate( - new TrainerPartyTemplate(3, PartyMemberStrength.AVERAGE), - new TrainerPartyTemplate(1, PartyMemberStrength.STRONG), - new TrainerPartyTemplate(1, PartyMemberStrength.STRONGER), - ), - GYM_LEADER_5: new TrainerPartyCompoundTemplate( - new TrainerPartyTemplate(3, PartyMemberStrength.AVERAGE), - new TrainerPartyTemplate(2, PartyMemberStrength.STRONG), - new TrainerPartyTemplate(1, PartyMemberStrength.STRONGER), - ), - - ELITE_FOUR: new TrainerPartyCompoundTemplate( - new TrainerPartyTemplate(2, PartyMemberStrength.AVERAGE), - new TrainerPartyTemplate(3, PartyMemberStrength.STRONG), - new TrainerPartyTemplate(1, PartyMemberStrength.STRONGER), - ), - - CHAMPION: new TrainerPartyCompoundTemplate( - new TrainerPartyTemplate(4, PartyMemberStrength.STRONG), - new TrainerPartyTemplate(2, PartyMemberStrength.STRONGER, false, true), - ), - - RIVAL: new TrainerPartyCompoundTemplate( - new TrainerPartyTemplate(1, PartyMemberStrength.STRONG), - new TrainerPartyTemplate(1, PartyMemberStrength.AVERAGE), - ), - RIVAL_2: new TrainerPartyCompoundTemplate( - new TrainerPartyTemplate(1, PartyMemberStrength.STRONG), - new TrainerPartyTemplate(1, PartyMemberStrength.AVERAGE), - new TrainerPartyTemplate(1, PartyMemberStrength.WEAK, false, true), - ), - RIVAL_3: new TrainerPartyCompoundTemplate( - new TrainerPartyTemplate(1, PartyMemberStrength.STRONG), - new TrainerPartyTemplate(1, PartyMemberStrength.AVERAGE), - new TrainerPartyTemplate(1, PartyMemberStrength.AVERAGE, false, true), - new TrainerPartyTemplate(1, PartyMemberStrength.WEAK, false, true), - ), - RIVAL_4: new TrainerPartyCompoundTemplate( - new TrainerPartyTemplate(1, PartyMemberStrength.STRONG), - new TrainerPartyTemplate(1, PartyMemberStrength.AVERAGE), - new TrainerPartyTemplate(2, PartyMemberStrength.AVERAGE, false, true), - new TrainerPartyTemplate(1, PartyMemberStrength.WEAK, false, true), - ), - RIVAL_5: new TrainerPartyCompoundTemplate( - new TrainerPartyTemplate(1, PartyMemberStrength.STRONG), - new TrainerPartyTemplate(1, PartyMemberStrength.AVERAGE), - new TrainerPartyTemplate(3, PartyMemberStrength.AVERAGE, false, true), - new TrainerPartyTemplate(1, PartyMemberStrength.STRONG), - ), - RIVAL_6: new TrainerPartyCompoundTemplate( - new TrainerPartyTemplate(1, PartyMemberStrength.STRONG), - new TrainerPartyTemplate(1, PartyMemberStrength.AVERAGE), - new TrainerPartyTemplate(3, PartyMemberStrength.AVERAGE, false, true), - new TrainerPartyTemplate(1, PartyMemberStrength.STRONGER), - ), -}; - -type PartyTemplateFunc = () => TrainerPartyTemplate; -type PartyMemberFunc = (level: number, strength: PartyMemberStrength) => EnemyPokemon; -type GenModifiersFunc = (party: EnemyPokemon[]) => PersistentModifier[]; -type GenAIFunc = (party: EnemyPokemon[]) => void; - -export interface PartyMemberFuncs { - [key: number]: PartyMemberFunc; -} - -export enum TeraAIMode { - NO_TERA, - INSTANT_TERA, - SMART_TERA, -} - /** * Stores data and helper functions about a trainers AI options. */ @@ -361,7 +139,7 @@ export class TrainerConfig { constructor(trainerType: TrainerType, allowLegendaries?: boolean) { this.trainerType = trainerType; this.trainerAI = new TrainerAI(); - this.name = Utils.toReadableString(TrainerType[this.getDerivedType()]); + this.name = toReadableString(TrainerType[this.getDerivedType()]); this.battleBgm = "battle_trainer"; this.mixedBattleBgm = "battle_trainer"; this.victoryBgm = "victory_trainer"; @@ -704,10 +482,10 @@ export class TrainerConfig { .fill(null) .map((_, i) => i) .filter(i => shedinjaCanTera || party[i].species.speciesId !== Species.SHEDINJA); // Shedinja can only Tera on Bug specialty type (or no specialty type) - const setPartySlot = !Utils.isNullOrUndefined(slot) ? Phaser.Math.Wrap(slot, 0, party.length) : -1; // If we have a tera slot defined, wrap it to party size. + const setPartySlot = !isNullOrUndefined(slot) ? Phaser.Math.Wrap(slot, 0, party.length) : -1; // If we have a tera slot defined, wrap it to party size. for (let t = 0; t < Math.min(count(), party.length); t++) { const randomIndex = - partyMemberIndexes.indexOf(setPartySlot) > -1 ? setPartySlot : Utils.randSeedItem(partyMemberIndexes); + partyMemberIndexes.indexOf(setPartySlot) > -1 ? setPartySlot : randSeedItem(partyMemberIndexes); partyMemberIndexes.splice(partyMemberIndexes.indexOf(randomIndex), 1); if (this.hasSpecialtyType()) { party[randomIndex].teraType = this.specialtyType; @@ -739,13 +517,13 @@ export class TrainerConfig { // return ret; // } - setEventModifierRewardFuncs(...modifierTypeFuncs: (() => ModifierTypeFunc)[]): TrainerConfig { - this.eventRewardFuncs = modifierTypeFuncs.map(func => () => { - const modifierTypeFunc = func(); - const modifierType = modifierTypeFunc(); - modifierType.withIdFromFunc(modifierTypeFunc); - return modifierType; - }); + /** + * Sets eventRewardFuncs to the active event rewards for the specified wave + * @param wave Associated with {@linkcode getFixedBattleEventRewards} + * @returns this + */ + setEventModifierRewardFuncs(wave: number): TrainerConfig { + this.eventRewardFuncs = timedEventManager.getFixedBattleEventRewards(wave).map(r => modifierTypes[r]); return this; } @@ -759,430 +537,6 @@ export class TrainerConfig { return this; } - /** - * Returns the pool of species for an evil team admin - * @param team - The evil team the admin belongs to. - * @returns {TrainerTierPools} - */ - speciesPoolPerEvilTeamAdmin(team): TrainerTierPools { - team = team.toLowerCase(); - switch (team) { - case "rocket": { - return { - [TrainerPoolTier.COMMON]: [ - Species.RATICATE, - Species.ARBOK, - Species.VILEPLUME, - Species.ARCANINE, - Species.GENGAR, - Species.HYPNO, - Species.ELECTRODE, - Species.EXEGGUTOR, - Species.CUBONE, - Species.KOFFING, - Species.GYARADOS, - Species.CROBAT, - Species.STEELIX, - Species.HOUNDOOM, - Species.HONCHKROW, - ], - [TrainerPoolTier.UNCOMMON]: [ - Species.OMASTAR, - Species.KABUTOPS, - Species.MAGNEZONE, - Species.ELECTIVIRE, - Species.MAGMORTAR, - Species.PORYGON_Z, - Species.ANNIHILAPE, - Species.ALOLA_SANDSLASH, - Species.ALOLA_PERSIAN, - Species.ALOLA_GOLEM, - Species.ALOLA_MUK, - Species.PALDEA_TAUROS, - ], - [TrainerPoolTier.RARE]: [Species.DRAGONITE, Species.TYRANITAR], - }; - } - case "magma": { - return { - [TrainerPoolTier.COMMON]: [ - Species.ARCANINE, - Species.MAGCARGO, - Species.HOUNDOOM, - Species.TORKOAL, - Species.SOLROCK, - Species.CLAYDOL, - Species.HIPPOWDON, - Species.MAGMORTAR, - Species.GLISCOR, - Species.COALOSSAL, - ], - [TrainerPoolTier.UNCOMMON]: [ - Species.AGGRON, - Species.FLYGON, - Species.CRADILY, - Species.ARMALDO, - Species.RHYPERIOR, - Species.TURTONATOR, - Species.SANDACONDA, - Species.TOEDSCRUEL, - Species.HISUI_ARCANINE, - ], - [TrainerPoolTier.RARE]: [Species.CHARCADET, Species.SCOVILLAIN], - }; - } - case "aqua": { - return { - [TrainerPoolTier.COMMON]: [ - Species.TENTACRUEL, - Species.LANTURN, - Species.AZUMARILL, - Species.QUAGSIRE, - Species.OCTILLERY, - Species.LUDICOLO, - Species.PELIPPER, - Species.WAILORD, - Species.WHISCASH, - Species.CRAWDAUNT, - Species.WALREIN, - Species.CLAMPERL, - ], - [TrainerPoolTier.UNCOMMON]: [ - Species.QUAGSIRE, - Species.MANTINE, - Species.KINGDRA, - Species.MILOTIC, - Species.DRAGALGE, - Species.DHELMISE, - Species.BARRASKEWDA, - Species.GRAPPLOCT, - Species.OVERQWIL, - ], - [TrainerPoolTier.RARE]: [Species.BASCULEGION, Species.DONDOZO], - }; - } - case "galactic": { - return { - [TrainerPoolTier.COMMON]: [ - Species.ELECTRODE, - Species.GYARADOS, - Species.CROBAT, - Species.HONCHKROW, - Species.BRONZONG, - Species.DRAPION, - Species.LICKILICKY, - Species.TANGROWTH, - Species.ELECTIVIRE, - Species.MAGMORTAR, - Species.YANMEGA, - Species.MAMOSWINE, - ], - [TrainerPoolTier.UNCOMMON]: [ - Species.ALAKAZAM, - Species.WEAVILE, - Species.GLISCOR, - Species.DUSKNOIR, - Species.ROTOM, - Species.OVERQWIL, - Species.HISUI_ARCANINE, - Species.HISUI_ELECTRODE, - ], - [TrainerPoolTier.RARE]: [Species.SPIRITOMB, Species.URSALUNA, Species.SNEASLER, Species.HISUI_LILLIGANT], - }; - } - case "plasma": { - return { - [TrainerPoolTier.COMMON]: [ - Species.GIGALITH, - Species.CONKELDURR, - Species.SEISMITOAD, - Species.KROOKODILE, - Species.DARMANITAN, - Species.COFAGRIGUS, - Species.VANILLUXE, - Species.AMOONGUSS, - Species.JELLICENT, - Species.GALVANTULA, - Species.FERROTHORN, - Species.BEARTIC, - ], - [TrainerPoolTier.UNCOMMON]: [ - Species.EXCADRILL, - Species.SIGILYPH, - Species.ZOROARK, - Species.KLINKLANG, - Species.EELEKTROSS, - Species.MIENSHAO, - Species.GOLURK, - Species.BISHARP, - Species.MANDIBUZZ, - Species.DURANT, - Species.GALAR_DARMANITAN, - ], - [TrainerPoolTier.RARE]: [Species.HAXORUS, Species.HYDREIGON, Species.HISUI_ZOROARK, Species.HISUI_BRAVIARY], - }; - } - case "plasma_2": { - return { - [TrainerPoolTier.COMMON]: [ - Species.MUK, - Species.ELECTRODE, - Species.BRONZONG, - Species.MAGNEZONE, - Species.PORYGON_Z, - Species.MUSHARNA, - Species.REUNICLUS, - Species.GALVANTULA, - Species.FERROTHORN, - Species.EELEKTROSS, - Species.BEHEEYEM, - ], - [TrainerPoolTier.UNCOMMON]: [ - Species.METAGROSS, - Species.ROTOM, - Species.CARRACOSTA, - Species.ARCHEOPS, - Species.GOLURK, - Species.DURANT, - Species.VIKAVOLT, - Species.ORBEETLE, - Species.REVAVROOM, - Species.ALOLA_MUK, - Species.HISUI_ELECTRODE, - ], - [TrainerPoolTier.RARE]: [Species.ELECTIVIRE, Species.MAGMORTAR, Species.BISHARP, Species.ARCHALUDON], - }; - } - case "flare": { - return { - [TrainerPoolTier.COMMON]: [ - Species.MANECTRIC, - Species.DRAPION, - Species.LIEPARD, - Species.AMOONGUSS, - Species.DIGGERSBY, - Species.TALONFLAME, - Species.PYROAR, - Species.PANGORO, - Species.MEOWSTIC, - Species.MALAMAR, - Species.CLAWITZER, - Species.HELIOLISK, - ], - [TrainerPoolTier.UNCOMMON]: [ - Species.HOUNDOOM, - Species.WEAVILE, - Species.CHANDELURE, - Species.AEGISLASH, - Species.BARBARACLE, - Species.DRAGALGE, - Species.GOODRA, - Species.TREVENANT, - Species.GOURGEIST, - ], - [TrainerPoolTier.RARE]: [Species.NOIVERN, Species.HISUI_GOODRA, Species.HISUI_AVALUGG], - }; - } - case "aether": { - return { - [TrainerPoolTier.COMMON]: [ - Species.ALAKAZAM, - Species.SLOWBRO, - Species.EXEGGUTOR, - Species.XATU, - Species.CLAYDOL, - Species.BEHEEYEM, - Species.ORANGURU, - Species.BRUXISH, - Species.ORBEETLE, - Species.FARIGIRAF, - Species.ALOLA_RAICHU, - ], - [TrainerPoolTier.UNCOMMON]: [ - Species.KIRLIA, - Species.MEDICHAM, - Species.METAGROSS, - Species.MALAMAR, - Species.HATTERENE, - Species.MR_RIME, - Species.GALAR_SLOWKING, - ], - [TrainerPoolTier.RARE]: [Species.PORYGON_Z, Species.ARMAROUGE, Species.HISUI_BRAVIARY], - }; - } - case "skull": { - return { - [TrainerPoolTier.COMMON]: [ - Species.NIDOQUEEN, - Species.GENGAR, - Species.KOFFING, - Species.CROBAT, - Species.ROSERADE, - Species.SKUNTANK, - Species.TOXICROAK, - Species.SCOLIPEDE, - Species.TOXAPEX, - Species.LURANTIS, - Species.ALOLA_MUK, - ], - [TrainerPoolTier.UNCOMMON]: [ - Species.DRAPION, - Species.MANDIBUZZ, - Species.OVERQWIL, - Species.GLIMMORA, - Species.CLODSIRE, - Species.GALAR_SLOWBRO, - ], - [TrainerPoolTier.RARE]: [Species.DRAGALGE, Species.SNEASLER], - }; - } - case "macro": { - return { - [TrainerPoolTier.COMMON]: [ - Species.NINETALES, - Species.BELLOSSOM, - Species.MILOTIC, - Species.FROSLASS, - Species.GOTHITELLE, - Species.JELLICENT, - Species.SALAZZLE, - Species.TSAREENA, - Species.POLTEAGEIST, - Species.HATTERENE, - Species.GALAR_RAPIDASH, - ], - [TrainerPoolTier.UNCOMMON]: [ - Species.TOGEKISS, - Species.MANDIBUZZ, - Species.TOXAPEX, - Species.APPLETUN, - Species.CURSOLA, - Species.ALOLA_NINETALES, - ], - [TrainerPoolTier.RARE]: [Species.TINKATON, Species.HISUI_LILLIGANT], - }; - } - case "star_1": { - return { - [TrainerPoolTier.COMMON]: [ - Species.SHIFTRY, - Species.CACTURNE, - Species.HONCHKROW, - Species.SKUNTANK, - Species.KROOKODILE, - Species.OBSTAGOON, - Species.LOKIX, - Species.MABOSSTIFF, - ], - [TrainerPoolTier.UNCOMMON]: [ - Species.UMBREON, - Species.CRAWDAUNT, - Species.WEAVILE, - Species.ZOROARK, - Species.MALAMAR, - Species.BOMBIRDIER, - ], - [TrainerPoolTier.RARE]: [Species.HYDREIGON, Species.MEOWSCARADA], - }; - } - case "star_2": { - return { - [TrainerPoolTier.COMMON]: [ - Species.ARCANINE, - Species.HOUNDOOM, - Species.CAMERUPT, - Species.CHANDELURE, - Species.TALONFLAME, - Species.PYROAR, - Species.COALOSSAL, - Species.SCOVILLAIN, - ], - [TrainerPoolTier.UNCOMMON]: [ - Species.RAPIDASH, - Species.FLAREON, - Species.TORKOAL, - Species.MAGMORTAR, - Species.SALAZZLE, - Species.TURTONATOR, - ], - [TrainerPoolTier.RARE]: [Species.VOLCARONA, Species.SKELEDIRGE], - }; - } - case "star_3": { - return { - [TrainerPoolTier.COMMON]: [ - Species.MUK, - Species.CROBAT, - Species.SKUNTANK, - Species.AMOONGUSS, - Species.TOXAPEX, - Species.TOXTRICITY, - Species.GRAFAIAI, - Species.CLODSIRE, - ], - [TrainerPoolTier.UNCOMMON]: [ - Species.GENGAR, - Species.SEVIPER, - Species.DRAGALGE, - Species.OVERQWIL, - Species.ALOLA_MUK, - Species.GALAR_SLOWBRO, - ], - [TrainerPoolTier.RARE]: [Species.GLIMMORA, Species.VENUSAUR], - }; - } - case "star_4": { - return { - [TrainerPoolTier.COMMON]: [ - Species.CLEFABLE, - Species.WIGGLYTUFF, - Species.AZUMARILL, - Species.WHIMSICOTT, - Species.FLORGES, - Species.HATTERENE, - Species.GRIMMSNARL, - Species.TINKATON, - ], - [TrainerPoolTier.UNCOMMON]: [ - Species.TOGEKISS, - Species.GARDEVOIR, - Species.SYLVEON, - Species.KLEFKI, - Species.MIMIKYU, - Species.ALOLA_NINETALES, - ], - [TrainerPoolTier.RARE]: [Species.GALAR_RAPIDASH, Species.PRIMARINA], - }; - } - case "star_5": { - return { - [TrainerPoolTier.COMMON]: [ - Species.BRELOOM, - Species.HARIYAMA, - Species.MEDICHAM, - Species.TOXICROAK, - Species.SCRAFTY, - Species.MIENSHAO, - Species.PAWMOT, - Species.PALDEA_TAUROS, - ], - [TrainerPoolTier.UNCOMMON]: [ - Species.LUCARIO, - Species.CONKELDURR, - Species.HAWLUCHA, - Species.PASSIMIAN, - Species.FALINKS, - Species.FLAMIGO, - ], - [TrainerPoolTier.RARE]: [Species.KOMMO_O, Species.QUAQUAVAL], - }; - } - } - - console.warn(`Evil team admin for ${team} not found. Returning empty species pools.`); - return []; - } - /** * Initializes the trainer configuration for an evil team admin. * @param title The title of the evil team admin. @@ -1193,7 +547,7 @@ export class TrainerConfig { * **/ initForEvilTeamAdmin( title: string, - poolName: string, + poolName: EvilTeam, signatureSpecies: (Species | Species[])[], specialtyType?: PokemonType, ): TrainerConfig { @@ -1201,14 +555,14 @@ export class TrainerConfig { initI18n(); } - if (!Utils.isNullOrUndefined(specialtyType)) { + if (!isNullOrUndefined(specialtyType)) { this.setSpecialtyType(specialtyType); } this.setPartyTemplates(trainerPartyTemplates.RIVAL_5); // Set the species pools for the evil team admin. - this.speciesPools = this.speciesPoolPerEvilTeamAdmin(poolName); + this.speciesPools = evilAdminTrainerPools[poolName]; signatureSpecies.forEach((speciesPool, s) => { if (!Array.isArray(speciesPool)) { @@ -1282,7 +636,7 @@ export class TrainerConfig { } this.setPartyMemberFunc(-(s + 1), getRandomPartyMemberFunc(speciesPool)); }); - if (!Utils.isNullOrUndefined(specialtyType)) { + if (!isNullOrUndefined(specialtyType)) { this.setSpeciesFilter(p => p.isOfType(specialtyType)); this.setSpecialtyType(specialtyType); } @@ -1395,7 +749,7 @@ export class TrainerConfig { }); // Set species filter and specialty type if provided, otherwise filter by base total. - if (!Utils.isNullOrUndefined(specialtyType)) { + if (!isNullOrUndefined(specialtyType)) { this.setSpeciesFilter(p => p.isOfType(specialtyType) && p.baseTotal >= ELITE_FOUR_MINIMUM_BST); this.setSpecialtyType(specialtyType); } else { @@ -1573,7 +927,7 @@ export class TrainerConfig { * @returns true if specialtyType is defined and not Type.UNKNOWN */ hasSpecialtyType(): boolean { - return !Utils.isNullOrUndefined(this.specialtyType) && this.specialtyType !== PokemonType.UNKNOWN; + return !isNullOrUndefined(this.specialtyType) && this.specialtyType !== PokemonType.UNKNOWN; } /** @@ -1637,56 +991,6 @@ export class TrainerConfig { let t = 0; -interface TrainerConfigs { - [key: number]: TrainerConfig; -} - -/** - * The function to get variable strength grunts - * @returns the correct TrainerPartyTemplate - */ -function getEvilGruntPartyTemplate(): TrainerPartyTemplate { - const waveIndex = globalScene.currentBattle?.waveIndex; - if (waveIndex < 40) { - return trainerPartyTemplates.TWO_AVG; - } - if (waveIndex < 63) { - return trainerPartyTemplates.THREE_AVG; - } - if (waveIndex < 65) { - return trainerPartyTemplates.TWO_AVG_ONE_STRONG; - } - if (waveIndex < 112) { - return trainerPartyTemplates.GYM_LEADER_4; // 3avg 1 strong 1 stronger - } - return trainerPartyTemplates.GYM_LEADER_5; // 3 avg 2 strong 1 stronger -} - -function getWavePartyTemplate(...templates: TrainerPartyTemplate[]) { - return templates[ - Math.min( - Math.max( - Math.ceil( - (globalScene.gameMode.getWaveForDifficulty(globalScene.currentBattle?.waveIndex || startingWave, true) - 20) / - 30, - ), - 0, - ), - templates.length - 1, - ) - ]; -} - -function getGymLeaderPartyTemplate() { - return getWavePartyTemplate( - trainerPartyTemplates.GYM_LEADER_1, - trainerPartyTemplates.GYM_LEADER_2, - trainerPartyTemplates.GYM_LEADER_3, - trainerPartyTemplates.GYM_LEADER_4, - trainerPartyTemplates.GYM_LEADER_5, - ); -} - /** * Randomly selects one of the `Species` from `speciesPool`, determines its evolution, level, and strength. * Then adds Pokemon to globalScene. @@ -1702,7 +1006,7 @@ export function getRandomPartyMemberFunc( postProcess?: (enemyPokemon: EnemyPokemon) => void, ) { return (level: number, strength: PartyMemberStrength) => { - let species = Utils.randSeedItem(speciesPool); + let species = randSeedItem(speciesPool); if (!ignoreEvolution) { species = getPokemonSpecies(species).getTrainerSpeciesForLevel( level, @@ -2141,7 +1445,15 @@ export const trainerConfigs: TrainerConfigs = { }), [TrainerType.HOOLIGANS]: new TrainerConfig(++t) .setDoubleOnly() + .setMoneyMultiplier(1.5) .setEncounterBgm(TrainerType.ROUGHNECK) + .setPartyTemplateFunc(() => + getWavePartyTemplate( + trainerPartyTemplates.TWO_WEAK, + trainerPartyTemplates.TWO_AVG, + trainerPartyTemplates.ONE_AVG_ONE_STRONG, + ), + ) .setSpeciesFilter(s => s.isOfType(PokemonType.POISON) || s.isOfType(PokemonType.DARK)), [TrainerType.HOOPSTER]: new TrainerConfig(++t).setMoneyMultiplier(1.2).setEncounterBgm(TrainerType.CYCLIST), [TrainerType.INFIELDER]: new TrainerConfig(++t).setMoneyMultiplier(1.2).setEncounterBgm(TrainerType.CYCLIST), @@ -2149,7 +1461,14 @@ export const trainerConfigs: TrainerConfigs = { [TrainerType.LINEBACKER]: new TrainerConfig(++t).setMoneyMultiplier(1.2).setEncounterBgm(TrainerType.CYCLIST), [TrainerType.MAID]: new TrainerConfig(++t).setMoneyMultiplier(1.6).setEncounterBgm(TrainerType.RICH), [TrainerType.MUSICIAN]: new TrainerConfig(++t) - .setEncounterBgm(TrainerType.ROUGHNECK) + .setMoneyMultiplier(1.1) + .setEncounterBgm(TrainerType.POKEFAN) + .setPartyTemplates( + trainerPartyTemplates.FOUR_WEAKER, + trainerPartyTemplates.THREE_WEAK, + trainerPartyTemplates.TWO_WEAK_ONE_AVG, + trainerPartyTemplates.TWO_AVG, + ) .setSpeciesFilter(s => !!s.getLevelMoves().find(plm => plm[1] === Moves.SING)), [TrainerType.HEX_MANIAC]: new TrainerConfig(++t) .setMoneyMultiplier(1.5) @@ -2214,7 +1533,14 @@ export const trainerConfigs: TrainerConfigs = { ) || s.getLevelMoves().some(plm => plm[1] === Moves.RAIN_DANCE), ), // Mons with rain abilities or who learn Rain Dance by level [TrainerType.PILOT]: new TrainerConfig(++t) + .setMoneyMultiplier(1.75) .setEncounterBgm(TrainerType.CLERK) + .setPartyTemplates( + trainerPartyTemplates.THREE_WEAK, + trainerPartyTemplates.TWO_WEAK_ONE_AVG, + trainerPartyTemplates.TWO_AVG, + trainerPartyTemplates.THREE_AVG, + ) .setSpeciesFilter(s => tmSpecies[Moves.FLY].indexOf(s.speciesId) > -1), [TrainerType.POKEFAN]: new TrainerConfig(++t) .setMoneyMultiplier(1.4) @@ -2230,7 +1556,8 @@ export const trainerConfigs: TrainerConfigs = { trainerPartyTemplates.FOUR_WEAK_SAME, trainerPartyTemplates.FIVE_WEAK, trainerPartyTemplates.SIX_WEAKER_SAME, - ), + ) + .setSpeciesFilter(s => tmSpecies[Moves.HELPING_HAND].indexOf(s.speciesId) > -1), [TrainerType.PRESCHOOLER]: new TrainerConfig(++t) .setMoneyMultiplier(0.2) .setEncounterBgm(TrainerType.YOUNGSTER) @@ -2352,16 +1679,29 @@ export const trainerConfigs: TrainerConfigs = { [TrainerPoolTier.SUPER_RARE]: [Species.LARVESTA], }), [TrainerType.RICH]: new TrainerConfig(++t) - .setMoneyMultiplier(5) + .setMoneyMultiplier(3.25) .setName("Gentleman") .setHasGenders("Madame") - .setHasDouble("Rich Couple"), + .setHasDouble("Rich Couple") + .setPartyTemplates( + trainerPartyTemplates.THREE_WEAK, + trainerPartyTemplates.FOUR_WEAK, + trainerPartyTemplates.TWO_WEAK_ONE_AVG, + trainerPartyTemplates.THREE_AVG, + ) + .setSpeciesFilter(s => s.isOfType(PokemonType.NORMAL) || s.isOfType(PokemonType.ELECTRIC)), [TrainerType.RICH_KID]: new TrainerConfig(++t) - .setMoneyMultiplier(3.75) + .setMoneyMultiplier(2.5) .setName("Rich Boy") .setHasGenders("Lady") .setHasDouble("Rich Kids") - .setEncounterBgm(TrainerType.RICH), + .setEncounterBgm(TrainerType.RICH) + .setPartyTemplates( + trainerPartyTemplates.FOUR_WEAKER, + trainerPartyTemplates.THREE_WEAK_SAME, + trainerPartyTemplates.TWO_WEAK_SAME_ONE_AVG, + ) + .setSpeciesFilter(s => s.baseTotal <= 460), [TrainerType.ROUGHNECK]: new TrainerConfig(++t) .setMoneyMultiplier(1.4) .setEncounterBgm(TrainerType.ROUGHNECK) @@ -2559,19 +1899,21 @@ export const trainerConfigs: TrainerConfigs = { Species.MANKEY, Species.GROWLITHE, Species.MAGNEMITE, - Species.GASTLY, + Species.ONIX, Species.VOLTORB, Species.EXEGGCUTE, Species.CUBONE, Species.LICKITUNG, - Species.SCYTHER, Species.TAUROS, - Species.GYARADOS, + Species.MAGIKARP, Species.MURKROW, Species.ELEKID, Species.MAGBY, ], [TrainerPoolTier.RARE]: [ + Species.ABRA, + Species.GASTLY, + Species.SCYTHER, Species.PORYGON, Species.OMANYTE, Species.KABUTO, @@ -2630,7 +1972,6 @@ export const trainerConfigs: TrainerConfigs = { Species.DIGLETT, Species.GROWLITHE, Species.SLUGMA, - Species.MAGBY, Species.POOCHYENA, Species.ZIGZAGOON, Species.NUMEL, @@ -2639,24 +1980,24 @@ export const trainerConfigs: TrainerConfigs = { ], [TrainerPoolTier.UNCOMMON]: [ Species.RHYHORN, - Species.GLIGAR, Species.PHANPY, + Species.MAGBY, + Species.ZANGOOSE, Species.SOLROCK, - Species.HIPPOPOTAS, Species.HEATMOR, Species.ROLYCOLY, - Species.SILICOBRA, + Species.CAPSAKID, ], [TrainerPoolTier.RARE]: [ - Species.ARON, Species.TRAPINCH, Species.LILEEP, Species.ANORITH, + Species.GOLETT, Species.TURTONATOR, Species.TOEDSCOOL, Species.HISUI_GROWLITHE, ], - [TrainerPoolTier.SUPER_RARE]: [Species.CHARCADET, Species.CAPSAKID], + [TrainerPoolTier.SUPER_RARE]: [Species.CHARCADET, Species.ARON], }), [TrainerType.TABITHA]: new TrainerConfig(++t) .setMoneyMultiplier(1.5) @@ -2689,6 +2030,7 @@ export const trainerConfigs: TrainerConfigs = { Species.REMORAID, Species.ZIGZAGOON, Species.LOTAD, + Species.WINGULL, Species.CARVANHA, Species.WAILMER, Species.BARBOACH, @@ -2700,16 +2042,18 @@ export const trainerConfigs: TrainerConfigs = { Species.HORSEA, Species.CHINCHOU, Species.WOOPER, - Species.WINGULL, Species.AZURILL, + Species.SEVIPER, Species.CLAMPERL, + Species.WIMPOD, Species.CLOBBOPUS, ], [TrainerPoolTier.RARE]: [ Species.MANTYKE, + Species.TYMPOLE, Species.SKRELP, - Species.DHELMISE, Species.ARROKUDA, + Species.WIGLETT, Species.HISUI_QWILFISH, Species.PALDEA_WOOPER, ], @@ -2764,6 +2108,7 @@ export const trainerConfigs: TrainerConfigs = { ], [TrainerPoolTier.RARE]: [ Species.SNEASEL, + Species.TEDDIURSA, Species.ELEKID, Species.MAGBY, Species.DUSKULL, @@ -2842,7 +2187,7 @@ export const trainerConfigs: TrainerConfigs = { }), [TrainerType.ZINZOLIN]: new TrainerConfig(++t) .setMoneyMultiplier(1.5) - .initForEvilTeamAdmin("plasma_sage", "plasma", [Species.CRYOGONAL]) + .initForEvilTeamAdmin("plasma_sage", "plasma_zinzolin", [Species.CRYOGONAL]) .setEncounterBgm(TrainerType.PLASMA_GRUNT) .setBattleBgm("battle_plasma_grunt") .setMixedBattleBgm("battle_plasma_grunt") @@ -2850,7 +2195,7 @@ export const trainerConfigs: TrainerConfigs = { .setPartyTemplateFunc(() => getEvilGruntPartyTemplate()), [TrainerType.COLRESS]: new TrainerConfig(++t) .setMoneyMultiplier(1.5) - .initForEvilTeamAdmin("plasma_boss", "plasma_2", [Species.KLINKLANG]) + .initForEvilTeamAdmin("plasma_boss", "plasma_colress", [Species.KLINKLANG]) .setEncounterBgm(TrainerType.PLASMA_GRUNT) .setBattleBgm("battle_colress") .setMixedBattleBgm("battle_colress") @@ -2867,10 +2212,11 @@ export const trainerConfigs: TrainerConfigs = { .setPartyTemplateFunc(() => getEvilGruntPartyTemplate()) .setSpeciesPools({ [TrainerPoolTier.COMMON]: [ - Species.PONYTA, Species.HOUNDOUR, + Species.GULPIN, Species.SKORUPI, Species.CROAGUNK, + Species.PURRLOIN, Species.SCRAGGY, Species.FLETCHLING, Species.SCATTERBUG, @@ -2881,7 +2227,6 @@ export const trainerConfigs: TrainerConfigs = { [TrainerPoolTier.UNCOMMON]: [ Species.POOCHYENA, Species.ELECTRIKE, - Species.PURRLOIN, Species.FOONGUS, Species.PANCHAM, Species.BINACLE, @@ -2891,8 +2236,8 @@ export const trainerConfigs: TrainerConfigs = { Species.PHANTUMP, Species.PUMPKABOO, ], - [TrainerPoolTier.RARE]: [Species.SNEASEL, Species.LITWICK, Species.PAWNIARD, Species.SLIGGOO], - [TrainerPoolTier.SUPER_RARE]: [Species.NOIBAT, Species.HISUI_SLIGGOO, Species.HISUI_AVALUGG], + [TrainerPoolTier.RARE]: [Species.SNEASEL, Species.LITWICK, Species.PAWNIARD, Species.NOIBAT], + [TrainerPoolTier.SUPER_RARE]: [Species.SLIGGOO, Species.HISUI_SLIGGOO, Species.HISUI_AVALUGG], }), [TrainerType.BRYONY]: new TrainerConfig(++t) .setMoneyMultiplier(1.5) @@ -2947,14 +2292,13 @@ export const trainerConfigs: TrainerConfigs = { Species.ORANGURU, Species.PASSIMIAN, Species.PYUKUMUKU, - Species.MINIOR, Species.BRUXISH, Species.ALOLA_SANDSHREW, Species.ALOLA_VULPIX, Species.ALOLA_MAROWAK, ], [TrainerPoolTier.RARE]: [ - Species.MAGNEMITE, + Species.MINIOR, Species.TURTONATOR, Species.MIMIKYU, Species.DRAMPA, @@ -2982,6 +2326,7 @@ export const trainerConfigs: TrainerConfigs = { .setSpeciesPools({ [TrainerPoolTier.COMMON]: [ Species.EKANS, + Species.VENONAT, Species.DROWZEE, Species.KOFFING, Species.SPINARAK, @@ -3040,7 +2385,7 @@ export const trainerConfigs: TrainerConfigs = { Species.KLINK, Species.SKWOVET, Species.ROOKIDEE, - Species.CRAMORANT, + Species.ROLYCOLY, Species.CUFANT, Species.GALAR_MEOWTH, Species.GALAR_ZIGZAGOON, @@ -3050,9 +2395,11 @@ export const trainerConfigs: TrainerConfigs = { Species.RIOLU, Species.DRILBUR, Species.APPLIN, + Species.CRAMORANT, Species.ARROKUDA, Species.SINISTEA, Species.HATENNA, + Species.FALINKS, Species.GALAR_PONYTA, Species.GALAR_YAMASK, ], @@ -3060,7 +2407,6 @@ export const trainerConfigs: TrainerConfigs = { Species.SCIZOR, Species.BELDUM, Species.HONEDGE, - Species.FALINKS, Species.GALAR_FARFETCHD, Species.GALAR_MR_MIME, Species.GALAR_DARUMAKA, @@ -3069,7 +2415,7 @@ export const trainerConfigs: TrainerConfigs = { }), [TrainerType.OLEANA]: new TrainerConfig(++t) .setMoneyMultiplier(1.5) - .initForEvilTeamAdmin("macro_admin", "macro", [Species.GARBODOR]) + .initForEvilTeamAdmin("macro_admin", "macro_cosmos", [Species.GARBODOR]) .setEncounterBgm(TrainerType.PLASMA_GRUNT) .setBattleBgm("battle_plasma_grunt") .setMixedBattleBgm("battle_oleana") @@ -3136,7 +2482,7 @@ export const trainerConfigs: TrainerConfigs = { }), [TrainerType.GIACOMO]: new TrainerConfig(++t) .setMoneyMultiplier(1.5) - .initForEvilTeamAdmin("star_admin", "star_1", [Species.KINGAMBIT], PokemonType.DARK) + .initForEvilTeamAdmin("star_admin", "star_dark", [Species.KINGAMBIT], PokemonType.DARK) .setEncounterBgm(TrainerType.PLASMA_GRUNT) .setBattleBgm("battle_plasma_grunt") .setMixedBattleBgm("battle_star_admin") @@ -3156,7 +2502,7 @@ export const trainerConfigs: TrainerConfigs = { ), [TrainerType.MELA]: new TrainerConfig(++t) .setMoneyMultiplier(1.5) - .initForEvilTeamAdmin("star_admin", "star_2", [Species.ARMAROUGE], PokemonType.FIRE) + .initForEvilTeamAdmin("star_admin", "star_fire", [Species.ARMAROUGE], PokemonType.FIRE) .setEncounterBgm(TrainerType.PLASMA_GRUNT) .setBattleBgm("battle_plasma_grunt") .setMixedBattleBgm("battle_star_admin") @@ -3176,7 +2522,7 @@ export const trainerConfigs: TrainerConfigs = { ), [TrainerType.ATTICUS]: new TrainerConfig(++t) .setMoneyMultiplier(1.5) - .initForEvilTeamAdmin("star_admin", "star_3", [Species.REVAVROOM], PokemonType.POISON) + .initForEvilTeamAdmin("star_admin", "star_poison", [Species.REVAVROOM], PokemonType.POISON) .setEncounterBgm(TrainerType.PLASMA_GRUNT) .setBattleBgm("battle_plasma_grunt") .setMixedBattleBgm("battle_star_admin") @@ -3196,7 +2542,7 @@ export const trainerConfigs: TrainerConfigs = { ), [TrainerType.ORTEGA]: new TrainerConfig(++t) .setMoneyMultiplier(1.5) - .initForEvilTeamAdmin("star_admin", "star_4", [Species.DACHSBUN], PokemonType.FAIRY) + .initForEvilTeamAdmin("star_admin", "star_fairy", [Species.DACHSBUN], PokemonType.FAIRY) .setEncounterBgm(TrainerType.PLASMA_GRUNT) .setBattleBgm("battle_plasma_grunt") .setMixedBattleBgm("battle_star_admin") @@ -3216,7 +2562,7 @@ export const trainerConfigs: TrainerConfigs = { ), [TrainerType.ERI]: new TrainerConfig(++t) .setMoneyMultiplier(1.5) - .initForEvilTeamAdmin("star_admin", "star_5", [Species.ANNIHILAPE], PokemonType.FIGHTING) + .initForEvilTeamAdmin("star_admin", "star_fighting", [Species.ANNIHILAPE], PokemonType.FIGHTING) .setEncounterBgm(TrainerType.PLASMA_GRUNT) .setBattleBgm("battle_plasma_grunt") .setMixedBattleBgm("battle_star_admin") @@ -4203,7 +3549,7 @@ export const trainerConfigs: TrainerConfigs = { .setPartyMemberFunc( 5, getRandomPartyMemberFunc([Species.URSHIFU], TrainerSlot.TRAINER, true, p => { - p.formIndex = Utils.randSeedInt(2, 2); // Random G-Max Urshifu + p.formIndex = randSeedInt(2, 2); // Random G-Max Urshifu p.generateAndPopulateMoveset(); p.generateName(); p.gender = Gender.MALE; @@ -4313,10 +3659,10 @@ export const trainerConfigs: TrainerConfigs = { .setPartyMemberFunc( 4, getRandomPartyMemberFunc([Species.OGERPON], TrainerSlot.TRAINER, true, p => { - p.formIndex = Utils.randSeedInt(4); // Random Ogerpon Tera Mask + p.formIndex = randSeedInt(4); // Random Ogerpon Tera Mask p.generateAndPopulateMoveset(); p.pokeball = PokeballType.ULTRA_BALL; - if (!p.moveset.some(move => !Utils.isNullOrUndefined(move) && move.moveId === Moves.IVY_CUDGEL)) { + if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === Moves.IVY_CUDGEL)) { // Check if Ivy Cudgel is in the moveset, if not, replace the first move with Ivy Cudgel. p.moveset[0] = new PokemonMove(Moves.IVY_CUDGEL); } @@ -4346,11 +3692,7 @@ export const trainerConfigs: TrainerConfigs = { () => modifierTypes.SUPER_EXP_CHARM, () => modifierTypes.EXP_SHARE, ) - .setEventModifierRewardFuncs( - () => modifierTypes.SHINY_CHARM, - () => modifierTypes.ABILITY_CHARM, - () => modifierTypes.CATCHING_CHARM, - ) + .setEventModifierRewardFuncs(8) .setPartyMemberFunc( 0, getRandomPartyMemberFunc( @@ -4418,7 +3760,7 @@ export const trainerConfigs: TrainerConfigs = { .setMixedBattleBgm("battle_rival") .setPartyTemplates(trainerPartyTemplates.RIVAL_2) .setModifierRewardFuncs(() => modifierTypes.EXP_SHARE) - .setEventModifierRewardFuncs(() => modifierTypes.SHINY_CHARM) + .setEventModifierRewardFuncs(25) .setPartyMemberFunc( 0, getRandomPartyMemberFunc( @@ -4727,7 +4069,7 @@ export const trainerConfigs: TrainerConfigs = { getRandomPartyMemberFunc([Species.RAYQUAZA], TrainerSlot.TRAINER, true, p => { p.setBoss(true, 3); p.pokeball = PokeballType.MASTER_BALL; - p.shiny = true; + p.shiny = timedEventManager.getClassicTrainerShinyChance() === 0; p.variant = 1; }), ) @@ -4824,7 +4166,7 @@ export const trainerConfigs: TrainerConfigs = { p.setBoss(); p.generateAndPopulateMoveset(); p.pokeball = PokeballType.MASTER_BALL; - p.shiny = true; + p.shiny = timedEventManager.getClassicTrainerShinyChance() === 0; p.variant = 1; p.formIndex = 1; // Mega Rayquaza p.generateName(); @@ -5371,10 +4713,10 @@ export const trainerConfigs: TrainerConfigs = { .setPartyMemberFunc( 2, getRandomPartyMemberFunc([Species.SILVALLY], TrainerSlot.TRAINER, true, p => { - p.formIndex = Utils.randSeedInt(18); // Random Silvally Form + p.formIndex = randSeedInt(18); // Random Silvally Form p.generateAndPopulateMoveset(); p.pokeball = PokeballType.ROGUE_BALL; - if (!p.moveset.some(move => !Utils.isNullOrUndefined(move) && move.moveId === Moves.MULTI_ATTACK)) { + if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === Moves.MULTI_ATTACK)) { // Check if Multi Attack is in the moveset, if not, replace the first move with Multi Attack. p.moveset[0] = new PokemonMove(Moves.MULTI_ATTACK); } @@ -5491,10 +4833,10 @@ export const trainerConfigs: TrainerConfigs = { p.setBoss(true, 2); p.generateAndPopulateMoveset(); p.pokeball = PokeballType.ULTRA_BALL; - p.formIndex = Utils.randSeedInt(4, 1); // Shock, Burn, Chill, or Douse Drive - if (!p.moveset.some(move => !Utils.isNullOrUndefined(move) && move.moveId === Moves.TECHNO_BLAST)) { + p.formIndex = randSeedInt(4, 1); // Shock, Burn, Chill, or Douse Drive + if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === Moves.TECHNO_BLAST)) { // Check if Techno Blast is in the moveset, if not, replace the first move with Techno Blast. - p.moveset[0] = new PokemonMove(Moves.TECHNO_BLAST); + p.moveset[2] = new PokemonMove(Moves.TECHNO_BLAST); } }), ) @@ -5664,7 +5006,7 @@ export const trainerConfigs: TrainerConfigs = { 1, getRandomPartyMemberFunc([Species.ROTOM], TrainerSlot.TRAINER, true, p => { p.generateAndPopulateMoveset(); - p.formIndex = Utils.randSeedInt(5, 1); // Heat, Wash, Frost, Fan, or Mow + p.formIndex = randSeedInt(5, 1); // Heat, Wash, Frost, Fan, or Mow }), ) .setPartyMemberFunc( @@ -5677,7 +5019,7 @@ export const trainerConfigs: TrainerConfigs = { .setPartyMemberFunc( 3, getRandomPartyMemberFunc([Species.REVAVROOM], TrainerSlot.TRAINER, true, p => { - p.formIndex = Utils.randSeedInt(5, 1); // Random Starmobile form + p.formIndex = randSeedInt(5, 1); // Random Starmobile form p.generateAndPopulateMoveset(); p.pokeball = PokeballType.ROGUE_BALL; }), diff --git a/src/data/trainers/typedefs.ts b/src/data/trainers/typedefs.ts new file mode 100644 index 00000000000..c6d286e961e --- /dev/null +++ b/src/data/trainers/typedefs.ts @@ -0,0 +1,22 @@ +import type { EnemyPokemon } from "#app/field/pokemon"; +import type { PersistentModifier } from "#app/modifier/modifier"; +import type { PartyMemberStrength } from "#enums/party-member-strength"; +import type { Species } from "#enums/species"; +import type { TrainerConfig } from "./trainer-config"; +import type { TrainerPartyTemplate } from "./TrainerPartyTemplate"; + +export type PartyTemplateFunc = () => TrainerPartyTemplate; +export type PartyMemberFunc = (level: number, strength: PartyMemberStrength) => EnemyPokemon; +export type GenModifiersFunc = (party: EnemyPokemon[]) => PersistentModifier[]; +export type GenAIFunc = (party: EnemyPokemon[]) => void; + +export interface TrainerTierPools { + [key: number]: Species[]; +} +export interface TrainerConfigs { + [key: number]: TrainerConfig; +} + +export interface PartyMemberFuncs { + [key: number]: PartyMemberFunc; +} diff --git a/src/data/variant.ts b/src/data/variant.ts deleted file mode 100644 index 13c11b0bb40..00000000000 --- a/src/data/variant.ts +++ /dev/null @@ -1,31 +0,0 @@ -import { VariantTier } from "#app/enums/variant-tier"; - -export type Variant = 0 | 1 | 2; - -export type VariantSet = [Variant, Variant, Variant]; - -export const variantData: any = {}; - -export const variantColorCache = {}; - -export function getVariantTint(variant: Variant): number { - switch (variant) { - case 0: - return 0xf8c020; - case 1: - return 0x20f8f0; - case 2: - return 0xe81048; - } -} - -export function getVariantIcon(variant: Variant): number { - switch (variant) { - case 0: - return VariantTier.STANDARD; - case 1: - return VariantTier.RARE; - case 2: - return VariantTier.EPIC; - } -} diff --git a/src/data/weather.ts b/src/data/weather.ts index c2b0263c9f6..a8dd0a66492 100644 --- a/src/data/weather.ts +++ b/src/data/weather.ts @@ -5,12 +5,13 @@ import type Pokemon from "../field/pokemon"; import { PokemonType } from "#enums/pokemon-type"; import type Move from "./moves/move"; import { AttackMove } from "./moves/move"; -import * as Utils from "../utils"; +import { randSeedInt } from "#app/utils"; import { SuppressWeatherEffectAbAttr } from "./ability"; import { TerrainType, getTerrainName } from "./terrain"; import i18next from "i18next"; import { globalScene } from "#app/global-scene"; import type { Arena } from "#app/field/arena"; +import { timedEventManager } from "#app/global-event-manager"; export class Weather { public weatherType: WeatherType; @@ -405,8 +406,8 @@ export function getRandomWeatherType(arena: Arena): WeatherType { break; } - if (arena.biomeType === Biome.TOWN && globalScene.eventManager.isEventActive()) { - globalScene.eventManager.getWeather()?.map(w => weatherPool.push(w)); + if (arena.biomeType === Biome.TOWN && timedEventManager.isEventActive()) { + timedEventManager.getWeather()?.map(w => weatherPool.push(w)); } if (weatherPool.length > 1) { @@ -415,7 +416,7 @@ export function getRandomWeatherType(arena: Arena): WeatherType { totalWeight += w.weight; } - const rand = Utils.randSeedInt(totalWeight); + const rand = randSeedInt(totalWeight); let w = 0; for (const weather of weatherPool) { w += weather.weight; diff --git a/src/enums/tera-ai-mode.ts b/src/enums/tera-ai-mode.ts new file mode 100644 index 00000000000..35d4e4f3420 --- /dev/null +++ b/src/enums/tera-ai-mode.ts @@ -0,0 +1,5 @@ +export enum TeraAIMode { + NO_TERA, + INSTANT_TERA, + SMART_TERA +} diff --git a/src/enums/trainer-pool-tier.ts b/src/enums/trainer-pool-tier.ts new file mode 100644 index 00000000000..da6355d021b --- /dev/null +++ b/src/enums/trainer-pool-tier.ts @@ -0,0 +1,7 @@ +export enum TrainerPoolTier { + COMMON, + UNCOMMON, + RARE, + SUPER_RARE, + ULTRA_RARE +} diff --git a/src/enums/trainer-slot.ts b/src/enums/trainer-slot.ts new file mode 100644 index 00000000000..2dfa468f74c --- /dev/null +++ b/src/enums/trainer-slot.ts @@ -0,0 +1,5 @@ +export enum TrainerSlot { + NONE, + TRAINER, + TRAINER_PARTNER +} diff --git a/src/field/anims.ts b/src/field/anims.ts index cd6209dddff..eb895c2d8f9 100644 --- a/src/field/anims.ts +++ b/src/field/anims.ts @@ -1,6 +1,6 @@ import { globalScene } from "#app/global-scene"; import { PokeballType } from "#enums/pokeball"; -import type { Variant } from "#app/data/variant"; +import type { Variant } from "#app/sprites/variant"; import { getFrameMs, randGauss } from "#app/utils"; export function addPokeballOpenParticles(x: number, y: number, pokeballType: PokeballType): void { diff --git a/src/field/arena.ts b/src/field/arena.ts index 2c538de890f..adc3123ce81 100644 --- a/src/field/arena.ts +++ b/src/field/arena.ts @@ -1,8 +1,7 @@ import { globalScene } from "#app/global-scene"; import type { BiomeTierTrainerPools, PokemonPools } from "#app/data/balance/biomes"; import { biomePokemonPools, BiomePoolTier, biomeTrainerPools } from "#app/data/balance/biomes"; -import type { Constructor } from "#app/utils"; -import * as Utils from "#app/utils"; +import { randSeedInt, NumberHolder, isNullOrUndefined, type Constructor } from "#app/utils"; import type PokemonSpecies from "#app/data/pokemon-species"; import { getPokemonSpecies } from "#app/data/pokemon-species"; import { @@ -40,8 +39,8 @@ import { TrainerType } from "#enums/trainer-type"; import { Abilities } from "#enums/abilities"; import { SpeciesFormChangeRevertWeatherFormTrigger, SpeciesFormChangeWeatherTrigger } from "#app/data/pokemon-forms"; import { CommonAnimPhase } from "#app/phases/common-anim-phase"; -import { ShowAbilityPhase } from "#app/phases/show-ability-phase"; import { WeatherType } from "#enums/weather-type"; +import { FieldEffectModifier } from "#app/modifier/modifier"; export class Arena { public biomeType: Biome; @@ -124,7 +123,7 @@ export class Arena { if (typeof luckValue !== "undefined") { luckModifier = luckValue * (isBossSpecies ? 0.5 : 2); } - const tierValue = Utils.randSeedInt(randVal - luckModifier); + const tierValue = randSeedInt(randVal - luckModifier); let tier = !isBossSpecies ? tierValue >= 156 ? BiomePoolTier.COMMON @@ -153,7 +152,7 @@ export class Arena { if (!tierPool.length) { ret = globalScene.randomSpecies(waveIndex, level); } else { - const entry = tierPool[Utils.randSeedInt(tierPool.length)]; + const entry = tierPool[randSeedInt(tierPool.length)]; let species: Species; if (typeof entry === "number") { species = entry as Species; @@ -164,7 +163,7 @@ export class Arena { if (level >= levelThreshold) { const speciesIds = entry[levelThreshold]; if (speciesIds.length > 1) { - species = speciesIds[Utils.randSeedInt(speciesIds.length)]; + species = speciesIds[randSeedInt(speciesIds.length)]; } else { species = speciesIds[0]; } @@ -211,7 +210,7 @@ export class Arena { !!this.trainerPool[BiomePoolTier.BOSS].length && (globalScene.gameMode.isTrainerBoss(waveIndex, this.biomeType, globalScene.offsetGym) || isBoss); console.log(isBoss, this.trainerPool); - const tierValue = Utils.randSeedInt(!isTrainerBoss ? 512 : 64); + const tierValue = randSeedInt(!isTrainerBoss ? 512 : 64); let tier = !isTrainerBoss ? tierValue >= 156 ? BiomePoolTier.COMMON @@ -235,7 +234,7 @@ export class Arena { tier--; } const tierPool = this.trainerPool[tier] || []; - return !tierPool.length ? TrainerType.BREEDER : tierPool[Utils.randSeedInt(tierPool.length)]; + return !tierPool.length ? TrainerType.BREEDER : tierPool[randSeedInt(tierPool.length)]; } getSpeciesFormIndex(species: PokemonSpecies): number { @@ -311,10 +310,10 @@ export class Arena { /** * Attempts to set a new weather to the battle * @param weather {@linkcode WeatherType} new {@linkcode WeatherType} to set - * @param hasPokemonSource boolean if the new weather is from a pokemon + * @param user {@linkcode Pokemon} that caused the weather effect * @returns true if new weather set, false if no weather provided or attempting to set the same weather as currently in use */ - trySetWeather(weather: WeatherType, hasPokemonSource: boolean): boolean { + trySetWeather(weather: WeatherType, user?: Pokemon): boolean { if (Overrides.WEATHER_OVERRIDE) { return this.trySetWeatherOverride(Overrides.WEATHER_OVERRIDE); } @@ -336,7 +335,14 @@ export class Arena { return false; } - this.weather = weather ? new Weather(weather, hasPokemonSource ? 5 : 0) : null; + const weatherDuration = new NumberHolder(0); + + if (!isNullOrUndefined(user)) { + weatherDuration.value = 5; + globalScene.applyModifier(FieldEffectModifier, user.isPlayer(), user, weatherDuration); + } + + this.weather = weather ? new Weather(weather, weatherDuration.value) : null; this.eventTarget.dispatchEvent( new WeatherChangedEvent(oldWeatherType, this.weather?.weatherType!, this.weather?.turnsLeft!), ); // TODO: is this bang correct? @@ -370,7 +376,6 @@ export class Arena { const isCherrimWithFlowerGift = p.hasAbility(Abilities.FLOWER_GIFT) && p.species.speciesId === Species.CHERRIM; if (isCastformWithForecast || isCherrimWithFlowerGift) { - new ShowAbilityPhase(p.getBattlerIndex()); globalScene.triggerPokemonFormChange(p, SpeciesFormChangeWeatherTrigger); } }); @@ -387,7 +392,6 @@ export class Arena { p.hasAbility(Abilities.FLOWER_GIFT, false, true) && p.species.speciesId === Species.CHERRIM; if (isCastformWithForecast || isCherrimWithFlowerGift) { - new ShowAbilityPhase(p.getBattlerIndex()); return globalScene.triggerPokemonFormChange(p, SpeciesFormChangeRevertWeatherFormTrigger); } }); @@ -398,14 +402,29 @@ export class Arena { return !(this.terrain?.terrainType === (terrain || undefined)); } - trySetTerrain(terrain: TerrainType, hasPokemonSource: boolean, ignoreAnim = false): boolean { + /** + * Attempts to set a new terrain effect to the battle + * @param terrain {@linkcode TerrainType} new {@linkcode TerrainType} to set + * @param ignoreAnim boolean if the terrain animation should be ignored + * @param user {@linkcode Pokemon} that caused the terrain effect + * @returns true if new terrain set, false if no terrain provided or attempting to set the same terrain as currently in use + */ + trySetTerrain(terrain: TerrainType, ignoreAnim = false, user?: Pokemon): boolean { if (!this.canSetTerrain(terrain)) { return false; } const oldTerrainType = this.terrain?.terrainType || TerrainType.NONE; - this.terrain = terrain ? new Terrain(terrain, hasPokemonSource ? 5 : 0) : null; + const terrainDuration = new NumberHolder(0); + + if (!isNullOrUndefined(user)) { + terrainDuration.value = 5; + globalScene.applyModifier(FieldEffectModifier, user.isPlayer(), user, terrainDuration); + } + + this.terrain = terrain ? new Terrain(terrain, terrainDuration.value) : null; + this.eventTarget.dispatchEvent( new TerrainChangedEvent(oldTerrainType, this.terrain?.terrainType!, this.terrain?.turnsLeft!), ); // TODO: are those bangs correct? @@ -802,9 +821,9 @@ export class Arena { resetArenaEffects(): void { // Don't reset weather if a Biome's permanent weather is active if (this.weather?.turnsLeft !== 0) { - this.trySetWeather(WeatherType.NONE, false); + this.trySetWeather(WeatherType.NONE); } - this.trySetTerrain(TerrainType.NONE, false, true); + this.trySetTerrain(TerrainType.NONE, true); this.resetPlayerFaintCount(); this.removeAllTags(); } @@ -993,7 +1012,7 @@ export class ArenaBase extends Phaser.GameObjects.Container { if (!this.player) { globalScene.executeWithSeedOffset( () => { - this.propValue = propValue === undefined ? (hasProps ? Utils.randSeedInt(8) : 0) : propValue; + this.propValue = propValue === undefined ? (hasProps ? randSeedInt(8) : 0) : propValue; this.props.forEach((prop, p) => { const propKey = `${biomeKey}_b${hasProps ? `_${p + 1}` : ""}`; prop.setTexture(propKey); diff --git a/src/field/damage-number-handler.ts b/src/field/damage-number-handler.ts index 9e0010a0c10..a527b148fff 100644 --- a/src/field/damage-number-handler.ts +++ b/src/field/damage-number-handler.ts @@ -2,7 +2,7 @@ import { TextStyle, addTextObject } from "../ui/text"; import type { DamageResult } from "./pokemon"; import type Pokemon from "./pokemon"; import { HitResult } from "./pokemon"; -import * as Utils from "../utils"; +import { formatStat, fixedInt } from "#app/utils"; import type { BattlerIndex } from "../battle"; import { globalScene } from "#app/global-scene"; @@ -30,7 +30,7 @@ export default class DamageNumberHandler { const damageNumber = addTextObject( target.x, -(globalScene.game.canvas.height / 6) + target.y - target.getSprite().height / 2, - Utils.formatStat(amount, true), + formatStat(amount, true), TextStyle.SUMMARY, ); damageNumber.setName("text-damage-number"); @@ -86,14 +86,14 @@ export default class DamageNumberHandler { if (globalScene.damageNumbersMode === 1) { globalScene.tweens.add({ targets: damageNumber, - duration: Utils.fixedInt(750), + duration: fixedInt(750), alpha: 1, y: "-=32", }); globalScene.tweens.add({ delay: 375, targets: damageNumber, - duration: Utils.fixedInt(625), + duration: fixedInt(625), alpha: 0, ease: "Sine.easeIn", onComplete: () => { @@ -110,7 +110,7 @@ export default class DamageNumberHandler { targets: damageNumber, tweens: [ { - duration: Utils.fixedInt(250), + duration: fixedInt(250), alpha: 1, scaleX: 0.75 * baseScale, scaleY: 1.25 * baseScale, @@ -118,7 +118,7 @@ export default class DamageNumberHandler { ease: "Cubic.easeOut", }, { - duration: Utils.fixedInt(175), + duration: fixedInt(175), alpha: 1, scaleX: 0.875 * baseScale, scaleY: 1.125 * baseScale, @@ -126,59 +126,59 @@ export default class DamageNumberHandler { ease: "Cubic.easeIn", }, { - duration: Utils.fixedInt(100), + duration: fixedInt(100), scaleX: 1.25 * baseScale, scaleY: 0.75 * baseScale, ease: "Cubic.easeOut", }, { - duration: Utils.fixedInt(175), + duration: fixedInt(175), scaleX: 0.875 * baseScale, scaleY: 1.125 * baseScale, y: "-=8", ease: "Cubic.easeOut", }, { - duration: Utils.fixedInt(50), + duration: fixedInt(50), scaleX: 0.925 * baseScale, scaleY: 1.075 * baseScale, y: "+=8", ease: "Cubic.easeIn", }, { - duration: Utils.fixedInt(100), + duration: fixedInt(100), scaleX: 1.125 * baseScale, scaleY: 0.875 * baseScale, ease: "Cubic.easeOut", }, { - duration: Utils.fixedInt(175), + duration: fixedInt(175), scaleX: 0.925 * baseScale, scaleY: 1.075 * baseScale, y: "-=4", ease: "Cubic.easeOut", }, { - duration: Utils.fixedInt(50), + duration: fixedInt(50), scaleX: 0.975 * baseScale, scaleY: 1.025 * baseScale, y: "+=4", ease: "Cubic.easeIn", }, { - duration: Utils.fixedInt(100), + duration: fixedInt(100), scaleX: 1.075 * baseScale, scaleY: 0.925 * baseScale, ease: "Cubic.easeOut", }, { - duration: Utils.fixedInt(25), + duration: fixedInt(25), scaleX: baseScale, scaleY: baseScale, ease: "Cubic.easeOut", }, { - delay: Utils.fixedInt(500), + delay: fixedInt(500), alpha: 0, onComplete: () => { this.damageNumbers diff --git a/src/field/mystery-encounter-intro.ts b/src/field/mystery-encounter-intro.ts index 649a969d415..e1fb0c37074 100644 --- a/src/field/mystery-encounter-intro.ts +++ b/src/field/mystery-encounter-intro.ts @@ -4,9 +4,10 @@ import type MysteryEncounter from "#app/data/mystery-encounters/mystery-encounte import type { Species } from "#enums/species"; import { isNullOrUndefined } from "#app/utils"; import { getSpriteKeysFromSpecies } from "#app/data/mystery-encounters/utils/encounter-pokemon-utils"; -import type { Variant } from "#app/data/variant"; +import type { Variant } from "#app/sprites/variant"; import { doShinySparkleAnim } from "#app/field/anims"; import PlayAnimationConfig = Phaser.Types.Animations.PlayAnimationConfig; +import { loadPokemonVariantAssets } from "#app/sprites/pokemon-sprite"; type KnownFileRoot = | "arenas" @@ -233,8 +234,8 @@ export default class MysteryEncounterIntroVisuals extends Phaser.GameObjects.Con this.spriteConfigs.forEach(config => { if (config.isPokemon) { globalScene.loadPokemonAtlas(config.spriteKey, config.fileRoot); - if (config.isShiny) { - shinyPromises.push(globalScene.loadPokemonVariantAssets(config.spriteKey, config.fileRoot, config.variant)); + if (config.isShiny && !isNullOrUndefined(config.variant)) { + shinyPromises.push(loadPokemonVariantAssets(config.spriteKey, config.fileRoot, config.variant)); } } else if (config.isItem) { globalScene.loadAtlas("items", ""); diff --git a/src/field/pokemon-sprite-sparkle-handler.ts b/src/field/pokemon-sprite-sparkle-handler.ts index 0d5dcca7989..d2f69500258 100644 --- a/src/field/pokemon-sprite-sparkle-handler.ts +++ b/src/field/pokemon-sprite-sparkle-handler.ts @@ -1,6 +1,6 @@ import { globalScene } from "#app/global-scene"; import Pokemon from "./pokemon"; -import * as Utils from "../utils"; +import { fixedInt, randInt } from "#app/utils"; export default class PokemonSpriteSparkleHandler { private sprites: Set; @@ -9,7 +9,7 @@ export default class PokemonSpriteSparkleHandler { this.sprites = new Set(); globalScene.tweens.addCounter({ - duration: Utils.fixedInt(200), + duration: fixedInt(200), from: 0, to: 1, yoyo: true, @@ -36,7 +36,7 @@ export default class PokemonSpriteSparkleHandler { const parent = (pokemon || s).parentContainer; const texture = s.texture; const [width, height] = [texture.source[0].width, texture.source[0].height]; - const [pixelX, pixelY] = [Utils.randInt(width), Utils.randInt(height)]; + const [pixelX, pixelY] = [randInt(width), randInt(height)]; const ratioX = s.width / width; const ratioY = s.height / height; const pixel = texture.manager.getPixel(pixelX, pixelY, texture.key, "__BASE"); @@ -51,7 +51,7 @@ export default class PokemonSpriteSparkleHandler { sparkle.setName("sprite-tera-sparkle"); sparkle.play("tera_sparkle"); parent.add(sparkle); - s.scene.time.delayedCall(Utils.fixedInt(Math.floor((1000 / 12) * 13)), () => sparkle.destroy()); + s.scene.time.delayedCall(fixedInt(Math.floor((1000 / 12) * 13)), () => sparkle.destroy()); } } } diff --git a/src/field/pokemon.ts b/src/field/pokemon.ts index 43bab0f049d..b59b7ba01fe 100644 --- a/src/field/pokemon.ts +++ b/src/field/pokemon.ts @@ -2,9 +2,9 @@ import Phaser from "phaser"; import type { AnySound } from "#app/battle-scene"; import type BattleScene from "#app/battle-scene"; import { globalScene } from "#app/global-scene"; -import type { Variant, VariantSet } from "#app/data/variant"; -import { variantColorCache } from "#app/data/variant"; -import { variantData } from "#app/data/variant"; +import type { Variant } from "#app/sprites/variant"; +import { populateVariantColors, variantColorCache } from "#app/sprites/variant"; +import { variantData } from "#app/sprites/variant"; import BattleInfo, { PlayerBattleInfo, EnemyBattleInfo, @@ -55,9 +55,7 @@ import { getStarterValueFriendshipCap, speciesStarterCosts, } from "#app/data/balance/starters"; -import type { Constructor } from "#app/utils"; -import { isNullOrUndefined, randSeedInt, type nil } from "#app/utils"; -import * as Utils from "#app/utils"; +import { NumberHolder, randSeedInt, getIvsFromId, BooleanHolder, randSeedItem, isNullOrUndefined, getEnumValues, toDmgValue, fixedInt, rgbaToInt, rgbHexToRgba, rgbToHsv, deltaRgb, isBetween, type nil, type Constructor } from "#app/utils"; import type { TypeDamageMultiplier } from "#app/data/type"; import { getTypeDamageMultiplier, getTypeRgb } from "#app/data/type"; import { PokemonType } from "#enums/pokemon-type"; @@ -96,7 +94,6 @@ import { } from "#app/modifier/modifier"; import { PokeballType } from "#enums/pokeball"; import { Gender } from "#app/data/gender"; -import { initMoveAnim, loadMoveAnimAssets } from "#app/data/battle-anims"; import { Status, getRandomStatus } from "#app/data/status-effect"; import type { SpeciesFormEvolution, @@ -161,7 +158,6 @@ import { applyPreAttackAbAttrs, applyPreDefendAbAttrs, applyPreSetStatusAbAttrs, - UnsuppressableAbilityAbAttr, NoFusionAbilityAbAttr, MultCritAbAttr, IgnoreTypeImmunityAbAttr, @@ -177,10 +173,7 @@ import { MoveTypeChangeAbAttr, FullHpResistTypeAbAttr, applyCheckTrappedAbAttrs, - CheckTrappedAbAttr, - PostSetStatusAbAttr, - applyPostSetStatusAbAttrs, - InfiltratorAbAttr, + CheckTrappedAbAttr, InfiltratorAbAttr, AlliedFieldDamageReductionAbAttr, PostDamageAbAttr, applyPostDamageAbAttrs, @@ -192,6 +185,9 @@ import { applyPreLeaveFieldAbAttrs, applyOnLoseAbAttrs, PreLeaveFieldRemoveSuppressAbilitiesSourceAbAttr, + applyAllyStatMultiplierAbAttrs, + AllyStatMultiplierAbAttr, + MoveAbilityBypassAbAttr } from "#app/data/ability"; import type PokemonData from "#app/system/pokemon-data"; import { BattlerIndex } from "#app/battle"; @@ -218,11 +214,10 @@ import { SpeciesFormChangeActiveTrigger, SpeciesFormChangeLapseTeraTrigger, SpeciesFormChangeMoveLearnedTrigger, - SpeciesFormChangePostMoveTrigger, - SpeciesFormChangeStatusEffectTrigger, + SpeciesFormChangePostMoveTrigger } from "#app/data/pokemon-forms"; import { TerrainType } from "#app/data/terrain"; -import type { TrainerSlot } from "#app/data/trainer-config"; +import type { TrainerSlot } from "#enums/trainer-slot"; import Overrides from "#app/overrides"; import i18next from "i18next"; import { speciesEggMoves } from "#app/data/balance/egg-moves"; @@ -260,6 +255,10 @@ import { import { Nature } from "#enums/nature"; import { StatusEffect } from "#enums/status-effect"; import { doShinySparkleAnim } from "#app/field/anims"; +import { MoveFlags } from "#enums/MoveFlags"; +import { timedEventManager } from "#app/global-event-manager"; +import { loadMoveAnimations } from "#app/sprites/pokemon-asset-loader"; +import { ResetStatusPhase } from "#app/phases/reset-status-phase"; export enum LearnMoveSituation { MISC, @@ -296,7 +295,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { public stats: number[]; public ivs: number[]; public nature: Nature; - public moveset: (PokemonMove | null)[]; + public moveset: PokemonMove[]; public status: Status | null; public friendship: number; public metLevel: number; @@ -362,7 +361,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { throw `Cannot create a player Pokemon for species '${species.getName(formIndex)}'`; } - const hiddenAbilityChance = new Utils.NumberHolder( + const hiddenAbilityChance = new NumberHolder( BASE_HIDDEN_ABILITY_CHANCE, ); if (!this.hasTrainer()) { @@ -383,8 +382,8 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { this.abilityIndex = abilityIndex; // Use the provided ability index if it is defined } else { // If abilityIndex is not provided, determine it based on species and hidden ability - const hasHiddenAbility = !Utils.randSeedInt(hiddenAbilityChance.value); - const randAbilityIndex = Utils.randSeedInt(2); + const hasHiddenAbility = !randSeedInt(hiddenAbilityChance.value); + const randAbilityIndex = randSeedInt(2); if (species.abilityHidden && hasHiddenAbility) { // If the species has a hidden ability and the hidden ability is present this.abilityIndex = 2; @@ -460,8 +459,8 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { this.isTerastallized = dataSource.isTerastallized; this.stellarTypesBoosted = dataSource.stellarTypesBoosted ?? []; } else { - this.id = Utils.randSeedInt(4294967296); - this.ivs = ivs || Utils.getIvsFromId(this.id); + this.id = randSeedInt(4294967296); + this.ivs = ivs || getIvsFromId(this.id); if (this.gender === undefined) { this.generateGender(); @@ -504,7 +503,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { this.pokerus = false; if (level > 1) { - const fused = new Utils.BooleanHolder( + const fused = new BooleanHolder( globalScene.gameMode.isSplicedOnly, ); if (!fused.value && !this.isPlayer() && !this.hasTrainer()) { @@ -521,7 +520,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { (this.fusionShiny ? this.fusionVariant + 1 : 0); this.fusionLuck = this.luck; - this.teraType = Utils.randSeedItem(this.getTypes(false, false, true)); + this.teraType = randSeedItem(this.getTypes(false, false, true)); this.isTerastallized = false; this.stellarTypesBoosted = []; } @@ -537,21 +536,33 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } } - getNameToRender() { + /** + * @param {boolean} useIllusion - Whether we want the fake name or the real name of the Pokemon (for Illusion ability). + */ + getNameToRender(useIllusion: boolean = true) { + const name: string = (!useIllusion && !!this.summonData?.illusion) ? this.summonData?.illusion.basePokemon!.name : this.name; + const nickname: string = (!useIllusion && !!this.summonData?.illusion) ? this.summonData?.illusion.basePokemon!.nickname : this.nickname; try { - if (this.nickname) { - return decodeURIComponent(escape(atob(this.nickname))); + if (nickname) { + return decodeURIComponent(escape(atob(nickname))); } - return this.name; + return name; } catch (err) { - console.error(`Failed to decode nickname for ${this.name}`, err); - return this.name; + console.error(`Failed to decode nickname for ${name}`, err); + return name; + } + } + + getPokeball(useIllusion = false){ + if(useIllusion){ + return this.summonData?.illusion?.pokeball ?? this.pokeball + } else { + return this.pokeball } } init(): void { this.fieldPosition = FieldPosition.CENTER; - this.initBattleInfo(); globalScene.fieldUI.addAt(this.battleInfo, 0); @@ -585,7 +596,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { this.addAt(sprite, 0); this.addAt(tintSprite, 1); - if (this.isShiny() && !this.shinySparkle) { + if (this.isShiny(true) && !this.shinySparkle) { this.initShinySparkle(); } } @@ -629,9 +640,8 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { * @returns {boolean} `true` if pokemon is allowed in battle */ public isAllowedInChallenge(): boolean { - const challengeAllowed = new Utils.BooleanHolder(true); + const challengeAllowed = new BooleanHolder(true); applyChallenges( - globalScene.gameMode, ChallengeType.POKEMON_IN_BATTLE, this, challengeAllowed, @@ -684,6 +694,92 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } } + /** + * Generate an illusion of the last pokemon in the party, as other wild pokemon in the area. + */ + setIllusion(pokemon: Pokemon): boolean { + if(!!this.summonData?.illusion){ + this.breakIllusion(); + } + if (this.hasTrainer()) { + const speciesId = pokemon.species.speciesId; + + this.summonData.illusion = { + basePokemon: { + name: this.name, + nickname: this.nickname, + shiny: this.shiny, + variant: this.variant, + fusionShiny: this.fusionShiny, + fusionVariant: this.fusionVariant + }, + species: speciesId, + formIndex: pokemon.formIndex, + gender: pokemon.gender, + pokeball: pokemon.pokeball, + fusionFormIndex: pokemon.fusionFormIndex, + fusionSpecies: pokemon.fusionSpecies || undefined, + fusionGender: pokemon.fusionGender + }; + + this.name = pokemon.name; + this.nickname = pokemon.nickname; + this.shiny = pokemon.shiny; + this.variant = pokemon.variant; + this.fusionVariant = pokemon.fusionVariant; + this.fusionShiny = pokemon.fusionShiny; + if (this.shiny) { + this.initShinySparkle(); + } + this.loadAssets(false, true).then(() => this.playAnim()); + this.updateInfo(); + } else { + const randomIllusion: PokemonSpecies = globalScene.arena.randomSpecies(globalScene.currentBattle.waveIndex, this.level); + + this.summonData.illusion = { + basePokemon: { + name: this.name, + nickname: this.nickname, + shiny: this.shiny, + variant: this.variant, + fusionShiny: this.fusionShiny, + fusionVariant: this.fusionVariant + }, + species: randomIllusion.speciesId, + formIndex: randomIllusion.formIndex, + gender: this.gender, + pokeball: this.pokeball + }; + + this.name = randomIllusion.name; + this.loadAssets(false, true).then(() => this.playAnim()); + } + return true; + } + + breakIllusion(): boolean { + if (!this.summonData?.illusion) { + return false; + } else { + this.name = this.summonData?.illusion.basePokemon.name; + this.nickname = this.summonData?.illusion.basePokemon.nickname; + this.shiny = this.summonData?.illusion.basePokemon.shiny; + this.variant = this.summonData?.illusion.basePokemon.variant; + this.fusionVariant = this.summonData?.illusion.basePokemon.fusionVariant; + this.fusionShiny = this.summonData?.illusion.basePokemon.fusionShiny; + this.summonData.illusion = null; + } + if (this.isOnField()) { + globalScene.playSound("PRSFX- Transform"); + } + if (this.shiny) { + this.initShinySparkle(); + } + this.loadAssets(false).then(() => this.playAnim()); + this.updateInfo(true); + return true; + } + abstract isPlayer(): boolean; abstract hasTrainer(): boolean; @@ -692,115 +788,91 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { abstract getBattlerIndex(): BattlerIndex; - loadAssets(ignoreOverride = true): Promise { - return new Promise(resolve => { - const moveIds = this.getMoveset().map(m => m!.getMove().id); // TODO: is this bang correct? - Promise.allSettled(moveIds.map(m => initMoveAnim(m))).then(() => { - loadMoveAnimAssets(moveIds); - this.getSpeciesForm().loadAssets( - this.getGender() === Gender.FEMALE, - this.formIndex, - this.shiny, - this.variant, - ); - if (this.isPlayer() || this.getFusionSpeciesForm()) { - globalScene.loadPokemonAtlas( - this.getBattleSpriteKey(true, ignoreOverride), - this.getBattleSpriteAtlasPath(true, ignoreOverride), - ); - } - if (this.getFusionSpeciesForm()) { - this.getFusionSpeciesForm().loadAssets( - this.getFusionGender() === Gender.FEMALE, - this.fusionFormIndex, - this.fusionShiny, - this.fusionVariant, - ); - globalScene.loadPokemonAtlas( - this.getFusionBattleSpriteKey(true, ignoreOverride), - this.getFusionBattleSpriteAtlasPath(true, ignoreOverride), - ); - } - globalScene.load.once(Phaser.Loader.Events.COMPLETE, () => { - if (this.isPlayer()) { - const originalWarn = console.warn; - // Ignore warnings for missing frames, because there will be a lot - console.warn = () => {}; - const battleFrameNames = globalScene.anims.generateFrameNames( - this.getBattleSpriteKey(), - { zeroPad: 4, suffix: ".png", start: 1, end: 400 }, - ); - console.warn = originalWarn; - if (!globalScene.anims.exists(this.getBattleSpriteKey())) { - globalScene.anims.create({ - key: this.getBattleSpriteKey(), - frames: battleFrameNames, - frameRate: 10, - repeat: -1, - }); - } - } - this.playAnim(); - const updateFusionPaletteAndResolve = () => { - this.updateFusionPalette(); - if (this.summonData?.speciesForm) { - this.updateFusionPalette(true); - } - resolve(); - }; - if (this.shiny) { - const populateVariantColors = ( - isBackSprite = false, - ): Promise => { - return new Promise(async resolve => { - const battleSpritePath = this.getBattleSpriteAtlasPath( - isBackSprite, - ignoreOverride, - ) - .replace("variant/", "") - .replace(/_[1-3]$/, ""); - let config = variantData; - const useExpSprite = - globalScene.experimentalSprites && - globalScene.hasExpSprite( - this.getBattleSpriteKey(isBackSprite, ignoreOverride), - ); - battleSpritePath - .split("/") - .map(p => (config ? (config = config[p]) : null)); - const variantSet: VariantSet = config as VariantSet; - if (variantSet && variantSet[this.variant] === 1) { - const cacheKey = this.getBattleSpriteKey(isBackSprite); - if (!variantColorCache.hasOwnProperty(cacheKey)) { - await this.populateVariantColorCache( - cacheKey, - useExpSprite, - battleSpritePath, - ); - } - } - resolve(); - }); - }; - if (this.isPlayer()) { - Promise.all([ - populateVariantColors(false), - populateVariantColors(true), - ]).then(() => updateFusionPaletteAndResolve()); - } else { - populateVariantColors(false).then(() => - updateFusionPaletteAndResolve(), - ); - } - } else { - updateFusionPaletteAndResolve(); - } - }); - if (!globalScene.load.isLoading()) { - globalScene.load.start(); - } + /** +   * @param useIllusion - Whether we want the illusion or not. +   */ + async loadAssets(ignoreOverride = true, useIllusion: boolean = false): Promise { + /** Promises that are loading assets and can be run concurrently. */ + const loadPromises: Promise[] = []; + // Assets for moves + loadPromises.push(loadMoveAnimations(this.getMoveset().map(m => m.getMove().id))); + + // Load the assets for the species form + const formIndex = !!this.summonData?.illusion && useIllusion ? this.summonData?.illusion.formIndex : this.formIndex; + loadPromises.push( + this.getSpeciesForm(false, useIllusion).loadAssets( + this.getGender(useIllusion) === Gender.FEMALE, + formIndex, + this.isShiny(useIllusion), + this.getVariant(useIllusion) + ), + ); + + if (this.isPlayer() || this.getFusionSpeciesForm(false, useIllusion)) { + globalScene.loadPokemonAtlas( + this.getBattleSpriteKey(true, ignoreOverride), + this.getBattleSpriteAtlasPath(true, ignoreOverride), + ); + } + if (this.getFusionSpeciesForm()) { + const fusionFormIndex = !!this.summonData?.illusion && useIllusion ? this.summonData?.illusion.fusionFormIndex : this.fusionFormIndex; + const fusionShiny = !!this.summonData?.illusion && !useIllusion ? this.summonData?.illusion.basePokemon!.fusionShiny : this.fusionShiny; + const fusionVariant = !!this.summonData?.illusion && !useIllusion ? this.summonData?.illusion.basePokemon!.fusionVariant : this.fusionVariant; + loadPromises.push(this.getFusionSpeciesForm(false, useIllusion).loadAssets( + this.getFusionGender(false, useIllusion) === Gender.FEMALE, + fusionFormIndex, + fusionShiny, + fusionVariant + )); + globalScene.loadPokemonAtlas( + this.getFusionBattleSpriteKey(true, ignoreOverride), + this.getFusionBattleSpriteAtlasPath(true, ignoreOverride), + ); + } + + if (this.isShiny(true)) { + loadPromises.push(populateVariantColors(this, false, ignoreOverride)) + if (this.isPlayer()) { + loadPromises.push(populateVariantColors(this, true, ignoreOverride)); + } + } + + await Promise.allSettled(loadPromises); + + // Wait for the assets we queued to load to finish loading, then... + if (!globalScene.load.isLoading()) { + globalScene.load.start(); + } + // See https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Using_promises#creating_a_promise_around_an_old_callback_api + await new Promise(resolve => globalScene.load.once(Phaser.Loader.Events.COMPLETE, resolve)); + + // With the sprites loaded, generate the animation frame information + if (this.isPlayer()) { + const originalWarn = console.warn; + // Ignore warnings for missing frames, because there will be a lot + console.warn = () => {}; + const battleFrameNames = globalScene.anims.generateFrameNames(this.getBattleSpriteKey(), { + zeroPad: 4, + suffix: ".png", + start: 1, + end: 400, }); - }); + console.warn = originalWarn; + globalScene.anims.create({ + key: this.getBattleSpriteKey(), + frames: battleFrameNames, + frameRate: 10, + repeat: -1, + }); + } + // With everything loaded, now begin playing the animation. + this.playAnim(); + + // update the fusion palette + this.updateFusionPalette(); + if (this.summonData?.speciesForm) { + this.updateFusionPalette(true); + } } /** @@ -908,11 +980,12 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } getSpriteId(ignoreOverride?: boolean): string { - return this.getSpeciesForm(ignoreOverride).getSpriteId( - this.getGender(ignoreOverride) === Gender.FEMALE, - this.formIndex, - this.shiny, - this.variant, + const formIndex: integer = !!this.summonData?.illusion ? this.summonData?.illusion.formIndex! : this.formIndex; + return this.getSpeciesForm(ignoreOverride, true).getSpriteId( + this.getGender(ignoreOverride, true) === Gender.FEMALE, + formIndex, + this.shiny, + this.variant ); } @@ -920,21 +993,24 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { if (back === undefined) { back = this.isPlayer(); } - return this.getSpeciesForm(ignoreOverride).getSpriteId( - this.getGender(ignoreOverride) === Gender.FEMALE, - this.formIndex, - this.shiny, - this.variant, - back, + + const formIndex: integer = !!this.summonData?.illusion ? this.summonData?.illusion.formIndex! : this.formIndex; + + return this.getSpeciesForm(ignoreOverride, true).getSpriteId( + this.getGender(ignoreOverride, true) === Gender.FEMALE, + formIndex, + this.shiny, + this.variant, + back ); } getSpriteKey(ignoreOverride?: boolean): string { - return this.getSpeciesForm(ignoreOverride).getSpriteKey( + return this.getSpeciesForm(ignoreOverride, false).getSpriteKey( this.getGender(ignoreOverride) === Gender.FEMALE, this.formIndex, - this.shiny, - this.variant, + this.summonData?.illusion?.basePokemon.shiny ?? this.shiny, + this.summonData?.illusion?.basePokemon.variant ?? this.variant ); } @@ -943,11 +1019,12 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } getFusionSpriteId(ignoreOverride?: boolean): string { - return this.getFusionSpeciesForm(ignoreOverride).getSpriteId( - this.getFusionGender(ignoreOverride) === Gender.FEMALE, - this.fusionFormIndex, - this.fusionShiny, - this.fusionVariant, + const fusionFormIndex: integer = !!this.summonData?.illusion ? this.summonData?.illusion.fusionFormIndex! : this.fusionFormIndex; + return this.getFusionSpeciesForm(ignoreOverride, true).getSpriteId( + this.getFusionGender(ignoreOverride, true) === Gender.FEMALE, + fusionFormIndex, + this.fusionShiny, + this.fusionVariant ); } @@ -955,12 +1032,15 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { if (back === undefined) { back = this.isPlayer(); } - return this.getFusionSpeciesForm(ignoreOverride).getSpriteId( - this.getFusionGender(ignoreOverride) === Gender.FEMALE, - this.fusionFormIndex, - this.fusionShiny, - this.fusionVariant, - back, + + const fusionFormIndex: integer = !!this.summonData?.illusion ? this.summonData?.illusion.fusionFormIndex! : this.fusionFormIndex; + + return this.getFusionSpeciesForm(ignoreOverride, true).getSpriteId( + this.getFusionGender(ignoreOverride, true) === Gender.FEMALE, + fusionFormIndex, + this.fusionShiny, + this.fusionVariant, + back ); } @@ -979,62 +1059,77 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } getIconAtlasKey(ignoreOverride?: boolean): string { - return this.getSpeciesForm(ignoreOverride).getIconAtlasKey( - this.formIndex, - this.shiny, - this.variant, + const formIndex: integer = !!this.summonData?.illusion ? this.summonData?.illusion.formIndex : this.formIndex; + return this.getSpeciesForm(ignoreOverride, true).getIconAtlasKey( + formIndex, + this.shiny, + this.variant ); } getFusionIconAtlasKey(ignoreOverride?: boolean): string { - return this.getFusionSpeciesForm(ignoreOverride).getIconAtlasKey( - this.fusionFormIndex, - this.fusionShiny, - this.fusionVariant, + return this.getFusionSpeciesForm(ignoreOverride, true).getIconAtlasKey( + this.fusionFormIndex, + this.fusionShiny, + this.fusionVariant ); } getIconId(ignoreOverride?: boolean): string { - return this.getSpeciesForm(ignoreOverride).getIconId( - this.getGender(ignoreOverride) === Gender.FEMALE, - this.formIndex, - this.shiny, - this.variant, + const formIndex: integer = !!this.summonData?.illusion ? this.summonData?.illusion.formIndex : this.formIndex; + return this.getSpeciesForm(ignoreOverride, true).getIconId( + this.getGender(ignoreOverride, true) === Gender.FEMALE, + formIndex, + this.shiny, + this.variant ); } getFusionIconId(ignoreOverride?: boolean): string { - return this.getFusionSpeciesForm(ignoreOverride).getIconId( - this.getFusionGender(ignoreOverride) === Gender.FEMALE, - this.fusionFormIndex, - this.fusionShiny, - this.fusionVariant, + const fusionFormIndex: integer = !!this.summonData?.illusion ? this.summonData?.illusion.fusionFormIndex! : this.fusionFormIndex; + return this.getFusionSpeciesForm(ignoreOverride, true).getIconId( + this.getFusionGender(ignoreOverride, true) === Gender.FEMALE, + fusionFormIndex, + this.fusionShiny, + this.fusionVariant ); } - getSpeciesForm(ignoreOverride?: boolean): PokemonSpeciesForm { + /** + * @param {boolean} useIllusion - Whether we want the speciesForm of the illusion or not. + */ + getSpeciesForm(ignoreOverride?: boolean, useIllusion: boolean = false): PokemonSpeciesForm { + const species: PokemonSpecies = useIllusion && !!this.summonData?.illusion ? getPokemonSpecies(this.summonData?.illusion.species) : this.species; + + const formIndex: integer = useIllusion && !!this.summonData?.illusion ? this.summonData?.illusion.formIndex : this.formIndex; + if (!ignoreOverride && this.summonData?.speciesForm) { return this.summonData.speciesForm; } - if (this.species.forms && this.species.forms.length > 0) { - return this.species.forms[this.formIndex]; + if (species.forms && species.forms.length > 0) { + return species.forms[formIndex]; } - return this.species; + return species; } - getFusionSpeciesForm(ignoreOverride?: boolean): PokemonSpeciesForm { + /** + * @param {boolean} useIllusion - Whether we want the fusionSpeciesForm of the illusion or not. + */ + getFusionSpeciesForm(ignoreOverride?: boolean, useIllusion: boolean = false): PokemonSpeciesForm { + const fusionSpecies: PokemonSpecies = useIllusion && !!this.summonData?.illusion ? this.summonData?.illusion.fusionSpecies! : this.fusionSpecies!; + const fusionFormIndex: integer = useIllusion && !!this.summonData?.illusion ? this.summonData?.illusion.fusionFormIndex! : this.fusionFormIndex; + if (!ignoreOverride && this.summonData?.speciesForm) { return this.summonData.fusionSpeciesForm; } if ( - !this.fusionSpecies?.forms?.length || - this.fusionFormIndex >= this.fusionSpecies?.forms.length + !fusionSpecies?.forms?.length || + fusionFormIndex >= fusionSpecies?.forms.length ) { - //@ts-ignore - return this.fusionSpecies; // TODO: I don't even know how to fix this... A complete cluster of classes involved + null + return fusionSpecies; } - return this.fusionSpecies?.forms[this.fusionFormIndex]; + return fusionSpecies?.forms[fusionFormIndex]; } getSprite(): Phaser.GameObjects.Sprite { @@ -1337,14 +1432,15 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } /** - * Retrieves the critical-hit stage considering the move used and the Pokemon - * who used it. + * Calculate the critical-hit stage of a move used against this pokemon by + * the given source + * * @param source the {@linkcode Pokemon} who using the move * @param move the {@linkcode Move} being used * @returns the final critical-hit stage value */ getCritStage(source: Pokemon, move: Move): number { - const critStage = new Utils.NumberHolder(0); + const critStage = new NumberHolder(0); applyMoveAttrs(HighCritAttr, source, this, move, critStage); globalScene.applyModifiers( CritBoosterModifier, @@ -1357,14 +1453,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { source.isPlayer(), critStage, ); - const bonusCrit = new Utils.BooleanHolder(false); - //@ts-ignore - if (applyAbAttrs(BonusCritAbAttr, source, null, false, bonusCrit)) { - // TODO: resolve ts-ignore. This is a promise. Checking a promise is bogus. - if (bonusCrit.value) { - critStage.value += 1; - } - } + applyAbAttrs(BonusCritAbAttr, source, null, false, critStage) const critBoostTag = source.getTag(CritBoostTag); if (critBoostTag) { if (critBoostTag instanceof DragonCheerTag) { @@ -1389,6 +1478,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { * @param move the {@linkcode Move} being used * @param ignoreAbility determines whether this Pokemon's abilities should be ignored during the stat calculation * @param ignoreOppAbility during an attack, determines whether the opposing Pokemon's abilities should be ignored during the stat calculation. + * @param ignoreAllyAbility during an attack, determines whether the ally Pokemon's abilities should be ignored during the stat calculation. * @param isCritical determines whether a critical hit has occurred or not (`false` by default) * @param simulated if `true`, nullifies any effects that produce any changes to game state from triggering * @param ignoreHeldItems determines whether this Pokemon's held items should be ignored during the stat calculation, default `false` @@ -1400,11 +1490,12 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { move?: Move, ignoreAbility = false, ignoreOppAbility = false, + ignoreAllyAbility = false, isCritical = false, simulated = true, ignoreHeldItems = false, ): number { - const statValue = new Utils.NumberHolder(this.getStat(stat, false)); + const statValue = new NumberHolder(this.getStat(stat, false)); if (!ignoreHeldItems) { globalScene.applyModifiers( StatBoosterModifier, @@ -1416,7 +1507,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } // The Ruin abilities here are never ignored, but they reveal themselves on summon anyway - const fieldApplied = new Utils.BooleanHolder(false); + const fieldApplied = new BooleanHolder(false); for (const pokemon of globalScene.getField(true)) { applyFieldStatMultiplierAbAttrs( FieldMultiplyStatAbAttr, @@ -1441,6 +1532,11 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { ); } + const ally = this.getAlly(); + if (!isNullOrUndefined(ally)) { + applyAllyStatMultiplierAbAttrs(AllyStatMultiplierAbAttr, ally, stat, statValue, simulated, this, move?.hasFlag(MoveFlags.IGNORE_ABILITIES) || ignoreAllyAbility); + } + let ret = statValue.value * this.getStatStageMultiplier( @@ -1524,7 +1620,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { const baseStats = this.calculateBaseStats(); // Using base stats, calculate and store stats one by one for (const s of PERMANENT_STATS) { - const statHolder = new Utils.NumberHolder( + const statHolder = new NumberHolder( Math.floor((2 * baseStats[s] + this.ivs[s]) * this.level * 0.01), ); if (s === Stat.HP) { @@ -1549,7 +1645,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } } else { statHolder.value += 5; - const natureStatMultiplier = new Utils.NumberHolder( + const natureStatMultiplier = new NumberHolder( getNatureStatMultiplier(this.getNature(), s), ); globalScene.applyModifier( @@ -1588,7 +1684,6 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { calculateBaseStats(): number[] { const baseStats = this.getSpeciesForm(true).baseStats.slice(0); applyChallenges( - globalScene.gameMode, ChallengeType.FLIP_STAT, this, baseStats, @@ -1610,7 +1705,6 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { if (this.isFusion()) { const fusionBaseStats = this.getFusionSpeciesForm(true).baseStats; applyChallenges( - globalScene.gameMode, ChallengeType.FLIP_STAT, this, fusionBaseStats, @@ -1653,9 +1747,9 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { generateNature(naturePool?: Nature[]): void { if (naturePool === undefined) { - naturePool = Utils.getEnumValues(Nature); + naturePool = getEnumValues(Nature); } - const nature = naturePool[Utils.randSeedInt(naturePool.length)]; + const nature = naturePool[randSeedInt(naturePool.length)]; this.setNature(nature); } @@ -1691,36 +1785,98 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } } - getGender(ignoreOverride?: boolean): Gender { - if (!ignoreOverride && this.summonData?.gender !== undefined) { + /** + * @param {boolean} useIllusion - Whether we want the fake or real gender (illusion ability). + */ + getGender(ignoreOverride?: boolean, useIllusion: boolean = false): Gender { + if (useIllusion && !!this.summonData?.illusion) { + return this.summonData?.illusion.gender!; + } else if (!ignoreOverride && this.summonData?.gender !== undefined) { return this.summonData.gender; } return this.gender; } - getFusionGender(ignoreOverride?: boolean): Gender { - if (!ignoreOverride && this.summonData?.fusionGender !== undefined) { + /** + * @param {boolean} useIllusion - Whether we want the fake or real gender (illusion ability). + */ + getFusionGender(ignoreOverride?: boolean, useIllusion: boolean = false): Gender { + if (useIllusion && !!this.summonData?.illusion) { + return this.summonData?.illusion.fusionGender!; + } else if (!ignoreOverride && this.summonData?.fusionGender !== undefined) { return this.summonData.fusionGender; } return this.fusionGender; } - isShiny(): boolean { - return this.shiny || (this.isFusion() && this.fusionShiny); + /** + * @param {boolean} useIllusion - Whether we want the fake or real shininess (illusion ability). + */ + isShiny(useIllusion: boolean = false): boolean { + if (!useIllusion && !!this.summonData?.illusion) { + return this.summonData?.illusion.basePokemon?.shiny || (!!this.summonData?.illusion.fusionSpecies && this.summonData?.illusion.basePokemon?.fusionShiny) || false; + } else { + return this.shiny || (this.isFusion(useIllusion) && this.fusionShiny); + } } - getVariant(): Variant { - return !this.isFusion() - ? this.variant - : (Math.max(this.variant, this.fusionVariant) as Variant); + /** + * + * @param useIllusion - Whether we want the fake or real shininess (illusion ability). + * @returns `true` if the {@linkcode Pokemon} is shiny and the fusion is shiny as well, `false` otherwise + */ + isDoubleShiny(useIllusion: boolean = false): boolean { + if (!useIllusion && !!this.summonData?.illusion) { + return this.isFusion(false) && this.summonData?.illusion.basePokemon.shiny && this.summonData?.illusion.basePokemon.fusionShiny; + } else { + return this.isFusion(useIllusion) && this.shiny && this.fusionShiny; + } + } + + /** + * @param {boolean} useIllusion - Whether we want the fake or real variant (illusion ability). + */ + getVariant(useIllusion: boolean = false): Variant { + if (!useIllusion && !!this.summonData?.illusion) { + return !this.isFusion(false) + ? this.summonData?.illusion.basePokemon!.variant + : Math.max(this.variant, this.fusionVariant) as Variant; + } else { + return !this.isFusion(true) + ? this.variant + : Math.max(this.variant, this.fusionVariant) as Variant; + } + } + + getBaseVariant(doubleShiny: boolean): Variant { + if (doubleShiny) { + return !!this.summonData?.illusion + ? this.summonData?.illusion.basePokemon!.variant + : this.variant; + } else { + return this.getVariant(); + } } getLuck(): number { return this.luck + (this.isFusion() ? this.fusionLuck : 0); } - isFusion(): boolean { - return !!this.fusionSpecies; + isFusion(useIllusion: boolean = false): boolean { + if (useIllusion && !!this.summonData?.illusion) { + return !!this.summonData?.illusion.fusionSpecies; + } else { + return !!this.fusionSpecies; + } + } + + /** + * @param {boolean} useIllusion - Whether we want the fake name or the real name of the Pokemon (for Illusion ability). + */ + getName(useIllusion: boolean = false): string { + return (!useIllusion && !!this.summonData?.illusion && this.summonData?.illusion.basePokemon) + ? this.summonData?.illusion.basePokemon.name + : this.name; } /** @@ -1739,7 +1895,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { * @returns `true` if the pokemon is the species or is fused with it, `false` otherwise */ hasSpecies(species: Species, formKey?: string): boolean { - if (Utils.isNullOrUndefined(formKey)) { + if (isNullOrUndefined(formKey)) { return ( this.species.speciesId === species || this.fusionSpecies?.speciesId === species @@ -1751,7 +1907,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { abstract isBoss(): boolean; - getMoveset(ignoreOverride?: boolean): (PokemonMove | null)[] { + getMoveset(ignoreOverride?: boolean): PokemonMove[] { const ret = !ignoreOverride && this.summonData?.moveset ? this.summonData.moveset @@ -1826,9 +1982,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { .filter(m => !levelMoves.includes(m)) .concat(levelMoves); } - levelMoves = levelMoves.filter( - lm => !this.moveset.some(m => m?.moveId === lm), - ); + levelMoves = levelMoves.filter(lm => !this.moveset.some(m => m.moveId === lm)); return levelMoves; } @@ -1837,12 +1991,14 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { * @param includeTeraType - `true` to include tera-formed type; Default: `false` * @param forDefend - `true` if the pokemon is defending from an attack; Default: `false` * @param ignoreOverride - If `true`, ignore ability changing effects; Default: `false` + * @param useIllusion - `true` to return the types of the illusion instead of the actual types; "AUTO" will depend on forDefend param; Default: "AUTO" * @returns array of {@linkcode PokemonType} */ public getTypes( - includeTeraType = false, - forDefend = false, - ignoreOverride = false, + includeTeraType = false, + forDefend: boolean = false, + ignoreOverride?: boolean, + useIllusion: boolean | "AUTO" = "AUTO" ): PokemonType[] { const types: PokemonType[] = []; @@ -1856,17 +2012,19 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } } } - if (!types.length || !includeTeraType) { + + const doIllusion: boolean = (useIllusion === "AUTO") ? !forDefend : useIllusion; if ( - !ignoreOverride && - this.summonData?.types && - this.summonData.types.length > 0 + !ignoreOverride && + this.summonData?.types && + this.summonData.types.length > 0 && + (!this.summonData?.illusion || !doIllusion) ) { this.summonData.types.forEach(t => types.push(t)); } else { - const speciesForm = this.getSpeciesForm(ignoreOverride); - const fusionSpeciesForm = this.getFusionSpeciesForm(ignoreOverride); + const speciesForm = this.getSpeciesForm(ignoreOverride, doIllusion); + const fusionSpeciesForm = this.getFusionSpeciesForm(ignoreOverride, doIllusion); const customTypes = this.customPokemonData.types?.length > 0; // First type, checking for "permanently changed" types from ME @@ -1903,7 +2061,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { if ( secondType === PokemonType.UNKNOWN && - Utils.isNullOrUndefined(fusionType2) + isNullOrUndefined(fusionType2) ) { // If second pokemon was monotype and shared its primary type secondType = @@ -2168,7 +2326,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } if ( this.summonData?.abilitySuppressed && - !ability.hasAttr(UnsuppressableAbilityAbAttr) + ability.isSuppressable ) { return false; } @@ -2191,7 +2349,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { // (Balance decided that the other ability of a neutralizing gas pokemon should not be neutralized) // If the ability itself is neutralizing gas, don't suppress it (handled through arena tag) const unsuppressable = - ability.hasAttr(UnsuppressableAbilityAbAttr) || + !ability.isSuppressable || thisAbilitySuppressing || (hasSuppressingAbility && !suppressAbilitiesTag.shouldApplyToSelf()); if (!unsuppressable) { @@ -2273,11 +2431,11 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { public getWeight(): number { const autotomizedTag = this.getTag(AutotomizedTag); let weightRemoved = 0; - if (!Utils.isNullOrUndefined(autotomizedTag)) { + if (!isNullOrUndefined(autotomizedTag)) { weightRemoved = 100 * autotomizedTag!.autotomizeCount; } const minWeight = 0.1; - const weight = new Utils.NumberHolder(this.species.weight - weightRemoved); + const weight = new NumberHolder(this.species.weight - weightRemoved); // This will trigger the ability overlay so only call this function when necessary applyAbAttrs(WeightMultiplierAbAttr, this, null, false, weight); @@ -2348,7 +2506,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { return false; } - const trappedByAbility = new Utils.BooleanHolder(false); + const trappedByAbility = new BooleanHolder(false); /** * Contains opposing Pokemon (Enemy/Player Pokemon) depending on perspective * Afterwards, it filters out Pokemon that have been switched out of the field so trapped abilities/moves do not trigger @@ -2387,7 +2545,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { * @returns The {@linkcode PokemonType} of the move after attributes are applied */ public getMoveType(move: Move, simulated = true): PokemonType { - const moveTypeHolder = new Utils.NumberHolder(move.type); + const moveTypeHolder = new NumberHolder(move.type); applyMoveAttrs(VariableMoveTypeAttr, this, null, move, moveTypeHolder); applyPreAttackAbAttrs( @@ -2418,7 +2576,8 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { * @param move {@linkcode Move} The move being used by the attacking Pokémon. * @param ignoreAbility Whether to ignore abilities that might affect type effectiveness or immunity (defaults to `false`). * @param simulated Whether to apply abilities via simulated calls (defaults to `true`) - * @param cancelled {@linkcode Utils.BooleanHolder} Stores whether the move was cancelled by a non-type-based immunity. + * @param cancelled {@linkcode BooleanHolder} Stores whether the move was cancelled by a non-type-based immunity. + * @param useIllusion - Whether we want the attack move effectiveness on the illusion or not * Currently only used by {@linkcode Pokemon.apply} to determine whether a "No effect" message should be shown. * @returns The type damage multiplier, indicating the effectiveness of the move */ @@ -2427,9 +2586,10 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { move: Move, ignoreAbility = false, simulated = true, - cancelled?: Utils.BooleanHolder, + cancelled?: BooleanHolder, + useIllusion: boolean = false ): TypeDamageMultiplier { - if (!Utils.isNullOrUndefined(this.turnData?.moveEffectiveness)) { + if (!isNullOrUndefined(this.turnData?.moveEffectiveness)) { return this.turnData?.moveEffectiveness; } @@ -2438,18 +2598,18 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } const moveType = source.getMoveType(move); - const typeMultiplier = new Utils.NumberHolder( - move.category !== MoveCategory.STATUS || - move.hasAttr(RespectAttackTypeImmunityAttr) - ? this.getAttackTypeEffectiveness( - moveType, - source, - false, - simulated, - move, - ) - : 1, - ); + const typeMultiplier = new NumberHolder( + move.category !== MoveCategory.STATUS || + move.hasAttr(RespectAttackTypeImmunityAttr) + ? this.getAttackTypeEffectiveness( + moveType, + source, + false, + simulated, + move, + useIllusion + ) + : 1); applyMoveAttrs( VariableMoveTypeMultiplierAttr, @@ -2468,7 +2628,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { typeMultiplier.value *= 2; } - const cancelledHolder = cancelled ?? new Utils.BooleanHolder(false); + const cancelledHolder = cancelled ?? new BooleanHolder(false); if (!ignoreAbility) { applyPreDefendAbAttrs( TypeImmunityAbAttr, @@ -2553,19 +2713,21 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { * @param ignoreStrongWinds whether or not this ignores strong winds (anticipation, forewarn, stealth rocks) * @param simulated tag to only apply the strong winds effect message when the move is used * @param move (optional) the move whose type effectiveness is to be checked. Used for applying {@linkcode VariableMoveTypeChartAttr} + * @param useIllusion - Whether we want the attack type effectiveness on the illusion or not * @returns a multiplier for the type effectiveness */ getAttackTypeEffectiveness( - moveType: PokemonType, - source?: Pokemon, - ignoreStrongWinds = false, - simulated = true, - move?: Move, + moveType: PokemonType, + source?: Pokemon, + ignoreStrongWinds: boolean = false, + simulated: boolean = true, + move?: Move, + useIllusion: boolean = false ): TypeDamageMultiplier { if (moveType === PokemonType.STELLAR) { return this.isTerastallized ? 2 : 1; } - const types = this.getTypes(true, true); + const types = this.getTypes(true, true, undefined, useIllusion); const arena = globalScene.arena; // Handle flying v ground type immunity without removing flying type so effective types are still effective @@ -2582,11 +2744,10 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { let multiplier = types .map(defType => { - const multiplier = new Utils.NumberHolder( + const multiplier = new NumberHolder( getTypeDamageMultiplier(moveType, defType), ); applyChallenges( - globalScene.gameMode, ChallengeType.TYPE_EFFECTIVENESS, multiplier, ); @@ -2601,7 +2762,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { ); } if (source) { - const ignoreImmunity = new Utils.BooleanHolder(false); + const ignoreImmunity = new BooleanHolder(false); if ( source.isActive(true) && source.hasAbilityWithAttr(IgnoreTypeImmunityAbAttr) @@ -2634,11 +2795,10 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { }) .reduce((acc, cur) => acc * cur, 1) as TypeDamageMultiplier; - const typeMultiplierAgainstFlying = new Utils.NumberHolder( + const typeMultiplierAgainstFlying = new NumberHolder( getTypeDamageMultiplier(moveType, PokemonType.FLYING), ); applyChallenges( - globalScene.gameMode, ChallengeType.TYPE_EFFECTIVENESS, typeMultiplierAgainstFlying, ); @@ -2666,7 +2826,8 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { */ getMatchupScore(opponent: Pokemon): number { const types = this.getTypes(true); - const enemyTypes = opponent.getTypes(true, true); + + const enemyTypes = opponent.getTypes(true, true, false, true); /** Is this Pokemon faster than the opponent? */ const outspeed = (this.isActive(true) @@ -2677,9 +2838,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { * Based on how effective this Pokemon's types are offensively against the opponent's types. * This score is increased by 25 percent if this Pokemon is faster than the opponent. */ - let atkScore = - opponent.getAttackTypeEffectiveness(types[0], this) * - (outspeed ? 1.25 : 1); + let atkScore = opponent.getAttackTypeEffectiveness(types[0], this, false, true, undefined, true) * (outspeed ? 1.25 : 1); /** * Based on how effectively this Pokemon defends against the opponent's types. * This score cannot be higher than 4. @@ -2691,12 +2850,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { atkScore *= opponent.getAttackTypeEffectiveness(types[1], this); } if (enemyTypes.length > 1) { - defScore *= - 1 / - Math.max( - this.getAttackTypeEffectiveness(enemyTypes[1], opponent), - 0.25, - ); + defScore *= (1 / Math.max(this.getAttackTypeEffectiveness(enemyTypes[1], opponent, false, false, undefined, true), 0.25)); } /** * Based on this Pokemon's HP ratio compared to that of the opponent. @@ -2942,7 +3096,10 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } setMove(moveIndex: number, moveId: Moves): void { - const move = moveId ? new PokemonMove(moveId) : null; + if (moveId === Moves.NONE) { + return; + } + const move = new PokemonMove(moveId); this.moveset[moveIndex] = move; if (this.summonData?.moveset) { this.summonData.moveset[moveIndex] = move; @@ -2975,10 +3132,14 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { const E = globalScene.gameData.trainerId ^ globalScene.gameData.secretId; const F = rand1 ^ rand2; - const shinyThreshold = new Utils.NumberHolder(BASE_SHINY_CHANCE); + const shinyThreshold = new NumberHolder(BASE_SHINY_CHANCE); if (thresholdOverride === undefined) { - if (globalScene.eventManager.isEventActive()) { - shinyThreshold.value *= globalScene.eventManager.getShinyMultiplier(); + if (timedEventManager.isEventActive()) { + const tchance = timedEventManager.getClassicTrainerShinyChance(); + shinyThreshold.value *= timedEventManager.getShinyMultiplier(); + if (this.hasTrainer() && tchance > 0) { + shinyThreshold.value = Math.max(tchance, shinyThreshold.value); // Choose the higher boost + } } if (!this.hasTrainer()) { globalScene.applyModifiers( @@ -3014,13 +3175,13 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { thresholdOverride?: number, applyModifiersToOverride?: boolean, ): boolean { - const shinyThreshold = new Utils.NumberHolder(BASE_SHINY_CHANCE); + const shinyThreshold = new NumberHolder(BASE_SHINY_CHANCE); if (thresholdOverride === undefined || applyModifiersToOverride) { if (thresholdOverride !== undefined && applyModifiersToOverride) { shinyThreshold.value = thresholdOverride; } - if (globalScene.eventManager.isEventActive()) { - shinyThreshold.value *= globalScene.eventManager.getShinyMultiplier(); + if (timedEventManager.isEventActive()) { + shinyThreshold.value *= timedEventManager.getShinyMultiplier(); } if (!this.hasTrainer()) { globalScene.applyModifiers( @@ -3069,10 +3230,10 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { ) { return 0; } - const rand = new Utils.NumberHolder(0); + const rand = new NumberHolder(0); globalScene.executeWithSeedOffset( () => { - rand.value = Utils.randSeedInt(10); + rand.value = randSeedInt(10); }, this.id, globalScene.waveSeed, @@ -3102,7 +3263,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { if (!this.species.abilityHidden) { return false; } - const haThreshold = new Utils.NumberHolder(BASE_HIDDEN_ABILITY_CHANCE); + const haThreshold = new NumberHolder(BASE_HIDDEN_ABILITY_CHANCE); if (thresholdOverride === undefined || applyModifiersToOverride) { if (thresholdOverride !== undefined && applyModifiersToOverride) { haThreshold.value = thresholdOverride; @@ -3126,7 +3287,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } public generateFusionSpecies(forStarter?: boolean): void { - const hiddenAbilityChance = new Utils.NumberHolder( + const hiddenAbilityChance = new NumberHolder( BASE_HIDDEN_ABILITY_CHANCE, ); if (!this.hasTrainer()) { @@ -3137,8 +3298,8 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { ); } - const hasHiddenAbility = !Utils.randSeedInt(hiddenAbilityChance.value); - const randAbilityIndex = Utils.randSeedInt(2); + const hasHiddenAbility = !randSeedInt(hiddenAbilityChance.value); + const randAbilityIndex = randSeedInt(2); const filter = !forStarter ? this.species.getCompatibleFusionSpeciesFilter() @@ -3455,7 +3616,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { if (stabMovePool.length) { const totalWeight = stabMovePool.reduce((v, m) => v + m[1], 0); - let rand = Utils.randSeedInt(totalWeight); + let rand = randSeedInt(totalWeight); let index = 0; while (rand > stabMovePool[index][1]) { rand -= stabMovePool[index++][1]; @@ -3469,7 +3630,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { ); if (attackMovePool.length) { const totalWeight = attackMovePool.reduce((v, m) => v + m[1], 0); - let rand = Utils.randSeedInt(totalWeight); + let rand = randSeedInt(totalWeight); let index = 0; while (rand > attackMovePool[index][1]) { rand -= attackMovePool[index++][1]; @@ -3487,14 +3648,14 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { // Other damaging moves 2x weight if 0-1 damaging moves, 0.5x if 2, 0.125x if 3. These weights get 20x if STAB. // Status moves remain unchanged on weight, this encourages 1-2 movePool = baseWeights - .filter(m => !this.moveset.some(mo => m[0] === mo?.moveId)) + .filter(m => !this.moveset.some(mo => m[0] === mo.moveId)) .map(m => { let ret: number; if ( this.moveset.some( mo => - mo?.getMove().category !== MoveCategory.STATUS && - mo?.getMove().type === allMoves[m[0]].type, + mo.getMove().category !== MoveCategory.STATUS && + mo.getMove().type === allMoves[m[0]].type, ) ) { ret = Math.ceil(Math.sqrt(m[1])); @@ -3504,7 +3665,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { Math.max( Math.pow( 4, - this.moveset.filter(mo => (mo?.getMove().power ?? 0) > 1) + this.moveset.filter(mo => (mo.getMove().power ?? 0) > 1) .length, ) / 8, 0.5, @@ -3518,12 +3679,10 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { }); } else { // Non-trainer pokemon just use normal weights - movePool = baseWeights.filter( - m => !this.moveset.some(mo => m[0] === mo?.moveId), - ); + movePool = baseWeights.filter(m => !this.moveset.some(mo => m[0] === mo.moveId)); } const totalWeight = movePool.reduce((v, m) => v + m[1], 0); - let rand = Utils.randSeedInt(totalWeight); + let rand = randSeedInt(totalWeight); let index = 0; while (rand > movePool[index][1]) { rand -= movePool[index++][1]; @@ -3705,7 +3864,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { : i18next.t("arenaTag:yourTeam"); } - getAlly(): Pokemon { + getAlly(): Pokemon | undefined { return ( this.isPlayer() ? globalScene.getPlayerField() @@ -3747,8 +3906,8 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { simulated = true, ignoreHeldItems = false, ): number { - const statStage = new Utils.NumberHolder(this.getStatStage(stat)); - const ignoreStatStage = new Utils.BooleanHolder(false); + const statStage = new NumberHolder(this.getStatStage(stat)); + const ignoreStatStage = new BooleanHolder(false); if (opponent) { if (isCritical) { @@ -3785,7 +3944,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } if (!ignoreStatStage.value) { - const statStageMultiplier = new Utils.NumberHolder( + const statStageMultiplier = new NumberHolder( Math.max(2, 2 + statStage.value) / Math.max(2, 2 - statStage.value), ); if (!ignoreHeldItems) { @@ -3817,13 +3976,13 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { return 1; } - const userAccStage = new Utils.NumberHolder(this.getStatStage(Stat.ACC)); - const targetEvaStage = new Utils.NumberHolder( + const userAccStage = new NumberHolder(this.getStatStage(Stat.ACC)); + const targetEvaStage = new NumberHolder( target.getStatStage(Stat.EVA), ); - const ignoreAccStatStage = new Utils.BooleanHolder(false); - const ignoreEvaStatStage = new Utils.BooleanHolder(false); + const ignoreAccStatStage = new BooleanHolder(false); + const ignoreEvaStatStage = new BooleanHolder(false); applyAbAttrs( IgnoreOpponentStatStagesAbAttr, @@ -3865,7 +4024,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { targetEvaStage.value = Math.min(0, targetEvaStage.value); } - const accuracyMultiplier = new Utils.NumberHolder(1); + const accuracyMultiplier = new NumberHolder(1); if (userAccStage.value !== targetEvaStage.value) { accuracyMultiplier.value = userAccStage.value > targetEvaStage.value @@ -3882,7 +4041,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { sourceMove, ); - const evasionMultiplier = new Utils.NumberHolder(1); + const evasionMultiplier = new NumberHolder(1); applyStatMultiplierAbAttrs( StatMultiplierAbAttr, target, @@ -3890,6 +4049,13 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { evasionMultiplier, ); + const ally = this.getAlly(); + if (!isNullOrUndefined(ally)) { + const ignore = this.hasAbilityWithAttr(MoveAbilityBypassAbAttr) || sourceMove.hasFlag(MoveFlags.IGNORE_ABILITIES); + applyAllyStatMultiplierAbAttrs(AllyStatMultiplierAbAttr, ally, Stat.ACC, accuracyMultiplier, false, this, ignore); + applyAllyStatMultiplierAbAttrs(AllyStatMultiplierAbAttr, ally, Stat.EVA, evasionMultiplier, false, this, ignore); + } + return accuracyMultiplier.value / evasionMultiplier.value; } @@ -3901,6 +4067,8 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { * @param moveCategory the move's {@linkcode MoveCategory} after variable-category effects are applied. * @param ignoreAbility if `true`, ignores this Pokemon's defensive ability effects (defaults to `false`). * @param ignoreSourceAbility if `true`, ignore's the attacking Pokemon's ability effects (defaults to `false`). + * @param ignoreAllyAbility if `true`, ignores the ally Pokemon's ability effects (defaults to `false`). + * @param ignoreSourceAllyAbility if `true`, ignores the attacking Pokemon's ally's ability effects (defaults to `false`). * @param isCritical if `true`, calculates effective stats as if the hit were critical (defaults to `false`). * @param simulated if `true`, suppresses changes to game state during calculation (defaults to `true`). * @returns The move's base damage against this Pokemon when used by the source Pokemon. @@ -3911,6 +4079,8 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { moveCategory: MoveCategory, ignoreAbility = false, ignoreSourceAbility = false, + ignoreAllyAbility = false, + ignoreSourceAllyAbility = false, isCritical = false, simulated = true, ): number { @@ -3926,13 +4096,14 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { * The attacker's offensive stat for the given move's category. * Critical hits cause negative stat stages to be ignored. */ - const sourceAtk = new Utils.NumberHolder( + const sourceAtk = new NumberHolder( source.getEffectiveStat( isPhysical ? Stat.ATK : Stat.SPATK, this, undefined, ignoreSourceAbility, ignoreAbility, + ignoreAllyAbility, isCritical, simulated, ), @@ -3943,13 +4114,14 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { * This Pokemon's defensive stat for the given move's category. * Critical hits cause positive stat stages to be ignored. */ - const targetDef = new Utils.NumberHolder( + const targetDef = new NumberHolder( this.getEffectiveStat( isPhysical ? Stat.DEF : Stat.SPDEF, source, move, ignoreAbility, ignoreSourceAbility, + ignoreSourceAllyAbility, isCritical, simulated, ), @@ -3984,6 +4156,8 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { * @param move {@linkcode Pokemon} the move used in the attack * @param ignoreAbility If `true`, ignores this Pokemon's defensive ability effects * @param ignoreSourceAbility If `true`, ignores the attacking Pokemon's ability effects + * @param ignoreAllyAbility If `true`, ignores the ally Pokemon's ability effects + * @param ignoreSourceAllyAbility If `true`, ignores the ability effects of the attacking pokemon's ally * @param isCritical If `true`, calculates damage for a critical hit. * @param simulated If `true`, suppresses changes to game state during the calculation. * @returns a {@linkcode DamageCalculationResult} object with three fields: @@ -3996,15 +4170,17 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { move: Move, ignoreAbility = false, ignoreSourceAbility = false, + ignoreAllyAbility = false, + ignoreSourceAllyAbility = false, isCritical = false, simulated = true, ): DamageCalculationResult { - const damage = new Utils.NumberHolder(0); + const damage = new NumberHolder(0); const defendingSide = this.isPlayer() ? ArenaTagSide.PLAYER : ArenaTagSide.ENEMY; - const variableCategory = new Utils.NumberHolder(move.category); + const variableCategory = new NumberHolder(move.category); applyMoveAttrs( VariableMoveCategoryAttr, source, @@ -4018,7 +4194,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { const moveType = source.getMoveType(move); /** If `value` is `true`, cancels the move and suppresses "No Effect" messages */ - const cancelled = new Utils.BooleanHolder(false); + const cancelled = new BooleanHolder(false); /** * The effectiveness of the move being used. Along with type matchups, this @@ -4038,7 +4214,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { const isPhysical = moveCategory === MoveCategory.PHYSICAL; /** Combined damage multiplier from field effects such as weather, terrain, etc. */ - const arenaAttackTypeMultiplier = new Utils.NumberHolder( + const arenaAttackTypeMultiplier = new NumberHolder( globalScene.arena.getAttackTypeMultiplier(moveType, source.isGrounded()), ); applyMoveAttrs( @@ -4061,10 +4237,10 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } // If the attack deals fixed damage, return a result with that much damage - const fixedDamage = new Utils.NumberHolder(0); + const fixedDamage = new NumberHolder(0); applyMoveAttrs(FixedDamageAttr, source, this, move, fixedDamage); if (fixedDamage.value) { - const multiLensMultiplier = new Utils.NumberHolder(1); + const multiLensMultiplier = new NumberHolder(1); globalScene.applyModifiers( PokemonMultiHitModifier, source.isPlayer(), @@ -4073,7 +4249,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { null, multiLensMultiplier, ); - fixedDamage.value = Utils.toDmgValue( + fixedDamage.value = toDmgValue( fixedDamage.value * multiLensMultiplier.value, ); @@ -4085,7 +4261,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } // If the attack is a one-hit KO move, return a result with damage equal to this Pokemon's HP - const isOneHitKo = new Utils.BooleanHolder(false); + const isOneHitKo = new BooleanHolder(false); applyMoveAttrs(OneHitKOAttr, source, this, move, isOneHitKo); if (isOneHitKo.value) { return { @@ -4105,6 +4281,8 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { moveCategory, ignoreAbility, ignoreSourceAbility, + ignoreAllyAbility, + ignoreSourceAllyAbility, isCritical, simulated, ); @@ -4115,7 +4293,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { const targetMultiplier = numTargets > 1 ? 0.75 : 1; /** Multiplier for moves enhanced by Multi-Lens and/or Parental Bond */ - const multiStrikeEnhancementMultiplier = new Utils.NumberHolder(1); + const multiStrikeEnhancementMultiplier = new NumberHolder(1); globalScene.applyModifiers( PokemonMultiHitModifier, source.isPlayer(), @@ -4137,13 +4315,13 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } /** Doubles damage if this Pokemon's last move was Glaive Rush */ - const glaiveRushMultiplier = new Utils.NumberHolder(1); + const glaiveRushMultiplier = new NumberHolder(1); if (this.getTag(BattlerTagType.RECEIVE_DOUBLE_DAMAGE)) { glaiveRushMultiplier.value = 2; } /** The damage multiplier when the given move critically hits */ - const criticalMultiplier = new Utils.NumberHolder(isCritical ? 1.5 : 1); + const criticalMultiplier = new NumberHolder(isCritical ? 1.5 : 1); applyAbAttrs(MultCritAbAttr, source, null, simulated, criticalMultiplier); /** @@ -4158,7 +4336,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { const sourceTeraType = source.getTeraType(); const matchesSourceType = sourceTypes.includes(moveType); /** A damage multiplier for when the attack is of the attacker's type and/or Tera type. */ - const stabMultiplier = new Utils.NumberHolder(1); + const stabMultiplier = new NumberHolder(1); if (matchesSourceType && moveType !== PokemonType.STELLAR) { stabMultiplier.value += 0.5; } @@ -4199,14 +4377,14 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { stabMultiplier.value = Math.min(stabMultiplier.value, 2.25); /** Halves damage if the attacker is using a physical attack while burned */ - const burnMultiplier = new Utils.NumberHolder(1); + const burnMultiplier = new NumberHolder(1); if ( isPhysical && source.status && source.status.effect === StatusEffect.BURN ) { if (!move.hasAttr(BypassBurnDamageReductionAttr)) { - const burnDamageReductionCancelled = new Utils.BooleanHolder(false); + const burnDamageReductionCancelled = new BooleanHolder(false); if (!ignoreSourceAbility) { applyAbAttrs( BypassBurnDamageReductionAbAttr, @@ -4222,7 +4400,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } /** Reduces damage if this Pokemon has a relevant screen (e.g. Light Screen for special attacks) */ - const screenMultiplier = new Utils.NumberHolder(1); + const screenMultiplier = new NumberHolder(1); // Critical hits should bypass screens if (!isCritical) { @@ -4242,7 +4420,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { * AND * The move doubles damage when used against that tag */ - const hitsTagMultiplier = new Utils.NumberHolder(1); + const hitsTagMultiplier = new NumberHolder(1); move .getAttrs(HitsTagAttr) .filter(hta => hta.doubleDamage) @@ -4260,7 +4438,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { ? 0.5 : 1; - damage.value = Utils.toDmgValue( + damage.value = toDmgValue( baseDamage * targetMultiplier * multiStrikeEnhancementMultiplier.value * @@ -4308,11 +4486,12 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { damage, ); + const ally = this.getAlly(); /** Additionally apply friend guard damage reduction if ally has it. */ - if (globalScene.currentBattle.double && this.getAlly()?.isActive(true)) { + if (globalScene.currentBattle.double && !isNullOrUndefined(ally) && ally.isActive(true)) { applyPreDefendAbAttrs( AlliedFieldDamageReductionAbAttr, - this.getAlly(), + ally, source, move, cancelled, @@ -4368,10 +4547,10 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { const defendingSide = this.isPlayer() ? ArenaTagSide.PLAYER : ArenaTagSide.ENEMY; - const moveCategory = new Utils.NumberHolder(move.category); + const moveCategory = new NumberHolder(move.category); applyMoveAttrs(VariableMoveCategoryAttr, source, this, move, moveCategory); if (moveCategory.value === MoveCategory.STATUS) { - const cancelled = new Utils.BooleanHolder(false); + const cancelled = new BooleanHolder(false); const typeMultiplier = this.getMoveEffectiveness( source, move, @@ -4391,7 +4570,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } /** Determines whether the attack critically hits */ let isCritical: boolean; - const critOnly = new Utils.BooleanHolder(false); + const critOnly = new BooleanHolder(false); const critAlways = source.getTag(BattlerTagType.ALWAYS_CRIT); applyMoveAttrs(CritOnlyAttr, source, this, move, critOnly); applyAbAttrs( @@ -4414,7 +4593,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } const noCritTag = globalScene.arena.getTagOnSide(NoCritTag, defendingSide); - const blockCrit = new Utils.BooleanHolder(false); + const blockCrit = new BooleanHolder(false); applyAbAttrs(BlockCritAbAttr, this, null, false, blockCrit); if (noCritTag || blockCrit.value || Overrides.NEVER_CRIT_OVERRIDE) { isCritical = false; @@ -4430,7 +4609,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { cancelled, result, damage: dmg, - } = this.getAttackDamage(source, move, false, false, isCritical, false); + } = this.getAttackDamage(source, move, false, false, false, false, isCritical, false); const typeBoost = source.findTag( t => @@ -4496,7 +4675,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { if (damage > 0) { if (source.isPlayer()) { - globalScene.validateAchvs(DamageAchv, new Utils.NumberHolder(damage)); + globalScene.validateAchvs(DamageAchv, new NumberHolder(damage)); if (damage > globalScene.gameData.gameStats.highestDamage) { globalScene.gameData.gameStats.highestDamage = damage; } @@ -4520,7 +4699,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { DamageMoneyRewardModifier, true, source, - new Utils.NumberHolder(damage), + new NumberHolder(damage), ); } } @@ -4585,7 +4764,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { if (this.isFainted()) { return 0; } - const surviveDamage = new Utils.BooleanHolder(false); + const surviveDamage = new BooleanHolder(false); if (!preventEndure && this.hp - damage <= 0) { if (this.hp >= 1 && this.getTag(BattlerTagType.ENDURING)) { @@ -4720,7 +4899,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { const stubTag = new BattlerTag(tagType, 0, 0); - const cancelled = new Utils.BooleanHolder(false); + const cancelled = new BooleanHolder(false); applyPreApplyBattlerTagAbAttrs( BattlerTagImmunityAbAttr, this, @@ -4737,6 +4916,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { stubTag, cancelled, true, + this, ), ); @@ -4757,28 +4937,34 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { const newTag = getBattlerTag(tagType, turnCount, sourceMove!, sourceId!); // TODO: are the bangs correct? - const cancelled = new Utils.BooleanHolder(false); + const cancelled = new BooleanHolder(false); applyPreApplyBattlerTagAbAttrs( BattlerTagImmunityAbAttr, this, newTag, cancelled, ); + if (cancelled.value) { + return false; + } - const userField = this.getAlliedField(); - userField.forEach(pokemon => + for (const pokemon of this.getAlliedField()) { applyPreApplyBattlerTagAbAttrs( UserFieldBattlerTagImmunityAbAttr, pokemon, newTag, cancelled, - ), - ); + false, + this + ); + if (cancelled.value) { + return false; + } + } - if (!cancelled.value && newTag.canAdd(this)) { + if (newTag.canAdd(this)) { this.summonData.tags.push(newTag); newTag.onAdd(this); - return true; } @@ -5084,12 +5270,12 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { let fusionCry = this.getFusionSpeciesForm().cry(soundConfig, true); duration = Math.min(duration, fusionCry.totalDuration * 1000); fusionCry.destroy(); - scene.time.delayedCall(Utils.fixedInt(Math.ceil(duration * 0.4)), () => { + scene.time.delayedCall(fixedInt(Math.ceil(duration * 0.4)), () => { try { SoundFade.fadeOut( scene, cry, - Utils.fixedInt(Math.ceil(duration * 0.2)), + fixedInt(Math.ceil(duration * 0.2)), ); fusionCry = this.getFusionSpeciesForm().cry( Object.assign( @@ -5100,7 +5286,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { SoundFade.fadeIn( scene, fusionCry, - Utils.fixedInt(Math.ceil(duration * 0.2)), + fixedInt(Math.ceil(duration * 0.2)), scene.masterVolume * scene.fieldVolume, 0, ); @@ -5140,7 +5326,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { let faintCryTimer: Phaser.Time.TimerEvent | null = globalScene.time.addEvent({ - delay: Utils.fixedInt(delay), + delay: fixedInt(delay), repeat: -1, callback: () => { frameThreshold = sprite.anims.msPerFrame / rate; @@ -5166,7 +5352,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { }); // Failsafe - globalScene.time.delayedCall(Utils.fixedInt(3000), () => { + globalScene.time.delayedCall(fixedInt(3000), () => { if (!faintCryTimer || !globalScene) { return; } @@ -5225,7 +5411,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { let faintCryTimer: Phaser.Time.TimerEvent | null = globalScene.time.addEvent({ - delay: Utils.fixedInt(delay), + delay: fixedInt(delay), repeat: -1, callback: () => { ++i; @@ -5242,7 +5428,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { SoundFade.fadeOut( globalScene, cry, - Utils.fixedInt(Math.ceil((duration / rate) * 0.2)), + fixedInt(Math.ceil((duration / rate) * 0.2)), ); fusionCry = globalScene.playSound( fusionCryKey, @@ -5254,7 +5440,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { SoundFade.fadeIn( globalScene, fusionCry, - Utils.fixedInt(Math.ceil((duration / rate) * 0.2)), + fixedInt(Math.ceil((duration / rate) * 0.2)), globalScene.masterVolume * globalScene.fieldVolume, 0, ); @@ -5280,7 +5466,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { }); // Failsafe - globalScene.time.delayedCall(Utils.fixedInt(3000), () => { + globalScene.time.delayedCall(fixedInt(3000), () => { if (!faintCryTimer || !globalScene) { return; } @@ -5355,7 +5541,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } // Check if the source Pokemon has an ability that cancels the Poison/Toxic immunity - const cancelImmunity = new Utils.BooleanHolder(false); + const cancelImmunity = new BooleanHolder(false); if (sourcePokemon) { applyAbAttrs( IgnoreTypeStatusEffectImmunityAbAttr, @@ -5411,7 +5597,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { break; } - const cancelled = new Utils.BooleanHolder(false); + const cancelled = new BooleanHolder(false); applyPreSetStatusAbAttrs( StatusEffectImmunityAbAttr, this, @@ -5419,17 +5605,22 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { cancelled, quiet, ); + if (cancelled.value) { + return false; + } - const userField = this.getAlliedField(); - userField.forEach(pokemon => + for (const pokemon of this.getAlliedField()) { applyPreSetStatusAbAttrs( UserFieldStatusEffectImmunityAbAttr, pokemon, effect, cancelled, - quiet, - ), - ); + quiet, this, sourcePokemon, + ) + if (cancelled.value) { + break; + } + } if (cancelled.value) { return false; @@ -5444,8 +5635,9 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { sourcePokemon: Pokemon | null = null, turnsRemaining = 0, sourceText: string | null = null, + overrideStatus?: boolean ): boolean { - if (!this.canSetStatus(effect, asPhase, false, sourcePokemon)) { + if (!this.canSetStatus(effect, asPhase, overrideStatus, sourcePokemon)) { return false; } if (this.isFainted() && effect !== StatusEffect.FAINT) { @@ -5461,6 +5653,9 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } if (asPhase) { + if (overrideStatus) { + this.resetStatus(false); + } globalScene.unshiftPhase( new ObtainStatusEffectPhase( this.getBattlerIndex(), @@ -5473,10 +5668,10 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { return true; } - let sleepTurnsRemaining: Utils.NumberHolder; + let sleepTurnsRemaining: NumberHolder; if (effect === StatusEffect.SLEEP) { - sleepTurnsRemaining = new Utils.NumberHolder(this.randSeedIntRange(2, 4)); + sleepTurnsRemaining = new NumberHolder(this.randSeedIntRange(2, 4)); this.setFrameRate(4); @@ -5500,20 +5695,6 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { effect = effect!; // If `effect` is undefined then `trySetStatus()` will have already returned early via the `canSetStatus()` call this.status = new Status(effect, 0, sleepTurnsRemaining?.value); - if (effect !== StatusEffect.FAINT) { - globalScene.triggerPokemonFormChange( - this, - SpeciesFormChangeStatusEffectTrigger, - true, - ); - applyPostSetStatusAbAttrs( - PostSetStatusAbAttr, - this, - effect, - sourcePokemon, - ); - } - return true; } @@ -5528,21 +5709,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { if (!revive && lastStatus === StatusEffect.FAINT) { return; } - this.status = null; - if (lastStatus === StatusEffect.SLEEP) { - this.setFrameRate(10); - if (this.getTag(BattlerTagType.NIGHTMARE)) { - this.lapseTag(BattlerTagType.NIGHTMARE); - } - } - if (confusion) { - if (this.getTag(BattlerTagType.CONFUSED)) { - this.lapseTag(BattlerTagType.CONFUSED); - } - } - if (reloadAssets) { - this.loadAssets(false).then(() => this.playAnim()); - } + globalScene.unshiftPhase(new ResetStatusPhase(this, confusion, reloadAssets)); } /** @@ -5555,7 +5722,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { ? ArenaTagSide.PLAYER : ArenaTagSide.ENEMY; if (globalScene.arena.getTagOnSide(ArenaTagType.SAFEGUARD, defendingSide)) { - const bypassed = new Utils.BooleanHolder(false); + const bypassed = new BooleanHolder(false); if (attacker) { applyAbAttrs(InfiltratorAbAttr, attacker, null, false, bypassed); } @@ -5568,7 +5735,13 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { this.summonDataPrimer = summonDataPrimer; } + // For PreSummonAbAttr to get access to summonData + initSummondata(): void { + this.summonData = this.summonData ?? this.summonDataPrimer ?? new PokemonSummonData() + } + resetSummonData(): void { + const illusion: IllusionData | null = this.summonData?.illusion; if (this.summonData?.speciesForm) { this.summonData.speciesForm = null; this.updateFusionPalette(); @@ -5604,6 +5777,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } this.summonDataPrimer = null; } + this.summonData.illusion = illusion this.updateInfo(); } @@ -5851,9 +6025,9 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { if (this.shiny && variantColors && variantColors[this.variant]) { Object.keys(variantColors[this.variant]).forEach(k => { variantColorSet.set( - Utils.rgbaToInt(Array.from(Object.values(Utils.rgbHexToRgba(k)))), + rgbaToInt(Array.from(Object.values(rgbHexToRgba(k)))), Array.from( - Object.values(Utils.rgbHexToRgba(variantColors[this.variant][k])), + Object.values(rgbHexToRgba(variantColors[this.variant][k])), ), ); }); @@ -5864,7 +6038,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { const pixel = pixelData[f].slice(i, i + 4); let [r, g, b, a] = pixel; if (variantColors) { - const color = Utils.rgbaToInt([r, g, b, a]); + const color = rgbaToInt([r, g, b, a]); if (variantColorSet.has(color)) { const mappedPixel = variantColorSet.get(color); if (mappedPixel) { @@ -5913,10 +6087,10 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { ) { for (const k of Object.keys(variantColors[this.fusionVariant])) { variantColorSet.set( - Utils.rgbaToInt(Array.from(Object.values(Utils.rgbHexToRgba(k)))), + rgbaToInt(Array.from(Object.values(rgbHexToRgba(k)))), Array.from( Object.values( - Utils.rgbHexToRgba(variantColors[this.fusionVariant][k]), + rgbHexToRgba(variantColors[this.fusionVariant][k]), ), ), ); @@ -5936,7 +6110,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { pixelData[2 + f][i + 3], ]; if (variantColors) { - const color = Utils.rgbaToInt([r, g, b, a]); + const color = rgbaToInt([r, g, b, a]); if (variantColorSet.has(color)) { const mappedPixel = variantColorSet.get(color); if (mappedPixel) { @@ -5994,7 +6168,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { hsvColors = Array.from(rgbaColors.keys()).reduce( (map: Map, k: number) => { const rgb = rgbaColors.get(k)!.slice(0, 3); - map.set(k, Utils.rgbToHsv(rgb[0], rgb[1], rgb[2])); + map.set(k, rgbToHsv(rgb[0], rgb[1], rgb[2])); return map; }, new Map(), @@ -6074,7 +6248,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { spriteColors.forEach((sc: number[], i: number) => { paletteDeltas.push([]); for (let p = 0; p < palette.length; p++) { - paletteDeltas[i].push(Utils.deltaRgb(sc, palette[p])); + paletteDeltas[i].push(deltaRgb(sc, palette[p])); } }); @@ -6119,8 +6293,8 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { * * This calls either {@linkcode BattleScene.randBattleSeedInt}({@linkcode range}, {@linkcode min}) in `src/battle-scene.ts` * which calls {@linkcode Battle.randSeedInt}({@linkcode range}, {@linkcode min}) in `src/battle.ts` - * which calls {@linkcode Utils.randSeedInt randSeedInt}({@linkcode range}, {@linkcode min}) in `src/utils.ts`, - * or it directly calls {@linkcode Utils.randSeedInt randSeedInt}({@linkcode range}, {@linkcode min}) in `src/utils.ts` if there is no current battle + * which calls {@linkcode randSeedInt randSeedInt}({@linkcode range}, {@linkcode min}) in `src/utils.ts`, + * or it directly calls {@linkcode randSeedInt randSeedInt}({@linkcode range}, {@linkcode min}) in `src/utils.ts` if there is no current battle * * @param range How large of a range of random numbers to choose from. If {@linkcode range} <= 1, returns {@linkcode min} * @param min The minimum integer to pick, default `0` @@ -6129,7 +6303,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { randSeedInt(range: number, min = 0): number { return globalScene.currentBattle ? globalScene.randBattleSeedInt(range, min) - : Utils.randSeedInt(range, min); + : randSeedInt(range, min); } /** @@ -6425,7 +6599,7 @@ export class PlayerPokemon extends Pokemon { ? globalScene.gameData.starterData[fusionStarterSpeciesId] : null, ].filter(d => !!d); - const amount = new Utils.NumberHolder(friendship); + const amount = new NumberHolder(friendship); globalScene.applyModifier( PokemonFriendshipBoosterModifier, true, @@ -6433,14 +6607,14 @@ export class PlayerPokemon extends Pokemon { amount, ); const candyFriendshipMultiplier = globalScene.gameMode.isClassic - ? globalScene.eventManager.getClassicFriendshipMultiplier() + ? timedEventManager.getClassicFriendshipMultiplier() : 1; const fusionReduction = fusionStarterSpeciesId - ? globalScene.eventManager.areFusionsBoosted() + ? timedEventManager.areFusionsBoosted() ? 1.5 // Divide candy gain for fusions by 1.5 during events : 2 // 2 for fusions outside events : 1; // 1 for non-fused mons - const starterAmount = new Utils.NumberHolder( + const starterAmount = new NumberHolder( Math.floor( (amount.value * candyFriendshipMultiplier) / fusionReduction, ), @@ -6852,18 +7026,7 @@ export class PlayerPokemon extends Pokemon { copyMoveset(): PokemonMove[] { const newMoveset: PokemonMove[] = []; this.moveset.forEach(move => { - // TODO: refactor `moveset` to not accept `null`s - if (move) { - newMoveset.push( - new PokemonMove( - move.moveId, - 0, - move.ppUp, - move.virtual, - move.maxPpOverride, - ), - ); - } + newMoveset.push(new PokemonMove(move.moveId, 0, move.ppUp, move.virtual, move.maxPpOverride)); }); return newMoveset; @@ -7050,17 +7213,8 @@ export class EnemyPokemon extends Pokemon { if (moveQueue.length !== 0) { const queuedMove = moveQueue[0]; if (queuedMove) { - const moveIndex = this.getMoveset().findIndex( - m => m?.moveId === queuedMove.move, - ); - if ( - (moveIndex > -1 && - this.getMoveset()[moveIndex]!.isUsable( - this, - queuedMove.ignorePP, - )) || - queuedMove.virtual - ) { + const moveIndex = this.getMoveset().findIndex(m => m.moveId === queuedMove.move); + if ((moveIndex > -1 && this.getMoveset()[moveIndex].isUsable(this, queuedMove.ignorePP)) || queuedMove.virtual) { return queuedMove; } else { this.getMoveQueue().shift(); @@ -7070,20 +7224,17 @@ export class EnemyPokemon extends Pokemon { } // Filter out any moves this Pokemon cannot use - let movePool = this.getMoveset().filter(m => m?.isUsable(this)); + let movePool = this.getMoveset().filter(m => m.isUsable(this)); // If no moves are left, use Struggle. Otherwise, continue with move selection if (movePool.length) { // If there's only 1 move in the move pool, use it. if (movePool.length === 1) { - return { - move: movePool[0]!.moveId, - targets: this.getNextTargets(movePool[0]!.moveId), - }; // TODO: are the bangs correct? + return { move: movePool[0].moveId, targets: this.getNextTargets(movePool[0].moveId) }; } // If a move is forced because of Encore, use it. const encoreTag = this.getTag(EncoreTag) as EncoreTag; if (encoreTag) { - const encoreMove = movePool.find(m => m?.moveId === encoreTag.moveId); + const encoreMove = movePool.find(m => m.moveId === encoreTag.moveId); if (encoreMove) { return { move: encoreMove.moveId, @@ -7093,8 +7244,7 @@ export class EnemyPokemon extends Pokemon { } switch (this.aiType) { case AiType.RANDOM: // No enemy should spawn with this AI type in-game - const moveId = - movePool[globalScene.randBattleSeedInt(movePool.length)]!.moveId; // TODO: is the bang correct? + const moveId = movePool[globalScene.randBattleSeedInt(movePool.length)].moveId; return { move: moveId, targets: this.getNextTargets(moveId) }; case AiType.SMART_RANDOM: case AiType.SMART: @@ -7139,6 +7289,8 @@ export class EnemyPokemon extends Pokemon { move, !p.battleData.abilityRevealed, false, + !p.getAlly()?.battleData.abilityRevealed, + false, isCritical, ).damage >= p.hp ); @@ -7156,11 +7308,9 @@ export class EnemyPokemon extends Pokemon { * For more information on how benefit scores are calculated, see `docs/enemy-ai.md`. */ const moveScores = movePool.map(() => 0); - const moveTargets = Object.fromEntries( - movePool.map(m => [m!.moveId, this.getNextTargets(m!.moveId)]), - ); // TODO: are those bangs correct? + const moveTargets = Object.fromEntries(movePool.map(m => [ m.moveId, this.getNextTargets(m.moveId) ])); for (const m in movePool) { - const pokemonMove = movePool[m]!; // TODO: is the bang correct? + const pokemonMove = movePool[m]; const move = pokemonMove.getMove(); let moveScore = moveScores[m]; @@ -7200,15 +7350,11 @@ export class EnemyPokemon extends Pokemon { ) { targetScore = -20; } else if (move instanceof AttackMove) { - /** - * Attack moves are given extra multipliers to their base benefit score based on - * the move's type effectiveness against the target and whether the move is a STAB move. - */ - const effectiveness = target.getMoveEffectiveness( - this, - move, - !target.battleData?.abilityRevealed, - ); + /** + * Attack moves are given extra multipliers to their base benefit score based on + * the move's type effectiveness against the target and whether the move is a STAB move. + */ + const effectiveness = target.getMoveEffectiveness(this, move, !target.battleData?.abilityRevealed, undefined, undefined, true); if (target.isPlayer() !== this.isPlayer()) { targetScore *= effectiveness; if (this.isOfType(move.type)) { @@ -7269,16 +7415,8 @@ export class EnemyPokemon extends Pokemon { r++; } } - console.log( - movePool.map(m => m!.getName()), - moveScores, - r, - sortedMovePool.map(m => m!.getName()), - ); // TODO: are those bangs correct? - return { - move: sortedMovePool[r]!.moveId, - targets: moveTargets[sortedMovePool[r]!.moveId], - }; + console.log(movePool.map(m => m.getName()), moveScores, r, sortedMovePool.map(m => m.getName())); + return { move: sortedMovePool[r]!.moveId, targets: moveTargets[sortedMovePool[r]!.moveId] }; } } @@ -7435,7 +7573,7 @@ export class EnemyPokemon extends Pokemon { //console.log('damage', damage, 'segment', segmentsBypassed + 1, 'segment size', segmentSize, 'damage needed', Math.round(segmentSize * Math.pow(2, segmentsBypassed + 1))); } - damage = Utils.toDmgValue( + damage = toDmgValue( this.hp - hpThreshold + segmentSize * segmentsBypassed, ); clearedBossSegmentIndex = s - segmentsBypassed; @@ -7513,7 +7651,7 @@ export class EnemyPokemon extends Pokemon { } // Pick a random stat from the leftover stats to increase its stages - const randInt = Utils.randSeedInt(totalWeight); + const randInt = randSeedInt(totalWeight); for (const i in statThresholds) { if (randInt < statThresholds[i]) { boostedStat = leftoverStats[i]; @@ -7584,7 +7722,7 @@ export class EnemyPokemon extends Pokemon { this, ); - if (Utils.isBetween(slotIndex, 0, PLAYER_PARTY_MAX_SIZE - 1)) { + if (isBetween(slotIndex, 0, PLAYER_PARTY_MAX_SIZE - 1)) { party.splice(slotIndex, 0, newPokemon); } else { party.push(newPokemon); @@ -7605,6 +7743,42 @@ export class EnemyPokemon extends Pokemon { } } +/** + * Illusion property + */ +interface IllusionData { + basePokemon: { + /** The actual name of the Pokemon */ + name: string; + /** The actual nickname of the Pokemon */ + nickname: string; + /** Whether the base pokemon is shiny or not */ + shiny: boolean; + /** The shiny variant of the base pokemon */ + variant: Variant; + /** Whether the fusion species of the base pokemon is shiny or not */ + fusionShiny: boolean; + /** The variant of the fusion species of the base pokemon */ + fusionVariant: Variant; + }; + /** The species of the illusion */ + species: Species; + /** The formIndex of the illusion */ + formIndex: number; + /** The gender of the illusion */ + gender: Gender; + /** The pokeball of the illusion */ + pokeball: PokeballType; + /** The fusion species of the illusion if it's a fusion */ + fusionSpecies?: PokemonSpecies; + /** The fusionFormIndex of the illusion */ + fusionFormIndex?: number; + /** The fusionGender of the illusion if it's a fusion */ + fusionGender?: Gender; + /** The level of the illusion (not used currently) */ + level?: number +} + export interface TurnMove { move: Moves; targets: BattlerIndex[]; @@ -7637,10 +7811,13 @@ export class PokemonSummonData { public gender: Gender; public fusionGender: Gender; public stats: number[] = [0, 0, 0, 0, 0, 0]; - public moveset: (PokemonMove | null)[]; + public moveset: PokemonMove[]; + public illusionBroken: boolean = false; + // If not initialized this value will not be populated from save data. public types: PokemonType[] = []; public addedType: PokemonType | null = null; + public illusion: IllusionData | null = null; } export class PokemonBattleData { @@ -7651,7 +7828,7 @@ export class PokemonBattleData { public endured = false; public berriesEaten: BerryType[] = []; public abilitiesApplied: Abilities[] = []; - public abilityRevealed = false; + public abilityRevealed: boolean = false; } export class PokemonBattleSummonData { @@ -7826,7 +8003,7 @@ export class PokemonMove { getMovePp(): number { return ( this.maxPpOverride || - this.getMove().pp + this.ppUp * Utils.toDmgValue(this.getMove().pp / 5) + this.getMove().pp + this.ppUp * toDmgValue(this.getMove().pp / 5) ); } diff --git a/src/field/trainer.ts b/src/field/trainer.ts index 98919ebfa93..30cf43b54a1 100644 --- a/src/field/trainer.ts +++ b/src/field/trainer.ts @@ -2,19 +2,17 @@ import { globalScene } from "#app/global-scene"; import { pokemonPrevolutions } from "#app/data/balance/pokemon-evolutions"; import type PokemonSpecies from "#app/data/pokemon-species"; import { getPokemonSpecies } from "#app/data/pokemon-species"; -import type { TrainerConfig, TrainerPartyTemplate } from "#app/data/trainer-config"; -import { - TrainerPartyCompoundTemplate, - TrainerPoolTier, - TrainerSlot, - trainerConfigs, - trainerPartyTemplates, - TeraAIMode, -} from "#app/data/trainer-config"; +import type { TrainerConfig } from "#app/data/trainers/trainer-config"; +import type { TrainerPartyTemplate } from "#app/data/trainers/TrainerPartyTemplate"; +import { trainerConfigs } from "#app/data/trainers/trainer-config"; +import { trainerPartyTemplates } from "#app/data/trainers/TrainerPartyTemplate"; +import { TrainerPartyCompoundTemplate } from "#app/data/trainers/TrainerPartyTemplate"; +import { TrainerSlot } from "#enums/trainer-slot"; +import { TrainerPoolTier } from "#enums/trainer-pool-tier"; +import { TeraAIMode } from "#enums/tera-ai-mode"; import type { EnemyPokemon } from "#app/field/pokemon"; -import * as Utils from "#app/utils"; +import { randSeedWeightedItem, randSeedItem, randSeedInt } from "#app/utils"; import type { PersistentModifier } from "#app/modifier/modifier"; -import { trainerNamePools } from "#app/data/trainer-names"; import { ArenaTagSide, ArenaTrapTag } from "#app/data/arena-tag"; import { getIsInitialized, initI18n } from "#app/plugins/i18n"; import i18next from "i18next"; @@ -35,14 +33,16 @@ export default class Trainer extends Phaser.GameObjects.Container { public partyTemplateIndex: number; public name: string; public partnerName: string; + public nameKey: string; + public partnerNameKey: string | undefined; public originalIndexes: { [key: number]: number } = {}; constructor( trainerType: TrainerType, variant: TrainerVariant, partyTemplateIndex?: number, - name?: string, - partnerName?: string, + nameKey?: string, + partnerNameKey?: string, trainerConfigOverride?: TrainerConfig, ) { super(globalScene, -72, 80); @@ -58,23 +58,42 @@ export default class Trainer extends Phaser.GameObjects.Container { this.partyTemplateIndex = Math.min( partyTemplateIndex !== undefined ? partyTemplateIndex - : Utils.randSeedWeightedItem(this.config.partyTemplates.map((_, i) => i)), + : randSeedWeightedItem(this.config.partyTemplates.map((_, i) => i)), this.config.partyTemplates.length - 1, ); - if (trainerNamePools.hasOwnProperty(trainerType)) { - const namePool = trainerNamePools[trainerType]; - this.name = - name || - Utils.randSeedItem(Array.isArray(namePool[0]) ? namePool[variant === TrainerVariant.FEMALE ? 1 : 0] : namePool); + const classKey = `trainersCommon:${TrainerType[trainerType]}`; + if (i18next.exists(classKey, { returnObjects: true })) { + if (nameKey) { + this.nameKey = nameKey; + } else { + const genderKey = i18next.exists(`${classKey}.MALE`) + ? variant === TrainerVariant.FEMALE + ? ".FEMALE" + : ".MALE" + : ""; + const trainerKey = randSeedItem(Object.keys(i18next.t(`${classKey}${genderKey}`, { returnObjects: true }))); + this.nameKey = `${classKey}${genderKey}.${trainerKey}`; + } + this.name = i18next.t(this.nameKey); if (variant === TrainerVariant.DOUBLE) { if (this.config.doubleOnly) { - if (partnerName) { - this.partnerName = partnerName; + if (partnerNameKey) { + this.partnerNameKey = partnerNameKey; + this.partnerName = i18next.t(this.partnerNameKey); } else { [this.name, this.partnerName] = this.name.split(" & "); } } else { - this.partnerName = partnerName || Utils.randSeedItem(Array.isArray(namePool[0]) ? namePool[1] : namePool); + const partnerGenderKey = i18next.exists(`${classKey}.FEMALE`) ? ".FEMALE" : ""; + const partnerTrainerKey = randSeedItem( + Object.keys( + i18next.t(`${classKey}${partnerGenderKey}`, { + returnObjects: true, + }), + ), + ); + this.partnerNameKey = `${classKey}${partnerGenderKey}.${partnerTrainerKey}`; + this.partnerName = i18next.t(this.partnerNameKey); } } } @@ -399,7 +418,7 @@ export default class Trainer extends Phaser.GameObjects.Container { // If useNewSpeciesPool is true, we need to generate a new species from the new species pool, otherwise we generate a random species let species = useNewSpeciesPool - ? getPokemonSpecies(newSpeciesPool[Math.floor(Utils.randSeedInt(newSpeciesPool.length))]) + ? getPokemonSpecies(newSpeciesPool[Math.floor(randSeedInt(newSpeciesPool.length))]) : template.isSameSpecies(index) && index > offset ? getPokemonSpecies( battle.enemyParty[offset].species.getTrainerSpeciesForLevel( @@ -440,7 +459,7 @@ export default class Trainer extends Phaser.GameObjects.Container { let baseSpecies: PokemonSpecies; if (this.config.speciesPools) { - const tierValue = Utils.randSeedInt(512); + const tierValue = randSeedInt(512); let tier = tierValue >= 156 ? TrainerPoolTier.COMMON @@ -459,7 +478,7 @@ export default class Trainer extends Phaser.GameObjects.Container { tier--; } const tierPool = this.config.speciesPools[tier]; - baseSpecies = getPokemonSpecies(Utils.randSeedItem(tierPool)); + baseSpecies = getPokemonSpecies(randSeedItem(tierPool)); } else { baseSpecies = globalScene.randomSpecies(battle.waveIndex, level, false, this.config.speciesFilter); } @@ -598,7 +617,7 @@ export default class Trainer extends Phaser.GameObjects.Container { if (maxScorePartyMemberIndexes.length > 1) { let rand: number; globalScene.executeWithSeedOffset( - () => (rand = Utils.randSeedInt(maxScorePartyMemberIndexes.length)), + () => (rand = randSeedInt(maxScorePartyMemberIndexes.length)), globalScene.currentBattle.turn << 2, ); return maxScorePartyMemberIndexes[rand!]; diff --git a/src/game-mode.ts b/src/game-mode.ts index 9ab1674bcce..4779fda50e8 100644 --- a/src/game-mode.ts +++ b/src/game-mode.ts @@ -7,7 +7,7 @@ import type PokemonSpecies from "./data/pokemon-species"; import { allSpecies } from "./data/pokemon-species"; import type { Arena } from "./field/arena"; import Overrides from "#app/overrides"; -import * as Utils from "./utils"; +import { randSeedInt, randSeedItem } from "#app/utils"; import { Biome } from "#enums/biome"; import { Species } from "#enums/species"; import { Challenges } from "./enums/challenges"; @@ -68,6 +68,19 @@ export class GameMode implements GameModeConfig { this.battleConfig = battleConfig || {}; } + /** + * Enables challenges if they are disabled and sets the specified challenge's value + * @param challenge The challenge to set + * @param value The value to give the challenge. Impact depends on the specific challenge + */ + setChallengeValue(challenge: Challenges, value: number) { + if (!this.isChallenge) { + this.isChallenge = true; + this.challenges = allChallenges.map(c => copyChallenge(c)); + } + this.challenges.filter((chal: Challenge) => chal.id === challenge).map((chal: Challenge) => (chal.value = value)); + } + /** * Helper function to see if a GameMode has a specific challenge type * @param challenge the Challenges it looks for @@ -173,7 +186,7 @@ export class GameMode implements GameModeConfig { if (w < waveIndex) { globalScene.executeWithSeedOffset(() => { const waveTrainerChance = arena.getTrainerChance(); - if (!Utils.randSeedInt(waveTrainerChance)) { + if (!randSeedInt(waveTrainerChance)) { allowTrainerBattle = false; } }, w); @@ -183,7 +196,7 @@ export class GameMode implements GameModeConfig { } } } - return Boolean(allowTrainerBattle && trainerChance && !Utils.randSeedInt(trainerChance)); + return Boolean(allowTrainerBattle && trainerChance && !randSeedInt(trainerChance)); } return false; } @@ -209,7 +222,7 @@ export class GameMode implements GameModeConfig { s.speciesId !== Species.ETERNATUS && s.speciesId !== Species.ARCEUS, ); - return Utils.randSeedItem(allFinalBossSpecies); + return randSeedItem(allFinalBossSpecies); } return null; @@ -285,7 +298,7 @@ export class GameMode implements GameModeConfig { const dummyConfig = new FixedBattleConfig(); return ( this.battleConfig.hasOwnProperty(waveIndex) || - applyChallenges(this, ChallengeType.FIXED_BATTLES, waveIndex, dummyConfig) + applyChallenges(ChallengeType.FIXED_BATTLES, waveIndex, dummyConfig) ); } @@ -296,7 +309,7 @@ export class GameMode implements GameModeConfig { */ getFixedBattle(waveIndex: number): FixedBattleConfig { const challengeConfig = new FixedBattleConfig(); - if (applyChallenges(this, ChallengeType.FIXED_BATTLES, waveIndex, challengeConfig)) { + if (applyChallenges(ChallengeType.FIXED_BATTLES, waveIndex, challengeConfig)) { return challengeConfig; } return this.battleConfig[waveIndex]; diff --git a/src/global-event-manager.ts b/src/global-event-manager.ts new file mode 100644 index 00000000000..3df3d17b5e9 --- /dev/null +++ b/src/global-event-manager.ts @@ -0,0 +1,3 @@ +import { TimedEventManager } from "./timed-event-manager"; + +export const timedEventManager = new TimedEventManager(); diff --git a/src/inputs-controller.ts b/src/inputs-controller.ts index fb4555084ee..f92ce3957ab 100644 --- a/src/inputs-controller.ts +++ b/src/inputs-controller.ts @@ -1,6 +1,5 @@ import Phaser from "phaser"; -import * as Utils from "./utils"; -import { deepCopy } from "./utils"; +import { deepCopy, getEnumValues } from "#app/utils"; import pad_generic from "./configs/inputs/pad_generic"; import pad_unlicensedSNES from "./configs/inputs/pad_unlicensedSNES"; import pad_xbox360 from "./configs/inputs/pad_xbox360"; @@ -102,7 +101,7 @@ export class InputsController { [Device.KEYBOARD]: "default", }; - for (const b of Utils.getEnumValues(Button)) { + for (const b of getEnumValues(Button)) { this.interactions[b] = { pressTime: false, isPressed: false, diff --git a/src/loading-scene.ts b/src/loading-scene.ts index 295dc318db4..b45cf64ff56 100644 --- a/src/loading-scene.ts +++ b/src/loading-scene.ts @@ -4,7 +4,7 @@ import CacheBustedLoaderPlugin from "#app/plugins/cache-busted-loader-plugin"; import { SceneBase } from "#app/scene-base"; import { WindowVariant, getWindowVariantSuffix } from "#app/ui/ui-theme"; import { isMobile } from "#app/touch-controls"; -import * as Utils from "#app/utils"; +import { localPing, getEnumValues, hasAllLocalizedSprites, getEnumKeys } from "#app/utils"; import { initPokemonPrevolutions, initPokemonStarters } from "#app/data/balance/pokemon-evolutions"; import { initBiomes } from "#app/data/balance/biomes"; import { initEggMoves } from "#app/data/balance/egg-moves"; @@ -20,6 +20,7 @@ import { initStatsKeys } from "#app/ui/game-stats-ui-handler"; import { initVouchers } from "#app/system/voucher"; import { Biome } from "#enums/biome"; import { initMysteryEncounters } from "#app/data/mystery-encounters/mystery-encounters"; +import { timedEventManager } from "./global-event-manager"; export class LoadingScene extends SceneBase { public static readonly KEY = "loading"; @@ -33,7 +34,7 @@ export class LoadingScene extends SceneBase { } preload() { - Utils.localPing(); + localPing(); this.load["manifest"] = this.game["manifest"]; this.loadImage("loading_bg", "arenas"); @@ -48,7 +49,7 @@ export class LoadingScene extends SceneBase { this.loadImage("friendship_overlay", "ui"); this.loadImage("cursor", "ui"); this.loadImage("cursor_reverse", "ui"); - for (const wv of Utils.getEnumValues(WindowVariant)) { + for (const wv of getEnumValues(WindowVariant)) { for (let w = 1; w <= 5; w++) { this.loadImage(`window_${w}${getWindowVariantSuffix(wv)}`, "ui/windows"); } @@ -176,7 +177,7 @@ export class LoadingScene extends SceneBase { this.loadImage("default_bg", "arenas"); // Load arena images - Utils.getEnumValues(Biome).map(bt => { + getEnumValues(Biome).map(bt => { const btKey = Biome[bt].toLowerCase(); const isBaseAnimated = btKey === "end"; const baseAKey = `${btKey}_a`; @@ -238,7 +239,7 @@ export class LoadingScene extends SceneBase { // Get current lang and load the types atlas for it. English will only load types while all other languages will load types and types_ const lang = i18next.resolvedLanguage; if (lang !== "en") { - if (Utils.hasAllLocalizedSprites(lang)) { + if (hasAllLocalizedSprites(lang)) { this.loadAtlas(`statuses_${lang}`, ""); this.loadAtlas(`types_${lang}`, ""); } else { @@ -250,11 +251,13 @@ export class LoadingScene extends SceneBase { this.loadAtlas("statuses", ""); this.loadAtlas("types", ""); } - const availableLangs = ["en", "de", "it", "fr", "ja", "ko", "es-ES", "pt-BR", "zh-CN"]; - if (lang && availableLangs.includes(lang)) { - this.loadImage(`pkmnday2025event-${lang}`, "events"); - } else { - this.loadImage("pkmnday2025event-en", "events"); + if (timedEventManager.activeEventHasBanner()) { + const availableLangs = timedEventManager.getEventBannerLangs(); + if (lang && availableLangs.includes(lang)) { + this.loadImage(`${timedEventManager.getEventBannerFilename()}-${lang}`, "events"); + } else { + this.loadImage(`${timedEventManager.getEventBannerFilename()}-en`, "events"); + } } this.loadAtlas("statuses", ""); @@ -265,7 +268,7 @@ export class LoadingScene extends SceneBase { this.loadAtlas("egg_icons", "egg"); this.loadAtlas("egg_shard", "egg"); this.loadAtlas("egg_lightrays", "egg"); - for (const gt of Utils.getEnumKeys(GachaType)) { + for (const gt of getEnumKeys(GachaType)) { const key = gt.toLowerCase(); this.loadImage(`gacha_${key}`, "egg"); this.loadAtlas(`gacha_underlay_${key}`, "egg"); diff --git a/src/messages.ts b/src/messages.ts index e35b48f7226..c29151a98b3 100644 --- a/src/messages.ts +++ b/src/messages.ts @@ -6,9 +6,10 @@ import i18next from "i18next"; /** * Retrieves the Pokemon's name, potentially with an affix indicating its role (wild or foe) in the current battle context, translated * @param pokemon {@linkcode Pokemon} name and battle context will be retrieved from this instance + * @param {boolean} useIllusion - Whether we want the name of the illusion or not. Default value : true * @returns {string} ex: "Wild Gengar", "Ectoplasma sauvage" */ -export function getPokemonNameWithAffix(pokemon: Pokemon | undefined): string { +export function getPokemonNameWithAffix(pokemon: Pokemon | undefined, useIllusion = true): string { if (!pokemon) { return "Missigno"; } @@ -18,19 +19,17 @@ export function getPokemonNameWithAffix(pokemon: Pokemon | undefined): string { return !pokemon.isPlayer() ? pokemon.hasTrainer() ? i18next.t("battle:foePokemonWithAffix", { - pokemonName: pokemon.getNameToRender(), + pokemonName: pokemon.getNameToRender(useIllusion), }) : i18next.t("battle:wildPokemonWithAffix", { - pokemonName: pokemon.getNameToRender(), + pokemonName: pokemon.getNameToRender(useIllusion), }) - : pokemon.getNameToRender(); + : pokemon.getNameToRender(useIllusion); case BattleSpec.FINAL_BOSS: return !pokemon.isPlayer() - ? i18next.t("battle:foePokemonWithAffix", { - pokemonName: pokemon.getNameToRender(), - }) - : pokemon.getNameToRender(); + ? i18next.t("battle:foePokemonWithAffix", { pokemonName: pokemon.getNameToRender(useIllusion) }) + : pokemon.getNameToRender(useIllusion); default: - return pokemon.getNameToRender(); + return pokemon.getNameToRender(useIllusion); } } diff --git a/src/modifier/modifier-type.ts b/src/modifier/modifier-type.ts index 3d2e67b0dc3..8feb60c7778 100644 --- a/src/modifier/modifier-type.ts +++ b/src/modifier/modifier-type.ts @@ -97,6 +97,7 @@ import { type PersistentModifier, TempExtraModifierModifier, CriticalCatchChanceBoosterModifier, + FieldEffectModifier, } from "#app/modifier/modifier"; import { ModifierTier } from "#app/modifier/modifier-tier"; import Overrides from "#app/overrides"; @@ -126,6 +127,7 @@ import type { PermanentStat, TempBattleStat } from "#enums/stat"; import { getStatKey, Stat, TEMP_BATTLE_STATS } from "#enums/stat"; import { StatusEffect } from "#enums/status-effect"; import i18next from "i18next"; +import { timedEventManager } from "#app/global-event-manager"; const outputModifierData = false; const useMaxWeightForOutput = false; @@ -627,7 +629,7 @@ export class PokemonAllMovePpRestoreModifierType extends PokemonModifierType { iconImage, (_type, args) => new PokemonAllMovePpRestoreModifier(this, (args[0] as PlayerPokemon).id, this.restorePoints), (pokemon: PlayerPokemon) => { - if (!pokemon.getMoveset().filter(m => m?.ppUsed).length) { + if (!pokemon.getMoveset().filter(m => m.ppUsed).length) { return PartyUiHandler.NoEffectMessage; } return null; @@ -1170,7 +1172,7 @@ export class TmModifierType extends PokemonModifierType { (pokemon: PlayerPokemon) => { if ( pokemon.compatibleTms.indexOf(moveId) === -1 || - pokemon.getMoveset().filter(m => m?.moveId === moveId).length + pokemon.getMoveset().filter(m => m.moveId === moveId).length ) { return PartyUiHandler.NoEffectMessage; } @@ -1333,7 +1335,7 @@ class AttackTypeBoosterModifierTypeGenerator extends ModifierTypeGenerator { const attackMoveTypes = party.flatMap(p => p .getMoveset() - .map(m => m?.getMove()) + .map(m => m.getMove()) .filter(m => m instanceof AttackMove) .map(m => m.type), ); @@ -1468,7 +1470,7 @@ class SpeciesStatBoosterModifierTypeGenerator extends ModifierTypeGenerator { const speciesId = p.getSpeciesForm(true).speciesId; const fusionSpeciesId = p.isFusion() ? p.getFusionSpeciesForm(true).speciesId : null; // TODO: Use commented boolean when Fling is implemented - const hasFling = false; /* p.getMoveset(true).some(m => m?.moveId === Moves.FLING) */ + const hasFling = false; /* p.getMoveset(true).some(m => m.moveId === Moves.FLING) */ for (const i in values) { const checkedSpecies = values[i].species; @@ -1529,7 +1531,7 @@ class TmModifierTypeGenerator extends ModifierTypeGenerator { const partyMemberCompatibleTms = party.map(p => { const previousLevelMoves = p.getLearnableLevelMoves(); return (p as PlayerPokemon).compatibleTms.filter( - tm => !p.moveset.find(m => m?.moveId === tm) && !previousLevelMoves.find(lm => lm === tm), + tm => !p.moveset.find(m => m.moveId === tm) && !previousLevelMoves.find(lm => lm === tm), ); }); const tierUniqueCompatibleTms = partyMemberCompatibleTms @@ -1998,6 +2000,13 @@ export const modifierTypes = { return new PokemonNatureChangeModifierType(randSeedInt(getEnumValues(Nature).length) as Nature); }), + MYSTICAL_ROCK: () => + new PokemonHeldItemModifierType( + "modifierType:ModifierType.MYSTICAL_ROCK", + "mystical_rock", + (type, args) => new FieldEffectModifier(type, (args[0] as Pokemon).id), + ), + TERA_SHARD: () => new ModifierTypeGenerator((party: Pokemon[], pregenArgs?: any[]) => { if (pregenArgs && pregenArgs.length === 1 && pregenArgs[0] in PokemonType) { @@ -2433,7 +2442,7 @@ const modifierPool: ModifierPool = { !p.getHeldItems().some(m => m instanceof BerryModifier && m.berryType === BerryType.LEPPA) && p .getMoveset() - .filter(m => m?.ppUsed && m.getMovePp() - m.ppUsed <= 5 && m.ppUsed > Math.floor(m.getMovePp() / 2)) + .filter(m => m.ppUsed && m.getMovePp() - m.ppUsed <= 5 && m.ppUsed > Math.floor(m.getMovePp() / 2)) .length, ).length, 3, @@ -2452,7 +2461,7 @@ const modifierPool: ModifierPool = { !p.getHeldItems().some(m => m instanceof BerryModifier && m.berryType === BerryType.LEPPA) && p .getMoveset() - .filter(m => m?.ppUsed && m.getMovePp() - m.ppUsed <= 5 && m.ppUsed > Math.floor(m.getMovePp() / 2)) + .filter(m => m.ppUsed && m.getMovePp() - m.ppUsed <= 5 && m.ppUsed > Math.floor(m.getMovePp() / 2)) .length, ).length, 3, @@ -2574,7 +2583,7 @@ const modifierPool: ModifierPool = { !p.getHeldItems().some(m => m instanceof BerryModifier && m.berryType === BerryType.LEPPA) && p .getMoveset() - .filter(m => m?.ppUsed && m.getMovePp() - m.ppUsed <= 5 && m.ppUsed > Math.floor(m.getMovePp() / 2)) + .filter(m => m.ppUsed && m.getMovePp() - m.ppUsed <= 5 && m.ppUsed > Math.floor(m.getMovePp() / 2)) .length, ).length, 3, @@ -2593,7 +2602,7 @@ const modifierPool: ModifierPool = { !p.getHeldItems().some(m => m instanceof BerryModifier && m.berryType === BerryType.LEPPA) && p .getMoveset() - .filter(m => m?.ppUsed && m.getMovePp() - m.ppUsed <= 5 && m.ppUsed > Math.floor(m.getMovePp() / 2)) + .filter(m => m.ppUsed && m.getMovePp() - m.ppUsed <= 5 && m.ppUsed > Math.floor(m.getMovePp() / 2)) .length, ).length, 3, @@ -2647,7 +2656,7 @@ const modifierPool: ModifierPool = { if (globalScene.gameMode.isSplicedOnly) { return 4; } - if (globalScene.gameMode.isClassic && globalScene.eventManager.areFusionsBoosted()) { + if (globalScene.gameMode.isClassic && timedEventManager.areFusionsBoosted()) { return 2; } } @@ -2810,6 +2819,58 @@ const modifierPool: ModifierPool = { }, 10, ), + new WeightedModifierType( + modifierTypes.MYSTICAL_ROCK, + (party: Pokemon[]) => { + return party.some(p => { + let isHoldingMax = false; + for (const i of p.getHeldItems()) { + if (i.type.id === "MYSTICAL_ROCK") { + isHoldingMax = i.getStackCount() === i.getMaxStackCount(); + break; + } + } + + if (!isHoldingMax) { + const moveset = p.getMoveset(true).map(m => m.moveId); + + const hasAbility = [ + Abilities.DROUGHT, + Abilities.ORICHALCUM_PULSE, + Abilities.DRIZZLE, + Abilities.SAND_STREAM, + Abilities.SAND_SPIT, + Abilities.SNOW_WARNING, + Abilities.ELECTRIC_SURGE, + Abilities.HADRON_ENGINE, + Abilities.PSYCHIC_SURGE, + Abilities.GRASSY_SURGE, + Abilities.SEED_SOWER, + Abilities.MISTY_SURGE, + ].some(a => p.hasAbility(a, false, true)); + + const hasMoves = [ + Moves.SUNNY_DAY, + Moves.RAIN_DANCE, + Moves.SANDSTORM, + Moves.SNOWSCAPE, + Moves.HAIL, + Moves.CHILLY_RECEPTION, + Moves.ELECTRIC_TERRAIN, + Moves.PSYCHIC_TERRAIN, + Moves.GRASSY_TERRAIN, + Moves.MISTY_TERRAIN, + ].some(m => moveset.includes(m)); + + return hasAbility || hasMoves; + } + return false; + }) + ? 10 + : 0; + }, + 10, + ), new WeightedModifierType(modifierTypes.REVIVER_SEED, 4), new WeightedModifierType(modifierTypes.CANDY_JAR, skipInLastClassicWaveOrDefault(5)), new WeightedModifierType(modifierTypes.ATTACK_TYPE_BOOSTER, 9), @@ -2890,7 +2951,7 @@ const modifierPool: ModifierPool = { new WeightedModifierType( modifierTypes.DNA_SPLICERS, (party: Pokemon[]) => - !(globalScene.gameMode.isClassic && globalScene.eventManager.areFusionsBoosted()) && + !(globalScene.gameMode.isClassic && timedEventManager.areFusionsBoosted()) && !globalScene.gameMode.isSplicedOnly && party.filter(p => !p.fusionSpecies).length > 1 ? 24 @@ -3654,7 +3715,7 @@ export function getPartyLuckValue(party: Pokemon[]): number { ); return DailyLuck.value; } - const eventSpecies = globalScene.eventManager.getEventLuckBoostedSpecies(); + const eventSpecies = timedEventManager.getEventLuckBoostedSpecies(); const luck = Phaser.Math.Clamp( party .map(p => (p.isAllowedInBattle() ? p.getLuck() + (eventSpecies.includes(p.species.speciesId) ? 1 : 0) : 0)) @@ -3662,7 +3723,7 @@ export function getPartyLuckValue(party: Pokemon[]): number { 0, 14, ); - return Math.min(globalScene.eventManager.getEventLuckBoost() + (luck ?? 0), 14); + return Math.min(timedEventManager.getEventLuckBoost() + (luck ?? 0), 14); } export function getLuckString(luckValue: number): string { diff --git a/src/modifier/modifier.ts b/src/modifier/modifier.ts index 4c59bfe1ef1..80f14ba22ce 100644 --- a/src/modifier/modifier.ts +++ b/src/modifier/modifier.ts @@ -2014,6 +2014,38 @@ export class ResetNegativeStatStageModifier extends PokemonHeldItemModifier { } } +/** + * Modifier used for held items, namely Mystical Rock, that extend the + * duration of weather and terrain effects. + * @extends PokemonHeldItemModifier + * @see {@linkcode apply} + */ +export class FieldEffectModifier extends PokemonHeldItemModifier { + /** + * Provides two more turns per stack to any weather or terrain effect caused + * by the holder. + * @param pokemon {@linkcode Pokemon} that holds the held item + * @param fieldDuration {@linkcode NumberHolder} that stores the current field effect duration + * @returns `true` if the field effect extension was applied successfully + */ + override apply(_pokemon: Pokemon, fieldDuration: NumberHolder): boolean { + fieldDuration.value += 2 * this.stackCount; + return true; + } + + override matchType(modifier: Modifier): boolean { + return modifier instanceof FieldEffectModifier; + } + + override clone(): FieldEffectModifier { + return new FieldEffectModifier(this.type, this.pokemonId, this.stackCount); + } + + override getMaxHeldItemCount(_pokemon?: Pokemon): number { + return 2; + } +} + export abstract class ConsumablePokemonModifier extends ConsumableModifier { public pokemonId: number; @@ -2702,7 +2734,7 @@ export class PokemonMoveAccuracyBoosterModifier extends PokemonHeldItemModifier * @returns always `true` */ override apply(_pokemon: Pokemon, moveAccuracy: NumberHolder): boolean { - moveAccuracy.value = Math.min(moveAccuracy.value + this.accuracyAmount * this.getStackCount(), 100); + moveAccuracy.value = moveAccuracy.value + this.accuracyAmount * this.getStackCount(); return true; } diff --git a/src/overrides.ts b/src/overrides.ts index 882a634ff90..21c72cd7b98 100644 --- a/src/overrides.ts +++ b/src/overrides.ts @@ -2,7 +2,7 @@ import { type PokeballCounts } from "#app/battle-scene"; import { EvolutionItem } from "#app/data/balance/pokemon-evolutions"; import { Gender } from "#app/data/gender"; import { FormChangeItem } from "#app/data/pokemon-forms"; -import { Variant } from "#app/data/variant"; +import { Variant } from "#app/sprites/variant"; import { type ModifierOverride } from "#app/modifier/modifier-type"; import { Unlockables } from "#app/system/unlockables"; import { Abilities } from "#enums/abilities"; @@ -254,6 +254,11 @@ class DefaultOverrides { * Note that, for all items in the array, `count` is not used. */ readonly ITEM_REWARD_OVERRIDE: ModifierOverride[] = []; + + /** + * If `true`, disable all non-scripted opponent trainer encounters. + */ + readonly DISABLE_STANDARD_TRAINERS_OVERRIDE: boolean = false; } export const defaultOverrides = new DefaultOverrides(); diff --git a/src/phases/add-enemy-buff-modifier-phase.ts b/src/phases/add-enemy-buff-modifier-phase.ts index 7d91e64382a..16ed78e6d0d 100644 --- a/src/phases/add-enemy-buff-modifier-phase.ts +++ b/src/phases/add-enemy-buff-modifier-phase.ts @@ -9,10 +9,6 @@ import { Phase } from "#app/phase"; import { globalScene } from "#app/global-scene"; export class AddEnemyBuffModifierPhase extends Phase { - constructor() { - super(); - } - start() { super.start(); diff --git a/src/phases/attempt-capture-phase.ts b/src/phases/attempt-capture-phase.ts index 6b905c2a07f..78021da4066 100644 --- a/src/phases/attempt-capture-phase.ts +++ b/src/phases/attempt-capture-phase.ts @@ -24,6 +24,7 @@ import type { PokeballType } from "#enums/pokeball"; import { StatusEffect } from "#enums/status-effect"; import i18next from "i18next"; import { globalScene } from "#app/global-scene"; +import { Gender } from "#app/data/gender"; export class AttemptCapturePhase extends PokemonPhase { private pokeballType: PokeballType; @@ -321,6 +322,19 @@ export class AttemptCapturePhase extends PokemonPhase { false, ); }, + () => { + const attributes = { + shiny: pokemon.shiny, + variant: pokemon.variant, + form: pokemon.formIndex, + female: pokemon.gender === Gender.FEMALE, + }; + globalScene.ui.setOverlayMode(Mode.POKEDEX_PAGE, pokemon.species, attributes, null, null, () => { + globalScene.ui.setMode(Mode.MESSAGE).then(() => { + promptRelease(); + }); + }); + }, () => { globalScene.ui.setMode( Mode.PARTY, diff --git a/src/phases/attempt-run-phase.ts b/src/phases/attempt-run-phase.ts index dab5b8789da..e5691f5fb8e 100644 --- a/src/phases/attempt-run-phase.ts +++ b/src/phases/attempt-run-phase.ts @@ -1,10 +1,10 @@ import { applyAbAttrs, applyPreLeaveFieldAbAttrs, PreLeaveFieldAbAttr, RunSuccessAbAttr } from "#app/data/ability"; -import { Stat } from "#app/enums/stat"; -import { StatusEffect } from "#app/enums/status-effect"; +import { Stat } from "#enums/stat"; +import { StatusEffect } from "#enums/status-effect"; import type { PlayerPokemon, EnemyPokemon } from "#app/field/pokemon"; import type Pokemon from "#app/field/pokemon"; import i18next from "i18next"; -import * as Utils from "#app/utils"; +import { NumberHolder } from "#app/utils"; import { BattleEndPhase } from "./battle-end-phase"; import { NewBattlePhase } from "./new-battle-phase"; import { PokemonPhase } from "./pokemon-phase"; @@ -22,7 +22,7 @@ export class AttemptRunPhase extends PokemonPhase { const playerPokemon = this.getPokemon(); - const escapeChance = new Utils.NumberHolder(0); + const escapeChance = new NumberHolder(0); this.attemptRunAway(playerField, enemyField, escapeChance); @@ -63,7 +63,7 @@ export class AttemptRunPhase extends PokemonPhase { this.end(); } - attemptRunAway(playerField: PlayerPokemon[], enemyField: EnemyPokemon[], escapeChance: Utils.NumberHolder) { + attemptRunAway(playerField: PlayerPokemon[], enemyField: EnemyPokemon[], escapeChance: NumberHolder) { /** Sum of the speed of all enemy pokemon on the field */ const enemySpeed = enemyField.reduce( (total: number, enemyPokemon: Pokemon) => total + enemyPokemon.getStat(Stat.SPD), diff --git a/src/phases/battle-end-phase.ts b/src/phases/battle-end-phase.ts index a7158264ab7..0d831c65b52 100644 --- a/src/phases/battle-end-phase.ts +++ b/src/phases/battle-end-phase.ts @@ -17,6 +17,25 @@ export class BattleEndPhase extends BattlePhase { start() { super.start(); + // cull any extra `BattleEnd` phases from the queue. + globalScene.phaseQueue = globalScene.phaseQueue.filter(phase => { + if (phase instanceof BattleEndPhase) { + this.isVictory ||= phase.isVictory; + return false; + } + return true; + }); + // `phaseQueuePrepend` is private, so we have to use this inefficient loop. + while ( + globalScene.tryRemoveUnshiftedPhase(phase => { + if (phase instanceof BattleEndPhase) { + this.isVictory ||= phase.isVictory; + return true; + } + return false; + }) + ) {} + globalScene.gameData.gameStats.battles++; if ( globalScene.gameMode.isEndless && @@ -54,6 +73,13 @@ export class BattleEndPhase extends BattlePhase { } globalScene.clearEnemyHeldItemModifiers(); + for (const p of globalScene.getEnemyParty()) { + try { + p.destroy(); + } catch { + console.warn("Unable to destroy stale pokemon object in BattleEndPhase:", p); + } + } const lapsingModifiers = globalScene.findModifiers( m => m instanceof LapsingPersistentModifier || m instanceof LapsingPokemonHeldItemModifier, diff --git a/src/phases/battle-phase.ts b/src/phases/battle-phase.ts index 3fc2b9c0467..d70b3909639 100644 --- a/src/phases/battle-phase.ts +++ b/src/phases/battle-phase.ts @@ -1,15 +1,15 @@ import { globalScene } from "#app/global-scene"; -import { TrainerSlot } from "#app/data/trainer-config"; +import { TrainerSlot } from "#enums/trainer-slot"; import { Phase } from "#app/phase"; export class BattlePhase extends Phase { - constructor() { - super(); - } - showEnemyTrainer(trainerSlot: TrainerSlot = TrainerSlot.NONE): void { - const sprites = globalScene.currentBattle.trainer?.getSprites()!; // TODO: is this bang correct? - const tintSprites = globalScene.currentBattle.trainer?.getTintSprites()!; // TODO: is this bang correct? + if (!globalScene.currentBattle.trainer) { + console.warn("Enemy trainer is missing!"); + return; + } + const sprites = globalScene.currentBattle.trainer.getSprites(); + const tintSprites = globalScene.currentBattle.trainer.getTintSprites(); for (let i = 0; i < sprites.length; i++) { const visible = !trainerSlot || !i === (trainerSlot === TrainerSlot.TRAINER) || sprites.length < 2; [sprites[i], tintSprites[i]].map(sprite => { diff --git a/src/phases/berry-phase.ts b/src/phases/berry-phase.ts index 0048f8cd2f2..e5614739903 100644 --- a/src/phases/berry-phase.ts +++ b/src/phases/berry-phase.ts @@ -4,7 +4,7 @@ import { BerryUsedEvent } from "#app/events/battle-scene"; import { getPokemonNameWithAffix } from "#app/messages"; import { BerryModifier } from "#app/modifier/modifier"; import i18next from "i18next"; -import * as Utils from "#app/utils"; +import { BooleanHolder } from "#app/utils"; import { FieldPhase } from "./field-phase"; import { CommonAnimPhase } from "./common-anim-phase"; import { globalScene } from "#app/global-scene"; @@ -20,7 +20,7 @@ export class BerryPhase extends FieldPhase { }, pokemon.isPlayer()); if (hasUsableBerry) { - const cancelled = new Utils.BooleanHolder(false); + const cancelled = new BooleanHolder(false); pokemon.getOpponents().map(opp => applyAbAttrs(PreventBerryUseAbAttr, opp, cancelled)); if (cancelled.value) { @@ -44,7 +44,7 @@ export class BerryPhase extends FieldPhase { globalScene.updateModifiers(pokemon.isPlayer()); - applyAbAttrs(HealFromBerryUseAbAttr, pokemon, new Utils.BooleanHolder(false)); + applyAbAttrs(HealFromBerryUseAbAttr, pokemon, new BooleanHolder(false)); } } }); diff --git a/src/phases/command-phase.ts b/src/phases/command-phase.ts index 055d52e7a8b..8691ac453ca 100644 --- a/src/phases/command-phase.ts +++ b/src/phases/command-phase.ts @@ -104,15 +104,14 @@ export class CommandPhase extends FieldPhase { moveQueue[0] && moveQueue[0].move && !moveQueue[0].virtual && - (!playerPokemon.getMoveset().find(m => m?.moveId === moveQueue[0].move) || + (!playerPokemon.getMoveset().find(m => m.moveId === moveQueue[0].move) || !playerPokemon .getMoveset() - [playerPokemon.getMoveset().findIndex(m => m?.moveId === moveQueue[0].move)]!.isUsable( + [playerPokemon.getMoveset().findIndex(m => m.moveId === moveQueue[0].move)].isUsable( playerPokemon, moveQueue[0].ignorePP, )) ) { - // TODO: is the bang correct? moveQueue.shift(); } @@ -121,12 +120,11 @@ export class CommandPhase extends FieldPhase { if (!queuedMove.move) { this.handleCommand(Command.FIGHT, -1); } else { - const moveIndex = playerPokemon.getMoveset().findIndex(m => m?.moveId === queuedMove.move); + const moveIndex = playerPokemon.getMoveset().findIndex(m => m.moveId === queuedMove.move); if ( - (moveIndex > -1 && playerPokemon.getMoveset()[moveIndex]!.isUsable(playerPokemon, queuedMove.ignorePP)) || + (moveIndex > -1 && playerPokemon.getMoveset()[moveIndex].isUsable(playerPokemon, queuedMove.ignorePP)) || queuedMove.virtual ) { - // TODO: is the bang correct? this.handleCommand(Command.FIGHT, moveIndex, queuedMove.ignorePP, queuedMove); } else { globalScene.ui.setMode(Mode.COMMAND, this.fieldIndex); @@ -157,7 +155,7 @@ export class CommandPhase extends FieldPhase { if ( cursor === -1 || playerPokemon.trySelectMove(cursor, args[0] as boolean) || - (useStruggle = cursor > -1 && !playerPokemon.getMoveset().filter(m => m?.isUsable(playerPokemon)).length) + (useStruggle = cursor > -1 && !playerPokemon.getMoveset().filter(m => m.isUsable(playerPokemon)).length) ) { let moveId: Moves; if (useStruggle) { @@ -165,7 +163,7 @@ export class CommandPhase extends FieldPhase { } else if (turnMove !== undefined) { moveId = turnMove.move; } else if (cursor > -1) { - moveId = playerPokemon.getMoveset()[cursor]!.moveId; + moveId = playerPokemon.getMoveset()[cursor].moveId; } else { moveId = Moves.NONE; } @@ -195,10 +193,14 @@ export class CommandPhase extends FieldPhase { if (moveTargets.targets.length > 1 && moveTargets.multiple) { globalScene.unshiftPhase(new SelectTargetPhase(this.fieldIndex)); } - if (moveTargets.targets.length <= 1 || moveTargets.multiple) { - turnCommand.move!.targets = moveTargets.targets; //TODO: is the bang correct here? - } else if (playerPokemon.getTag(BattlerTagType.CHARGING) && playerPokemon.getMoveQueue().length >= 1) { - turnCommand.move!.targets = playerPokemon.getMoveQueue()[0].targets; //TODO: is the bang correct here? + if (turnCommand.move && (moveTargets.targets.length <= 1 || moveTargets.multiple)) { + turnCommand.move.targets = moveTargets.targets; + } else if ( + turnCommand.move && + playerPokemon.getTag(BattlerTagType.CHARGING) && + playerPokemon.getMoveQueue().length >= 1 + ) { + turnCommand.move.targets = playerPokemon.getMoveQueue()[0].targets; } else { globalScene.unshiftPhase(new SelectTargetPhase(this.fieldIndex)); } @@ -206,7 +208,7 @@ export class CommandPhase extends FieldPhase { globalScene.currentBattle.turnCommands[this.fieldIndex] = turnCommand; success = true; } else if (cursor < playerPokemon.getMoveset().length) { - const move = playerPokemon.getMoveset()[cursor]!; //TODO: is this bang correct? + const move = playerPokemon.getMoveset()[cursor]; globalScene.ui.setMode(Mode.MESSAGE); // Decides between a Disabled, Not Implemented, or No PP translation message diff --git a/src/phases/common-anim-phase.ts b/src/phases/common-anim-phase.ts index d32e93ea6aa..5be5e112389 100644 --- a/src/phases/common-anim-phase.ts +++ b/src/phases/common-anim-phase.ts @@ -6,13 +6,18 @@ import { PokemonPhase } from "./pokemon-phase"; export class CommonAnimPhase extends PokemonPhase { private anim: CommonAnim | null; - private targetIndex: number | undefined; + private targetIndex?: BattlerIndex; private playOnEmptyField: boolean; - constructor(battlerIndex?: BattlerIndex, targetIndex?: BattlerIndex, anim?: CommonAnim, playOnEmptyField = false) { + constructor( + battlerIndex?: BattlerIndex, + targetIndex?: BattlerIndex, + anim: CommonAnim | null = null, + playOnEmptyField = false, + ) { super(battlerIndex); - this.anim = anim!; // TODO: is this bang correct? + this.anim = anim; this.targetIndex = targetIndex; this.playOnEmptyField = playOnEmptyField; } diff --git a/src/phases/damage-anim-phase.ts b/src/phases/damage-anim-phase.ts index 703cd3d160e..696a2e55b6f 100644 --- a/src/phases/damage-anim-phase.ts +++ b/src/phases/damage-anim-phase.ts @@ -10,11 +10,16 @@ export class DamageAnimPhase extends PokemonPhase { private damageResult: DamageResult; private critical: boolean; - constructor(battlerIndex: BattlerIndex, amount: number, damageResult?: DamageResult, critical = false) { + constructor( + battlerIndex: BattlerIndex, + amount: number, + damageResult: DamageResult = HitResult.EFFECTIVE, + critical = false, + ) { super(battlerIndex); this.amount = amount; - this.damageResult = damageResult || HitResult.EFFECTIVE; + this.damageResult = damageResult; this.critical = critical; } diff --git a/src/phases/egg-hatch-phase.ts b/src/phases/egg-hatch-phase.ts index 49a408e8699..07eeeb0f8ae 100644 --- a/src/phases/egg-hatch-phase.ts +++ b/src/phases/egg-hatch-phase.ts @@ -11,7 +11,7 @@ import PokemonInfoContainer from "#app/ui/pokemon-info-container"; import { Mode } from "#app/ui/ui"; import i18next from "i18next"; import SoundFade from "phaser3-rex-plugins/plugins/soundfade"; -import * as Utils from "#app/utils"; +import { fixedInt, getFrameMs, randInt } from "#app/utils"; import type { EggLapsePhase } from "./egg-lapse-phase"; import type { EggHatchData } from "#app/data/egg-hatch-data"; import { doShinySparkleAnim } from "#app/field/anims"; @@ -306,17 +306,17 @@ export class EggHatchPhase extends Phase { this.canSkip = false; this.hatched = true; if (this.evolutionBgm) { - SoundFade.fadeOut(globalScene, this.evolutionBgm, Utils.fixedInt(100)); + SoundFade.fadeOut(globalScene, this.evolutionBgm, fixedInt(100)); } for (let e = 0; e < 5; e++) { - globalScene.time.delayedCall(Utils.fixedInt(375 * e), () => + globalScene.time.delayedCall(fixedInt(375 * e), () => globalScene.playSound("se/egg_hatch", { volume: 1 - e * 0.2 }), ); } this.eggLightraysOverlay.setVisible(true); this.eggLightraysOverlay.play("egg_lightrays"); globalScene.tweens.add({ - duration: Utils.fixedInt(125), + duration: fixedInt(125), targets: this.eggHatchOverlay, alpha: 1, ease: "Cubic.easeIn", @@ -325,7 +325,7 @@ export class EggHatchPhase extends Phase { this.canSkip = true; }, }); - globalScene.time.delayedCall(Utils.fixedInt(1500), () => { + globalScene.time.delayedCall(fixedInt(1500), () => { this.canSkip = false; if (!this.skipped) { this.doReveal(); @@ -363,46 +363,43 @@ export class EggHatchPhase extends Phase { this.pokemonSprite.setPipelineData("shiny", this.pokemon.shiny); this.pokemonSprite.setPipelineData("variant", this.pokemon.variant); this.pokemonSprite.setVisible(true); - globalScene.time.delayedCall(Utils.fixedInt(250), () => { + globalScene.time.delayedCall(fixedInt(250), () => { this.eggsToHatchCount--; this.eggHatchHandler.eventTarget.dispatchEvent(new EggCountChangedEvent(this.eggsToHatchCount)); this.pokemon.cry(); if (isShiny) { - globalScene.time.delayedCall(Utils.fixedInt(500), () => { + globalScene.time.delayedCall(fixedInt(500), () => { doShinySparkleAnim(this.pokemonShinySparkle, this.pokemon.variant); }); } - globalScene.time.delayedCall( - Utils.fixedInt(!this.skipped ? (!isShiny ? 1250 : 1750) : !isShiny ? 250 : 750), - () => { - this.infoContainer.show(this.pokemon, false, this.skipped ? 2 : 1); + globalScene.time.delayedCall(fixedInt(!this.skipped ? (!isShiny ? 1250 : 1750) : !isShiny ? 250 : 750), () => { + this.infoContainer.show(this.pokemon, false, this.skipped ? 2 : 1); - globalScene.playSoundWithoutBgm("evolution_fanfare"); + globalScene.playSoundWithoutBgm("evolution_fanfare"); - globalScene.ui.showText( - i18next.t("egg:hatchFromTheEgg", { - pokemonName: this.pokemon.species.getExpandedSpeciesName(), - }), - null, - () => { - globalScene.gameData.updateSpeciesDexIvs(this.pokemon.species.speciesId, this.pokemon.ivs); - globalScene.gameData.setPokemonCaught(this.pokemon, true, true).then(() => { - globalScene.gameData.setEggMoveUnlocked(this.pokemon.species, this.eggMoveIndex).then(value => { - this.eggHatchData.setEggMoveUnlocked(value); - globalScene.ui.showText("", 0); - this.end(); - }); + globalScene.ui.showText( + i18next.t("egg:hatchFromTheEgg", { + pokemonName: this.pokemon.species.getExpandedSpeciesName(), + }), + null, + () => { + globalScene.gameData.updateSpeciesDexIvs(this.pokemon.species.speciesId, this.pokemon.ivs); + globalScene.gameData.setPokemonCaught(this.pokemon, true, true).then(() => { + globalScene.gameData.setEggMoveUnlocked(this.pokemon.species, this.eggMoveIndex).then(value => { + this.eggHatchData.setEggMoveUnlocked(value); + globalScene.ui.showText("", 0); + this.end(); }); - }, - null, - true, - 3000, - ); - }, - ); + }); + }, + null, + true, + 3000, + ); + }); }); globalScene.tweens.add({ - duration: Utils.fixedInt(this.skipped ? 500 : 3000), + duration: fixedInt(this.skipped ? 500 : 3000), targets: this.eggHatchOverlay, alpha: 0, ease: "Cubic.easeOut", @@ -427,9 +424,9 @@ export class EggHatchPhase extends Phase { doSpray(intensity: number, offsetY?: number) { globalScene.tweens.addCounter({ repeat: intensity, - duration: Utils.getFrameMs(1), + duration: getFrameMs(1), onRepeat: () => { - this.doSprayParticle(Utils.randInt(8), offsetY || 0); + this.doSprayParticle(randInt(8), offsetY || 0); }, }); } @@ -448,12 +445,12 @@ export class EggHatchPhase extends Phase { let f = 0; let yOffset = 0; - const speed = 3 - Utils.randInt(8); - const amp = 24 + Utils.randInt(32); + const speed = 3 - randInt(8); + const amp = 24 + randInt(32); const particleTimer = globalScene.tweens.addCounter({ repeat: -1, - duration: Utils.getFrameMs(1), + duration: getFrameMs(1), onRepeat: () => { updateParticle(); }, diff --git a/src/phases/encounter-phase.ts b/src/phases/encounter-phase.ts index 5decab522b5..15f3d102e41 100644 --- a/src/phases/encounter-phase.ts +++ b/src/phases/encounter-phase.ts @@ -1,13 +1,13 @@ import { BattlerIndex, BattleType } from "#app/battle"; import { globalScene } from "#app/global-scene"; import { PLAYER_PARTY_MAX_SIZE } from "#app/constants"; -import { applyAbAttrs, SyncEncounterNatureAbAttr } from "#app/data/ability"; +import { applyAbAttrs, SyncEncounterNatureAbAttr, applyPreSummonAbAttrs, PreSummonAbAttr } from "#app/data/ability"; import { initEncounterAnims, loadEncounterAnimAssets } from "#app/data/battle-anims"; import { getCharVariantFromDialogue } from "#app/data/dialogue"; import { getEncounterText } from "#app/data/mystery-encounters/utils/encounter-dialogue-utils"; import { doTrainerExclamation } from "#app/data/mystery-encounters/utils/encounter-phase-utils"; import { getGoldenBugNetSpecies } from "#app/data/mystery-encounters/utils/encounter-pokemon-utils"; -import { TrainerSlot } from "#app/data/trainer-config"; +import { TrainerSlot } from "#enums/trainer-slot"; import { getRandomWeatherType } from "#app/data/weather"; import { EncounterPhaseEvent } from "#app/events/battle-scene"; import type Pokemon from "#app/field/pokemon"; @@ -43,10 +43,10 @@ import { getNatureName } from "#app/data/nature"; export class EncounterPhase extends BattlePhase { private loaded: boolean; - constructor(loaded?: boolean) { + constructor(loaded = false) { super(); - this.loaded = !!loaded; + this.loaded = loaded; } start() { @@ -259,6 +259,9 @@ export class EncounterPhase extends BattlePhase { } if (e < (battle.double ? 2 : 1)) { if (battle.battleType === BattleType.WILD) { + for (const pokemon of globalScene.getField()) { + applyPreSummonAbAttrs(PreSummonAbAttr, pokemon, []); + } globalScene.field.add(enemyPokemon); battle.seenEnemyPartyMemberIds.add(enemyPokemon.id); const playerPokemon = globalScene.getPlayerPokemon(); @@ -545,7 +548,7 @@ export class EncounterPhase extends BattlePhase { const enemyField = globalScene.getEnemyField(); enemyField.forEach((enemyPokemon, e) => { - if (enemyPokemon.isShiny()) { + if (enemyPokemon.isShiny(true)) { globalScene.unshiftPhase(new ShinySparklePhase(BattlerIndex.ENEMY + e)); } /** This sets Eternatus' held item to be untransferrable, preventing it from being stolen */ @@ -684,7 +687,7 @@ export class EncounterPhase extends BattlePhase { */ trySetWeatherIfNewBiome(): void { if (!this.loaded) { - globalScene.arena.trySetWeather(getRandomWeatherType(globalScene.arena), false); + globalScene.arena.trySetWeather(getRandomWeatherType(globalScene.arena)); } } } diff --git a/src/phases/enemy-command-phase.ts b/src/phases/enemy-command-phase.ts index 2e4861aacfc..166b8c1ae2d 100644 --- a/src/phases/enemy-command-phase.ts +++ b/src/phases/enemy-command-phase.ts @@ -39,7 +39,7 @@ export class EnemyCommandPhase extends FieldPhase { if ( battle.double && enemyPokemon.hasAbility(Abilities.COMMANDER) && - enemyPokemon.getAlly().getTag(BattlerTagType.COMMANDED) + enemyPokemon.getAlly()?.getTag(BattlerTagType.COMMANDED) ) { this.skipTurn = true; } diff --git a/src/phases/evolution-phase.ts b/src/phases/evolution-phase.ts index bb283fa8139..203c7542eff 100644 --- a/src/phases/evolution-phase.ts +++ b/src/phases/evolution-phase.ts @@ -5,7 +5,7 @@ import { globalScene } from "#app/global-scene"; import type { SpeciesFormEvolution } from "#app/data/balance/pokemon-evolutions"; import { FusionSpeciesFormEvolution } from "#app/data/balance/pokemon-evolutions"; import type EvolutionSceneHandler from "#app/ui/evolution-scene-handler"; -import * as Utils from "#app/utils"; +import { fixedInt, getFrameMs, randInt } from "#app/utils"; import { Mode } from "#app/ui/ui"; import { cos, sin } from "#app/field/anims"; import type { PlayerPokemon } from "#app/field/pokemon"; @@ -332,9 +332,9 @@ export class EvolutionPhase extends Phase { () => this.end(), null, true, - Utils.fixedInt(4000), + fixedInt(4000), ); - globalScene.time.delayedCall(Utils.fixedInt(4250), () => globalScene.playBgm()); + globalScene.time.delayedCall(fixedInt(4250), () => globalScene.playBgm()); }); }); }; @@ -392,7 +392,7 @@ export class EvolutionPhase extends Phase { globalScene.tweens.addCounter({ repeat: 64, - duration: Utils.getFrameMs(1), + duration: getFrameMs(1), onRepeat: () => { if (f < 64) { if (!(f & 7)) { @@ -411,7 +411,7 @@ export class EvolutionPhase extends Phase { globalScene.tweens.addCounter({ repeat: 96, - duration: Utils.getFrameMs(1), + duration: getFrameMs(1), onRepeat: () => { if (f < 96) { if (f < 6) { @@ -461,7 +461,7 @@ export class EvolutionPhase extends Phase { globalScene.tweens.addCounter({ repeat: 48, - duration: Utils.getFrameMs(1), + duration: getFrameMs(1), onRepeat: () => { if (!f) { for (let i = 0; i < 16; i++) { @@ -482,14 +482,14 @@ export class EvolutionPhase extends Phase { globalScene.tweens.addCounter({ repeat: 48, - duration: Utils.getFrameMs(1), + duration: getFrameMs(1), onRepeat: () => { if (!f) { for (let i = 0; i < 8; i++) { this.doSprayParticle(i); } } else if (f < 50) { - this.doSprayParticle(Utils.randInt(8)); + this.doSprayParticle(randInt(8)); } f++; }, @@ -506,7 +506,7 @@ export class EvolutionPhase extends Phase { const particleTimer = globalScene.tweens.addCounter({ repeat: -1, - duration: Utils.getFrameMs(1), + duration: getFrameMs(1), onRepeat: () => { updateParticle(); }, @@ -543,7 +543,7 @@ export class EvolutionPhase extends Phase { const particleTimer = globalScene.tweens.addCounter({ repeat: -1, - duration: Utils.getFrameMs(1), + duration: getFrameMs(1), onRepeat: () => { updateParticle(); }, @@ -575,7 +575,7 @@ export class EvolutionPhase extends Phase { const particleTimer = globalScene.tweens.addCounter({ repeat: -1, - duration: Utils.getFrameMs(1), + duration: getFrameMs(1), onRepeat: () => { updateParticle(); }, @@ -605,12 +605,12 @@ export class EvolutionPhase extends Phase { let f = 0; let yOffset = 0; - const speed = 3 - Utils.randInt(8); - const amp = 48 + Utils.randInt(64); + const speed = 3 - randInt(8); + const amp = 48 + randInt(64); const particleTimer = globalScene.tweens.addCounter({ repeat: -1, - duration: Utils.getFrameMs(1), + duration: getFrameMs(1), onRepeat: () => { updateParticle(); }, diff --git a/src/phases/exp-phase.ts b/src/phases/exp-phase.ts index 092482d4c18..b7d62c92bcf 100644 --- a/src/phases/exp-phase.ts +++ b/src/phases/exp-phase.ts @@ -2,7 +2,7 @@ import { globalScene } from "#app/global-scene"; import { getPokemonNameWithAffix } from "#app/messages"; import { ExpBoosterModifier } from "#app/modifier/modifier"; import i18next from "i18next"; -import * as Utils from "#app/utils"; +import { NumberHolder } from "#app/utils"; import { PlayerPartyMemberPokemonPhase } from "./player-party-member-pokemon-phase"; import { LevelUpPhase } from "./level-up-phase"; @@ -19,7 +19,7 @@ export class ExpPhase extends PlayerPartyMemberPokemonPhase { super.start(); const pokemon = this.getPokemon(); - const exp = new Utils.NumberHolder(this.expValue); + const exp = new NumberHolder(this.expValue); globalScene.applyModifiers(ExpBoosterModifier, true, exp); exp.value = Math.floor(exp.value); globalScene.ui.showText( diff --git a/src/phases/faint-phase.ts b/src/phases/faint-phase.ts index dfc0e0653a5..7e1ae4ec07b 100644 --- a/src/phases/faint-phase.ts +++ b/src/phases/faint-phase.ts @@ -209,8 +209,8 @@ export class FaintPhase extends PokemonPhase { } // in double battles redirect potential moves off fainted pokemon - if (globalScene.currentBattle.double) { - const allyPokemon = pokemon.getAlly(); + const allyPokemon = pokemon.getAlly(); + if (globalScene.currentBattle.double && !isNullOrUndefined(allyPokemon)) { globalScene.redirectPokemonMoves(pokemon, allyPokemon); } diff --git a/src/phases/form-change-phase.ts b/src/phases/form-change-phase.ts index e0ec4e87600..bf94284b117 100644 --- a/src/phases/form-change-phase.ts +++ b/src/phases/form-change-phase.ts @@ -1,5 +1,5 @@ import { globalScene } from "#app/global-scene"; -import * as Utils from "../utils"; +import { fixedInt } from "#app/utils"; import { achvs } from "../system/achv"; import type { SpeciesFormChange } from "../data/pokemon-forms"; import { getSpeciesFormChangeMessage } from "../data/pokemon-forms"; @@ -9,7 +9,7 @@ import type PartyUiHandler from "../ui/party-ui-handler"; import { getPokemonNameWithAffix } from "../messages"; import { EndEvolutionPhase } from "./end-evolution-phase"; import { EvolutionPhase } from "./evolution-phase"; -import { BattlerTagType } from "#app/enums/battler-tag-type"; +import { BattlerTagType } from "#enums/battler-tag-type"; import { SpeciesFormKey } from "#enums/species-form-key"; export class FormChangePhase extends EvolutionPhase { @@ -151,9 +151,9 @@ export class FormChangePhase extends EvolutionPhase { () => this.end(), null, true, - Utils.fixedInt(delay), + fixedInt(delay), ); - globalScene.time.delayedCall(Utils.fixedInt(delay + 250), () => + globalScene.time.delayedCall(fixedInt(delay + 250), () => globalScene.playBgm(), ); }); diff --git a/src/phases/game-over-modifier-reward-phase.ts b/src/phases/game-over-modifier-reward-phase.ts index f3f2aebd67d..d0a39a4031a 100644 --- a/src/phases/game-over-modifier-reward-phase.ts +++ b/src/phases/game-over-modifier-reward-phase.ts @@ -1,5 +1,4 @@ import { globalScene } from "#app/global-scene"; -import type { ModifierTypeFunc } from "#app/modifier/modifier-type"; import { Mode } from "#app/ui/ui"; import i18next from "i18next"; import { ModifierRewardPhase } from "./modifier-reward-phase"; diff --git a/src/phases/game-over-phase.ts b/src/phases/game-over-phase.ts index af948ad0632..1ccdc9c7106 100644 --- a/src/phases/game-over-phase.ts +++ b/src/phases/game-over-phase.ts @@ -5,7 +5,7 @@ import { pokemonEvolutions } from "#app/data/balance/pokemon-evolutions"; import { getCharVariantFromDialogue } from "#app/data/dialogue"; import type PokemonSpecies from "#app/data/pokemon-species"; import { getPokemonSpecies } from "#app/data/pokemon-species"; -import { trainerConfigs } from "#app/data/trainer-config"; +import { trainerConfigs } from "#app/data/trainers/trainer-config"; import type Pokemon from "#app/field/pokemon"; import { modifierTypes } from "#app/modifier/modifier-type"; import { BattlePhase } from "#app/phases/battle-phase"; @@ -20,7 +20,7 @@ import { UnlockPhase } from "#app/phases/unlock-phase"; import { achvs, ChallengeAchv } from "#app/system/achv"; import { Unlockables } from "#app/system/unlockables"; import { Mode } from "#app/ui/ui"; -import * as Utils from "#app/utils"; +import { isLocal, isLocalServerConnected } from "#app/utils"; import { PlayerGender } from "#enums/player-gender"; import { TrainerType } from "#enums/trainer-type"; import i18next from "i18next"; @@ -45,6 +45,8 @@ export class GameOverPhase extends BattlePhase { start() { super.start(); + globalScene.hideAbilityBar(); + // Failsafe if players somehow skip floor 200 in classic mode if (globalScene.gameMode.isClassic && globalScene.currentBattle.waveIndex > 200) { this.isVictory = true; @@ -217,7 +219,7 @@ export class GameOverPhase extends BattlePhase { /* Added a local check to see if the game is running offline If Online, execute apiFetch as intended If Offline, execute offlineNewClear() only for victory, a localStorage implementation of newClear daily run checks */ - if (!Utils.isLocal || Utils.isLocalServerConnected) { + if (!isLocal || isLocalServerConnected) { pokerogueApi.savedata.session .newclear({ slot: globalScene.sessionSlotId, diff --git a/src/phases/hide-ability-phase.ts b/src/phases/hide-ability-phase.ts index 0745b3f832a..142bb4b251d 100644 --- a/src/phases/hide-ability-phase.ts +++ b/src/phases/hide-ability-phase.ts @@ -1,27 +1,12 @@ import { globalScene } from "#app/global-scene"; -import type { BattlerIndex } from "#app/battle"; -import { PokemonPhase } from "./pokemon-phase"; - -export class HideAbilityPhase extends PokemonPhase { - private passive: boolean; - - constructor(battlerIndex: BattlerIndex, passive = false) { - super(battlerIndex); - - this.passive = passive; - } +import { Phase } from "#app/phase"; +export class HideAbilityPhase extends Phase { start() { super.start(); - const pokemon = this.getPokemon(); - - if (pokemon) { - globalScene.abilityBar.hide().then(() => { - this.end(); - }); - } else { + globalScene.abilityBar.hide().then(() => { this.end(); - } + }); } } diff --git a/src/phases/learn-move-phase.ts b/src/phases/learn-move-phase.ts index 7bed71b3363..4107a9cf087 100644 --- a/src/phases/learn-move-phase.ts +++ b/src/phases/learn-move-phase.ts @@ -49,7 +49,7 @@ export class LearnMovePhase extends PlayerPartyMemberPokemonPhase { const currentMoveset = pokemon.getMoveset(); // The game first checks if the Pokemon already has the move and ends the phase if it does. - const hasMoveAlready = currentMoveset.some(m => m?.moveId === move.id) && this.moveId !== Moves.SKETCH; + const hasMoveAlready = currentMoveset.some(m => m.moveId === move.id) && this.moveId !== Moves.SKETCH; if (hasMoveAlready) { return this.end(); } diff --git a/src/phases/level-up-phase.ts b/src/phases/level-up-phase.ts index 31c7fabf451..c6ca17d583e 100644 --- a/src/phases/level-up-phase.ts +++ b/src/phases/level-up-phase.ts @@ -71,6 +71,7 @@ export class LevelUpPhase extends PlayerPartyMemberPokemonPhase { if (!this.pokemon.pauseEvolutions) { const evolution = this.pokemon.getEvolution(); if (evolution) { + this.pokemon.breakIllusion() globalScene.unshiftPhase(new EvolutionPhase(this.pokemon, evolution, this.lastLevel)); } } diff --git a/src/phases/login-phase.ts b/src/phases/login-phase.ts index 5cce6ca0298..846482ff726 100644 --- a/src/phases/login-phase.ts +++ b/src/phases/login-phase.ts @@ -5,26 +5,26 @@ import { Phase } from "#app/phase"; import { handleTutorial, Tutorial } from "#app/tutorial"; import { Mode } from "#app/ui/ui"; import i18next, { t } from "i18next"; -import * as Utils from "#app/utils"; +import { getCookie, sessionIdKey, executeIf, removeCookie } from "#app/utils"; import { SelectGenderPhase } from "./select-gender-phase"; import { UnavailablePhase } from "./unavailable-phase"; export class LoginPhase extends Phase { private showText: boolean; - constructor(showText?: boolean) { + constructor(showText = true) { super(); - this.showText = showText === undefined || !!showText; + this.showText = showText; } start(): void { super.start(); - const hasSession = !!Utils.getCookie(Utils.sessionIdKey); + const hasSession = !!getCookie(sessionIdKey); globalScene.ui.setMode(Mode.LOADING, { buttonActions: [] }); - Utils.executeIf(bypassLogin || hasSession, updateUserInfo).then(response => { + executeIf(bypassLogin || hasSession, updateUserInfo).then(response => { const success = response ? response[0] : false; const statusCode = response ? response[1] : null; if (!success) { @@ -38,7 +38,7 @@ export class LoginPhase extends Phase { const loadData = () => { updateUserInfo().then(success => { if (!success[0]) { - Utils.removeCookie(Utils.sessionIdKey); + removeCookie(sessionIdKey); globalScene.reset(true, true); return; } @@ -60,7 +60,7 @@ export class LoginPhase extends Phase { globalScene.ui.playSelect(); updateUserInfo().then(success => { if (!success[0]) { - Utils.removeCookie(Utils.sessionIdKey); + removeCookie(sessionIdKey); globalScene.reset(true, true); return; } @@ -89,7 +89,7 @@ export class LoginPhase extends Phase { ], }); } else if (statusCode === 401) { - Utils.removeCookie(Utils.sessionIdKey); + removeCookie(sessionIdKey); globalScene.reset(true, true); } else { globalScene.unshiftPhase(new UnavailablePhase()); diff --git a/src/phases/message-phase.ts b/src/phases/message-phase.ts index 2a5bcf6b99c..f6777579857 100644 --- a/src/phases/message-phase.ts +++ b/src/phases/message-phase.ts @@ -3,9 +3,9 @@ import { Phase } from "#app/phase"; export class MessagePhase extends Phase { private text: string; - private callbackDelay: number | null; - private prompt: boolean | null; - private promptDelay: number | null; + private callbackDelay?: number | null; + private prompt?: boolean | null; + private promptDelay?: number | null; private speaker?: string; constructor( @@ -18,9 +18,9 @@ export class MessagePhase extends Phase { super(); this.text = text; - this.callbackDelay = callbackDelay!; // TODO: is this bang correct? - this.prompt = prompt!; // TODO: is this bang correct? - this.promptDelay = promptDelay!; // TODO: is this bang correct? + this.callbackDelay = callbackDelay; + this.prompt = prompt; + this.promptDelay = promptDelay; this.speaker = speaker; } @@ -29,7 +29,7 @@ export class MessagePhase extends Phase { if (this.text.indexOf("$") > -1) { const pokename: string[] = []; - const repname = [ "#POKEMON1", "#POKEMON2" ]; + const repname = ["#POKEMON1", "#POKEMON2"]; for (let p = 0; p < globalScene.getPlayerField().length; p++) { pokename.push(globalScene.getPlayerField()[p].getNameToRender()); this.text = this.text.split(pokename[p]).join(repname[p]); diff --git a/src/phases/money-reward-phase.ts b/src/phases/money-reward-phase.ts index 56f46d25f77..ae8dc90616d 100644 --- a/src/phases/money-reward-phase.ts +++ b/src/phases/money-reward-phase.ts @@ -2,7 +2,7 @@ import { globalScene } from "#app/global-scene"; import { ArenaTagType } from "#app/enums/arena-tag-type"; import { MoneyMultiplierModifier } from "#app/modifier/modifier"; import i18next from "i18next"; -import * as Utils from "#app/utils"; +import { NumberHolder } from "#app/utils"; import { BattlePhase } from "./battle-phase"; export class MoneyRewardPhase extends BattlePhase { @@ -15,7 +15,7 @@ export class MoneyRewardPhase extends BattlePhase { } start() { - const moneyAmount = new Utils.NumberHolder(globalScene.getWaveMoneyAmount(this.moneyMultiplier)); + const moneyAmount = new NumberHolder(globalScene.getWaveMoneyAmount(this.moneyMultiplier)); globalScene.applyModifiers(MoneyMultiplierModifier, true, moneyAmount); diff --git a/src/phases/move-anim-test-phase.ts b/src/phases/move-anim-test-phase.ts deleted file mode 100644 index e8b7c0c8fa7..00000000000 --- a/src/phases/move-anim-test-phase.ts +++ /dev/null @@ -1,50 +0,0 @@ -import { globalScene } from "#app/global-scene"; -import { initMoveAnim, loadMoveAnimAssets, MoveAnim } from "#app/data/battle-anims"; -import { allMoves, SelfStatusMove } from "#app/data/moves/move"; -import { Moves } from "#app/enums/moves"; -import * as Utils from "#app/utils"; -import { BattlePhase } from "./battle-phase"; - -export class MoveAnimTestPhase extends BattlePhase { - private moveQueue: Moves[]; - - constructor(moveQueue?: Moves[]) { - super(); - - this.moveQueue = moveQueue || Utils.getEnumValues(Moves).slice(1); - } - - start() { - const moveQueue = this.moveQueue.slice(0); - this.playMoveAnim(moveQueue, true); - } - - playMoveAnim(moveQueue: Moves[], player: boolean) { - const moveId = player ? moveQueue[0] : moveQueue.shift(); - if (moveId === undefined) { - this.playMoveAnim(this.moveQueue.slice(0), true); - return; - } - if (player) { - console.log(Moves[moveId]); - } - - initMoveAnim(moveId).then(() => { - loadMoveAnimAssets([moveId], true).then(() => { - const user = player ? globalScene.getPlayerPokemon()! : globalScene.getEnemyPokemon()!; - const target = - player !== allMoves[moveId] instanceof SelfStatusMove - ? globalScene.getEnemyPokemon()! - : globalScene.getPlayerPokemon()!; - new MoveAnim(moveId, user, target.getBattlerIndex()).play(allMoves[moveId].hitsSubstitute(user, target), () => { - // TODO: are the bangs correct here? - if (player) { - this.playMoveAnim(moveQueue, false); - } else { - this.playMoveAnim(moveQueue, true); - } - }); - }); - }); - } -} diff --git a/src/phases/move-effect-phase.ts b/src/phases/move-effect-phase.ts index 4152fc243f0..acc7ac0f63a 100644 --- a/src/phases/move-effect-phase.ts +++ b/src/phases/move-effect-phase.ts @@ -26,6 +26,7 @@ import { } from "#app/data/battler-tags"; import type { MoveAttr } from "#app/data/moves/move"; import { + AddArenaTrapTagAttr, applyFilteredMoveAttrs, applyMoveAttrs, AttackMove, @@ -69,6 +70,7 @@ import type { Phase } from "#app/phase"; import { ShowAbilityPhase } from "./show-ability-phase"; import { MovePhase } from "./move-phase"; import { MoveEndPhase } from "./move-end-phase"; +import { HideAbilityPhase } from "#app/phases/hide-ability-phase"; export class MoveEffectPhase extends PokemonPhase { public move: PokemonMove; @@ -208,12 +210,12 @@ export class MoveEffectPhase extends PokemonPhase { targets.some(t => t.hasAbilityWithAttr(ReflectStatusMoveAbAttr) || !!t.getTag(BattlerTagType.MAGIC_COAT)); /** - * If no targets are left for the move to hit (FAIL), or the invoked move is non-reflectable, single-target + * If no targets are left for the move to hit and it is not a hazard move (FAIL), or the invoked move is non-reflectable, single-target * (and not random target) and failed the hit check against its target (MISS), log the move * as FAILed or MISSed (depending on the conditions above) and end this phase. */ if ( - !hasActiveTargets || + (!hasActiveTargets && !move.hasAttr(AddArenaTrapTagAttr)) || (!mayBounce && !move.hasAttr(VariableTargetAttr) && !move.isMultiTarget() && @@ -238,18 +240,28 @@ export class MoveEffectPhase extends PokemonPhase { return this.end(); } - const playOnEmptyField = globalScene.currentBattle?.mysteryEncounter?.hasBattleAnimationsWithoutTargets ?? false; - // Move animation only needs one target - new MoveAnim(move.id as Moves, user, this.getFirstTarget()!.getBattlerIndex(), playOnEmptyField).play( - move.hitsSubstitute(user, this.getFirstTarget()!), - () => { - /** Has the move successfully hit a target (for damage) yet? */ - let hasHit = false; + const playOnEmptyField = + (globalScene.currentBattle?.mysteryEncounter?.hasBattleAnimationsWithoutTargets ?? false) || + (!hasActiveTargets && move.hasAttr(AddArenaTrapTagAttr)); + // Move animation only needs one target. The attacker is used as a fallback. + new MoveAnim( + move.id as Moves, + user, + this.getFirstTarget()?.getBattlerIndex() ?? BattlerIndex.ATTACKER, + playOnEmptyField, + ).play(move.hitsSubstitute(user, this.getFirstTarget()!), () => { + /** Has the move successfully hit a target (for damage) yet? */ + let hasHit = false; - // Prevent ENEMY_SIDE targeted moves from occurring twice in double battles - // and check which target will magic bounce. - const trueTargets: Pokemon[] = - move.moveTarget !== MoveTarget.ENEMY_SIDE + // Prevent ENEMY_SIDE targeted moves from occurring twice in double battles + // and check which target will magic bounce. + // In the event that the move is a hazard move, there may be no target and the move should still succeed. + // In this case, the user is used as the "target" to prevent a crash. + // This should not affect normal execution of the move otherwise. + const trueTargets: Pokemon[] = + !hasActiveTargets && move.hasAttr(AddArenaTrapTagAttr) + ? [user] + : move.moveTarget !== MoveTarget.ENEMY_SIDE ? targets : (() => { const magicCoatTargets = targets.filter( @@ -263,242 +275,243 @@ export class MoveEffectPhase extends PokemonPhase { return [magicCoatTargets[0]]; })(); - const queuedPhases: Phase[] = []; - for (const target of trueTargets) { - /** The {@linkcode ArenaTagSide} to which the target belongs */ - const targetSide = target.isPlayer() ? ArenaTagSide.PLAYER : ArenaTagSide.ENEMY; - /** Has the invoked move been cancelled by conditional protection (e.g Quick Guard)? */ - const hasConditionalProtectApplied = new BooleanHolder(false); - /** Does the applied conditional protection bypass Protect-ignoring effects? */ - const bypassIgnoreProtect = new BooleanHolder(false); - /** If the move is not targeting a Pokemon on the user's side, try to apply conditional protection effects */ - if (!this.move.getMove().isAllyTarget()) { - globalScene.arena.applyTagsForSide( - ConditionalProtectTag, - targetSide, - false, - hasConditionalProtectApplied, - user, - target, - move.id, - bypassIgnoreProtect, - ); - } - - /** Is the target protected by Protect, etc. or a relevant conditional protection effect? */ - const isProtected = - ![MoveTarget.ENEMY_SIDE, MoveTarget.BOTH_SIDES].includes(this.move.getMove().moveTarget) && - (bypassIgnoreProtect.value || !this.move.getMove().checkFlag(MoveFlags.IGNORE_PROTECT, user, target)) && - (hasConditionalProtectApplied.value || - (!target.findTags(t => t instanceof DamageProtectedTag).length && - target.findTags(t => t instanceof ProtectedTag).find(t => target.lapseTag(t.tagType))) || - (this.move.getMove().category !== MoveCategory.STATUS && - target.findTags(t => t instanceof DamageProtectedTag).find(t => target.lapseTag(t.tagType)))); - - /** Is the target hidden by the effects of its Commander ability? */ - const isCommanding = - globalScene.currentBattle.double && - target.getAlly()?.getTag(BattlerTagType.COMMANDED)?.getSourcePokemon() === target; - - /** Is the target reflecting status moves from the magic coat move? */ - const isReflecting = !!target.getTag(BattlerTagType.MAGIC_COAT); - - /** Is the target's magic bounce ability not ignored and able to reflect this move? */ - const canMagicBounce = - !isReflecting && - !move.checkFlag(MoveFlags.IGNORE_ABILITIES, user, target) && - target.hasAbilityWithAttr(ReflectStatusMoveAbAttr); - - const semiInvulnerableTag = target.getTag(SemiInvulnerableTag); - - /** Is the target reflecting the effect, not protected, and not in an semi-invulnerable state?*/ - const willBounce = - !isProtected && - !this.reflected && - !isCommanding && - move.hasFlag(MoveFlags.REFLECTABLE) && - (isReflecting || canMagicBounce) && - !semiInvulnerableTag; - - // If the move will bounce, then queue the bounce and move on to the next target - if (!target.switchOutStatus && willBounce) { - const newTargets = move.isMultiTarget() - ? getMoveTargets(target, move.id).targets - : [user.getBattlerIndex()]; - if (!isReflecting) { - queuedPhases.push( - new ShowAbilityPhase( - target.getBattlerIndex(), - target.getPassiveAbility().hasAttr(ReflectStatusMoveAbAttr), - ), - ); - } - - queuedPhases.push( - new MovePhase(target, newTargets, new PokemonMove(move.id, 0, 0, true), true, true, true), - ); - continue; - } - - /** Is the pokemon immune due to an ablility, and also not in a semi invulnerable state? */ - const isImmune = - target.hasAbilityWithAttr(TypeImmunityAbAttr) && - target.getAbility()?.getAttrs(TypeImmunityAbAttr)?.[0]?.getImmuneType() === user.getMoveType(move) && - !semiInvulnerableTag; - - /** - * If the move missed a target, stop all future hits against that target - * and move on to the next target (if there is one). - */ - if ( - target.switchOutStatus || - isCommanding || - (!isImmune && !isProtected && !targetHitChecks[target.getBattlerIndex()]) - ) { - this.stopMultiHit(target); - if (!target.switchOutStatus) { - globalScene.queueMessage( - i18next.t("battle:attackMissed", { - pokemonNameWithAffix: getPokemonNameWithAffix(target), - }), - ); - } - if (moveHistoryEntry.result === MoveResult.PENDING) { - moveHistoryEntry.result = MoveResult.MISS; - } - user.pushMoveHistory(moveHistoryEntry); - applyMoveAttrs(MissEffectAttr, user, null, move); - continue; - } - - /** Does this phase represent the invoked move's first strike? */ - const firstHit = user.turnData.hitsLeft === user.turnData.hitCount; - - // Only log the move's result on the first strike - if (firstHit) { - user.pushMoveHistory(moveHistoryEntry); - } - - /** - * Since all fail/miss checks have applied, the move is considered successfully applied. - * It's worth noting that if the move has no effect or is protected against, this assignment - * is overwritten and the move is logged as a FAIL. - */ - moveHistoryEntry.result = MoveResult.SUCCESS; - - /** - * Stores the result of applying the invoked move to the target. - * If the target is protected, the result is always `NO_EFFECT`. - * Otherwise, the hit result is based on type effectiveness, immunities, - * and other factors that may negate the attack or status application. - * - * Internally, the call to {@linkcode Pokemon.apply} is where damage is calculated - * (for attack moves) and the target's HP is updated. However, this isn't - * made visible to the user until the resulting {@linkcode DamagePhase} - * is invoked. - */ - const hitResult = !isProtected ? target.apply(user, move) : HitResult.NO_EFFECT; - - /** Does {@linkcode hitResult} indicate that damage was dealt to the target? */ - const dealsDamage = [ - HitResult.EFFECTIVE, - HitResult.SUPER_EFFECTIVE, - HitResult.NOT_VERY_EFFECTIVE, - HitResult.ONE_HIT_KO, - ].includes(hitResult); - - /** Is this target the first one hit by the move on its current strike? */ - const firstTarget = dealsDamage && !hasHit; - if (firstTarget) { - hasHit = true; - } - - /** - * If the move has no effect on the target (i.e. the target is protected or immune), - * change the logged move result to FAIL. - */ - if (hitResult === HitResult.NO_EFFECT) { - moveHistoryEntry.result = MoveResult.FAIL; - } - - /** Does this phase represent the invoked move's last strike? */ - const lastHit = user.turnData.hitsLeft === 1 || !this.getFirstTarget()?.isActive(); - - /** - * If the user can change forms by using the invoked move, - * it only changes forms after the move's last hit - * (see Relic Song's interaction with Parental Bond when used by Meloetta). - */ - if (lastHit) { - globalScene.triggerPokemonFormChange(user, SpeciesFormChangePostMoveTrigger); - /** - * Multi-Lens, Multi Hit move and Parental Bond check for PostDamageAbAttr - * other damage source are calculated in damageAndUpdate in pokemon.ts - */ - if (user.turnData.hitCount > 1) { - applyPostDamageAbAttrs(PostDamageAbAttr, target, 0, target.hasPassive(), false, [], user); - } - } - - applyFilteredMoveAttrs( - (attr: MoveAttr) => - attr instanceof MoveEffectAttr && - attr.trigger === MoveEffectTrigger.PRE_APPLY && - (!attr.firstHitOnly || firstHit) && - (!attr.lastHitOnly || lastHit) && - hitResult !== HitResult.NO_EFFECT, + const queuedPhases: Phase[] = []; + for (const target of trueTargets) { + /** The {@linkcode ArenaTagSide} to which the target belongs */ + const targetSide = target.isPlayer() ? ArenaTagSide.PLAYER : ArenaTagSide.ENEMY; + /** Has the invoked move been cancelled by conditional protection (e.g Quick Guard)? */ + const hasConditionalProtectApplied = new BooleanHolder(false); + /** Does the applied conditional protection bypass Protect-ignoring effects? */ + const bypassIgnoreProtect = new BooleanHolder(false); + /** If the move is not targeting a Pokemon on the user's side, try to apply conditional protection effects */ + if (!this.move.getMove().isAllyTarget()) { + globalScene.arena.applyTagsForSide( + ConditionalProtectTag, + targetSide, + false, + hasConditionalProtectApplied, user, target, - move, + move.id, + bypassIgnoreProtect, ); + } - if (hitResult !== HitResult.FAIL) { - this.applySelfTargetEffects(user, target, firstHit, lastHit); + /** Is the target protected by Protect, etc. or a relevant conditional protection effect? */ + const isProtected = + ![MoveTarget.ENEMY_SIDE, MoveTarget.BOTH_SIDES].includes(this.move.getMove().moveTarget) && + (bypassIgnoreProtect.value || + !this.move.getMove().doesFlagEffectApply({ flag: MoveFlags.IGNORE_PROTECT, user, target })) && + (hasConditionalProtectApplied.value || + (!target.findTags(t => t instanceof DamageProtectedTag).length && + target.findTags(t => t instanceof ProtectedTag).find(t => target.lapseTag(t.tagType))) || + (this.move.getMove().category !== MoveCategory.STATUS && + target.findTags(t => t instanceof DamageProtectedTag).find(t => target.lapseTag(t.tagType)))); - if (hitResult !== HitResult.NO_EFFECT) { - this.applyPostApplyEffects(user, target, firstHit, lastHit); - this.applyHeldItemFlinchCheck(user, target, dealsDamage); - this.applySuccessfulAttackEffects(user, target, firstHit, lastHit, !!isProtected, hitResult, firstTarget); - } else { - applyMoveAttrs(NoEffectAttr, user, null, move); - } + /** Is the target hidden by the effects of its Commander ability? */ + const isCommanding = + globalScene.currentBattle.double && + target.getAlly()?.getTag(BattlerTagType.COMMANDED)?.getSourcePokemon() === target; + + /** Is the target reflecting status moves from the magic coat move? */ + const isReflecting = !!target.getTag(BattlerTagType.MAGIC_COAT); + + /** Is the target's magic bounce ability not ignored and able to reflect this move? */ + const canMagicBounce = + !isReflecting && + !move.doesFlagEffectApply({ flag: MoveFlags.IGNORE_ABILITIES, user, target }) && + target.hasAbilityWithAttr(ReflectStatusMoveAbAttr); + + const semiInvulnerableTag = target.getTag(SemiInvulnerableTag); + + /** Is the target reflecting the effect, not protected, and not in an semi-invulnerable state?*/ + const willBounce = + !isProtected && + !this.reflected && + !isCommanding && + move.hasFlag(MoveFlags.REFLECTABLE) && + (isReflecting || canMagicBounce) && + !semiInvulnerableTag; + + // If the move will bounce, then queue the bounce and move on to the next target + if (!target.switchOutStatus && willBounce) { + const newTargets = move.isMultiTarget() ? getMoveTargets(target, move.id).targets : [user.getBattlerIndex()]; + if (!isReflecting) { + // TODO: Ability displays should be handled by the ability + queuedPhases.push( + new ShowAbilityPhase( + target.getBattlerIndex(), + target.getPassiveAbility().hasAttr(ReflectStatusMoveAbAttr), + ), + ); + queuedPhases.push(new HideAbilityPhase()); } + + queuedPhases.push(new MovePhase(target, newTargets, new PokemonMove(move.id, 0, 0, true), true, true, true)); + continue; } - // Apply queued phases - if (queuedPhases.length) { - globalScene.appendToPhase(queuedPhases, MoveEndPhase); + /** Is the pokemon immune due to an ablility, and also not in a semi invulnerable state? */ + const isImmune = + target.hasAbilityWithAttr(TypeImmunityAbAttr) && + target.getAbility()?.getAttrs(TypeImmunityAbAttr)?.[0]?.getImmuneType() === user.getMoveType(move) && + !semiInvulnerableTag; + + /** + * If the move missed a target, stop all future hits against that target + * and move on to the next target (if there is one). + */ + if ( + target.switchOutStatus || + isCommanding || + (!isImmune && + !isProtected && + !targetHitChecks[target.getBattlerIndex()] && + !move.hasAttr(AddArenaTrapTagAttr)) + ) { + this.stopMultiHit(target); + if (!target.switchOutStatus) { + globalScene.queueMessage( + i18next.t("battle:attackMissed", { + pokemonNameWithAffix: getPokemonNameWithAffix(target), + }), + ); + } + if (moveHistoryEntry.result === MoveResult.PENDING) { + moveHistoryEntry.result = MoveResult.MISS; + } + user.pushMoveHistory(moveHistoryEntry); + applyMoveAttrs(MissEffectAttr, user, null, move); + continue; } - // Apply the move's POST_TARGET effects on the move's last hit, after all targeted effects have resolved - if (user.turnData.hitsLeft === 1 || !this.getFirstTarget()?.isActive()) { - applyFilteredMoveAttrs( - (attr: MoveAttr) => attr instanceof MoveEffectAttr && attr.trigger === MoveEffectTrigger.POST_TARGET, - user, - null, - move, - ); + + /** Does this phase represent the invoked move's first strike? */ + const firstHit = user.turnData.hitsLeft === user.turnData.hitCount; + + // Only log the move's result on the first strike + if (firstHit) { + user.pushMoveHistory(moveHistoryEntry); } /** - * Remove the target's substitute (if it exists and has expired) - * after all targeted effects have applied. - * This prevents blocked effects from applying until after this hit resolves. + * Since all fail/miss checks have applied, the move is considered successfully applied. + * It's worth noting that if the move has no effect or is protected against, this assignment + * is overwritten and the move is logged as a FAIL. */ - targets.forEach(target => { - const substitute = target.getTag(SubstituteTag); - if (substitute && substitute.hp <= 0) { - target.lapseTag(BattlerTagType.SUBSTITUTE); - } - }); + moveHistoryEntry.result = MoveResult.SUCCESS; - const moveType = user.getMoveType(move, true); - if (move.category !== MoveCategory.STATUS && !user.stellarTypesBoosted.includes(moveType)) { - user.stellarTypesBoosted.push(moveType); + /** + * Stores the result of applying the invoked move to the target. + * If the target is protected, the result is always `NO_EFFECT`. + * Otherwise, the hit result is based on type effectiveness, immunities, + * and other factors that may negate the attack or status application. + * + * Internally, the call to {@linkcode Pokemon.apply} is where damage is calculated + * (for attack moves) and the target's HP is updated. However, this isn't + * made visible to the user until the resulting {@linkcode DamagePhase} + * is invoked. + */ + const hitResult = !isProtected ? target.apply(user, move) : HitResult.NO_EFFECT; + + /** Does {@linkcode hitResult} indicate that damage was dealt to the target? */ + const dealsDamage = [ + HitResult.EFFECTIVE, + HitResult.SUPER_EFFECTIVE, + HitResult.NOT_VERY_EFFECTIVE, + HitResult.ONE_HIT_KO, + ].includes(hitResult); + + /** Is this target the first one hit by the move on its current strike? */ + const firstTarget = dealsDamage && !hasHit; + if (firstTarget) { + hasHit = true; } - this.end(); - }, - ); + /** + * If the move has no effect on the target (i.e. the target is protected or immune), + * change the logged move result to FAIL. + */ + if (hitResult === HitResult.NO_EFFECT) { + moveHistoryEntry.result = MoveResult.FAIL; + } + + /** Does this phase represent the invoked move's last strike? */ + const lastHit = user.turnData.hitsLeft === 1 || !this.getFirstTarget()?.isActive(); + + /** + * If the user can change forms by using the invoked move, + * it only changes forms after the move's last hit + * (see Relic Song's interaction with Parental Bond when used by Meloetta). + */ + if (lastHit) { + globalScene.triggerPokemonFormChange(user, SpeciesFormChangePostMoveTrigger); + /** + * Multi-Lens, Multi Hit move and Parental Bond check for PostDamageAbAttr + * other damage source are calculated in damageAndUpdate in pokemon.ts + */ + if (user.turnData.hitCount > 1) { + applyPostDamageAbAttrs(PostDamageAbAttr, target, 0, target.hasPassive(), false, [], user); + } + } + + applyFilteredMoveAttrs( + (attr: MoveAttr) => + attr instanceof MoveEffectAttr && + attr.trigger === MoveEffectTrigger.PRE_APPLY && + (!attr.firstHitOnly || firstHit) && + (!attr.lastHitOnly || lastHit) && + hitResult !== HitResult.NO_EFFECT, + user, + target, + move, + ); + + if (hitResult !== HitResult.FAIL) { + this.applySelfTargetEffects(user, target, firstHit, lastHit); + + if (hitResult !== HitResult.NO_EFFECT) { + this.applyPostApplyEffects(user, target, firstHit, lastHit); + this.applyHeldItemFlinchCheck(user, target, dealsDamage); + this.applySuccessfulAttackEffects(user, target, firstHit, lastHit, !!isProtected, hitResult, firstTarget); + } else { + applyMoveAttrs(NoEffectAttr, user, null, move); + } + } + } + + // Apply queued phases + if (queuedPhases.length) { + globalScene.appendToPhase(queuedPhases, MoveEndPhase); + } + // Apply the move's POST_TARGET effects on the move's last hit, after all targeted effects have resolved + if (user.turnData.hitsLeft === 1 || !this.getFirstTarget()?.isActive()) { + applyFilteredMoveAttrs( + (attr: MoveAttr) => attr instanceof MoveEffectAttr && attr.trigger === MoveEffectTrigger.POST_TARGET, + user, + null, + move, + ); + } + + /** + * Remove the target's substitute (if it exists and has expired) + * after all targeted effects have applied. + * This prevents blocked effects from applying until after this hit resolves. + */ + targets.forEach(target => { + const substitute = target.getTag(SubstituteTag); + if (substitute && substitute.hp <= 0) { + target.lapseTag(BattlerTagType.SUBSTITUTE); + } + }); + + const moveType = user.getMoveType(move, true); + if (move.category !== MoveCategory.STATUS && !user.stellarTypesBoosted.includes(moveType)) { + user.stellarTypesBoosted.push(moveType); + } + + this.end(); + }); } public override end(): void { @@ -653,7 +666,7 @@ export class MoveEffectPhase extends PokemonPhase { this.applyOnHitEffects(user, target, firstHit, lastHit, firstTarget); this.applyOnGetHitAbEffects(user, target, hitResult); applyPostAttackAbAttrs(PostAttackAbAttr, user, target, this.move.getMove(), hitResult); - if (this.move.getMove() instanceof AttackMove) { + if (this.move.getMove() instanceof AttackMove && hitResult !== HitResult.STATUS) { globalScene.applyModifiers(ContactHeldItemTransferChanceModifier, this.player, user, target); } } diff --git a/src/phases/move-end-phase.ts b/src/phases/move-end-phase.ts index 4716370cc4e..176abee5e98 100644 --- a/src/phases/move-end-phase.ts +++ b/src/phases/move-end-phase.ts @@ -1,19 +1,38 @@ import { globalScene } from "#app/global-scene"; -import type { BattlerIndex } from "#app/battle"; import { BattlerTagLapseType } from "#app/data/battler-tags"; import { PokemonPhase } from "./pokemon-phase"; +import type { BattlerIndex } from "#app/battle"; +import { applyPostSummonAbAttrs, PostSummonRemoveEffectAbAttr } from "#app/data/ability"; +import type Pokemon from "#app/field/pokemon"; export class MoveEndPhase extends PokemonPhase { + private wasFollowUp: boolean; + + /** Targets from the preceding MovePhase */ + private targets: Pokemon[]; + constructor(battlerIndex: BattlerIndex, targets: Pokemon[], wasFollowUp = false) { + super(battlerIndex); + + this.targets = targets; + this.wasFollowUp = wasFollowUp; + } + start() { super.start(); const pokemon = this.getPokemon(); - if (pokemon.isActive(true)) { + if (!this.wasFollowUp && pokemon?.isActive(true)) { pokemon.lapseTags(BattlerTagLapseType.AFTER_MOVE); } - globalScene.arena.setIgnoreAbilities(false); + // Remove effects which were set on a Pokemon which removes them on summon (i.e. via Mold Breaker) + for (const target of this.targets) { + if (target) { + applyPostSummonAbAttrs(PostSummonRemoveEffectAbAttr, target); + } + } + this.end(); } } diff --git a/src/phases/move-phase.ts b/src/phases/move-phase.ts index 119a3e5a466..753d0cd45f5 100644 --- a/src/phases/move-phase.ts +++ b/src/phases/move-phase.ts @@ -15,6 +15,7 @@ import type { DelayedAttackTag } from "#app/data/arena-tag"; import { CommonAnim } from "#app/data/battle-anims"; import { BattlerTagLapseType, CenterOfAttentionTag } from "#app/data/battler-tags"; import { + AddArenaTrapTagAttr, allMoves, applyMoveAttrs, BypassRedirectAttr, @@ -42,7 +43,6 @@ import { CommonAnimPhase } from "#app/phases/common-anim-phase"; import { MoveChargePhase } from "#app/phases/move-charge-phase"; import { MoveEffectPhase } from "#app/phases/move-effect-phase"; import { MoveEndPhase } from "#app/phases/move-end-phase"; -import { ShowAbilityPhase } from "#app/phases/show-ability-phase"; import { NumberHolder } from "#app/utils"; import { Abilities } from "#enums/abilities"; import { ArenaTagType } from "#enums/arena-tag-type"; @@ -169,7 +169,11 @@ export class MovePhase extends BattlePhase { // Check move to see if arena.ignoreAbilities should be true. if (!this.followUp || this.reflected) { - if (this.move.getMove().checkFlag(MoveFlags.IGNORE_ABILITIES, this.pokemon, null)) { + if ( + this.move + .getMove() + .doesFlagEffectApply({ flag: MoveFlags.IGNORE_ABILITIES, user: this.pokemon, isFollowUp: this.followUp }) + ) { globalScene.arena.setIgnoreAbilities(true, this.pokemon.getBattlerIndex()); } } @@ -202,7 +206,10 @@ export class MovePhase extends BattlePhase { const targets = this.getActiveTargetPokemon(); const moveQueue = this.pokemon.getMoveQueue(); - if (targets.length === 0 || (moveQueue.length && moveQueue[0].move === Moves.NONE)) { + if ( + (targets.length === 0 && !this.move.getMove().hasAttr(AddArenaTrapTagAttr)) || + (moveQueue.length && moveQueue[0].move === Moves.NONE) + ) { this.showMoveText(); this.showFailedText(); this.cancel(); @@ -228,7 +235,7 @@ export class MovePhase extends BattlePhase { (!this.pokemon.randSeedInt(4) || Overrides.STATUS_ACTIVATION_OVERRIDE === true) && Overrides.STATUS_ACTIVATION_OVERRIDE !== false; break; - case StatusEffect.SLEEP: + case StatusEffect.SLEEP: { applyMoveAttrs(BypassSleepAttr, this.pokemon, null, this.move.getMove()); const turnsRemaining = new NumberHolder(this.pokemon.status.sleepTurnsRemaining ?? 0); applyAbAttrs( @@ -243,6 +250,7 @@ export class MovePhase extends BattlePhase { healed = this.pokemon.status.sleepTurnsRemaining <= 0; activated = !healed && !this.pokemon.getTag(BattlerTagType.BYPASS_SLEEP); break; + } case StatusEffect.FREEZE: healed = !!this.move @@ -477,13 +485,12 @@ export class MovePhase extends BattlePhase { } /** - * Queues a {@linkcode MoveEndPhase} if the move wasn't a {@linkcode followUp} and {@linkcode canMove()} returns `true`, - * then ends the phase. + * Queues a {@linkcode MoveEndPhase} and then ends the phase */ public end(): void { - if (!this.followUp && this.canMove()) { - globalScene.unshiftPhase(new MoveEndPhase(this.pokemon.getBattlerIndex())); - } + globalScene.unshiftPhase( + new MoveEndPhase(this.pokemon.getBattlerIndex(), this.getActiveTargetPokemon(), this.followUp), + ); super.end(); } @@ -546,11 +553,16 @@ export class MovePhase extends BattlePhase { if (this.pokemon.hasAbilityWithAttr(BlockRedirectAbAttr)) { redirectTarget.value = currentTarget; - globalScene.unshiftPhase( - new ShowAbilityPhase( - this.pokemon.getBattlerIndex(), - this.pokemon.getPassiveAbility().hasAttr(BlockRedirectAbAttr), - ), + // TODO: Ability displays should be handled by the ability + globalScene.queueAbilityDisplay( + this.pokemon, + this.pokemon.getPassiveAbility().hasAttr(BlockRedirectAbAttr), + true, + ); + globalScene.queueAbilityDisplay( + this.pokemon, + this.pokemon.getPassiveAbility().hasAttr(BlockRedirectAbAttr), + false, ); } diff --git a/src/phases/mystery-encounter-phases.ts b/src/phases/mystery-encounter-phases.ts index 26012df191d..f42290ff872 100644 --- a/src/phases/mystery-encounter-phases.ts +++ b/src/phases/mystery-encounter-phases.ts @@ -22,12 +22,11 @@ import { globalScene } from "#app/global-scene"; import { getCharVariantFromDialogue } from "../data/dialogue"; import type { OptionSelectSettings } from "../data/mystery-encounters/utils/encounter-phase-utils"; import { transitionMysteryEncounterIntroVisuals } from "../data/mystery-encounters/utils/encounter-phase-utils"; -import { TrainerSlot } from "../data/trainer-config"; +import { TrainerSlot } from "#enums/trainer-slot"; import { IvScannerModifier } from "../modifier/modifier"; import { Phase } from "../phase"; import { Mode } from "../ui/ui"; -import * as Utils from "../utils"; -import { isNullOrUndefined } from "../utils"; +import { isNullOrUndefined, randSeedItem } from "#app/utils"; /** * Will handle (in order): @@ -387,7 +386,7 @@ export class MysteryEncounterBattlePhase extends Phase { const trainer = globalScene.currentBattle.trainer; let message: string; globalScene.executeWithSeedOffset( - () => (message = Utils.randSeedItem(encounterMessages)), + () => (message = randSeedItem(encounterMessages)), globalScene.currentBattle.mysteryEncounter?.getSeedOffset(), ); message = message!; // tell TS compiler it's defined now diff --git a/src/phases/new-battle-phase.ts b/src/phases/new-battle-phase.ts index 8cdbdc5891a..09b8ab1d335 100644 --- a/src/phases/new-battle-phase.ts +++ b/src/phases/new-battle-phase.ts @@ -5,6 +5,11 @@ export class NewBattlePhase extends BattlePhase { start() { super.start(); + // cull any extra `NewBattle` phases from the queue. + globalScene.phaseQueue = globalScene.phaseQueue.filter(phase => !(phase instanceof NewBattlePhase)); + // `phaseQueuePrepend` is private, so we have to use this inefficient loop. + while (globalScene.tryRemoveUnshiftedPhase(phase => phase instanceof NewBattlePhase)) {} + globalScene.newBattle(); this.end(); diff --git a/src/phases/new-biome-encounter-phase.ts b/src/phases/new-biome-encounter-phase.ts index ed768742aac..3449a562c4a 100644 --- a/src/phases/new-biome-encounter-phase.ts +++ b/src/phases/new-biome-encounter-phase.ts @@ -4,10 +4,6 @@ import { getRandomWeatherType } from "#app/data/weather"; import { NextEncounterPhase } from "./next-encounter-phase"; export class NewBiomeEncounterPhase extends NextEncounterPhase { - constructor() { - super(); - } - doEncounter(): void { globalScene.playBgm(undefined, true); @@ -45,6 +41,6 @@ export class NewBiomeEncounterPhase extends NextEncounterPhase { * Set biome weather. */ trySetWeatherIfNewBiome(): void { - globalScene.arena.trySetWeather(getRandomWeatherType(globalScene.arena), false); + globalScene.arena.trySetWeather(getRandomWeatherType(globalScene.arena)); } } diff --git a/src/phases/next-encounter-phase.ts b/src/phases/next-encounter-phase.ts index e53f775f083..e5e61312c3b 100644 --- a/src/phases/next-encounter-phase.ts +++ b/src/phases/next-encounter-phase.ts @@ -2,10 +2,6 @@ import { globalScene } from "#app/global-scene"; import { EncounterPhase } from "./encounter-phase"; export class NextEncounterPhase extends EncounterPhase { - constructor() { - super(); - } - start() { super.start(); } diff --git a/src/phases/obtain-status-effect-phase.ts b/src/phases/obtain-status-effect-phase.ts index a0c0c14e93f..cba9399b996 100644 --- a/src/phases/obtain-status-effect-phase.ts +++ b/src/phases/obtain-status-effect-phase.ts @@ -6,6 +6,9 @@ import { StatusEffect } from "#app/enums/status-effect"; import type Pokemon from "#app/field/pokemon"; import { getPokemonNameWithAffix } from "#app/messages"; import { PokemonPhase } from "./pokemon-phase"; +import { SpeciesFormChangeStatusEffectTrigger } from "#app/data/pokemon-forms"; +import { applyPostSetStatusAbAttrs, PostSetStatusAbAttr } from "#app/data/ability"; +import { isNullOrUndefined } from "#app/utils"; export class ObtainStatusEffectPhase extends PokemonPhase { private statusEffect?: StatusEffect; @@ -44,6 +47,12 @@ export class ObtainStatusEffectPhase extends PokemonPhase { this.sourceText ?? undefined, ), ); + if (!isNullOrUndefined(this.statusEffect) && this.statusEffect !== StatusEffect.FAINT) { + globalScene.triggerPokemonFormChange(pokemon, SpeciesFormChangeStatusEffectTrigger, true); + // If mold breaker etc was used to set this status, it shouldn't apply to abilities activated afterwards + globalScene.arena.setIgnoreAbilities(false); + applyPostSetStatusAbAttrs(PostSetStatusAbAttr, pokemon, this.statusEffect, this.sourcePokemon); + } this.end(); }); return; diff --git a/src/phases/party-heal-phase.ts b/src/phases/party-heal-phase.ts index d95400a3f48..137af9f3a2d 100644 --- a/src/phases/party-heal-phase.ts +++ b/src/phases/party-heal-phase.ts @@ -1,5 +1,5 @@ import { globalScene } from "#app/global-scene"; -import * as Utils from "#app/utils"; +import { fixedInt } from "#app/utils"; import { BattlePhase } from "./battle-phase"; export class PartyHealPhase extends BattlePhase { @@ -23,12 +23,12 @@ export class PartyHealPhase extends BattlePhase { pokemon.hp = pokemon.getMaxHp(); pokemon.resetStatus(); for (const move of pokemon.moveset) { - move!.ppUsed = 0; // TODO: is this bang correct? + move.ppUsed = 0; } pokemon.updateInfo(true); } const healSong = globalScene.playSoundWithoutBgm("heal"); - globalScene.time.delayedCall(Utils.fixedInt(healSong.totalDuration * 1000), () => { + globalScene.time.delayedCall(fixedInt(healSong.totalDuration * 1000), () => { healSong.destroy(); if (this.resumeBgm && bgmPlaying) { globalScene.playBgm(); diff --git a/src/phases/pokemon-anim-phase.ts b/src/phases/pokemon-anim-phase.ts index b9c91508b5a..f0693a52aaa 100644 --- a/src/phases/pokemon-anim-phase.ts +++ b/src/phases/pokemon-anim-phase.ts @@ -8,18 +8,18 @@ import { Species } from "#enums/species"; export class PokemonAnimPhase extends BattlePhase { /** The type of animation to play in this phase */ - private key: PokemonAnimType; + protected key: PokemonAnimType; /** The Pokemon to which this animation applies */ - private pokemon: Pokemon; + protected pokemon: Pokemon; /** Any other field sprites affected by this animation */ - private fieldAssets: Phaser.GameObjects.Sprite[]; + protected fieldAssets: Phaser.GameObjects.Sprite[]; - constructor(key: PokemonAnimType, pokemon: Pokemon, fieldAssets?: Phaser.GameObjects.Sprite[]) { + constructor(key: PokemonAnimType, pokemon: Pokemon, fieldAssets: Phaser.GameObjects.Sprite[] = []) { super(); this.key = key; this.pokemon = pokemon; - this.fieldAssets = fieldAssets ?? []; + this.fieldAssets = fieldAssets; } start(): void { diff --git a/src/phases/pokemon-heal-phase.ts b/src/phases/pokemon-heal-phase.ts index ecfe99389eb..651c625b23a 100644 --- a/src/phases/pokemon-heal-phase.ts +++ b/src/phases/pokemon-heal-phase.ts @@ -8,7 +8,7 @@ import { getPokemonNameWithAffix } from "#app/messages"; import { HealingBoosterModifier } from "#app/modifier/modifier"; import { HealAchv } from "#app/system/achv"; import i18next from "i18next"; -import * as Utils from "#app/utils"; +import { NumberHolder } from "#app/utils"; import { CommonAnimPhase } from "./common-anim-phase"; import { BattlerTagType } from "#app/enums/battler-tag-type"; import type { HealBlockTag } from "#app/data/battler-tags"; @@ -72,11 +72,11 @@ export class PokemonHealPhase extends CommonAnimPhase { return super.end(); } if (healOrDamage) { - const hpRestoreMultiplier = new Utils.NumberHolder(1); + const hpRestoreMultiplier = new NumberHolder(1); if (!this.revive) { globalScene.applyModifiers(HealingBoosterModifier, this.player, hpRestoreMultiplier); } - const healAmount = new Utils.NumberHolder(Math.floor(this.hpHealed * hpRestoreMultiplier.value)); + const healAmount = new NumberHolder(Math.floor(this.hpHealed * hpRestoreMultiplier.value)); if (healAmount.value < 0) { pokemon.damageAndUpdate(healAmount.value * -1, { result: HitResult.INDIRECT }); healAmount.value = 0; diff --git a/src/phases/pokemon-phase.ts b/src/phases/pokemon-phase.ts index 3ca5f09f953..8c30512cdc4 100644 --- a/src/phases/pokemon-phase.ts +++ b/src/phases/pokemon-phase.ts @@ -11,11 +11,14 @@ export abstract class PokemonPhase extends FieldPhase { constructor(battlerIndex?: BattlerIndex | number) { super(); - if (battlerIndex === undefined) { - battlerIndex = globalScene + battlerIndex = + battlerIndex ?? + globalScene .getField() - .find(p => p?.isActive())! - .getBattlerIndex(); // TODO: is the bang correct here? + .find(p => p?.isActive())! // TODO: is the bang correct here? + .getBattlerIndex(); + if (battlerIndex === undefined) { + console.warn("There are no Pokemon on the field!"); // TODO: figure out a suitable fallback behavior } this.battlerIndex = battlerIndex; diff --git a/src/phases/post-game-over-phase.ts b/src/phases/post-game-over-phase.ts index f86ec8496e0..753251e992f 100644 --- a/src/phases/post-game-over-phase.ts +++ b/src/phases/post-game-over-phase.ts @@ -4,12 +4,12 @@ import type { EndCardPhase } from "./end-card-phase"; import { TitlePhase } from "./title-phase"; export class PostGameOverPhase extends Phase { - private endCardPhase: EndCardPhase | null; + private endCardPhase?: EndCardPhase; constructor(endCardPhase?: EndCardPhase) { super(); - this.endCardPhase = endCardPhase!; // TODO: is this bang correct? + this.endCardPhase = endCardPhase; } start() { diff --git a/src/phases/post-summon-phase.ts b/src/phases/post-summon-phase.ts index a7aa9389505..45b0a0f65ce 100644 --- a/src/phases/post-summon-phase.ts +++ b/src/phases/post-summon-phase.ts @@ -1,5 +1,4 @@ import { globalScene } from "#app/global-scene"; -import type { BattlerIndex } from "#app/battle"; import { applyAbAttrs, applyPostSummonAbAttrs, CommanderAbAttr, PostSummonAbAttr } from "#app/data/ability"; import { ArenaTrapTag } from "#app/data/arena-tag"; import { StatusEffect } from "#app/enums/status-effect"; diff --git a/src/phases/post-turn-status-effect-phase.ts b/src/phases/post-turn-status-effect-phase.ts index f6341666e7e..619ef22d01e 100644 --- a/src/phases/post-turn-status-effect-phase.ts +++ b/src/phases/post-turn-status-effect-phase.ts @@ -13,7 +13,7 @@ import { getStatusEffectActivationText } from "#app/data/status-effect"; import { BattleSpec } from "#app/enums/battle-spec"; import { StatusEffect } from "#app/enums/status-effect"; import { getPokemonNameWithAffix } from "#app/messages"; -import * as Utils from "#app/utils"; +import { BooleanHolder, NumberHolder } from "#app/utils"; import { PokemonPhase } from "./pokemon-phase"; export class PostTurnStatusEffectPhase extends PokemonPhase { @@ -26,7 +26,7 @@ export class PostTurnStatusEffectPhase extends PokemonPhase { const pokemon = this.getPokemon(); if (pokemon?.isActive(true) && pokemon.status && pokemon.status.isPostTurn() && !pokemon.switchOutStatus) { pokemon.status.incrementTurn(); - const cancelled = new Utils.BooleanHolder(false); + const cancelled = new BooleanHolder(false); applyAbAttrs(BlockNonDirectDamageAbAttr, pokemon, cancelled); applyAbAttrs(BlockStatusDamageAbAttr, pokemon, cancelled); @@ -34,7 +34,7 @@ export class PostTurnStatusEffectPhase extends PokemonPhase { globalScene.queueMessage( getStatusEffectActivationText(pokemon.status.effect, getPokemonNameWithAffix(pokemon)), ); - const damage = new Utils.NumberHolder(0); + const damage = new NumberHolder(0); switch (pokemon.status.effect) { case StatusEffect.POISON: damage.value = Math.max(pokemon.getMaxHp() >> 3, 1); diff --git a/src/phases/reload-session-phase.ts b/src/phases/reload-session-phase.ts index 3a4a4e0e3a5..a7ac0002b03 100644 --- a/src/phases/reload-session-phase.ts +++ b/src/phases/reload-session-phase.ts @@ -1,15 +1,15 @@ import { globalScene } from "#app/global-scene"; import { Phase } from "#app/phase"; import { Mode } from "#app/ui/ui"; -import * as Utils from "#app/utils"; +import { fixedInt } from "#app/utils"; export class ReloadSessionPhase extends Phase { - private systemDataStr: string | null; + private systemDataStr?: string; constructor(systemDataStr?: string) { super(); - this.systemDataStr = systemDataStr ?? null; + this.systemDataStr = systemDataStr; } start(): void { @@ -18,7 +18,7 @@ export class ReloadSessionPhase extends Phase { let delayElapsed = false; let loaded = false; - globalScene.time.delayedCall(Utils.fixedInt(1500), () => { + globalScene.time.delayedCall(fixedInt(1500), () => { if (loaded) { this.end(); } else { diff --git a/src/phases/reset-status-phase.ts b/src/phases/reset-status-phase.ts new file mode 100644 index 00000000000..0ba3559d9b7 --- /dev/null +++ b/src/phases/reset-status-phase.ts @@ -0,0 +1,44 @@ +import type Pokemon from "#app/field/pokemon"; +import { BattlePhase } from "#app/phases/battle-phase"; +import { BattlerTagType } from "#enums/battler-tag-type"; +import { StatusEffect } from "#enums/status-effect"; + +/** + * Phase which handles resetting a Pokemon's status to none + * + * This is necessary to perform in a phase primarly to ensure that the status icon disappears at the correct time in the battle + */ +export class ResetStatusPhase extends BattlePhase { + private readonly pokemon: Pokemon; + private readonly affectConfusion: boolean; + private readonly reloadAssets: boolean; + + constructor(pokemon: Pokemon, affectConfusion: boolean, reloadAssets: boolean) { + super(); + + this.pokemon = pokemon; + this.affectConfusion = affectConfusion; + this.reloadAssets = reloadAssets; + } + + public override start() { + const lastStatus = this.pokemon.status?.effect; + this.pokemon.status = null; + if (lastStatus === StatusEffect.SLEEP) { + this.pokemon.setFrameRate(10); + if (this.pokemon.getTag(BattlerTagType.NIGHTMARE)) { + this.pokemon.lapseTag(BattlerTagType.NIGHTMARE); + } + } + if (this.affectConfusion) { + if (this.pokemon.getTag(BattlerTagType.CONFUSED)) { + this.pokemon.lapseTag(BattlerTagType.CONFUSED); + } + } + if (this.reloadAssets) { + this.pokemon.loadAssets(false).then(() => this.pokemon.playAnim()); + } + this.pokemon.updateInfo(true); + this.end(); + } +} diff --git a/src/phases/revival-blessing-phase.ts b/src/phases/revival-blessing-phase.ts index 1ed63f76b64..f6fe4d9a3ee 100644 --- a/src/phases/revival-blessing-phase.ts +++ b/src/phases/revival-blessing-phase.ts @@ -4,7 +4,7 @@ import type { PartyOption } from "#app/ui/party-ui-handler"; import PartyUiHandler, { PartyUiMode } from "#app/ui/party-ui-handler"; import { Mode } from "#app/ui/ui"; import i18next from "i18next"; -import * as Utils from "#app/utils"; +import { toDmgValue, isNullOrUndefined } from "#app/utils"; import { BattlePhase } from "#app/phases/battle-phase"; import { SwitchSummonPhase } from "#app/phases/switch-summon-phase"; import { ToggleDoublePositionPhase } from "#app/phases/toggle-double-position-phase"; @@ -33,7 +33,7 @@ export class RevivalBlessingPhase extends BattlePhase { pokemon.resetTurnData(); pokemon.resetStatus(); - pokemon.heal(Math.min(Utils.toDmgValue(0.5 * pokemon.getMaxHp()), pokemon.getMaxHp())); + pokemon.heal(Math.min(toDmgValue(0.5 * pokemon.getMaxHp()), pokemon.getMaxHp())); globalScene.queueMessage( i18next.t("moveTriggers:revivalBlessing", { pokemonName: pokemon.name, @@ -42,8 +42,12 @@ export class RevivalBlessingPhase extends BattlePhase { true, ); - if (globalScene.currentBattle.double && globalScene.getPlayerParty().length > 1) { - const allyPokemon = this.user.getAlly(); + const allyPokemon = this.user.getAlly(); + if ( + globalScene.currentBattle.double && + globalScene.getPlayerParty().length > 1 && + !isNullOrUndefined(allyPokemon) + ) { if (slotIndex <= 1) { // Revived ally pokemon globalScene.unshiftPhase( diff --git a/src/phases/scan-ivs-phase.ts b/src/phases/scan-ivs-phase.ts index 2a2d68591ca..aaeeb7f84f8 100644 --- a/src/phases/scan-ivs-phase.ts +++ b/src/phases/scan-ivs-phase.ts @@ -8,6 +8,7 @@ import i18next from "i18next"; import { PokemonPhase } from "./pokemon-phase"; export class ScanIvsPhase extends PokemonPhase { + // biome-ignore lint/complexity/noUselessConstructor: This changes `battlerIndex` to be required constructor(battlerIndex: BattlerIndex) { super(battlerIndex); } @@ -24,7 +25,8 @@ export class ScanIvsPhase extends PokemonPhase { const uiTheme = globalScene.uiTheme; // Assuming uiTheme is accessible for (let e = 0; e < enemyField.length; e++) { enemyIvs = enemyField[e].ivs; - const currentIvs = globalScene.gameData.dexData[enemyField[e].species.getRootSpeciesId()].ivs; // we are using getRootSpeciesId() here because we want to check against the baby form, not the mid form if it exists + // we are using getRootSpeciesId() here because we want to check against the baby form, not the mid form if it exists + const currentIvs = globalScene.gameData.dexData[enemyField[e].species.getRootSpeciesId()].ivs; statsContainer = enemyField[e].getBattleInfo().getStatsValueContainer().list as Phaser.GameObjects.Sprite[]; statsContainerLabels = statsContainer.filter(m => m.name.indexOf("icon_stat_label") >= 0); for (let s = 0; s < statsContainerLabels.length; s++) { diff --git a/src/phases/select-biome-phase.ts b/src/phases/select-biome-phase.ts index 6a11967832a..b27e2d0e7cc 100644 --- a/src/phases/select-biome-phase.ts +++ b/src/phases/select-biome-phase.ts @@ -5,15 +5,11 @@ import { MoneyInterestModifier, MapModifier } from "#app/modifier/modifier"; import type { OptionSelectItem } from "#app/ui/abstact-option-select-ui-handler"; import { Mode } from "#app/ui/ui"; import { BattlePhase } from "./battle-phase"; -import * as Utils from "#app/utils"; +import { randSeedInt } from "#app/utils"; import { PartyHealPhase } from "./party-heal-phase"; import { SwitchBiomePhase } from "./switch-biome-phase"; export class SelectBiomePhase extends BattlePhase { - constructor() { - super(); - } - start() { super.start(); @@ -37,24 +33,12 @@ export class SelectBiomePhase extends BattlePhase { } else if (globalScene.gameMode.hasRandomBiomes) { setNextBiome(this.generateNextBiome()); } else if (Array.isArray(biomeLinks[currentBiome])) { - let biomes: Biome[] = []; - globalScene.executeWithSeedOffset(() => { - biomes = (biomeLinks[currentBiome] as (Biome | [Biome, number])[]) - .filter(b => !Array.isArray(b) || !Utils.randSeedInt(b[1])) - .map(b => (!Array.isArray(b) ? b : b[0])); - }, globalScene.currentBattle.waveIndex); + const biomes: Biome[] = (biomeLinks[currentBiome] as (Biome | [Biome, number])[]) + .filter(b => !Array.isArray(b) || !randSeedInt(b[1])) + .map(b => (!Array.isArray(b) ? b : b[0])); + if (biomes.length > 1 && globalScene.findModifier(m => m instanceof MapModifier)) { - let biomeChoices: Biome[] = []; - globalScene.executeWithSeedOffset(() => { - biomeChoices = ( - !Array.isArray(biomeLinks[currentBiome]) - ? [biomeLinks[currentBiome] as Biome] - : (biomeLinks[currentBiome] as (Biome | [Biome, number])[]) - ) - .filter((b, _i) => !Array.isArray(b) || !Utils.randSeedInt(b[1])) - .map(b => (Array.isArray(b) ? b[0] : b)); - }, globalScene.currentBattle.waveIndex); - const biomeSelectItems = biomeChoices.map(b => { + const biomeSelectItems = biomes.map(b => { const ret: OptionSelectItem = { label: getBiomeName(b), handler: () => { @@ -70,7 +54,7 @@ export class SelectBiomePhase extends BattlePhase { delay: 1000, }); } else { - setNextBiome(biomes[Utils.randSeedInt(biomes.length)]); + setNextBiome(biomes[randSeedInt(biomes.length)]); } } else if (biomeLinks.hasOwnProperty(currentBiome)) { setNextBiome(biomeLinks[currentBiome] as Biome); diff --git a/src/phases/select-challenge-phase.ts b/src/phases/select-challenge-phase.ts index 2a6797d3556..5e6f20f93ee 100644 --- a/src/phases/select-challenge-phase.ts +++ b/src/phases/select-challenge-phase.ts @@ -3,10 +3,6 @@ import { Phase } from "#app/phase"; import { Mode } from "#app/ui/ui"; export class SelectChallengePhase extends Phase { - constructor() { - super(); - } - start() { super.start(); diff --git a/src/phases/select-gender-phase.ts b/src/phases/select-gender-phase.ts index 1c86536de53..4da60b38aa1 100644 --- a/src/phases/select-gender-phase.ts +++ b/src/phases/select-gender-phase.ts @@ -6,10 +6,6 @@ import { Mode } from "#app/ui/ui"; import i18next from "i18next"; export class SelectGenderPhase extends Phase { - constructor() { - super(); - } - start(): void { super.start(); diff --git a/src/phases/select-modifier-phase.ts b/src/phases/select-modifier-phase.ts index 11d448876d3..27ab7e374a2 100644 --- a/src/phases/select-modifier-phase.ts +++ b/src/phases/select-modifier-phase.ts @@ -26,7 +26,6 @@ import { SHOP_OPTIONS_ROW_LIMIT } from "#app/ui/modifier-select-ui-handler"; import PartyUiHandler, { PartyUiMode, PartyOption } from "#app/ui/party-ui-handler"; import { Mode } from "#app/ui/ui"; import i18next from "i18next"; -import * as Utils from "#app/utils"; import { BattlePhase } from "./battle-phase"; import Overrides from "#app/overrides"; import type { CustomModifierSettings } from "#app/modifier/modifier-type"; @@ -67,7 +66,7 @@ export class SelectModifierPhase extends BattlePhase { if (!this.isCopy) { regenerateModifierPoolThresholds(party, this.getPoolType(), this.rerollCount); } - const modifierCount = new Utils.NumberHolder(3); + const modifierCount = new NumberHolder(3); if (this.isPlayer()) { globalScene.applyModifiers(ExtraModifierModifier, true, modifierCount); globalScene.applyModifiers(TempExtraModifierModifier, true, modifierCount); diff --git a/src/phases/select-starter-phase.ts b/src/phases/select-starter-phase.ts index 0f4360b0af6..35511531609 100644 --- a/src/phases/select-starter-phase.ts +++ b/src/phases/select-starter-phase.ts @@ -12,13 +12,9 @@ import type { Starter } from "#app/ui/starter-select-ui-handler"; import { Mode } from "#app/ui/ui"; import type { Species } from "#enums/species"; import SoundFade from "phaser3-rex-plugins/plugins/soundfade"; -import * as Utils from "../utils"; +import { isNullOrUndefined } from "#app/utils"; export class SelectStarterPhase extends Phase { - constructor() { - super(); - } - start() { super.start(); @@ -53,7 +49,7 @@ export class SelectStarterPhase extends Phase { let starterFormIndex = Math.min(starterProps.formIndex, Math.max(starter.species.forms.length - 1, 0)); if ( starter.species.speciesId in Overrides.STARTER_FORM_OVERRIDES && - !Utils.isNullOrUndefined(Overrides.STARTER_FORM_OVERRIDES[starter.species.speciesId]) && + !isNullOrUndefined(Overrides.STARTER_FORM_OVERRIDES[starter.species.speciesId]) && starter.species.forms[Overrides.STARTER_FORM_OVERRIDES[starter.species.speciesId]!] ) { starterFormIndex = Overrides.STARTER_FORM_OVERRIDES[starter.species.speciesId]!; @@ -91,7 +87,7 @@ export class SelectStarterPhase extends Phase { starterPokemon.nickname = starter.nickname; } - if (!Utils.isNullOrUndefined(starter.teraType)) { + if (!isNullOrUndefined(starter.teraType)) { starterPokemon.teraType = starter.teraType; } else { starterPokemon.teraType = starterPokemon.species.type1; @@ -101,7 +97,7 @@ export class SelectStarterPhase extends Phase { starterPokemon.generateFusionSpecies(true); } starterPokemon.setVisible(false); - applyChallenges(globalScene.gameMode, ChallengeType.STARTER_MODIFY, starterPokemon); + applyChallenges(ChallengeType.STARTER_MODIFY, starterPokemon); party.push(starterPokemon); loadPokemonAssets.push(starterPokemon.loadAssets()); }); diff --git a/src/phases/select-target-phase.ts b/src/phases/select-target-phase.ts index 2042d0a3fcf..035eaff41fa 100644 --- a/src/phases/select-target-phase.ts +++ b/src/phases/select-target-phase.ts @@ -8,6 +8,7 @@ import i18next from "#app/plugins/i18n"; import { allMoves } from "#app/data/moves/move"; export class SelectTargetPhase extends PokemonPhase { + // biome-ignore lint/complexity/noUselessConstructor: This makes `fieldIndex` required constructor(fieldIndex: number) { super(fieldIndex); } diff --git a/src/phases/shiny-sparkle-phase.ts b/src/phases/shiny-sparkle-phase.ts index 2540d98fb79..87a7db29cf6 100644 --- a/src/phases/shiny-sparkle-phase.ts +++ b/src/phases/shiny-sparkle-phase.ts @@ -3,6 +3,7 @@ import type { BattlerIndex } from "#app/battle"; import { PokemonPhase } from "./pokemon-phase"; export class ShinySparklePhase extends PokemonPhase { + // biome-ignore lint/complexity/noUselessConstructor: This makes `battlerIndex` required constructor(battlerIndex: BattlerIndex) { super(battlerIndex); } diff --git a/src/phases/show-ability-phase.ts b/src/phases/show-ability-phase.ts index 1b3c6dde568..8097af33fe0 100644 --- a/src/phases/show-ability-phase.ts +++ b/src/phases/show-ability-phase.ts @@ -35,7 +35,7 @@ export class ShowAbilityPhase extends PokemonPhase { // If the bar is already out, hide it before showing the new one if (globalScene.abilityBar.isVisible()) { - globalScene.unshiftPhase(new HideAbilityPhase(this.battlerIndex, this.passive)); + globalScene.unshiftPhase(new HideAbilityPhase()); globalScene.unshiftPhase(new ShowAbilityPhase(this.battlerIndex, this.passive)); return this.end(); } diff --git a/src/phases/show-party-exp-bar-phase.ts b/src/phases/show-party-exp-bar-phase.ts index 568b8b615c8..139f4efcc49 100644 --- a/src/phases/show-party-exp-bar-phase.ts +++ b/src/phases/show-party-exp-bar-phase.ts @@ -2,7 +2,7 @@ import { globalScene } from "#app/global-scene"; import { ExpGainsSpeed } from "#app/enums/exp-gains-speed"; import { ExpNotification } from "#app/enums/exp-notification"; import { ExpBoosterModifier } from "#app/modifier/modifier"; -import * as Utils from "#app/utils"; +import { NumberHolder } from "#app/utils"; import { HidePartyExpBarPhase } from "./hide-party-exp-bar-phase"; import { LevelUpPhase } from "./level-up-phase"; import { PlayerPartyMemberPokemonPhase } from "./player-party-member-pokemon-phase"; @@ -20,7 +20,7 @@ export class ShowPartyExpBarPhase extends PlayerPartyMemberPokemonPhase { super.start(); const pokemon = this.getPokemon(); - const exp = new Utils.NumberHolder(this.expValue); + const exp = new NumberHolder(this.expValue); globalScene.applyModifiers(ExpBoosterModifier, true, exp); exp.value = Math.floor(exp.value); diff --git a/src/phases/show-trainer-phase.ts b/src/phases/show-trainer-phase.ts index 740c11f5c5d..b6c1e345c70 100644 --- a/src/phases/show-trainer-phase.ts +++ b/src/phases/show-trainer-phase.ts @@ -3,10 +3,6 @@ import { PlayerGender } from "#app/enums/player-gender"; import { BattlePhase } from "./battle-phase"; export class ShowTrainerPhase extends BattlePhase { - constructor() { - super(); - } - start() { super.start(); diff --git a/src/phases/stat-stage-change-phase.ts b/src/phases/stat-stage-change-phase.ts index 71b50fa9dce..4c82661a3bb 100644 --- a/src/phases/stat-stage-change-phase.ts +++ b/src/phases/stat-stage-change-phase.ts @@ -4,6 +4,7 @@ import { applyAbAttrs, applyPostStatStageChangeAbAttrs, applyPreStatStageChangeAbAttrs, + ConditionalUserFieldProtectStatAbAttr, PostStatStageChangeAbAttr, ProtectStatAbAttr, ReflectStatStageChangeAbAttr, @@ -16,7 +17,7 @@ import type Pokemon from "#app/field/pokemon"; import { getPokemonNameWithAffix } from "#app/messages"; import { ResetNegativeStatStageModifier } from "#app/modifier/modifier"; import { handleTutorial, Tutorial } from "#app/tutorial"; -import { NumberHolder, BooleanHolder } from "#app/utils"; +import { NumberHolder, BooleanHolder, isNullOrUndefined } from "#app/utils"; import i18next from "i18next"; import { PokemonPhase } from "./pokemon-phase"; import { Stat, type BattleStat, getStatKey, getStatStageChangeDescriptionKey } from "#enums/stat"; @@ -151,6 +152,25 @@ export class StatStageChangePhase extends PokemonPhase { if (!cancelled.value && !this.selfTarget && stages.value < 0) { applyPreStatStageChangeAbAttrs(ProtectStatAbAttr, pokemon, stat, cancelled, simulate); + applyPreStatStageChangeAbAttrs( + ConditionalUserFieldProtectStatAbAttr, + pokemon, + stat, + cancelled, + simulate, + pokemon, + ); + const ally = pokemon.getAlly(); + if (!isNullOrUndefined(ally)) { + applyPreStatStageChangeAbAttrs( + ConditionalUserFieldProtectStatAbAttr, + ally, + stat, + cancelled, + simulate, + pokemon, + ); + } /** Potential stat reflection due to Mirror Armor, does not apply to Octolock end of turn effect */ if ( diff --git a/src/phases/summon-missing-phase.ts b/src/phases/summon-missing-phase.ts index 32bc7495dce..a692455ce47 100644 --- a/src/phases/summon-missing-phase.ts +++ b/src/phases/summon-missing-phase.ts @@ -4,10 +4,6 @@ import { SummonPhase } from "./summon-phase"; import { globalScene } from "#app/global-scene"; export class SummonMissingPhase extends SummonPhase { - constructor(fieldIndex: number) { - super(fieldIndex); - } - preSummon(): void { globalScene.ui.showText( i18next.t("battle:sendOutPokemon", { diff --git a/src/phases/summon-phase.ts b/src/phases/summon-phase.ts index 42463e7edb0..7379d509e55 100644 --- a/src/phases/summon-phase.ts +++ b/src/phases/summon-phase.ts @@ -1,7 +1,7 @@ import { BattleType } from "#app/battle"; import { getPokeballAtlasKey, getPokeballTintColor } from "#app/data/pokeball"; import { SpeciesFormChangeActiveTrigger } from "#app/data/pokemon-forms"; -import { TrainerSlot } from "#app/data/trainer-config"; +import { TrainerSlot } from "#enums/trainer-slot"; import { PlayerGender } from "#app/enums/player-gender"; import { addPokeballOpenParticles } from "#app/field/anims"; import type Pokemon from "#app/field/pokemon"; @@ -13,6 +13,7 @@ import { PostSummonPhase } from "./post-summon-phase"; import { GameOverPhase } from "./game-over-phase"; import { ShinySparklePhase } from "./shiny-sparkle-phase"; import { MysteryEncounterMode } from "#enums/mystery-encounter-mode"; +import { applyPreSummonAbAttrs, PreSummonAbAttr } from "#app/data/ability"; import { globalScene } from "#app/global-scene"; export class SummonPhase extends PartyMemberPokemonPhase { @@ -27,6 +28,7 @@ export class SummonPhase extends PartyMemberPokemonPhase { start() { super.start(); + applyPreSummonAbAttrs(PreSummonAbAttr, this.getPokemon()); this.preSummon(); } @@ -126,7 +128,7 @@ export class SummonPhase extends PartyMemberPokemonPhase { this.player ? 36 : 248, this.player ? 80 : 44, "pb", - getPokeballAtlasKey(pokemon.pokeball), + getPokeballAtlasKey(pokemon.getPokeball(true)), ); pokeball.setVisible(false); pokeball.setOrigin(0.5, 0.625); @@ -175,7 +177,11 @@ export class SummonPhase extends PartyMemberPokemonPhase { } globalScene.currentBattle.seenEnemyPartyMemberIds.add(pokemon.id); } - addPokeballOpenParticles(pokemon.x, pokemon.y - 16, pokemon.pokeball); + addPokeballOpenParticles( + pokemon.x, + pokemon.y - 16, + pokemon.getPokeball(true), + ); globalScene.updateModifiers(this.player); globalScene.updateFieldScale(); pokemon.showInfo(); @@ -183,7 +189,7 @@ export class SummonPhase extends PartyMemberPokemonPhase { pokemon.setVisible(true); pokemon.getSprite().setVisible(true); pokemon.setScale(0.5); - pokemon.tint(getPokeballTintColor(pokemon.pokeball)); + pokemon.tint(getPokeballTintColor(pokemon.getPokeball(true))); pokemon.untint(250, "Sine.easeIn"); globalScene.updateFieldScale(); globalScene.tweens.add({ @@ -270,7 +276,7 @@ export class SummonPhase extends PartyMemberPokemonPhase { onEnd(): void { const pokemon = this.getPokemon(); - if (pokemon.isShiny()) { + if (pokemon.isShiny(true)) { globalScene.unshiftPhase(new ShinySparklePhase(pokemon.getBattlerIndex())); } diff --git a/src/phases/switch-summon-phase.ts b/src/phases/switch-summon-phase.ts index 48bcd0c4ebd..d63cdb90f25 100644 --- a/src/phases/switch-summon-phase.ts +++ b/src/phases/switch-summon-phase.ts @@ -1,9 +1,15 @@ import { globalScene } from "#app/global-scene"; -import { applyPreSwitchOutAbAttrs, PostDamageForceSwitchAbAttr, PreSwitchOutAbAttr } from "#app/data/ability"; +import { + applyPreSummonAbAttrs, + applyPreSwitchOutAbAttrs, + PostDamageForceSwitchAbAttr, + PreSummonAbAttr, + PreSwitchOutAbAttr, +} from "#app/data/ability"; import { allMoves, ForceSwitchOutAttr } from "#app/data/moves/move"; import { getPokeballTintColor } from "#app/data/pokeball"; import { SpeciesFormChangeActiveTrigger } from "#app/data/pokemon-forms"; -import { TrainerSlot } from "#app/data/trainer-config"; +import { TrainerSlot } from "#enums/trainer-slot"; import type Pokemon from "#app/field/pokemon"; import { getPokemonNameWithAffix } from "#app/messages"; import { SwitchEffectTransferModifier } from "#app/modifier/modifier"; @@ -23,11 +29,11 @@ export class SwitchSummonPhase extends SummonPhase { /** * Constructor for creating a new SwitchSummonPhase - * @param switchType the type of switch behavior - * @param fieldIndex integer representing position on the battle field - * @param slotIndex integer for the index of pokemon (in party of 6) to switch into - * @param doReturn boolean whether to render "comeback" dialogue - * @param player boolean if the switch is from the player + * @param switchType - The type of switch behavior + * @param fieldIndex - Position on the battle field + * @param slotIndex - The index of pokemon (in party of 6) to switch into + * @param doReturn - Whether to render "comeback" dialogue + * @param player - (Optional) `true` if the switch is from the player */ constructor(switchType: SwitchType, fieldIndex: number, slotIndex: number, doReturn: boolean, player?: boolean) { super(fieldIndex, player !== undefined ? player : true); @@ -99,7 +105,7 @@ export class SwitchSummonPhase extends SummonPhase { ); globalScene.playSound("se/pb_rel"); pokemon.hideInfo(); - pokemon.tint(getPokeballTintColor(pokemon.pokeball), 1, 250, "Sine.easeIn"); + pokemon.tint(getPokeballTintColor(pokemon.getPokeball(true)), 1, 250, "Sine.easeIn"); globalScene.tweens.add({ targets: pokemon, duration: 250, @@ -116,6 +122,7 @@ export class SwitchSummonPhase extends SummonPhase { const party = this.player ? this.getParty() : globalScene.getEnemyParty(); const switchedInPokemon = party[this.slotIndex]; this.lastPokemon = this.getPokemon(); + applyPreSummonAbAttrs(PreSummonAbAttr, switchedInPokemon); applyPreSwitchOutAbAttrs(PreSwitchOutAbAttr, this.lastPokemon); if (this.switchType === SwitchType.BATON_PASS && switchedInPokemon) { (this.player ? globalScene.getEnemyField() : globalScene.getPlayerField()).forEach(enemyPokemon => diff --git a/src/phases/test-message-phase.ts b/src/phases/test-message-phase.ts deleted file mode 100644 index d5e74efd490..00000000000 --- a/src/phases/test-message-phase.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { MessagePhase } from "./message-phase"; - -export class TestMessagePhase extends MessagePhase { - constructor(message: string) { - super(message, null, true); - } -} diff --git a/src/phases/title-phase.ts b/src/phases/title-phase.ts index 5b69f8db45c..108366d4774 100644 --- a/src/phases/title-phase.ts +++ b/src/phases/title-phase.ts @@ -18,7 +18,7 @@ import { vouchers } from "#app/system/voucher"; import type { OptionSelectConfig, OptionSelectItem } from "#app/ui/abstact-option-select-ui-handler"; import { SaveSlotUiMode } from "#app/ui/save-slot-select-ui-handler"; import { Mode } from "#app/ui/ui"; -import * as Utils from "#app/utils"; +import { isLocal, isLocalServerConnected, isNullOrUndefined } from "#app/utils"; import i18next from "i18next"; import { CheckSwitchPhase } from "./check-switch-phase"; import { EncounterPhase } from "./encounter-phase"; @@ -29,16 +29,10 @@ import { globalScene } from "#app/global-scene"; import Overrides from "#app/overrides"; export class TitlePhase extends Phase { - private loaded: boolean; + private loaded = false; private lastSessionData: SessionSaveData; public gameMode: GameModes; - constructor() { - super(); - - this.loaded = false; - } - start(): void { super.start(); @@ -212,6 +206,8 @@ export class TitlePhase extends Phase { const generateDaily = (seed: string) => { globalScene.gameMode = getGameMode(GameModes.DAILY); + // Daily runs don't support all challenges yet (starter select restrictions aren't considered) + globalScene.eventManager.startEventChallenges(); globalScene.setSeed(seed); globalScene.resetSeed(0); @@ -280,7 +276,7 @@ export class TitlePhase extends Phase { }; // If Online, calls seed fetch from db to generate daily run. If Offline, generates a daily run based on current date. - if (!Utils.isLocal || Utils.isLocalServerConnected) { + if (!isLocal || isLocalServerConnected) { fetchDailyRunSeed() .then(seed => { if (seed) { @@ -294,7 +290,7 @@ export class TitlePhase extends Phase { }); } else { let seed: string = btoa(new Date().toISOString().substring(0, 10)); - if (!Utils.isNullOrUndefined(Overrides.DAILY_RUN_SEED_OVERRIDE)) { + if (!isNullOrUndefined(Overrides.DAILY_RUN_SEED_OVERRIDE)) { seed = Overrides.DAILY_RUN_SEED_OVERRIDE; } generateDaily(seed); diff --git a/src/phases/trainer-message-test-phase.ts b/src/phases/trainer-message-test-phase.ts deleted file mode 100644 index fa3f553cdd6..00000000000 --- a/src/phases/trainer-message-test-phase.ts +++ /dev/null @@ -1,47 +0,0 @@ -import { globalScene } from "#app/global-scene"; -import { trainerConfigs } from "#app/data/trainer-config"; -import type { TrainerType } from "#app/enums/trainer-type"; -import { BattlePhase } from "./battle-phase"; -import { TestMessagePhase } from "./test-message-phase"; - -export class TrainerMessageTestPhase extends BattlePhase { - private trainerTypes: TrainerType[]; - - constructor(...trainerTypes: TrainerType[]) { - super(); - - this.trainerTypes = trainerTypes; - } - - start() { - super.start(); - - const testMessages: string[] = []; - - for (const t of Object.keys(trainerConfigs)) { - const type = Number.parseInt(t); - if (this.trainerTypes.length && !this.trainerTypes.find(tt => tt === (type as TrainerType))) { - continue; - } - const config = trainerConfigs[type]; - [ - config.encounterMessages, - config.femaleEncounterMessages, - config.victoryMessages, - config.femaleVictoryMessages, - config.defeatMessages, - config.femaleDefeatMessages, - ].map(messages => { - if (messages?.length) { - testMessages.push(...messages); - } - }); - } - - for (const message of testMessages) { - globalScene.pushPhase(new TestMessagePhase(message)); - } - - this.end(); - } -} diff --git a/src/phases/trainer-victory-phase.ts b/src/phases/trainer-victory-phase.ts index 024c1e3f837..637ddea8b56 100644 --- a/src/phases/trainer-victory-phase.ts +++ b/src/phases/trainer-victory-phase.ts @@ -3,20 +3,17 @@ import { TrainerType } from "#app/enums/trainer-type"; import { modifierTypes } from "#app/modifier/modifier-type"; import { vouchers } from "#app/system/voucher"; import i18next from "i18next"; -import * as Utils from "#app/utils"; +import { randSeedItem } from "#app/utils"; import { BattlePhase } from "./battle-phase"; import { ModifierRewardPhase } from "./modifier-reward-phase"; import { MoneyRewardPhase } from "./money-reward-phase"; -import { TrainerSlot } from "#app/data/trainer-config"; +import { TrainerSlot } from "#enums/trainer-slot"; import { globalScene } from "#app/global-scene"; import { Biome } from "#app/enums/biome"; import { achvs } from "#app/system/achv"; +import { timedEventManager } from "#app/global-event-manager"; export class TrainerVictoryPhase extends BattlePhase { - constructor() { - super(); - } - start() { globalScene.disableMenu = true; @@ -29,7 +26,7 @@ export class TrainerVictoryPhase extends BattlePhase { globalScene.unshiftPhase(new ModifierRewardPhase(modifierRewardFunc)); } - if (globalScene.eventManager.isEventActive()) { + if (timedEventManager.isEventActive()) { for (const rewardFunc of globalScene.currentBattle.trainer?.config.eventRewardFuncs!) { globalScene.unshiftPhase(new ModifierRewardPhase(rewardFunc)); } @@ -42,7 +39,7 @@ export class TrainerVictoryPhase extends BattlePhase { !globalScene.validateVoucher(vouchers[TrainerType[trainerType]]) && globalScene.currentBattle.trainer?.config.isBoss ) { - if (globalScene.eventManager.getUpgradeUnlockedVouchers()) { + if (timedEventManager.getUpgradeUnlockedVouchers()) { globalScene.unshiftPhase( new ModifierRewardPhase( [ @@ -81,7 +78,7 @@ export class TrainerVictoryPhase extends BattlePhase { const victoryMessages = globalScene.currentBattle.trainer?.getVictoryMessages()!; // TODO: is this bang correct? let message: string; globalScene.executeWithSeedOffset( - () => (message = Utils.randSeedItem(victoryMessages)), + () => (message = randSeedItem(victoryMessages)), globalScene.currentBattle.waveIndex, ); message = message!; // tell TS compiler it's defined now diff --git a/src/phases/turn-end-phase.ts b/src/phases/turn-end-phase.ts index c55f6d69a58..9b84ea05e58 100644 --- a/src/phases/turn-end-phase.ts +++ b/src/phases/turn-end-phase.ts @@ -18,16 +18,14 @@ import { PokemonHealPhase } from "./pokemon-heal-phase"; import { globalScene } from "#app/global-scene"; export class TurnEndPhase extends FieldPhase { - constructor() { - super(); - } - start() { super.start(); globalScene.currentBattle.incrementTurn(); globalScene.eventTarget.dispatchEvent(new TurnEndEvent(globalScene.currentBattle.turn)); + globalScene.hideAbilityBar(); + const handlePokemon = (pokemon: Pokemon) => { if (!pokemon.switchOutStatus) { pokemon.lapseTags(BattlerTagLapseType.TURN_END); @@ -68,12 +66,12 @@ export class TurnEndPhase extends FieldPhase { globalScene.arena.lapseTags(); if (globalScene.arena.weather && !globalScene.arena.weather.lapse()) { - globalScene.arena.trySetWeather(WeatherType.NONE, false); + globalScene.arena.trySetWeather(WeatherType.NONE); globalScene.arena.triggerWeatherBasedFormChangesToNormal(); } if (globalScene.arena.terrain && !globalScene.arena.terrain.lapse()) { - globalScene.arena.trySetTerrain(TerrainType.NONE, false); + globalScene.arena.trySetTerrain(TerrainType.NONE); } this.end(); diff --git a/src/phases/turn-init-phase.ts b/src/phases/turn-init-phase.ts index 3104b65eb3f..0c110024af7 100644 --- a/src/phases/turn-init-phase.ts +++ b/src/phases/turn-init-phase.ts @@ -15,10 +15,6 @@ import { TurnStartPhase } from "./turn-start-phase"; import { globalScene } from "#app/global-scene"; export class TurnInitPhase extends FieldPhase { - constructor() { - super(); - } - start() { super.start(); diff --git a/src/phases/turn-start-phase.ts b/src/phases/turn-start-phase.ts index 6065a0caf6e..d5b4160fe1b 100644 --- a/src/phases/turn-start-phase.ts +++ b/src/phases/turn-start-phase.ts @@ -6,7 +6,7 @@ import type Pokemon from "#app/field/pokemon"; import { PokemonMove } from "#app/field/pokemon"; import { BypassSpeedChanceModifier } from "#app/modifier/modifier"; import { Command } from "#app/ui/command-ui-handler"; -import * as Utils from "#app/utils"; +import { randSeedShuffle, BooleanHolder } from "#app/utils"; import { AttemptCapturePhase } from "./attempt-capture-phase"; import { AttemptRunPhase } from "./attempt-run-phase"; import { BerryPhase } from "./berry-phase"; @@ -24,10 +24,6 @@ import { globalScene } from "#app/global-scene"; import { TeraPhase } from "./tera-phase"; export class TurnStartPhase extends FieldPhase { - constructor() { - super(); - } - /** * This orders the active Pokemon on the field by speed into an BattlerIndex array and returns that array. * It also checks for Trick Room and reverses the array if it is present. @@ -43,14 +39,14 @@ export class TurnStartPhase extends FieldPhase { // was varying based on how long since you last reloaded globalScene.executeWithSeedOffset( () => { - orderedTargets = Utils.randSeedShuffle(orderedTargets); + orderedTargets = randSeedShuffle(orderedTargets); }, globalScene.currentBattle.turn, globalScene.waveSeed, ); // Next, a check for Trick Room is applied to determine sort order. - const speedReversed = new Utils.BooleanHolder(false); + const speedReversed = new BooleanHolder(false); globalScene.arena.applyTags(TrickRoomTag, false, speedReversed); // Adjust the sort function based on whether Trick Room is active. @@ -80,8 +76,8 @@ export class TurnStartPhase extends FieldPhase { .getField(true) .filter(p => p.summonData) .map(p => { - const bypassSpeed = new Utils.BooleanHolder(false); - const canCheckHeldItems = new Utils.BooleanHolder(true); + const bypassSpeed = new BooleanHolder(false); + const canCheckHeldItems = new BooleanHolder(true); applyAbAttrs(BypassSpeedChanceAbAttr, p, null, false, bypassSpeed); applyAbAttrs(PreventBypassSpeedChanceAbAttr, p, null, false, bypassSpeed, canCheckHeldItems); if (canCheckHeldItems.value) { @@ -178,7 +174,7 @@ export class TurnStartPhase extends FieldPhase { continue; } const move = - pokemon.getMoveset().find(m => m?.moveId === queuedMove.move && m?.ppUsed < m?.getMovePp()) || + pokemon.getMoveset().find(m => m.moveId === queuedMove.move && m.ppUsed < m.getMovePp()) || new PokemonMove(queuedMove.move); if (move.getMove().hasAttr(MoveHeaderAttr)) { globalScene.unshiftPhase(new MoveHeaderPhase(pokemon, move)); diff --git a/src/phases/unavailable-phase.ts b/src/phases/unavailable-phase.ts index c0b5d4224c5..33042739971 100644 --- a/src/phases/unavailable-phase.ts +++ b/src/phases/unavailable-phase.ts @@ -4,10 +4,6 @@ import { Mode } from "#app/ui/ui"; import { LoginPhase } from "./login-phase"; export class UnavailablePhase extends Phase { - constructor() { - super(); - } - start(): void { globalScene.ui.setMode(Mode.UNAVAILABLE, () => { globalScene.unshiftPhase(new LoginPhase(true)); diff --git a/src/phases/weather-effect-phase.ts b/src/phases/weather-effect-phase.ts index d7a1f193029..5284c9fba85 100644 --- a/src/phases/weather-effect-phase.ts +++ b/src/phases/weather-effect-phase.ts @@ -15,7 +15,7 @@ import { BattlerTagType } from "#app/enums/battler-tag-type"; import { WeatherType } from "#app/enums/weather-type"; import type Pokemon from "#app/field/pokemon"; import { HitResult } from "#app/field/pokemon"; -import * as Utils from "#app/utils"; +import { BooleanHolder, toDmgValue } from "#app/utils"; import { CommonAnimPhase } from "./common-anim-phase"; export class WeatherEffectPhase extends CommonAnimPhase { @@ -35,14 +35,13 @@ export class WeatherEffectPhase extends CommonAnimPhase { this.weather = globalScene?.arena?.weather; if (!this.weather) { - this.end(); - return; + return this.end(); } this.setAnimation(CommonAnim.SUNNY + (this.weather.weatherType - 1)); if (this.weather.isDamaging()) { - const cancelled = new Utils.BooleanHolder(false); + const cancelled = new BooleanHolder(false); this.executeForAll((pokemon: Pokemon) => applyPreWeatherEffectAbAttrs(SuppressWeatherEffectAbAttr, pokemon, this.weather, cancelled), @@ -50,7 +49,7 @@ export class WeatherEffectPhase extends CommonAnimPhase { if (!cancelled.value) { const inflictDamage = (pokemon: Pokemon) => { - const cancelled = new Utils.BooleanHolder(false); + const cancelled = new BooleanHolder(false); applyPreWeatherEffectAbAttrs(PreWeatherDamageAbAttr, pokemon, this.weather, cancelled); applyAbAttrs(BlockNonDirectDamageAbAttr, pokemon, cancelled); @@ -63,9 +62,9 @@ export class WeatherEffectPhase extends CommonAnimPhase { return; } - const damage = Utils.toDmgValue(pokemon.getMaxHp() / 16); + const damage = toDmgValue(pokemon.getMaxHp() / 16); - globalScene.queueMessage(getWeatherDamageMessage(this.weather?.weatherType!, pokemon)!); // TODO: are those bangs correct? + globalScene.queueMessage(getWeatherDamageMessage(this.weather!.weatherType, pokemon) ?? ""); pokemon.damageAndUpdate(damage, { result: HitResult.INDIRECT, ignoreSegments: true }); }; diff --git a/src/pipelines/field-sprite.ts b/src/pipelines/field-sprite.ts index 547281d7dee..a55b6a9adb6 100644 --- a/src/pipelines/field-sprite.ts +++ b/src/pipelines/field-sprite.ts @@ -1,210 +1,8 @@ import { globalScene } from "#app/global-scene"; import { TerrainType, getTerrainColor } from "../data/terrain"; -import * as Utils from "../utils"; - -const spriteFragShader = ` -#ifdef GL_FRAGMENT_PRECISION_HIGH -precision highp float; -#else -precision mediump float; -#endif - -uniform sampler2D uMainSampler[%count%]; - -varying vec2 outTexCoord; -varying float outTexId; -varying float outTintEffect; -varying vec4 outTint; - -uniform float time; -uniform int ignoreTimeTint; -uniform int isOutside; -uniform vec3 dayTint; -uniform vec3 duskTint; -uniform vec3 nightTint; -uniform vec3 terrainColor; -uniform float terrainColorRatio; - -float blendOverlay(float base, float blend) { - return base<0.5?(2.0*base*blend):(1.0-2.0*(1.0-base)*(1.0-blend)); -} - -vec3 blendOverlay(vec3 base, vec3 blend) { - return vec3(blendOverlay(base.r,blend.r),blendOverlay(base.g,blend.g),blendOverlay(base.b,blend.b)); -} - -vec3 blendHardLight(vec3 base, vec3 blend) { - return blendOverlay(blend, base); -} - -float hue2rgb(float f1, float f2, float hue) { - if (hue < 0.0) - hue += 1.0; - else if (hue > 1.0) - hue -= 1.0; - float res; - if ((6.0 * hue) < 1.0) - res = f1 + (f2 - f1) * 6.0 * hue; - else if ((2.0 * hue) < 1.0) - res = f2; - else if ((3.0 * hue) < 2.0) - res = f1 + (f2 - f1) * ((2.0 / 3.0) - hue) * 6.0; - else - res = f1; - return res; -} - -vec3 rgb2hsl(vec3 color) { - vec3 hsl; - - float fmin = min(min(color.r, color.g), color.b); - float fmax = max(max(color.r, color.g), color.b); - float delta = fmax - fmin; - - hsl.z = (fmax + fmin) / 2.0; - - if (delta == 0.0) { - hsl.x = 0.0; - hsl.y = 0.0; - } else { - if (hsl.z < 0.5) - hsl.y = delta / (fmax + fmin); - else - hsl.y = delta / (2.0 - fmax - fmin); - - float deltaR = (((fmax - color.r) / 6.0) + (delta / 2.0)) / delta; - float deltaG = (((fmax - color.g) / 6.0) + (delta / 2.0)) / delta; - float deltaB = (((fmax - color.b) / 6.0) + (delta / 2.0)) / delta; - - if (color.r == fmax ) - hsl.x = deltaB - deltaG; - else if (color.g == fmax) - hsl.x = (1.0 / 3.0) + deltaR - deltaB; - else if (color.b == fmax) - hsl.x = (2.0 / 3.0) + deltaG - deltaR; - - if (hsl.x < 0.0) - hsl.x += 1.0; - else if (hsl.x > 1.0) - hsl.x -= 1.0; - } - - return hsl; -} - -vec3 hsl2rgb(vec3 hsl) { - vec3 rgb; - - if (hsl.y == 0.0) - rgb = vec3(hsl.z); - else { - float f2; - - if (hsl.z < 0.5) - f2 = hsl.z * (1.0 + hsl.y); - else - f2 = (hsl.z + hsl.y) - (hsl.y * hsl.z); - - float f1 = 2.0 * hsl.z - f2; - - rgb.r = hue2rgb(f1, f2, hsl.x + (1.0/3.0)); - rgb.g = hue2rgb(f1, f2, hsl.x); - rgb.b = hue2rgb(f1, f2, hsl.x - (1.0/3.0)); - } - - return rgb; -} - -vec3 blendHue(vec3 base, vec3 blend) { - vec3 baseHSL = rgb2hsl(base); - return hsl2rgb(vec3(rgb2hsl(blend).r, baseHSL.g, baseHSL.b)); -} - -void main() { - vec4 texture; - - %forloop% - - vec4 texel = vec4(outTint.bgr * outTint.a, outTint.a); - - // Multiply texture tint - vec4 color = texture * texel; - - if (outTintEffect == 1.0) { - // Solid color + texture alpha - color.rgb = mix(texture.rgb, outTint.bgr * outTint.a, texture.a); - } else if (outTintEffect == 2.0) { - // Solid color, no texture - color = texel; - } - - /* Apply day/night tint */ - if (color.a > 0.0 && ignoreTimeTint == 0) { - vec3 dayNightTint; - - if (time < 0.25) { - dayNightTint = dayTint; - } else if (isOutside == 0 && time < 0.5) { - dayNightTint = mix(dayTint, nightTint, (time - 0.25) / 0.25); - } else if (time < 0.375) { - dayNightTint = mix(dayTint, duskTint, (time - 0.25) / 0.125); - } else if (time < 0.5) { - dayNightTint = mix(duskTint, nightTint, (time - 0.375) / 0.125); - } else if (time < 0.75) { - dayNightTint = nightTint; - } else if (isOutside == 0) { - dayNightTint = mix(nightTint, dayTint, (time - 0.75) / 0.25); - } else if (time < 0.875) { - dayNightTint = mix(nightTint, duskTint, (time - 0.75) / 0.125); - } else { - dayNightTint = mix(duskTint, dayTint, (time - 0.875) / 0.125); - } - - color = vec4(blendHardLight(color.rgb, dayNightTint), color.a); - } - - if (terrainColorRatio > 0.0 && (1.0 - terrainColorRatio) < outTexCoord.y) { - if (color.a > 0.0 && (terrainColor.r > 0.0 || terrainColor.g > 0.0 || terrainColor.b > 0.0)) { - color.rgb = mix(color.rgb, blendHue(color.rgb, terrainColor), 1.0); - } - } - - gl_FragColor = color; -} -`; - -const spriteVertShader = ` -precision mediump float; - -uniform mat4 uProjectionMatrix; -uniform int uRoundPixels; -uniform vec2 uResolution; - -attribute vec2 inPosition; -attribute vec2 inTexCoord; -attribute float inTexId; -attribute float inTintEffect; -attribute vec4 inTint; - -varying vec2 outTexCoord; -varying float outTexId; -varying vec2 outPosition; -varying float outTintEffect; -varying vec4 outTint; - -void main() { - gl_Position = uProjectionMatrix * vec4(inPosition, 1.0, 1.0); - if (uRoundPixels == 1) - { - gl_Position.xy = floor(((gl_Position.xy + 1.0) * 0.5 * uResolution) + 0.5) / uResolution * 2.0 - 1.0; - } - outTexCoord = inTexCoord; - outTexId = inTexId; - outPosition = inPosition; - outTint = inTint; - outTintEffect = inTintEffect; -} -`; +import { getCurrentTime } from "#app/utils"; +import fieldSpriteFragShader from "./glsl/fieldSpriteFragShader.frag?raw"; +import spriteVertShader from "./glsl/spriteShader.vert?raw"; export default class FieldSpritePipeline extends Phaser.Renderer.WebGL.Pipelines.MultiPipeline { constructor(game: Phaser.Game, config?: Phaser.Types.Renderer.WebGL.WebGLPipelineConfig) { @@ -212,7 +10,7 @@ export default class FieldSpritePipeline extends Phaser.Renderer.WebGL.Pipelines config || { game: game, name: "field-sprite", - fragShader: spriteFragShader, + fragShader: fieldSpriteFragShader, vertShader: spriteVertShader, }, ); @@ -236,7 +34,7 @@ export default class FieldSpritePipeline extends Phaser.Renderer.WebGL.Pipelines const time = globalScene.currentBattle?.waveIndex ? ((globalScene.currentBattle.waveIndex + globalScene.waveCycleOffset) % 40) / 40 // ((new Date().getSeconds() * 1000 + new Date().getMilliseconds()) % 10000) / 10000 - : Utils.getCurrentTime(); + : getCurrentTime(); this.set1f("time", time); this.set1i("ignoreTimeTint", ignoreTimeTint ? 1 : 0); this.set1i("isOutside", globalScene.arena.isOutside() ? 1 : 0); diff --git a/src/pipelines/glsl/fieldSpriteFragShader.frag b/src/pipelines/glsl/fieldSpriteFragShader.frag new file mode 100644 index 00000000000..e79dea86fe9 --- /dev/null +++ b/src/pipelines/glsl/fieldSpriteFragShader.frag @@ -0,0 +1,168 @@ +#ifdef GL_FRAGMENT_PRECISION_HIGH +precision highp float; +#else +precision mediump float; +#endif + +uniform sampler2D uMainSampler[%count%]; + +varying vec2 outTexCoord; +varying float outTexId; +varying float outTintEffect; +varying vec4 outTint; + +uniform float time; +uniform int ignoreTimeTint; +uniform int isOutside; +uniform vec3 dayTint; +uniform vec3 duskTint; +uniform vec3 nightTint; +uniform vec3 terrainColor; +uniform float terrainColorRatio; + +float blendOverlay(float base, float blend) { + return base<0.5?(2.0*base*blend):(1.0-2.0*(1.0-base)*(1.0-blend)); +} + +vec3 blendOverlay(vec3 base, vec3 blend) { + return vec3(blendOverlay(base.r,blend.r),blendOverlay(base.g,blend.g),blendOverlay(base.b,blend.b)); +} + +vec3 blendHardLight(vec3 base, vec3 blend) { + return blendOverlay(blend, base); +} + +float hue2rgb(float f1, float f2, float hue) { + if (hue < 0.0) + hue += 1.0; + else if (hue > 1.0) + hue -= 1.0; + float res; + if ((6.0 * hue) < 1.0) + res = f1 + (f2 - f1) * 6.0 * hue; + else if ((2.0 * hue) < 1.0) + res = f2; + else if ((3.0 * hue) < 2.0) + res = f1 + (f2 - f1) * ((2.0 / 3.0) - hue) * 6.0; + else + res = f1; + return res; +} + +vec3 rgb2hsl(vec3 color) { + vec3 hsl; + + float fmin = min(min(color.r, color.g), color.b); + float fmax = max(max(color.r, color.g), color.b); + float delta = fmax - fmin; + + hsl.z = (fmax + fmin) / 2.0; + + if (delta == 0.0) { + hsl.x = 0.0; + hsl.y = 0.0; + } else { + if (hsl.z < 0.5) + hsl.y = delta / (fmax + fmin); + else + hsl.y = delta / (2.0 - fmax - fmin); + + float deltaR = (((fmax - color.r) / 6.0) + (delta / 2.0)) / delta; + float deltaG = (((fmax - color.g) / 6.0) + (delta / 2.0)) / delta; + float deltaB = (((fmax - color.b) / 6.0) + (delta / 2.0)) / delta; + + if (color.r == fmax ) + hsl.x = deltaB - deltaG; + else if (color.g == fmax) + hsl.x = (1.0 / 3.0) + deltaR - deltaB; + else if (color.b == fmax) + hsl.x = (2.0 / 3.0) + deltaG - deltaR; + + if (hsl.x < 0.0) + hsl.x += 1.0; + else if (hsl.x > 1.0) + hsl.x -= 1.0; + } + + return hsl; +} + +vec3 hsl2rgb(vec3 hsl) { + vec3 rgb; + + if (hsl.y == 0.0) + rgb = vec3(hsl.z); + else { + float f2; + + if (hsl.z < 0.5) + f2 = hsl.z * (1.0 + hsl.y); + else + f2 = (hsl.z + hsl.y) - (hsl.y * hsl.z); + + float f1 = 2.0 * hsl.z - f2; + + rgb.r = hue2rgb(f1, f2, hsl.x + (1.0/3.0)); + rgb.g = hue2rgb(f1, f2, hsl.x); + rgb.b = hue2rgb(f1, f2, hsl.x - (1.0/3.0)); + } + + return rgb; +} + +vec3 blendHue(vec3 base, vec3 blend) { + vec3 baseHSL = rgb2hsl(base); + return hsl2rgb(vec3(rgb2hsl(blend).r, baseHSL.g, baseHSL.b)); +} + +void main() { + vec4 texture; + + %forloop% + + vec4 texel = vec4(outTint.bgr * outTint.a, outTint.a); + + // Multiply texture tint + vec4 color = texture * texel; + + if (outTintEffect == 1.0) { + // Solid color + texture alpha + color.rgb = mix(texture.rgb, outTint.bgr * outTint.a, texture.a); + } else if (outTintEffect == 2.0) { + // Solid color, no texture + color = texel; + } + + /* Apply day/night tint */ + if (color.a > 0.0 && ignoreTimeTint == 0) { + vec3 dayNightTint; + + if (time < 0.25) { + dayNightTint = dayTint; + } else if (isOutside == 0 && time < 0.5) { + dayNightTint = mix(dayTint, nightTint, (time - 0.25) / 0.25); + } else if (time < 0.375) { + dayNightTint = mix(dayTint, duskTint, (time - 0.25) / 0.125); + } else if (time < 0.5) { + dayNightTint = mix(duskTint, nightTint, (time - 0.375) / 0.125); + } else if (time < 0.75) { + dayNightTint = nightTint; + } else if (isOutside == 0) { + dayNightTint = mix(nightTint, dayTint, (time - 0.75) / 0.25); + } else if (time < 0.875) { + dayNightTint = mix(nightTint, duskTint, (time - 0.75) / 0.125); + } else { + dayNightTint = mix(duskTint, dayTint, (time - 0.875) / 0.125); + } + + color = vec4(blendHardLight(color.rgb, dayNightTint), color.a); + } + + if (terrainColorRatio > 0.0 && (1.0 - terrainColorRatio) < outTexCoord.y) { + if (color.a > 0.0 && (terrainColor.r > 0.0 || terrainColor.g > 0.0 || terrainColor.b > 0.0)) { + color.rgb = mix(color.rgb, blendHue(color.rgb, terrainColor), 1.0); + } + } + + gl_FragColor = color; +} \ No newline at end of file diff --git a/src/pipelines/glsl/invert.frag b/src/pipelines/glsl/invert.frag new file mode 100644 index 00000000000..24d9ee83a55 --- /dev/null +++ b/src/pipelines/glsl/invert.frag @@ -0,0 +1,10 @@ +precision mediump float; + +uniform sampler2D uMainSampler; + +varying vec2 outTexCoord; + +void main() +{ + gl_FragColor = 1.0 - texture2D(uMainSampler, outTexCoord); +} \ No newline at end of file diff --git a/src/pipelines/glsl/spriteFragShader.frag b/src/pipelines/glsl/spriteFragShader.frag new file mode 100644 index 00000000000..3765e595b70 --- /dev/null +++ b/src/pipelines/glsl/spriteFragShader.frag @@ -0,0 +1,279 @@ +#ifdef GL_FRAGMENT_PRECISION_HIGH +precision highp float; +#else +precision mediump float; +#endif + +uniform sampler2D uMainSampler[%count%]; + +varying vec2 outTexCoord; +varying float outTexId; +varying vec2 outPosition; +varying float outTintEffect; +varying vec4 outTint; + +uniform float time; +uniform int ignoreTimeTint; +uniform int isOutside; +uniform vec3 dayTint; +uniform vec3 duskTint; +uniform vec3 nightTint; +uniform float teraTime; +uniform vec3 teraColor; +uniform int hasShadow; +uniform int yCenter; +uniform float fieldScale; +uniform float vCutoff; +uniform vec2 relPosition; +uniform vec2 texFrameUv; +uniform vec2 size; +uniform vec2 texSize; +uniform float yOffset; +uniform float yShadowOffset; +uniform vec4 tone; +uniform ivec4 baseVariantColors[32]; +uniform vec4 variantColors[32]; +uniform ivec4 spriteColors[32]; +uniform ivec4 fusionSpriteColors[32]; + +const vec3 lumaF = vec3(.299, .587, .114); + +float blendOverlay(float base, float blend) { + return base<0.5?(2.0*base*blend):(1.0-2.0*(1.0-base)*(1.0-blend)); +} + +vec3 blendOverlay(vec3 base, vec3 blend) { + return vec3(blendOverlay(base.r,blend.r),blendOverlay(base.g,blend.g),blendOverlay(base.b,blend.b)); +} + +vec3 blendHardLight(vec3 base, vec3 blend) { + return blendOverlay(blend, base); +} + +float hue2rgb(float f1, float f2, float hue) { + if (hue < 0.0) + hue += 1.0; + else if (hue > 1.0) + hue -= 1.0; + float res; + if ((6.0 * hue) < 1.0) + res = f1 + (f2 - f1) * 6.0 * hue; + else if ((2.0 * hue) < 1.0) + res = f2; + else if ((3.0 * hue) < 2.0) + res = f1 + (f2 - f1) * ((2.0 / 3.0) - hue) * 6.0; + else + res = f1; + return res; +} + +vec3 rgb2hsl(vec3 color) { + vec3 hsl; + + float fmin = min(min(color.r, color.g), color.b); + float fmax = max(max(color.r, color.g), color.b); + float delta = fmax - fmin; + + hsl.z = (fmax + fmin) / 2.0; + + if (delta == 0.0) { + hsl.x = 0.0; + hsl.y = 0.0; + } else { + if (hsl.z < 0.5) + hsl.y = delta / (fmax + fmin); + else + hsl.y = delta / (2.0 - fmax - fmin); + + float deltaR = (((fmax - color.r) / 6.0) + (delta / 2.0)) / delta; + float deltaG = (((fmax - color.g) / 6.0) + (delta / 2.0)) / delta; + float deltaB = (((fmax - color.b) / 6.0) + (delta / 2.0)) / delta; + + if (color.r == fmax ) + hsl.x = deltaB - deltaG; + else if (color.g == fmax) + hsl.x = (1.0 / 3.0) + deltaR - deltaB; + else if (color.b == fmax) + hsl.x = (2.0 / 3.0) + deltaG - deltaR; + + if (hsl.x < 0.0) + hsl.x += 1.0; + else if (hsl.x > 1.0) + hsl.x -= 1.0; + } + + return hsl; +} + +vec3 hsl2rgb(vec3 hsl) { + vec3 rgb; + + if (hsl.y == 0.0) + rgb = vec3(hsl.z); + else { + float f2; + + if (hsl.z < 0.5) + f2 = hsl.z * (1.0 + hsl.y); + else + f2 = (hsl.z + hsl.y) - (hsl.y * hsl.z); + + float f1 = 2.0 * hsl.z - f2; + + rgb.r = hue2rgb(f1, f2, hsl.x + (1.0/3.0)); + rgb.g = hue2rgb(f1, f2, hsl.x); + rgb.b= hue2rgb(f1, f2, hsl.x - (1.0/3.0)); + } + + return rgb; +} + +vec3 blendHue(vec3 base, vec3 blend) { + vec3 baseHSL = rgb2hsl(base); + return hsl2rgb(vec3(rgb2hsl(blend).r, baseHSL.g, baseHSL.b)); +} + +vec3 rgb2hsv(vec3 c) { + vec4 K = vec4(0.0, -1.0 / 3.0, 2.0 / 3.0, -1.0); + vec4 p = mix(vec4(c.bg, K.wz), vec4(c.gb, K.xy), step(c.b, c.g)); + vec4 q = mix(vec4(p.xyw, c.r), vec4(c.r, p.yzx), step(p.x, c.r)); + + float d = q.x - min(q.w, q.y); + float e = 1.0e-10; + return vec3(abs(q.z + (q.w - q.y) / (6.0 * d + e)), d / (q.x + e), q.x); +} + +vec3 hsv2rgb(vec3 c) { + vec4 K = vec4(1.0, 2.0 / 3.0, 1.0 / 3.0, 3.0); + vec3 p = abs(fract(c.xxx + K.xyz) * 6.0 - K.www); + return c.z * mix(K.xxx, clamp(p - K.xxx, 0.0, 1.0), c.y); +} + +void main() { + vec4 texture = texture2D(uMainSampler[0], outTexCoord); + + ivec4 colorInt = ivec4(texture*255.0); + + for (int i = 0; i < 32; i++) { + if (baseVariantColors[i][3] == 0) + break; + // abs value is broken in this version of gles with highp + ivec3 diffs = ivec3( + (colorInt.r > baseVariantColors[i].r) ? colorInt.r - baseVariantColors[i].r : baseVariantColors[i].r - colorInt.r, + (colorInt.g > baseVariantColors[i].g) ? colorInt.g - baseVariantColors[i].g : baseVariantColors[i].g - colorInt.g, + (colorInt.b > baseVariantColors[i].b) ? colorInt.b - baseVariantColors[i].b : baseVariantColors[i].b - colorInt.b + ); + // Set color threshold to be within 3 points for each channel + bvec3 threshold = lessThan(diffs, ivec3(3)); + + if (texture.a > 0.0 && all(threshold)) { + texture.rgb = variantColors[i].rgb; + break; + } + } + + for (int i = 0; i < 32; i++) { + if (spriteColors[i][3] == 0) + break; + if (texture.a > 0.0 && colorInt.r == spriteColors[i].r && colorInt.g == spriteColors[i].g && colorInt.b == spriteColors[i].b) { + vec3 fusionColor = vec3(float(fusionSpriteColors[i].r) / 255.0, float(fusionSpriteColors[i].g) / 255.0, float(fusionSpriteColors[i].b) / 255.0); + vec3 bg = vec3(spriteColors[i].rgb) / 255.0; + float gray = (bg.r + bg.g + bg.b) / 3.0; + bg = vec3(gray, gray, gray); + vec3 fg = fusionColor; + texture.rgb = mix(1.0 - 2.0 * (1.0 - bg) * (1.0 - fg), 2.0 * bg * fg, step(bg, vec3(0.5))); + break; + } + } + + vec4 texel = vec4(outTint.bgr * outTint.a, outTint.a); + + // Multiply texture tint + vec4 color = texture * texel; + + if (color.a > 0.0 && teraColor.r > 0.0 && teraColor.g > 0.0 && teraColor.b > 0.0) { + vec2 relUv = vec2((outTexCoord.x - texFrameUv.x) / (size.x / texSize.x), (outTexCoord.y - texFrameUv.y) / (size.y / texSize.y)); + vec2 teraTexCoord = vec2(relUv.x * (size.x / 200.0), relUv.y * (size.y / 120.0)); + vec4 teraCol = texture2D(uMainSampler[1], teraTexCoord); + float floorValue = 86.0 / 255.0; + vec3 teraPatternHsv = rgb2hsv(teraCol.rgb); + teraCol.rgb = hsv2rgb(vec3((teraPatternHsv.b - floorValue) * 4.0 + teraTexCoord.x * fieldScale / 2.0 + teraTexCoord.y * fieldScale / 2.0 + teraTime * 255.0, teraPatternHsv.b, teraPatternHsv.b)); + + color.rgb = mix(color.rgb, blendHue(color.rgb, teraColor), 0.625); + teraCol.rgb = mix(teraCol.rgb, teraColor, 0.5); + color.rgb = blendOverlay(color.rgb, teraCol.rgb); + + if (any(lessThan(teraCol.rgb, vec3(1.0)))) { + vec3 teraColHsv = rgb2hsv(teraColor); + color.rgb = mix(color.rgb, teraColor, (1.0 - teraColHsv.g) / 2.0); + } + } + + if (outTintEffect == 1.0) { + // Solid color + texture alpha + color.rgb = mix(texture.rgb, outTint.bgr * outTint.a, texture.a); + } else if (outTintEffect == 2.0) { + // Solid color, no texture + color = texel; + } + + /* Apply gray */ + float luma = dot(color.rgb, lumaF); + color.rgb = mix(color.rgb, vec3(luma), tone.w); + + /* Apply tone */ + color.rgb += tone.rgb * (color.a / 255.0); + + /* Apply day/night tint */ + if (color.a > 0.0 && ignoreTimeTint == 0) { + vec3 dayNightTint; + + if (time < 0.25) { + dayNightTint = dayTint; + } else if (isOutside == 0 && time < 0.5) { + dayNightTint = mix(dayTint, nightTint, (time - 0.25) / 0.25); + } else if (time < 0.375) { + dayNightTint = mix(dayTint, duskTint, (time - 0.25) / 0.125); + } else if (time < 0.5) { + dayNightTint = mix(duskTint, nightTint, (time - 0.375) / 0.125); + } else if (time < 0.75) { + dayNightTint = nightTint; + } else if (isOutside == 0) { + dayNightTint = mix(nightTint, dayTint, (time - 0.75) / 0.25); + } else if (time < 0.875) { + dayNightTint = mix(nightTint, duskTint, (time - 0.75) / 0.125); + } else { + dayNightTint = mix(duskTint, dayTint, (time - 0.875) / 0.125); + } + + color.rgb = blendHardLight(color.rgb, dayNightTint); + } + + if (hasShadow == 1) { + float width = size.x - (yOffset / 2.0); + + float spriteX = ((floor(outPosition.x / fieldScale) - relPosition.x) / width) + 0.5; + float spriteY = ((floor(outPosition.y / fieldScale) - relPosition.y - yShadowOffset) / size.y); + + if (yCenter == 1) { + spriteY += 0.5; + } else { + spriteY += 1.0; + } + + bool yOverflow = outTexCoord.y >= vCutoff; + + if ((spriteY >= 0.9 && (color.a == 0.0 || yOverflow))) { + float shadowSpriteY = (spriteY - 0.9) * (1.0 / 0.15); + if (distance(vec2(spriteX, shadowSpriteY), vec2(0.5, 0.5)) < 0.5) { + color = vec4(vec3(0.0, 0.0, 0.0), 0.5); + } else if (yOverflow) { + discard; + } + } else if (yOverflow) { + discard; + } + } + + gl_FragColor = color; +} \ No newline at end of file diff --git a/src/pipelines/glsl/spriteShader.vert b/src/pipelines/glsl/spriteShader.vert new file mode 100644 index 00000000000..33743384b47 --- /dev/null +++ b/src/pipelines/glsl/spriteShader.vert @@ -0,0 +1,32 @@ +precision mediump float; + +uniform mat4 uProjectionMatrix; +uniform int uRoundPixels; +uniform vec2 uResolution; + +attribute vec2 inPosition; +attribute vec2 inTexCoord; +attribute float inTexId; +attribute float inTintEffect; +attribute vec4 inTint; + +varying vec2 outTexCoord; +varying vec2 outtexFrameUv; +varying float outTexId; +varying vec2 outPosition; +varying float outTintEffect; +varying vec4 outTint; + +void main() +{ + gl_Position = uProjectionMatrix * vec4(inPosition, 1.0, 1.0); + if (uRoundPixels == 1) + { + gl_Position.xy = floor(((gl_Position.xy + 1.0) * 0.5 * uResolution) + 0.5) / uResolution * 2.0 - 1.0; + } + outTexCoord = inTexCoord; + outTexId = inTexId; + outPosition = inPosition; + outTint = inTint; + outTintEffect = inTintEffect; +} \ No newline at end of file diff --git a/src/pipelines/invert.ts b/src/pipelines/invert.ts index a945d0c95aa..0ebc3ad865f 100644 --- a/src/pipelines/invert.ts +++ b/src/pipelines/invert.ts @@ -1,17 +1,5 @@ import type { Game } from "phaser"; - -const fragShader = ` -precision mediump float; - -uniform sampler2D uMainSampler; - -varying vec2 outTexCoord; - -void main() -{ - gl_FragColor = 1.0 - texture2D(uMainSampler, outTexCoord); -} -`; +import fragShader from "./glsl/invert.frag?raw"; export default class InvertPostFX extends Phaser.Renderer.WebGL.Pipelines.PostFXPipeline { constructor(game: Game) { diff --git a/src/pipelines/sprite.ts b/src/pipelines/sprite.ts index 439e35f711f..d97cae1662b 100644 --- a/src/pipelines/sprite.ts +++ b/src/pipelines/sprite.ts @@ -1,318 +1,12 @@ -import { variantColorCache } from "#app/data/variant"; +import { variantColorCache } from "#app/sprites/variant"; import MysteryEncounterIntroVisuals from "#app/field/mystery-encounter-intro"; import Pokemon from "#app/field/pokemon"; import Trainer from "#app/field/trainer"; import { globalScene } from "#app/global-scene"; -import * as Utils from "#app/utils"; +import { rgbHexToRgba } from "#app/utils"; import FieldSpritePipeline from "./field-sprite"; - -const spriteFragShader = ` -#ifdef GL_FRAGMENT_PRECISION_HIGH -precision highp float; -#else -precision mediump float; -#endif - -uniform sampler2D uMainSampler[%count%]; - -varying vec2 outTexCoord; -varying float outTexId; -varying vec2 outPosition; -varying float outTintEffect; -varying vec4 outTint; - -uniform float time; -uniform int ignoreTimeTint; -uniform int isOutside; -uniform vec3 dayTint; -uniform vec3 duskTint; -uniform vec3 nightTint; -uniform float teraTime; -uniform vec3 teraColor; -uniform int hasShadow; -uniform int yCenter; -uniform float fieldScale; -uniform float vCutoff; -uniform vec2 relPosition; -uniform vec2 texFrameUv; -uniform vec2 size; -uniform vec2 texSize; -uniform float yOffset; -uniform float yShadowOffset; -uniform vec4 tone; -uniform ivec4 baseVariantColors[32]; -uniform vec4 variantColors[32]; -uniform ivec4 spriteColors[32]; -uniform ivec4 fusionSpriteColors[32]; - -const vec3 lumaF = vec3(.299, .587, .114); - -float blendOverlay(float base, float blend) { - return base<0.5?(2.0*base*blend):(1.0-2.0*(1.0-base)*(1.0-blend)); -} - -vec3 blendOverlay(vec3 base, vec3 blend) { - return vec3(blendOverlay(base.r,blend.r),blendOverlay(base.g,blend.g),blendOverlay(base.b,blend.b)); -} - -vec3 blendHardLight(vec3 base, vec3 blend) { - return blendOverlay(blend, base); -} - -float hue2rgb(float f1, float f2, float hue) { - if (hue < 0.0) - hue += 1.0; - else if (hue > 1.0) - hue -= 1.0; - float res; - if ((6.0 * hue) < 1.0) - res = f1 + (f2 - f1) * 6.0 * hue; - else if ((2.0 * hue) < 1.0) - res = f2; - else if ((3.0 * hue) < 2.0) - res = f1 + (f2 - f1) * ((2.0 / 3.0) - hue) * 6.0; - else - res = f1; - return res; -} - -vec3 rgb2hsl(vec3 color) { - vec3 hsl; - - float fmin = min(min(color.r, color.g), color.b); - float fmax = max(max(color.r, color.g), color.b); - float delta = fmax - fmin; - - hsl.z = (fmax + fmin) / 2.0; - - if (delta == 0.0) { - hsl.x = 0.0; - hsl.y = 0.0; - } else { - if (hsl.z < 0.5) - hsl.y = delta / (fmax + fmin); - else - hsl.y = delta / (2.0 - fmax - fmin); - - float deltaR = (((fmax - color.r) / 6.0) + (delta / 2.0)) / delta; - float deltaG = (((fmax - color.g) / 6.0) + (delta / 2.0)) / delta; - float deltaB = (((fmax - color.b) / 6.0) + (delta / 2.0)) / delta; - - if (color.r == fmax ) - hsl.x = deltaB - deltaG; - else if (color.g == fmax) - hsl.x = (1.0 / 3.0) + deltaR - deltaB; - else if (color.b == fmax) - hsl.x = (2.0 / 3.0) + deltaG - deltaR; - - if (hsl.x < 0.0) - hsl.x += 1.0; - else if (hsl.x > 1.0) - hsl.x -= 1.0; - } - - return hsl; -} - -vec3 hsl2rgb(vec3 hsl) { - vec3 rgb; - - if (hsl.y == 0.0) - rgb = vec3(hsl.z); - else { - float f2; - - if (hsl.z < 0.5) - f2 = hsl.z * (1.0 + hsl.y); - else - f2 = (hsl.z + hsl.y) - (hsl.y * hsl.z); - - float f1 = 2.0 * hsl.z - f2; - - rgb.r = hue2rgb(f1, f2, hsl.x + (1.0/3.0)); - rgb.g = hue2rgb(f1, f2, hsl.x); - rgb.b= hue2rgb(f1, f2, hsl.x - (1.0/3.0)); - } - - return rgb; -} - -vec3 blendHue(vec3 base, vec3 blend) { - vec3 baseHSL = rgb2hsl(base); - return hsl2rgb(vec3(rgb2hsl(blend).r, baseHSL.g, baseHSL.b)); -} - -vec3 rgb2hsv(vec3 c) { - vec4 K = vec4(0.0, -1.0 / 3.0, 2.0 / 3.0, -1.0); - vec4 p = mix(vec4(c.bg, K.wz), vec4(c.gb, K.xy), step(c.b, c.g)); - vec4 q = mix(vec4(p.xyw, c.r), vec4(c.r, p.yzx), step(p.x, c.r)); - - float d = q.x - min(q.w, q.y); - float e = 1.0e-10; - return vec3(abs(q.z + (q.w - q.y) / (6.0 * d + e)), d / (q.x + e), q.x); -} - -vec3 hsv2rgb(vec3 c) { - vec4 K = vec4(1.0, 2.0 / 3.0, 1.0 / 3.0, 3.0); - vec3 p = abs(fract(c.xxx + K.xyz) * 6.0 - K.www); - return c.z * mix(K.xxx, clamp(p - K.xxx, 0.0, 1.0), c.y); -} - -void main() { - vec4 texture = texture2D(uMainSampler[0], outTexCoord); - - ivec4 colorInt = ivec4(int(texture.r * 255.0), int(texture.g * 255.0), int(texture.b * 255.0), int(texture.a * 255.0)); - - for (int i = 0; i < 32; i++) { - if (baseVariantColors[i][3] == 0) - break; - if (texture.a > 0.0 && colorInt.r == baseVariantColors[i].r && colorInt.g == baseVariantColors[i].g && colorInt.b == baseVariantColors[i].b) { - texture.rgb = variantColors[i].rgb; - break; - } - } - - for (int i = 0; i < 32; i++) { - if (spriteColors[i][3] == 0) - break; - if (texture.a > 0.0 && colorInt.r == spriteColors[i].r && colorInt.g == spriteColors[i].g && colorInt.b == spriteColors[i].b) { - vec3 fusionColor = vec3(float(fusionSpriteColors[i].r) / 255.0, float(fusionSpriteColors[i].g) / 255.0, float(fusionSpriteColors[i].b) / 255.0); - vec3 bg = vec3(float(spriteColors[i].r) / 255.0, float(spriteColors[i].g) / 255.0, float(spriteColors[i].b) / 255.0); - float gray = (bg.r + bg.g + bg.b) / 3.0; - bg = vec3(gray, gray, gray); - vec3 fg = fusionColor; - texture.rgb = mix(1.0 - 2.0 * (1.0 - bg) * (1.0 - fg), 2.0 * bg * fg, step(bg, vec3(0.5))); - break; - } - } - - vec4 texel = vec4(outTint.bgr * outTint.a, outTint.a); - - // Multiply texture tint - vec4 color = texture * texel; - - if (color.a > 0.0 && teraColor.r > 0.0 && teraColor.g > 0.0 && teraColor.b > 0.0) { - vec2 relUv = vec2((outTexCoord.x - texFrameUv.x) / (size.x / texSize.x), (outTexCoord.y - texFrameUv.y) / (size.y / texSize.y)); - vec2 teraTexCoord = vec2(relUv.x * (size.x / 200.0), relUv.y * (size.y / 120.0)); - vec4 teraCol = texture2D(uMainSampler[1], teraTexCoord); - float floorValue = 86.0 / 255.0; - vec3 teraPatternHsv = rgb2hsv(teraCol.rgb); - teraCol.rgb = hsv2rgb(vec3((teraPatternHsv.b - floorValue) * 4.0 + teraTexCoord.x * fieldScale / 2.0 + teraTexCoord.y * fieldScale / 2.0 + teraTime * 255.0, teraPatternHsv.b, teraPatternHsv.b)); - - color.rgb = mix(color.rgb, blendHue(color.rgb, teraColor), 0.625); - teraCol.rgb = mix(teraCol.rgb, teraColor, 0.5); - color.rgb = blendOverlay(color.rgb, teraCol.rgb); - - if (teraColor.r < 1.0 || teraColor.g < 1.0 || teraColor.b < 1.0) { - vec3 teraColHsv = rgb2hsv(teraColor); - color.rgb = mix(color.rgb, teraColor, (1.0 - teraColHsv.g) / 2.0); - } - } - - if (outTintEffect == 1.0) { - // Solid color + texture alpha - color.rgb = mix(texture.rgb, outTint.bgr * outTint.a, texture.a); - } else if (outTintEffect == 2.0) { - // Solid color, no texture - color = texel; - } - - /* Apply gray */ - float luma = dot(color.rgb, lumaF); - color.rgb = mix(color.rgb, vec3(luma), tone.w); - - /* Apply tone */ - color.rgb += tone.rgb * (color.a / 255.0); - - /* Apply day/night tint */ - if (color.a > 0.0 && ignoreTimeTint == 0) { - vec3 dayNightTint; - - if (time < 0.25) { - dayNightTint = dayTint; - } else if (isOutside == 0 && time < 0.5) { - dayNightTint = mix(dayTint, nightTint, (time - 0.25) / 0.25); - } else if (time < 0.375) { - dayNightTint = mix(dayTint, duskTint, (time - 0.25) / 0.125); - } else if (time < 0.5) { - dayNightTint = mix(duskTint, nightTint, (time - 0.375) / 0.125); - } else if (time < 0.75) { - dayNightTint = nightTint; - } else if (isOutside == 0) { - dayNightTint = mix(nightTint, dayTint, (time - 0.75) / 0.25); - } else if (time < 0.875) { - dayNightTint = mix(nightTint, duskTint, (time - 0.75) / 0.125); - } else { - dayNightTint = mix(duskTint, dayTint, (time - 0.875) / 0.125); - } - - color.rgb = blendHardLight(color.rgb, dayNightTint); - } - - if (hasShadow == 1) { - float width = size.x - (yOffset / 2.0); - - float spriteX = ((floor(outPosition.x / fieldScale) - relPosition.x) / width) + 0.5; - float spriteY = ((floor(outPosition.y / fieldScale) - relPosition.y - yShadowOffset) / size.y); - - if (yCenter == 1) { - spriteY += 0.5; - } else { - spriteY += 1.0; - } - - bool yOverflow = outTexCoord.y >= vCutoff; - - if ((spriteY >= 0.9 && (color.a == 0.0 || yOverflow))) { - float shadowSpriteY = (spriteY - 0.9) * (1.0 / 0.15); - if (distance(vec2(spriteX, shadowSpriteY), vec2(0.5, 0.5)) < 0.5) { - color = vec4(vec3(0.0, 0.0, 0.0), 0.5); - } else if (yOverflow) { - discard; - } - } else if (yOverflow) { - discard; - } - } - - gl_FragColor = color; -} -`; - -const spriteVertShader = ` -precision mediump float; - -uniform mat4 uProjectionMatrix; -uniform int uRoundPixels; -uniform vec2 uResolution; - -attribute vec2 inPosition; -attribute vec2 inTexCoord; -attribute float inTexId; -attribute float inTintEffect; -attribute vec4 inTint; - -varying vec2 outTexCoord; -varying vec2 outtexFrameUv; -varying float outTexId; -varying vec2 outPosition; -varying float outTintEffect; -varying vec4 outTint; - -void main() -{ - gl_Position = uProjectionMatrix * vec4(inPosition, 1.0, 1.0); - if (uRoundPixels == 1) - { - gl_Position.xy = floor(((gl_Position.xy + 1.0) * 0.5 * uResolution) + 0.5) / uResolution * 2.0 - 1.0; - } - outTexCoord = inTexCoord; - outTexId = inTexId; - outPosition = inPosition; - outTint = inTint; - outTintEffect = inTintEffect; -} -`; +import spriteFragShader from "./glsl/spriteFragShader.frag?raw"; +import spriteVertShader from "./glsl/spriteShader.vert?raw"; export default class SpritePipeline extends FieldSpritePipeline { private _tone: number[]; @@ -450,8 +144,8 @@ export default class SpritePipeline extends FieldSpritePipeline { const baseColors = Object.keys(variantColors[variant]); for (let c = 0; c < 32; c++) { if (c < baseColors.length) { - const baseColor = Array.from(Object.values(Utils.rgbHexToRgba(baseColors[c]))); - const variantColor = Array.from(Object.values(Utils.rgbHexToRgba(variantColors[variant][baseColors[c]]))); + const baseColor = Array.from(Object.values(rgbHexToRgba(baseColors[c]))); + const variantColor = Array.from(Object.values(rgbHexToRgba(variantColors[variant][baseColors[c]]))); flatBaseColors.splice(flatBaseColors.length, 0, ...baseColor); flatVariantColors.splice(flatVariantColors.length, 0, ...variantColor.map(c => c / 255.0)); } else { diff --git a/src/plugins/i18n.ts b/src/plugins/i18n.ts index 92b0e15dbb9..5e145d08e28 100644 --- a/src/plugins/i18n.ts +++ b/src/plugins/i18n.ts @@ -170,8 +170,11 @@ export async function initI18n(): Promise { i18next.use(processor); i18next.use(new KoreanPostpositionProcessor()); await i18next.init({ - fallbackLng: "en", - supportedLngs: ["en", "es-ES", "fr", "it", "de", "zh-CN", "zh-TW", "pt-BR", "ko", "ja", "ca-ES"], + fallbackLng: { + "es-MX": ["es-ES", "en"], + default: ["en"], + }, + supportedLngs: ["en", "es-ES", "es-MX", "fr", "it", "de", "zh-CN", "zh-TW", "pt-BR", "ko", "ja", "ca-ES"], backend: { loadPath(lng: string, [ns]: string[]) { let fileName: string; @@ -237,6 +240,7 @@ export async function initI18n(): Promise { "terrain", "titles", "trainerClasses", + "trainersCommon", "trainerNames", "tutorial", "voucher", diff --git a/src/sprites/pokemon-asset-loader.ts b/src/sprites/pokemon-asset-loader.ts new file mode 100644 index 00000000000..4ce88f4f1fb --- /dev/null +++ b/src/sprites/pokemon-asset-loader.ts @@ -0,0 +1,11 @@ +import type { Moves } from "#enums/moves"; +import { initMoveAnim, loadMoveAnimAssets } from "#app/data/battle-anims"; + +/** + * Asynchronously load the animations and assets for the provided moves. + * @param moveIds - An array of move IDs to load assets for. + */ +export async function loadMoveAnimations(moveIds: Moves[]): Promise { + await Promise.allSettled(moveIds.map(m => initMoveAnim(m))); + await loadMoveAnimAssets(moveIds); +} diff --git a/src/sprites/pokemon-sprite.ts b/src/sprites/pokemon-sprite.ts new file mode 100644 index 00000000000..66432f5a4ea --- /dev/null +++ b/src/sprites/pokemon-sprite.ts @@ -0,0 +1,79 @@ +import { globalScene } from "#app/global-scene"; +import { variantColorCache, variantData } from "#app/sprites/variant"; +import { Gender } from "#app/data/gender"; +import { hasExpSprite } from "./sprite-utils"; +import type { Variant, VariantSet } from "#app/sprites/variant"; +import type Pokemon from "#app/field/pokemon"; +import type BattleScene from "#app/battle-scene"; + +// Regex patterns + +/** Regex matching double underscores */ +const DUNDER_REGEX = /\_{2}/g; + +/** + * Calculate the sprite ID from a pokemon form. + */ +export function getSpriteId(pokemon: Pokemon, ignoreOverride?: boolean): string { + return pokemon + .getSpeciesForm(ignoreOverride) + .getSpriteId( + pokemon.getGender(ignoreOverride) === Gender.FEMALE, + pokemon.formIndex, + pokemon.shiny, + pokemon.variant, + ); +} + +export function getBattleSpriteId(pokemon: Pokemon, back?: boolean, ignoreOverride = false): string { + if (back === undefined) { + back = pokemon.isPlayer(); + } + return pokemon + .getSpeciesForm(ignoreOverride) + .getSpriteId( + pokemon.getGender(ignoreOverride) === Gender.FEMALE, + pokemon.formIndex, + pokemon.shiny, + pokemon.variant, + back, + ); +} + +/** Compute the path to the sprite atlas by converting double underscores to path components (/) + */ +export function getSpriteAtlasPath(pokemon: Pokemon, ignoreOverride = false): string { + const spriteId = getSpriteId(pokemon, ignoreOverride).replace(DUNDER_REGEX, "/"); + return `${/_[1-3]$/.test(spriteId) ? "variant/" : ""}${spriteId}`; +} + +/** + * Load the variant assets for the given sprite and store it in {@linkcode variantColorCache}. + * @param spriteKey - The key of the sprite to load + * @param fileRoot - The root path of the sprite file + * @param variant - The variant to load + * @param scene - The scene to load the assets in (defaults to the global scene) + */ +export async function loadPokemonVariantAssets( + spriteKey: string, + fileRoot: string, + variant: Variant, + scene: BattleScene = globalScene, +): Promise { + if (variantColorCache.hasOwnProperty(spriteKey)) { + return; + } + const useExpSprite = scene.experimentalSprites && hasExpSprite(spriteKey); + if (useExpSprite) { + fileRoot = `exp/${fileRoot}`; + } + let variantConfig = variantData; + fileRoot.split("/").map(p => (variantConfig ? (variantConfig = variantConfig[p]) : null)); + const variantSet = variantConfig as VariantSet; + if (!variantConfig || variantSet[variant] !== 1) { + return; + } + variantColorCache[spriteKey] = await scene + .cachedFetch(`./images/pokemon/variant/${fileRoot}.json`) + .then(res => res.json()); +} diff --git a/src/sprites/sprite-keys.ts b/src/sprites/sprite-keys.ts new file mode 100644 index 00000000000..f023df089f6 --- /dev/null +++ b/src/sprites/sprite-keys.ts @@ -0,0 +1 @@ +export const expSpriteKeys: Set = new Set(); diff --git a/src/sprites/sprite-utils.ts b/src/sprites/sprite-utils.ts new file mode 100644 index 00000000000..8a352de3d55 --- /dev/null +++ b/src/sprites/sprite-utils.ts @@ -0,0 +1,28 @@ +import { expSpriteKeys } from "#app/sprites/sprite-keys"; + +const expKeyRegex = /^pkmn__?(back__)?(shiny__)?(female__)?(\d+)(\-.*?)?(?:_[1-3])?$/; + +export function hasExpSprite(key: string): boolean { + const keyMatch = expKeyRegex.exec(key); + if (!keyMatch) { + return false; + } + + let k = keyMatch[4]!; + if (keyMatch[2]) { + k += "s"; + } + if (keyMatch[1]) { + k += "b"; + } + if (keyMatch[3]) { + k += "f"; + } + if (keyMatch[5]) { + k += keyMatch[5]; + } + if (!expSpriteKeys.has(k)) { + return false; + } + return true; +} diff --git a/src/sprites/variant.ts b/src/sprites/variant.ts new file mode 100644 index 00000000000..7552f63b778 --- /dev/null +++ b/src/sprites/variant.ts @@ -0,0 +1,145 @@ +import { VariantTier } from "#app/enums/variant-tier"; +import { hasExpSprite } from "#app/sprites/sprite-utils"; +import { globalScene } from "#app/global-scene"; +import type Pokemon from "#app/field/pokemon"; +import { isNullOrUndefined } from "#app/utils"; + +export type Variant = 0 | 1 | 2; + +export type VariantSet = [Variant, Variant, Variant]; + +export const variantData: any = {}; + +/** Caches variant colors that have been generated */ +export const variantColorCache = {}; + +export function getVariantTint(variant: Variant): number { + switch (variant) { + case 0: + return 0xf8c020; + case 1: + return 0x20f8f0; + case 2: + return 0xe81048; + } +} + +export function getVariantIcon(variant: Variant): number { + switch (variant) { + case 0: + return VariantTier.STANDARD; + case 1: + return VariantTier.RARE; + case 2: + return VariantTier.EPIC; + } +} + +/** Delete all of the keys in variantData */ +export function clearVariantData(): void { + for (const key in variantData) { + delete variantData[key]; + } +} + +/** Update the variant data to use experiment sprite files for variants that have experimental sprites. */ +export async function mergeExperimentalData(mainData: any, expData: any): Promise { + if (!expData) { + return; + } + + for (const key of Object.keys(expData)) { + if (typeof expData[key] === "object" && !Array.isArray(expData[key])) { + // If the value is an object, recursively merge. + if (!mainData[key]) { + mainData[key] = {}; + } + mergeExperimentalData(mainData[key], expData[key]); + } else { + // Otherwise, replace the value + mainData[key] = expData[key]; + } + } +} + +/** + * Populate the variant color cache with the variant colors for this pokemon. + * The global scene must be initialized before this function is called. + */ +export async function populateVariantColors( + pokemon: Pokemon, + isBackSprite = false, + ignoreOverride = true, +): Promise { + const battleSpritePath = pokemon + .getBattleSpriteAtlasPath(isBackSprite, ignoreOverride) + .replace("variant/", "") + .replace(/_[1-3]$/, ""); + let config = variantData; + const useExpSprite = + globalScene.experimentalSprites && hasExpSprite(pokemon.getBattleSpriteKey(isBackSprite, ignoreOverride)); + battleSpritePath.split("/").map(p => (config ? (config = config[p]) : null)); + const variantSet: VariantSet = config as VariantSet; + if (!variantSet || variantSet[pokemon.variant] !== 1) { + return; + } + const cacheKey = pokemon.getBattleSpriteKey(isBackSprite); + if (!variantColorCache.hasOwnProperty(cacheKey)) { + await populateVariantColorCache(cacheKey, useExpSprite, battleSpritePath); + } +} + +/** + * Gracefully handle errors loading a variant sprite. Log if it fails and attempt to fall back on + * non-experimental sprites before giving up. + * + * @param cacheKey - The cache key for the variant color sprite + * @param attemptedSpritePath - The sprite path that failed to load + * @param useExpSprite - Was the attempted sprite experimental + * @param battleSpritePath - The filename of the sprite + * @param optionalParams - Any additional params to log + */ +async function fallbackVariantColor( + cacheKey: string, + attemptedSpritePath: string, + useExpSprite: boolean, + battleSpritePath: string, + ...optionalParams: any[] +): Promise { + console.warn(`Could not load ${attemptedSpritePath}!`, ...optionalParams); + if (useExpSprite) { + await populateVariantColorCache(cacheKey, false, battleSpritePath); + } +} + +/** + * Fetch a variant color sprite from the key and store it in the variant color cache. + * + * @param cacheKey - The cache key for the variant color sprite + * @param useExpSprite - Should the experimental sprite be used + * @param battleSpritePath - The filename of the sprite + */ +export async function populateVariantColorCache( + cacheKey: string, + useExpSprite: boolean, + battleSpritePath: string, +): Promise { + const spritePath = `./images/pokemon/variant/${useExpSprite ? "exp/" : ""}${battleSpritePath}.json`; + return globalScene + .cachedFetch(spritePath) + .then(res => { + // Prevent the JSON from processing if it failed to load + if (!res.ok) { + return fallbackVariantColor(cacheKey, res.url, useExpSprite, battleSpritePath, res.status, res.statusText); + } + return res.json(); + }) + .catch(error => { + return fallbackVariantColor(cacheKey, spritePath, useExpSprite, battleSpritePath, error); + }) + .then(c => { + if (!isNullOrUndefined(c)) { + variantColorCache[cacheKey] = c; + } + }); +} diff --git a/src/system/achv.ts b/src/system/achv.ts index bd8595b2f94..62e69e6fbfe 100644 --- a/src/system/achv.ts +++ b/src/system/achv.ts @@ -2,7 +2,7 @@ import type { Modifier } from "typescript"; import { TurnHeldItemTransferModifier } from "../modifier/modifier"; import { pokemonEvolutions } from "#app/data/balance/pokemon-evolutions"; import i18next from "i18next"; -import * as Utils from "../utils"; +import { NumberHolder } from "#app/utils"; import { PlayerGender } from "#enums/player-gender"; import type { Challenge } from "#app/data/challenge"; import { @@ -138,7 +138,7 @@ export class DamageAchv extends Achv { "", iconImage, score, - (args: any[]) => (args[0] instanceof Utils.NumberHolder ? args[0].value : args[0]) >= this.damageAmount, + (args: any[]) => (args[0] instanceof NumberHolder ? args[0].value : args[0]) >= this.damageAmount, ); this.damageAmount = damageAmount; } @@ -154,7 +154,7 @@ export class HealAchv extends Achv { "", iconImage, score, - (args: any[]) => (args[0] instanceof Utils.NumberHolder ? args[0].value : args[0]) >= this.healAmount, + (args: any[]) => (args[0] instanceof NumberHolder ? args[0].value : args[0]) >= this.healAmount, ); this.healAmount = healAmount; } @@ -170,7 +170,7 @@ export class LevelAchv extends Achv { "", iconImage, score, - (args: any[]) => (args[0] instanceof Utils.NumberHolder ? args[0].value : args[0]) >= this.level, + (args: any[]) => (args[0] instanceof NumberHolder ? args[0].value : args[0]) >= this.level, ); this.level = level; } diff --git a/src/system/game-data.ts b/src/system/game-data.ts index 82ad2276fef..53146301666 100644 --- a/src/system/game-data.ts +++ b/src/system/game-data.ts @@ -8,7 +8,7 @@ import { pokemonPrevolutions } from "#app/data/balance/pokemon-evolutions"; import type PokemonSpecies from "#app/data/pokemon-species"; import { allSpecies, getPokemonSpecies } from "#app/data/pokemon-species"; import { speciesStarterCosts } from "#app/data/balance/starters"; -import * as Utils from "#app/utils"; +import { randInt, getEnumKeys, isLocal, executeIf, fixedInt, randSeedItem, NumberHolder } from "#app/utils"; import Overrides from "#app/overrides"; import PokemonData from "#app/system/pokemon-data"; import PersistentModifierData from "#app/system/modifier-data"; @@ -17,7 +17,7 @@ import { Unlockables } from "#app/system/unlockables"; import { GameModes, getGameMode } from "#app/game-mode"; import { BattleType } from "#app/battle"; import TrainerData from "#app/system/trainer-data"; -import { trainerConfigs } from "#app/data/trainer-config"; +import { trainerConfigs } from "#app/data/trainers/trainer-config"; import { resetSettings, setSetting, SettingKeys } from "#app/system/settings/settings"; import { achvs } from "#app/system/achv"; import EggData from "#app/system/egg-data"; @@ -32,11 +32,12 @@ import { Tutorial } from "#app/tutorial"; import { speciesEggMoves } from "#app/data/balance/egg-moves"; import { allMoves } from "#app/data/moves/move"; import { TrainerVariant } from "#app/field/trainer"; -import type { Variant } from "#app/data/variant"; +import type { Variant } from "#app/sprites/variant"; import { setSettingGamepad, SettingGamepad, settingGamepadDefaults } from "#app/system/settings/settings-gamepad"; import type { SettingKeyboard } from "#app/system/settings/settings-keyboard"; import { setSettingKeyboard } from "#app/system/settings/settings-keyboard"; import { TagAddedEvent, TerrainChangedEvent, WeatherChangedEvent } from "#app/events/arena"; +// biome-ignore lint/style/noNamespaceImport: Something weird is going on here and I don't want to touch it import * as Modifier from "#app/modifier/modifier"; import { StatusEffect } from "#enums/status-effect"; import ChallengeData from "#app/system/challenge-data"; @@ -98,12 +99,13 @@ export function getDataTypeKey(dataType: GameDataType, slotId = 0): string { switch (dataType) { case GameDataType.SYSTEM: return "data"; - case GameDataType.SESSION: + case GameDataType.SESSION: { let ret = "sessionData"; if (slotId) { ret += slotId; } return ret; + } case GameDataType.SETTINGS: return "settings"; case GameDataType.TUTORIALS: @@ -201,39 +203,6 @@ export interface DexEntry { ivs: number[]; } -export const DexAttr = { - NON_SHINY: 1n, - SHINY: 2n, - MALE: 4n, - FEMALE: 8n, - DEFAULT_VARIANT: 16n, - VARIANT_2: 32n, - VARIANT_3: 64n, - DEFAULT_FORM: 128n, -}; - -export interface DexAttrProps { - shiny: boolean; - female: boolean; - variant: Variant; - formIndex: number; -} - -export const AbilityAttr = { - ABILITY_1: 1, - ABILITY_2: 2, - ABILITY_HIDDEN: 4, -}; - -export type RunHistoryData = Record; - -export interface RunEntry { - entry: SessionSaveData; - isVictory: boolean; - /*Automatically set to false at the moment - implementation TBD*/ - isFavorite: boolean; -} - export type StarterMoveset = [Moves] | [Moves, Moves] | [Moves, Moves, Moves] | [Moves, Moves, Moves, Moves]; export interface StarterFormMoveData { @@ -260,6 +229,39 @@ export interface StarterPreferences { [key: number]: StarterAttributes; } +export interface DexAttrProps { + shiny: boolean; + female: boolean; + variant: Variant; + formIndex: number; +} + +export type RunHistoryData = Record; + +export interface RunEntry { + entry: SessionSaveData; + isVictory: boolean; + /*Automatically set to false at the moment - implementation TBD*/ + isFavorite: boolean; +} + +export const DexAttr = { + NON_SHINY: 1n, + SHINY: 2n, + MALE: 4n, + FEMALE: 8n, + DEFAULT_VARIANT: 16n, + VARIANT_2: 32n, + VARIANT_3: 64n, + DEFAULT_FORM: 128n, +}; + +export const AbilityAttr = { + ABILITY_1: 1, + ABILITY_2: 2, + ABILITY_HIDDEN: 4, +}; + // the latest data saved/loaded for the Starter Preferences. Required to reduce read/writes. Initialize as "{}", since this is the default value and no data needs to be stored if present. // if they ever add private static variables, move this into StarterPrefs const StarterPrefers_DEFAULT: string = "{}"; @@ -359,8 +361,8 @@ export class GameData { this.loadSettings(); this.loadGamepadSettings(); this.loadMappingConfigs(); - this.trainerId = Utils.randInt(65536); - this.secretId = Utils.randInt(65536); + this.trainerId = randInt(65536); + this.secretId = randInt(65536); this.starterData = {}; this.gameStats = new GameStats(); this.runHistory = {}; @@ -588,7 +590,7 @@ export class GameData { } if (systemData.voucherCounts) { - Utils.getEnumKeys(VoucherType).forEach(key => { + getEnumKeys(VoucherType).forEach(key => { const index = VoucherType[key]; this.voucherCounts[index] = systemData.voucherCounts[index] || 0; }); @@ -616,7 +618,7 @@ export class GameData { * At the moment, only retrievable from locale cache */ async getRunHistoryData(): Promise { - if (!Utils.isLocal) { + if (!isLocal) { /** * Networking Code DO NOT DELETE! * Note: Might have to be migrated to `pokerogue-api.ts` @@ -1034,6 +1036,7 @@ export class GameData { } getSession(slotId: number): Promise { + // biome-ignore lint/suspicious/noAsyncPromiseExecutor: return new Promise(async (resolve, reject) => { if (slotId < 0) { return resolve(null); @@ -1074,6 +1077,7 @@ export class GameData { } loadSession(slotId: number, sessionData?: SessionSaveData): Promise { + // biome-ignore lint/suspicious/noAsyncPromiseExecutor: return new Promise(async (resolve, reject) => { try { const initSessionFromData = async (sessionData: SessionSaveData) => { @@ -1405,7 +1409,7 @@ export class GameData { saveAll(skipVerification = false, sync = false, useCachedSession = false, useCachedSystem = false): Promise { return new Promise(resolve => { - Utils.executeIf(!skipVerification, updateUserInfo).then(success => { + executeIf(!skipVerification, updateUserInfo).then(success => { if (success !== null && !success) { return resolve(false); } @@ -1422,12 +1426,11 @@ export class GameData { ), ) // TODO: is this bang correct? : this.getSessionSaveData(); - const maxIntAttrValue = 0x80000000; const systemData = useCachedSystem ? this.parseSystemData(decrypt(localStorage.getItem(`data_${loggedInUser?.username}`)!, bypassLogin)) : this.getSystemSaveData(); // TODO: is this bang correct? - + const request = { system: systemData, session: sessionData, @@ -1444,7 +1447,6 @@ export class GameData { bypassLogin, ), ); - localStorage.setItem( `sessionData${globalScene.sessionSlotId ? globalScene.sessionSlotId : ""}_${loggedInUser?.username}`, encrypt(JSON.stringify(sessionData), bypassLogin), @@ -1553,16 +1555,18 @@ export class GameData { try { dataName = GameDataType[dataType].toLowerCase(); switch (dataType) { - case GameDataType.SYSTEM: + case GameDataType.SYSTEM: { dataStr = this.convertSystemDataStr(dataStr); const systemData = this.parseSystemData(dataStr); valid = !!systemData.dexData && !!systemData.timestamp; break; - case GameDataType.SESSION: + } + case GameDataType.SESSION: { const sessionData = this.parseSessionData(dataStr); valid = !!sessionData.party && !!sessionData.enemyParty && !!sessionData.timestamp; break; - case GameDataType.RUN_HISTORY: + } + case GameDataType.RUN_HISTORY: { const data = JSON.parse(dataStr); const keys = Object.keys(data); dataName = i18next.t("menuUiHandler:RUN_HISTORY").toLowerCase(); @@ -1572,6 +1576,7 @@ export class GameData { ["isFavorite", "isVictory", "entry"].every(v => entryKeys.includes(v)) && entryKeys.length === 3; }); break; + } case GameDataType.SETTINGS: case GameDataType.TUTORIALS: valid = true; @@ -1582,7 +1587,7 @@ export class GameData { } const displayError = (error: string) => - globalScene.ui.showText(error, null, () => globalScene.ui.showText("", 0), Utils.fixedInt(1500)); + globalScene.ui.showText(error, null, () => globalScene.ui.showText("", 0), fixedInt(1500)); dataName = dataName!; // tell TS compiler that dataName is defined! if (!valid) { @@ -1590,7 +1595,7 @@ export class GameData { `Your ${dataName} data could not be loaded. It may be corrupted.`, null, () => globalScene.ui.showText("", 0), - Utils.fixedInt(1500), + fixedInt(1500), ); } @@ -1683,7 +1688,7 @@ export class GameData { () => { const neutralNatures = [Nature.HARDY, Nature.DOCILE, Nature.SERIOUS, Nature.BASHFUL, Nature.QUIRKY]; for (let s = 0; s < defaultStarterSpecies.length; s++) { - defaultStarterNatures.push(Utils.randSeedItem(neutralNatures)); + defaultStarterNatures.push(randSeedItem(neutralNatures)); } }, 0, @@ -1789,7 +1794,9 @@ export class GameData { const dexEntry = this.dexData[species.speciesId]; const caughtAttr = dexEntry.caughtAttr; const formIndex = pokemon.formIndex; - const dexAttr = pokemon.getDexAttr(); + + // This makes sure that we do not try to unlock data which cannot be unlocked + const dexAttr = pokemon.getDexAttr() & species.getFullUnlocksData(); // Mark as caught dexEntry.caughtAttr |= dexAttr; @@ -1799,6 +1806,10 @@ export class GameData { // always true except for the case of Urshifu. const formKey = pokemon.getFormKey(); if (formIndex > 0) { + // In case a Pikachu with formIndex > 0 was unlocked, base form Pichu is also unlocked + if (pokemon.species.speciesId === Species.PIKACHU && species.speciesId === Species.PICHU) { + dexEntry.caughtAttr |= globalScene.gameData.getFormAttr(0); + } if (pokemon.species.speciesId === Species.URSHIFU) { if (formIndex === 2) { dexEntry.caughtAttr |= globalScene.gameData.getFormAttr(0); @@ -2178,8 +2189,8 @@ export class GameData { value = decrementValue(value); } - const cost = new Utils.NumberHolder(value); - applyChallenges(globalScene.gameMode, ChallengeType.STARTER_COST, speciesId, cost); + const cost = new NumberHolder(value); + applyChallenges(ChallengeType.STARTER_COST, speciesId, cost); return cost.value; } @@ -2206,7 +2217,7 @@ export class GameData { entry.hatchedCount = 0; } if (!entry.hasOwnProperty("natureAttr") || (entry.caughtAttr && !entry.natureAttr)) { - entry.natureAttr = this.defaultDexData?.[k].natureAttr || 1 << Utils.randInt(25, 1); + entry.natureAttr = this.defaultDexData?.[k].natureAttr || 1 << randInt(25, 1); } } } diff --git a/src/system/game-speed.ts b/src/system/game-speed.ts index e2156c03728..3df47fafc6c 100644 --- a/src/system/game-speed.ts +++ b/src/system/game-speed.ts @@ -3,17 +3,17 @@ import type FadeIn from "phaser3-rex-plugins/plugins/audio/fade/FadeIn"; import type FadeOut from "phaser3-rex-plugins/plugins/audio/fade/FadeOut"; import type BattleScene from "#app/battle-scene"; import { globalScene } from "#app/global-scene"; -import * as Utils from "../utils"; +import { FixedInt } from "#app/utils"; -type FadeIn = typeof FadeIn; -type FadeOut = typeof FadeOut; +type FadeInType = typeof FadeIn; +type FadeOutType = typeof FadeOut; export function initGameSpeed() { const thisArg = this as BattleScene; - const transformValue = (value: number | Utils.FixedInt): number => { - if (value instanceof Utils.FixedInt) { - return (value as Utils.FixedInt).value; + const transformValue = (value: number | FixedInt): number => { + if (value instanceof FixedInt) { + return (value as FixedInt).value; } return thisArg.gameSpeed === 1 ? value : Math.ceil((value /= thisArg.gameSpeed)); }; @@ -101,7 +101,7 @@ export function initGameSpeed() { const originalFadeOut = SoundFade.fadeOut; SoundFade.fadeOut = ((_scene: Phaser.Scene, sound: Phaser.Sound.BaseSound, duration: number, destroy?: boolean) => - originalFadeOut(globalScene, sound, transformValue(duration), destroy)) as FadeOut; + originalFadeOut(globalScene, sound, transformValue(duration), destroy)) as FadeOutType; const originalFadeIn = SoundFade.fadeIn; SoundFade.fadeIn = (( @@ -110,5 +110,5 @@ export function initGameSpeed() { duration: number, endVolume?: number, startVolume?: number, - ) => originalFadeIn(globalScene, sound, transformValue(duration), endVolume, startVolume)) as FadeIn; + ) => originalFadeIn(globalScene, sound, transformValue(duration), endVolume, startVolume)) as FadeInType; } diff --git a/src/system/pokemon-data.ts b/src/system/pokemon-data.ts index 76f5526e407..97ce494a43a 100644 --- a/src/system/pokemon-data.ts +++ b/src/system/pokemon-data.ts @@ -6,15 +6,14 @@ import type { PokeballType } from "#enums/pokeball"; import { getPokemonSpecies, getPokemonSpeciesForm } from "../data/pokemon-species"; import { Status } from "../data/status-effect"; import Pokemon, { EnemyPokemon, PokemonMove, PokemonSummonData } from "../field/pokemon"; -import { TrainerSlot } from "../data/trainer-config"; -import type { Variant } from "#app/data/variant"; +import { TrainerSlot } from "#enums/trainer-slot"; +import type { Variant } from "#app/sprites/variant"; import { loadBattlerTag } from "../data/battler-tags"; import type { Biome } from "#enums/biome"; import { Moves } from "#enums/moves"; import type { Species } from "#enums/species"; import { CustomPokemonData } from "#app/data/custom-pokemon-data"; import type { PokemonType } from "#enums/pokemon-type"; -import { getSpeciesFormChangeMessage } from "#app/data/pokemon-forms"; export default class PokemonData { public id: number; @@ -35,7 +34,7 @@ export default class PokemonData { public stats: number[]; public ivs: number[]; public nature: Nature; - public moveset: (PokemonMove | null)[]; + public moveset: PokemonMove[]; public status: Status | null; public friendship: number; public metLevel: number; @@ -80,12 +79,14 @@ 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.nickname = sourcePokemon + ? (!!sourcePokemon.summonData?.illusion ? sourcePokemon.summonData.illusion.basePokemon.nickname : 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; - this.shiny = source.shiny; - this.variant = source.variant; + this.shiny = sourcePokemon ? sourcePokemon.isShiny() : source.shiny; + this.variant = sourcePokemon ? sourcePokemon.getVariant() : source.variant; this.pokeball = source.pokeball; this.level = source.level; this.exp = source.exp; @@ -118,8 +119,12 @@ export default class PokemonData { this.fusionSpecies = sourcePokemon ? sourcePokemon.fusionSpecies?.speciesId : source.fusionSpecies; this.fusionFormIndex = source.fusionFormIndex; this.fusionAbilityIndex = source.fusionAbilityIndex; - this.fusionShiny = source.fusionShiny; - this.fusionVariant = source.fusionVariant; + this.fusionShiny = sourcePokemon + ? (!!sourcePokemon.summonData?.illusion ? sourcePokemon.summonData.illusion.basePokemon.fusionShiny : sourcePokemon.fusionShiny) + : source.fusionShiny; + this.fusionVariant = sourcePokemon + ? (!!sourcePokemon.summonData?.illusion ? sourcePokemon.summonData.illusion.basePokemon.fusionVariant : sourcePokemon.fusionVariant) + : source.fusionVariant; this.fusionGender = source.fusionGender; this.fusionLuck = source.fusionLuck !== undefined ? source.fusionLuck : source.fusionShiny ? source.fusionVariant + 1 : 0; @@ -175,6 +180,7 @@ export default class PokemonData { this.summonData.types = source.summonData.types; this.summonData.speciesForm = source.summonData.speciesForm; this.summonDataSpeciesFormIndex = source.summonDataSpeciesFormIndex; + this.summonData.illusionBroken = source.summonData.illusionBroken; if (source.summonData.tags) { this.summonData.tags = source.summonData.tags?.map(t => loadBattlerTag(t)); @@ -220,6 +226,7 @@ export default class PokemonData { if (this.summonData) { // when loading from saved session, recover summonData.speciesFrom and form index species object // used to stay transformed on reload session + if (this.summonData.speciesForm) { this.summonData.speciesForm = getPokemonSpeciesForm( this.summonData.speciesForm.speciesId, diff --git a/src/system/settings/settings.ts b/src/system/settings/settings.ts index 1a7279d371c..377216291e2 100644 --- a/src/system/settings/settings.ts +++ b/src/system/settings/settings.ts @@ -916,6 +916,10 @@ export function setSetting(setting: string, value: number): boolean { label: "Español (ES)", handler: () => changeLocaleHandler("es-ES"), }, + { + label: "Español (LATAM)", + handler: () => changeLocaleHandler("es-MX"), + }, { label: "Italiano", handler: () => changeLocaleHandler("it"), @@ -948,10 +952,10 @@ export function setSetting(setting: string, value: number): boolean { label: "日本語", handler: () => changeLocaleHandler("ja"), }, - // { - // label: "Català", - // handler: () => changeLocaleHandler("ca-ES") - // }, + { + label: "Català", + handler: () => changeLocaleHandler("ca-ES"), + }, { label: i18next.t("settings:back"), handler: () => cancelHandler(), diff --git a/src/system/trainer-data.ts b/src/system/trainer-data.ts index 48ab8d8d42a..0e6298309bc 100644 --- a/src/system/trainer-data.ts +++ b/src/system/trainer-data.ts @@ -5,8 +5,8 @@ export default class TrainerData { public trainerType: TrainerType; public variant: TrainerVariant; public partyTemplateIndex: number; - public name: string; - public partnerName: string; + public nameKey: string; + public partnerNameKey: string | undefined; constructor(source: Trainer | any) { const sourceTrainer = source instanceof Trainer ? (source as Trainer) : null; @@ -17,11 +17,11 @@ export default class TrainerData { ? TrainerVariant.FEMALE : TrainerVariant.DEFAULT; this.partyTemplateIndex = source.partyMemberTemplateIndex; - this.name = source.name; - this.partnerName = source.partnerName; + this.nameKey = source.nameKey; + this.partnerNameKey = source.partnerNameKey; } toTrainer(): Trainer { - return new Trainer(this.trainerType, this.variant, this.partyTemplateIndex, this.name, this.partnerName); + return new Trainer(this.trainerType, this.variant, this.partyTemplateIndex, this.nameKey, this.partnerNameKey); } } diff --git a/src/system/version_migration/version_converter.ts b/src/system/version_migration/version_converter.ts index 3c5abc2cc18..1fdb9e93f88 100644 --- a/src/system/version_migration/version_converter.ts +++ b/src/system/version_migration/version_converter.ts @@ -1,16 +1,107 @@ -import type { SessionSaveData, SystemSaveData } from "../game-data"; +import type { SessionSaveMigrator } from "#app/@types/SessionSaveMigrator"; +import type { SettingsSaveMigrator } from "#app/@types/SettingsSaveMigrator"; +import type { SystemSaveMigrator } from "#app/@types/SystemSaveMigrator"; +import type { SessionSaveData, SystemSaveData } from "#app/system/game-data"; +import { compareVersions } from "compare-versions"; import { version } from "../../../package.json"; +/* +// template for save migrator creation +// versions/vA_B_C.ts + +// The version for each migrator should match the filename, ie: `vA_B_C.ts` -> `version: "A.B.C" +// This is the target version (aka the version we're ending up on after the migrators are run) + +// The name for each migrator should match its purpose. For example, if you're fixing +// the ability index of a pokemon, it might be called `migratePokemonAbilityIndex` + +const systemMigratorA: SystemSaveMigrator = { + version: "A.B.C", + migrate: (data: SystemSaveData): void => { + // migration code goes here + }, +}; + +export const systemMigrators: Readonly = [systemMigratorA] as const; + +const sessionMigratorA: SessionSaveMigrator = { + version: "A.B.C", + migrate: (data: SessionSaveData): void => { + // migration code goes here + }, +}; + +export const sessionMigrators: Readonly = [sessionMigratorA] as const; + +const settingsMigratorA: SettingsSaveMigrator = { + version: "A.B.C", + // biome-ignore lint/complexity/noBannedTypes: TODO - refactor settings + migrate: (data: Object): void => { + // migration code goes here + }, +}; + +export const settingsMigrators: Readonly = [settingsMigratorA] as const; +*/ + +// --- vA.B.C PATCHES --- // +// import * as vA_B_C from "./versions/vA_B_C"; + // --- v1.0.4 (and below) PATCHES --- // +// biome-ignore lint/style/noNamespaceImport: Convenience (TODO: make this a file-wide ignore when Biome supports those) import * as v1_0_4 from "./versions/v1_0_4"; -// --- v1.1.0 PATCHES --- // -import * as v1_1_0 from "./versions/v1_1_0"; - // --- v1.7.0 PATCHES --- // +// biome-ignore lint/style/noNamespaceImport: Convenience import * as v1_7_0 from "./versions/v1_7_0"; -const LATEST_VERSION = version.split(".").map(value => Number.parseInt(value)); +// --- v1.8.3 PATCHES --- // +// biome-ignore lint/style/noNamespaceImport: Convenience +import * as v1_8_3 from "./versions/v1_8_3"; + +/** Current game version */ +const LATEST_VERSION = version; + +type SaveMigrator = SystemSaveMigrator | SessionSaveMigrator | SettingsSaveMigrator; + +// biome-ignore lint/complexity/noBannedTypes: TODO - refactor settings +type SaveData = SystemSaveData | SessionSaveData | Object; + +// To add a new set of migrators, create a new `.push()` line like so: +// `systemMigrators.push(...vA_B_C.systemMigrators);` + +/** All system save migrators */ +const systemMigrators: SystemSaveMigrator[] = []; +systemMigrators.push(...v1_0_4.systemMigrators); +systemMigrators.push(...v1_7_0.systemMigrators); +systemMigrators.push(...v1_8_3.systemMigrators); + +/** All session save migrators */ +const sessionMigrators: SessionSaveMigrator[] = []; +sessionMigrators.push(...v1_0_4.sessionMigrators); +sessionMigrators.push(...v1_7_0.sessionMigrators); + +/** All settings migrators */ +const settingsMigrators: SettingsSaveMigrator[] = []; +settingsMigrators.push(...v1_0_4.settingsMigrators); + +/** Sorts migrators by their stated version, ensuring they are applied in order from oldest to newest */ +const sortMigrators = (migrators: SaveMigrator[]): void => { + migrators.sort((a, b) => compareVersions(a.version, b.version)); +}; + +sortMigrators(systemMigrators); +sortMigrators(sessionMigrators); +sortMigrators(settingsMigrators); + +const applyMigrators = (migrators: readonly SaveMigrator[], data: SaveData, saveVersion: string) => { + for (const migrator of migrators) { + const isMigratorVersionHigher = compareVersions(saveVersion, migrator.version) === -1; + if (isMigratorVersionHigher) { + migrator.migrate(data as any); + } + } +}; /** * Converts incoming {@linkcode SystemSaveData} that has a version below the @@ -23,12 +114,12 @@ const LATEST_VERSION = version.split(".").map(value => Number.parseInt(value)); * @see {@link SystemVersionConverter} */ export function applySystemVersionMigration(data: SystemSaveData) { - const curVersion = data.gameVersion.split(".").map(value => Number.parseInt(value)); + const prevVersion = data.gameVersion; + const isCurrentVersionHigher = compareVersions(prevVersion, LATEST_VERSION) === -1; - if (!curVersion.every((value, index) => value === LATEST_VERSION[index])) { - const converter = new SystemVersionConverter(); - converter.applyStaticPreprocessors(data); - converter.applyMigration(data, curVersion); + if (isCurrentVersionHigher) { + applyMigrators(systemMigrators, data, prevVersion); + console.log(`System data successfully migrated to v${LATEST_VERSION}!`); } } @@ -43,12 +134,15 @@ export function applySystemVersionMigration(data: SystemSaveData) { * @see {@link SessionVersionConverter} */ export function applySessionVersionMigration(data: SessionSaveData) { - const curVersion = data.gameVersion.split(".").map(value => Number.parseInt(value)); + const prevVersion = data.gameVersion; + const isCurrentVersionHigher = compareVersions(prevVersion, LATEST_VERSION) === -1; - if (!curVersion.every((value, index) => value === LATEST_VERSION[index])) { - const converter = new SessionVersionConverter(); - converter.applyStaticPreprocessors(data); - converter.applyMigration(data, curVersion); + if (isCurrentVersionHigher) { + // Always sanitize money as a safeguard + data.money = Math.floor(data.money); + + applyMigrators(sessionMigrators, data, prevVersion); + console.log(`Session data successfully migrated to v${LATEST_VERSION}!`); } } @@ -62,150 +156,13 @@ export function applySessionVersionMigration(data: SessionSaveData) { * @param data Settings data object * @see {@link SettingsVersionConverter} */ +// biome-ignore lint/complexity/noBannedTypes: TODO - refactor settings export function applySettingsVersionMigration(data: Object) { - const gameVersion: string = data.hasOwnProperty("gameVersion") ? data["gameVersion"] : "1.0.0"; - const curVersion = gameVersion.split(".").map(value => Number.parseInt(value)); + const prevVersion: string = data.hasOwnProperty("gameVersion") ? data["gameVersion"] : "1.0.0"; + const isCurrentVersionHigher = compareVersions(prevVersion, LATEST_VERSION) === -1; - if (!curVersion.every((value, index) => value === LATEST_VERSION[index])) { - const converter = new SettingsVersionConverter(); - converter.applyStaticPreprocessors(data); - converter.applyMigration(data, curVersion); - } -} - -/** - * Abstract class encapsulating the logic for migrating data from a given version up to - * the current version listed in `package.json`. - * - * Note that, for any version converter, the corresponding `applyMigration` - * function would only need to be changed once when the first migration for a - * given version is introduced. Similarly, a version file (within the `versions` - * folder) would only need to be created for a version once with the appropriate - * array nomenclature. - */ -abstract class VersionConverter { - /** - * Iterates through an array of designated migration functions that are each - * called one by one to transform the data. - * @param data The data to be operated on - * @param migrationArr An array of functions that will transform the incoming data - */ - callMigrators(data: any, migrationArr: readonly any[]) { - for (const migrate of migrationArr) { - migrate(data); - } - } - - /** - * Applies any version-agnostic data sanitation as defined within the function - * body. - * @param data The data to be operated on - */ - applyStaticPreprocessors(_data: any): void {} - - /** - * Uses the current version the incoming data to determine the starting point - * of the migration which will cascade up to the latest version, calling the - * necessary migration functions in the process. - * @param data The data to be operated on - * @param curVersion [0] Current major version - * [1] Current minor version - * [2] Current patch version - */ - abstract applyMigration(data: any, curVersion: number[]): void; -} - -/** - * Class encapsulating the logic for migrating {@linkcode SessionSaveData} from - * a given version up to the current version listed in `package.json`. - * @extends VersionConverter - */ -class SessionVersionConverter extends VersionConverter { - override applyStaticPreprocessors(data: SessionSaveData): void { - // Always sanitize money as a safeguard - data.money = Math.floor(data.money); - } - - override applyMigration(data: SessionSaveData, curVersion: number[]): void { - const [curMajor, curMinor, curPatch] = curVersion; - - if (curMajor === 1) { - if (curMinor === 0) { - if (curPatch <= 5) { - console.log("Applying v1.0.4 session data migration!"); - this.callMigrators(data, v1_0_4.sessionMigrators); - } - } - if (curMinor <= 1) { - console.log("Applying v1.1.0 session data migration!"); - this.callMigrators(data, v1_1_0.sessionMigrators); - } - if (curMinor < 7) { - console.log("Applying v1.7.0 session data migration!"); - this.callMigrators(data, v1_7_0.sessionMigrators); - } - } - - console.log(`Session data successfully migrated to v${version}!`); - } -} - -/** - * Class encapsulating the logic for migrating {@linkcode SystemSaveData} from - * a given version up to the current version listed in `package.json`. - * @extends VersionConverter - */ -class SystemVersionConverter extends VersionConverter { - override applyMigration(data: SystemSaveData, curVersion: number[]): void { - const [curMajor, curMinor, curPatch] = curVersion; - - if (curMajor === 1) { - if (curMinor === 0) { - if (curPatch <= 4) { - console.log("Applying v1.0.4 system data migraton!"); - this.callMigrators(data, v1_0_4.systemMigrators); - } - } - if (curMinor <= 1) { - console.log("Applying v1.1.0 system data migraton!"); - this.callMigrators(data, v1_1_0.systemMigrators); - } - if (curMinor < 7) { - console.log("Applying v1.7.0 system data migration!"); - this.callMigrators(data, v1_7_0.systemMigrators); - } - } - - console.log(`System data successfully migrated to v${version}!`); - } -} - -/** - * Class encapsulating the logic for migrating settings data from - * a given version up to the current version listed in `package.json`. - * @extends VersionConverter - */ -class SettingsVersionConverter extends VersionConverter { - override applyMigration(data: Object, curVersion: number[]): void { - const [curMajor, curMinor, curPatch] = curVersion; - - if (curMajor === 1) { - if (curMinor === 0) { - if (curPatch <= 4) { - console.log("Applying v1.0.4 settings data migraton!"); - this.callMigrators(data, v1_0_4.settingsMigrators); - } - } - if (curMinor <= 1) { - console.log("Applying v1.1.0 settings data migraton!"); - this.callMigrators(data, v1_1_0.settingsMigrators); - } - if (curMinor < 7) { - console.log("Applying v1.7.0 settings data migration!"); - this.callMigrators(data, v1_7_0.settingsMigrators); - } - } - - console.log(`Settings data successfully migrated to v${version}!`); + if (isCurrentVersionHigher) { + applyMigrators(settingsMigrators, data, prevVersion); + console.log(`Settings successfully migrated to v${LATEST_VERSION}!`); } } diff --git a/src/system/version_migration/versions/v1_0_4.ts b/src/system/version_migration/versions/v1_0_4.ts index 16bd9db9915..2139352b783 100644 --- a/src/system/version_migration/versions/v1_0_4.ts +++ b/src/system/version_migration/versions/v1_0_4.ts @@ -4,15 +4,18 @@ import { AbilityAttr, defaultStarterSpecies, DexAttr } from "#app/system/game-da import { allSpecies } from "#app/data/pokemon-species"; import { CustomPokemonData } from "#app/data/custom-pokemon-data"; import { isNullOrUndefined } from "#app/utils"; +import type { SystemSaveMigrator } from "#app/@types/SystemSaveMigrator"; +import type { SettingsSaveMigrator } from "#app/@types/SettingsSaveMigrator"; +import type { SessionSaveMigrator } from "#app/@types/SessionSaveMigrator"; -export const systemMigrators = [ - /** - * Migrate ability starter data if empty for caught species. - * @param data {@linkcode SystemSaveData} - */ - function migrateAbilityData(data: SystemSaveData) { +/** + * Migrate ability starter data if empty for caught species. + * @param data - {@linkcode SystemSaveData} + */ +const migrateAbilityData: SystemSaveMigrator = { + version: "1.0.4", + migrate: (data: SystemSaveData): void => { if (data.starterData && data.dexData) { - // biome-ignore lint/complexity/noForEach: Object.keys(data.starterData).forEach(sd => { if (data.dexData[sd]?.caughtAttr && data.starterData[sd] && !data.starterData[sd].abilityAttr) { data.starterData[sd].abilityAttr = 1; @@ -20,12 +23,15 @@ export const systemMigrators = [ }); } }, +}; - /** - * Populate legendary Pokémon statistics if they are missing. - * @param data {@linkcode SystemSaveData} - */ - function fixLegendaryStats(data: SystemSaveData) { +/** + * Populate legendary Pokémon statistics if they are missing. + * @param data - {@linkcode SystemSaveData} + */ +const fixLegendaryStats: SystemSaveMigrator = { + version: "1.0.4", + migrate: (data: SystemSaveData): void => { if ( data.gameStats && data.gameStats.legendaryPokemonCaught !== undefined && @@ -34,7 +40,6 @@ export const systemMigrators = [ data.gameStats.subLegendaryPokemonSeen = 0; data.gameStats.subLegendaryPokemonCaught = 0; data.gameStats.subLegendaryPokemonHatched = 0; - // biome-ignore lint/complexity/noForEach: allSpecies .filter(s => s.subLegendary) .forEach(s => { @@ -66,12 +71,15 @@ export const systemMigrators = [ ); } }, +}; - /** - * Unlock all starters' first ability and female gender option. - * @param data {@linkcode SystemSaveData} - */ - function fixStarterData(data: SystemSaveData) { +/** + * Unlock all starters' first ability and female gender option. + * @param data - {@linkcode SystemSaveData} + */ +const fixStarterData: SystemSaveMigrator = { + version: "1.0.4", + migrate: (data: SystemSaveData): void => { if (!isNullOrUndefined(data.starterData)) { for (const starterId of defaultStarterSpecies) { if (data.starterData[starterId]?.abilityAttr) { @@ -83,17 +91,22 @@ export const systemMigrators = [ } } }, +}; + +export const systemMigrators: Readonly = [ + migrateAbilityData, + fixLegendaryStats, + fixStarterData, ] as const; -export const settingsMigrators = [ - /** - * Migrate from "REROLL_TARGET" property to {@linkcode - * SettingKeys.Shop_Cursor_Target}. - * @param data the `settings` object - */ - - // biome-ignore lint/complexity/noBannedTypes: TODO: fix the type to not be object... - function fixRerollTarget(data: Object) { +/** + * Migrate from `REROLL_TARGET` property to {@linkcode SettingKeys.Shop_Cursor_Target} + * @param data - The `settings` object + */ +const fixRerollTarget: SettingsSaveMigrator = { + version: "1.0.4", + // biome-ignore lint/complexity/noBannedTypes: TODO - refactor settings + migrate: (data: Object): void => { if (data.hasOwnProperty("REROLL_TARGET") && !data.hasOwnProperty(SettingKeys.Shop_Cursor_Target)) { data[SettingKeys.Shop_Cursor_Target] = data["REROLL_TARGET"]; // biome-ignore lint/performance/noDelete: intentional @@ -101,16 +114,20 @@ export const settingsMigrators = [ localStorage.setItem("settings", JSON.stringify(data)); } }, -] as const; +}; -export const sessionMigrators = [ - /** - * Converts old lapsing modifiers (battle items, lures, and Dire Hit) and - * other miscellaneous modifiers (vitamins, White Herb) to any new class - * names and/or change in reload arguments. - * @param data {@linkcode SessionSaveData} - */ - function migrateModifiers(data: SessionSaveData) { +export const settingsMigrators: Readonly = [fixRerollTarget] as const; + +/** + * Converts old lapsing modifiers (battle items, lures, and Dire Hit) and + * other miscellaneous modifiers (vitamins, White Herb) to any new class + * names and/or change in reload arguments. + * @param data - {@linkcode SessionSaveData} + */ +const migrateModifiers: SessionSaveMigrator = { + version: "1.0.4", + // biome-ignore lint/complexity/noExcessiveCognitiveComplexity: necessary? + migrate: (data: SessionSaveData): void => { for (const m of data.modifiers) { if (m.className === "PokemonBaseStatModifier") { m.className = "BaseStatModifier"; @@ -163,12 +180,11 @@ export const sessionMigrators = [ } } }, - /** - * Converts old Pokemon natureOverride and mysteryEncounterData - * to use the new conjoined {@linkcode Pokemon.customPokemonData} structure instead. - * @param data {@linkcode SessionSaveData} - */ - function migrateCustomPokemonDataAndNatureOverrides(data: SessionSaveData) { +}; + +const migrateCustomPokemonData: SessionSaveMigrator = { + version: "1.0.4", + migrate: (data: SessionSaveData): void => { // Fix Pokemon nature overrides and custom data migration for (const pokemon of data.party) { if (pokemon["mysteryEncounterPokemonData"]) { @@ -186,4 +202,6 @@ export const sessionMigrators = [ } } }, -] as const; +}; + +export const sessionMigrators: Readonly = [migrateModifiers, migrateCustomPokemonData] as const; diff --git a/src/system/version_migration/versions/v1_1_0.ts b/src/system/version_migration/versions/v1_1_0.ts deleted file mode 100644 index 5d6247aeaa2..00000000000 --- a/src/system/version_migration/versions/v1_1_0.ts +++ /dev/null @@ -1,5 +0,0 @@ -export const systemMigrators = [] as const; - -export const settingsMigrators = [] as const; - -export const sessionMigrators = [] as const; diff --git a/src/system/version_migration/versions/v1_7_0.ts b/src/system/version_migration/versions/v1_7_0.ts index 167cd974e56..a1213ccf64c 100644 --- a/src/system/version_migration/versions/v1_7_0.ts +++ b/src/system/version_migration/versions/v1_7_0.ts @@ -1,15 +1,18 @@ +import type { SessionSaveMigrator } from "#app/@types/SessionSaveMigrator"; +import type { SystemSaveMigrator } from "#app/@types/SystemSaveMigrator"; import { getPokemonSpecies, getPokemonSpeciesForm } from "#app/data/pokemon-species"; import { globalScene } from "#app/global-scene"; import { DexAttr, type SessionSaveData, type SystemSaveData } from "#app/system/game-data"; -import * as Utils from "#app/utils"; +import { isNullOrUndefined } from "#app/utils"; -export const systemMigrators = [ - /** - * If a starter is caught, but the only forms registered as caught are not starterSelectable, - * unlock the default form. - * @param data {@linkcode SystemSaveData} - */ - function migrateUnselectableForms(data: SystemSaveData) { +/** + * If a starter is caught, but the only forms registered as caught are not starterSelectable, + * unlock the default form. + * @param data - {@linkcode SystemSaveData} + */ +const migrateUnselectableForms: SystemSaveMigrator = { + version: "1.7.0", + migrate: (data: SystemSaveData): void => { if (data.starterData && data.dexData) { Object.keys(data.starterData).forEach(sd => { const caughtAttr = data.dexData[sd]?.caughtAttr; @@ -30,12 +33,13 @@ export const systemMigrators = [ }); } }, -] as const; +}; -export const settingsMigrators = [] as const; +export const systemMigrators: Readonly = [migrateUnselectableForms] as const; -export const sessionMigrators = [ - function migrateTera(data: SessionSaveData) { +const migrateTera: SessionSaveMigrator = { + version: "1.7.0", + migrate: (data: SessionSaveData): void => { for (let i = 0; i < data.modifiers.length; ) { if (data.modifiers[i].className === "TerastallizeModifier") { data.party.forEach(p => { @@ -63,15 +67,17 @@ export const sessionMigrators = [ } data.party.forEach(p => { - if (Utils.isNullOrUndefined(p.teraType)) { + if (isNullOrUndefined(p.teraType)) { p.teraType = getPokemonSpeciesForm(p.species, p.formIndex).type1; } }); data.enemyParty.forEach(p => { - if (Utils.isNullOrUndefined(p.teraType)) { + if (isNullOrUndefined(p.teraType)) { p.teraType = getPokemonSpeciesForm(p.species, p.formIndex).type1; } }); }, -] as const; +}; + +export const sessionMigrators: Readonly = [migrateTera] as const; diff --git a/src/system/version_migration/versions/v1_8_3.ts b/src/system/version_migration/versions/v1_8_3.ts new file mode 100644 index 00000000000..6e2d96d3673 --- /dev/null +++ b/src/system/version_migration/versions/v1_8_3.ts @@ -0,0 +1,30 @@ +import type { SystemSaveMigrator } from "#app/@types/SystemSaveMigrator"; +import { getPokemonSpecies } from "#app/data/pokemon-species"; +import { DexAttr, type SystemSaveData } from "#app/system/game-data"; +import { Species } from "#enums/species"; + +/** + * If a starter is caught, but the only forms registered as caught are not starterSelectable, + * unlock the default form. + * @param data - {@linkcode SystemSaveData} + */ +const migratePichuForms: SystemSaveMigrator = { + version: "1.8.3", + migrate: (data: SystemSaveData): void => { + if (data.starterData && data.dexData) { + // This is Pichu's Pokédex number + const sd = 172; + const caughtAttr = data.dexData[sd]?.caughtAttr; + const species = getPokemonSpecies(sd); + // An extra check because you never know + if (species.speciesId === Species.PICHU && caughtAttr) { + // Ensuring that only existing forms are unlocked + data.dexData[sd].caughtAttr &= species.getFullUnlocksData(); + // If no forms are unlocked now, since Pichu is caught, we unlock form 0 + data.dexData[sd].caughtAttr |= DexAttr.DEFAULT_FORM; + } + } + }, +}; + +export const systemMigrators: Readonly = [migratePichuForms] as const; diff --git a/src/system/voucher.ts b/src/system/voucher.ts index 39294bccf13..ce10560c3e2 100644 --- a/src/system/voucher.ts +++ b/src/system/voucher.ts @@ -3,7 +3,7 @@ import { AchvTier, achvs, getAchievementDescription } from "./achv"; import type { PlayerGender } from "#enums/player-gender"; import { TrainerType } from "#enums/trainer-type"; import type { ConditionFn } from "#app/@types/common"; -import { trainerConfigs } from "#app/data/trainer-config"; +import { trainerConfigs } from "#app/data/trainers/trainer-config"; export enum VoucherType { REGULAR, diff --git a/src/timed-event-manager.ts b/src/timed-event-manager.ts index 80667b033ad..7bbd157948b 100644 --- a/src/timed-event-manager.ts +++ b/src/timed-event-manager.ts @@ -9,6 +9,7 @@ import { WeatherType } from "#enums/weather-type"; import { CLASSIC_CANDY_FRIENDSHIP_MULTIPLIER } from "./data/balance/starters"; import { MysteryEncounterType } from "./enums/mystery-encounter-type"; import { MysteryEncounterTier } from "./enums/mystery-encounter-tier"; +import { Challenges } from "#enums/challenges"; export enum EventType { SHINY, @@ -36,6 +37,18 @@ interface EventMysteryEncounterTier { disable?: boolean; } +interface EventWaveReward { + wave: number; + type: string; +} + +type EventMusicReplacement = [string, string]; + +interface EventChallenge { + challenge: Challenges; + value: number; +} + interface TimedEvent extends EventBanner { name: string; eventType: EventType; @@ -51,6 +64,10 @@ interface TimedEvent extends EventBanner { mysteryEncounterTierChanges?: EventMysteryEncounterTier[]; luckBoostedSpecies?: Species[]; boostFusions?: boolean; //MODIFIER REWORK PLEASE + classicWaveRewards?: EventWaveReward[]; // Rival battle rewards + trainerShinyChance?: number; // Odds over 65536 of trainer mon generating as shiny + music?: EventMusicReplacement[]; + dailyRunChallenges?: EventChallenge[]; } const timedEvents: TimedEvent[] = [ @@ -61,7 +78,7 @@ const timedEvents: TimedEvent[] = [ upgradeUnlockedVouchers: true, startDate: new Date(Date.UTC(2024, 11, 21, 0)), endDate: new Date(Date.UTC(2025, 0, 4, 0)), - bannerKey: "winter_holidays2024-event-", + bannerKey: "winter_holidays2024-event", scale: 0.21, availableLangs: ["en", "de", "it", "fr", "ja", "ko", "es-ES", "pt-BR", "zh-CN"], eventEncounters: [ @@ -104,6 +121,12 @@ const timedEvents: TimedEvent[] = [ disable: true, }, ], + classicWaveRewards: [ + { wave: 8, type: "SHINY_CHARM" }, + { wave: 8, type: "ABILITY_CHARM" }, + { wave: 8, type: "CATCHING_CHARM" }, + { wave: 25, type: "SHINY_CHARM" }, + ], }, { name: "Year of the Snake", @@ -111,7 +134,7 @@ const timedEvents: TimedEvent[] = [ luckBoost: 1, startDate: new Date(Date.UTC(2025, 0, 29, 0)), endDate: new Date(Date.UTC(2025, 1, 3, 0)), - bannerKey: "yearofthesnakeevent-", + bannerKey: "yearofthesnakeevent", scale: 0.21, availableLangs: ["en", "de", "it", "fr", "ja", "ko", "es-ES", "pt-BR", "zh-CN"], eventEncounters: [ @@ -169,6 +192,12 @@ const timedEvents: TimedEvent[] = [ Species.ROARING_MOON, Species.BLOODMOON_URSALUNA, ], + classicWaveRewards: [ + { wave: 8, type: "SHINY_CHARM" }, + { wave: 8, type: "ABILITY_CHARM" }, + { wave: 8, type: "CATCHING_CHARM" }, + { wave: 25, type: "SHINY_CHARM" }, + ], }, { name: "Valentine", @@ -177,7 +206,7 @@ const timedEvents: TimedEvent[] = [ endDate: new Date(Date.UTC(2025, 1, 21)), boostFusions: true, shinyMultiplier: 2, - bannerKey: "valentines2025event-", + bannerKey: "valentines2025event", scale: 0.21, availableLangs: ["en", "de", "it", "fr", "ja", "ko", "es-ES", "pt-BR", "zh-CN"], eventEncounters: [ @@ -203,6 +232,12 @@ const timedEvents: TimedEvent[] = [ { species: Species.ENAMORUS }, ], luckBoostedSpecies: [Species.LUVDISC], + classicWaveRewards: [ + { wave: 8, type: "SHINY_CHARM" }, + { wave: 8, type: "ABILITY_CHARM" }, + { wave: 8, type: "CATCHING_CHARM" }, + { wave: 25, type: "SHINY_CHARM" }, + ], }, { name: "PKMNDAY2025", @@ -210,7 +245,7 @@ const timedEvents: TimedEvent[] = [ startDate: new Date(Date.UTC(2025, 1, 27)), endDate: new Date(Date.UTC(2025, 2, 4)), classicFriendshipMultiplier: 4, - bannerKey: "pkmnday2025event-", + bannerKey: "pkmnday2025event", scale: 0.21, availableLangs: ["en", "de", "it", "fr", "ja", "ko", "es-ES", "pt-BR", "zh-CN"], eventEncounters: [ @@ -248,6 +283,32 @@ const timedEvents: TimedEvent[] = [ Species.ZYGARDE, Species.ETERNAL_FLOETTE, ], + classicWaveRewards: [ + { wave: 8, type: "SHINY_CHARM" }, + { wave: 8, type: "ABILITY_CHARM" }, + { wave: 8, type: "CATCHING_CHARM" }, + { wave: 25, type: "SHINY_CHARM" }, + ], + }, + { + name: "April Fools 2025", + eventType: EventType.LUCK, + startDate: new Date(Date.UTC(2025, 2, 31)), + endDate: new Date(Date.UTC(2025, 3, 3)), + bannerKey: "aprf25", + scale: 0.21, + availableLangs: ["en", "de", "it", "fr", "ja", "ko", "es-ES", "es-MX", "pt-BR", "zh-CN"], + trainerShinyChance: 13107, // 13107/65536 = 1/5 + music: [ + ["title", "title_afd"], + ["battle_rival_3", "battle_rival_3_afd"], + ], + dailyRunChallenges: [ + { + challenge: Challenges.INVERSE_BATTLE, + value: 1, + }, + ], }, ]; @@ -265,7 +326,7 @@ export class TimedEventManager { } activeEventHasBanner(): boolean { - const activeEvents = timedEvents.filter(te => this.isActive(te) && te.hasOwnProperty("bannerFilename")); + const activeEvents = timedEvents.filter(te => this.isActive(te) && te.hasOwnProperty("bannerKey")); return activeEvents.length > 0; } @@ -283,6 +344,12 @@ export class TimedEventManager { return timedEvents.find((te: TimedEvent) => this.isActive(te))?.bannerKey ?? ""; } + getEventBannerLangs(): string[] { + const ret: string[] = []; + ret.push(...timedEvents.find(te => this.isActive(te) && !isNullOrUndefined(te.availableLangs))?.availableLangs!); + return ret; + } + getEventEncounters(): EventEncounter[] { const ret: EventEncounter[] = []; timedEvents @@ -417,6 +484,55 @@ export class TimedEventManager { areFusionsBoosted(): boolean { return timedEvents.some(te => this.isActive(te) && te.boostFusions); } + + /** + * Gets all the modifier types associated with a certain wave during an event + * @see EventWaveReward + * @param wave the wave to check for associated rewards + * @returns array of strings of the event modifier reward types + */ + getFixedBattleEventRewards(wave: number): string[] { + const ret: string[] = []; + timedEvents + .filter(te => this.isActive(te) && !isNullOrUndefined(te.classicWaveRewards)) + .map(te => { + ret.push(...te.classicWaveRewards!.filter(cwr => cwr.wave === wave).map(cwr => cwr.type)); + }); + return ret; + } + + // Gets the extra shiny chance for trainers due to event (odds/65536) + getClassicTrainerShinyChance(): number { + let ret = 0; + const tsEvents = timedEvents.filter(te => this.isActive(te) && !isNullOrUndefined(te.trainerShinyChance)); + tsEvents.map(t => (ret += t.trainerShinyChance!)); + return ret; + } + + getEventBgmReplacement(bgm: string): string { + let ret = bgm; + timedEvents.map(te => { + if (this.isActive(te) && !isNullOrUndefined(te.music)) { + te.music.map(mr => { + if (mr[0] === bgm) { + console.log(`it is ${te.name} so instead of ${mr[0]} we play ${mr[1]}`); + ret = mr[1]; + } + }); + } + }); + return ret; + } + + /** + * Activates any challenges on {@linkcode globalScene.gameMode} for the currently active event + */ + startEventChallenges(): void { + const challenges = this.activeEvent()?.dailyRunChallenges; + challenges?.forEach((eventChal: EventChallenge) => + globalScene.gameMode.setChallengeValue(eventChal.challenge, eventChal.value), + ); + } } export class TimedEventDisplay extends Phaser.GameObjects.Container { @@ -456,11 +572,12 @@ export class TimedEventDisplay extends Phaser.GameObjects.Container { let key = this.event.bannerKey; if (lang && this.event.availableLangs && this.event.availableLangs.length > 0) { if (this.event.availableLangs.includes(lang)) { - key += lang; + key += "-" + lang; } else { - key += "en"; + key += "-en"; } } + console.log(key); console.log(this.event.bannerKey); const padding = 5; const showTimer = this.event.eventType !== EventType.NO_TIMER_DISPLAY; diff --git a/src/ui/abstact-option-select-ui-handler.ts b/src/ui/abstact-option-select-ui-handler.ts index f605f73e171..b360065f61d 100644 --- a/src/ui/abstact-option-select-ui-handler.ts +++ b/src/ui/abstact-option-select-ui-handler.ts @@ -3,7 +3,7 @@ import { TextStyle, addBBCodeTextObject, getTextColor, getTextStyleOptions } fro import { Mode } from "./ui"; import UiHandler from "./ui-handler"; import { addWindow } from "./ui-theme"; -import * as Utils from "../utils"; +import { rgbHexToRgba, fixedInt } from "#app/utils"; import { argbFromRgba } from "@material/material-color-utilities"; import { Button } from "#enums/buttons"; import BBCodeText from "phaser3-rex-plugins/plugins/gameobjects/tagtext/bbcodetext/BBCodeText"; @@ -178,8 +178,8 @@ export default abstract class AbstractOptionSelectUiHandler extends UiHandler { itemOverlayIcon.setPositionRelative(this.optionSelectText, 36 * this.scale, 7 + i * (114 * this.scale - 3)); if (option.itemArgs) { - itemIcon.setTint(argbFromRgba(Utils.rgbHexToRgba(option.itemArgs[0]))); - itemOverlayIcon.setTint(argbFromRgba(Utils.rgbHexToRgba(option.itemArgs[1]))); + itemIcon.setTint(argbFromRgba(rgbHexToRgba(option.itemArgs[0]))); + itemOverlayIcon.setTint(argbFromRgba(rgbHexToRgba(option.itemArgs[1]))); } } } @@ -207,7 +207,7 @@ export default abstract class AbstractOptionSelectUiHandler extends UiHandler { this.blockInput = true; this.optionSelectTextContainer.setAlpha(0.5); this.cursorObj?.setAlpha(0.8); - globalScene.time.delayedCall(Utils.fixedInt(this.config.delay), () => this.unblockInput()); + globalScene.time.delayedCall(fixedInt(this.config.delay), () => this.unblockInput()); } if (this.config?.supportHover) { diff --git a/src/ui/arena-flyout.ts b/src/ui/arena-flyout.ts index 36a44eb5aa0..1eb18a32f98 100644 --- a/src/ui/arena-flyout.ts +++ b/src/ui/arena-flyout.ts @@ -16,7 +16,7 @@ import type { TurnEndEvent } from "../events/battle-scene"; import { BattleSceneEventType } from "../events/battle-scene"; import { ArenaTagType } from "#enums/arena-tag-type"; import TimeOfDayWidget from "./time-of-day-widget"; -import * as Utils from "../utils"; +import { toCamelCaseString, formatText, fixedInt } from "#app/utils"; import type { ParseKeys } from "i18next"; import i18next from "i18next"; @@ -47,10 +47,10 @@ export function getFieldEffectText(arenaTagType: string): string { if (!arenaTagType || arenaTagType === ArenaTagType.NONE) { return arenaTagType; } - const effectName = Utils.toCamelCaseString(arenaTagType); + const effectName = toCamelCaseString(arenaTagType); const i18nKey = `arenaFlyout:${effectName}` as ParseKeys; const resultName = i18next.t(i18nKey); - return !resultName || resultName === i18nKey ? Utils.formatText(arenaTagType) : resultName; + return !resultName || resultName === i18nKey ? formatText(arenaTagType) : resultName; } export class ArenaFlyout extends Phaser.GameObjects.Container { @@ -411,7 +411,7 @@ export class ArenaFlyout extends Phaser.GameObjects.Container { globalScene.tweens.add({ targets: this.flyoutParent, x: visible ? this.anchorX : this.anchorX - this.translationX, - duration: Utils.fixedInt(125), + duration: fixedInt(125), ease: "Sine.easeInOut", alpha: visible ? 1 : 0, onComplete: () => (this.timeOfDayWidget.parentVisible = visible), diff --git a/src/ui/base-stats-overlay.ts b/src/ui/base-stats-overlay.ts index 5a6c67cae7b..d0b0aff3a9d 100644 --- a/src/ui/base-stats-overlay.ts +++ b/src/ui/base-stats-overlay.ts @@ -1,7 +1,7 @@ import type { InfoToggle } from "../battle-scene"; import { TextStyle, addTextObject } from "./text"; import { addWindow } from "./ui-theme"; -import * as Utils from "../utils"; +import { fixedInt } from "#app/utils"; import i18next from "i18next"; import { globalScene } from "#app/global-scene"; @@ -93,7 +93,7 @@ export class BaseStatsOverlay extends Phaser.GameObjects.Container implements In } globalScene.tweens.add({ targets: this.statsLabels, - duration: Utils.fixedInt(125), + duration: fixedInt(125), ease: "Sine.easeInOut", alpha: visible ? 1 : 0, }); diff --git a/src/ui/battle-flyout.ts b/src/ui/battle-flyout.ts index 206546ad9cb..854f4cc4dd9 100644 --- a/src/ui/battle-flyout.ts +++ b/src/ui/battle-flyout.ts @@ -1,6 +1,6 @@ import type { default as Pokemon } from "../field/pokemon"; import { addTextObject, TextStyle } from "./text"; -import * as Utils from "../utils"; +import { fixedInt } from "#app/utils"; import { globalScene } from "#app/global-scene"; import type Move from "#app/data/moves/move"; import type { BerryUsedEvent, MoveUsedEvent } from "../events/battle-scene"; @@ -201,7 +201,7 @@ export default class BattleFlyout extends Phaser.GameObjects.Container { globalScene.tweens.add({ targets: this.flyoutParent, x: visible ? this.anchorX : this.anchorX - this.translationX, - duration: Utils.fixedInt(125), + duration: fixedInt(125), ease: "Sine.easeInOut", alpha: visible ? 1 : 0, }); diff --git a/src/ui/battle-info.ts b/src/ui/battle-info.ts index 355ab9167a1..06c5f7fb3f1 100644 --- a/src/ui/battle-info.ts +++ b/src/ui/battle-info.ts @@ -1,13 +1,13 @@ import type { EnemyPokemon, default as Pokemon } from "../field/pokemon"; import { getLevelTotalExp, getLevelRelExp } from "../data/exp"; -import * as Utils from "../utils"; +import { getLocalizedSpriteKey, fixedInt } from "#app/utils"; import { addTextObject, TextStyle } from "./text"; import { getGenderSymbol, getGenderColor, Gender } from "../data/gender"; import { StatusEffect } from "#enums/status-effect"; import { globalScene } from "#app/global-scene"; import { getTypeRgb } from "#app/data/type"; import { PokemonType } from "#enums/pokemon-type"; -import { getVariantTint } from "#app/data/variant"; +import { getVariantTint } from "#app/sprites/variant"; import { Stat } from "#enums/stat"; import BattleFlyout from "./battle-flyout"; import { WindowVariant, addWindow } from "./ui-theme"; @@ -163,7 +163,7 @@ export default class BattleInfo extends Phaser.GameObjects.Container { this.splicedIcon.setInteractive(new Phaser.Geom.Rectangle(0, 0, 12, 15), Phaser.Geom.Rectangle.Contains); this.add(this.splicedIcon); - this.statusIndicator = globalScene.add.sprite(0, 0, Utils.getLocalizedSpriteKey("statuses")); + this.statusIndicator = globalScene.add.sprite(0, 0, getLocalizedSpriteKey("statuses")); this.statusIndicator.setName("icon_status"); this.statusIndicator.setVisible(false); this.statusIndicator.setOrigin(0, 0); @@ -356,7 +356,7 @@ export default class BattleInfo extends Phaser.GameObjects.Container { }); this.teraIcon.on("pointerout", () => globalScene.ui.hideTooltip()); - const isFusion = pokemon.isFusion(); + const isFusion = pokemon.isFusion(true); this.splicedIcon.setPositionRelative( this.nameText, @@ -375,7 +375,7 @@ export default class BattleInfo extends Phaser.GameObjects.Container { } const doubleShiny = isFusion && pokemon.shiny && pokemon.fusionShiny; - const baseVariant = !doubleShiny ? pokemon.getVariant() : pokemon.variant; + const baseVariant = !doubleShiny ? pokemon.getVariant(true) : pokemon.variant; this.shinyIcon.setPositionRelative( this.nameText, @@ -536,7 +536,7 @@ export default class BattleInfo extends Phaser.GameObjects.Container { toggleStats(visible: boolean): void { globalScene.tweens.add({ targets: this.statsContainer, - duration: Utils.fixedInt(125), + duration: fixedInt(125), ease: "Sine.easeInOut", alpha: visible ? 1 : 0, }); @@ -617,6 +617,11 @@ export default class BattleInfo extends Phaser.GameObjects.Container { return resolve(); } + const gender: Gender = !!pokemon.summonData?.illusion ? pokemon.summonData?.illusion.gender : pokemon.gender; + + this.genderText.setText(getGenderSymbol(gender)); + this.genderText.setColor(getGenderColor(gender)); + const nameUpdated = this.lastName !== pokemon.getNameToRender(); if (nameUpdated) { @@ -638,8 +643,10 @@ export default class BattleInfo extends Phaser.GameObjects.Container { this.lastTeraType = teraType; } + const isFusion = pokemon.isFusion(true); + if (nameUpdated || teraTypeUpdated) { - this.splicedIcon.setVisible(!!pokemon.fusionSpecies); + this.splicedIcon.setVisible(isFusion); this.teraIcon.setPositionRelative( this.nameText, @@ -764,7 +771,17 @@ export default class BattleInfo extends Phaser.GameObjects.Container { this.lastStats = statsStr; } - this.shinyIcon.setVisible(pokemon.isShiny()); + this.shinyIcon.setVisible(pokemon.isShiny(true)); + + const doubleShiny = isFusion && pokemon.shiny && pokemon.fusionShiny; + const baseVariant = !doubleShiny ? pokemon.getVariant(true) : pokemon.variant; + this.shinyIcon.setTint(getVariantTint(baseVariant)); + + this.fusionShinyIcon.setVisible(doubleShiny); + if (isFusion) { + this.fusionShinyIcon.setTint(getVariantTint(pokemon.fusionVariant)); + } + this.fusionShinyIcon.setPosition(this.shinyIcon.x, this.shinyIcon.y); resolve(); }); @@ -777,10 +794,11 @@ export default class BattleInfo extends Phaser.GameObjects.Container { const nameSizeTest = addTextObject(0, 0, displayName, TextStyle.BATTLE_INFO); nameTextWidth = nameSizeTest.displayWidth; + const gender: Gender = !!pokemon.summonData?.illusion ? pokemon.summonData?.illusion.gender : pokemon.gender; while ( nameTextWidth > (this.player || !this.boss ? 60 : 98) - - ((pokemon.gender !== Gender.GENDERLESS ? 6 : 0) + + ((gender !== Gender.GENDERLESS ? 6 : 0) + (pokemon.fusionSpecies ? 8 : 0) + (pokemon.isShiny() ? 8 : 0) + (Math.min(pokemon.level.toString().length, 3) - 3) * 8) diff --git a/src/ui/bgm-bar.ts b/src/ui/bgm-bar.ts index 45ed766c7fa..d944453ba2c 100644 --- a/src/ui/bgm-bar.ts +++ b/src/ui/bgm-bar.ts @@ -1,6 +1,6 @@ import { addTextObject, TextStyle } from "./text"; import i18next from "i18next"; -import * as Utils from "#app/utils"; +import { formatText } from "#app/utils"; import { globalScene } from "#app/global-scene"; const hiddenX = -150; @@ -100,7 +100,7 @@ export default class BgmBar extends Phaser.GameObjects.Container { getRealBgmName(bgmName: string): string { return i18next.t([`bgmName:${bgmName}`, "bgmName:missing_entries"], { - name: Utils.formatText(bgmName), + name: formatText(bgmName), }); } } diff --git a/src/ui/candy-bar.ts b/src/ui/candy-bar.ts index ba85ed7fef3..0cf3e0c91e9 100644 --- a/src/ui/candy-bar.ts +++ b/src/ui/candy-bar.ts @@ -2,7 +2,7 @@ import { starterColors } from "#app/battle-scene"; import { globalScene } from "#app/global-scene"; import { TextStyle, addTextObject } from "./text"; import { argbFromRgba } from "@material/material-color-utilities"; -import * as Utils from "../utils"; +import { rgbHexToRgba } from "#app/utils"; import type { Species } from "#enums/species"; export default class CandyBar extends Phaser.GameObjects.Container { @@ -60,8 +60,8 @@ export default class CandyBar extends Phaser.GameObjects.Container { const colorScheme = starterColors[starterSpeciesId]; - this.candyIcon.setTint(argbFromRgba(Utils.rgbHexToRgba(colorScheme[0]))); - this.candyOverlayIcon.setTint(argbFromRgba(Utils.rgbHexToRgba(colorScheme[1]))); + this.candyIcon.setTint(argbFromRgba(rgbHexToRgba(colorScheme[0]))); + this.candyOverlayIcon.setTint(argbFromRgba(rgbHexToRgba(colorScheme[1]))); this.countText.setText( `${globalScene.gameData.starterData[starterSpeciesId].candyCount + count} (+${count.toString()})`, diff --git a/src/ui/challenges-select-ui-handler.ts b/src/ui/challenges-select-ui-handler.ts index 61989cd594e..caffede2487 100644 --- a/src/ui/challenges-select-ui-handler.ts +++ b/src/ui/challenges-select-ui-handler.ts @@ -5,7 +5,7 @@ import { addWindow } from "./ui-theme"; import { Button } from "#enums/buttons"; import i18next from "i18next"; import type { Challenge } from "#app/data/challenge"; -import * as Utils from "../utils"; +import { getLocalizedSpriteKey } from "#app/utils"; import { Challenges } from "#app/enums/challenges"; import BBCodeText from "phaser3-rex-plugins/plugins/bbcodetext"; import { Color, ShadowColor } from "#app/enums/color"; @@ -193,7 +193,7 @@ export default class GameChallengesUiHandler extends UiHandler { }; } - this.monoTypeValue = globalScene.add.sprite(8, 98, Utils.getLocalizedSpriteKey("types")); + this.monoTypeValue = globalScene.add.sprite(8, 98, getLocalizedSpriteKey("types")); this.monoTypeValue.setName("challenge-value-monotype-sprite"); this.monoTypeValue.setScale(0.86); this.monoTypeValue.setVisible(false); diff --git a/src/ui/char-sprite.ts b/src/ui/char-sprite.ts index 74c021a65b8..f717927c107 100644 --- a/src/ui/char-sprite.ts +++ b/src/ui/char-sprite.ts @@ -1,5 +1,5 @@ import { globalScene } from "#app/global-scene"; -import * as Utils from "../utils"; +import { MissingTextureKey } from "#app/utils"; export default class CharSprite extends Phaser.GameObjects.Container { private sprite: Phaser.GameObjects.Sprite; @@ -57,7 +57,7 @@ export default class CharSprite extends Phaser.GameObjects.Container { }, }); - this.setVisible(globalScene.textures.get(key).key !== Utils.MissingTextureKey); + this.setVisible(globalScene.textures.get(key).key !== MissingTextureKey); this.shown = true; this.key = key; diff --git a/src/ui/confirm-ui-handler.ts b/src/ui/confirm-ui-handler.ts index a8710b0ab01..eb7018051b7 100644 --- a/src/ui/confirm-ui-handler.ts +++ b/src/ui/confirm-ui-handler.ts @@ -21,11 +21,12 @@ export default class ConfirmUiHandler extends AbstractOptionSelectUiHandler { show(args: any[]): boolean { if ( - args.length === 4 && + args.length === 5 && args[0] instanceof Function && args[1] instanceof Function && args[2] instanceof Function && - args[3] === "fullParty" + args[3] instanceof Function && + args[4] === "fullParty" ) { const config: OptionSelectConfig = { options: [ @@ -37,29 +38,36 @@ export default class ConfirmUiHandler extends AbstractOptionSelectUiHandler { }, }, { - label: i18next.t("menu:yes"), + label: i18next.t("partyUiHandler:POKEDEX"), handler: () => { args[1](); return true; }, }, { - label: i18next.t("menu:no"), + label: i18next.t("menu:yes"), handler: () => { args[2](); return true; }, }, + { + label: i18next.t("menu:no"), + handler: () => { + args[3](); + return true; + }, + }, ], - delay: args.length >= 8 && args[7] !== null ? (args[7] as number) : 0, + delay: args.length >= 9 && args[8] !== null ? (args[8] as number) : 0, }; super.show([config]); - this.switchCheck = args.length >= 5 && args[4] !== null && (args[4] as boolean); + this.switchCheck = args.length >= 6 && args[5] !== null && (args[5] as boolean); - const xOffset = args.length >= 6 && args[5] !== null ? (args[5] as number) : 0; - const yOffset = args.length >= 7 && args[6] !== null ? (args[6] as number) : 0; + const xOffset = args.length >= 7 && args[6] !== null ? (args[6] as number) : 0; + const yOffset = args.length >= 8 && args[7] !== null ? (args[7] as number) : 0; this.optionSelectContainer.setPosition(globalScene.game.canvas.width / 6 - 1 + xOffset, -48 + yOffset); diff --git a/src/ui/daily-run-scoreboard.ts b/src/ui/daily-run-scoreboard.ts index 53c737898e7..896f2171676 100644 --- a/src/ui/daily-run-scoreboard.ts +++ b/src/ui/daily-run-scoreboard.ts @@ -1,6 +1,6 @@ import i18next from "i18next"; import { globalScene } from "#app/global-scene"; -import * as Utils from "../utils"; +import { getEnumKeys, executeIf } from "#app/utils"; import { TextStyle, addTextObject } from "./text"; import { WindowVariant, addWindow } from "./ui-theme"; import { pokerogueApi } from "#app/plugins/api/pokerogue-api"; @@ -89,7 +89,7 @@ export class DailyRunScoreboard extends Phaser.GameObjects.Container { this.prevCategoryButton.setInteractive(new Phaser.Geom.Rectangle(0, 0, 6, 10), Phaser.Geom.Rectangle.Contains); this.prevCategoryButton.on("pointerup", () => { - this.update(this.category ? this.category - 1 : Utils.getEnumKeys(ScoreboardCategory).length - 1); + this.update(this.category ? this.category - 1 : getEnumKeys(ScoreboardCategory).length - 1); }); this.nextCategoryButton = globalScene.add.sprite(window.displayWidth - 4, 4, "cursor"); @@ -98,7 +98,7 @@ export class DailyRunScoreboard extends Phaser.GameObjects.Container { this.nextCategoryButton.setInteractive(new Phaser.Geom.Rectangle(0, 0, 6, 10), Phaser.Geom.Rectangle.Contains); this.nextCategoryButton.on("pointerup", () => { - this.update(this.category < Utils.getEnumKeys(ScoreboardCategory).length - 1 ? this.category + 1 : 0); + this.update(this.category < getEnumKeys(ScoreboardCategory).length - 1 ? this.category + 1 : 0); }); this.prevPageButton = globalScene.add.sprite( @@ -226,7 +226,7 @@ export class DailyRunScoreboard extends Phaser.GameObjects.Container { this.page = page = 1; } - Utils.executeIf(category !== this.category || this.pageCount === undefined, () => + executeIf(category !== this.category || this.pageCount === undefined, () => pokerogueApi.daily.getRankingsPageCount({ category }).then(count => (this.pageCount = count)), ) .then(() => { diff --git a/src/ui/egg-gacha-ui-handler.ts b/src/ui/egg-gacha-ui-handler.ts index cb6a474f01d..956a308448b 100644 --- a/src/ui/egg-gacha-ui-handler.ts +++ b/src/ui/egg-gacha-ui-handler.ts @@ -1,7 +1,7 @@ import { Mode } from "./ui"; import { TextStyle, addTextObject, getEggTierTextTint, getTextStyleOptions } from "./text"; import MessageUiHandler from "./message-ui-handler"; -import * as Utils from "../utils"; +import { getEnumValues, getEnumKeys, fixedInt, randSeedShuffle } from "#app/utils"; import type { IEggOptions } from "../data/egg"; import { Egg, getLegendaryGachaSpeciesForTimestamp } from "../data/egg"; import { VoucherType, getVoucherTypeIcon } from "../system/voucher"; @@ -83,7 +83,7 @@ export default class EggGachaUiHandler extends MessageUiHandler { }); } - Utils.getEnumValues(GachaType).forEach((gachaType, g) => { + getEnumValues(GachaType).forEach((gachaType, g) => { const gachaTypeKey = GachaType[gachaType].toString().toLowerCase(); const gachaContainer = globalScene.add.container(180 * g, 18); @@ -272,7 +272,7 @@ export default class EggGachaUiHandler extends MessageUiHandler { this.eggGachaContainer.add(this.eggGachaOptionsContainer); - new Array(Utils.getEnumKeys(VoucherType).length).fill(null).map((_, i) => { + new Array(getEnumKeys(VoucherType).length).fill(null).map((_, i) => { const container = globalScene.add.container(globalScene.game.canvas.width / 6 - 56 * i, 0); const bg = addWindow(0, 0, 56, 22); @@ -355,7 +355,7 @@ export default class EggGachaUiHandler extends MessageUiHandler { if (this.transitioning && this.transitionCancelled) { delay = Math.ceil(delay / 5); } - return Utils.fixedInt(delay); + return fixedInt(delay); } pull(pullCount = 0, count = 0, eggs?: Egg[]): void { @@ -476,7 +476,7 @@ export default class EggGachaUiHandler extends MessageUiHandler { eggs.push(egg); } // Shuffle the eggs in case the guaranteed one got added as last egg - eggs = Utils.randSeedShuffle(eggs); + eggs = randSeedShuffle(eggs); (globalScene.currentBattle ? globalScene.gameData.saveAll(true, true, true) @@ -643,7 +643,7 @@ export default class EggGachaUiHandler extends MessageUiHandler { } showError(text: string): void { - this.showText(text, undefined, () => this.showText(this.defaultText), Utils.fixedInt(1500)); + this.showText(text, undefined, () => this.showText(this.defaultText), fixedInt(1500)); } setTransitioning(transitioning: boolean): void { @@ -783,7 +783,7 @@ export default class EggGachaUiHandler extends MessageUiHandler { } break; case Button.RIGHT: - if (this.gachaCursor < Utils.getEnumKeys(GachaType).length - 1) { + if (this.gachaCursor < getEnumKeys(GachaType).length - 1) { success = this.setGachaCursor(this.gachaCursor + 1); } break; diff --git a/src/ui/fight-ui-handler.ts b/src/ui/fight-ui-handler.ts index a4f02e13303..27985629e3d 100644 --- a/src/ui/fight-ui-handler.ts +++ b/src/ui/fight-ui-handler.ts @@ -6,7 +6,7 @@ import { PokemonType } from "#enums/pokemon-type"; import { Command } from "./command-ui-handler"; import { Mode } from "./ui"; import UiHandler from "./ui-handler"; -import * as Utils from "../utils"; +import { getLocalizedSpriteKey, fixedInt, padInt } from "#app/utils"; import { MoveCategory } from "#enums/MoveCategory"; import i18next from "i18next"; import { Button } from "#enums/buttons"; @@ -54,7 +54,7 @@ export default class FightUiHandler extends UiHandler implements InfoToggle { this.typeIcon = globalScene.add.sprite( globalScene.scaledCanvas.width - 57, -36, - Utils.getLocalizedSpriteKey("types"), + getLocalizedSpriteKey("types"), "unknown", ); this.typeIcon.setVisible(false); @@ -199,7 +199,7 @@ export default class FightUiHandler extends UiHandler implements InfoToggle { } globalScene.tweens.add({ targets: [this.movesContainer, this.cursorObj], - duration: Utils.fixedInt(125), + duration: fixedInt(125), ease: "Sine.easeInOut", alpha: visible ? 0 : 1, }); @@ -243,9 +243,9 @@ export default class FightUiHandler extends UiHandler implements InfoToggle { const hasMove = cursor < moveset.length; if (hasMove) { - const pokemonMove = moveset[cursor]!; // TODO: is the bang correct? + const pokemonMove = moveset[cursor]; const moveType = pokemon.getMoveType(pokemonMove.getMove()); - const textureKey = Utils.getLocalizedSpriteKey("types"); + const textureKey = getLocalizedSpriteKey("types"); this.typeIcon.setTexture(textureKey, PokemonType[moveType].toLowerCase()).setScale(0.8); const moveCategory = pokemonMove.getMove().category; @@ -255,8 +255,8 @@ export default class FightUiHandler extends UiHandler implements InfoToggle { const maxPP = pokemonMove.getMovePp(); const pp = maxPP - pokemonMove.ppUsed; - const ppLeftStr = Utils.padInt(pp, 2, " "); - const ppMaxStr = Utils.padInt(maxPP, 2, " "); + const ppLeftStr = padInt(pp, 2, " "); + const ppMaxStr = padInt(maxPP, 2, " "); this.ppText.setText(`${ppLeftStr}/${ppMaxStr}`); this.powerText.setText(`${power >= 0 ? power : "---"}`); this.accuracyText.setText(`${accuracy >= 0 ? accuracy : "---"}`); @@ -306,6 +306,9 @@ export default class FightUiHandler extends UiHandler implements InfoToggle { pokemon, pokemonMove.getMove(), !opponent.battleData?.abilityRevealed, + undefined, + undefined, + true ); if (effectiveness === undefined) { return undefined; @@ -350,7 +353,7 @@ export default class FightUiHandler extends UiHandler implements InfoToggle { const moveColors = opponents .map(opponent => - opponent.getMoveEffectiveness(pokemon, pokemonMove.getMove(), !opponent.battleData.abilityRevealed), + opponent.getMoveEffectiveness(pokemon, pokemonMove.getMove(), !opponent.battleData.abilityRevealed, undefined, undefined, true), ) .sort((a, b) => b - a) .map(effectiveness => getTypeDamageMultiplierColor(effectiveness ?? 0, "offense")); diff --git a/src/ui/form-modal-ui-handler.ts b/src/ui/form-modal-ui-handler.ts index 8784145acd6..e27b2e9ed89 100644 --- a/src/ui/form-modal-ui-handler.ts +++ b/src/ui/form-modal-ui-handler.ts @@ -4,7 +4,7 @@ import type { Mode } from "./ui"; import { TextStyle, addTextInputObject, addTextObject } from "./text"; import { WindowVariant, addWindow } from "./ui-theme"; import type InputText from "phaser3-rex-plugins/plugins/inputtext"; -import * as Utils from "../utils"; +import { fixedInt } from "#app/utils"; import { Button } from "#enums/buttons"; import { globalScene } from "#app/global-scene"; @@ -135,7 +135,7 @@ export abstract class FormModalUiHandler extends ModalUiHandler { this.tween = globalScene.tweens.add({ targets: this.modalContainer, - duration: Utils.fixedInt(1000), + duration: fixedInt(1000), ease: "Sine.easeInOut", y: "-=24", alpha: 1, diff --git a/src/ui/game-stats-ui-handler.ts b/src/ui/game-stats-ui-handler.ts index 7d3decf0c4c..2e2112dfda4 100644 --- a/src/ui/game-stats-ui-handler.ts +++ b/src/ui/game-stats-ui-handler.ts @@ -3,7 +3,7 @@ import { TextStyle, addTextObject } from "#app/ui/text"; import type { Mode } from "#app/ui/ui"; import UiHandler from "#app/ui/ui-handler"; import { addWindow } from "#app/ui/ui-theme"; -import * as Utils from "#app/utils"; +import { getPlayTimeString, formatFancyLargeNumber, toReadableString } from "#app/utils"; import type { GameData } from "#app/system/game-data"; import { DexAttr } from "#app/system/game-data"; import { speciesStarterCosts } from "#app/data/balance/starters"; @@ -25,7 +25,7 @@ interface DisplayStats { const displayStats: DisplayStats = { playTime: { label_key: "playTime", - sourceFunc: gameData => Utils.getPlayTimeString(gameData.gameStats.playTime), + sourceFunc: gameData => getPlayTimeString(gameData.gameStats.playTime), }, battles: { label_key: "totalBattles", @@ -91,7 +91,7 @@ const displayStats: DisplayStats = { }, highestMoney: { label_key: "highestMoney", - sourceFunc: gameData => Utils.formatFancyLargeNumber(gameData.gameStats.highestMoney), + sourceFunc: gameData => formatFancyLargeNumber(gameData.gameStats.highestMoney), }, highestDamage: { label_key: "highestDamage", @@ -435,7 +435,7 @@ export function initStatsKeys() { } if (!(displayStats[key] as DisplayStat).label_key) { const splittableKey = key.replace(/([a-z]{2,})([A-Z]{1}(?:[^A-Z]|$))/g, "$1_$2"); - (displayStats[key] as DisplayStat).label_key = Utils.toReadableString( + (displayStats[key] as DisplayStat).label_key = toReadableString( `${splittableKey[0].toUpperCase()}${splittableKey.slice(1)}`, ); } diff --git a/src/ui/hatched-pokemon-container.ts b/src/ui/hatched-pokemon-container.ts index 0b283c2e063..9d1c13e19d5 100644 --- a/src/ui/hatched-pokemon-container.ts +++ b/src/ui/hatched-pokemon-container.ts @@ -1,6 +1,6 @@ import type { EggHatchData } from "#app/data/egg-hatch-data"; import { Gender } from "#app/data/gender"; -import { getVariantTint } from "#app/data/variant"; +import { getVariantTint } from "#app/sprites/variant"; import { DexAttr } from "#app/system/game-data"; import { globalScene } from "#app/global-scene"; import type PokemonSpecies from "#app/data/pokemon-species"; diff --git a/src/ui/login-form-ui-handler.ts b/src/ui/login-form-ui-handler.ts index 1087ffa3fd1..5c009357443 100644 --- a/src/ui/login-form-ui-handler.ts +++ b/src/ui/login-form-ui-handler.ts @@ -1,7 +1,7 @@ import type { InputFieldConfig } from "./form-modal-ui-handler"; import { FormModalUiHandler } from "./form-modal-ui-handler"; import type { ModalConfig } from "./modal-ui-handler"; -import * as Utils from "../utils"; +import { fixedInt } from "#app/utils"; import { Mode } from "./ui"; import i18next from "i18next"; import { addTextObject, TextStyle } from "./text"; @@ -283,7 +283,7 @@ export default class LoginFormUiHandler extends FormModalUiHandler { this.externalPartyContainer.setAlpha(0); globalScene.tweens.add({ targets: this.externalPartyContainer, - duration: Utils.fixedInt(1000), + duration: fixedInt(1000), ease: "Sine.easeInOut", y: "-=24", alpha: 1, @@ -292,7 +292,7 @@ export default class LoginFormUiHandler extends FormModalUiHandler { this.infoContainer.setAlpha(0); globalScene.tweens.add({ targets: this.infoContainer, - duration: Utils.fixedInt(1000), + duration: 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 b83ae24c9e0..241ddbb91a8 100644 --- a/src/ui/menu-ui-handler.ts +++ b/src/ui/menu-ui-handler.ts @@ -2,7 +2,7 @@ import { bypassLogin } from "#app/battle-scene"; import { globalScene } from "#app/global-scene"; import { TextStyle, addTextObject, getTextStyleOptions } from "./text"; import { Mode } from "./ui"; -import * as Utils from "../utils"; +import { getEnumKeys, isLocal, isBeta, fixedInt, getCookie, sessionIdKey } from "#app/utils"; import { addWindow, WindowVariant } from "./ui-theme"; import MessageUiHandler from "./message-ui-handler"; import type { OptionSelectConfig, OptionSelectItem } from "./abstact-option-select-ui-handler"; @@ -75,7 +75,7 @@ export default class MenuUiHandler extends MessageUiHandler { { condition: bypassLogin, options: [MenuOptions.LOG_OUT] }, ]; - this.menuOptions = Utils.getEnumKeys(MenuOptions) + this.menuOptions = getEnumKeys(MenuOptions) .map(m => Number.parseInt(MenuOptions[m]) as MenuOptions) .filter(m => { return !this.excludedMenus().some(exclusion => exclusion.condition && exclusion.options.includes(m)); @@ -130,7 +130,7 @@ export default class MenuUiHandler extends MessageUiHandler { { condition: bypassLogin, options: [MenuOptions.LOG_OUT] }, ]; - this.menuOptions = Utils.getEnumKeys(MenuOptions) + this.menuOptions = getEnumKeys(MenuOptions) .map(m => Number.parseInt(MenuOptions[m]) as MenuOptions) .filter(m => { return !this.excludedMenus().some(exclusion => exclusion.condition && exclusion.options.includes(m)); @@ -238,7 +238,7 @@ export default class MenuUiHandler extends MessageUiHandler { }); }; - if (Utils.isLocal || Utils.isBeta) { + if (isLocal || isBeta) { manageDataOptions.push({ label: i18next.t("menuUiHandler:importSession"), handler: () => { @@ -292,7 +292,7 @@ export default class MenuUiHandler extends MessageUiHandler { }, keepOpen: true, }); - if (Utils.isLocal || Utils.isBeta) { + if (isLocal || isBeta) { manageDataOptions.push({ label: i18next.t("menuUiHandler:importData"), handler: () => { @@ -328,7 +328,7 @@ export default class MenuUiHandler extends MessageUiHandler { keepOpen: true, }, ); - if (Utils.isLocal || Utils.isBeta) { + if (isLocal || isBeta) { // this should make sure we don't have this option in live manageDataOptions.push({ label: "Test Dialogue", @@ -510,7 +510,7 @@ export default class MenuUiHandler extends MessageUiHandler { this.render(); super.show(args); - this.menuOptions = Utils.getEnumKeys(MenuOptions) + this.menuOptions = getEnumKeys(MenuOptions) .map(m => Number.parseInt(MenuOptions[m]) as MenuOptions) .filter(m => { return !this.excludedMenus().some(exclusion => exclusion.condition && exclusion.options.includes(m)); @@ -574,7 +574,7 @@ export default class MenuUiHandler extends MessageUiHandler { ui.setOverlayMode(Mode.EGG_LIST); success = true; } else { - ui.showText(i18next.t("menuUiHandler:noEggs"), null, () => ui.showText(""), Utils.fixedInt(1500)); + ui.showText(i18next.t("menuUiHandler:noEggs"), null, () => ui.showText(""), fixedInt(1500)); error = true; } break; @@ -607,7 +607,7 @@ export default class MenuUiHandler extends MessageUiHandler { : i18next.t("menuUiHandler:unlinkDiscord"), handler: () => { if (loggedInUser?.discordId === "") { - const token = Utils.getCookie(Utils.sessionIdKey); + const token = getCookie(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`; @@ -627,7 +627,7 @@ export default class MenuUiHandler extends MessageUiHandler { : i18next.t("menuUiHandler:unlinkGoogle"), handler: () => { if (loggedInUser?.googleId === "") { - const token = Utils.getCookie(Utils.sessionIdKey); + const token = getCookie(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}`; diff --git a/src/ui/message-ui-handler.ts b/src/ui/message-ui-handler.ts index 230b951de59..b57b236531c 100644 --- a/src/ui/message-ui-handler.ts +++ b/src/ui/message-ui-handler.ts @@ -1,6 +1,6 @@ import AwaitableUiHandler from "./awaitable-ui-handler"; import type { Mode } from "./ui"; -import * as Utils from "../utils"; +import { getFrameMs } from "#app/utils"; import { globalScene } from "#app/global-scene"; export default abstract class MessageUiHandler extends AwaitableUiHandler { @@ -77,7 +77,7 @@ export default abstract class MessageUiHandler extends AwaitableUiHandler { const actionPattern = /@(c|d|s|f)\{(.*?)\}/; let actionMatch: RegExpExecArray | null; const pokename: string[] = []; - const repname = [ "#POKEMON1", "#POKEMON2" ]; + const repname = ["#POKEMON1", "#POKEMON2"]; for (let p = 0; p < globalScene.getPlayerField().length; p++) { pokename.push(globalScene.getPlayerField()[p].getNameToRender()); text = text.split(pokename[p]).join(repname[p]); @@ -183,7 +183,7 @@ export default abstract class MessageUiHandler extends AwaitableUiHandler { if (charDelay) { this.textTimer!.paused = true; // TODO: is the bang correct? globalScene.tweens.addCounter({ - duration: Utils.getFrameMs(charDelay), + duration: getFrameMs(charDelay), onComplete: () => { this.textTimer!.paused = false; // TODO: is the bang correct? advance(); @@ -193,7 +193,7 @@ export default abstract class MessageUiHandler extends AwaitableUiHandler { this.textTimer!.paused = true; globalScene.time.delayedCall(150, () => { globalScene.ui.fadeOut(750).then(() => { - const delay = Utils.getFrameMs(charFade); + const delay = getFrameMs(charFade); globalScene.time.delayedCall(delay, () => { globalScene.ui.fadeIn(500).then(() => { this.textTimer!.paused = false; diff --git a/src/ui/modifier-select-ui-handler.ts b/src/ui/modifier-select-ui-handler.ts index e5d8f858782..26351d4dbf1 100644 --- a/src/ui/modifier-select-ui-handler.ts +++ b/src/ui/modifier-select-ui-handler.ts @@ -10,11 +10,10 @@ import { handleTutorial, Tutorial } from "../tutorial"; import { Button } from "#enums/buttons"; import MoveInfoOverlay from "./move-info-overlay"; import { allMoves } from "../data/moves/move"; -import * as Utils from "./../utils"; +import { formatMoney, NumberHolder } from "#app/utils"; import Overrides from "#app/overrides"; import i18next from "i18next"; import { ShopCursorTarget } from "#app/enums/shop-cursor-target"; -import { NumberHolder } from "./../utils"; import Phaser from "phaser"; import type { PokeballType } from "#enums/pokeball"; @@ -645,7 +644,7 @@ export default class ModifierSelectUiHandler extends AwaitableUiHandler { this.rerollCostText.setVisible(true); const canReroll = globalScene.money >= this.rerollCost; - const formattedMoney = Utils.formatMoney(globalScene.moneyFormat, this.rerollCost); + const formattedMoney = formatMoney(globalScene.moneyFormat, this.rerollCost); this.rerollCostText.setText(i18next.t("modifierSelectUiHandler:rerollCost", { formattedMoney })); this.rerollCostText.setColor(this.getTextColor(canReroll ? TextStyle.MONEY : TextStyle.PARTY_RED)); @@ -933,7 +932,7 @@ class ModifierOption extends Phaser.GameObjects.Container { const cost = Overrides.WAIVE_ROLL_FEE_OVERRIDE ? 0 : this.modifierTypeOption.cost; const textStyle = cost <= globalScene.money ? TextStyle.MONEY : TextStyle.PARTY_RED; - const formattedMoney = Utils.formatMoney(globalScene.moneyFormat, cost); + const formattedMoney = formatMoney(globalScene.moneyFormat, cost); this.itemCostText.setText(i18next.t("modifierSelectUiHandler:itemCost", { formattedMoney })); this.itemCostText.setColor(getTextColor(textStyle, false, globalScene.uiTheme)); diff --git a/src/ui/move-info-overlay.ts b/src/ui/move-info-overlay.ts index 6fc99beb0ae..bd9fdf00c72 100644 --- a/src/ui/move-info-overlay.ts +++ b/src/ui/move-info-overlay.ts @@ -2,7 +2,7 @@ import type { InfoToggle } from "#app/battle-scene"; import { globalScene } from "#app/global-scene"; import { TextStyle, addTextObject } from "./text"; import { addWindow } from "./ui-theme"; -import * as Utils from "../utils"; +import { getLocalizedSpriteKey, fixedInt } from "#app/utils"; import type Move from "../data/moves/move"; import { MoveCategory } from "#enums/MoveCategory"; import { PokemonType } from "#enums/pokemon-type"; @@ -120,7 +120,7 @@ export default class MoveInfoOverlay extends Phaser.GameObjects.Container implem valuesBg.setOrigin(0, 0); this.val.add(valuesBg); - this.typ = globalScene.add.sprite(25, EFF_HEIGHT - 35, Utils.getLocalizedSpriteKey("types"), "unknown"); + this.typ = globalScene.add.sprite(25, EFF_HEIGHT - 35, getLocalizedSpriteKey("types"), "unknown"); this.typ.setScale(0.8); this.val.add(this.typ); @@ -175,7 +175,7 @@ export default class MoveInfoOverlay extends Phaser.GameObjects.Container implem this.pow.setText(move.power >= 0 ? move.power.toString() : "---"); this.acc.setText(move.accuracy >= 0 ? move.accuracy.toString() : "---"); this.pp.setText(move.pp >= 0 ? move.pp.toString() : "---"); - this.typ.setTexture(Utils.getLocalizedSpriteKey("types"), PokemonType[move.type].toLowerCase()); + this.typ.setTexture(getLocalizedSpriteKey("types"), PokemonType[move.type].toLowerCase()); this.cat.setFrame(MoveCategory[move.category].toLowerCase()); this.desc.setText(move?.effect || ""); @@ -193,10 +193,10 @@ export default class MoveInfoOverlay extends Phaser.GameObjects.Container implem // generate scrolling effects this.descScroll = globalScene.tweens.add({ targets: this.desc, - delay: Utils.fixedInt(2000), + delay: fixedInt(2000), loop: -1, - hold: Utils.fixedInt(2000), - duration: Utils.fixedInt((moveDescriptionLineCount - 3) * 2000), + hold: fixedInt(2000), + duration: fixedInt((moveDescriptionLineCount - 3) * 2000), y: `-=${14.83 * (72 / 96) * (moveDescriptionLineCount - 3)}`, }); } @@ -219,7 +219,7 @@ export default class MoveInfoOverlay extends Phaser.GameObjects.Container implem } globalScene.tweens.add({ targets: this.desc, - duration: Utils.fixedInt(125), + duration: fixedInt(125), ease: "Sine.easeInOut", alpha: visible ? 1 : 0, }); diff --git a/src/ui/mystery-encounter-ui-handler.ts b/src/ui/mystery-encounter-ui-handler.ts index 87d2e2ba28c..2bf05302c55 100644 --- a/src/ui/mystery-encounter-ui-handler.ts +++ b/src/ui/mystery-encounter-ui-handler.ts @@ -6,8 +6,7 @@ import { addWindow, WindowVariant } from "./ui-theme"; import type { MysteryEncounterPhase } from "../phases/mystery-encounter-phases"; import { PartyUiMode } from "./party-ui-handler"; import type MysteryEncounterOption from "#app/data/mystery-encounters/mystery-encounter-option"; -import * as Utils from "../utils"; -import { isNullOrUndefined } from "../utils"; +import { fixedInt, isNullOrUndefined } from "#app/utils"; import { getPokeballAtlasKey } from "../data/pokeball"; import type { OptionSelectSettings } from "#app/data/mystery-encounters/utils/encounter-phase-utils"; import { getEncounterText } from "#app/data/mystery-encounters/utils/encounter-dialogue-utils"; @@ -456,10 +455,10 @@ export default class MysteryEncounterUiHandler extends UiHandler { if (optionTextWidth > nonScrollWidth) { this.optionScrollTweens[i] = globalScene.tweens.add({ targets: optionText, - delay: Utils.fixedInt(2000), + delay: fixedInt(2000), loop: -1, - hold: Utils.fixedInt(2000), - duration: Utils.fixedInt(((optionTextWidth - nonScrollWidth) / 15) * 2000), + hold: fixedInt(2000), + duration: fixedInt(((optionTextWidth - nonScrollWidth) / 15) * 2000), x: `-=${optionTextWidth - nonScrollWidth}`, }); } @@ -527,10 +526,10 @@ export default class MysteryEncounterUiHandler extends UiHandler { if (descriptionLineCount > 6) { this.descriptionScrollTween = globalScene.tweens.add({ targets: descriptionTextObject, - delay: Utils.fixedInt(2000), + delay: fixedInt(2000), loop: -1, - hold: Utils.fixedInt(2000), - duration: Utils.fixedInt((descriptionLineCount - 6) * 2000), + hold: fixedInt(2000), + duration: fixedInt((descriptionLineCount - 6) * 2000), y: `-=${10 * (descriptionLineCount - 6)}`, }); } @@ -637,10 +636,10 @@ export default class MysteryEncounterUiHandler extends UiHandler { if (tooltipLineCount > 3) { this.tooltipScrollTween = globalScene.tweens.add({ targets: tooltipTextObject, - delay: Utils.fixedInt(1200), + delay: fixedInt(1200), loop: -1, - hold: Utils.fixedInt(1200), - duration: Utils.fixedInt((tooltipLineCount - 3) * 1200), + hold: fixedInt(1200), + duration: fixedInt((tooltipLineCount - 3) * 1200), y: `-=${11.2 * (tooltipLineCount - 3)}`, }); } diff --git a/src/ui/party-ui-handler.ts b/src/ui/party-ui-handler.ts index 6a9b565989d..ba90108c274 100644 --- a/src/ui/party-ui-handler.ts +++ b/src/ui/party-ui-handler.ts @@ -5,7 +5,7 @@ import { addBBCodeTextObject, addTextObject, getTextColor, TextStyle } from "#ap import { Command } from "#app/ui/command-ui-handler"; import MessageUiHandler from "#app/ui/message-ui-handler"; import { Mode } from "#app/ui/ui"; -import * as Utils from "#app/utils"; +import { BooleanHolder, toReadableString, randInt, getLocalizedSpriteKey } from "#app/utils"; import { PokemonFormChangeItemModifier, PokemonHeldItemModifier, @@ -18,7 +18,7 @@ import PokemonIconAnimHandler, { PokemonIconAnimMode } from "#app/ui/pokemon-ico import { pokemonEvolutions } from "#app/data/balance/pokemon-evolutions"; import { addWindow } from "#app/ui/ui-theme"; import { SpeciesFormChangeItemTrigger, FormChangeItem } from "#app/data/pokemon-forms"; -import { getVariantTint } from "#app/data/variant"; +import { getVariantTint } from "#app/sprites/variant"; import { Button } from "#enums/buttons"; import { applyChallenges, ChallengeType } from "#app/data/challenge"; import MoveInfoOverlay from "#app/ui/move-info-overlay"; @@ -193,18 +193,14 @@ export default class PartyUiHandler extends MessageUiHandler { public static FilterNonFainted = (pokemon: PlayerPokemon) => { if (pokemon.isFainted()) { - return i18next.t("partyUiHandler:noEnergy", { - pokemonName: getPokemonNameWithAffix(pokemon), - }); + return i18next.t("partyUiHandler:noEnergy", { pokemonName: getPokemonNameWithAffix(pokemon, false) }); } return null; }; public static FilterFainted = (pokemon: PlayerPokemon) => { if (!pokemon.isFainted()) { - return i18next.t("partyUiHandler:hasEnergy", { - pokemonName: getPokemonNameWithAffix(pokemon), - }); + return i18next.t("partyUiHandler:hasEnergy", { pokemonName: getPokemonNameWithAffix(pokemon, false) }); } return null; }; @@ -215,12 +211,10 @@ export default class PartyUiHandler extends MessageUiHandler { * @returns */ private FilterChallengeLegal = (pokemon: PlayerPokemon) => { - const challengeAllowed = new Utils.BooleanHolder(true); - applyChallenges(globalScene.gameMode, ChallengeType.POKEMON_IN_BATTLE, pokemon, challengeAllowed); + const challengeAllowed = new BooleanHolder(true); + applyChallenges(ChallengeType.POKEMON_IN_BATTLE, pokemon, challengeAllowed); if (!challengeAllowed.value) { - return i18next.t("partyUiHandler:cantBeUsed", { - pokemonName: getPokemonNameWithAffix(pokemon), - }); + return i18next.t("partyUiHandler:cantBeUsed", { pokemonName: getPokemonNameWithAffix(pokemon, false) }); } return null; }; @@ -232,9 +226,7 @@ export default class PartyUiHandler extends MessageUiHandler { m => m instanceof PokemonHeldItemModifier && m.pokemonId === pokemon.id && m.matchType(modifier), ) as PokemonHeldItemModifier; if (matchingModifier && matchingModifier.stackCount === matchingModifier.getMaxStackCount()) { - return i18next.t("partyUiHandler:tooManyItems", { - pokemonName: getPokemonNameWithAffix(pokemon), - }); + return i18next.t("partyUiHandler:tooManyItems", { pokemonName: getPokemonNameWithAffix(pokemon, false) }); } return null; }; @@ -478,7 +470,7 @@ export default class PartyUiHandler extends MessageUiHandler { filterResult = this.FilterChallengeLegal(pokemon); } if (filterResult === null && this.partyUiMode === PartyUiMode.MOVE_MODIFIER) { - filterResult = this.moveSelectFilter(pokemon.moveset[this.optionsCursor]!); // TODO: is this bang correct? + filterResult = this.moveSelectFilter(pokemon.moveset[this.optionsCursor]); } } else { filterResult = (this.selectFilter as PokemonModifierTransferSelectFilter)( @@ -583,7 +575,7 @@ export default class PartyUiHandler extends MessageUiHandler { this.showText( i18next.t( pokemon.pauseEvolutions ? "partyUiHandler:pausedEvolutions" : "partyUiHandler:unpausedEvolutions", - { pokemonName: getPokemonNameWithAffix(pokemon) }, + { pokemonName: getPokemonNameWithAffix(pokemon, false) }, ), undefined, () => this.showText("", 0), @@ -596,14 +588,14 @@ export default class PartyUiHandler extends MessageUiHandler { this.showText( i18next.t("partyUiHandler:unspliceConfirmation", { fusionName: pokemon.fusionSpecies?.name, - pokemonName: pokemon.name, + pokemonName: pokemon.getName(), }), null, () => { ui.setModeWithoutClear( Mode.CONFIRM, () => { - const fusionName = pokemon.name; + const fusionName = pokemon.getName(); pokemon.unfuse().then(() => { this.clearPartySlots(); this.populatePartySlots(); @@ -611,7 +603,7 @@ export default class PartyUiHandler extends MessageUiHandler { this.showText( i18next.t("partyUiHandler:wasReverted", { fusionName: fusionName, - pokemonName: pokemon.name, + pokemonName: pokemon.getName(false), }), undefined, () => { @@ -637,7 +629,7 @@ export default class PartyUiHandler extends MessageUiHandler { this.blockInput = true; this.showText( i18next.t("partyUiHandler:releaseConfirmation", { - pokemonName: getPokemonNameWithAffix(pokemon), + pokemonName: getPokemonNameWithAffix(pokemon, false), }), null, () => { @@ -1182,7 +1174,7 @@ export default class PartyUiHandler extends MessageUiHandler { case PartyOption.MOVE_2: case PartyOption.MOVE_3: case PartyOption.MOVE_4: - const move = pokemon.moveset[option - PartyOption.MOVE_1]!; // TODO: is the bang correct? + const move = pokemon.moveset[option - PartyOption.MOVE_1]; if (this.showMovePp) { const maxPP = move.getMovePp(); const currPP = maxPP - move.ppUsed; @@ -1201,7 +1193,7 @@ export default class PartyUiHandler extends MessageUiHandler { if (this.localizedOptions.includes(option)) { optionName = i18next.t(`partyUiHandler:${PartyOption[option]}`); } else { - optionName = Utils.toReadableString(PartyOption[option]); + optionName = toReadableString(PartyOption[option]); } } break; @@ -1285,7 +1277,7 @@ export default class PartyUiHandler extends MessageUiHandler { doRelease(slotIndex: number): void { this.showText( - this.getReleaseMessage(getPokemonNameWithAffix(globalScene.getPlayerParty()[slotIndex])), + this.getReleaseMessage(getPokemonNameWithAffix(globalScene.getPlayerParty()[slotIndex], false)), null, () => { this.clearPartySlots(); @@ -1309,7 +1301,7 @@ export default class PartyUiHandler extends MessageUiHandler { } getReleaseMessage(pokemonName: string): string { - const rand = Utils.randInt(128); + const rand = randInt(128); if (rand < 20) { return i18next.t("partyUiHandler:goodbye", { pokemonName: pokemonName }); } @@ -1495,7 +1487,7 @@ class PartySlot extends Phaser.GameObjects.Container { const slotInfoContainer = globalScene.add.container(0, 0); this.add(slotInfoContainer); - let displayName = this.pokemon.getNameToRender(); + let displayName = this.pokemon.getNameToRender(false); let nameTextWidth: number; const nameSizeTest = addTextObject(0, 0, displayName, TextStyle.PARTY); @@ -1566,7 +1558,7 @@ class PartySlot extends Phaser.GameObjects.Container { } if (this.pokemon.status) { - const statusIndicator = globalScene.add.sprite(0, 0, Utils.getLocalizedSpriteKey("statuses")); + const statusIndicator = globalScene.add.sprite(0, 0, getLocalizedSpriteKey("statuses")); statusIndicator.setFrame(StatusEffect[this.pokemon.status?.effect].toLowerCase()); statusIndicator.setOrigin(0, 0); statusIndicator.setPositionRelative(slotLevelLabel, this.slotIndex >= battlerCount ? 43 : 55, 0); @@ -1575,12 +1567,12 @@ class PartySlot extends Phaser.GameObjects.Container { } if (this.pokemon.isShiny()) { - const doubleShiny = this.pokemon.isFusion() && this.pokemon.shiny && this.pokemon.fusionShiny; + const doubleShiny = this.pokemon.isDoubleShiny(false); const shinyStar = globalScene.add.image(0, 0, `shiny_star_small${doubleShiny ? "_1" : ""}`); shinyStar.setOrigin(0, 0); shinyStar.setPositionRelative(this.slotName, -9, 3); - shinyStar.setTint(getVariantTint(!doubleShiny ? this.pokemon.getVariant() : this.pokemon.variant)); + shinyStar.setTint(getVariantTint(this.pokemon.getBaseVariant(doubleShiny))); slotInfoContainer.add(shinyStar); @@ -1588,7 +1580,9 @@ class PartySlot extends Phaser.GameObjects.Container { const fusionShinyStar = globalScene.add.image(0, 0, "shiny_star_small_2"); fusionShinyStar.setOrigin(0, 0); fusionShinyStar.setPosition(shinyStar.x, shinyStar.y); - fusionShinyStar.setTint(getVariantTint(this.pokemon.fusionVariant)); + fusionShinyStar.setTint( + getVariantTint(this.pokemon.summonData?.illusion?.basePokemon.fusionVariant ?? this.pokemon.fusionVariant), + ); slotInfoContainer.add(fusionShinyStar); } @@ -1647,7 +1641,7 @@ class PartySlot extends Phaser.GameObjects.Container { this.slotHpText.setVisible(false); let slotTmText: string; - if (this.pokemon.getMoveset().filter(m => m?.moveId === tmMoveId).length > 0) { + if (this.pokemon.getMoveset().filter(m => m.moveId === tmMoveId).length > 0) { slotTmText = i18next.t("partyUiHandler:learned"); } else if (this.pokemon.compatibleTms.indexOf(tmMoveId) === -1) { slotTmText = i18next.t("partyUiHandler:notAble"); diff --git a/src/ui/pokedex-info-overlay.ts b/src/ui/pokedex-info-overlay.ts index 7dfa3745cb7..43e9bbc1a65 100644 --- a/src/ui/pokedex-info-overlay.ts +++ b/src/ui/pokedex-info-overlay.ts @@ -1,7 +1,7 @@ import type { InfoToggle } from "../battle-scene"; import { TextStyle, addTextObject } from "./text"; import { addWindow } from "./ui-theme"; -import * as Utils from "../utils"; +import { fixedInt } from "#app/utils"; import i18next from "i18next"; import { globalScene } from "#app/global-scene"; @@ -128,10 +128,10 @@ export default class PokedexInfoOverlay extends Phaser.GameObjects.Container imp // generate scrolling effects this.descScroll = globalScene.tweens.add({ targets: this.desc, - delay: Utils.fixedInt(2000), + delay: fixedInt(2000), loop: -1, - hold: Utils.fixedInt(2000), - duration: Utils.fixedInt((lineCount - 3) * 2000), + hold: fixedInt(2000), + duration: fixedInt((lineCount - 3) * 2000), y: `-=${14.83 * (72 / 96) * (lineCount - 3)}`, }); } @@ -154,7 +154,7 @@ export default class PokedexInfoOverlay extends Phaser.GameObjects.Container imp } globalScene.tweens.add({ targets: this.desc, - duration: Utils.fixedInt(125), + duration: fixedInt(125), ease: "Sine.easeInOut", alpha: visible ? 1 : 0, }); diff --git a/src/ui/pokedex-mon-container.ts b/src/ui/pokedex-mon-container.ts index e61da86e95e..410effda40d 100644 --- a/src/ui/pokedex-mon-container.ts +++ b/src/ui/pokedex-mon-container.ts @@ -1,4 +1,4 @@ -import type { Variant } from "#app/data/variant"; +import type { Variant } from "#app/sprites/variant"; import { globalScene } from "#app/global-scene"; import { isNullOrUndefined } from "#app/utils"; import type PokemonSpecies from "../data/pokemon-species"; diff --git a/src/ui/pokedex-page-ui-handler.ts b/src/ui/pokedex-page-ui-handler.ts index 86460a24fdc..407ebfcd843 100644 --- a/src/ui/pokedex-page-ui-handler.ts +++ b/src/ui/pokedex-page-ui-handler.ts @@ -1,7 +1,7 @@ import type { SpeciesFormEvolution } from "#app/data/balance/pokemon-evolutions"; import { pokemonEvolutions, pokemonPrevolutions, pokemonStarters } from "#app/data/balance/pokemon-evolutions"; -import type { Variant } from "#app/data/variant"; -import { getVariantTint, getVariantIcon } from "#app/data/variant"; +import type { Variant } from "#app/sprites/variant"; +import { getVariantTint, getVariantIcon } from "#app/sprites/variant"; import { argbFromRgba } from "@material/material-color-utilities"; import i18next from "i18next"; import { starterColors } from "#app/battle-scene"; @@ -25,7 +25,7 @@ import { AbilityAttr, DexAttr } from "#app/system/game-data"; import type { OptionSelectItem } from "#app/ui/abstact-option-select-ui-handler"; import MessageUiHandler from "#app/ui/message-ui-handler"; import { StatsContainer } from "#app/ui/stats-container"; -import { TextStyle, addTextObject, getTextStyleOptions } from "#app/ui/text"; +import { TextStyle, addBBCodeTextObject, addTextObject, getTextColor, getTextStyleOptions } from "#app/ui/text"; import { Mode } from "#app/ui/ui"; import { addWindow } from "#app/ui/ui-theme"; import { Egg } from "#app/data/egg"; @@ -54,7 +54,7 @@ import { toReadableString, } from "#app/utils"; import type { Nature } from "#enums/nature"; -import * as Utils from "../utils"; +import { getEnumKeys } from "#app/utils"; import { speciesTmMoves } from "#app/data/balance/tms"; import type { BiomeTierTod } from "#app/data/balance/biomes"; import { BiomePoolTier, catchableSpecies } from "#app/data/balance/biomes"; @@ -63,6 +63,7 @@ import { TimeOfDay } from "#app/enums/time-of-day"; import type { Abilities } from "#app/enums/abilities"; import { BaseStatsOverlay } from "#app/ui/base-stats-overlay"; import { globalScene } from "#app/global-scene"; +import type BBCodeText from "phaser3-rex-plugins/plugins/gameobjects/tagtext/bbcodetext/BBCodeText"; interface LanguageSetting { starterInfoTextSize: string; @@ -250,7 +251,7 @@ export default class PokedexPageUiHandler extends MessageUiHandler { // Menu private menuContainer: Phaser.GameObjects.Container; private menuBg: Phaser.GameObjects.NineSlice; - protected optionSelectText: Phaser.GameObjects.Text; + protected optionSelectText: BBCodeText; private menuOptions: MenuOptions[]; protected scale = 0.1666666667; private menuDescriptions: string[]; @@ -261,6 +262,7 @@ export default class PokedexPageUiHandler extends MessageUiHandler { private unlockedVariants: boolean[]; private canUseCandies: boolean; + private exitCallback; constructor() { super(Mode.POKEDEX_PAGE); @@ -590,16 +592,15 @@ export default class PokedexPageUiHandler extends MessageUiHandler { this.menuContainer.setVisible(false); - this.menuOptions = Utils.getEnumKeys(MenuOptions).map(m => Number.parseInt(MenuOptions[m]) as MenuOptions); + this.menuOptions = getEnumKeys(MenuOptions).map(m => Number.parseInt(MenuOptions[m]) as MenuOptions); - this.optionSelectText = addTextObject( + this.optionSelectText = addBBCodeTextObject( 0, 0, this.menuOptions.map(o => `${i18next.t(`pokedexUiHandler:${MenuOptions[o]}`)}`).join("\n"), TextStyle.WINDOW, - { maxLines: this.menuOptions.length }, + { maxLines: this.menuOptions.length, lineSpacing: 12 }, ); - this.optionSelectText.setLineSpacing(12); this.menuDescriptions = [ i18next.t("pokedexUiHandler:showBaseStats"), @@ -622,7 +623,7 @@ export default class PokedexPageUiHandler extends MessageUiHandler { ); this.menuBg.setOrigin(0, 0); - this.optionSelectText.setPositionRelative(this.menuBg, 10 + 24 * this.scale, 6); + this.optionSelectText.setPosition(this.menuBg.x + 10 + 24 * this.scale, this.menuBg.y + 6); this.menuContainer.add(this.menuBg); @@ -681,6 +682,10 @@ export default class PokedexPageUiHandler extends MessageUiHandler { this.filteredIndices = args[2] ?? null; this.starterSetup(); + if (args[4] instanceof Function) { + this.exitCallback = args[4]; + } + this.moveInfoOverlay.clear(); // clear this when removing a menu; the cancel button doesn't seem to trigger this automatically on controllers this.infoOverlay.clear(); @@ -691,7 +696,7 @@ export default class PokedexPageUiHandler extends MessageUiHandler { this.starterAttributes = this.initStarterPrefs(); - this.menuOptions = Utils.getEnumKeys(MenuOptions).map(m => Number.parseInt(MenuOptions[m]) as MenuOptions); + this.menuOptions = getEnumKeys(MenuOptions).map(m => Number.parseInt(MenuOptions[m]) as MenuOptions); this.menuContainer.setVisible(true); @@ -699,11 +704,39 @@ export default class PokedexPageUiHandler extends MessageUiHandler { this.setSpecies(); this.updateInstructions(); + this.optionSelectText.setText(this.getMenuText()); + this.setCursor(0); return true; } + getMenuText(): string { + const isSeen = this.isSeen(); + const isStarterCaught = !!this.isCaught(this.getStarterSpecies(this.species)); + + return this.menuOptions + .map(o => { + const label = `${i18next.t(`pokedexUiHandler:${MenuOptions[o]}`)}`; + const isDark = + !isSeen || + (!isStarterCaught && (o === MenuOptions.TOGGLE_IVS || o === MenuOptions.NATURES)) || + (this.tmMoves.length < 1 && o === MenuOptions.TM_MOVES); + const color = getTextColor( + isDark ? TextStyle.SHADOW_TEXT : TextStyle.SETTINGS_VALUE, + false, + globalScene.uiTheme, + ); + const shadow = getTextColor( + isDark ? TextStyle.SHADOW_TEXT : TextStyle.SETTINGS_VALUE, + true, + globalScene.uiTheme, + ); + return `[shadow=${shadow}][color=${color}]${label}[/color][/shadow]`; + }) + .join("\n"); + } + starterSetup(): void { this.evolutions = []; this.prevolutions = []; @@ -899,6 +932,7 @@ export default class PokedexPageUiHandler extends MessageUiHandler { return (dexEntry?.caughtAttr ?? 0n) & (starterDexEntry?.caughtAttr ?? 0n) & species.getFullUnlocksData(); } + /** * Check whether a given form is caught for a given species. * All forms that can be reached through a form change during battle are considered caught and show up in the dex as such. @@ -923,6 +957,14 @@ export default class PokedexPageUiHandler extends MessageUiHandler { return isFormCaught; } + isSeen(): boolean { + if (this.speciesStarterDexEntry?.seenAttr) { + return true; + } + const starterCaughtAttr = this.isCaught(this.getStarterSpecies(this.species)); + return !!starterCaughtAttr; + } + /** * Get the starter attributes for the given PokemonSpecies, after sanitizing them. * If somehow a preference is set for a form, variant, gender, ability or nature @@ -936,7 +978,7 @@ export default class PokedexPageUiHandler extends MessageUiHandler { const caughtAttr = this.isCaught(); // no preferences or Pokemon wasn't caught, return empty attribute - if (!starterAttributes || !caughtAttr) { + if (!starterAttributes || !this.isSeen()) { return {}; } @@ -1071,6 +1113,8 @@ export default class PokedexPageUiHandler extends MessageUiHandler { const isCaught = this.isCaught(); const isFormCaught = this.isFormCaught(); + const isSeen = this.isSeen(); + const isStarterCaught = !!this.isCaught(this.getStarterSpecies(this.species)); if (this.blockInputOverlay) { if (button === Button.CANCEL || button === Button.ACTION) { @@ -1106,7 +1150,14 @@ export default class PokedexPageUiHandler extends MessageUiHandler { }); this.blockInput = false; } else { - ui.revertMode(); + ui.revertMode().then(() => { + console.log("exitCallback", this.exitCallback); + if (this.exitCallback instanceof Function) { + const exitCallback = this.exitCallback; + this.exitCallback = null; + exitCallback(); + } + }); success = true; } } else { @@ -1117,7 +1168,7 @@ export default class PokedexPageUiHandler extends MessageUiHandler { if (button === Button.ACTION) { switch (this.cursor) { case MenuOptions.BASE_STATS: - if (!isCaught || !isFormCaught) { + if (!isSeen) { error = true; } else { this.blockInput = true; @@ -1137,7 +1188,7 @@ export default class PokedexPageUiHandler extends MessageUiHandler { break; case MenuOptions.LEVEL_MOVES: - if (!isCaught || !isFormCaught) { + if (!isSeen) { error = true; } else { this.blockInput = true; @@ -1195,7 +1246,7 @@ export default class PokedexPageUiHandler extends MessageUiHandler { break; case MenuOptions.EGG_MOVES: - if (!isCaught || !isFormCaught) { + if (!isSeen) { error = true; } else { this.blockInput = true; @@ -1262,7 +1313,7 @@ export default class PokedexPageUiHandler extends MessageUiHandler { break; case MenuOptions.TM_MOVES: - if (!isCaught || !isFormCaught) { + if (!isSeen) { error = true; } else if (this.tmMoves.length < 1) { ui.showText(i18next.t("pokedexUiHandler:noTmMoves")); @@ -1313,7 +1364,7 @@ export default class PokedexPageUiHandler extends MessageUiHandler { break; case MenuOptions.ABILITIES: - if (!isCaught || !isFormCaught) { + if (!isSeen) { error = true; } else { this.blockInput = true; @@ -1401,7 +1452,7 @@ export default class PokedexPageUiHandler extends MessageUiHandler { break; case MenuOptions.BIOMES: - if (!(isCaught || this.speciesStarterDexEntry?.seenAttr)) { + if (!isSeen) { error = true; } else { this.blockInput = true; @@ -1480,7 +1531,7 @@ export default class PokedexPageUiHandler extends MessageUiHandler { break; case MenuOptions.EVOLUTIONS: - if (!isCaught || !isFormCaught) { + if (!isSeen) { error = true; } else { this.blockInput = true; @@ -1664,7 +1715,7 @@ export default class PokedexPageUiHandler extends MessageUiHandler { break; case MenuOptions.TOGGLE_IVS: - if (!isCaught || !isFormCaught) { + if (!isStarterCaught) { error = true; } else { this.toggleStatsMode(); @@ -1674,7 +1725,7 @@ export default class PokedexPageUiHandler extends MessageUiHandler { break; case MenuOptions.NATURES: - if (!isCaught || !isFormCaught) { + if (!isStarterCaught) { error = true; } else { this.blockInput = true; @@ -1975,6 +2026,11 @@ export default class PokedexPageUiHandler extends MessageUiHandler { } break; case Button.LEFT: + if (this.filteredIndices && this.filteredIndices.length <= 1) { + ui.playError(); + this.blockInput = false; + return true; + } this.blockInput = true; ui.setModeWithoutClear(Mode.OPTION_SELECT).then(() => { // Always go back to first selection after scrolling around @@ -2010,6 +2066,11 @@ export default class PokedexPageUiHandler extends MessageUiHandler { this.blockInput = false; break; case Button.RIGHT: + if (this.filteredIndices && this.filteredIndices.length <= 1) { + ui.playError(); + this.blockInput = false; + return true; + } ui.setModeWithoutClear(Mode.OPTION_SELECT).then(() => { // Always go back to first selection after scrolling around if (this.previousSpecies.length === 0) { @@ -2169,9 +2230,7 @@ export default class PokedexPageUiHandler extends MessageUiHandler { const ui = this.getUi(); - const isFormCaught = this.isFormCaught(); - - if ((this.isCaught() && isFormCaught) || (this.speciesStarterDexEntry?.seenAttr && cursor === 5)) { + if ((this.isCaught() && this.isFormCaught()) || this.isSeen()) { ui.showText(this.menuDescriptions[cursor]); } else { ui.showText(""); @@ -2250,7 +2309,7 @@ export default class PokedexPageUiHandler extends MessageUiHandler { } } - if (species && (this.speciesStarterDexEntry?.seenAttr || this.isCaught())) { + if (species && (this.isSeen() || this.isCaught())) { this.pokemonNumberText.setText(padInt(species.speciesId, 4)); if (this.isCaught()) { @@ -2379,8 +2438,6 @@ export default class PokedexPageUiHandler extends MessageUiHandler { } if (species) { - const dexEntry = globalScene.gameData.dexData[species.speciesId]; - const caughtAttr = this.isCaught(species); if (!caughtAttr) { @@ -2401,7 +2458,7 @@ export default class PokedexPageUiHandler extends MessageUiHandler { } const isFormCaught = this.isFormCaught(); - const isFormSeen = dexEntry ? (dexEntry.seenAttr & globalScene.gameData.getFormAttr(formIndex ?? 0)) > 0n : false; + const isFormSeen = this.isSeen(); this.shinyOverlay.setVisible(shiny ?? false); // TODO: is false the correct default? this.pokemonNumberText.setColor(this.getTextColor(shiny ? TextStyle.SUMMARY_GOLD : TextStyle.SUMMARY, false)); diff --git a/src/ui/pokedex-ui-handler.ts b/src/ui/pokedex-ui-handler.ts index 1f79d7006b0..59b06d476a2 100644 --- a/src/ui/pokedex-ui-handler.ts +++ b/src/ui/pokedex-ui-handler.ts @@ -1,5 +1,5 @@ -import type { Variant } from "#app/data/variant"; -import { getVariantTint, getVariantIcon } from "#app/data/variant"; +import type { Variant } from "#app/sprites/variant"; +import { getVariantTint, getVariantIcon } from "#app/sprites/variant"; import { argbFromRgba } from "@material/material-color-utilities"; import i18next from "i18next"; import { starterColors } from "#app/battle-scene"; @@ -12,7 +12,7 @@ import { getStarterValueFriendshipCap, speciesStarterCosts, POKERUS_STARTER_COUN import { catchableSpecies } from "#app/data/balance/biomes"; import { PokemonType } from "#enums/pokemon-type"; import type { DexAttrProps, DexEntry, StarterAttributes, StarterPreferences } from "#app/system/game-data"; -import { AbilityAttr, DexAttr, loadStarterPreferences, saveStarterPreferences } from "#app/system/game-data"; +import { AbilityAttr, DexAttr, loadStarterPreferences } from "#app/system/game-data"; import MessageUiHandler from "#app/ui/message-ui-handler"; import PokemonIconAnimHandler, { PokemonIconAnimMode } from "#app/ui/pokemon-icon-anim-handler"; import { TextStyle, addTextObject } from "#app/ui/text"; @@ -37,11 +37,10 @@ import { addWindow } from "./ui-theme"; import type { OptionSelectConfig } from "./abstact-option-select-ui-handler"; import { FilterText, FilterTextRow } from "./filter-text"; import { allAbilities } from "#app/data/ability"; -import type { PassiveAbilities } from "#app/data/balance/passives"; import { starterPassiveAbilities } from "#app/data/balance/passives"; import { allMoves } from "#app/data/moves/move"; import { speciesTmMoves } from "#app/data/balance/tms"; -import { pokemonStarters } from "#app/data/balance/pokemon-evolutions"; +import { pokemonPrevolutions, pokemonStarters } from "#app/data/balance/pokemon-evolutions"; import { Biome } from "#enums/biome"; import { globalScene } from "#app/global-scene"; @@ -782,6 +781,15 @@ export default class PokedexUiHandler extends MessageUiHandler { this.starterSelectMessageBoxContainer.setVisible(!!text?.length); } + isSeen(species: PokemonSpecies, dexEntry: DexEntry): boolean { + if (dexEntry?.seenAttr) { + return true; + } + + const starterDexEntry = globalScene.gameData.dexData[this.getStarterSpeciesId(species.speciesId)]; + return !!starterDexEntry?.caughtAttr; + } + /** * Determines if 'Icon' based upgrade notifications should be shown * @returns true if upgrade notifications are enabled and set to display an 'Icon' @@ -1365,7 +1373,7 @@ export default class PokedexUiHandler extends MessageUiHandler { const levelMoves = pokemonSpeciesLevelMoves[species.speciesId].map(m => allMoves[m[1]].name); // This always gets egg moves from the starter const eggMoves = speciesEggMoves[starterId]?.map(m => allMoves[m].name) ?? []; - const tmMoves = speciesTmMoves[starterId]?.map(m => allMoves[Array.isArray(m) ? m[1] : m].name) ?? []; + const tmMoves = speciesTmMoves[species.speciesId]?.map(m => allMoves[Array.isArray(m) ? m[1] : m].name) ?? []; const selectedMove1 = this.filterText.getValue(FilterTextRow.MOVE_1); const selectedMove2 = this.filterText.getValue(FilterTextRow.MOVE_2); @@ -1404,7 +1412,12 @@ export default class PokedexUiHandler extends MessageUiHandler { // Ability filter const abilities = [species.ability1, species.ability2, species.abilityHidden].map(a => allAbilities[a].name); - const passives = starterPassiveAbilities[starterId] ?? ({} as PassiveAbilities); + const passiveId = starterPassiveAbilities.hasOwnProperty(species.speciesId) + ? species.speciesId + : starterPassiveAbilities.hasOwnProperty(starterId) + ? starterId + : pokemonPrevolutions[starterId]; + const passives = starterPassiveAbilities[passiveId]; const selectedAbility1 = this.filterText.getValue(FilterTextRow.ABILITY_1); const fitsFormAbility1 = species.forms.some(form => @@ -1736,7 +1749,7 @@ export default class PokedexUiHandler extends MessageUiHandler { if (caughtAttr & data.species.getFullUnlocksData() || globalScene.dexForDevs) { container.icon.clearTint(); - } else if (dexEntry.seenAttr) { + } else if (this.isSeen(data.species, dexEntry)) { container.icon.setTint(0x808080); } else { container.icon.setTint(0); @@ -1927,13 +1940,11 @@ export default class PokedexUiHandler extends MessageUiHandler { const props = this.getSanitizedProps(globalScene.gameData.getSpeciesDexAttrProps(this.lastSpecies, dexAttr)); this.trayContainers = []; + const isFormSeen = this.isSeen(species, dexEntry); this.trayForms.map((f, index) => { const isFormCaught = dexEntry ? (dexEntry.caughtAttr & species.getFullUnlocksData() & globalScene.gameData.getFormAttr(f.formIndex ?? 0)) > 0n : false; - const isFormSeen = dexEntry - ? (dexEntry.seenAttr & globalScene.gameData.getFormAttr(f.formIndex ?? 0)) > 0n - : false; const formContainer = new PokedexMonContainer(species, { formIndex: f.formIndex, female: props.female, @@ -2143,7 +2154,7 @@ export default class PokedexUiHandler extends MessageUiHandler { } const isFormCaught = dexEntry ? (caughtAttr & globalScene.gameData.getFormAttr(formIndex ?? 0)) > 0n : false; - const isFormSeen = dexEntry ? (dexEntry.seenAttr & globalScene.gameData.getFormAttr(formIndex ?? 0)) > 0n : false; + const isFormSeen = this.isSeen(species, dexEntry); const assetLoadCancelled = new BooleanHolder(false); this.assetLoadCancelled = assetLoadCancelled; diff --git a/src/ui/pokemon-hatch-info-container.ts b/src/ui/pokemon-hatch-info-container.ts index 99940b92351..692f0f1d374 100644 --- a/src/ui/pokemon-hatch-info-container.ts +++ b/src/ui/pokemon-hatch-info-container.ts @@ -1,7 +1,7 @@ import PokemonInfoContainer from "#app/ui/pokemon-info-container"; import { Gender } from "#app/data/gender"; import { PokemonType } from "#enums/pokemon-type"; -import * as Utils from "#app/utils"; +import { rgbHexToRgba, padInt } from "#app/utils"; import { TextStyle, addTextObject } from "#app/ui/text"; import { speciesEggMoves } from "#app/data/balance/egg-moves"; import { allMoves } from "#app/data/moves/move"; @@ -154,14 +154,14 @@ export default class PokemonHatchInfoContainer extends PokemonInfoContainer { super.show(pokemon, false, 1, hatchInfo.getDex(), hatchInfo.getStarterEntry(), true); const colorScheme = starterColors[species.speciesId]; - this.pokemonCandyIcon.setTint(argbFromRgba(Utils.rgbHexToRgba(colorScheme[0]))); + this.pokemonCandyIcon.setTint(argbFromRgba(rgbHexToRgba(colorScheme[0]))); this.pokemonCandyIcon.setVisible(true); - this.pokemonCandyOverlayIcon.setTint(argbFromRgba(Utils.rgbHexToRgba(colorScheme[1]))); + this.pokemonCandyOverlayIcon.setTint(argbFromRgba(rgbHexToRgba(colorScheme[1]))); this.pokemonCandyOverlayIcon.setVisible(true); this.pokemonCandyCountText.setText(`x${globalScene.gameData.starterData[species.speciesId].candyCount}`); this.pokemonCandyCountText.setVisible(true); - this.pokemonNumberText.setText(Utils.padInt(species.speciesId, 4)); + this.pokemonNumberText.setText(padInt(species.speciesId, 4)); this.pokemonNameText.setText(species.name); const hasEggMoves = species && speciesEggMoves.hasOwnProperty(species.speciesId); diff --git a/src/ui/pokemon-icon-anim-handler.ts b/src/ui/pokemon-icon-anim-handler.ts index c84ee2a0f9a..b6944c0fd84 100644 --- a/src/ui/pokemon-icon-anim-handler.ts +++ b/src/ui/pokemon-icon-anim-handler.ts @@ -1,5 +1,5 @@ import { globalScene } from "#app/global-scene"; -import * as Utils from "../utils"; +import { fixedInt } from "#app/utils"; export enum PokemonIconAnimMode { NONE, @@ -27,7 +27,7 @@ export default class PokemonIconAnimHandler { } }; globalScene.tweens.addCounter({ - duration: Utils.fixedInt(200), + duration: fixedInt(200), from: 0, to: 1, yoyo: true, diff --git a/src/ui/pokemon-info-container.ts b/src/ui/pokemon-info-container.ts index 64c743ec88d..0ccece46ab9 100644 --- a/src/ui/pokemon-info-container.ts +++ b/src/ui/pokemon-info-container.ts @@ -1,4 +1,4 @@ -import { getVariantTint } from "#app/data/variant"; +import { getVariantTint } from "#app/sprites/variant"; import type BBCodeText from "phaser3-rex-plugins/plugins/bbcodetext"; import { globalScene } from "#app/global-scene"; import { Gender, getGenderColor, getGenderSymbol } from "../data/gender"; @@ -8,7 +8,7 @@ import type Pokemon from "../field/pokemon"; import i18next from "i18next"; import type { DexEntry, StarterDataEntry } from "../system/game-data"; import { DexAttr } from "../system/game-data"; -import * as Utils from "../utils"; +import { fixedInt } from "#app/utils"; import ConfirmUiHandler from "./confirm-ui-handler"; import { StatsContainer } from "./stats-container"; import { TextStyle, addBBCodeTextObject, addTextObject, getTextColor } from "./text"; @@ -393,7 +393,7 @@ export default class PokemonInfoContainer extends Phaser.GameObjects.Container { if (!eggInfo) { globalScene.tweens.add({ targets: this, - duration: Utils.fixedInt(Math.floor(750 / speedMultiplier)), + duration: fixedInt(Math.floor(750 / speedMultiplier)), ease: "Cubic.easeInOut", x: this.initialX - this.infoWindowWidth, onComplete: () => { @@ -403,9 +403,9 @@ export default class PokemonInfoContainer extends Phaser.GameObjects.Container { if (showMoves) { globalScene.tweens.add({ - delay: Utils.fixedInt(Math.floor(325 / speedMultiplier)), + delay: fixedInt(Math.floor(325 / speedMultiplier)), targets: this.pokemonMovesContainer, - duration: Utils.fixedInt(Math.floor(325 / speedMultiplier)), + duration: fixedInt(Math.floor(325 / speedMultiplier)), ease: "Cubic.easeInOut", x: this.movesContainerInitialX - 57, onComplete: () => resolve(), @@ -458,12 +458,12 @@ export default class PokemonInfoContainer extends Phaser.GameObjects.Container { makeRoomForConfirmUi(speedMultiplier = 1, fromCatch = false): Promise { const xPosition = fromCatch - ? this.initialX - this.infoWindowWidth - 65 + ? this.initialX - this.infoWindowWidth - 67 : this.initialX - this.infoWindowWidth - ConfirmUiHandler.windowWidth; return new Promise(resolve => { globalScene.tweens.add({ targets: this, - duration: Utils.fixedInt(Math.floor(150 / speedMultiplier)), + duration: fixedInt(Math.floor(150 / speedMultiplier)), ease: "Cubic.easeInOut", x: xPosition, onComplete: () => { @@ -482,14 +482,14 @@ export default class PokemonInfoContainer extends Phaser.GameObjects.Container { globalScene.tweens.add({ targets: this.pokemonMovesContainer, - duration: Utils.fixedInt(Math.floor(750 / speedMultiplier)), + duration: fixedInt(Math.floor(750 / speedMultiplier)), ease: "Cubic.easeInOut", x: this.movesContainerInitialX, }); globalScene.tweens.add({ targets: this, - duration: Utils.fixedInt(Math.floor(750 / speedMultiplier)), + duration: fixedInt(Math.floor(750 / speedMultiplier)), ease: "Cubic.easeInOut", x: this.initialX, onComplete: () => { diff --git a/src/ui/rename-form-ui-handler.ts b/src/ui/rename-form-ui-handler.ts index 91c0025d283..7083f83865b 100644 --- a/src/ui/rename-form-ui-handler.ts +++ b/src/ui/rename-form-ui-handler.ts @@ -38,7 +38,7 @@ export default class RenameFormUiHandler extends FormModalUiHandler { if (super.show(args)) { const config = args[0] as ModalConfig; if (args[1] && typeof (args[1] as PlayerPokemon).getNameToRender === "function") { - this.inputs[0].text = (args[1] as PlayerPokemon).getNameToRender(); + this.inputs[0].text = (args[1] as PlayerPokemon).getNameToRender(false); } else { this.inputs[0].text = args[1]; } diff --git a/src/ui/run-history-ui-handler.ts b/src/ui/run-history-ui-handler.ts index 85ea1e93e8d..ffc9d378d18 100644 --- a/src/ui/run-history-ui-handler.ts +++ b/src/ui/run-history-ui-handler.ts @@ -3,7 +3,7 @@ import { GameModes } from "../game-mode"; import { TextStyle, addTextObject } from "./text"; import { Mode } from "./ui"; import { addWindow } from "./ui-theme"; -import * as Utils from "../utils"; +import { fixedInt, formatLargeNumber } from "#app/utils"; import type PokemonData from "../system/pokemon-data"; import MessageUiHandler from "./message-ui-handler"; import i18next from "i18next"; @@ -218,7 +218,7 @@ export default class RunHistoryUiHandler extends MessageUiHandler { globalScene.tweens.add({ targets: this.runsContainer, y: this.runContainerInitialY - 56 * scrollCursor, - duration: Utils.fixedInt(325), + duration: fixedInt(325), ease: "Sine.easeInOut", }); } @@ -314,7 +314,7 @@ class RunEntryContainer extends Phaser.GameObjects.Container { const enemyLevel = addTextObject( 32, 20, - `${i18next.t("saveSlotSelectUiHandler:lv")}${Utils.formatLargeNumber(enemy.level, 1000)}`, + `${i18next.t("saveSlotSelectUiHandler:lv")}${formatLargeNumber(enemy.level, 1000)}`, TextStyle.PARTY, { fontSize: "54px", color: "#f8f8f8" }, ); @@ -408,7 +408,7 @@ class RunEntryContainer extends Phaser.GameObjects.Container { const text = addTextObject( 32, 20, - `${i18next.t("saveSlotSelectUiHandler:lv")}${Utils.formatLargeNumber(pokemon.level, 1000)}`, + `${i18next.t("saveSlotSelectUiHandler:lv")}${formatLargeNumber(pokemon.level, 1000)}`, TextStyle.PARTY, { fontSize: "54px", color: "#f8f8f8" }, ); diff --git a/src/ui/run-info-ui-handler.ts b/src/ui/run-info-ui-handler.ts index 364cb8e4003..47de6a1a64d 100644 --- a/src/ui/run-info-ui-handler.ts +++ b/src/ui/run-info-ui-handler.ts @@ -5,7 +5,7 @@ import { TextStyle, addTextObject, addBBCodeTextObject, getTextColor } from "./t import { Mode } from "./ui"; import { addWindow } from "./ui-theme"; import { getPokeballAtlasKey } from "#app/data/pokeball"; -import * as Utils from "../utils"; +import { formatLargeNumber, getPlayTimeString, formatMoney, formatFancyLargeNumber } from "#app/utils"; import type PokemonData from "../system/pokemon-data"; import i18next from "i18next"; import { Button } from "../enums/buttons"; @@ -18,8 +18,9 @@ import { getTypeRgb } from "#app/data/type"; import { PokemonType } from "#enums/pokemon-type"; import { TypeColor, TypeShadow } from "#app/enums/color"; import { getNatureStatMultiplier, getNatureName } from "../data/nature"; -import { getVariantTint } from "#app/data/variant"; -import * as Modifier from "../modifier/modifier"; +import { getVariantTint } from "#app/sprites/variant"; +// biome-ignore lint/style/noNamespaceImport: See `src/system/game-data.ts` +import * as Modifier from "#app/modifier/modifier"; import type { Species } from "#enums/species"; import { PlayerGender } from "#enums/player-gender"; import { SettingKeyboard } from "#app/system/settings/settings-keyboard"; @@ -411,7 +412,7 @@ export default class RunInfoUiHandler extends UiHandler { const enemyLevel = addTextObject( 36, 26, - `${i18next.t("saveSlotSelectUiHandler:lv")}${Utils.formatLargeNumber(enemy.level, 1000)}`, + `${i18next.t("saveSlotSelectUiHandler:lv")}${formatLargeNumber(enemy.level, 1000)}`, enemyLevelStyle, { fontSize: "44px", color: "#f8f8f8" }, ); @@ -441,7 +442,7 @@ export default class RunInfoUiHandler extends UiHandler { const enemyLevel = addTextObject( 36, 26, - `${i18next.t("saveSlotSelectUiHandler:lv")}${Utils.formatLargeNumber(enemy.level, 1000)}`, + `${i18next.t("saveSlotSelectUiHandler:lv")}${formatLargeNumber(enemy.level, 1000)}`, bossStatus ? TextStyle.PARTY_RED : TextStyle.PARTY, { fontSize: "44px", color: "#f8f8f8" }, ); @@ -527,7 +528,7 @@ export default class RunInfoUiHandler extends UiHandler { const enemyLevel = addTextObject( 43 * (e % 3), 27 * (pokemonRowHeight + 1), - `${i18next.t("saveSlotSelectUiHandler:lv")}${Utils.formatLargeNumber(enemy.level, 1000)}`, + `${i18next.t("saveSlotSelectUiHandler:lv")}${formatLargeNumber(enemy.level, 1000)}`, isBoss ? TextStyle.PARTY_RED : TextStyle.PARTY, { fontSize: "54px" }, ); @@ -606,9 +607,9 @@ export default class RunInfoUiHandler extends UiHandler { fontSize: "50px", lineSpacing: lineSpacing, }); - const runTime = Utils.getPlayTimeString(this.runInfo.playTime); + const runTime = getPlayTimeString(this.runInfo.playTime); runInfoText.appendText(`${i18next.t("runHistory:runLength")}: ${runTime}`, false); - const runMoney = Utils.formatMoney(globalScene.moneyFormat, this.runInfo.money); + const runMoney = formatMoney(globalScene.moneyFormat, this.runInfo.money); const moneyTextColor = getTextColor(TextStyle.MONEY_WINDOW, false, globalScene.uiTheme); runInfoText.appendText( `[color=${moneyTextColor}]${i18next.t("battleScene:moneyOwned", { formattedMoney: runMoney })}[/color]`, @@ -770,7 +771,7 @@ export default class RunInfoUiHandler extends UiHandler { lineSpacing: lineSpacing, }); pokeInfoText.appendText( - `${i18next.t("saveSlotSelectUiHandler:lv")}${Utils.formatFancyLargeNumber(pokemon.level, 1)} - ${pNatureName}`, + `${i18next.t("saveSlotSelectUiHandler:lv")}${formatFancyLargeNumber(pokemon.level, 1)} - ${pNatureName}`, ); pokeInfoText.appendText(pAbilityInfo); pokeInfoText.appendText(pPassiveInfo); @@ -780,7 +781,7 @@ export default class RunInfoUiHandler extends UiHandler { // Colored Arrows (Red/Blue) are placed by stats that are boosted from natures const pokeStatTextContainer = globalScene.add.container(-35, 6); const pStats: string[] = []; - pokemon.stats.forEach(element => pStats.push(Utils.formatFancyLargeNumber(element, 1))); + pokemon.stats.forEach(element => pStats.push(formatFancyLargeNumber(element, 1))); for (let i = 0; i < pStats.length; i++) { const isMult = getNatureStatMultiplier(pNature, i); pStats[i] = isMult < 1 ? pStats[i] + "[color=#40c8f8]↓[/color]" : pStats[i]; diff --git a/src/ui/save-slot-select-ui-handler.ts b/src/ui/save-slot-select-ui-handler.ts index a1e9e5219b4..0c16e41bbef 100644 --- a/src/ui/save-slot-select-ui-handler.ts +++ b/src/ui/save-slot-select-ui-handler.ts @@ -2,10 +2,11 @@ import i18next from "i18next"; import { globalScene } from "#app/global-scene"; import { Button } from "#enums/buttons"; import { GameMode } from "../game-mode"; -import * as Modifier from "../modifier/modifier"; +// biome-ignore lint/style/noNamespaceImport: See `src/system/game-data.ts` +import * as Modifier from "#app/modifier/modifier"; import type { SessionSaveData } from "../system/game-data"; import type PokemonData from "../system/pokemon-data"; -import * as Utils from "../utils"; +import { isNullOrUndefined, fixedInt, getPlayTimeString, formatLargeNumber } from "#app/utils"; import MessageUiHandler from "./message-ui-handler"; import { TextStyle, addTextObject } from "./text"; import { Mode } from "./ui"; @@ -296,7 +297,7 @@ export default class SaveSlotSelectUiHandler extends MessageUiHandler { } this.setArrowVisibility(hasData); } - if (!Utils.isNullOrUndefined(prevSlotIndex)) { + if (!isNullOrUndefined(prevSlotIndex)) { this.revertSessionSlot(prevSlotIndex); } @@ -339,7 +340,7 @@ export default class SaveSlotSelectUiHandler extends MessageUiHandler { globalScene.tweens.add({ targets: this.sessionSlotsContainer, y: this.sessionSlotsContainerInitialY - 56 * scrollCursor, - duration: Utils.fixedInt(325), + duration: fixedInt(325), ease: "Sine.easeInOut", }); } @@ -407,7 +408,7 @@ class SessionSlot extends Phaser.GameObjects.Container { const timestampLabel = addTextObject(8, 19, new Date(data.timestamp).toLocaleString(), TextStyle.WINDOW); this.add(timestampLabel); - const playTimeLabel = addTextObject(8, 33, Utils.getPlayTimeString(data.playTime), TextStyle.WINDOW); + const playTimeLabel = addTextObject(8, 33, getPlayTimeString(data.playTime), TextStyle.WINDOW); this.add(playTimeLabel); const pokemonIconsContainer = globalScene.add.container(144, 4); @@ -421,7 +422,7 @@ class SessionSlot extends Phaser.GameObjects.Container { const text = addTextObject( 32, 20, - `${i18next.t("saveSlotSelectUiHandler:lv")}${Utils.formatLargeNumber(pokemon.level, 1000)}`, + `${i18next.t("saveSlotSelectUiHandler:lv")}${formatLargeNumber(pokemon.level, 1000)}`, TextStyle.PARTY, { fontSize: "54px", color: "#f8f8f8" }, ); diff --git a/src/ui/saving-icon-handler.ts b/src/ui/saving-icon-handler.ts index 4404ea423b1..3db84f128a1 100644 --- a/src/ui/saving-icon-handler.ts +++ b/src/ui/saving-icon-handler.ts @@ -1,5 +1,5 @@ import { globalScene } from "#app/global-scene"; -import * as Utils from "../utils"; +import { fixedInt } from "#app/utils"; export default class SavingIconHandler extends Phaser.GameObjects.Container { private icon: Phaser.GameObjects.Sprite; @@ -36,10 +36,10 @@ export default class SavingIconHandler extends Phaser.GameObjects.Container { globalScene.tweens.add({ targets: this, alpha: 1, - duration: Utils.fixedInt(250), + duration: fixedInt(250), ease: "Sine.easeInOut", onComplete: () => { - globalScene.time.delayedCall(Utils.fixedInt(500), () => { + globalScene.time.delayedCall(fixedInt(500), () => { this.animActive = false; if (!this.shown) { this.hide(); @@ -64,7 +64,7 @@ export default class SavingIconHandler extends Phaser.GameObjects.Container { globalScene.tweens.add({ targets: this, alpha: 0, - duration: Utils.fixedInt(250), + duration: fixedInt(250), ease: "Sine.easeInOut", onComplete: () => { this.animActive = false; diff --git a/src/ui/settings/settings-display-ui-handler.ts b/src/ui/settings/settings-display-ui-handler.ts index b3505fe90f2..985aa9adca2 100644 --- a/src/ui/settings/settings-display-ui-handler.ts +++ b/src/ui/settings/settings-display-ui-handler.ts @@ -33,6 +33,12 @@ export default class SettingsDisplayUiHandler extends AbstractSettingsUiHandler label: "Español (ES)", }; break; + case "es-MX": + this.settings[languageIndex].options[0] = { + value: "Español (LATAM)", + label: "Español (LATAM)", + }; + break; case "it": this.settings[languageIndex].options[0] = { value: "Italiano", diff --git a/src/ui/starter-select-ui-handler.ts b/src/ui/starter-select-ui-handler.ts index 8265ad827bc..3e2940f45b9 100644 --- a/src/ui/starter-select-ui-handler.ts +++ b/src/ui/starter-select-ui-handler.ts @@ -1,8 +1,8 @@ import type { CandyUpgradeNotificationChangedEvent } from "#app/events/battle-scene"; import { BattleSceneEventType } from "#app/events/battle-scene"; -import { pokemonEvolutions, pokemonPrevolutions } from "#app/data/balance/pokemon-evolutions"; -import type { Variant } from "#app/data/variant"; -import { getVariantTint, getVariantIcon } from "#app/data/variant"; +import { pokemonPrevolutions } from "#app/data/balance/pokemon-evolutions"; +import type { Variant } from "#app/sprites/variant"; +import { getVariantTint, getVariantIcon } from "#app/sprites/variant"; import { argbFromRgba } from "@material/material-color-utilities"; import i18next from "i18next"; import type BBCodeText from "phaser3-rex-plugins/plugins/bbcodetext"; @@ -19,7 +19,7 @@ import { pokemonFormChanges } from "#app/data/pokemon-forms"; import type { LevelMoves } from "#app/data/balance/pokemon-level-moves"; import { pokemonFormLevelMoves, pokemonSpeciesLevelMoves } from "#app/data/balance/pokemon-level-moves"; import type PokemonSpecies from "#app/data/pokemon-species"; -import { allSpecies, getPokemonSpecies, getPokemonSpeciesForm, getPokerusStarters } from "#app/data/pokemon-species"; +import { allSpecies, getPokemonSpeciesForm, getPokerusStarters } from "#app/data/pokemon-species"; import { getStarterValueFriendshipCap, speciesStarterCosts, POKERUS_STARTER_COUNT } from "#app/data/balance/starters"; import { PokemonType } from "#enums/pokemon-type"; import { GameModes } from "#app/game-mode"; @@ -43,7 +43,7 @@ import { Egg } from "#app/data/egg"; import Overrides from "#app/overrides"; import { SettingKeyboard } from "#app/system/settings/settings-keyboard"; import { Passive as PassiveAttr } from "#enums/passive"; -import * as Challenge from "#app/data/challenge"; +import { applyChallenges, ChallengeType } from "#app/data/challenge"; import MoveInfoOverlay from "#app/ui/move-info-overlay"; import { getEggTierForSpecies } from "#app/data/egg"; import { Device } from "#enums/devices"; @@ -78,7 +78,6 @@ import { import type { Nature } from "#enums/nature"; import { PLAYER_PARTY_MAX_SIZE } from "#app/constants"; import { achvs } from "#app/system/achv"; -import * as Utils from "../utils"; import type { GameObjects } from "phaser"; import { checkStarterValidForChallenge } from "#app/data/challenge"; @@ -117,6 +116,10 @@ const languageSettings: { [key: string]: LanguageSetting } = { starterInfoTextSize: "52px", instructionTextSize: "35px", }, + "es-MX": { + starterInfoTextSize: "52px", + instructionTextSize: "35px", + }, fr: { starterInfoTextSize: "54px", instructionTextSize: "38px", @@ -150,7 +153,7 @@ const languageSettings: { [key: string]: LanguageSetting } = { instructionTextSize: "38px", }, "ca-ES": { - starterInfoTextSize: "56px", + starterInfoTextSize: "52px", instructionTextSize: "38px", }, }; @@ -2514,7 +2517,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { case Button.CYCLE_TERA: if (this.canCycleTera) { const speciesForm = getPokemonSpeciesForm(this.lastSpecies.speciesId, starterAttributes.form ?? 0); - if (speciesForm.type1 === this.teraCursor && !Utils.isNullOrUndefined(speciesForm.type2)) { + if (speciesForm.type1 === this.teraCursor && !isNullOrUndefined(speciesForm.type2)) { starterAttributes.tera = speciesForm.type2!; this.setSpeciesDetails(this.lastSpecies, { teraType: speciesForm.type2!, @@ -2956,7 +2959,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { valueLimit.value = 10; } - Challenge.applyChallenges(globalScene.gameMode, Challenge.ChallengeType.STARTER_POINTS, valueLimit); + applyChallenges(ChallengeType.STARTER_POINTS, valueLimit); return valueLimit.value; } @@ -3744,7 +3747,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { ); // TODO: is this bang correct? this.abilityCursor = abilityIndex !== undefined ? abilityIndex : (abilityIndex = oldAbilityIndex); this.natureCursor = natureIndex !== undefined ? natureIndex : (natureIndex = oldNatureIndex); - this.teraCursor = !Utils.isNullOrUndefined(teraType) ? teraType : (teraType = species.type1); + this.teraCursor = !isNullOrUndefined(teraType) ? teraType : (teraType = species.type1); const [isInParty, partyIndex]: [boolean, number] = this.isInParty(species); // we use this to firstly check if the pokemon is in the party, and if so, to get the party index in order to update the icon image if (isInParty) { this.updatePartyIcon(species, partyIndex); @@ -3882,7 +3885,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { this.canCycleTera = !this.statsMode && globalScene.gameData.achvUnlocks.hasOwnProperty(achvs.TERASTALLIZE.id) && - !Utils.isNullOrUndefined(getPokemonSpeciesForm(species.speciesId, formIndex ?? 0).type2); + !isNullOrUndefined(getPokemonSpeciesForm(species.speciesId, formIndex ?? 0).type2); } if (dexEntry.caughtAttr && species.malePercent !== null) { @@ -4479,7 +4482,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { this.canCycleTera = !this.statsMode && globalScene.gameData.achvUnlocks.hasOwnProperty(achvs.TERASTALLIZE.id) && - !Utils.isNullOrUndefined(getPokemonSpeciesForm(this.lastSpecies.speciesId, formIndex ?? 0).type2); + !isNullOrUndefined(getPokemonSpeciesForm(this.lastSpecies.speciesId, formIndex ?? 0).type2); this.updateInstructions(); } } @@ -4553,4 +4556,13 @@ export default class StarterSelectUiHandler extends MessageUiHandler { icon.setFrame(species.getIconId(female, formIndex, false, variant)); } } + + /** + * Clears this UI's starter preferences. + * + * Designed to be used for unit tests that utilize this UI. + */ + clearStarterPreferences() { + this.starterPreferences = {}; + } } diff --git a/src/ui/summary-ui-handler.ts b/src/ui/summary-ui-handler.ts index d42572cfef4..04bcf71d7ae 100644 --- a/src/ui/summary-ui-handler.ts +++ b/src/ui/summary-ui-handler.ts @@ -2,7 +2,16 @@ import { starterColors } from "#app/battle-scene"; import { globalScene } from "#app/global-scene"; import { Mode } from "#app/ui/ui"; import UiHandler from "#app/ui/ui-handler"; -import * as Utils from "#app/utils"; +import { + getLocalizedSpriteKey, + rgbHexToRgba, + padInt, + getEnumValues, + fixedInt, + isNullOrUndefined, + toReadableString, + formatStat, +} from "#app/utils"; import type { PlayerPokemon, PokemonMove } from "#app/field/pokemon"; import { getStarterValueFriendshipCap, speciesStarterCosts } from "#app/data/balance/starters"; import { argbFromRgba } from "@material/material-color-utilities"; @@ -19,8 +28,8 @@ import { StatusEffect } from "#enums/status-effect"; import { getBiomeName } from "#app/data/balance/biomes"; import { getNatureName, getNatureStatMultiplier } from "#app/data/nature"; import { loggedInUser } from "#app/account"; -import type { Variant } from "#app/data/variant"; -import { getVariantTint } from "#app/data/variant"; +import type { Variant } from "#app/sprites/variant"; +import { getVariantTint } from "#app/sprites/variant"; import { Button } from "#enums/buttons"; import type { Ability } from "#app/data/ability"; import i18next from "i18next"; @@ -255,7 +264,7 @@ export default class SummaryUiHandler extends UiHandler { this.statusContainer.add(statusLabel); - this.status = globalScene.add.sprite(91, 4, Utils.getLocalizedSpriteKey("statuses")); + this.status = globalScene.add.sprite(91, 4, getLocalizedSpriteKey("statuses")); this.status.setOrigin(0.5, 0); this.statusContainer.add(this.status); @@ -330,10 +339,10 @@ export default class SummaryUiHandler extends UiHandler { this.shinyOverlay.setVisible(this.pokemon.isShiny()); const colorScheme = starterColors[this.pokemon.species.getRootSpeciesId()]; - this.candyIcon.setTint(argbFromRgba(Utils.rgbHexToRgba(colorScheme[0]))); - this.candyOverlay.setTint(argbFromRgba(Utils.rgbHexToRgba(colorScheme[1]))); + this.candyIcon.setTint(argbFromRgba(rgbHexToRgba(colorScheme[0]))); + this.candyOverlay.setTint(argbFromRgba(rgbHexToRgba(colorScheme[1]))); - this.numberText.setText(Utils.padInt(this.pokemon.species.speciesId, 4)); + this.numberText.setText(padInt(this.pokemon.species.speciesId, 4)); this.numberText.setColor(this.getTextColor(!this.pokemon.isShiny() ? TextStyle.SUMMARY : TextStyle.SUMMARY_GOLD)); this.numberText.setShadowColor( this.getTextColor(!this.pokemon.isShiny() ? TextStyle.SUMMARY : TextStyle.SUMMARY_GOLD, true), @@ -348,8 +357,14 @@ export default class SummaryUiHandler extends UiHandler { this.pokemonSprite.setPipelineData("isTerastallized", this.pokemon.isTerastallized); this.pokemonSprite.setPipelineData("ignoreTimeTint", true); this.pokemonSprite.setPipelineData("spriteKey", this.pokemon.getSpriteKey()); - this.pokemonSprite.setPipelineData("shiny", this.pokemon.shiny); - this.pokemonSprite.setPipelineData("variant", this.pokemon.variant); + this.pokemonSprite.setPipelineData( + "shiny", + this.pokemon.summonData?.illusion?.basePokemon.shiny ?? this.pokemon.shiny, + ); + this.pokemonSprite.setPipelineData( + "variant", + this.pokemon.summonData?.illusion?.basePokemon.variant ?? this.pokemon.variant, + ); ["spriteColors", "fusionSpriteColors"].map(k => { delete this.pokemonSprite.pipelineData[`${k}Base`]; if (this.pokemon?.summonData?.speciesForm) { @@ -359,7 +374,7 @@ export default class SummaryUiHandler extends UiHandler { }); this.pokemon.cry(); - this.nameText.setText(this.pokemon.getNameToRender()); + this.nameText.setText(this.pokemon.getNameToRender(false)); const isFusion = this.pokemon.isFusion(); @@ -417,8 +432,8 @@ export default class SummaryUiHandler extends UiHandler { this.friendshipShadow.setCrop(0, 0, 16, 16 - 16 * ((this.pokemon?.friendship || 0) / 255)); - const doubleShiny = isFusion && this.pokemon.shiny && this.pokemon.fusionShiny; - const baseVariant = !doubleShiny ? this.pokemon.getVariant() : this.pokemon.variant; + const doubleShiny = this.pokemon.isDoubleShiny(false); + const baseVariant = this.pokemon.getBaseVariant(doubleShiny); this.shinyIcon.setPositionRelative( this.nameText, @@ -426,7 +441,7 @@ export default class SummaryUiHandler extends UiHandler { 3, ); this.shinyIcon.setTexture(`shiny_star${doubleShiny ? "_1" : ""}`); - this.shinyIcon.setVisible(this.pokemon.isShiny()); + this.shinyIcon.setVisible(this.pokemon.isShiny(false)); this.shinyIcon.setTint(getVariantTint(baseVariant)); if (this.shinyIcon.visible) { const shinyDescriptor = @@ -446,7 +461,9 @@ export default class SummaryUiHandler extends UiHandler { this.fusionShinyIcon.setPosition(this.shinyIcon.x, this.shinyIcon.y); this.fusionShinyIcon.setVisible(doubleShiny); if (isFusion) { - this.fusionShinyIcon.setTint(getVariantTint(this.pokemon.fusionVariant)); + this.fusionShinyIcon.setTint( + getVariantTint(this.pokemon.summonData?.illusion?.basePokemon.fusionVariant ?? this.pokemon.fusionVariant), + ); } this.pokeball.setFrame(getPokeballAtlasKey(this.pokemon.pokeball)); @@ -600,7 +617,7 @@ export default class SummaryUiHandler extends UiHandler { } success = true; } else { - const pages = Utils.getEnumValues(Page); + const pages = getEnumValues(Page); switch (button) { case Button.UP: case Button.DOWN: { @@ -675,10 +692,10 @@ export default class SummaryUiHandler extends UiHandler { if (moveDescriptionLineCount > 3) { this.descriptionScrollTween = globalScene.tweens.add({ targets: this.moveDescriptionText, - delay: Utils.fixedInt(2000), + delay: fixedInt(2000), loop: -1, - hold: Utils.fixedInt(2000), - duration: Utils.fixedInt((moveDescriptionLineCount - 3) * 2000), + hold: fixedInt(2000), + duration: fixedInt((moveDescriptionLineCount - 3) * 2000), y: `-=${14.83 * (moveDescriptionLineCount - 3)}`, }); } @@ -697,10 +714,10 @@ export default class SummaryUiHandler extends UiHandler { this.moveCursorObj.setVisible(true); this.moveCursorBlinkTimer = globalScene.time.addEvent({ loop: true, - delay: Utils.fixedInt(600), + delay: fixedInt(600), callback: () => { this.moveCursorObj?.setVisible(false); - globalScene.time.delayedCall(Utils.fixedInt(100), () => { + globalScene.time.delayedCall(fixedInt(100), () => { if (!this.moveCursorObj) { return; } @@ -818,7 +835,7 @@ export default class SummaryUiHandler extends UiHandler { const getTypeIcon = (index: number, type: PokemonType, tera = false) => { const xCoord = typeLabel.width * typeLabel.scale + 9 + 34 * index; const typeIcon = !tera - ? globalScene.add.sprite(xCoord, 42, Utils.getLocalizedSpriteKey("types"), PokemonType[type].toLowerCase()) + ? globalScene.add.sprite(xCoord, 42, getLocalizedSpriteKey("types"), PokemonType[type].toLowerCase()) : globalScene.add.sprite(xCoord, 42, "type_tera"); if (tera) { typeIcon.setScale(0.5); @@ -829,7 +846,7 @@ export default class SummaryUiHandler extends UiHandler { return typeIcon; }; - const types = this.pokemon?.getTypes(false, false, true)!; // TODO: is this bang correct? + const types = this.pokemon?.getTypes(false, false, true, false)!; // TODO: is this bang correct? profileContainer.add(getTypeIcon(0, types[0])); if (types.length > 1) { profileContainer.add(getTypeIcon(1, types[1])); @@ -853,7 +870,7 @@ export default class SummaryUiHandler extends UiHandler { if ( globalScene.gameData.achvUnlocks.hasOwnProperty(achvs.TERASTALLIZE.id) && - !Utils.isNullOrUndefined(this.pokemon) + !isNullOrUndefined(this.pokemon) ) { const teraIcon = globalScene.add.sprite(123, 26, "button_tera"); teraIcon.setName("terrastallize-icon"); @@ -925,10 +942,10 @@ export default class SummaryUiHandler extends UiHandler { abilityInfo.descriptionText.setY(69); this.descriptionScrollTween = globalScene.tweens.add({ targets: abilityInfo.descriptionText, - delay: Utils.fixedInt(2000), + delay: fixedInt(2000), loop: -1, - hold: Utils.fixedInt(2000), - duration: Utils.fixedInt((abilityDescriptionLineCount - 2) * 2000), + hold: fixedInt(2000), + duration: fixedInt((abilityDescriptionLineCount - 2) * 2000), y: `-=${14.83 * (abilityDescriptionLineCount - 2)}`, }); } @@ -939,8 +956,8 @@ export default class SummaryUiHandler extends UiHandler { this.passiveContainer?.descriptionText?.setVisible(false); const closeFragment = getBBCodeFrag("", TextStyle.WINDOW_ALT); - const rawNature = Utils.toReadableString(Nature[this.pokemon?.getNature()!]); // TODO: is this bang correct? - const nature = `${getBBCodeFrag(Utils.toReadableString(getNatureName(this.pokemon?.getNature()!)), TextStyle.SUMMARY_RED)}${closeFragment}`; // TODO: is this bang correct? + const rawNature = toReadableString(Nature[this.pokemon?.getNature()!]); // TODO: is this bang correct? + const nature = `${getBBCodeFrag(toReadableString(getNatureName(this.pokemon?.getNature()!)), TextStyle.SUMMARY_RED)}${closeFragment}`; // TODO: is this bang correct? const memoString = i18next.t("pokemonSummary:memoString", { metFragment: i18next.t( @@ -999,8 +1016,8 @@ export default class SummaryUiHandler extends UiHandler { const statValueText = stat !== Stat.HP - ? Utils.formatStat(this.pokemon?.getStat(stat)!) // TODO: is this bang correct? - : `${Utils.formatStat(this.pokemon?.hp!, true)}/${Utils.formatStat(this.pokemon?.getMaxHp()!, true)}`; // TODO: are those bangs correct? + ? formatStat(this.pokemon?.getStat(stat)!) // TODO: is this bang correct? + : `${formatStat(this.pokemon?.hp!, true)}/${formatStat(this.pokemon?.getMaxHp()!, true)}`; // TODO: are those bangs correct? const ivText = `${this.pokemon?.ivs[stat]}/31`; const statValue = addTextObject(93 + 88 * colIndex, 16 * rowIndex, statValueText, TextStyle.WINDOW_ALT); @@ -1106,7 +1123,7 @@ export default class SummaryUiHandler extends UiHandler { this.extraMoveRowContainer.setVisible(true); if (this.newMove && this.pokemon) { - const spriteKey = Utils.getLocalizedSpriteKey("types"); + const spriteKey = getLocalizedSpriteKey("types"); const moveType = this.pokemon.getMoveType(this.newMove); const newMoveTypeIcon = globalScene.add.sprite(0, 0, spriteKey, PokemonType[moveType].toLowerCase()); newMoveTypeIcon.setOrigin(0, 1); @@ -1116,7 +1133,7 @@ export default class SummaryUiHandler extends UiHandler { ppOverlay.setOrigin(0, 1); this.extraMoveRowContainer.add(ppOverlay); - const pp = Utils.padInt(this.newMove?.pp!, 2, " "); // TODO: is this bang correct? + const pp = padInt(this.newMove?.pp!, 2, " "); // TODO: is this bang correct? const ppText = addTextObject(173, 1, `${pp}/${pp}`, TextStyle.WINDOW); ppText.setOrigin(0, 1); this.extraMoveRowContainer.add(ppText); @@ -1132,7 +1149,7 @@ export default class SummaryUiHandler extends UiHandler { this.moveRowsContainer.add(moveRowContainer); if (move && this.pokemon) { - const spriteKey = Utils.getLocalizedSpriteKey("types"); + const spriteKey = getLocalizedSpriteKey("types"); const moveType = this.pokemon.getMoveType(move.getMove()); const typeIcon = globalScene.add.sprite(0, 0, spriteKey, PokemonType[moveType].toLowerCase()); typeIcon.setOrigin(0, 1); @@ -1153,7 +1170,7 @@ export default class SummaryUiHandler extends UiHandler { if (move) { const maxPP = move.getMovePp(); const pp = maxPP - move.ppUsed; - ppText.setText(`${Utils.padInt(pp, 2, " ")}/${Utils.padInt(maxPP, 2, " ")}`); + ppText.setText(`${padInt(pp, 2, " ")}/${padInt(maxPP, 2, " ")}`); } moveRowContainer.add(ppText); @@ -1208,7 +1225,7 @@ export default class SummaryUiHandler extends UiHandler { } if (this.moveCursor < 4 && this.pokemon && this.moveCursor < this.pokemon.moveset.length) { - return this.pokemon.moveset[this.moveCursor]!.getMove(); // TODO: is this bang correct? + return this.pokemon.moveset[this.moveCursor].getMove(); } if (this.summaryUiMode === SummaryUiMode.LEARN_MOVE && this.moveCursor === 4) { return this.newMove; diff --git a/src/ui/target-select-ui-handler.ts b/src/ui/target-select-ui-handler.ts index d2f72ef4a4c..a9f88b337f3 100644 --- a/src/ui/target-select-ui-handler.ts +++ b/src/ui/target-select-ui-handler.ts @@ -1,7 +1,7 @@ import { BattlerIndex } from "../battle"; import { Mode } from "./ui"; import UiHandler from "./ui-handler"; -import * as Utils from "../utils"; +import { isNullOrUndefined, fixedInt } from "#app/utils"; import { getMoveTargets } from "../data/moves/move"; import { Button } from "#enums/buttons"; import type { Moves } from "#enums/moves"; @@ -70,7 +70,7 @@ export default class TargetSelectUiHandler extends UiHandler { * @param user the Pokemon using the move */ resetCursor(cursorN: number, user: Pokemon): void { - if (!Utils.isNullOrUndefined(cursorN)) { + if (!isNullOrUndefined(cursorN)) { if ([BattlerIndex.PLAYER, BattlerIndex.PLAYER_2].includes(cursorN) || user.battleSummonData.waveTurnCount === 1) { // Reset cursor on the first turn of a fight or if an ally was targeted last turn cursorN = -1; @@ -89,11 +89,11 @@ export default class TargetSelectUiHandler extends UiHandler { this.targetSelectCallback(button === Button.ACTION ? targetIndexes : []); success = true; if (this.fieldIndex === BattlerIndex.PLAYER) { - if (Utils.isNullOrUndefined(this.cursor0) || this.cursor0 !== this.cursor) { + if (isNullOrUndefined(this.cursor0) || this.cursor0 !== this.cursor) { this.cursor0 = this.cursor; } } else if (this.fieldIndex === BattlerIndex.PLAYER_2) { - if (Utils.isNullOrUndefined(this.cursor1) || this.cursor1 !== this.cursor) { + if (isNullOrUndefined(this.cursor1) || this.cursor1 !== this.cursor) { this.cursor1 = this.cursor; } } @@ -152,7 +152,7 @@ export default class TargetSelectUiHandler extends UiHandler { key: { start: 1, to: 0.25 }, loop: -1, loopDelay: 150, - duration: Utils.fixedInt(450), + duration: fixedInt(450), ease: "Sine.easeInOut", yoyo: true, onUpdate: t => { @@ -178,7 +178,7 @@ export default class TargetSelectUiHandler extends UiHandler { targets: [info], y: { start: info.getBaseY(), to: info.getBaseY() + 1 }, loop: -1, - duration: Utils.fixedInt(250), + duration: fixedInt(250), ease: "Linear", yoyo: true, }), diff --git a/src/ui/time-of-day-widget.ts b/src/ui/time-of-day-widget.ts index bda1f750cb1..5e42e6215f8 100644 --- a/src/ui/time-of-day-widget.ts +++ b/src/ui/time-of-day-widget.ts @@ -1,4 +1,4 @@ -import * as Utils from "../utils"; +import { fixedInt } from "#app/utils"; import { globalScene } from "#app/global-scene"; import { BattleSceneEventType } from "../events/battle-scene"; import { EaseType } from "#enums/ease-type"; @@ -75,14 +75,14 @@ export default class TimeOfDayWidget extends Phaser.GameObjects.Container { const rotate = { targets: [this.timeOfDayIconMgs[0], this.timeOfDayIconMgs[1]], angle: "+=90", - duration: Utils.fixedInt(1500), + duration: fixedInt(1500), ease: "Back.easeOut", paused: !this.parentVisible, }; const fade = { targets: [this.timeOfDayIconBgs[1], this.timeOfDayIconMgs[1], this.timeOfDayIconFgs[1]], alpha: 0, - duration: Utils.fixedInt(500), + duration: fixedInt(500), ease: "Linear", paused: !this.parentVisible, }; @@ -98,14 +98,14 @@ export default class TimeOfDayWidget extends Phaser.GameObjects.Container { const bounce = { targets: [this.timeOfDayIconMgs[0], this.timeOfDayIconMgs[1]], angle: "+=90", - duration: Utils.fixedInt(2000), + duration: fixedInt(2000), ease: "Bounce.easeOut", paused: !this.parentVisible, }; const fade = { targets: [this.timeOfDayIconBgs[1], this.timeOfDayIconMgs[1], this.timeOfDayIconFgs[1]], alpha: 0, - duration: Utils.fixedInt(800), + duration: fixedInt(800), ease: "Linear", paused: !this.parentVisible, }; diff --git a/src/ui/title-ui-handler.ts b/src/ui/title-ui-handler.ts index 2f797bb4bfb..405e3cc4a27 100644 --- a/src/ui/title-ui-handler.ts +++ b/src/ui/title-ui-handler.ts @@ -1,6 +1,6 @@ import OptionSelectUiHandler from "./settings/option-select-ui-handler"; import { Mode } from "./ui"; -import * as Utils from "../utils"; +import { fixedInt, randInt, randItem } from "#app/utils"; import { TextStyle, addTextObject } from "./text"; import { getSplashMessages } from "../data/splash-messages"; import i18next from "i18next"; @@ -8,10 +8,14 @@ import { TimedEventDisplay } from "#app/timed-event-manager"; import { version } from "../../package.json"; import { pokerogueApi } from "#app/plugins/api/pokerogue-api"; import { globalScene } from "#app/global-scene"; +import type { Species } from "#enums/species"; +import { getPokemonSpecies } from "#app/data/pokemon-species"; +import { PlayerGender } from "#enums/player-gender"; +import { timedEventManager } from "#app/global-event-manager"; export default class TitleUiHandler extends OptionSelectUiHandler { /** If the stats can not be retrieved, use this fallback value */ - private static readonly BATTLES_WON_FALLBACK: number = -99999999; + private static readonly BATTLES_WON_FALLBACK: number = -1; private titleContainer: Phaser.GameObjects.Container; private playerCountLabel: Phaser.GameObjects.Text; @@ -40,8 +44,8 @@ export default class TitleUiHandler extends OptionSelectUiHandler { logo.setOrigin(0.5, 0); this.titleContainer.add(logo); - if (globalScene.eventManager.isEventActive()) { - this.eventDisplay = new TimedEventDisplay(0, 0, globalScene.eventManager.activeEvent()); + if (timedEventManager.isEventActive()) { + this.eventDisplay = new TimedEventDisplay(0, 0, timedEventManager.activeEvent()); this.eventDisplay.setup(); this.titleContainer.add(this.eventDisplay); } @@ -68,7 +72,7 @@ export default class TitleUiHandler extends OptionSelectUiHandler { globalScene.tweens.add({ targets: this.splashMessageText, - duration: Utils.fixedInt(350), + duration: fixedInt(350), scale: originalSplashMessageScale * 1.25, loop: -1, yoyo: true, @@ -98,6 +102,29 @@ export default class TitleUiHandler extends OptionSelectUiHandler { }); } + /** Used solely to display a random Pokémon name in a splash message. */ + randomPokemon(): void { + const rand = randInt(1025, 1); + const pokemon = getPokemonSpecies(rand as Species); + if ( + this.splashMessage === "splashMessages:underratedPokemon" || + this.splashMessage === "splashMessages:dontTalkAboutThePokemonIncident" || + this.splashMessage === "splashMessages:aWildPokemonAppeared" || + this.splashMessage === "splashMessages:aprilFools.removedPokemon" + ) { + this.splashMessageText.setText(i18next.t(this.splashMessage, { pokemonName: pokemon.name })); + } + } + + /** Used for a specific April Fools splash message. */ + genderSplash(): void { + if (this.splashMessage === "splashMessages:aprilFools.helloKyleAmber") { + globalScene.gameData.gender === PlayerGender.MALE + ? this.splashMessageText.setText(i18next.t(this.splashMessage, { name: i18next.t("trainerNames:player_m") })) + : this.splashMessageText.setText(i18next.t(this.splashMessage, { name: i18next.t("trainerNames:player_f") })); + } + } + show(args: any[]): boolean { const ret = super.show(args); @@ -105,7 +132,7 @@ export default class TitleUiHandler extends OptionSelectUiHandler { // Moving player count to top of the menu this.playerCountLabel.setY(globalScene.game.canvas.height / 6 - 13 - this.getWindowHeight()); - this.splashMessage = Utils.randItem(getSplashMessages()); + this.splashMessage = randItem(getSplashMessages()); this.splashMessageText.setText( i18next.t(this.splashMessage, { count: TitleUiHandler.BATTLES_WON_FALLBACK, @@ -116,11 +143,14 @@ export default class TitleUiHandler extends OptionSelectUiHandler { const ui = this.getUi(); - if (globalScene.eventManager.isEventActive()) { + if (timedEventManager.isEventActive()) { this.eventDisplay.setWidth(globalScene.scaledCanvas.width - this.optionSelectBg.width - this.optionSelectBg.x); this.eventDisplay.show(); } + this.randomPokemon(); + this.genderSplash(); + this.updateTitleStats(); this.titleStatsTimer = setInterval(() => { @@ -129,7 +159,7 @@ export default class TitleUiHandler extends OptionSelectUiHandler { globalScene.tweens.add({ targets: [this.titleContainer, ui.getMessageHandler().bg], - duration: Utils.fixedInt(325), + duration: fixedInt(325), alpha: (target: any) => (target === this.titleContainer ? 1 : 0), ease: "Sine.easeInOut", }); @@ -150,7 +180,7 @@ export default class TitleUiHandler extends OptionSelectUiHandler { globalScene.tweens.add({ targets: [this.titleContainer, ui.getMessageHandler().bg], - duration: Utils.fixedInt(325), + duration: fixedInt(325), alpha: (target: any) => (target === this.titleContainer ? 0 : 1), ease: "Sine.easeInOut", }); diff --git a/src/ui/ui.ts b/src/ui/ui.ts index 026e42ccf46..c7981cd5fba 100644 --- a/src/ui/ui.ts +++ b/src/ui/ui.ts @@ -28,7 +28,7 @@ import { addWindow } from "./ui-theme"; import LoginFormUiHandler from "./login-form-ui-handler"; import RegistrationFormUiHandler from "./registration-form-ui-handler"; import LoadingModalUiHandler from "./loading-modal-ui-handler"; -import * as Utils from "../utils"; +import { executeIf } from "#app/utils"; import GameStatsUiHandler from "./game-stats-ui-handler"; import AwaitableUiHandler from "./awaitable-ui-handler"; import SaveSlotSelectUiHandler from "./save-slot-select-ui-handler"; @@ -329,7 +329,7 @@ export default class UI extends Phaser.GameObjects.Container { promptDelay?: number | null, ): void { const pokename: string[] = []; - const repname = [ "#POKEMON1", "#POKEMON2" ]; + const repname = ["#POKEMON1", "#POKEMON2"]; for (let p = 0; p < globalScene.getPlayerField().length; p++) { pokename.push(globalScene.getPlayerField()[p].getNameToRender()); text = text.split(pokename[p]).join(repname[p]); @@ -674,7 +674,7 @@ export default class UI extends Phaser.GameObjects.Container { if (!this?.modeChain?.length) { return resolve(); } - this.revertMode().then(success => Utils.executeIf(success, this.revertModes).then(() => resolve())); + this.revertMode().then(success => executeIf(success, this.revertModes).then(() => resolve())); }); } diff --git a/src/ui/unavailable-modal-ui-handler.ts b/src/ui/unavailable-modal-ui-handler.ts index 3007f7247f1..01ed850f6d0 100644 --- a/src/ui/unavailable-modal-ui-handler.ts +++ b/src/ui/unavailable-modal-ui-handler.ts @@ -3,7 +3,7 @@ import { ModalUiHandler } from "./modal-ui-handler"; import { addTextObject, TextStyle } from "./text"; import type { Mode } from "./ui"; import { updateUserInfo } from "#app/account"; -import * as Utils from "#app/utils"; +import { removeCookie, sessionIdKey } from "#app/utils"; import i18next from "i18next"; import { globalScene } from "#app/global-scene"; @@ -65,7 +65,7 @@ export default class UnavailableModalUiHandler extends ModalUiHandler { globalScene.playSound("se/pb_bounce_1"); this.reconnectCallback(); } else if (response[1] === 401) { - Utils.removeCookie(Utils.sessionIdKey); + removeCookie(sessionIdKey); globalScene.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 7d3dea0247e..2f05e2724ff 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -456,6 +456,7 @@ export function hasAllLocalizedSprites(lang?: string): boolean { switch (lang) { case "es-ES": + case "es-MX": case "fr": case "de": case "it": @@ -464,6 +465,7 @@ export function hasAllLocalizedSprites(lang?: string): boolean { case "pt-BR": case "ko": case "ja": + case "ca-ES": return true; default: return false; @@ -611,3 +613,25 @@ export function animationFileName(move: Moves): string { export function camelCaseToKebabCase(str: string): string { return str.replace(/[A-Z]+(?![a-z])|[A-Z]/g, (s, o) => (o ? "-" : "") + s.toLowerCase()); } + +/** + * Merges the two objects, such that for each property in `b` that matches a property in `a`, + * the value in `a` is replaced by the value in `b`. This is done recursively if the property is a non-array object + * + * If the property does not exist in `a` or its `typeof` evaluates differently, the property is skipped. + * If the value of the property is an array, the array is replaced. If it is any other object, the object is merged recursively. + */ +// biome-ignore lint/complexity/noBannedTypes: This function is designed to merge json objects +export function deepMergeObjects(a: Object, b: Object) { + for (const key in b) { + // !(key in a) is redundant here, yet makes it clear that we're explicitly interested in properties that exist in `a` + if (!(key in a) || typeof a[key] !== typeof b[key]) { + continue; + } + if (typeof b[key] === "object" && !Array.isArray(b[key])) { + deepMergeObjects(a[key], b[key]); + } else { + a[key] = b[key]; + } + } +} diff --git a/test/abilities/dancer.test.ts b/test/abilities/dancer.test.ts index 56c357b2212..c296329473d 100644 --- a/test/abilities/dancer.test.ts +++ b/test/abilities/dancer.test.ts @@ -39,20 +39,24 @@ describe("Abilities - Dancer", () => { game.move.select(Moves.SPLASH); game.move.select(Moves.SWORDS_DANCE, 1); await game.setTurnOrder([BattlerIndex.PLAYER_2, BattlerIndex.ENEMY, BattlerIndex.PLAYER, BattlerIndex.ENEMY_2]); - await game.phaseInterceptor.to("MovePhase"); - // immediately copies ally move - await game.phaseInterceptor.to("MovePhase", false); + await game.phaseInterceptor.to("MovePhase"); // feebas uses swords dance + await game.phaseInterceptor.to("MovePhase", false); // oricorio copies swords dance + let currentPhase = game.scene.getCurrentPhase() as MovePhase; expect(currentPhase.pokemon).toBe(oricorio); expect(currentPhase.move.moveId).toBe(Moves.SWORDS_DANCE); - await game.phaseInterceptor.to("MoveEndPhase"); - await game.phaseInterceptor.to("MovePhase"); - // immediately copies enemy move - await game.phaseInterceptor.to("MovePhase", false); + + await game.phaseInterceptor.to("MoveEndPhase"); // end oricorio's move + await game.phaseInterceptor.to("MovePhase"); // magikarp 1 copies swords dance + await game.phaseInterceptor.to("MovePhase"); // magikarp 2 copies swords dance + await game.phaseInterceptor.to("MovePhase"); // magikarp (left) uses victory dance + await game.phaseInterceptor.to("MovePhase", false); // oricorio copies magikarp's victory dance + currentPhase = game.scene.getCurrentPhase() as MovePhase; expect(currentPhase.pokemon).toBe(oricorio); expect(currentPhase.move.moveId).toBe(Moves.VICTORY_DANCE); - await game.phaseInterceptor.to("BerryPhase"); + + await game.phaseInterceptor.to("BerryPhase"); // finish the turn // doesn't use PP if copied move is also in moveset expect(oricorio.moveset[0]?.ppUsed).toBe(0); diff --git a/test/abilities/desolate-land.test.ts b/test/abilities/desolate-land.test.ts index 405aab873aa..bb0b152418d 100644 --- a/test/abilities/desolate-land.test.ts +++ b/test/abilities/desolate-land.test.ts @@ -135,10 +135,8 @@ describe("Abilities - Desolate Land", () => { }); it("should lift after fleeing from a wild pokemon", async () => { - game.override - .enemyAbility(Abilities.DESOLATE_LAND) - .ability(Abilities.BALL_FETCH); - await game.classicMode.startBattle([ Species.MAGIKARP ]); + game.override.enemyAbility(Abilities.DESOLATE_LAND).ability(Abilities.BALL_FETCH); + await game.classicMode.startBattle([Species.MAGIKARP]); expect(game.scene.arena.weather?.weatherType).toBe(WeatherType.HARSH_SUN); vi.spyOn(game.scene.getPlayerPokemon()!, "randSeedInt").mockReturnValue(0); diff --git a/test/abilities/flower_gift.test.ts b/test/abilities/flower_gift.test.ts index fff509a1f00..5da796539e5 100644 --- a/test/abilities/flower_gift.test.ts +++ b/test/abilities/flower_gift.test.ts @@ -1,12 +1,14 @@ import { BattlerIndex } from "#app/battle"; +import { allAbilities } from "#app/data/ability"; import { Abilities } from "#app/enums/abilities"; import { Stat } from "#app/enums/stat"; import { WeatherType } from "#app/enums/weather-type"; +import { TurnEndPhase } from "#app/phases/turn-end-phase"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; -import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; +import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; describe("Abilities - Flower Gift", () => { let phaserGame: Phaser.Game; @@ -28,6 +30,64 @@ describe("Abilities - Flower Gift", () => { expect(game.scene.getPlayerPokemon()?.formIndex).toBe(OVERCAST_FORM); }; + /** + * Tests damage dealt by a move used against a target before and after Flower Gift is activated. + * @param game The game manager instance + * @param move The move that should be used + * @param allyAttacker True if the ally is attacking the enemy, false if the enemy is attacking the ally + * @param ability The ability that the ally pokemon should have + * @param enemyAbility The ability that the enemy pokemon should have + * + * @returns Two numbers, the first being the damage done to the target without flower gift active, the second being the damage done with flower gift active + */ + const testDamageDealt = async ( + game: GameManager, + move: Moves, + allyAttacker: boolean, + allyAbility = Abilities.BALL_FETCH, + enemyAbility = Abilities.BALL_FETCH, + ): Promise<[number, number]> => { + game.override.battleType("double"); + game.override.moveset([Moves.SPLASH, Moves.SUNNY_DAY, move, Moves.HEAL_PULSE]); + game.override.enemyMoveset([Moves.SPLASH, Moves.HEAL_PULSE]); + const target_index = allyAttacker ? BattlerIndex.ENEMY : BattlerIndex.PLAYER_2; + const attacker_index = allyAttacker ? BattlerIndex.PLAYER_2 : BattlerIndex.ENEMY; + const ally_move = allyAttacker ? move : Moves.SPLASH; + const enemy_move = allyAttacker ? Moves.SPLASH : move; + const ally_target = allyAttacker ? BattlerIndex.ENEMY : null; + + await game.classicMode.startBattle([Species.CHERRIM, Species.MAGIKARP]); + const target = allyAttacker ? game.scene.getEnemyField()[0] : game.scene.getPlayerField()[1]; + const initialHp = target.getMaxHp(); + + // Override the ability for the target and attacker only + vi.spyOn(game.scene.getPlayerField()[1], "getAbility").mockReturnValue(allAbilities[allyAbility]); + vi.spyOn(game.scene.getEnemyField()[0], "getAbility").mockReturnValue(allAbilities[enemyAbility]); + + // turn 1 + game.move.select(Moves.SUNNY_DAY, 0); + game.move.select(ally_move, 1, ally_target); + await game.forceEnemyMove(enemy_move, BattlerIndex.PLAYER_2); + await game.forceEnemyMove(Moves.SPLASH); + // Ensure sunny day is used last. + await game.setTurnOrder([attacker_index, target_index, BattlerIndex.ENEMY_2, BattlerIndex.PLAYER]); + await game.phaseInterceptor.to(TurnEndPhase); + const damageWithoutGift = initialHp - target.hp; + + target.hp = initialHp; + + // turn 2. Make target use recover to reset hp calculation. + game.move.select(Moves.SPLASH, 0, target_index); + game.move.select(ally_move, 1, ally_target); + await game.forceEnemyMove(enemy_move, BattlerIndex.PLAYER_2); + await game.forceEnemyMove(Moves.SPLASH); + await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY_2, target_index, attacker_index]); + await game.phaseInterceptor.to(TurnEndPhase); + const damageWithGift = initialHp - target.hp; + + return [damageWithoutGift, damageWithGift]; + }; + beforeAll(() => { phaserGame = new Phaser.Game({ type: Phaser.HEADLESS, @@ -41,23 +101,24 @@ describe("Abilities - Flower Gift", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([Moves.SPLASH, Moves.RAIN_DANCE, Moves.SUNNY_DAY, Moves.SKILL_SWAP]) + .moveset([Moves.SPLASH, Moves.SUNSTEEL_STRIKE, Moves.SUNNY_DAY, Moves.MUD_SLAP]) .enemySpecies(Species.MAGIKARP) .enemyMoveset(Moves.SPLASH) - .enemyAbility(Abilities.BALL_FETCH); + .enemyAbility(Abilities.BALL_FETCH) + .enemyLevel(100) + .startingLevel(100); }); - // TODO: Uncomment expect statements when the ability is implemented - currently does not increase stats of allies it("increases the ATK and SPDEF stat stages of the Pokémon with this Ability and its allies by 1.5× during Harsh Sunlight", async () => { game.override.battleType("double"); await game.classicMode.startBattle([Species.CHERRIM, Species.MAGIKARP]); - const [cherrim] = game.scene.getPlayerField(); + const [cherrim, magikarp] = game.scene.getPlayerField(); const cherrimAtkStat = cherrim.getEffectiveStat(Stat.ATK); const cherrimSpDefStat = cherrim.getEffectiveStat(Stat.SPDEF); - // const magikarpAtkStat = magikarp.getEffectiveStat(Stat.ATK);; - // const magikarpSpDefStat = magikarp.getEffectiveStat(Stat.SPDEF); + const magikarpAtkStat = magikarp.getEffectiveStat(Stat.ATK); + const magikarpSpDefStat = magikarp.getEffectiveStat(Stat.SPDEF); game.move.select(Moves.SUNNY_DAY, 0); game.move.select(Moves.SPLASH, 1); @@ -68,8 +129,34 @@ describe("Abilities - Flower Gift", () => { expect(cherrim.formIndex).toBe(SUNSHINE_FORM); expect(cherrim.getEffectiveStat(Stat.ATK)).toBe(Math.floor(cherrimAtkStat * 1.5)); expect(cherrim.getEffectiveStat(Stat.SPDEF)).toBe(Math.floor(cherrimSpDefStat * 1.5)); - // expect(magikarp.getEffectiveStat(Stat.ATK)).toBe(Math.floor(magikarpAtkStat * 1.5)); - // expect(magikarp.getEffectiveStat(Stat.SPDEF)).toBe(Math.floor(magikarpSpDefStat * 1.5)); + expect(magikarp.getEffectiveStat(Stat.ATK)).toBe(Math.floor(magikarpAtkStat * 1.5)); + expect(magikarp.getEffectiveStat(Stat.SPDEF)).toBe(Math.floor(magikarpSpDefStat * 1.5)); + }); + + it("should not increase the damage of an ally using an ability ignoring move", async () => { + const [damageWithGift, damageWithoutGift] = await testDamageDealt(game, Moves.SUNSTEEL_STRIKE, true); + expect(damageWithGift).toBe(damageWithoutGift); + }); + + it("should not increase the damage of a mold breaker ally", async () => { + const [damageWithGift, damageWithoutGift] = await testDamageDealt(game, Moves.TACKLE, true, Abilities.MOLD_BREAKER); + expect(damageWithGift).toBe(damageWithoutGift); + }); + + it("should decrease the damage an ally takes from a special attack", async () => { + const [damageWithoutGift, damageWithGift] = await testDamageDealt(game, Moves.MUD_SLAP, false); + expect(damageWithGift).toBeLessThan(damageWithoutGift); + }); + + it("should not decrease the damage an ally takes from a mold breaker enemy using a special attack", async () => { + const [damageWithoutGift, damageWithGift] = await testDamageDealt( + game, + Moves.MUD_SLAP, + false, + Abilities.BALL_FETCH, + Abilities.MOLD_BREAKER, + ); + expect(damageWithGift).toBe(damageWithoutGift); }); it("changes the Pokemon's form during Harsh Sunlight", async () => { @@ -90,25 +177,6 @@ describe("Abilities - Flower Gift", () => { await testRevertFormAgainstAbility(game, Abilities.CLOUD_NINE); }); - it("reverts to Overcast Form when the Pokémon loses Flower Gift, changes form under Harsh Sunlight/Sunny when it regains it", async () => { - game.override.enemyMoveset([Moves.SKILL_SWAP]).weather(WeatherType.HARSH_SUN); - - await game.classicMode.startBattle([Species.CHERRIM]); - - const cherrim = game.scene.getPlayerPokemon()!; - - game.move.select(Moves.SKILL_SWAP); - - await game.phaseInterceptor.to("TurnStartPhase"); - expect(cherrim.formIndex).toBe(SUNSHINE_FORM); - - await game.phaseInterceptor.to("MoveEndPhase"); - expect(cherrim.formIndex).toBe(OVERCAST_FORM); - - await game.phaseInterceptor.to("MoveEndPhase"); - expect(cherrim.formIndex).toBe(SUNSHINE_FORM); - }); - it("reverts to Overcast Form when the Flower Gift is suppressed, changes form under Harsh Sunlight/Sunny when it regains it", async () => { game.override.enemyMoveset([Moves.GASTRO_ACID]).weather(WeatherType.HARSH_SUN); diff --git a/test/abilities/flower_veil.test.ts b/test/abilities/flower_veil.test.ts new file mode 100644 index 00000000000..c26a952acff --- /dev/null +++ b/test/abilities/flower_veil.test.ts @@ -0,0 +1,166 @@ +import { BattlerIndex } from "#app/battle"; +import { Abilities } from "#enums/abilities"; +import { Moves } from "#enums/moves"; +import { Species } from "#enums/species"; +import { Stat } from "#enums/stat"; +import { StatusEffect } from "#enums/status-effect"; +import GameManager from "#test/testUtils/gameManager"; +import Phaser from "phaser"; +import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; +import { allMoves } from "#app/data/moves/move"; +import { BattlerTagType } from "#enums/battler-tag-type"; +import { allAbilities } from "#app/data/ability"; + +describe("Abilities - Flower Veil", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + + beforeAll(() => { + phaserGame = new Phaser.Game({ + type: Phaser.HEADLESS, + }); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); + + beforeEach(() => { + game = new GameManager(phaserGame); + game.override + .moveset([Moves.SPLASH]) + .enemySpecies(Species.BULBASAUR) + .ability(Abilities.FLOWER_VEIL) + .battleType("single") + .disableCrits() + .enemySpecies(Species.MAGIKARP) + .enemyAbility(Abilities.BALL_FETCH) + .enemyMoveset(Moves.SPLASH); + }); + + /*********************************************** + * Tests for proper handling of status effects * + ***********************************************/ + it("should not prevent any source of self-inflicted status conditions", async () => { + game.override + .enemyMoveset([Moves.TACKLE, Moves.SPLASH]) + .moveset([Moves.REST, Moves.SPLASH]) + .startingHeldItems([{ name: "FLAME_ORB" }]); + await game.classicMode.startBattle([Species.BULBASAUR]); + const user = game.scene.getPlayerPokemon()!; + game.move.select(Moves.REST); + await game.forceEnemyMove(Moves.TACKLE); + await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); + await game.toNextTurn(); + expect(user.status?.effect).toBe(StatusEffect.SLEEP); + + // remove sleep status so we can get burn from the orb + user.resetStatus(); + game.move.select(Moves.SPLASH); + await game.forceEnemyMove(Moves.SPLASH); + await game.toNextTurn(); + expect(user.status?.effect).toBe(StatusEffect.BURN); + }); + + it("should prevent drowsiness from yawn for a grass user and its grass allies", async () => { + game.override.enemyMoveset([Moves.YAWN]).moveset([Moves.SPLASH]).battleType("double"); + await game.classicMode.startBattle([Species.BULBASAUR, Species.BULBASAUR]); + + // Clear the ability of the ally to isolate the test + const ally = game.scene.getPlayerField()[1]!; + vi.spyOn(ally, "getAbility").mockReturnValue(allAbilities[Abilities.BALL_FETCH]); + game.move.select(Moves.SPLASH); + game.move.select(Moves.SPLASH); + await game.forceEnemyMove(Moves.YAWN, BattlerIndex.PLAYER); + await game.forceEnemyMove(Moves.YAWN, BattlerIndex.PLAYER_2); + + await game.phaseInterceptor.to("BerryPhase"); + const user = game.scene.getPlayerPokemon()!; + expect(user.getTag(BattlerTagType.DROWSY)).toBeFalsy(); + expect(ally.getTag(BattlerTagType.DROWSY)).toBeFalsy(); + }); + + it("should prevent status conditions from moves like Thunder Wave for a grass user and its grass allies", async () => { + game.override.enemyMoveset([Moves.THUNDER_WAVE]).moveset([Moves.SPLASH]).battleType("double"); + vi.spyOn(allMoves[Moves.THUNDER_WAVE], "accuracy", "get").mockReturnValue(100); + await game.classicMode.startBattle([Species.BULBASAUR]); + + game.move.select(Moves.SPLASH); + await game.forceEnemyMove(Moves.THUNDER_WAVE); + await game.toNextTurn(); + expect(game.scene.getPlayerPokemon()!.status).toBeUndefined(); + vi.spyOn(allMoves[Moves.THUNDER_WAVE], "accuracy", "get").mockClear(); + }); + + it("should not prevent status conditions for a non-grass user and its non-grass allies", async () => { + game.override.enemyMoveset([Moves.THUNDER_WAVE]).moveset([Moves.SPLASH]).battleType("double"); + await game.classicMode.startBattle([Species.MAGIKARP, Species.MAGIKARP]); + const [user, ally] = game.scene.getPlayerField(); + vi.spyOn(allMoves[Moves.THUNDER_WAVE], "accuracy", "get").mockReturnValue(100); + // Clear the ally ability to isolate the test + vi.spyOn(ally, "getAbility").mockReturnValue(allAbilities[Abilities.BALL_FETCH]); + game.move.select(Moves.SPLASH); + game.move.select(Moves.SPLASH); + await game.forceEnemyMove(Moves.THUNDER_WAVE, BattlerIndex.PLAYER); + await game.forceEnemyMove(Moves.THUNDER_WAVE, BattlerIndex.PLAYER_2); + await game.phaseInterceptor.to("BerryPhase"); + expect(user.status?.effect).toBe(StatusEffect.PARALYSIS); + expect(ally.status?.effect).toBe(StatusEffect.PARALYSIS); + }); + + /******************************************* + * Tests for proper handling of stat drops * + *******************************************/ + + it("should prevent the status drops from enemies for the a grass user and its grass allies", async () => { + game.override.enemyMoveset([Moves.GROWL]).moveset([Moves.SPLASH]).battleType("double"); + await game.classicMode.startBattle([Species.BULBASAUR, Species.BULBASAUR]); + const [user, ally] = game.scene.getPlayerField(); + // Clear the ally ability to isolate the test + vi.spyOn(ally, "getAbility").mockReturnValue(allAbilities[Abilities.BALL_FETCH]); + game.move.select(Moves.SPLASH); + game.move.select(Moves.SPLASH); + await game.phaseInterceptor.to("BerryPhase"); + expect(user.getStatStage(Stat.ATK)).toBe(0); + expect(ally.getStatStage(Stat.ATK)).toBe(0); + }); + + it("should not prevent status drops for a non-grass user and its non-grass allies", async () => { + game.override.enemyMoveset([Moves.GROWL]).moveset([Moves.SPLASH]).battleType("double"); + await game.classicMode.startBattle([Species.MAGIKARP, Species.MAGIKARP]); + const [user, ally] = game.scene.getPlayerField(); + // Clear the ally ability to isolate the test + vi.spyOn(ally, "getAbility").mockReturnValue(allAbilities[Abilities.BALL_FETCH]); + game.move.select(Moves.SPLASH); + game.move.select(Moves.SPLASH); + await game.phaseInterceptor.to("BerryPhase"); + expect(user.getStatStage(Stat.ATK)).toBe(-2); + expect(ally.getStatStage(Stat.ATK)).toBe(-2); + }); + + it("should not prevent self-inflicted stat drops from moves like Close Combat for a user or its allies", async () => { + game.override.moveset([Moves.CLOSE_COMBAT]).battleType("double"); + await game.classicMode.startBattle([Species.BULBASAUR, Species.BULBASAUR]); + const [user, ally] = game.scene.getPlayerField(); + // Clear the ally ability to isolate the test + vi.spyOn(ally, "getAbility").mockReturnValue(allAbilities[Abilities.BALL_FETCH]); + + game.move.select(Moves.CLOSE_COMBAT, 0, BattlerIndex.ENEMY); + game.move.select(Moves.CLOSE_COMBAT, 1, BattlerIndex.ENEMY_2); + await game.phaseInterceptor.to("BerryPhase"); + expect(user.getStatStage(Stat.DEF)).toBe(-1); + expect(user.getStatStage(Stat.SPDEF)).toBe(-1); + expect(ally.getStatStage(Stat.DEF)).toBe(-1); + expect(ally.getStatStage(Stat.SPDEF)).toBe(-1); + }); + + it("should prevent the drops while retaining the boosts from spicy extract", async () => { + game.override.enemyMoveset([Moves.SPICY_EXTRACT]).moveset([Moves.SPLASH]); + await game.classicMode.startBattle([Species.BULBASAUR]); + const user = game.scene.getPlayerPokemon()!; + game.move.select(Moves.SPLASH); + await game.phaseInterceptor.to("BerryPhase"); + expect(user.getStatStage(Stat.ATK)).toBe(2); + expect(user.getStatStage(Stat.DEF)).toBe(0); + }); +}); diff --git a/test/abilities/forecast.test.ts b/test/abilities/forecast.test.ts index bdc32604bba..a25af32537d 100644 --- a/test/abilities/forecast.test.ts +++ b/test/abilities/forecast.test.ts @@ -181,7 +181,7 @@ describe("Abilities - Forecast", () => { expect(castform.formIndex).toBe(SNOWY_FORM); - game.scene.arena.trySetWeather(WeatherType.FOG, false); + game.scene.arena.trySetWeather(WeatherType.FOG); game.move.select(Moves.SPLASH); game.move.select(Moves.SPLASH, 1); await game.phaseInterceptor.to("TurnStartPhase"); @@ -210,37 +210,6 @@ describe("Abilities - Forecast", () => { expect(game.scene.getEnemyPokemon()?.formIndex).not.toBe(RAINY_FORM); }); - it("reverts to Normal Form when Castform loses Forecast, changes form to match the weather when it regains it", async () => { - game.override - .moveset([Moves.SKILL_SWAP, Moves.WORRY_SEED, Moves.SPLASH]) - .weather(WeatherType.RAIN) - .battleType("double"); - await game.startBattle([Species.CASTFORM, Species.FEEBAS]); - - const castform = game.scene.getPlayerField()[0]; - - expect(castform.formIndex).toBe(RAINY_FORM); - - game.move.select(Moves.SKILL_SWAP, 0, BattlerIndex.PLAYER_2); - game.move.select(Moves.SKILL_SWAP, 1, BattlerIndex.PLAYER); - await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.PLAYER_2, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2]); - - await game.phaseInterceptor.to("MoveEndPhase"); - expect(castform.formIndex).toBe(NORMAL_FORM); - - await game.phaseInterceptor.to("MoveEndPhase"); - expect(castform.formIndex).toBe(RAINY_FORM); - - await game.toNextTurn(); - - game.move.select(Moves.SPLASH); - game.move.select(Moves.WORRY_SEED, 1, BattlerIndex.PLAYER); - await game.setTurnOrder([BattlerIndex.PLAYER_2, BattlerIndex.PLAYER, BattlerIndex.ENEMY, BattlerIndex.ENEMY_2]); - await game.phaseInterceptor.to("MoveEndPhase"); - - expect(castform.formIndex).toBe(NORMAL_FORM); - }); - it("reverts to Normal Form when Forecast is suppressed, changes form to match the weather when it regains it", async () => { game.override.enemyMoveset([Moves.GASTRO_ACID]).weather(WeatherType.RAIN); await game.startBattle([Species.CASTFORM, Species.PIKACHU]); diff --git a/test/abilities/illusion.test.ts b/test/abilities/illusion.test.ts new file mode 100644 index 00000000000..aa77aa701b2 --- /dev/null +++ b/test/abilities/illusion.test.ts @@ -0,0 +1,144 @@ +import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; +import Phaser from "phaser"; +import GameManager from "#test/testUtils/gameManager"; +import { Species } from "#enums/species"; +import { TurnEndPhase } from "#app/phases/turn-end-phase"; +import { Moves } from "#enums/moves"; +import { Abilities } from "#enums/abilities"; +import { PokeballType } from "#app/enums/pokeball"; +import { Gender } from "#app/data/gender"; + +describe("Abilities - Illusion", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + + beforeAll(() => { + phaserGame = new Phaser.Game({ + type: Phaser.HEADLESS, + }); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); + + beforeEach(() => { + game = new GameManager(phaserGame); + game.override.battleType("single"); + game.override.enemySpecies(Species.ZORUA); + game.override.enemyAbility(Abilities.ILLUSION); + game.override.enemyMoveset(Moves.TACKLE); + game.override.enemyHeldItems([{ name: "WIDE_LENS", count: 3 }]); + + game.override.moveset([Moves.WORRY_SEED, Moves.SOAK, Moves.TACKLE]); + game.override.startingHeldItems([{ name: "WIDE_LENS", count: 3 }]); + }); + + it("creates illusion at the start", async () => { + await game.classicMode.startBattle([Species.ZOROARK, Species.AXEW]); + const zoroark = game.scene.getPlayerPokemon()!; + const zorua = game.scene.getEnemyPokemon()!; + + expect(!!zoroark.summonData?.illusion).equals(true); + expect(!!zorua.summonData?.illusion).equals(true); + }); + + it("break after receiving damaging move", async () => { + await game.classicMode.startBattle([Species.AXEW]); + game.move.select(Moves.TACKLE); + + await game.phaseInterceptor.to(TurnEndPhase); + + const zorua = game.scene.getEnemyPokemon()!; + + expect(!!zorua.summonData?.illusion).equals(false); + expect(zorua.name).equals("Zorua"); + }); + + it("break after getting ability changed", async () => { + await game.classicMode.startBattle([Species.AXEW]); + game.move.select(Moves.WORRY_SEED); + + await game.phaseInterceptor.to(TurnEndPhase); + + const zorua = game.scene.getEnemyPokemon()!; + + expect(!!zorua.summonData?.illusion).equals(false); + }); + + it("break if the ability is suppressed", async () => { + game.override.enemyAbility(Abilities.NEUTRALIZING_GAS); + await game.classicMode.startBattle([Species.KOFFING]); + + const zorua = game.scene.getEnemyPokemon()!; + + expect(!!zorua.summonData?.illusion).equals(false); + }); + + it("causes enemy AI to consider the illusion's type instead of the actual type when considering move effectiveness", async () => { + game.override.enemyMoveset([Moves.FLAMETHROWER, Moves.PSYCHIC, Moves.TACKLE]); + await game.classicMode.startBattle([Species.ZOROARK, Species.AXEW]); + + const enemy = game.scene.getEnemyPokemon()!; + const zoroark = game.scene.getPlayerPokemon()!; + + const flameThrower = enemy.getMoveset()[0]!.getMove(); + const psychic = enemy.getMoveset()[1]!.getMove(); + const flameThrowerEffectiveness = zoroark.getAttackTypeEffectiveness( + flameThrower.type, + enemy, + undefined, + undefined, + flameThrower, + true, + ); + const psychicEffectiveness = zoroark.getAttackTypeEffectiveness( + psychic.type, + enemy, + undefined, + undefined, + psychic, + true, + ); + expect(psychicEffectiveness).above(flameThrowerEffectiveness); + }); + + it("does not break from indirect damage", async () => { + game.override.enemySpecies(Species.GIGALITH); + game.override.enemyAbility(Abilities.SAND_STREAM); + game.override.enemyMoveset(Moves.WILL_O_WISP); + game.override.moveset([Moves.FLARE_BLITZ]); + + await game.classicMode.startBattle([Species.ZOROARK, Species.AZUMARILL]); + + game.move.select(Moves.FLARE_BLITZ); + + await game.phaseInterceptor.to(TurnEndPhase); + + const zoroark = game.scene.getPlayerPokemon()!; + + expect(!!zoroark.summonData?.illusion).equals(true); + }); + + it("copies the the name, nickname, gender, shininess, and pokeball from the illusion source", async () => { + game.override.enemyMoveset(Moves.SPLASH); + await game.classicMode.startBattle([Species.ABRA, Species.ZOROARK, Species.AXEW]); + const axew = game.scene.getPlayerParty().at(2)!; + axew.shiny = true; + axew.nickname = btoa(unescape(encodeURIComponent("axew nickname"))); + axew.gender = Gender.FEMALE; + axew.pokeball = PokeballType.GREAT_BALL; + + game.doSwitchPokemon(1); + + await game.phaseInterceptor.to(TurnEndPhase); + + const zoroark = game.scene.getPlayerPokemon()!; + + expect(zoroark.name).equals("Axew"); + expect(zoroark.getNameToRender()).equals("axew nickname"); + expect(zoroark.getGender(false, true)).equals(Gender.FEMALE); + expect(zoroark.isShiny(true)).equals(true); + expect(zoroark.getPokeball(true)).equals(PokeballType.GREAT_BALL); + }); +}); diff --git a/test/abilities/immunity.test.ts b/test/abilities/immunity.test.ts new file mode 100644 index 00000000000..51e9598720b --- /dev/null +++ b/test/abilities/immunity.test.ts @@ -0,0 +1,51 @@ +import { Abilities } from "#enums/abilities"; +import { Moves } from "#enums/moves"; +import { Species } from "#enums/species"; +import { StatusEffect } from "#enums/status-effect"; +import GameManager from "#test/testUtils/gameManager"; +import Phaser from "phaser"; +import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; + +describe("Abilities - Immunity", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + + beforeAll(() => { + phaserGame = new Phaser.Game({ + type: Phaser.HEADLESS, + }); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); + + beforeEach(() => { + game = new GameManager(phaserGame); + game.override + .moveset([ Moves.SPLASH ]) + .ability(Abilities.BALL_FETCH) + .battleType("single") + .disableCrits() + .enemySpecies(Species.MAGIKARP) + .enemyAbility(Abilities.BALL_FETCH) + .enemyMoveset(Moves.SPLASH); + }); + + it("should remove poison when gained", async () => { + game.override.ability(Abilities.IMMUNITY) + .enemyAbility(Abilities.BALL_FETCH) + .moveset(Moves.SKILL_SWAP) + .enemyMoveset(Moves.SPLASH), + + await game.classicMode.startBattle([ Species.FEEBAS ]); + const enemy = game.scene.getEnemyPokemon(); + enemy?.trySetStatus(StatusEffect.POISON); + expect(enemy?.status?.effect).toBe(StatusEffect.POISON); + + game.move.select(Moves.SKILL_SWAP); + await game.phaseInterceptor.to("BerryPhase"); + + expect(enemy?.status).toBeNull(); + }); +}); diff --git a/test/abilities/insomnia.test.ts b/test/abilities/insomnia.test.ts new file mode 100644 index 00000000000..91fdc3fc668 --- /dev/null +++ b/test/abilities/insomnia.test.ts @@ -0,0 +1,51 @@ +import { Abilities } from "#enums/abilities"; +import { Moves } from "#enums/moves"; +import { Species } from "#enums/species"; +import { StatusEffect } from "#enums/status-effect"; +import GameManager from "#test/testUtils/gameManager"; +import Phaser from "phaser"; +import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; + +describe("Abilities - Insomnia", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + + beforeAll(() => { + phaserGame = new Phaser.Game({ + type: Phaser.HEADLESS, + }); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); + + beforeEach(() => { + game = new GameManager(phaserGame); + game.override + .moveset([ Moves.SPLASH ]) + .ability(Abilities.BALL_FETCH) + .battleType("single") + .disableCrits() + .enemySpecies(Species.MAGIKARP) + .enemyAbility(Abilities.BALL_FETCH) + .enemyMoveset(Moves.SPLASH); + }); + + it("should remove sleep when gained", async () => { + game.override.ability(Abilities.INSOMNIA) + .enemyAbility(Abilities.BALL_FETCH) + .moveset(Moves.SKILL_SWAP) + .enemyMoveset(Moves.SPLASH), + + await game.classicMode.startBattle([ Species.FEEBAS ]); + const enemy = game.scene.getEnemyPokemon(); + enemy?.trySetStatus(StatusEffect.SLEEP); + expect(enemy?.status?.effect).toBe(StatusEffect.SLEEP); + + game.move.select(Moves.SKILL_SWAP); + await game.phaseInterceptor.to("BerryPhase"); + + expect(enemy?.status).toBeNull(); + }); +}); diff --git a/test/abilities/lightningrod.test.ts b/test/abilities/lightningrod.test.ts index 1ca6c6b1e89..986899353ff 100644 --- a/test/abilities/lightningrod.test.ts +++ b/test/abilities/lightningrod.test.ts @@ -24,7 +24,7 @@ describe("Abilities - Lightningrod", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([ Moves.SPLASH, Moves.SHOCK_WAVE ]) + .moveset([Moves.SPLASH, Moves.SHOCK_WAVE]) .ability(Abilities.BALL_FETCH) .battleType("double") .disableCrits() @@ -34,7 +34,7 @@ describe("Abilities - Lightningrod", () => { }); it("should redirect electric type moves", async () => { - await game.classicMode.startBattle([ Species.FEEBAS, Species.MAGIKARP ]); + await game.classicMode.startBattle([Species.FEEBAS, Species.MAGIKARP]); const enemy1 = game.scene.getEnemyField()[0]; const enemy2 = game.scene.getEnemyField()[1]; @@ -49,8 +49,8 @@ describe("Abilities - Lightningrod", () => { }); it("should not redirect non-electric type moves", async () => { - game.override.moveset([ Moves.SPLASH, Moves.AERIAL_ACE ]); - await game.classicMode.startBattle([ Species.FEEBAS, Species.MAGIKARP ]); + game.override.moveset([Moves.SPLASH, Moves.AERIAL_ACE]); + await game.classicMode.startBattle([Species.FEEBAS, Species.MAGIKARP]); const enemy1 = game.scene.getEnemyField()[0]; const enemy2 = game.scene.getEnemyField()[1]; @@ -65,7 +65,7 @@ describe("Abilities - Lightningrod", () => { }); it("should boost the user's spatk without damaging", async () => { - await game.classicMode.startBattle([ Species.FEEBAS, Species.MAGIKARP ]); + await game.classicMode.startBattle([Species.FEEBAS, Species.MAGIKARP]); const enemy2 = game.scene.getEnemyField()[1]; @@ -81,7 +81,7 @@ describe("Abilities - Lightningrod", () => { it("should not redirect moves changed from electric type via ability", async () => { game.override.ability(Abilities.NORMALIZE); - await game.classicMode.startBattle([ Species.FEEBAS, Species.MAGIKARP ]); + await game.classicMode.startBattle([Species.FEEBAS, Species.MAGIKARP]); const enemy1 = game.scene.getEnemyField()[0]; const enemy2 = game.scene.getEnemyField()[1]; @@ -96,9 +96,8 @@ describe("Abilities - Lightningrod", () => { }); it("should redirect moves changed to electric type via ability", async () => { - game.override.ability(Abilities.GALVANIZE) - .moveset(Moves.TACKLE); - await game.classicMode.startBattle([ Species.FEEBAS, Species.MAGIKARP ]); + game.override.ability(Abilities.GALVANIZE).moveset(Moves.TACKLE); + await game.classicMode.startBattle([Species.FEEBAS, Species.MAGIKARP]); const enemy1 = game.scene.getEnemyField()[0]; const enemy2 = game.scene.getEnemyField()[1]; diff --git a/test/abilities/limber.test.ts b/test/abilities/limber.test.ts new file mode 100644 index 00000000000..2b167cc155f --- /dev/null +++ b/test/abilities/limber.test.ts @@ -0,0 +1,51 @@ +import { Abilities } from "#enums/abilities"; +import { Moves } from "#enums/moves"; +import { Species } from "#enums/species"; +import { StatusEffect } from "#enums/status-effect"; +import GameManager from "#test/testUtils/gameManager"; +import Phaser from "phaser"; +import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; + +describe("Abilities - Limber", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + + beforeAll(() => { + phaserGame = new Phaser.Game({ + type: Phaser.HEADLESS, + }); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); + + beforeEach(() => { + game = new GameManager(phaserGame); + game.override + .moveset([ Moves.SPLASH ]) + .ability(Abilities.BALL_FETCH) + .battleType("single") + .disableCrits() + .enemySpecies(Species.MAGIKARP) + .enemyAbility(Abilities.BALL_FETCH) + .enemyMoveset(Moves.SPLASH); + }); + + it("should remove paralysis when gained", async () => { + game.override.ability(Abilities.LIMBER) + .enemyAbility(Abilities.BALL_FETCH) + .moveset(Moves.SKILL_SWAP) + .enemyMoveset(Moves.SPLASH), + + await game.classicMode.startBattle([ Species.FEEBAS ]); + const enemy = game.scene.getEnemyPokemon(); + enemy?.trySetStatus(StatusEffect.PARALYSIS); + expect(enemy?.status?.effect).toBe(StatusEffect.PARALYSIS); + + game.move.select(Moves.SKILL_SWAP); + await game.phaseInterceptor.to("BerryPhase"); + + expect(enemy?.status).toBeNull(); + }); +}); diff --git a/test/abilities/magma_armor.test.ts b/test/abilities/magma_armor.test.ts new file mode 100644 index 00000000000..b1d62f948d2 --- /dev/null +++ b/test/abilities/magma_armor.test.ts @@ -0,0 +1,51 @@ +import { Abilities } from "#enums/abilities"; +import { Moves } from "#enums/moves"; +import { Species } from "#enums/species"; +import { StatusEffect } from "#enums/status-effect"; +import GameManager from "#test/testUtils/gameManager"; +import Phaser from "phaser"; +import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; + +describe("Abilities - Magma Armor", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + + beforeAll(() => { + phaserGame = new Phaser.Game({ + type: Phaser.HEADLESS, + }); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); + + beforeEach(() => { + game = new GameManager(phaserGame); + game.override + .moveset([ Moves.SPLASH ]) + .ability(Abilities.BALL_FETCH) + .battleType("single") + .disableCrits() + .enemySpecies(Species.MAGIKARP) + .enemyAbility(Abilities.BALL_FETCH) + .enemyMoveset(Moves.SPLASH); + }); + + it("should remove freeze when gained", async () => { + game.override.ability(Abilities.MAGMA_ARMOR) + .enemyAbility(Abilities.BALL_FETCH) + .moveset(Moves.SKILL_SWAP) + .enemyMoveset(Moves.SPLASH), + + await game.classicMode.startBattle([ Species.FEEBAS ]); + const enemy = game.scene.getEnemyPokemon(); + enemy?.trySetStatus(StatusEffect.FREEZE); + expect(enemy?.status?.effect).toBe(StatusEffect.FREEZE); + + game.move.select(Moves.SKILL_SWAP); + await game.phaseInterceptor.to("BerryPhase"); + + expect(enemy?.status).toBeNull(); + }); +}); diff --git a/test/abilities/mold_breaker.test.ts b/test/abilities/mold_breaker.test.ts new file mode 100644 index 00000000000..8f050a68d76 --- /dev/null +++ b/test/abilities/mold_breaker.test.ts @@ -0,0 +1,51 @@ +import { BattlerIndex } from "#app/battle"; +import { globalScene } from "#app/global-scene"; +import { Abilities } from "#enums/abilities"; +import { Moves } from "#enums/moves"; +import { Species } from "#enums/species"; +import GameManager from "#test/testUtils/gameManager"; +import Phaser from "phaser"; +import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; + +describe("Abilities - Mold Breaker", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + + beforeAll(() => { + phaserGame = new Phaser.Game({ + type: Phaser.HEADLESS, + }); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); + + beforeEach(() => { + game = new GameManager(phaserGame); + game.override + .moveset([ Moves.SPLASH ]) + .ability(Abilities.MOLD_BREAKER) + .battleType("single") + .disableCrits() + .enemySpecies(Species.MAGIKARP) + .enemyAbility(Abilities.BALL_FETCH) + .enemyMoveset(Moves.SPLASH); + }); + + it("should turn off the ignore abilities arena variable after the user's move", async () => { + game.override.enemyMoveset(Moves.SPLASH) + .ability(Abilities.MOLD_BREAKER) + .moveset([ Moves.ERUPTION ]) + .startingLevel(100) + .enemyLevel(2); + await game.classicMode.startBattle([ Species.MAGIKARP ]); + const enemy = game.scene.getEnemyPokemon()!; + + expect(enemy.isFainted()).toBe(false); + game.move.select(Moves.SPLASH); + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.ENEMY ]); + await game.phaseInterceptor.to("MoveEndPhase", true); + expect(globalScene.arena.ignoreAbilities).toBe(false); + }); +}); diff --git a/test/abilities/neutralizing_gas.test.ts b/test/abilities/neutralizing_gas.test.ts index 0003ee56598..a10a246d855 100644 --- a/test/abilities/neutralizing_gas.test.ts +++ b/test/abilities/neutralizing_gas.test.ts @@ -160,10 +160,8 @@ describe("Abilities - Neutralizing Gas", () => { }); it("should deactivate after fleeing from a wild pokemon", async () => { - game.override - .enemyAbility(Abilities.NEUTRALIZING_GAS) - .ability(Abilities.BALL_FETCH); - await game.classicMode.startBattle([ Species.MAGIKARP ]); + game.override.enemyAbility(Abilities.NEUTRALIZING_GAS).ability(Abilities.BALL_FETCH); + await game.classicMode.startBattle([Species.MAGIKARP]); expect(game.scene.arena.getTag(ArenaTagType.NEUTRALIZING_GAS)).toBeDefined(); vi.spyOn(game.scene.getPlayerPokemon()!, "randSeedInt").mockReturnValue(0); @@ -176,11 +174,8 @@ describe("Abilities - Neutralizing Gas", () => { }); it("should not activate abilities of pokemon no longer on the field", async () => { - game.override - .battleType("single") - .ability(Abilities.NEUTRALIZING_GAS) - .enemyAbility(Abilities.DELTA_STREAM); - await game.classicMode.startBattle([ Species.MAGIKARP ]); + game.override.battleType("single").ability(Abilities.NEUTRALIZING_GAS).enemyAbility(Abilities.DELTA_STREAM); + await game.classicMode.startBattle([Species.MAGIKARP]); const enemy = game.scene.getEnemyPokemon()!; const weatherChangeAttr = enemy.getAbilityAttrs(PostSummonWeatherChangeAbAttr, false)[0]; diff --git a/test/abilities/oblivious.test.ts b/test/abilities/oblivious.test.ts new file mode 100644 index 00000000000..d5089ef6a72 --- /dev/null +++ b/test/abilities/oblivious.test.ts @@ -0,0 +1,69 @@ +import { Abilities } from "#enums/abilities"; +import { BattlerTagType } from "#enums/battler-tag-type"; +import { Moves } from "#enums/moves"; +import { Species } from "#enums/species"; +import GameManager from "#test/testUtils/gameManager"; +import Phaser from "phaser"; +import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; + +describe("Abilities - Oblivious", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + + beforeAll(() => { + phaserGame = new Phaser.Game({ + type: Phaser.HEADLESS, + }); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); + + beforeEach(() => { + game = new GameManager(phaserGame); + game.override + .moveset([ Moves.SPLASH ]) + .ability(Abilities.BALL_FETCH) + .battleType("single") + .disableCrits() + .enemySpecies(Species.MAGIKARP) + .enemyAbility(Abilities.BALL_FETCH) + .enemyMoveset(Moves.SPLASH); + }); + + it("should remove taunt when gained", async () => { + game.override.ability(Abilities.OBLIVIOUS) + .enemyAbility(Abilities.BALL_FETCH) + .moveset(Moves.SKILL_SWAP) + .enemyMoveset(Moves.SPLASH), + + await game.classicMode.startBattle([ Species.FEEBAS ]); + const enemy = game.scene.getEnemyPokemon(); + enemy?.addTag(BattlerTagType.TAUNT); + expect(enemy?.getTag(BattlerTagType.TAUNT)).toBeTruthy(); + + game.move.select(Moves.SKILL_SWAP); + await game.phaseInterceptor.to("BerryPhase"); + + expect(enemy?.getTag(BattlerTagType.TAUNT)).toBeFalsy(); + }); + + it("should remove infatuation when gained", async () => { + game.override.ability(Abilities.OBLIVIOUS) + .enemyAbility(Abilities.BALL_FETCH) + .moveset(Moves.SKILL_SWAP) + .enemyMoveset(Moves.SPLASH), + + await game.classicMode.startBattle([ Species.FEEBAS ]); + const enemy = game.scene.getEnemyPokemon(); + vi.spyOn(enemy!, "isOppositeGender").mockReturnValue(true); + enemy?.addTag(BattlerTagType.INFATUATED, 5, Moves.JUDGMENT, game.scene.getPlayerPokemon()?.id); // sourceID needs to be defined + expect(enemy?.getTag(BattlerTagType.INFATUATED)).toBeTruthy(); + + game.move.select(Moves.SKILL_SWAP); + await game.phaseInterceptor.to("BerryPhase"); + + expect(enemy?.getTag(BattlerTagType.INFATUATED)).toBeFalsy(); + }); +}); diff --git a/test/abilities/own_tempo.test.ts b/test/abilities/own_tempo.test.ts new file mode 100644 index 00000000000..936b4311b20 --- /dev/null +++ b/test/abilities/own_tempo.test.ts @@ -0,0 +1,51 @@ +import { Abilities } from "#enums/abilities"; +import { BattlerTagType } from "#enums/battler-tag-type"; +import { Moves } from "#enums/moves"; +import { Species } from "#enums/species"; +import GameManager from "#test/testUtils/gameManager"; +import Phaser from "phaser"; +import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; + +describe("Abilities - Own Tempo", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + + beforeAll(() => { + phaserGame = new Phaser.Game({ + type: Phaser.HEADLESS, + }); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); + + beforeEach(() => { + game = new GameManager(phaserGame); + game.override + .moveset([ Moves.SPLASH ]) + .ability(Abilities.BALL_FETCH) + .battleType("single") + .disableCrits() + .enemySpecies(Species.MAGIKARP) + .enemyAbility(Abilities.BALL_FETCH) + .enemyMoveset(Moves.SPLASH); + }); + + it("should remove confusion when gained", async () => { + game.override.ability(Abilities.OWN_TEMPO) + .enemyAbility(Abilities.BALL_FETCH) + .moveset(Moves.SKILL_SWAP) + .enemyMoveset(Moves.SPLASH), + + await game.classicMode.startBattle([ Species.FEEBAS ]); + const enemy = game.scene.getEnemyPokemon(); + enemy?.addTag(BattlerTagType.CONFUSED); + expect(enemy?.getTag(BattlerTagType.CONFUSED)).toBeTruthy(); + + game.move.select(Moves.SKILL_SWAP); + await game.phaseInterceptor.to("BerryPhase"); + + expect(enemy?.getTag(BattlerTagType.CONFUSED)).toBeFalsy(); + }); +}); diff --git a/test/abilities/protosynthesis.test.ts b/test/abilities/protosynthesis.test.ts index d0ae46cd951..882474b7cef 100644 --- a/test/abilities/protosynthesis.test.ts +++ b/test/abilities/protosynthesis.test.ts @@ -46,16 +46,56 @@ describe("Abilities - Protosynthesis", () => { // Nature of starting mon is randomized. We need to fix it to a neutral nature for the automated test. mew.setNature(Nature.HARDY); const enemy = game.scene.getEnemyPokemon()!; - const def_before_boost = mew.getEffectiveStat(Stat.DEF, undefined, undefined, false, undefined, false, false, true); - const atk_before_boost = mew.getEffectiveStat(Stat.ATK, undefined, undefined, false, undefined, false, false, true); + const def_before_boost = mew.getEffectiveStat( + Stat.DEF, + undefined, + undefined, + false, + undefined, + undefined, + false, + false, + true, + ); + const atk_before_boost = mew.getEffectiveStat( + Stat.ATK, + undefined, + undefined, + false, + undefined, + undefined, + false, + false, + true, + ); const initialHp = enemy.hp; game.move.select(Moves.TACKLE); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.toNextTurn(); const unboosted_dmg = initialHp - enemy.hp; enemy.hp = initialHp; - const def_after_boost = mew.getEffectiveStat(Stat.DEF, undefined, undefined, false, undefined, false, false, true); - const atk_after_boost = mew.getEffectiveStat(Stat.ATK, undefined, undefined, false, undefined, false, false, true); + const def_after_boost = mew.getEffectiveStat( + Stat.DEF, + undefined, + undefined, + false, + undefined, + undefined, + false, + false, + true, + ); + const atk_after_boost = mew.getEffectiveStat( + Stat.ATK, + undefined, + undefined, + false, + undefined, + undefined, + false, + false, + true, + ); game.move.select(Moves.TACKLE); await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.toNextTurn(); diff --git a/test/abilities/steely_spirit.test.ts b/test/abilities/steely_spirit.test.ts index 9b4d32efcae..b180ff8919e 100644 --- a/test/abilities/steely_spirit.test.ts +++ b/test/abilities/steely_spirit.test.ts @@ -12,7 +12,8 @@ describe("Abilities - Steely Spirit", () => { let game: GameManager; const steelySpiritMultiplier = 1.5; const moveToCheck = Moves.IRON_HEAD; - const ironHeadPower = allMoves[moveToCheck].power; + + let ironHeadPower: number; beforeAll(() => { phaserGame = new Phaser.Game({ @@ -25,6 +26,7 @@ describe("Abilities - Steely Spirit", () => { }); beforeEach(() => { + ironHeadPower = allMoves[moveToCheck].power; game = new GameManager(phaserGame); game.override.battleType("double"); game.override.enemySpecies(Species.SHUCKLE); diff --git a/test/abilities/storm_drain.test.ts b/test/abilities/storm_drain.test.ts index e2a7b3e212e..58ff477fa43 100644 --- a/test/abilities/storm_drain.test.ts +++ b/test/abilities/storm_drain.test.ts @@ -24,7 +24,7 @@ describe("Abilities - Storm Drain", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([ Moves.SPLASH, Moves.WATER_GUN ]) + .moveset([Moves.SPLASH, Moves.WATER_GUN]) .ability(Abilities.BALL_FETCH) .battleType("double") .disableCrits() @@ -34,7 +34,7 @@ describe("Abilities - Storm Drain", () => { }); it("should redirect water type moves", async () => { - await game.classicMode.startBattle([ Species.FEEBAS, Species.MAGIKARP ]); + await game.classicMode.startBattle([Species.FEEBAS, Species.MAGIKARP]); const enemy1 = game.scene.getEnemyField()[0]; const enemy2 = game.scene.getEnemyField()[1]; @@ -49,8 +49,8 @@ describe("Abilities - Storm Drain", () => { }); it("should not redirect non-water type moves", async () => { - game.override.moveset([ Moves.SPLASH, Moves.AERIAL_ACE ]); - await game.classicMode.startBattle([ Species.FEEBAS, Species.MAGIKARP ]); + game.override.moveset([Moves.SPLASH, Moves.AERIAL_ACE]); + await game.classicMode.startBattle([Species.FEEBAS, Species.MAGIKARP]); const enemy1 = game.scene.getEnemyField()[0]; const enemy2 = game.scene.getEnemyField()[1]; @@ -65,7 +65,7 @@ describe("Abilities - Storm Drain", () => { }); it("should boost the user's spatk without damaging", async () => { - await game.classicMode.startBattle([ Species.FEEBAS, Species.MAGIKARP ]); + await game.classicMode.startBattle([Species.FEEBAS, Species.MAGIKARP]); const enemy2 = game.scene.getEnemyField()[1]; @@ -81,7 +81,7 @@ describe("Abilities - Storm Drain", () => { it("should not redirect moves changed from water type via ability", async () => { game.override.ability(Abilities.NORMALIZE); - await game.classicMode.startBattle([ Species.FEEBAS, Species.MAGIKARP ]); + await game.classicMode.startBattle([Species.FEEBAS, Species.MAGIKARP]); const enemy1 = game.scene.getEnemyField()[0]; const enemy2 = game.scene.getEnemyField()[1]; @@ -96,9 +96,8 @@ describe("Abilities - Storm Drain", () => { }); it("should redirect moves changed to water type via ability", async () => { - game.override.ability(Abilities.LIQUID_VOICE) - .moveset(Moves.PSYCHIC_NOISE); - await game.classicMode.startBattle([ Species.FEEBAS, Species.MAGIKARP ]); + game.override.ability(Abilities.LIQUID_VOICE).moveset(Moves.PSYCHIC_NOISE); + await game.classicMode.startBattle([Species.FEEBAS, Species.MAGIKARP]); const enemy1 = game.scene.getEnemyField()[0]; const enemy2 = game.scene.getEnemyField()[1]; diff --git a/test/abilities/super_luck.test.ts b/test/abilities/super_luck.test.ts new file mode 100644 index 00000000000..bc9524de801 --- /dev/null +++ b/test/abilities/super_luck.test.ts @@ -0,0 +1,43 @@ +import { Abilities } from "#enums/abilities"; +import { Moves } from "#enums/moves"; +import { Species } from "#enums/species"; +import GameManager from "#test/testUtils/gameManager"; +import Phaser from "phaser"; +import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; + +describe("Abilities - Super Luck", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + + beforeAll(() => { + phaserGame = new Phaser.Game({ + type: Phaser.HEADLESS, + }); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); + + beforeEach(() => { + game = new GameManager(phaserGame); + game.override + .moveset([Moves.TACKLE]) + .ability(Abilities.SUPER_LUCK) + .battleType("single") + .disableCrits() + .enemySpecies(Species.MAGIKARP) + .enemyAbility(Abilities.BALL_FETCH) + .enemyMoveset(Moves.SPLASH); + }); + + it("should increase the crit stage of a user by 1", async () => { + await game.classicMode.startBattle([Species.MAGIKARP]); + const enemy = game.scene.getEnemyPokemon()!; + const fn = vi.spyOn(enemy, "getCritStage"); + game.move.select(Moves.TACKLE); + await game.phaseInterceptor.to("BerryPhase"); + expect(fn).toHaveReturnedWith(1); + fn.mockRestore(); + }); +}); diff --git a/test/abilities/supreme_overlord.test.ts b/test/abilities/supreme_overlord.test.ts index b70acbd8d17..a71bf0a9354 100644 --- a/test/abilities/supreme_overlord.test.ts +++ b/test/abilities/supreme_overlord.test.ts @@ -1,4 +1,5 @@ import { Moves } from "#app/enums/moves"; +import type Move from "#app/data/moves/move"; import { Abilities } from "#enums/abilities"; import { Species } from "#enums/species"; import { BattlerIndex } from "#app/battle"; @@ -12,8 +13,8 @@ describe("Abilities - Supreme Overlord", () => { let phaserGame: Phaser.Game; let game: GameManager; - const move = allMoves[Moves.TACKLE]; - const basePower = move.power; + let move: Move; + let basePower: number; beforeAll(() => { phaserGame = new Phaser.Game({ @@ -26,6 +27,8 @@ describe("Abilities - Supreme Overlord", () => { }); beforeEach(() => { + move = allMoves[Moves.TACKLE]; + basePower = move.power; game = new GameManager(phaserGame); game.override .battleType("single") diff --git a/test/abilities/thermal_exchange.test.ts b/test/abilities/thermal_exchange.test.ts new file mode 100644 index 00000000000..124c1dba286 --- /dev/null +++ b/test/abilities/thermal_exchange.test.ts @@ -0,0 +1,51 @@ +import { Abilities } from "#enums/abilities"; +import { Moves } from "#enums/moves"; +import { Species } from "#enums/species"; +import { StatusEffect } from "#enums/status-effect"; +import GameManager from "#test/testUtils/gameManager"; +import Phaser from "phaser"; +import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; + +describe("Abilities - Thermal Exchange", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + + beforeAll(() => { + phaserGame = new Phaser.Game({ + type: Phaser.HEADLESS, + }); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); + + beforeEach(() => { + game = new GameManager(phaserGame); + game.override + .moveset([ Moves.SPLASH ]) + .ability(Abilities.BALL_FETCH) + .battleType("single") + .disableCrits() + .enemySpecies(Species.MAGIKARP) + .enemyAbility(Abilities.BALL_FETCH) + .enemyMoveset(Moves.SPLASH); + }); + + it("should remove burn when gained", async () => { + game.override.ability(Abilities.THERMAL_EXCHANGE) + .enemyAbility(Abilities.BALL_FETCH) + .moveset(Moves.SKILL_SWAP) + .enemyMoveset(Moves.SPLASH), + + await game.classicMode.startBattle([ Species.FEEBAS ]); + const enemy = game.scene.getEnemyPokemon(); + enemy?.trySetStatus(StatusEffect.BURN); + expect(enemy?.status?.effect).toBe(StatusEffect.BURN); + + game.move.select(Moves.SKILL_SWAP); + await game.phaseInterceptor.to("BerryPhase"); + + expect(enemy?.status).toBeNull(); + }); +}); diff --git a/test/abilities/unseen_fist.test.ts b/test/abilities/unseen_fist.test.ts index 73ae25ff3b0..459bb00628c 100644 --- a/test/abilities/unseen_fist.test.ts +++ b/test/abilities/unseen_fist.test.ts @@ -32,22 +32,22 @@ describe("Abilities - Unseen Fist", () => { game.override.enemyLevel(100); }); - it("should cause a contact move to ignore Protect", () => - testUnseenFistHitResult(game, Moves.QUICK_ATTACK, Moves.PROTECT, true)); + it("should cause a contact move to ignore Protect", async () => + await testUnseenFistHitResult(game, Moves.QUICK_ATTACK, Moves.PROTECT, true)); - it("should not cause a non-contact move to ignore Protect", () => - testUnseenFistHitResult(game, Moves.ABSORB, Moves.PROTECT, false)); + it("should not cause a non-contact move to ignore Protect", async () => + await testUnseenFistHitResult(game, Moves.ABSORB, Moves.PROTECT, false)); it("should not apply if the source has Long Reach", async () => { game.override.passiveAbility(Abilities.LONG_REACH); await testUnseenFistHitResult(game, Moves.QUICK_ATTACK, Moves.PROTECT, false); }); - it("should cause a contact move to ignore Wide Guard", () => - testUnseenFistHitResult(game, Moves.BREAKING_SWIPE, Moves.WIDE_GUARD, true)); + it("should cause a contact move to ignore Wide Guard", async () => + await testUnseenFistHitResult(game, Moves.BREAKING_SWIPE, Moves.WIDE_GUARD, true)); - it("should not cause a non-contact move to ignore Wide Guard", () => - testUnseenFistHitResult(game, Moves.BULLDOZE, Moves.WIDE_GUARD, false)); + it("should not cause a non-contact move to ignore Wide Guard", async () => + await testUnseenFistHitResult(game, Moves.BULLDOZE, Moves.WIDE_GUARD, false)); it("should cause a contact move to ignore Protect, but not Substitute", async () => { game.override.enemyLevel(1); diff --git a/test/abilities/victory_star.test.ts b/test/abilities/victory_star.test.ts new file mode 100644 index 00000000000..92db522871a --- /dev/null +++ b/test/abilities/victory_star.test.ts @@ -0,0 +1,60 @@ +import { BattlerIndex } from "#app/battle"; +import { TurnEndPhase } from "#app/phases/turn-end-phase"; +import { Abilities } from "#enums/abilities"; +import { Moves } from "#enums/moves"; +import { Species } from "#enums/species"; +import GameManager from "#test/testUtils/gameManager"; +import Phaser from "phaser"; +import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; + +describe("Abilities - Victory Star", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + + beforeAll(() => { + phaserGame = new Phaser.Game({ + type: Phaser.HEADLESS, + }); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); + + beforeEach(() => { + game = new GameManager(phaserGame); + game.override + .moveset([Moves.TACKLE, Moves.SPLASH]) + .battleType("double") + .disableCrits() + .enemySpecies(Species.MAGIKARP) + .enemyAbility(Abilities.BALL_FETCH) + .enemyMoveset(Moves.SPLASH); + }); + + it("should increase the accuracy of its user", async () => { + await game.classicMode.startBattle([Species.VICTINI, Species.MAGIKARP]); + + const user = game.scene.getPlayerField()[0]; + + vi.spyOn(user, "getAccuracyMultiplier"); + game.move.select(Moves.TACKLE, 0, BattlerIndex.ENEMY); + game.move.select(Moves.SPLASH, 1); + await game.phaseInterceptor.to(TurnEndPhase); + + expect(user.getAccuracyMultiplier).toHaveReturnedWith(1.1); + }); + + it("should increase the accuracy of its user's ally", async () => { + await game.classicMode.startBattle([Species.MAGIKARP, Species.VICTINI]); + + const ally = game.scene.getPlayerField()[0]; + vi.spyOn(ally, "getAccuracyMultiplier"); + + game.move.select(Moves.TACKLE, 0, BattlerIndex.ENEMY); + game.move.select(Moves.SPLASH, 1); + await game.phaseInterceptor.to(TurnEndPhase); + + expect(ally.getAccuracyMultiplier).toHaveReturnedWith(1.1); + }); +}); diff --git a/test/abilities/vital_spirit.test.ts b/test/abilities/vital_spirit.test.ts new file mode 100644 index 00000000000..3a53c3f520e --- /dev/null +++ b/test/abilities/vital_spirit.test.ts @@ -0,0 +1,51 @@ +import { Abilities } from "#enums/abilities"; +import { Moves } from "#enums/moves"; +import { Species } from "#enums/species"; +import { StatusEffect } from "#enums/status-effect"; +import GameManager from "#test/testUtils/gameManager"; +import Phaser from "phaser"; +import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; + +describe("Abilities - Vital Spirit", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + + beforeAll(() => { + phaserGame = new Phaser.Game({ + type: Phaser.HEADLESS, + }); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); + + beforeEach(() => { + game = new GameManager(phaserGame); + game.override + .moveset([ Moves.SPLASH ]) + .ability(Abilities.BALL_FETCH) + .battleType("single") + .disableCrits() + .enemySpecies(Species.MAGIKARP) + .enemyAbility(Abilities.BALL_FETCH) + .enemyMoveset(Moves.SPLASH); + }); + + it("should remove sleep when gained", async () => { + game.override.ability(Abilities.INSOMNIA) + .enemyAbility(Abilities.BALL_FETCH) + .moveset(Moves.SKILL_SWAP) + .enemyMoveset(Moves.SPLASH), + + await game.classicMode.startBattle([ Species.FEEBAS ]); + const enemy = game.scene.getEnemyPokemon(); + enemy?.trySetStatus(StatusEffect.SLEEP); + expect(enemy?.status?.effect).toBe(StatusEffect.SLEEP); + + game.move.select(Moves.SKILL_SWAP); + await game.phaseInterceptor.to("BerryPhase"); + + expect(enemy?.status).toBeNull(); + }); +}); diff --git a/test/abilities/water_bubble.test.ts b/test/abilities/water_bubble.test.ts new file mode 100644 index 00000000000..0b85a5814da --- /dev/null +++ b/test/abilities/water_bubble.test.ts @@ -0,0 +1,51 @@ +import { Abilities } from "#enums/abilities"; +import { Moves } from "#enums/moves"; +import { Species } from "#enums/species"; +import { StatusEffect } from "#enums/status-effect"; +import GameManager from "#test/testUtils/gameManager"; +import Phaser from "phaser"; +import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; + +describe("Abilities - Water Bubble", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + + beforeAll(() => { + phaserGame = new Phaser.Game({ + type: Phaser.HEADLESS, + }); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); + + beforeEach(() => { + game = new GameManager(phaserGame); + game.override + .moveset([ Moves.SPLASH ]) + .ability(Abilities.BALL_FETCH) + .battleType("single") + .disableCrits() + .enemySpecies(Species.MAGIKARP) + .enemyAbility(Abilities.BALL_FETCH) + .enemyMoveset(Moves.SPLASH); + }); + + it("should remove burn when gained", async () => { + game.override.ability(Abilities.THERMAL_EXCHANGE) + .enemyAbility(Abilities.BALL_FETCH) + .moveset(Moves.SKILL_SWAP) + .enemyMoveset(Moves.SPLASH), + + await game.classicMode.startBattle([ Species.FEEBAS ]); + const enemy = game.scene.getEnemyPokemon(); + enemy?.trySetStatus(StatusEffect.BURN); + expect(enemy?.status?.effect).toBe(StatusEffect.BURN); + + game.move.select(Moves.SKILL_SWAP); + await game.phaseInterceptor.to("BerryPhase"); + + expect(enemy?.status).toBeNull(); + }); +}); diff --git a/test/abilities/water_veil.test.ts b/test/abilities/water_veil.test.ts new file mode 100644 index 00000000000..38c9a05600b --- /dev/null +++ b/test/abilities/water_veil.test.ts @@ -0,0 +1,51 @@ +import { Abilities } from "#enums/abilities"; +import { Moves } from "#enums/moves"; +import { Species } from "#enums/species"; +import { StatusEffect } from "#enums/status-effect"; +import GameManager from "#test/testUtils/gameManager"; +import Phaser from "phaser"; +import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; + +describe("Abilities - Water Veil", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + + beforeAll(() => { + phaserGame = new Phaser.Game({ + type: Phaser.HEADLESS, + }); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); + + beforeEach(() => { + game = new GameManager(phaserGame); + game.override + .moveset([ Moves.SPLASH ]) + .ability(Abilities.BALL_FETCH) + .battleType("single") + .disableCrits() + .enemySpecies(Species.MAGIKARP) + .enemyAbility(Abilities.BALL_FETCH) + .enemyMoveset(Moves.SPLASH); + }); + + it("should remove burn when gained", async () => { + game.override.ability(Abilities.THERMAL_EXCHANGE) + .enemyAbility(Abilities.BALL_FETCH) + .moveset(Moves.SKILL_SWAP) + .enemyMoveset(Moves.SPLASH), + + await game.classicMode.startBattle([ Species.FEEBAS ]); + const enemy = game.scene.getEnemyPokemon(); + enemy?.trySetStatus(StatusEffect.BURN); + expect(enemy?.status?.effect).toBe(StatusEffect.BURN); + + game.move.select(Moves.SKILL_SWAP); + await game.phaseInterceptor.to("BerryPhase"); + + expect(enemy?.status).toBeNull(); + }); +}); diff --git a/test/abilities/wimp_out.test.ts b/test/abilities/wimp_out.test.ts index ef201cbf8dd..294025a10e7 100644 --- a/test/abilities/wimp_out.test.ts +++ b/test/abilities/wimp_out.test.ts @@ -498,6 +498,7 @@ describe("Abilities - Wimp Out", () => { const hasFled = enemyPokemon.switchOutStatus; expect(isVisible && !hasFled).toBe(true); }); + it("wimp out will not skip battles when triggered in a double battle", async () => { const wave = 2; game.override @@ -525,4 +526,29 @@ describe("Abilities - Wimp Out", () => { await game.toNextWave(); expect(game.scene.currentBattle.waveIndex).toBe(wave + 1); }); + + it("wimp out should not skip battles when triggering the same turn as another enemy faints", async () => { + const wave = 2; + game.override + .enemySpecies(Species.WIMPOD) + .enemyAbility(Abilities.WIMP_OUT) + .startingLevel(50) + .enemyLevel(1) + .enemyMoveset([ Moves.SPLASH, Moves.ENDURE ]) + .battleType("double") + .moveset([ Moves.DRAGON_ENERGY, Moves.SPLASH ]) + .startingWave(wave); + + await game.classicMode.startBattle([ Species.REGIDRAGO, Species.MAGIKARP ]); + + // turn 1 + game.move.select(Moves.DRAGON_ENERGY, 0); + game.move.select(Moves.SPLASH, 1); + await game.forceEnemyMove(Moves.SPLASH); + await game.forceEnemyMove(Moves.ENDURE); + + await game.phaseInterceptor.to("SelectModifierPhase"); + expect(game.scene.currentBattle.waveIndex).toBe(wave + 1); + + }); }); diff --git a/test/abilities/wonder_skin.test.ts b/test/abilities/wonder_skin.test.ts index f2cb0faed72..18d5be36aef 100644 --- a/test/abilities/wonder_skin.test.ts +++ b/test/abilities/wonder_skin.test.ts @@ -1,4 +1,3 @@ -import { allAbilities } from "#app/data/ability"; import { allMoves } from "#app/data/moves/move"; import { MoveEffectPhase } from "#app/phases/move-effect-phase"; import { Abilities } from "#enums/abilities"; @@ -56,16 +55,21 @@ describe("Abilities - Wonder Skin", () => { expect(moveToCheck.calculateBattleAccuracy).toHaveReturnedWith(100); }); - const bypassAbilities = [Abilities.MOLD_BREAKER, Abilities.TERAVOLT, Abilities.TURBOBLAZE]; + const bypassAbilities = [ + [Abilities.MOLD_BREAKER, "Mold Breaker"], + [Abilities.TERAVOLT, "Teravolt"], + [Abilities.TURBOBLAZE, "Turboblaze"], + ]; bypassAbilities.forEach(ability => { - it(`does not affect pokemon with ${allAbilities[ability].name}`, async () => { + it(`does not affect pokemon with ${ability[1]}`, async () => { const moveToCheck = allMoves[Moves.CHARM]; - game.override.ability(ability); + // @ts-ignore ts doesn't know that ability[0] is an ability and not a string... + game.override.ability(ability[0]); vi.spyOn(moveToCheck, "calculateBattleAccuracy"); - await game.startBattle([Species.PIKACHU]); + await game.classicMode.startBattle([Species.PIKACHU]); game.move.select(Moves.CHARM); await game.phaseInterceptor.to(MoveEffectPhase); diff --git a/test/achievements/achievement.test.ts b/test/achievements/achievement.test.ts index 26d33adb00a..5c53e38e208 100644 --- a/test/achievements/achievement.test.ts +++ b/test/achievements/achievement.test.ts @@ -14,7 +14,7 @@ import { NumberHolder } from "#app/utils"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; -import BattleScene from "#app/battle-scene"; +import type BattleScene from "#app/battle-scene"; describe("check some Achievement related stuff", () => { it("should check Achievement creation", () => { @@ -77,6 +77,25 @@ describe("Achv", () => { }); describe("MoneyAchv", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + let scene: BattleScene; + + beforeAll(() => { + phaserGame = new Phaser.Game({ + type: Phaser.HEADLESS, + }); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); + + beforeEach(() => { + game = new GameManager(phaserGame); + scene = game.scene; + }); + it("should create an instance of MoneyAchv", () => { const moneyAchv = new MoneyAchv("", "Test Money Achievement", 10000, "money_icon", 10); expect(moneyAchv).toBeInstanceOf(MoneyAchv); @@ -85,7 +104,6 @@ describe("MoneyAchv", () => { it("should validate the achievement based on the money amount", () => { const moneyAchv = new MoneyAchv("", "Test Money Achievement", 10000, "money_icon", 10); - const scene = new BattleScene(); scene.money = 5000; expect(moneyAchv.validate([])).toBe(false); diff --git a/test/battle/ability_swap.test.ts b/test/battle/ability_swap.test.ts index b9c609e89f6..72991dba6b0 100644 --- a/test/battle/ability_swap.test.ts +++ b/test/battle/ability_swap.test.ts @@ -64,4 +64,15 @@ describe("Test Ability Swapping", () => { expect(game.scene.getPlayerPokemon()?.getStatStage(Stat.ATK)).toBe(1); // would be 2 if passive activated again }); + + // Pickup and Honey Gather are special cases as they're the only abilities to be Unsuppressable but not Unswappable + it("should be able to swap pickup", async () => { + game.override.ability(Abilities.PICKUP).enemyAbility(Abilities.INTIMIDATE).moveset(Moves.ROLE_PLAY); + await game.classicMode.startBattle([Species.FEEBAS]); + + game.move.select(Moves.ROLE_PLAY); + await game.phaseInterceptor.to("BerryPhase"); + + expect(game.scene.getEnemyPokemon()?.getStatStage(Stat.ATK)).toBe(-1); + }); }); diff --git a/test/battlerTags/substitute.test.ts b/test/battlerTags/substitute.test.ts index e80453d2933..fca3dc5ef7e 100644 --- a/test/battlerTags/substitute.test.ts +++ b/test/battlerTags/substitute.test.ts @@ -1,22 +1,40 @@ -import { beforeEach, describe, expect, it, vi } from "vitest"; +import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; import type { PokemonTurnData, TurnMove, PokemonMove } from "#app/field/pokemon"; import type Pokemon from "#app/field/pokemon"; import { MoveResult } from "#app/field/pokemon"; -import BattleScene from "#app/battle-scene"; +import type BattleScene from "#app/battle-scene"; import { BattlerTagLapseType, BindTag, SubstituteTag } from "#app/data/battler-tags"; import { Moves } from "#app/enums/moves"; import { PokemonAnimType } from "#app/enums/pokemon-anim-type"; import * as messages from "#app/messages"; import { allMoves } from "#app/data/moves/move"; import type { MoveEffectPhase } from "#app/phases/move-effect-phase"; +import GameManager from "#test/testUtils/gameManager"; describe("BattlerTag - SubstituteTag", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + + beforeAll(() => { + phaserGame = new Phaser.Game({ + type: Phaser.HEADLESS, + }); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); + + beforeEach(() => { + game = new GameManager(phaserGame); + }); + let mockPokemon: Pokemon; describe("onAdd behavior", () => { beforeEach(() => { mockPokemon = { - scene: new BattleScene(), + scene: game.scene, hp: 101, id: 0, getMaxHp: vi.fn().mockReturnValue(101) as Pokemon["getMaxHp"], @@ -77,7 +95,7 @@ describe("BattlerTag - SubstituteTag", () => { describe("onRemove behavior", () => { beforeEach(() => { mockPokemon = { - scene: new BattleScene(), + scene: game.scene, hp: 101, id: 0, isFainted: vi.fn().mockReturnValue(false) as Pokemon["isFainted"], @@ -109,7 +127,7 @@ describe("BattlerTag - SubstituteTag", () => { describe("lapse behavior", () => { beforeEach(() => { mockPokemon = { - scene: new BattleScene(), + scene: game.scene, hp: 101, id: 0, turnData: { acted: true } as PokemonTurnData, diff --git a/test/data/splash_messages.test.ts b/test/data/splash_messages.test.ts index 8ae13366670..773b2715825 100644 --- a/test/data/splash_messages.test.ts +++ b/test/data/splash_messages.test.ts @@ -7,10 +7,10 @@ describe("Data - Splash Messages", () => { expect(getSplashMessages().length).toBeGreaterThanOrEqual(15); }); - // make sure to adjust this test if the weight it changed! - it("should add contain 10 `battlesWon` splash messages", () => { + // Make sure to adjust this test if the weight is changed! + it("should add contain 15 `battlesWon` splash messages", () => { const battlesWonMessages = getSplashMessages().filter(message => message === "splashMessages:battlesWon"); - expect(battlesWonMessages).toHaveLength(10); + expect(battlesWonMessages).toHaveLength(15); }); describe("Seasonal", () => { @@ -22,16 +22,24 @@ describe("Data - Splash Messages", () => { vi.useRealTimers(); // reset system time }); - it("should contain halloween messages from Sep 15 to Oct 31", () => { - testSeason(new Date("2024-09-15"), new Date("2024-10-31"), "halloween"); + it("should contain new years messages from Jan 1 to Jan 15", () => { + testSeason(new Date("2025-01-01"), new Date("2025-01-15"), "newYears"); }); - it("should contain xmas messages from Dec 1 to Dec 26", () => { - testSeason(new Date("2024-12-01"), new Date("2024-12-26"), "xmas"); + it("should contain valentines messages from Feb 7 to Feb 21", () => { + testSeason(new Date("2025-02-07"), new Date("2025-02-21"), "valentines"); }); - it("should contain new years messages frm Jan 1 to Jan 31", () => { - testSeason(new Date("2024-01-01"), new Date("2024-01-31"), "newYears"); + it("should contain april fools messages from April 1 to April 3", () => { + testSeason(new Date("2025-04-01"), new Date("2025-04-03"), "aprilFools"); + }); + + it("should contain halloween messages from Oct 15 to Oct 31", () => { + testSeason(new Date("2025-10-15"), new Date("2025-10-31"), "halloween"); + }); + + it("should contain winter holiday messages from Dec 1 to Dec 31", () => { + testSeason(new Date("2025-12-01"), new Date("2025-12-31"), "winterHoliday"); }); }); }); diff --git a/test/data/status_effect.test.ts b/test/data/status_effect.test.ts index 61dafc1c9b8..0fd2daa308b 100644 --- a/test/data/status_effect.test.ts +++ b/test/data/status_effect.test.ts @@ -13,17 +13,12 @@ import { Species } from "#enums/species"; import { StatusEffect } from "#enums/status-effect"; import GameManager from "#test/testUtils/gameManager"; import { mockI18next } from "#test/testUtils/testUtils"; -import i18next from "i18next"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; const pokemonName = "PKM"; const sourceText = "SOURCE"; describe("Status Effect Messages", () => { - beforeAll(async () => { - await i18next.init(); - }); - describe("NONE", () => { const statusEffect = StatusEffect.NONE; @@ -31,7 +26,6 @@ describe("Status Effect Messages", () => { mockI18next(); const text = getStatusEffectObtainText(statusEffect, pokemonName); - console.log("text:", text); expect(text).toBe(""); const emptySourceText = getStatusEffectObtainText(statusEffect, pokemonName, ""); diff --git a/test/escape-calculations.test.ts b/test/escape-calculations.test.ts index 0cbf11dd230..b4504c7359c 100644 --- a/test/escape-calculations.test.ts +++ b/test/escape-calculations.test.ts @@ -1,7 +1,7 @@ import { AttemptRunPhase } from "#app/phases/attempt-run-phase"; import type { CommandPhase } from "#app/phases/command-phase"; import { Command } from "#app/ui/command-ui-handler"; -import * as Utils from "#app/utils"; +import { NumberHolder } from "#app/utils"; import { Abilities } from "#enums/abilities"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; @@ -45,7 +45,7 @@ describe("Escape chance calculations", () => { await game.phaseInterceptor.to(AttemptRunPhase, false); const phase = game.scene.getCurrentPhase() as AttemptRunPhase; - const escapePercentage = new Utils.NumberHolder(0); + const escapePercentage = new NumberHolder(0); // this sets up an object for multiple attempts. The pokemonSpeedRatio is your speed divided by the enemy speed, the escapeAttempts are the number of escape attempts and the expectedEscapeChance is the chance it should be escaping const escapeChances: { @@ -118,7 +118,7 @@ describe("Escape chance calculations", () => { await game.phaseInterceptor.to(AttemptRunPhase, false); const phase = game.scene.getCurrentPhase() as AttemptRunPhase; - const escapePercentage = new Utils.NumberHolder(0); + const escapePercentage = new NumberHolder(0); // this sets up an object for multiple attempts. The pokemonSpeedRatio is your speed divided by the enemy speed, the escapeAttempts are the number of escape attempts and the expectedEscapeChance is the chance it should be escaping const escapeChances: { @@ -197,7 +197,7 @@ describe("Escape chance calculations", () => { await game.phaseInterceptor.to(AttemptRunPhase, false); const phase = game.scene.getCurrentPhase() as AttemptRunPhase; - const escapePercentage = new Utils.NumberHolder(0); + const escapePercentage = new NumberHolder(0); // this sets up an object for multiple attempts. The pokemonSpeedRatio is your speed divided by the enemy speed, the escapeAttempts are the number of escape attempts and the expectedEscapeChance is the chance it should be escaping const escapeChances: { @@ -284,7 +284,7 @@ describe("Escape chance calculations", () => { await game.phaseInterceptor.to(AttemptRunPhase, false); const phase = game.scene.getCurrentPhase() as AttemptRunPhase; - const escapePercentage = new Utils.NumberHolder(0); + const escapePercentage = new NumberHolder(0); // this sets up an object for multiple attempts. The pokemonSpeedRatio is your speed divided by the enemy speed, the escapeAttempts are the number of escape attempts and the expectedEscapeChance is the chance it should be escaping const escapeChances: { diff --git a/test/items/exp_booster.test.ts b/test/items/exp_booster.test.ts index e4491b22637..2b1308f1afb 100644 --- a/test/items/exp_booster.test.ts +++ b/test/items/exp_booster.test.ts @@ -1,6 +1,6 @@ import { Abilities } from "#app/enums/abilities"; import { PokemonExpBoosterModifier } from "#app/modifier/modifier"; -import * as Utils from "#app/utils"; +import { NumberHolder } from "#app/utils"; import GameManager from "#test/testUtils/gameManager"; import Phase from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; @@ -33,7 +33,7 @@ describe("EXP Modifier Items", () => { const partyMember = game.scene.getPlayerPokemon()!; partyMember.exp = 100; - const expHolder = new Utils.NumberHolder(partyMember.exp); + const expHolder = new NumberHolder(partyMember.exp); game.scene.applyModifiers(PokemonExpBoosterModifier, true, partyMember, expHolder); expect(expHolder.value).toBe(440); }, 20000); diff --git a/test/items/grip_claw.test.ts b/test/items/grip_claw.test.ts index 1d169006116..aa7c23ca43d 100644 --- a/test/items/grip_claw.test.ts +++ b/test/items/grip_claw.test.ts @@ -98,6 +98,31 @@ describe("Items - Grip Claw", () => { expect(enemy1HeldItemCountsAfter).toBe(enemy1HeldItemCount); expect(enemy2HeldItemCountsAfter).toBe(enemy2HeldItemCount); }); + + it("should not allow Pollen Puff to steal items when healing ally", async () => { + game.override + .battleType("double") + .moveset([Moves.POLLEN_PUFF, Moves.ENDURE]) + .startingHeldItems([ + { name: "GRIP_CLAW", count: 1 }, + { name: "BERRY", type: BerryType.LUM, count: 1 }, + ]); + await game.classicMode.startBattle([Species.BULBASAUR, Species.OMANYTE]); + + const [leftPokemon, rightPokemon] = game.scene.getPlayerField(); + + const gripClaw = leftPokemon.getHeldItems()[0] as ContactHeldItemTransferChanceModifier; + vi.spyOn(gripClaw, "chance", "get").mockReturnValue(100); + + const heldItemCountBefore = getHeldItemCount(rightPokemon); + + game.move.select(Moves.POLLEN_PUFF, 0, BattlerIndex.PLAYER_2); + game.move.select(Moves.ENDURE, 1); + + await game.toNextTurn(); + + expect(getHeldItemCount(rightPokemon)).toBe(heldItemCountBefore); + }); }); /* diff --git a/test/items/leek.test.ts b/test/items/leek.test.ts index ec4d075fe19..afb31a5f9fa 100644 --- a/test/items/leek.test.ts +++ b/test/items/leek.test.ts @@ -1,5 +1,5 @@ import { TurnEndPhase } from "#app/phases/turn-end-phase"; -import * as Utils from "#app/utils"; +import { randInt } from "#app/utils"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; @@ -78,7 +78,7 @@ describe("Items - Leek", () => { // 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]); + await game.startBattle([species[randInt(species.length)], Species.PIKACHU]); const [partyMember, ally] = game.scene.getPlayerParty(); @@ -106,7 +106,7 @@ describe("Items - Leek", () => { // 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)]]); + await game.startBattle([Species.PIKACHU, species[randInt(species.length)]]); const [partyMember, ally] = game.scene.getPlayerParty(); diff --git a/test/items/light_ball.test.ts b/test/items/light_ball.test.ts index e4959002904..1f5227142eb 100644 --- a/test/items/light_ball.test.ts +++ b/test/items/light_ball.test.ts @@ -2,7 +2,7 @@ import { Stat } from "#enums/stat"; import { SpeciesStatBoosterModifier } from "#app/modifier/modifier"; import { modifierTypes } from "#app/modifier/modifier-type"; import i18next from "#app/plugins/i18n"; -import * as Utils from "#app/utils"; +import { NumberHolder } from "#app/utils"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phase from "phaser"; @@ -90,9 +90,9 @@ describe("Items - Light Ball", () => { const spAtkStat = partyMember.getStat(Stat.SPATK); // Making sure modifier is not applied without holding item - const atkValue = new Utils.NumberHolder(atkStat); + const atkValue = new NumberHolder(atkStat); game.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.DEF, atkValue); - const spAtkValue = new Utils.NumberHolder(spAtkStat); + const spAtkValue = new NumberHolder(spAtkStat); game.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.SPDEF, spAtkValue); expect(atkValue.value / atkStat).toBe(1); @@ -129,9 +129,9 @@ describe("Items - Light Ball", () => { const spAtkStat = partyMember.getStat(Stat.SPATK); // Making sure modifier is not applied without holding item - const atkValue = new Utils.NumberHolder(atkStat); + const atkValue = new NumberHolder(atkStat); game.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.DEF, atkValue); - const spAtkValue = new Utils.NumberHolder(spAtkStat); + const spAtkValue = new NumberHolder(spAtkStat); game.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.SPDEF, spAtkValue); expect(atkValue.value / atkStat).toBe(1); @@ -168,9 +168,9 @@ describe("Items - Light Ball", () => { const spAtkStat = partyMember.getStat(Stat.SPATK); // Making sure modifier is not applied without holding item - const atkValue = new Utils.NumberHolder(atkStat); + const atkValue = new NumberHolder(atkStat); game.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.DEF, atkValue); - const spAtkValue = new Utils.NumberHolder(spAtkStat); + const spAtkValue = new NumberHolder(spAtkStat); game.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.SPDEF, spAtkValue); expect(atkValue.value / atkStat).toBe(1); @@ -197,9 +197,9 @@ describe("Items - Light Ball", () => { const spAtkStat = partyMember.getStat(Stat.SPATK); // Making sure modifier is not applied without holding item - const atkValue = new Utils.NumberHolder(atkStat); + const atkValue = new NumberHolder(atkStat); game.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.DEF, atkValue); - const spAtkValue = new Utils.NumberHolder(spAtkStat); + const spAtkValue = new NumberHolder(spAtkStat); game.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.SPDEF, spAtkValue); expect(atkValue.value / atkStat).toBe(1); diff --git a/test/items/metal_powder.test.ts b/test/items/metal_powder.test.ts index 460a95d0f06..ed96d3c498b 100644 --- a/test/items/metal_powder.test.ts +++ b/test/items/metal_powder.test.ts @@ -2,7 +2,7 @@ import { Stat } from "#enums/stat"; import { SpeciesStatBoosterModifier } from "#app/modifier/modifier"; import { modifierTypes } from "#app/modifier/modifier-type"; import i18next from "#app/plugins/i18n"; -import * as Utils from "#app/utils"; +import { NumberHolder } from "#app/utils"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phase from "phaser"; @@ -89,7 +89,7 @@ describe("Items - Metal Powder", () => { const defStat = partyMember.getStat(Stat.DEF); // Making sure modifier is not applied without holding item - const defValue = new Utils.NumberHolder(defStat); + const defValue = new NumberHolder(defStat); game.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.DEF, defValue); expect(defValue.value / defStat).toBe(1); @@ -122,7 +122,7 @@ describe("Items - Metal Powder", () => { const defStat = partyMember.getStat(Stat.DEF); // Making sure modifier is not applied without holding item - const defValue = new Utils.NumberHolder(defStat); + const defValue = new NumberHolder(defStat); game.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.DEF, defValue); expect(defValue.value / defStat).toBe(1); @@ -155,7 +155,7 @@ describe("Items - Metal Powder", () => { const defStat = partyMember.getStat(Stat.DEF); // Making sure modifier is not applied without holding item - const defValue = new Utils.NumberHolder(defStat); + const defValue = new NumberHolder(defStat); game.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.DEF, defValue); expect(defValue.value / defStat).toBe(1); @@ -178,7 +178,7 @@ describe("Items - Metal Powder", () => { const defStat = partyMember.getStat(Stat.DEF); // Making sure modifier is not applied without holding item - const defValue = new Utils.NumberHolder(defStat); + const defValue = new NumberHolder(defStat); game.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.DEF, defValue); expect(defValue.value / defStat).toBe(1); diff --git a/test/items/multi_lens.test.ts b/test/items/multi_lens.test.ts index 90e73ae88ea..176e8213f55 100644 --- a/test/items/multi_lens.test.ts +++ b/test/items/multi_lens.test.ts @@ -211,4 +211,21 @@ describe("Items - Multi Lens", () => { // TODO: Update hit count to 1 once Future Sight is fixed to not activate held items if user is off the field expect(enemyPokemon.damageAndUpdate).toHaveBeenCalledTimes(2); }); + + it("should not allow Pollen Puff to heal ally more than once", async () => { + game.override.battleType("double").moveset([Moves.POLLEN_PUFF, Moves.ENDURE]); + await game.classicMode.startBattle([Species.BULBASAUR, Species.OMANYTE]); + + const [, rightPokemon] = game.scene.getPlayerField(); + + rightPokemon.damageAndUpdate(rightPokemon.hp - 1); + + game.move.select(Moves.POLLEN_PUFF, 0, BattlerIndex.PLAYER_2); + game.move.select(Moves.ENDURE, 1); + + await game.toNextTurn(); + + // Pollen Puff heals with a ratio of 0.5, as long as Pollen Puff triggers only once the pokemon will always be <= (0.5 * Max HP) + 1 + expect(rightPokemon.hp).toBeLessThanOrEqual(0.5 * rightPokemon.getMaxHp() + 1); + }); }); diff --git a/test/items/mystical_rock.test.ts b/test/items/mystical_rock.test.ts new file mode 100644 index 00000000000..0558bc21fe1 --- /dev/null +++ b/test/items/mystical_rock.test.ts @@ -0,0 +1,60 @@ +import { globalScene } from "#app/global-scene"; +import { Moves } from "#enums/moves"; +import { Abilities } from "#enums/abilities"; +import { Species } from "#enums/species"; +import GameManager from "#test/testUtils/gameManager"; +import Phase from "phaser"; +import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; + +describe("Items - Mystical Rock", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + + beforeAll(() => { + phaserGame = new Phase.Game({ + type: Phaser.HEADLESS, + }); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); + + beforeEach(() => { + game = new GameManager(phaserGame); + + game.override + .enemySpecies(Species.SHUCKLE) + .enemyMoveset(Moves.SPLASH) + .enemyAbility(Abilities.BALL_FETCH) + .moveset([Moves.SUNNY_DAY, Moves.GRASSY_TERRAIN]) + .startingHeldItems([{ name: "MYSTICAL_ROCK", count: 2 }]) + .battleType("single"); + }); + + it("should increase weather duration by +2 turns per stack", async () => { + await game.classicMode.startBattle([Species.GASTLY]); + + game.move.select(Moves.SUNNY_DAY); + + await game.phaseInterceptor.to("MoveEndPhase"); + + const weather = globalScene.arena.weather; + + expect(weather).toBeDefined(); + expect(weather!.turnsLeft).to.equal(9); + }); + + it("should increase terrain duration by +2 turns per stack", async () => { + await game.classicMode.startBattle([Species.GASTLY]); + + game.move.select(Moves.GRASSY_TERRAIN); + + await game.phaseInterceptor.to("MoveEndPhase"); + + const terrain = globalScene.arena.terrain; + + expect(terrain).toBeDefined(); + expect(terrain!.turnsLeft).to.equal(9); + }); +}); diff --git a/test/items/quick_powder.test.ts b/test/items/quick_powder.test.ts index 26faf5a0f4f..7115cad8cd1 100644 --- a/test/items/quick_powder.test.ts +++ b/test/items/quick_powder.test.ts @@ -2,7 +2,7 @@ import { Stat } from "#enums/stat"; import { SpeciesStatBoosterModifier } from "#app/modifier/modifier"; import { modifierTypes } from "#app/modifier/modifier-type"; import i18next from "#app/plugins/i18n"; -import * as Utils from "#app/utils"; +import { NumberHolder } from "#app/utils"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phase from "phaser"; @@ -89,7 +89,7 @@ describe("Items - Quick Powder", () => { const spdStat = partyMember.getStat(Stat.SPD); // Making sure modifier is not applied without holding item - const spdValue = new Utils.NumberHolder(spdStat); + const spdValue = new NumberHolder(spdStat); game.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.SPD, spdValue); expect(spdValue.value / spdStat).toBe(1); @@ -122,7 +122,7 @@ describe("Items - Quick Powder", () => { const spdStat = partyMember.getStat(Stat.SPD); // Making sure modifier is not applied without holding item - const spdValue = new Utils.NumberHolder(spdStat); + const spdValue = new NumberHolder(spdStat); game.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.SPD, spdValue); expect(spdValue.value / spdStat).toBe(1); @@ -155,7 +155,7 @@ describe("Items - Quick Powder", () => { const spdStat = partyMember.getStat(Stat.SPD); // Making sure modifier is not applied without holding item - const spdValue = new Utils.NumberHolder(spdStat); + const spdValue = new NumberHolder(spdStat); game.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.SPD, spdValue); expect(spdValue.value / spdStat).toBe(1); @@ -178,7 +178,7 @@ describe("Items - Quick Powder", () => { const spdStat = partyMember.getStat(Stat.SPD); // Making sure modifier is not applied without holding item - const spdValue = new Utils.NumberHolder(spdStat); + const spdValue = new NumberHolder(spdStat); game.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.SPD, spdValue); expect(spdValue.value / spdStat).toBe(1); diff --git a/test/items/reviver_seed.test.ts b/test/items/reviver_seed.test.ts index ab249d48a23..c06f354a94a 100644 --- a/test/items/reviver_seed.test.ts +++ b/test/items/reviver_seed.test.ts @@ -26,7 +26,7 @@ describe("Items - Reviver Seed", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([ Moves.SPLASH, Moves.TACKLE, Moves.ENDURE ]) + .moveset([Moves.SPLASH, Moves.TACKLE, Moves.ENDURE]) .ability(Abilities.BALL_FETCH) .battleType("single") .disableCrits() @@ -47,13 +47,10 @@ describe("Items - Reviver Seed", () => { { moveType: "Fixed Damage Move", move: Moves.SEISMIC_TOSS }, { moveType: "Final Gambit", move: Moves.FINAL_GAMBIT }, { moveType: "Counter", move: Moves.COUNTER }, - { moveType: "OHKO", move: Moves.SHEER_COLD } + { moveType: "OHKO", move: Moves.SHEER_COLD }, ])("should activate the holder's reviver seed from a $moveType", async ({ move }) => { - game.override - .enemyLevel(100) - .startingLevel(1) - .enemyMoveset(move); - await game.classicMode.startBattle([ Species.MAGIKARP, Species.FEEBAS ]); + game.override.enemyLevel(100).startingLevel(1).enemyMoveset(move); + await game.classicMode.startBattle([Species.MAGIKARP, Species.FEEBAS]); const player = game.scene.getPlayerPokemon()!; player.damageAndUpdate(player.hp - 1); @@ -67,11 +64,8 @@ describe("Items - Reviver Seed", () => { }); it("should activate the holder's reviver seed from confusion self-hit", async () => { - game.override - .enemyLevel(1) - .startingLevel(100) - .enemyMoveset(Moves.SPLASH); - await game.classicMode.startBattle([ Species.MAGIKARP, Species.FEEBAS ]); + game.override.enemyLevel(1).startingLevel(100).enemyMoveset(Moves.SPLASH); + await game.classicMode.startBattle([Species.MAGIKARP, Species.FEEBAS]); const player = game.scene.getPlayerPokemon()!; player.damageAndUpdate(player.hp - 1); player.addTag(BattlerTagType.CONFUSED, 3); @@ -100,7 +94,7 @@ describe("Items - Reviver Seed", () => { .enemySpecies(Species.MAGIKARP) .moveset(move) .enemyMoveset(Moves.ENDURE); - await game.classicMode.startBattle([ Species.MAGIKARP, Species.FEEBAS ]); + await game.classicMode.startBattle([Species.MAGIKARP, Species.FEEBAS]); const enemy = game.scene.getEnemyPokemon()!; enemy.damageAndUpdate(enemy.hp - 1); @@ -124,7 +118,7 @@ describe("Items - Reviver Seed", () => { .moveset(move) .enemyAbility(Abilities.LIQUID_OOZE) .enemyMoveset(Moves.SPLASH); - await game.classicMode.startBattle([ Species.GASTLY, Species.FEEBAS ]); + await game.classicMode.startBattle([Species.GASTLY, Species.FEEBAS]); const player = game.scene.getPlayerPokemon()!; player.damageAndUpdate(player.hp - 1); @@ -145,13 +139,13 @@ describe("Items - Reviver Seed", () => { .moveset(Moves.DESTINY_BOND) .startingHeldItems([]) // reset held items to nothing so user doesn't revive and not trigger Destiny Bond .enemyMoveset(Moves.TACKLE); - await game.classicMode.startBattle([ Species.MAGIKARP, Species.FEEBAS ]); + await game.classicMode.startBattle([Species.MAGIKARP, Species.FEEBAS]); const player = game.scene.getPlayerPokemon()!; player.damageAndUpdate(player.hp - 1); const enemy = game.scene.getEnemyPokemon()!; game.move.select(Moves.DESTINY_BOND); - await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.ENEMY ]); + await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to("TurnEndPhase"); expect(enemy.isFainted()).toBeTruthy(); diff --git a/test/items/thick_club.test.ts b/test/items/thick_club.test.ts index 9edbbcdc7d9..69ca316d455 100644 --- a/test/items/thick_club.test.ts +++ b/test/items/thick_club.test.ts @@ -2,7 +2,7 @@ import { Stat } from "#enums/stat"; import { SpeciesStatBoosterModifier } from "#app/modifier/modifier"; import { modifierTypes } from "#app/modifier/modifier-type"; import i18next from "#app/plugins/i18n"; -import * as Utils from "#app/utils"; +import { NumberHolder, randInt } from "#app/utils"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phase from "phaser"; @@ -89,7 +89,7 @@ describe("Items - Thick Club", () => { const atkStat = partyMember.getStat(Stat.ATK); // Making sure modifier is not applied without holding item - const atkValue = new Utils.NumberHolder(atkStat); + const atkValue = new NumberHolder(atkStat); game.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.ATK, atkValue); expect(atkValue.value / atkStat).toBe(1); @@ -112,7 +112,7 @@ describe("Items - Thick Club", () => { const atkStat = partyMember.getStat(Stat.ATK); // Making sure modifier is not applied without holding item - const atkValue = new Utils.NumberHolder(atkStat); + const atkValue = new NumberHolder(atkStat); game.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.ATK, atkValue); expect(atkValue.value / atkStat).toBe(1); @@ -135,7 +135,7 @@ describe("Items - Thick Club", () => { const atkStat = partyMember.getStat(Stat.ATK); // Making sure modifier is not applied without holding item - const atkValue = new Utils.NumberHolder(atkStat); + const atkValue = new NumberHolder(atkStat); game.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.ATK, atkValue); expect(atkValue.value / atkStat).toBe(1); @@ -153,7 +153,7 @@ describe("Items - Thick Club", () => { it("THICK_CLUB held by fused CUBONE line (base)", async () => { // Randomly choose from the Cubone line const species = [Species.CUBONE, Species.MAROWAK, Species.ALOLA_MAROWAK]; - const randSpecies = Utils.randInt(species.length); + const randSpecies = randInt(species.length); await game.classicMode.startBattle([species[randSpecies], Species.PIKACHU]); @@ -172,7 +172,7 @@ describe("Items - Thick Club", () => { const atkStat = partyMember.getStat(Stat.ATK); // Making sure modifier is not applied without holding item - const atkValue = new Utils.NumberHolder(atkStat); + const atkValue = new NumberHolder(atkStat); game.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.ATK, atkValue); expect(atkValue.value / atkStat).toBe(1); @@ -190,7 +190,7 @@ describe("Items - Thick Club", () => { it("THICK_CLUB held by fused CUBONE line (part)", async () => { // Randomly choose from the Cubone line const species = [Species.CUBONE, Species.MAROWAK, Species.ALOLA_MAROWAK]; - const randSpecies = Utils.randInt(species.length); + const randSpecies = randInt(species.length); await game.classicMode.startBattle([Species.PIKACHU, species[randSpecies]]); @@ -209,7 +209,7 @@ describe("Items - Thick Club", () => { const atkStat = partyMember.getStat(Stat.ATK); // Making sure modifier is not applied without holding item - const atkValue = new Utils.NumberHolder(atkStat); + const atkValue = new NumberHolder(atkStat); game.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.ATK, atkValue); expect(atkValue.value / atkStat).toBe(1); @@ -232,7 +232,7 @@ describe("Items - Thick Club", () => { const atkStat = partyMember.getStat(Stat.ATK); // Making sure modifier is not applied without holding item - const atkValue = new Utils.NumberHolder(atkStat); + const atkValue = new NumberHolder(atkStat); game.scene.applyModifiers(SpeciesStatBoosterModifier, true, partyMember, Stat.ATK, atkValue); expect(atkValue.value / atkStat).toBe(1); diff --git a/test/moves/copycat.test.ts b/test/moves/copycat.test.ts index c7242f0940e..0d9b0951f89 100644 --- a/test/moves/copycat.test.ts +++ b/test/moves/copycat.test.ts @@ -13,7 +13,7 @@ describe("Moves - Copycat", () => { let phaserGame: Phaser.Game; let game: GameManager; - const randomMoveAttr = allMoves[Moves.METRONOME].getAttrs(RandomMoveAttr)[0]; + let randomMoveAttr: RandomMoveAttr; beforeAll(() => { phaserGame = new Phaser.Game({ @@ -26,6 +26,7 @@ describe("Moves - Copycat", () => { }); beforeEach(() => { + randomMoveAttr = allMoves[Moves.METRONOME].getAttrs(RandomMoveAttr)[0]; game = new GameManager(phaserGame); game.override .moveset([Moves.COPYCAT, Moves.SPIKY_SHIELD, Moves.SWORDS_DANCE, Moves.SPLASH]) diff --git a/test/moves/dive.test.ts b/test/moves/dive.test.ts index 8d7b0f9dd00..d7b53701a25 100644 --- a/test/moves/dive.test.ts +++ b/test/moves/dive.test.ts @@ -120,7 +120,7 @@ describe("Moves - Dive", () => { await game.phaseInterceptor.to("TurnEndPhase"); await game.phaseInterceptor.to("TurnStartPhase", false); - game.scene.arena.trySetWeather(WeatherType.HARSH_SUN, false); + game.scene.arena.trySetWeather(WeatherType.HARSH_SUN); await game.phaseInterceptor.to("MoveEndPhase"); expect(playerPokemon.getLastXMoves(1)[0].result).toBe(MoveResult.FAIL); diff --git a/test/moves/dynamax_cannon.test.ts b/test/moves/dynamax_cannon.test.ts index 0ff0712710d..9cf3106b9c1 100644 --- a/test/moves/dynamax_cannon.test.ts +++ b/test/moves/dynamax_cannon.test.ts @@ -3,6 +3,7 @@ import { allMoves } from "#app/data/moves/move"; import { DamageAnimPhase } from "#app/phases/damage-anim-phase"; import { MoveEffectPhase } from "#app/phases/move-effect-phase"; import { Moves } from "#enums/moves"; +import type Move from "#app/data/moves/move"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -12,7 +13,7 @@ describe("Moves - Dynamax Cannon", () => { let phaserGame: Phaser.Game; let game: GameManager; - const dynamaxCannon = allMoves[Moves.DYNAMAX_CANNON]; + let dynamaxCannon: Move; beforeAll(() => { phaserGame = new Phaser.Game({ @@ -25,6 +26,7 @@ describe("Moves - Dynamax Cannon", () => { }); beforeEach(() => { + dynamaxCannon = allMoves[Moves.DYNAMAX_CANNON]; game = new GameManager(phaserGame); game.override.moveset([dynamaxCannon.id]); diff --git a/test/moves/effectiveness.test.ts b/test/moves/effectiveness.test.ts index dc55392f8bf..fb03f1c10a0 100644 --- a/test/moves/effectiveness.test.ts +++ b/test/moves/effectiveness.test.ts @@ -1,6 +1,6 @@ import { allMoves } from "#app/data/moves/move"; import { getPokemonSpecies } from "#app/data/pokemon-species"; -import { TrainerSlot } from "#app/data/trainer-config"; +import { TrainerSlot } from "#enums/trainer-slot"; import { PokemonType } from "#enums/pokemon-type"; import { Abilities } from "#app/enums/abilities"; import { Moves } from "#app/enums/moves"; diff --git a/test/moves/endure.test.ts b/test/moves/endure.test.ts index d706d5d9581..8fbb2272ece 100644 --- a/test/moves/endure.test.ts +++ b/test/moves/endure.test.ts @@ -22,7 +22,7 @@ describe("Moves - Endure", () => { beforeEach(() => { game = new GameManager(phaserGame); game.override - .moveset([ Moves.THUNDER, Moves.BULLET_SEED, Moves.TOXIC, Moves.SHEER_COLD ]) + .moveset([Moves.THUNDER, Moves.BULLET_SEED, Moves.TOXIC, Moves.SHEER_COLD]) .ability(Abilities.SKILL_LINK) .startingLevel(100) .battleType("single") @@ -51,7 +51,7 @@ describe("Moves - Endure", () => { }); it("should let the pokemon survive against OHKO moves", async () => { - await game.classicMode.startBattle([ Species.MAGIKARP ]); + await game.classicMode.startBattle([Species.MAGIKARP]); const enemy = game.scene.getEnemyPokemon()!; game.move.select(Moves.SHEER_COLD); @@ -74,7 +74,7 @@ describe("Moves - Endure", () => { .enemySpecies(Species.MAGIKARP) .moveset(move) .enemyMoveset(Moves.ENDURE); - await game.classicMode.startBattle([ Species.MAGIKARP, Species.FEEBAS ]); + await game.classicMode.startBattle([Species.MAGIKARP, Species.FEEBAS]); const enemy = game.scene.getEnemyPokemon()!; enemy.damageAndUpdate(enemy.hp - 1); diff --git a/test/moves/false_swipe.test.ts b/test/moves/false_swipe.test.ts new file mode 100644 index 00000000000..4fb5b81ef67 --- /dev/null +++ b/test/moves/false_swipe.test.ts @@ -0,0 +1,53 @@ +import { MoveResult } from "#app/field/pokemon"; +import { Abilities } from "#enums/abilities"; +import { Moves } from "#enums/moves"; +import { Species } from "#enums/species"; +import GameManager from "#test/testUtils/gameManager"; +import Phaser from "phaser"; +import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; + +describe("Moves - False Swipe", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + + beforeAll(() => { + phaserGame = new Phaser.Game({ + type: Phaser.HEADLESS, + }); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); + + beforeEach(() => { + game = new GameManager(phaserGame); + game.override + .moveset([Moves.FALSE_SWIPE]) + .ability(Abilities.BALL_FETCH) + .startingLevel(1000) + .battleType("single") + .disableCrits() + .enemySpecies(Species.MAGIKARP) + .enemyAbility(Abilities.BALL_FETCH) + .enemyMoveset(Moves.SPLASH); + }); + + it("should reduce the target to 1 HP", async () => { + await game.classicMode.startBattle([Species.MILOTIC]); + + const player = game.scene.getPlayerPokemon()!; + const enemy = game.scene.getEnemyPokemon()!; + + game.move.select(Moves.FALSE_SWIPE); + await game.toNextTurn(); + game.move.select(Moves.FALSE_SWIPE); + await game.phaseInterceptor.to("BerryPhase"); + + expect(enemy.hp).toBe(1); + const falseSwipeHistory = player + .getMoveHistory() + .every(turnMove => turnMove.move === Moves.FALSE_SWIPE && turnMove.result === MoveResult.SUCCESS); + expect(falseSwipeHistory).toBe(true); + }); +}); diff --git a/test/moves/fusion_flare_bolt.test.ts b/test/moves/fusion_flare_bolt.test.ts index 9a379cb4588..c340aeea63f 100644 --- a/test/moves/fusion_flare_bolt.test.ts +++ b/test/moves/fusion_flare_bolt.test.ts @@ -1,6 +1,7 @@ import { Stat } from "#enums/stat"; import { BattlerIndex } from "#app/battle"; import { allMoves } from "#app/data/moves/move"; +import type Move from "#app/data/moves/move"; import { DamageAnimPhase } from "#app/phases/damage-anim-phase"; import { MoveEffectPhase } from "#app/phases/move-effect-phase"; import { MoveEndPhase } from "#app/phases/move-end-phase"; @@ -15,8 +16,8 @@ describe("Moves - Fusion Flare and Fusion Bolt", () => { let phaserGame: Phaser.Game; let game: GameManager; - const fusionFlare = allMoves[Moves.FUSION_FLARE]; - const fusionBolt = allMoves[Moves.FUSION_BOLT]; + let fusionFlare: Move; + let fusionBolt: Move; beforeAll(() => { phaserGame = new Phaser.Game({ @@ -29,6 +30,8 @@ describe("Moves - Fusion Flare and Fusion Bolt", () => { }); beforeEach(() => { + fusionFlare = allMoves[Moves.FUSION_FLARE]; + fusionBolt = allMoves[Moves.FUSION_BOLT]; game = new GameManager(phaserGame); game.override.moveset([fusionFlare.id, fusionBolt.id]); game.override.startingLevel(1); @@ -45,7 +48,7 @@ describe("Moves - Fusion Flare and Fusion Bolt", () => { }); it("FUSION_FLARE should double power of subsequent FUSION_BOLT", async () => { - await game.startBattle([Species.ZEKROM, Species.ZEKROM]); + await game.classicMode.startBattle([Species.ZEKROM, Species.ZEKROM]); game.move.select(fusionFlare.id, 0, BattlerIndex.ENEMY); game.move.select(fusionBolt.id, 1, BattlerIndex.ENEMY); @@ -65,7 +68,7 @@ describe("Moves - Fusion Flare and Fusion Bolt", () => { }, 20000); it("FUSION_BOLT should double power of subsequent FUSION_FLARE", async () => { - await game.startBattle([Species.ZEKROM, Species.ZEKROM]); + await game.classicMode.startBattle([Species.ZEKROM, Species.ZEKROM]); game.move.select(fusionBolt.id, 0, BattlerIndex.ENEMY); game.move.select(fusionFlare.id, 1, BattlerIndex.ENEMY); @@ -85,7 +88,7 @@ describe("Moves - Fusion Flare and Fusion Bolt", () => { }, 20000); it("FUSION_FLARE should double power of subsequent FUSION_BOLT if a move failed in between", async () => { - await game.startBattle([Species.ZEKROM, Species.ZEKROM]); + await game.classicMode.startBattle([Species.ZEKROM, Species.ZEKROM]); game.move.select(fusionFlare.id, 0, BattlerIndex.PLAYER); game.move.select(fusionBolt.id, 1, BattlerIndex.PLAYER); @@ -111,7 +114,7 @@ describe("Moves - Fusion Flare and Fusion Bolt", () => { it("FUSION_FLARE should not double power of subsequent FUSION_BOLT if a move succeeded in between", async () => { game.override.enemyMoveset([Moves.SPLASH, Moves.SPLASH, Moves.SPLASH, Moves.SPLASH]); - await game.startBattle([Species.ZEKROM, Species.ZEKROM]); + await game.classicMode.startBattle([Species.ZEKROM, Species.ZEKROM]); game.move.select(fusionFlare.id, 0, BattlerIndex.ENEMY); game.move.select(fusionBolt.id, 1, BattlerIndex.ENEMY); @@ -156,7 +159,7 @@ describe("Moves - Fusion Flare and Fusion Bolt", () => { it("FUSION_FLARE and FUSION_BOLT alternating throughout turn should double power of subsequent moves", async () => { game.override.enemyMoveset([fusionFlare.id, fusionFlare.id, fusionFlare.id, fusionFlare.id]); - await game.startBattle([Species.ZEKROM, Species.ZEKROM]); + await game.classicMode.startBattle([Species.ZEKROM, Species.ZEKROM]); const party = game.scene.getPlayerParty(); const enemyParty = game.scene.getEnemyParty(); @@ -210,7 +213,7 @@ describe("Moves - Fusion Flare and Fusion Bolt", () => { it("FUSION_FLARE and FUSION_BOLT alternating throughout turn should double power of subsequent moves if moves are aimed at allies", async () => { game.override.enemyMoveset([fusionFlare.id, fusionFlare.id, fusionFlare.id, fusionFlare.id]); - await game.startBattle([Species.ZEKROM, Species.ZEKROM]); + await game.classicMode.startBattle([Species.ZEKROM, Species.ZEKROM]); const party = game.scene.getPlayerParty(); const enemyParty = game.scene.getEnemyParty(); diff --git a/test/moves/grudge.test.ts b/test/moves/grudge.test.ts index ebd062a76ee..161fa38edd2 100644 --- a/test/moves/grudge.test.ts +++ b/test/moves/grudge.test.ts @@ -41,7 +41,7 @@ describe("Moves - Grudge", () => { await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]); await game.phaseInterceptor.to("BerryPhase"); - const playerMove = playerPokemon?.getMoveset().find(m => m?.moveId === Moves.EMBER); + const playerMove = playerPokemon?.getMoveset().find(m => m.moveId === Moves.EMBER); expect(playerMove?.getPpRatio()).toBe(0); }); @@ -60,7 +60,7 @@ describe("Moves - Grudge", () => { await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]); await game.phaseInterceptor.to("BerryPhase"); - const playerMove = playerPokemon?.getMoveset().find(m => m?.moveId === Moves.EMBER); + const playerMove = playerPokemon?.getMoveset().find(m => m.moveId === Moves.EMBER); expect(playerMove?.getPpRatio()).toBe(0); }); @@ -84,7 +84,7 @@ describe("Moves - Grudge", () => { expect(enemyPokemon?.isFainted()).toBe(true); - const playerMove = playerPokemon?.getMoveset().find(m => m?.moveId === Moves.FALSE_SWIPE); + const playerMove = playerPokemon?.getMoveset().find(m => m.moveId === Moves.FALSE_SWIPE); expect(playerMove?.getPpRatio()).toBeGreaterThan(0); }); }); diff --git a/test/moves/hard_press.test.ts b/test/moves/hard_press.test.ts index 1bb6adc8e90..8891f0bf0e2 100644 --- a/test/moves/hard_press.test.ts +++ b/test/moves/hard_press.test.ts @@ -6,12 +6,13 @@ import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; +import type Move from "#app/data/moves/move"; describe("Moves - Hard Press", () => { let phaserGame: Phaser.Game; let game: GameManager; - const moveToCheck = allMoves[Moves.HARD_PRESS]; + let moveToCheck: Move; beforeAll(() => { phaserGame = new Phaser.Game({ @@ -24,6 +25,7 @@ describe("Moves - Hard Press", () => { }); beforeEach(() => { + moveToCheck = allMoves[Moves.HARD_PRESS]; game = new GameManager(phaserGame); game.override.battleType("single"); game.override.ability(Abilities.BALL_FETCH); diff --git a/test/moves/last_respects.test.ts b/test/moves/last_respects.test.ts index 57752cea1af..ccab8a43415 100644 --- a/test/moves/last_respects.test.ts +++ b/test/moves/last_respects.test.ts @@ -4,6 +4,7 @@ import { Species } from "#enums/species"; import { Abilities } from "#enums/abilities"; import GameManager from "#test/testUtils/gameManager"; import { allMoves } from "#app/data/moves/move"; +import type Move from "#app/data/moves/move"; import { MoveEffectPhase } from "#app/phases/move-effect-phase"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; @@ -12,8 +13,8 @@ describe("Moves - Last Respects", () => { let phaserGame: Phaser.Game; let game: GameManager; - const move = allMoves[Moves.LAST_RESPECTS]; - const basePower = move.power; + let move: Move; + let basePower: number; beforeAll(() => { phaserGame = new Phaser.Game({ @@ -27,6 +28,8 @@ describe("Moves - Last Respects", () => { beforeEach(() => { game = new GameManager(phaserGame); + move = allMoves[Moves.LAST_RESPECTS]; + basePower = move.power; game.override .battleType("single") .disableCrits() diff --git a/test/moves/metronome.test.ts b/test/moves/metronome.test.ts index 15790777ed3..80f32a3a6fb 100644 --- a/test/moves/metronome.test.ts +++ b/test/moves/metronome.test.ts @@ -13,7 +13,7 @@ describe("Moves - Metronome", () => { let phaserGame: Phaser.Game; let game: GameManager; - const randomMoveAttr = allMoves[Moves.METRONOME].getAttrs(RandomMoveAttr)[0]; + let randomMoveAttr: RandomMoveAttr; beforeAll(() => { phaserGame = new Phaser.Game({ @@ -26,6 +26,7 @@ describe("Moves - Metronome", () => { }); beforeEach(() => { + randomMoveAttr = allMoves[Moves.METRONOME].getAttrs(RandomMoveAttr)[0]; game = new GameManager(phaserGame); game.override .moveset([Moves.METRONOME, Moves.SPLASH]) diff --git a/test/moves/multi_target.test.ts b/test/moves/multi_target.test.ts index 2b17929a5df..5d33c7860cb 100644 --- a/test/moves/multi_target.test.ts +++ b/test/moves/multi_target.test.ts @@ -1,7 +1,7 @@ import { BattlerIndex } from "#app/battle"; import { Abilities } from "#app/enums/abilities"; import { Species } from "#app/enums/species"; -import * as Utils from "#app/utils"; +import { toDmgValue } from "#app/utils"; import { Moves } from "#enums/moves"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -71,8 +71,8 @@ describe("Multi-target damage reduction", () => { // Single target moves don't get reduced expect(tackle1).toBe(tackle2); // Moves that target all enemies get reduced if there's more than one enemy - expect(gleam1).toBeLessThanOrEqual(Utils.toDmgValue(gleam2 * 0.75) + 1); - expect(gleam1).toBeGreaterThanOrEqual(Utils.toDmgValue(gleam2 * 0.75) - 1); + expect(gleam1).toBeLessThanOrEqual(toDmgValue(gleam2 * 0.75) + 1); + expect(gleam1).toBeGreaterThanOrEqual(toDmgValue(gleam2 * 0.75) - 1); }); it("should reduce earthquake when more than one pokemon other than user is not fainted", async () => { @@ -122,7 +122,7 @@ describe("Multi-target damage reduction", () => { const damageEnemy1Turn3 = enemy1.getMaxHp() - enemy1.hp; // Turn 3: 1 target, should be no damage reduction - expect(damageEnemy1Turn1).toBeLessThanOrEqual(Utils.toDmgValue(damageEnemy1Turn3 * 0.75) + 1); - expect(damageEnemy1Turn1).toBeGreaterThanOrEqual(Utils.toDmgValue(damageEnemy1Turn3 * 0.75) - 1); + expect(damageEnemy1Turn1).toBeLessThanOrEqual(toDmgValue(damageEnemy1Turn3 * 0.75) + 1); + expect(damageEnemy1Turn1).toBeGreaterThanOrEqual(toDmgValue(damageEnemy1Turn3 * 0.75) - 1); }); }); diff --git a/test/moves/pollen_puff.test.ts b/test/moves/pollen_puff.test.ts new file mode 100644 index 00000000000..3af3ea1f41d --- /dev/null +++ b/test/moves/pollen_puff.test.ts @@ -0,0 +1,64 @@ +import { BattlerIndex } from "#app/battle"; +import { Abilities } from "#enums/abilities"; +import { Moves } from "#enums/moves"; +import { Species } from "#enums/species"; +import GameManager from "#test/testUtils/gameManager"; +import Phaser from "phaser"; +import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; + +describe("Moves - Pollen Puff", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + + beforeAll(() => { + phaserGame = new Phaser.Game({ + type: Phaser.HEADLESS, + }); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); + + beforeEach(() => { + game = new GameManager(phaserGame); + game.override + .moveset([Moves.POLLEN_PUFF]) + .ability(Abilities.BALL_FETCH) + .battleType("single") + .disableCrits() + .enemySpecies(Species.MAGIKARP) + .enemyAbility(Abilities.BALL_FETCH) + .enemyMoveset(Moves.SPLASH); + }); + + it("should not heal more than once when the user has a source of multi-hit", async () => { + game.override.battleType("double").moveset([Moves.POLLEN_PUFF, Moves.ENDURE]).ability(Abilities.PARENTAL_BOND); + await game.classicMode.startBattle([Species.BULBASAUR, Species.OMANYTE]); + + const [_, rightPokemon] = game.scene.getPlayerField(); + + rightPokemon.damageAndUpdate(rightPokemon.hp - 1); + + game.move.select(Moves.POLLEN_PUFF, 0, BattlerIndex.PLAYER_2); + game.move.select(Moves.ENDURE, 1); + + await game.phaseInterceptor.to("BerryPhase"); + + // Pollen Puff heals with a ratio of 0.5, as long as Pollen Puff triggers only once the pokemon will always be <= (0.5 * Max HP) + 1 + expect(rightPokemon.hp).toBeLessThanOrEqual(0.5 * rightPokemon.getMaxHp() + 1); + }); + + it("should damage an enemy multiple times when the user has a source of multi-hit", async () => { + game.override.moveset([Moves.POLLEN_PUFF]).ability(Abilities.PARENTAL_BOND).enemyLevel(100); + await game.classicMode.startBattle([Species.MAGIKARP]); + + const target = game.scene.getEnemyPokemon()!; + + game.move.select(Moves.POLLEN_PUFF); + + await game.phaseInterceptor.to("BerryPhase"); + + expect(target.battleData.hitCount).toBe(2); + }); +}); diff --git a/test/moves/rage_fist.test.ts b/test/moves/rage_fist.test.ts index 8bcb212d60e..f44901c5aba 100644 --- a/test/moves/rage_fist.test.ts +++ b/test/moves/rage_fist.test.ts @@ -3,6 +3,7 @@ import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; import { allMoves } from "#app/data/moves/move"; +import type Move from "#app/data/moves/move"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; @@ -10,7 +11,7 @@ import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vite describe("Moves - Rage Fist", () => { let phaserGame: Phaser.Game; let game: GameManager; - const move = allMoves[Moves.RAGE_FIST]; + let move: Move; beforeAll(() => { phaserGame = new Phaser.Game({ @@ -23,6 +24,7 @@ describe("Moves - Rage Fist", () => { }); beforeEach(() => { + move = allMoves[Moves.RAGE_FIST]; game = new GameManager(phaserGame); game.override .battleType("single") diff --git a/test/moves/retaliate.test.ts b/test/moves/retaliate.test.ts index 5cc0b08ccc6..e916c9ffeaa 100644 --- a/test/moves/retaliate.test.ts +++ b/test/moves/retaliate.test.ts @@ -4,12 +4,13 @@ import GameManager from "#test/testUtils/gameManager"; import { Species } from "#enums/species"; import { Moves } from "#enums/moves"; import { allMoves } from "#app/data/moves/move"; +import type Move from "#app/data/moves/move"; describe("Moves - Retaliate", () => { let phaserGame: Phaser.Game; let game: GameManager; - const retaliate = allMoves[Moves.RETALIATE]; + let retaliate: Move; beforeAll(() => { phaserGame = new Phaser.Game({ @@ -22,6 +23,7 @@ describe("Moves - Retaliate", () => { }); beforeEach(() => { + retaliate = allMoves[Moves.RETALIATE]; game = new GameManager(phaserGame); game.override .battleType("single") diff --git a/test/moves/revival_blessing.test.ts b/test/moves/revival_blessing.test.ts index 1ceb850edea..87be20f60ad 100644 --- a/test/moves/revival_blessing.test.ts +++ b/test/moves/revival_blessing.test.ts @@ -116,12 +116,8 @@ describe("Moves - Revival Blessing", () => { }); it("should not summon multiple pokemon to the same slot when reviving the enemy ally in doubles", async () => { - game.override - .battleType("double") - .enemyMoveset([ Moves.REVIVAL_BLESSING ]) - .moveset([ Moves.SPLASH ]) - .startingWave(25); // 2nd rival battle - must have 3+ pokemon - await game.classicMode.startBattle([ Species.ARCEUS, Species.GIRATINA ]); + game.override.battleType("double").enemyMoveset([Moves.REVIVAL_BLESSING]).moveset([Moves.SPLASH]).startingWave(25); // 2nd rival battle - must have 3+ pokemon + await game.classicMode.startBattle([Species.ARCEUS, Species.GIRATINA]); const enemyFainting = game.scene.getEnemyField()[0]; diff --git a/test/moves/shell_side_arm.test.ts b/test/moves/shell_side_arm.test.ts index 47da5e1c2f7..a5b065b76cb 100644 --- a/test/moves/shell_side_arm.test.ts +++ b/test/moves/shell_side_arm.test.ts @@ -1,5 +1,6 @@ import { BattlerIndex } from "#app/battle"; import { allMoves, ShellSideArmCategoryAttr } from "#app/data/moves/move"; +import type Move from "#app/data/moves/move"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; import { Species } from "#enums/species"; @@ -10,8 +11,8 @@ import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vite describe("Moves - Shell Side Arm", () => { let phaserGame: Phaser.Game; let game: GameManager; - const shellSideArm = allMoves[Moves.SHELL_SIDE_ARM]; - const shellSideArmAttr = shellSideArm.getAttrs(ShellSideArmCategoryAttr)[0]; + let shellSideArm: Move; + let shellSideArmAttr: ShellSideArmCategoryAttr; beforeAll(() => { phaserGame = new Phaser.Game({ @@ -24,6 +25,8 @@ describe("Moves - Shell Side Arm", () => { }); beforeEach(() => { + shellSideArm = allMoves[Moves.SHELL_SIDE_ARM]; + shellSideArmAttr = shellSideArm.getAttrs(ShellSideArmCategoryAttr)[0]; game = new GameManager(phaserGame); game.override .moveset([Moves.SHELL_SIDE_ARM, Moves.SPLASH]) diff --git a/test/moves/spikes.test.ts b/test/moves/spikes.test.ts index 9bf0e5e1437..76af15777bb 100644 --- a/test/moves/spikes.test.ts +++ b/test/moves/spikes.test.ts @@ -4,6 +4,7 @@ import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; +import { ArenaTagSide, ArenaTrapTag } from "#app/data/arena-tag"; describe("Moves - Spikes", () => { let phaserGame: Phaser.Game; @@ -77,4 +78,17 @@ describe("Moves - Spikes", () => { const enemy = game.scene.getEnemyParty()[0]; expect(enemy.hp).toBeLessThan(enemy.getMaxHp()); }, 20000); + + it("should work when all targets fainted", async () => { + game.override.enemySpecies(Species.DIGLETT); + game.override.battleType("double"); + game.override.startingLevel(50); + await game.classicMode.startBattle([Species.RAYQUAZA, Species.ROWLET]); + + game.move.select(Moves.EARTHQUAKE); + game.move.select(Moves.SPIKES, 1); + await game.phaseInterceptor.to("TurnEndPhase"); + + expect(game.scene.arena.getTagOnSide(ArenaTrapTag, ArenaTagSide.ENEMY)).toBeDefined(); + }, 20000); }); diff --git a/test/moves/spit_up.test.ts b/test/moves/spit_up.test.ts index d986ae4d141..d71647bda52 100644 --- a/test/moves/spit_up.test.ts +++ b/test/moves/spit_up.test.ts @@ -7,6 +7,7 @@ import { MoveResult } from "#app/field/pokemon"; import GameManager from "#test/testUtils/gameManager"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; +import type Move from "#app/data/moves/move"; import { Species } from "#enums/species"; import Phaser from "phaser"; import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; @@ -17,7 +18,7 @@ describe("Moves - Spit Up", () => { let phaserGame: Phaser.Game; let game: GameManager; - const spitUp = allMoves[Moves.SPIT_UP]; + let spitUp: Move; beforeAll(() => { phaserGame = new Phaser.Game({ type: Phaser.HEADLESS }); @@ -28,6 +29,7 @@ describe("Moves - Spit Up", () => { }); beforeEach(() => { + spitUp = allMoves[Moves.SPIT_UP]; game = new GameManager(phaserGame); game.override.battleType("single"); diff --git a/test/moves/tera_blast.test.ts b/test/moves/tera_blast.test.ts index dffe39f4d87..c1a2b999fa0 100644 --- a/test/moves/tera_blast.test.ts +++ b/test/moves/tera_blast.test.ts @@ -1,6 +1,7 @@ import { BattlerIndex } from "#app/battle"; import { Stat } from "#enums/stat"; import { allMoves, TeraMoveCategoryAttr } from "#app/data/moves/move"; +import type Move from "#app/data/moves/move"; import { PokemonType } from "#enums/pokemon-type"; import { Abilities } from "#app/enums/abilities"; import { HitResult } from "#app/field/pokemon"; @@ -13,13 +14,16 @@ import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vite describe("Moves - Tera Blast", () => { let phaserGame: Phaser.Game; let game: GameManager; - const moveToCheck = allMoves[Moves.TERA_BLAST]; - const teraBlastAttr = moveToCheck.getAttrs(TeraMoveCategoryAttr)[0]; + + let moveToCheck: Move; + let teraBlastAttr: TeraMoveCategoryAttr; beforeAll(() => { phaserGame = new Phaser.Game({ type: Phaser.HEADLESS, }); + moveToCheck = allMoves[Moves.TERA_BLAST]; + teraBlastAttr = moveToCheck.getAttrs(TeraMoveCategoryAttr)[0]; }); afterEach(() => { diff --git a/test/moves/triple_arrows.test.ts b/test/moves/triple_arrows.test.ts index c1114b69b99..eb434b25815 100644 --- a/test/moves/triple_arrows.test.ts +++ b/test/moves/triple_arrows.test.ts @@ -1,6 +1,7 @@ import { allMoves, FlinchAttr, StatStageChangeAttr } from "#app/data/moves/move"; import { Abilities } from "#enums/abilities"; import { Moves } from "#enums/moves"; +import type Move from "#app/data/moves/move"; import { Species } from "#enums/species"; import GameManager from "#test/testUtils/gameManager"; import Phaser from "phaser"; @@ -9,14 +10,17 @@ import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vite describe("Moves - Triple Arrows", () => { let phaserGame: Phaser.Game; let game: GameManager; - const tripleArrows = allMoves[Moves.TRIPLE_ARROWS]; - const flinchAttr = tripleArrows.getAttrs(FlinchAttr)[0]; - const defDropAttr = tripleArrows.getAttrs(StatStageChangeAttr)[0]; + let tripleArrows: Move; + let flinchAttr: FlinchAttr; + let defDropAttr: StatStageChangeAttr; beforeAll(() => { phaserGame = new Phaser.Game({ type: Phaser.HEADLESS, }); + tripleArrows = allMoves[Moves.TRIPLE_ARROWS]; + flinchAttr = tripleArrows.getAttrs(FlinchAttr)[0]; + defDropAttr = tripleArrows.getAttrs(StatStageChangeAttr)[0]; }); afterEach(() => { diff --git a/test/mystery-encounter/encounter-test-utils.ts b/test/mystery-encounter/encounter-test-utils.ts index 19ec364618e..93629778e0a 100644 --- a/test/mystery-encounter/encounter-test-utils.ts +++ b/test/mystery-encounter/encounter-test-utils.ts @@ -1,3 +1,4 @@ +// biome-ignore lint/style/noNamespaceImport: Necessary for mocks import * as EncounterPhaseUtils from "#app/data/mystery-encounters/utils/encounter-phase-utils"; import { Status } from "#app/data/status-effect"; import { CommandPhase } from "#app/phases/command-phase"; @@ -48,16 +49,6 @@ export async function runMysteryEncounterToEnd( ); if (isBattle) { - game.onNextPrompt( - "DamageAnimPhase", - Mode.MESSAGE, - () => { - game.setMode(Mode.MESSAGE); - game.endPhase(); - }, - () => game.isCurrentPhase(CommandPhase), - ); - game.onNextPrompt( "CheckSwitchPhase", Mode.CONFIRM, diff --git a/test/mystery-encounter/encounters/absolute-avarice-encounter.test.ts b/test/mystery-encounter/encounters/absolute-avarice-encounter.test.ts index 3e1588f3a72..e00ce03333c 100644 --- a/test/mystery-encounter/encounters/absolute-avarice-encounter.test.ts +++ b/test/mystery-encounter/encounters/absolute-avarice-encounter.test.ts @@ -136,7 +136,7 @@ describe("Absolute Avarice - Mystery Encounter", () => { expect(scene.getCurrentPhase()?.constructor.name).toBe(CommandPhase.name); expect(enemyField.length).toBe(1); expect(enemyField[0].species.speciesId).toBe(Species.GREEDENT); - const moveset = enemyField[0].moveset.map(m => m?.moveId); + const moveset = enemyField[0].moveset.map(m => m.moveId); expect(moveset?.length).toBe(4); expect(moveset).toEqual([Moves.THRASH, Moves.BODY_PRESS, Moves.STUFF_CHEEKS, Moves.CRUNCH]); @@ -259,7 +259,7 @@ describe("Absolute Avarice - Mystery Encounter", () => { expect(partyCountBefore + 1).toBe(partyCountAfter); const greedent = scene.getPlayerParty()[scene.getPlayerParty().length - 1]; expect(greedent.species.speciesId).toBe(Species.GREEDENT); - const moveset = greedent.moveset.map(m => m?.moveId); + const moveset = greedent.moveset.map(m => m.moveId); expect(moveset?.length).toBe(4); expect(moveset).toEqual([Moves.THRASH, Moves.BODY_PRESS, Moves.STUFF_CHEEKS, Moves.SLACK_OFF]); }); diff --git a/test/mystery-encounter/encounters/dancing-lessons-encounter.test.ts b/test/mystery-encounter/encounters/dancing-lessons-encounter.test.ts index a4c1052463c..77cd65e51b9 100644 --- a/test/mystery-encounter/encounters/dancing-lessons-encounter.test.ts +++ b/test/mystery-encounter/encounters/dancing-lessons-encounter.test.ts @@ -112,7 +112,7 @@ describe("Dancing Lessons - Mystery Encounter", () => { expect(enemyField.length).toBe(1); expect(enemyField[0].species.speciesId).toBe(Species.ORICORIO); expect(enemyField[0].summonData.statStages).toEqual([1, 1, 1, 1, 0, 0, 0]); - const moveset = enemyField[0].moveset.map(m => m?.moveId); + const moveset = enemyField[0].moveset.map(m => m.moveId); expect(moveset.some(m => m === Moves.REVELATION_DANCE)).toBeTruthy(); const movePhases = phaseSpy.mock.calls.filter(p => p[0] instanceof MovePhase).map(p => p[0]); @@ -208,7 +208,7 @@ describe("Dancing Lessons - Mystery Encounter", () => { expect(partyCountBefore + 1).toBe(partyCountAfter); const oricorio = scene.getPlayerParty()[scene.getPlayerParty().length - 1]; expect(oricorio.species.speciesId).toBe(Species.ORICORIO); - const moveset = oricorio.moveset.map(m => m?.moveId); + const moveset = oricorio.moveset.map(m => m.moveId); expect(moveset?.some(m => m === Moves.REVELATION_DANCE)).toBeTruthy(); expect(moveset?.some(m => m === Moves.DRAGON_DANCE)).toBeTruthy(); }); diff --git a/test/mystery-encounter/encounters/mysterious-challengers-encounter.test.ts b/test/mystery-encounter/encounters/mysterious-challengers-encounter.test.ts index 8e825dc2c9b..f620cbd6c36 100644 --- a/test/mystery-encounter/encounters/mysterious-challengers-encounter.test.ts +++ b/test/mystery-encounter/encounters/mysterious-challengers-encounter.test.ts @@ -16,7 +16,9 @@ import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; import { initSceneWithoutEncounterPhase } from "#test/testUtils/gameManagerUtils"; import { ModifierTier } from "#app/modifier/modifier-tier"; import { MysteriousChallengersEncounter } from "#app/data/mystery-encounters/encounters/mysterious-challengers-encounter"; -import { TrainerConfig, TrainerPartyCompoundTemplate, TrainerPartyTemplate } from "#app/data/trainer-config"; +import { TrainerConfig } from "#app/data/trainers/trainer-config"; +import { TrainerPartyCompoundTemplate } from "#app/data/trainers/TrainerPartyTemplate"; +import { TrainerPartyTemplate } from "#app/data/trainers/TrainerPartyTemplate"; import { PartyMemberStrength } from "#enums/party-member-strength"; import { MysteryEncounterMode } from "#enums/mystery-encounter-mode"; import ModifierSelectUiHandler from "#app/ui/modifier-select-ui-handler"; diff --git a/test/mystery-encounter/encounters/the-strong-stuff-encounter.test.ts b/test/mystery-encounter/encounters/the-strong-stuff-encounter.test.ts index 57d55af5dac..a9e6a339d36 100644 --- a/test/mystery-encounter/encounters/the-strong-stuff-encounter.test.ts +++ b/test/mystery-encounter/encounters/the-strong-stuff-encounter.test.ts @@ -114,7 +114,7 @@ describe("The Strong Stuff - Mystery Encounter", () => { bossSegments: 5, shiny: false, customPokemonData: new CustomPokemonData({ spriteScale: 1.25 }), - nature: Nature.BOLD, + nature: Nature.HARDY, moveSet: [Moves.INFESTATION, Moves.SALT_CURE, Moves.GASTRO_ACID, Moves.HEAL_ORDER], modifierConfigs: expect.any(Array), tags: [BattlerTagType.MYSTERY_ENCOUNTER_POST_SUMMON], @@ -198,7 +198,7 @@ describe("The Strong Stuff - Mystery Encounter", () => { expect(scene.getCurrentPhase()?.constructor.name).toBe(CommandPhase.name); expect(enemyField.length).toBe(1); expect(enemyField[0].species.speciesId).toBe(Species.SHUCKLE); - expect(enemyField[0].summonData.statStages).toEqual([0, 2, 0, 2, 0, 0, 0]); + expect(enemyField[0].summonData.statStages).toEqual([0, 1, 0, 1, 0, 0, 0]); const shuckleItems = enemyField[0].getHeldItems(); expect(shuckleItems.length).toBe(5); expect(shuckleItems.find(m => m instanceof BerryModifier && m.berryType === BerryType.SITRUS)?.stackCount).toBe( diff --git a/test/mystery-encounter/encounters/trash-to-treasure-encounter.test.ts b/test/mystery-encounter/encounters/trash-to-treasure-encounter.test.ts index 90e2312e624..df7bbb9f424 100644 --- a/test/mystery-encounter/encounters/trash-to-treasure-encounter.test.ts +++ b/test/mystery-encounter/encounters/trash-to-treasure-encounter.test.ts @@ -1,30 +1,37 @@ +import type BattleScene from "#app/battle-scene"; +import * as BattleAnims from "#app/data/battle-anims"; +import { TrashToTreasureEncounter } from "#app/data/mystery-encounters/encounters/trash-to-treasure-encounter"; import * as MysteryEncounters from "#app/data/mystery-encounters/mystery-encounters"; +import * as EncounterPhaseUtils from "#app/data/mystery-encounters/utils/encounter-phase-utils"; +import { + type EnemyPartyConfig, + type EnemyPokemonConfig, + generateModifierType, +} from "#app/data/mystery-encounters/utils/encounter-phase-utils"; +import { getPokemonSpecies } from "#app/data/pokemon-species"; import { Biome } from "#app/enums/biome"; import { MysteryEncounterType } from "#app/enums/mystery-encounter-type"; import { Species } from "#app/enums/species"; -import GameManager from "#test/testUtils/gameManager"; -import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; -import { getPokemonSpecies } from "#app/data/pokemon-species"; -import * as BattleAnims from "#app/data/battle-anims"; -import * as EncounterPhaseUtils from "#app/data/mystery-encounters/utils/encounter-phase-utils"; +import { PokemonMove } from "#app/field/pokemon"; +import { HealShopCostModifier, HitHealModifier, TurnHealModifier } from "#app/modifier/modifier"; +import { ModifierTier } from "#app/modifier/modifier-tier"; +import { modifierTypes, type PokemonHeldItemModifierType } from "#app/modifier/modifier-type"; +import { CommandPhase } from "#app/phases/command-phase"; +import { MovePhase } from "#app/phases/move-phase"; +import { SelectModifierPhase } from "#app/phases/select-modifier-phase"; +import ModifierSelectUiHandler from "#app/ui/modifier-select-ui-handler"; +import { Mode } from "#app/ui/ui"; +import * as Utils from "#app/utils"; +import { Moves } from "#enums/moves"; +import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode"; +import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; import { runMysteryEncounterToEnd, skipBattleRunMysteryEncounterRewardsPhase, } from "#test/mystery-encounter/encounter-test-utils"; -import { Moves } from "#enums/moves"; -import type BattleScene from "#app/battle-scene"; -import { PokemonMove } from "#app/field/pokemon"; -import { Mode } from "#app/ui/ui"; -import ModifierSelectUiHandler from "#app/ui/modifier-select-ui-handler"; -import { HitHealModifier, HealShopCostModifier, TurnHealModifier } from "#app/modifier/modifier"; -import { MysteryEncounterOptionMode } from "#enums/mystery-encounter-option-mode"; -import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; +import GameManager from "#test/testUtils/gameManager"; import { initSceneWithoutEncounterPhase } from "#test/testUtils/gameManagerUtils"; -import { TrashToTreasureEncounter } from "#app/data/mystery-encounters/encounters/trash-to-treasure-encounter"; -import { ModifierTier } from "#app/modifier/modifier-tier"; -import { SelectModifierPhase } from "#app/phases/select-modifier-phase"; -import { CommandPhase } from "#app/phases/command-phase"; -import { MovePhase } from "#app/phases/move-phase"; +import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; const namespace = "mysteryEncounters/trashToTreasure"; const defaultParty = [Species.LAPRAS, Species.GENGAR, Species.ABRA]; @@ -73,6 +80,7 @@ describe("Trash to Treasure - Mystery Encounter", () => { }); it("should initialize fully", async () => { + vi.spyOn(Utils, "randSeedInt").mockImplementation((range, min = 0) => min + range - 1); initSceneWithoutEncounterPhase(scene, defaultParty); scene.currentBattle.mysteryEncounter = TrashToTreasureEncounter; const moveInitSpy = vi.spyOn(BattleAnims, "initMoveAnim"); @@ -85,22 +93,61 @@ describe("Trash to Treasure - Mystery Encounter", () => { TrashToTreasureEncounter.populateDialogueTokensFromRequirements(); const onInitResult = onInit!(); - expect(TrashToTreasureEncounter.enemyPartyConfigs).toEqual([ - { - levelAdditiveModifier: 0.5, - disableSwitch: true, - pokemonConfigs: [ - { - species: getPokemonSpecies(Species.GARBODOR), - isBoss: true, - shiny: false, - formIndex: 1, - bossSegmentModifier: 1, - moveSet: [Moves.PAYBACK, Moves.GUNK_SHOT, Moves.STOMPING_TANTRUM, Moves.DRAIN_PUNCH], - }, - ], - }, - ]); + const bossSpecies = getPokemonSpecies(Species.GARBODOR); + const pokemonConfig: EnemyPokemonConfig = { + species: bossSpecies, + isBoss: true, + shiny: false, // Shiny lock because of custom intro sprite + formIndex: 1, // Gmax + bossSegmentModifier: 1, // +1 Segment from normal + moveSet: [Moves.GUNK_SHOT, Moves.STOMPING_TANTRUM, Moves.HAMMER_ARM, Moves.PAYBACK], + modifierConfigs: [ + { + modifier: generateModifierType(modifierTypes.BERRY) as PokemonHeldItemModifierType, + }, + { + modifier: generateModifierType(modifierTypes.BERRY) as PokemonHeldItemModifierType, + }, + { + modifier: generateModifierType(modifierTypes.BERRY) as PokemonHeldItemModifierType, + }, + { + modifier: generateModifierType(modifierTypes.BERRY) as PokemonHeldItemModifierType, + }, + { + modifier: generateModifierType(modifierTypes.BASE_STAT_BOOSTER) as PokemonHeldItemModifierType, + }, + { + modifier: generateModifierType(modifierTypes.BASE_STAT_BOOSTER) as PokemonHeldItemModifierType, + }, + { + modifier: generateModifierType(modifierTypes.TOXIC_ORB) as PokemonHeldItemModifierType, + stackCount: Utils.randSeedInt(2, 0), + }, + { + modifier: generateModifierType(modifierTypes.SOOTHE_BELL) as PokemonHeldItemModifierType, + stackCount: Utils.randSeedInt(2, 1), + }, + { + modifier: generateModifierType(modifierTypes.LUCKY_EGG) as PokemonHeldItemModifierType, + stackCount: Utils.randSeedInt(3, 1), + }, + { + modifier: generateModifierType(modifierTypes.GOLDEN_EGG) as PokemonHeldItemModifierType, + stackCount: Utils.randSeedInt(2, 0), + }, + ], + }; + const config: EnemyPartyConfig = { + levelAdditiveModifier: 0.5, + pokemonConfigs: [pokemonConfig], + disableSwitch: true, + }; + const enemyPartyConfigs = [config]; + + expect(JSON.stringify(TrashToTreasureEncounter.enemyPartyConfigs, undefined, 2)).toEqual( + JSON.stringify(enemyPartyConfigs, undefined, 2), + ); await vi.waitFor(() => expect(moveInitSpy).toHaveBeenCalled()); await vi.waitFor(() => expect(moveLoadSpy).toHaveBeenCalled()); expect(onInitResult).toBe(true); @@ -122,7 +169,7 @@ describe("Trash to Treasure - Mystery Encounter", () => { }); }); - it("should give 2 Leftovers, 2 Shell Bell, and Black Sludge", async () => { + it("should give 2 Leftovers, 1 Shell Bell, and Black Sludge", async () => { await game.runToMysteryEncounter(MysteryEncounterType.TRASH_TO_TREASURE, defaultParty); await runMysteryEncounterToEnd(game, 1); await game.phaseInterceptor.to(SelectModifierPhase, false); @@ -134,7 +181,7 @@ describe("Trash to Treasure - Mystery Encounter", () => { const shellBell = scene.findModifier(m => m instanceof HitHealModifier) as HitHealModifier; expect(shellBell).toBeDefined(); - expect(shellBell?.stackCount).toBe(2); + expect(shellBell?.stackCount).toBe(1); const blackSludge = scene.findModifier(m => m instanceof HealShopCostModifier) as HealShopCostModifier; expect(blackSludge).toBeDefined(); @@ -178,17 +225,17 @@ describe("Trash to Treasure - Mystery Encounter", () => { expect(enemyField.length).toBe(1); expect(enemyField[0].species.speciesId).toBe(Species.GARBODOR); expect(enemyField[0].moveset).toEqual([ - new PokemonMove(Moves.PAYBACK), new PokemonMove(Moves.GUNK_SHOT), new PokemonMove(Moves.STOMPING_TANTRUM), - new PokemonMove(Moves.DRAIN_PUNCH), + new PokemonMove(Moves.HAMMER_ARM), + new PokemonMove(Moves.PAYBACK), ]); // Should have used moves pre-battle const movePhases = phaseSpy.mock.calls.filter(p => p[0] instanceof MovePhase).map(p => p[0]); expect(movePhases.length).toBe(2); expect(movePhases.filter(p => (p as MovePhase).move.moveId === Moves.TOXIC).length).toBe(1); - expect(movePhases.filter(p => (p as MovePhase).move.moveId === Moves.AMNESIA).length).toBe(1); + expect(movePhases.filter(p => (p as MovePhase).move.moveId === Moves.STOCKPILE).length).toBe(1); }); it("should have 2 Rogue, 1 Ultra, 1 Great in rewards", async () => { diff --git a/test/phases/phases.test.ts b/test/phases/phases.test.ts index 4aabeb55b9e..96225c9151c 100644 --- a/test/phases/phases.test.ts +++ b/test/phases/phases.test.ts @@ -31,7 +31,7 @@ describe("Phases", () => { it("should start the login phase", async () => { const loginPhase = new LoginPhase(); scene.unshiftPhase(loginPhase); - await game.phaseInterceptor.run(LoginPhase); + await game.phaseInterceptor.to(LoginPhase); expect(scene.ui.getMode()).to.equal(Mode.MESSAGE); }); }); @@ -40,7 +40,7 @@ describe("Phases", () => { it("should start the title phase", async () => { const titlePhase = new TitlePhase(); scene.unshiftPhase(titlePhase); - await game.phaseInterceptor.run(TitlePhase); + await game.phaseInterceptor.to(TitlePhase); expect(scene.ui.getMode()).to.equal(Mode.TITLE); }); }); @@ -49,7 +49,7 @@ describe("Phases", () => { it("should start the unavailable phase", async () => { const unavailablePhase = new UnavailablePhase(); scene.unshiftPhase(unavailablePhase); - await game.phaseInterceptor.run(UnavailablePhase); + await game.phaseInterceptor.to(UnavailablePhase); expect(scene.ui.getMode()).to.equal(Mode.UNAVAILABLE); }, 20000); }); diff --git a/test/phases/select-modifier-phase.test.ts b/test/phases/select-modifier-phase.test.ts index bb3d5debc7c..d352acea77a 100644 --- a/test/phases/select-modifier-phase.test.ts +++ b/test/phases/select-modifier-phase.test.ts @@ -48,8 +48,8 @@ describe("SelectModifierPhase", () => { it("should start a select modifier phase", async () => { initSceneWithoutEncounterPhase(scene, [Species.ABRA, Species.VOLCARONA]); const selectModifierPhase = new SelectModifierPhase(); - scene.pushPhase(selectModifierPhase); - await game.phaseInterceptor.run(SelectModifierPhase); + scene.unshiftPhase(selectModifierPhase); + await game.phaseInterceptor.to(SelectModifierPhase); expect(scene.ui.getMode()).to.equal(Mode.MODIFIER_SELECT); }); diff --git a/test/plugins/api/pokerogue-account-api.test.ts b/test/plugins/api/pokerogue-account-api.test.ts index 9ec98b6a59f..e7e1b2d52b0 100644 --- a/test/plugins/api/pokerogue-account-api.test.ts +++ b/test/plugins/api/pokerogue-account-api.test.ts @@ -4,11 +4,17 @@ import { PokerogueAccountApi } from "#app/plugins/api/pokerogue-account-api"; import { getApiBaseUrl } from "#test/testUtils/testUtils"; import * as Utils from "#app/utils"; import { http, HttpResponse } from "msw"; -import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; +import { beforeAll, afterEach, beforeEach, describe, expect, it, vi } from "vitest"; +import { initServerForApiTests } from "#test/testUtils/testFileInitialization"; +import type { SetupServerApi } from "msw/node"; const apiBase = getApiBaseUrl(); const accountApi = new PokerogueAccountApi(apiBase); -const { server } = global; +let server: SetupServerApi; + +beforeAll(async () => { + server = await initServerForApiTests(); +}); afterEach(() => { server.resetHandlers(); diff --git a/test/plugins/api/pokerogue-admin-api.test.ts b/test/plugins/api/pokerogue-admin-api.test.ts index 0ce727b88da..08c4cf0dc45 100644 --- a/test/plugins/api/pokerogue-admin-api.test.ts +++ b/test/plugins/api/pokerogue-admin-api.test.ts @@ -9,11 +9,17 @@ import type { import { PokerogueAdminApi } from "#app/plugins/api/pokerogue-admin-api"; import { getApiBaseUrl } from "#test/testUtils/testUtils"; import { http, HttpResponse } from "msw"; -import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; +import { beforeAll, afterEach, beforeEach, describe, expect, it, vi } from "vitest"; +import { initServerForApiTests } from "#test/testUtils/testFileInitialization"; +import type { SetupServerApi } from "msw/node"; const apiBase = getApiBaseUrl(); const adminApi = new PokerogueAdminApi(apiBase); -const { server } = global; +let server: SetupServerApi; + +beforeAll(async () => { + server = await initServerForApiTests(); +}); afterEach(() => { server.resetHandlers(); diff --git a/test/plugins/api/pokerogue-api.test.ts b/test/plugins/api/pokerogue-api.test.ts index 241453866a5..c53a38e23ab 100644 --- a/test/plugins/api/pokerogue-api.test.ts +++ b/test/plugins/api/pokerogue-api.test.ts @@ -2,10 +2,16 @@ import type { TitleStatsResponse } from "#app/@types/PokerogueApi"; import { pokerogueApi } from "#app/plugins/api/pokerogue-api"; import { getApiBaseUrl } from "#test/testUtils/testUtils"; import { http, HttpResponse } from "msw"; -import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; +import { beforeAll, afterEach, beforeEach, describe, expect, it, vi } from "vitest"; +import { initServerForApiTests } from "#test/testUtils/testFileInitialization"; +import type { SetupServerApi } from "msw/node"; const apiBase = getApiBaseUrl(); -const { server } = global; +let server: SetupServerApi; + +beforeAll(async () => { + server = await initServerForApiTests(); +}); afterEach(() => { server.resetHandlers(); diff --git a/test/plugins/api/pokerogue-daily-api.test.ts b/test/plugins/api/pokerogue-daily-api.test.ts index 95d938e6625..563e6d09009 100644 --- a/test/plugins/api/pokerogue-daily-api.test.ts +++ b/test/plugins/api/pokerogue-daily-api.test.ts @@ -3,11 +3,17 @@ import { PokerogueDailyApi } from "#app/plugins/api/pokerogue-daily-api"; import { getApiBaseUrl } from "#test/testUtils/testUtils"; import { ScoreboardCategory, type RankingEntry } from "#app/ui/daily-run-scoreboard"; import { http, HttpResponse } from "msw"; -import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; +import { beforeAll, afterEach, beforeEach, describe, expect, it, vi } from "vitest"; +import { initServerForApiTests } from "#test/testUtils/testFileInitialization"; +import type { SetupServerApi } from "msw/node"; const apiBase = getApiBaseUrl(); const dailyApi = new PokerogueDailyApi(apiBase); -const { server } = global; +let server: SetupServerApi; + +beforeAll(async () => { + server = await initServerForApiTests(); +}); afterEach(() => { server.resetHandlers(); diff --git a/test/plugins/api/pokerogue-savedata-api.test.ts b/test/plugins/api/pokerogue-savedata-api.test.ts index 47eafa0a933..481ba62c19d 100644 --- a/test/plugins/api/pokerogue-savedata-api.test.ts +++ b/test/plugins/api/pokerogue-savedata-api.test.ts @@ -2,11 +2,17 @@ import type { UpdateAllSavedataRequest } from "#app/@types/PokerogueSavedataApi" import { PokerogueSavedataApi } from "#app/plugins/api/pokerogue-savedata-api"; import { getApiBaseUrl } from "#test/testUtils/testUtils"; import { http, HttpResponse } from "msw"; -import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; +import { beforeAll, afterEach, beforeEach, describe, expect, it, vi } from "vitest"; +import { initServerForApiTests } from "#test/testUtils/testFileInitialization"; +import type { SetupServerApi } from "msw/node"; const apiBase = getApiBaseUrl(); const savedataApi = new PokerogueSavedataApi(apiBase); -const { server } = global; +let server: SetupServerApi; + +beforeAll(async () => { + server = await initServerForApiTests(); +}); afterEach(() => { server.resetHandlers(); diff --git a/test/plugins/api/pokerogue-session-savedata-api.test.ts b/test/plugins/api/pokerogue-session-savedata-api.test.ts index 67abc9c9336..d4c235ac51a 100644 --- a/test/plugins/api/pokerogue-session-savedata-api.test.ts +++ b/test/plugins/api/pokerogue-session-savedata-api.test.ts @@ -10,11 +10,17 @@ import { PokerogueSessionSavedataApi } from "#app/plugins/api/pokerogue-session- import type { SessionSaveData } from "#app/system/game-data"; import { getApiBaseUrl } from "#test/testUtils/testUtils"; import { http, HttpResponse } from "msw"; -import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; +import { beforeAll, afterEach, beforeEach, describe, expect, it, vi } from "vitest"; +import { initServerForApiTests } from "#test/testUtils/testFileInitialization"; +import type { SetupServerApi } from "msw/node"; const apiBase = getApiBaseUrl(); const sessionSavedataApi = new PokerogueSessionSavedataApi(apiBase); -const { server } = global; + +let server: SetupServerApi; +beforeAll(async () => { + server = await initServerForApiTests(); +}); afterEach(() => { server.resetHandlers(); diff --git a/test/plugins/api/pokerogue-system-savedata-api.test.ts b/test/plugins/api/pokerogue-system-savedata-api.test.ts index 81d863049f0..0c69ab8f922 100644 --- a/test/plugins/api/pokerogue-system-savedata-api.test.ts +++ b/test/plugins/api/pokerogue-system-savedata-api.test.ts @@ -6,13 +6,20 @@ import type { } from "#app/@types/PokerogueSystemSavedataApi"; import { PokerogueSystemSavedataApi } from "#app/plugins/api/pokerogue-system-savedata-api"; import type { SystemSaveData } from "#app/system/game-data"; +import { initServerForApiTests } from "#test/testUtils/testFileInitialization"; import { getApiBaseUrl } from "#test/testUtils/testUtils"; import { http, HttpResponse } from "msw"; -import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; +import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; +import type { SetupServerApi } from "msw/node"; const apiBase = getApiBaseUrl(); const systemSavedataApi = new PokerogueSystemSavedataApi(getApiBaseUrl()); -const { server } = global; + +let server: SetupServerApi; + +beforeAll(async () => { + server = await initServerForApiTests(); +}); afterEach(() => { server.resetHandlers(); diff --git a/test/pre.test.ts b/test/pre.test.ts deleted file mode 100644 index 6ed29dce481..00000000000 --- a/test/pre.test.ts +++ /dev/null @@ -1,6 +0,0 @@ -import Overrides, { defaultOverrides } from "#app/overrides"; -import { expect, test } from "vitest"; - -test("Overrides are default values", () => { - expect(Overrides).toEqual(defaultOverrides); -}); diff --git a/test/sprites/pokemonSprite.test.ts b/test/sprites/pokemonSprite.test.ts index 5bd08a58cda..a008b75b42e 100644 --- a/test/sprites/pokemonSprite.test.ts +++ b/test/sprites/pokemonSprite.test.ts @@ -3,8 +3,10 @@ import fs from "fs"; import path from "path"; import { beforeAll, describe, expect, it } from "vitest"; import _masterlist from "../../public/images/pokemon/variant/_masterlist.json"; +import _exp_masterlist from "../../public/images/pokemon/variant/_exp_masterlist.json"; type PokemonVariantMasterlist = typeof _masterlist; +type PokemonExpVariantMasterlist = typeof _exp_masterlist; const deepCopy = (data: any) => { return JSON.parse(JSON.stringify(data)); @@ -12,7 +14,7 @@ const deepCopy = (data: any) => { describe("check if every variant's sprite are correctly set", () => { let masterlist: PokemonVariantMasterlist; - let expVariant: PokemonVariantMasterlist["exp"]; + let expVariant: PokemonExpVariantMasterlist; let femaleVariant: PokemonVariantMasterlist["female"]; let backVariant: PokemonVariantMasterlist["back"]; let rootDir: string; @@ -20,13 +22,12 @@ describe("check if every variant's sprite are correctly set", () => { beforeAll(() => { rootDir = `${getAppRootDir()}${path.sep}public${path.sep}images${path.sep}pokemon${path.sep}variant${path.sep}`; masterlist = deepCopy(_masterlist); - expVariant = masterlist.exp; + expVariant = deepCopy(_exp_masterlist); femaleVariant = masterlist.female; backVariant = masterlist.back; - //@ts-ignore - delete masterlist.exp; //TODO: resolve ts-ignore - //@ts-ignore - delete masterlist.female; //TODO: resolve ts-ignore + + // @ts-ignore + delete masterlist.female; // TODO: resolve ts-ignore //@ts-ignore delete masterlist.back; //TODO: resolve ts-ignore }); diff --git a/test/testUtils/gameManager.ts b/test/testUtils/gameManager.ts index 0ebc83cae31..390e71af126 100644 --- a/test/testUtils/gameManager.ts +++ b/test/testUtils/gameManager.ts @@ -55,6 +55,9 @@ import TextInterceptor from "#test/testUtils/TextInterceptor"; import { AES, enc } from "crypto-js"; import fs from "node:fs"; import { expect, vi } from "vitest"; +import { globalScene } from "#app/global-scene"; +import type StarterSelectUiHandler from "#app/ui/starter-select-ui-handler"; +import { MockFetch } from "#test/testUtils/mocks/mockFetch"; /** * Class to manage the game state and transitions between phases. @@ -84,10 +87,34 @@ export default class GameManager { ErrorInterceptor.getInstance().clear(); BattleScene.prototype.randBattleSeedInt = (range, min = 0) => min + range - 1; // This simulates a max roll this.gameWrapper = new GameWrapper(phaserGame, bypassLogin); - this.scene = new BattleScene(); + + let firstTimeScene = false; + + if (globalScene) { + this.scene = globalScene; + } else { + this.scene = new BattleScene(); + this.gameWrapper.setScene(this.scene); + firstTimeScene = true; + } + this.phaseInterceptor = new PhaseInterceptor(this.scene); + + if (!firstTimeScene) { + this.scene.reset(false, true); + (this.scene.ui.handlers[Mode.STARTER_SELECT] as StarterSelectUiHandler).clearStarterPreferences(); + this.scene.clearAllPhases(); + + // Must be run after phase interceptor has been initialized. + + this.scene.pushPhase(new LoginPhase()); + this.scene.pushPhase(new TitlePhase()); + this.scene.shiftPhase(); + + this.gameWrapper.scene = this.scene; + } + this.textInterceptor = new TextInterceptor(this.scene); - this.gameWrapper.setScene(this.scene); this.override = new OverridesHelper(this); this.move = new MoveHelper(this); this.classicMode = new ClassicModeHelper(this); @@ -96,9 +123,12 @@ export default class GameManager { this.settings = new SettingsHelper(this); this.reload = new ReloadHelper(this); this.modifiers = new ModifierHelper(this); + this.override.sanitizeOverrides(); // Disables Mystery Encounters on all tests (can be overridden at test level) this.override.mysteryEncounterChance(0); + + global.fetch = vi.fn(MockFetch) as any; } /** @@ -292,7 +322,7 @@ export default class GameManager { const move = (this.scene.getCurrentPhase() as SelectTargetPhase) .getPokemon() .getMoveset() - [movePosition]!.getMove(); // TODO: is the bang correct? + [movePosition].getMove(); if (!move.isMultiTarget()) { handler.setCursor(targetIndex !== undefined ? targetIndex : BattlerIndex.ENEMY); } diff --git a/test/testUtils/gameManagerUtils.ts b/test/testUtils/gameManagerUtils.ts index ae6c11f5efa..11636bd66b4 100644 --- a/test/testUtils/gameManagerUtils.ts +++ b/test/testUtils/gameManagerUtils.ts @@ -99,7 +99,7 @@ export function waitUntil(truth): Promise { export function getMovePosition(scene: BattleScene, pokemonIndex: 0 | 1, move: Moves): number { const playerPokemon = scene.getPlayerField()[pokemonIndex]; const moveSet = playerPokemon.getMoveset(); - const index = moveSet.findIndex(m => m?.moveId === move && m?.ppUsed < m?.getMovePp()); + const index = moveSet.findIndex(m => m.moveId === move && m.ppUsed < m.getMovePp()); console.log(`Move position for ${Moves[move]} (=${move}):`, index); return index; } diff --git a/test/testUtils/gameWrapper.ts b/test/testUtils/gameWrapper.ts index 6af36f22d24..02865701ed0 100644 --- a/test/testUtils/gameWrapper.ts +++ b/test/testUtils/gameWrapper.ts @@ -1,44 +1,26 @@ -/* eslint-disable */ -// @ts-nocheck +// @ts-nocheck - TODO: remove this import BattleScene, * as battleScene from "#app/battle-scene"; import { MoveAnim } from "#app/data/battle-anims"; import Pokemon from "#app/field/pokemon"; -import * as Utils from "#app/utils"; +import { setCookie, sessionIdKey } from "#app/utils"; import { blobToString } from "#test/testUtils/gameManagerUtils"; import { MockClock } from "#test/testUtils/mocks/mockClock"; -import mockConsoleLog from "#test/testUtils/mocks/mockConsoleLog"; import { MockFetch } from "#test/testUtils/mocks/mockFetch"; import MockLoader from "#test/testUtils/mocks/mockLoader"; -import mockLocalStorage from "#test/testUtils/mocks/mockLocalStorage"; -import MockImage from "#test/testUtils/mocks/mocksContainer/mockImage"; import MockTextureManager from "#test/testUtils/mocks/mockTextureManager"; import fs from "node:fs"; import Phaser from "phaser"; -import InputText from "phaser3-rex-plugins/plugins/inputtext"; -import BBCodeText from "phaser3-rex-plugins/plugins/bbcodetext"; import { vi } from "vitest"; +import { version } from "../../package.json"; import { MockGameObjectCreator } from "./mocks/mockGameObjectCreator"; +import { MockTimedEventManager } from "./mocks/mockTimedEventManager"; import InputManager = Phaser.Input.InputManager; import KeyboardManager = Phaser.Input.Keyboard.KeyboardManager; import KeyboardPlugin = Phaser.Input.Keyboard.KeyboardPlugin; import GamepadPlugin = Phaser.Input.Gamepad.GamepadPlugin; import EventEmitter = Phaser.Events.EventEmitter; import UpdateList = Phaser.GameObjects.UpdateList; -import { version } from "../../package.json"; -import { MockTimedEventManager } from "./mocks/mockTimedEventManager"; -Object.defineProperty(window, "localStorage", { - value: mockLocalStorage(), -}); -Object.defineProperty(window, "console", { - value: mockConsoleLog(false), -}); - -BBCodeText.prototype.destroy = () => null; -BBCodeText.prototype.resize = () => null; -InputText.prototype.setElement = () => null; -InputText.prototype.resize = () => null; -Phaser.GameObjects.Image = MockImage; window.URL.createObjectURL = (blob: Blob) => { blobToString(blob).then((data: string) => { localStorage.setItem("toExport", data); @@ -47,31 +29,12 @@ window.URL.createObjectURL = (blob: Blob) => { }; navigator.getGamepads = () => []; global.fetch = vi.fn(MockFetch); -Utils.setCookie(Utils.sessionIdKey, "fake_token"); +setCookie(sessionIdKey, "fake_token"); window.matchMedia = () => ({ matches: false, }); -/** - * Sets this object's position relative to another object with a given offset - * @param guideObject {@linkcode Phaser.GameObjects.GameObject} to base the position off of - * @param x The relative x position - * @param y The relative y position - */ -const setPositionRelative = function (guideObject: any, x: number, y: number) { - const offsetX = guideObject.width * (-0.5 + (0.5 - guideObject.originX)); - const offsetY = guideObject.height * (-0.5 + (0.5 - guideObject.originY)); - this.setPosition(guideObject.x + offsetX + x, guideObject.y + offsetY + y); -}; - -Phaser.GameObjects.Container.prototype.setPositionRelative = setPositionRelative; -Phaser.GameObjects.Sprite.prototype.setPositionRelative = setPositionRelative; -Phaser.GameObjects.Image.prototype.setPositionRelative = setPositionRelative; -Phaser.GameObjects.NineSlice.prototype.setPositionRelative = setPositionRelative; -Phaser.GameObjects.Text.prototype.setPositionRelative = setPositionRelative; -Phaser.GameObjects.Rectangle.prototype.setPositionRelative = setPositionRelative; - export default class GameWrapper { public game: Phaser.Game; public scene: BattleScene; diff --git a/test/testUtils/helpers/overridesHelper.ts b/test/testUtils/helpers/overridesHelper.ts index e69e05bce45..0ed1511255b 100644 --- a/test/testUtils/helpers/overridesHelper.ts +++ b/test/testUtils/helpers/overridesHelper.ts @@ -1,12 +1,9 @@ -import type { Variant } from "#app/data/variant"; +import type { Variant } from "#app/sprites/variant"; import { Weather } from "#app/data/weather"; import { Abilities } from "#app/enums/abilities"; -import * as GameMode from "#app/game-mode"; -import type { GameModes } from "#app/game-mode"; -import { getGameMode } from "#app/game-mode"; import type { ModifierOverride } from "#app/modifier/modifier-type"; import type { BattleStyle } from "#app/overrides"; -import Overrides from "#app/overrides"; +import Overrides, { defaultOverrides } from "#app/overrides"; import type { Unlockables } from "#app/system/unlockables"; import { Biome } from "#enums/biome"; import { Moves } from "#enums/moves"; @@ -15,8 +12,9 @@ import type { MysteryEncounterType } from "#enums/mystery-encounter-type"; import { Species } from "#enums/species"; import { StatusEffect } from "#enums/status-effect"; import type { WeatherType } from "#enums/weather-type"; -import { vi } from "vitest"; +import { expect, vi } from "vitest"; import { GameManagerHelper } from "./gameManagerHelper"; +import { shiftCharCodes } from "#app/utils"; /** * Helper to handle overrides in tests @@ -226,12 +224,7 @@ export class OverridesHelper extends GameManagerHelper { * @returns `this` */ public disableTrainerWaves(): this { - const realFn = getGameMode; - vi.spyOn(GameMode, "getGameMode").mockImplementation((gameMode: GameModes) => { - const mode = realFn(gameMode); - mode.hasTrainers = false; - return mode; - }); + vi.spyOn(Overrides, "DISABLE_STANDARD_TRAINERS_OVERRIDE", "get").mockReturnValue(true); this.log("Standard trainer waves are disabled!"); return this; } @@ -263,11 +256,8 @@ export class OverridesHelper extends GameManagerHelper { * @returns `this` */ public seed(seed: string): this { - vi.spyOn(this.game.scene, "resetSeed").mockImplementation(() => { - this.game.scene.waveSeed = seed; - Phaser.Math.RND.sow([seed]); - this.game.scene.rngCounter = 0; - }); + // Shift the seed here with a negative wave number, to compensate for `resetSeed()` shifting the seed itself. + this.game.scene.setSeed(shiftCharCodes(seed, (this.game.scene.currentBattle?.waveIndex ?? 0) * -1)); this.game.scene.resetSeed(); this.log(`Seed set to "${seed}"!`); return this; @@ -539,4 +529,14 @@ export class OverridesHelper extends GameManagerHelper { private log(...params: any[]) { console.log("Overrides:", ...params); } + + public sanitizeOverrides(): void { + for (const key of Object.keys(defaultOverrides)) { + if (Overrides[key] !== defaultOverrides[key]) { + vi.spyOn(Overrides, key as any, "get").mockReturnValue(defaultOverrides[key]); + } + } + expect(Overrides).toEqual(defaultOverrides); + this.log("Sanitizing all overrides!"); + } } diff --git a/test/testUtils/listenersManager.ts b/test/testUtils/listenersManager.ts new file mode 100644 index 00000000000..da624aa8a56 --- /dev/null +++ b/test/testUtils/listenersManager.ts @@ -0,0 +1,41 @@ +import { expect } from "vitest"; + +/** + * Whether or not it is currently the first time running this manager. + */ +let firstTime = true; + +/** + * The list of listeners that were present during the first time this manager is run. + * These initial listeners are needed throughout the entire test suite, so we never remove them. + */ +const initialListeners: NodeJS.MessageListener[] = []; + +/** + * The current listener that is only needed for the current test file. + * We plan to delete it during the next test file, when it is no longer needed. + */ +let currentListener: NodeJS.MessageListener | null; + +export function manageListeners() { + if (firstTime) { + initialListeners.push(...process.listeners("message")); + } else { + expect(process.listeners("message").length).toBeLessThan(7); + + // Remove the listener that was used during the previous test file + if (currentListener) { + process.removeListener("message", currentListener); + currentListener = null; + } + + // Find the new listener that is being used for the current test file + process.listeners("message").forEach(fn => { + if (!initialListeners.includes(fn)) { + currentListener = fn; + } + }); + } + + firstTime = false; +} diff --git a/test/testUtils/mocks/mockConsoleLog.ts b/test/testUtils/mocks/mockConsoleLog.ts index 808b6ea4d4d..f54d41fea3e 100644 --- a/test/testUtils/mocks/mockConsoleLog.ts +++ b/test/testUtils/mocks/mockConsoleLog.ts @@ -1,82 +1,80 @@ -const MockConsoleLog = (_logDisabled = false, _phaseText = false) => { - let logs: any[] = []; - const logDisabled: boolean = _logDisabled; - const phaseText: boolean = _phaseText; - const originalLog = console.log; - const originalError = console.error; - const originalDebug = console.debug; - const originalWarn = console.warn; - const notified: any[] = []; +const originalLog = console.log; +const originalError = console.error; +const originalDebug = console.debug; +const originalWarn = console.warn; - const blacklist = ["Phaser", "variant icon does not exist", 'Texture "%s" not found']; - const whitelist = ["Phase"]; +const blacklist = ["Phaser", "variant icon does not exist", 'Texture "%s" not found']; +const whitelist = ["Phase"]; - return { - log(...args) { - const argsStr = this.getStr(args); - logs.push(argsStr); - if (logDisabled && !phaseText) { - return; - } - if ((phaseText && !whitelist.some(b => argsStr.includes(b))) || blacklist.some(b => argsStr.includes(b))) { - return; - } - originalLog(args); - }, - error(...args) { - const argsStr = this.getStr(args); - logs.push(argsStr); - originalError(args); // Appelle le console.error originel - }, - debug(...args) { - const argsStr = this.getStr(args); - logs.push(argsStr); - if (logDisabled && !phaseText) { - return; - } - if (!whitelist.some(b => argsStr.includes(b)) || blacklist.some(b => argsStr.includes(b))) { - return; - } - originalDebug(args); - }, - warn(...args) { - const argsStr = this.getStr(args); - logs.push(args); - if (logDisabled && !phaseText) { - return; - } - if (!whitelist.some(b => argsStr.includes(b)) || blacklist.some(b => argsStr.includes(b))) { - return; - } - originalWarn(args); - }, - notify(msg) { - originalLog(msg); - notified.push(msg); - }, - getLogs() { - return logs; - }, - clearLogs() { - logs = []; - }, - getStr(...args) { - return args - .map(arg => { - if (typeof arg === "object" && arg !== null) { - // Handle objects including arrays - return JSON.stringify(arg, (_key, value) => (typeof value === "bigint" ? value.toString() : value)); - } - if (typeof arg === "bigint") { - // Handle BigInt values - return arg.toString(); - } - // Handle all other types +export class MockConsoleLog { + constructor( + private logDisabled = false, + private phaseText = false, + ) {} + private logs: any[] = []; + private notified: any[] = []; + + public log(...args) { + const argsStr = this.getStr(args); + this.logs.push(argsStr); + if (this.logDisabled && !this.phaseText) { + return; + } + if ((this.phaseText && !whitelist.some(b => argsStr.includes(b))) || blacklist.some(b => argsStr.includes(b))) { + return; + } + originalLog(args); + } + public error(...args) { + const argsStr = this.getStr(args); + this.logs.push(argsStr); + originalError(args); // Appelle le console.error originel + } + public debug(...args) { + const argsStr = this.getStr(args); + this.logs.push(argsStr); + if (this.logDisabled && !this.phaseText) { + return; + } + if (!whitelist.some(b => argsStr.includes(b)) || blacklist.some(b => argsStr.includes(b))) { + return; + } + originalDebug(args); + } + warn(...args) { + const argsStr = this.getStr(args); + this.logs.push(args); + if (this.logDisabled && !this.phaseText) { + return; + } + if (!whitelist.some(b => argsStr.includes(b)) || blacklist.some(b => argsStr.includes(b))) { + return; + } + originalWarn(args); + } + notify(msg) { + originalLog(msg); + this.notified.push(msg); + } + getLogs() { + return this.logs; + } + clearLogs() { + this.logs = []; + } + getStr(...args) { + return args + .map(arg => { + if (typeof arg === "object" && arg !== null) { + // Handle objects including arrays + return JSON.stringify(arg, (_key, value) => (typeof value === "bigint" ? value.toString() : value)); + } + if (typeof arg === "bigint") { + // Handle BigInt values return arg.toString(); - }) - .join(";"); - }, - }; -}; - -export default MockConsoleLog; + } + return arg.toString(); + }) + .join(";"); + } +} diff --git a/test/testUtils/mocks/mockContextCanvas.ts b/test/testUtils/mocks/mockContextCanvas.ts new file mode 100644 index 00000000000..a69f039c5e9 --- /dev/null +++ b/test/testUtils/mocks/mockContextCanvas.ts @@ -0,0 +1,26 @@ +/** + * A minimal stub object to mock HTMLCanvasElement + */ +export const mockCanvas: any = { + width: 0, + getContext() { + return mockContext; + }, +}; +/** + * A minimal stub object to mock CanvasRenderingContext2D + */ +export const mockContext: any = { + font: "", + measureText: () => { + return {}; + }, + save: () => {}, + scale: () => {}, + clearRect: () => {}, + fillRect: () => {}, + fillText: () => {}, + getImageData: () => {}, + canvas: mockCanvas, + restore: () => {}, +}; diff --git a/test/testUtils/mocks/mockLocalStorage.ts b/test/testUtils/mocks/mockLocalStorage.ts index 235aa76f664..6b336841ad6 100644 --- a/test/testUtils/mocks/mockLocalStorage.ts +++ b/test/testUtils/mocks/mockLocalStorage.ts @@ -1,4 +1,4 @@ -const mockLocalStorage = () => { +export const mockLocalStorage = () => { let store = {} as Storage; return { @@ -23,5 +23,3 @@ const mockLocalStorage = () => { }, }; }; - -export default mockLocalStorage; diff --git a/test/testUtils/mocks/mockTextureManager.ts b/test/testUtils/mocks/mockTextureManager.ts index fe249c5a5f7..585ee0a674a 100644 --- a/test/testUtils/mocks/mockTextureManager.ts +++ b/test/testUtils/mocks/mockTextureManager.ts @@ -1,5 +1,5 @@ import MockContainer from "#test/testUtils/mocks/mocksContainer/mockContainer"; -import MockImage from "#test/testUtils/mocks/mocksContainer/mockImage"; +import { MockImage } from "#test/testUtils/mocks/mocksContainer/mockImage"; import MockNineslice from "#test/testUtils/mocks/mocksContainer/mockNineslice"; import MockPolygon from "#test/testUtils/mocks/mocksContainer/mockPolygon"; import MockRectangle from "#test/testUtils/mocks/mocksContainer/mockRectangle"; diff --git a/test/testUtils/mocks/mocksContainer/mockContainer.ts b/test/testUtils/mocks/mocksContainer/mockContainer.ts index 0a792c6fc79..5e739fbe3cc 100644 --- a/test/testUtils/mocks/mocksContainer/mockContainer.ts +++ b/test/testUtils/mocks/mocksContainer/mockContainer.ts @@ -215,4 +215,10 @@ export default class MockContainer implements MockGameObject { } disableInteractive = () => null; + + each(method) { + for (const item of this.list) { + method(item); + } + } } diff --git a/test/testUtils/mocks/mocksContainer/mockImage.ts b/test/testUtils/mocks/mocksContainer/mockImage.ts index 768fcfeb765..d20b4663771 100644 --- a/test/testUtils/mocks/mocksContainer/mockImage.ts +++ b/test/testUtils/mocks/mocksContainer/mockImage.ts @@ -1,6 +1,6 @@ import MockContainer from "#test/testUtils/mocks/mocksContainer/mockContainer"; -export default class MockImage extends MockContainer { +export class MockImage extends MockContainer { private texture; constructor(textureManager, x, y, texture) { diff --git a/test/testUtils/mocks/mocksContainer/mockRectangle.ts b/test/testUtils/mocks/mocksContainer/mockRectangle.ts index eec431d8ada..7bdf343759d 100644 --- a/test/testUtils/mocks/mocksContainer/mockRectangle.ts +++ b/test/testUtils/mocks/mocksContainer/mockRectangle.ts @@ -72,4 +72,6 @@ export default class MockRectangle implements MockGameObject { setScale(_scale) { // return this.phaserText.setScale(scale); } + + off() {} } diff --git a/test/testUtils/testFileInitialization.ts b/test/testUtils/testFileInitialization.ts new file mode 100644 index 00000000000..2b41f3aa29a --- /dev/null +++ b/test/testUtils/testFileInitialization.ts @@ -0,0 +1,117 @@ +import { SESSION_ID_COOKIE_NAME } from "#app/constants"; +import { initLoggedInUser } from "#app/account"; +import { initAbilities } from "#app/data/ability"; +import { initBiomes } from "#app/data/balance/biomes"; +import { initEggMoves } from "#app/data/balance/egg-moves"; +import { initPokemonPrevolutions } from "#app/data/balance/pokemon-evolutions"; +import { initMoves } from "#app/data/moves/move"; +import { initMysteryEncounters } from "#app/data/mystery-encounters/mystery-encounters"; +import { initPokemonForms } from "#app/data/pokemon-forms"; +import { initSpecies } from "#app/data/pokemon-species"; +import { initAchievements } from "#app/system/achv"; +import { initVouchers } from "#app/system/voucher"; +import { initStatsKeys } from "#app/ui/game-stats-ui-handler"; +import { setCookie } from "#app/utils"; +import { blobToString } from "#test/testUtils/gameManagerUtils"; +import { MockConsoleLog } from "#test/testUtils/mocks/mockConsoleLog"; +import { mockContext } from "#test/testUtils/mocks/mockContextCanvas"; +import { mockLocalStorage } from "#test/testUtils/mocks/mockLocalStorage"; +import { MockImage } from "#test/testUtils/mocks/mocksContainer/mockImage"; +import Phaser from "phaser"; +import InputText from "phaser3-rex-plugins/plugins/inputtext"; +import BBCodeText from "phaser3-rex-plugins/plugins/bbcodetext"; +import { manageListeners } from "./listenersManager"; + +let wasInitialized = false; +/** + * An initialization function that is run at the beginning of every test file (via `beforeAll()`). + */ +export function initTestFile() { + // Set the timezone to UTC for tests. + process.env.TZ = "UTC"; + + Object.defineProperty(window, "localStorage", { + value: mockLocalStorage(), + }); + Object.defineProperty(window, "console", { + value: new MockConsoleLog(false), + }); + Object.defineProperty(document, "fonts", { + writable: true, + value: { + add: () => {}, + }, + }); + + BBCodeText.prototype.destroy = () => null; + // @ts-ignore + BBCodeText.prototype.resize = () => null; + InputText.prototype.setElement = () => null as any; + InputText.prototype.resize = () => null as any; + Phaser.GameObjects.Image = MockImage as any; + window.URL.createObjectURL = (blob: Blob) => { + blobToString(blob).then((data: string) => { + localStorage.setItem("toExport", data); + }); + return null as any; + }; + navigator.getGamepads = () => []; + setCookie(SESSION_ID_COOKIE_NAME, "fake_token"); + + window.matchMedia = () => + ({ + matches: false, + }) as any; + + /** + * Sets this object's position relative to another object with a given offset + * @param guideObject {@linkcode Phaser.GameObjects.GameObject} to base the position off of + * @param x The relative x position + * @param y The relative y position + */ + const setPositionRelative = function (guideObject: any, x: number, y: number) { + const offsetX = guideObject.width * (-0.5 + (0.5 - guideObject.originX)); + const offsetY = guideObject.height * (-0.5 + (0.5 - guideObject.originY)); + this.setPosition(guideObject.x + offsetX + x, guideObject.y + offsetY + y); + }; + + Phaser.GameObjects.Container.prototype.setPositionRelative = setPositionRelative; + Phaser.GameObjects.Sprite.prototype.setPositionRelative = setPositionRelative; + Phaser.GameObjects.Image.prototype.setPositionRelative = setPositionRelative; + Phaser.GameObjects.NineSlice.prototype.setPositionRelative = setPositionRelative; + Phaser.GameObjects.Text.prototype.setPositionRelative = setPositionRelative; + Phaser.GameObjects.Rectangle.prototype.setPositionRelative = setPositionRelative; + HTMLCanvasElement.prototype.getContext = () => mockContext; + + // Initialize all of these things if and only if they have not been initialized yet + // initSpecies(); + if (!wasInitialized) { + wasInitialized = true; + initVouchers(); + initAchievements(); + initStatsKeys(); + initPokemonPrevolutions(); + initBiomes(); + initEggMoves(); + initPokemonForms(); + initSpecies(); + initMoves(); + initAbilities(); + initLoggedInUser(); + initMysteryEncounters(); + } + + manageListeners(); +} + +/** + * Closes the current mock server and initializes a new mock server. + * This is run at the beginning of every API test file. + */ +export async function initServerForApiTests() { + global.server?.close(); + const { setupServer } = await import("msw/node"); + global.server = setupServer(); + global.server.listen({ onUnhandledRequest: "error" }); + return global.server; +} diff --git a/test/vitest.setup.ts b/test/vitest.setup.ts index 44175049042..93b439e540f 100644 --- a/test/vitest.setup.ts +++ b/test/vitest.setup.ts @@ -1,31 +1,17 @@ import "vitest-canvas-mock"; - -import { initLoggedInUser } from "#app/account"; -import { initAbilities } from "#app/data/ability"; -import { initBiomes } from "#app/data/balance/biomes"; -import { initEggMoves } from "#app/data/balance/egg-moves"; -import { initPokemonPrevolutions } from "#app/data/balance/pokemon-evolutions"; -import { initMoves } from "#app/data/moves/move"; -import { initMysteryEncounters } from "#app/data/mystery-encounters/mystery-encounters"; -import { initPokemonForms } from "#app/data/pokemon-forms"; -import { initSpecies } from "#app/data/pokemon-species"; -import { initAchievements } from "#app/system/achv"; -import { initVouchers } from "#app/system/voucher"; -import { initStatsKeys } from "#app/ui/game-stats-ui-handler"; import { afterAll, beforeAll, vi } from "vitest"; +import { initTestFile } from "./testUtils/testFileInitialization"; + /** Set the timezone to UTC for tests. */ -process.env.TZ = "UTC"; /** Mock the override import to always return default values, ignoring any custom overrides. */ vi.mock("#app/overrides", async importOriginal => { - // eslint-disable-next-line @typescript-eslint/consistent-type-imports const { defaultOverrides } = await importOriginal(); return { default: defaultOverrides, defaultOverrides, - // eslint-disable-next-line @typescript-eslint/consistent-type-imports } satisfies typeof import("#app/overrides"); }); @@ -63,28 +49,10 @@ vi.mock("i18next", async importOriginal => { return await importOriginal(); }); -initVouchers(); -initAchievements(); -initStatsKeys(); -initPokemonPrevolutions(); -initBiomes(); -initEggMoves(); -initPokemonForms(); -initSpecies(); -initMoves(); -initAbilities(); -initLoggedInUser(); -initMysteryEncounters(); - global.testFailed = false; beforeAll(() => { - Object.defineProperty(document, "fonts", { - writable: true, - value: { - add: () => {}, - }, - }); + initTestFile(); }); afterAll(() => { diff --git a/vitest.config.ts b/vitest.config.ts index b52c16ec00c..c781bde97ed 100644 --- a/vitest.config.ts +++ b/vitest.config.ts @@ -1,20 +1,31 @@ import { defineProject } from "vitest/config"; import { defaultConfig } from "./vite.config"; +import { BaseSequencer, type TestSpecification } from "vitest/node"; + +function getTestOrder(testName: string): number { + if (testName.includes("battle-scene.test.ts")) { + return 1; + } + if (testName.includes("inputs.test.ts")) { + return 2; + } + return 3; +} export default defineProject(({ mode }) => ({ ...defaultConfig, test: { testTimeout: 20000, setupFiles: ["./test/fontFace.setup.ts", "./test/vitest.setup.ts"], - server: { - deps: { - inline: ["vitest-canvas-mock"], - //@ts-ignore - optimizer: { - web: { - include: ["vitest-canvas-mock"], - }, - }, + sequence: { + sequencer: class CustomSequencer extends BaseSequencer { + async sort(files: TestSpecification[]) { + // use default sorting at first. + files = await super.sort(files); + // Except, forcibly reorder + + return files.sort((a, b) => getTestOrder(a.moduleId) - getTestOrder(b.moduleId)); + } }, }, environment: "jsdom" as const, @@ -34,7 +45,6 @@ export default defineProject(({ mode }) => ({ }, name: "main", include: ["./test/**/*.{test,spec}.ts"], - exclude: ["./test/pre.test.ts"], }, esbuild: { pure: mode === "production" ? ["console.log"] : [],