Merge branch 'beta' of https://github.com/pagefaultgames/pokerogue into new-modifier-rework
@ -5,9 +5,7 @@ module.exports = {
|
|||||||
name: "no-non-type-@type-exports",
|
name: "no-non-type-@type-exports",
|
||||||
severity: "error",
|
severity: "error",
|
||||||
comment:
|
comment:
|
||||||
"Files in @types should not export anything but types and interfaces. " +
|
"Files in @types should not export anything but types and interfaces. The folder is intended to house imports that are removed at runtime, and thus should not contain anything with a bearing on runtime code.",
|
||||||
"The folder is intended to house imports that are removed at runtime, " +
|
|
||||||
"and thus should not contain anything with a bearing on runtime code.",
|
|
||||||
from: {},
|
from: {},
|
||||||
to: {
|
to: {
|
||||||
path: "(^|/)src/@types",
|
path: "(^|/)src/@types",
|
||||||
@ -29,8 +27,7 @@ module.exports = {
|
|||||||
name: "no-circular-at-runtime",
|
name: "no-circular-at-runtime",
|
||||||
severity: "error",
|
severity: "error",
|
||||||
comment:
|
comment:
|
||||||
"This dependency is part of a circular relationship. You might want to revise " +
|
"This dependency is part of a circular relationship. You might want to revise your solution (i.e. use dependency inversion, make sure the modules have a single responsibility) ",
|
||||||
"your solution (i.e. use dependency inversion, make sure the modules have a single responsibility) ",
|
|
||||||
from: {},
|
from: {},
|
||||||
to: {
|
to: {
|
||||||
circular: true,
|
circular: true,
|
||||||
@ -42,11 +39,7 @@ module.exports = {
|
|||||||
{
|
{
|
||||||
name: "no-orphans",
|
name: "no-orphans",
|
||||||
comment:
|
comment:
|
||||||
"This is an orphan module - it's likely not used (anymore?). Either use it or " +
|
"This is an orphan module - it's likely not used (anymore?). Either use it or remove it. If it's logical this module is an orphan (i.e. it's a config file), add an exception for it in your dependency-cruiser configuration. By default this rule does not scrutinize dot-files (e.g. .eslintrc.js), TypeScript declaration files (.d.ts), tsconfig.json and some of the babel and webpack configs.",
|
||||||
"remove it. If it's logical this module is an orphan (i.e. it's a config file), " +
|
|
||||||
"add an exception for it in your dependency-cruiser configuration. By default " +
|
|
||||||
"this rule does not scrutinize dot-files (e.g. .eslintrc.js), TypeScript declaration " +
|
|
||||||
"files (.d.ts), tsconfig.json and some of the babel and webpack configs.",
|
|
||||||
severity: "error",
|
severity: "error",
|
||||||
from: {
|
from: {
|
||||||
orphan: true,
|
orphan: true,
|
||||||
@ -63,8 +56,7 @@ module.exports = {
|
|||||||
{
|
{
|
||||||
name: "no-deprecated-core",
|
name: "no-deprecated-core",
|
||||||
comment:
|
comment:
|
||||||
"A module depends on a node core module that has been deprecated. Find an alternative - these are " +
|
"A module depends on a node core module that has been deprecated. Find an alternative - these are bound to exist - node doesn't deprecate lightly.",
|
||||||
"bound to exist - node doesn't deprecate lightly.",
|
|
||||||
severity: "error",
|
severity: "error",
|
||||||
from: {},
|
from: {},
|
||||||
to: {
|
to: {
|
||||||
@ -96,8 +88,7 @@ module.exports = {
|
|||||||
{
|
{
|
||||||
name: "not-to-deprecated",
|
name: "not-to-deprecated",
|
||||||
comment:
|
comment:
|
||||||
"This module uses a (version of an) npm module that has been deprecated. Either upgrade to a later " +
|
"This module uses a (version of an) npm module that has been deprecated. Either upgrade to a later version of that module, or find an alternative. Deprecated modules are a security risk.",
|
||||||
"version of that module, or find an alternative. Deprecated modules are a security risk.",
|
|
||||||
severity: "error",
|
severity: "error",
|
||||||
from: {},
|
from: {},
|
||||||
to: {
|
to: {
|
||||||
@ -108,10 +99,7 @@ module.exports = {
|
|||||||
name: "no-non-package-json",
|
name: "no-non-package-json",
|
||||||
severity: "error",
|
severity: "error",
|
||||||
comment:
|
comment:
|
||||||
"This module depends on an npm package that isn't in the 'dependencies' section of your package.json. " +
|
"This module depends on an npm package that isn't in the 'dependencies' section of your package.json. That's problematic as the package either (1) won't be available on live (2 - worse) will be available on live with an non-guaranteed version. Fix it by adding the package to the dependencies in your package.json.",
|
||||||
"That's problematic as the package either (1) won't be available on live (2 - worse) will be " +
|
|
||||||
"available on live with an non-guaranteed version. Fix it by adding the package to the dependencies " +
|
|
||||||
"in your package.json.",
|
|
||||||
from: {},
|
from: {},
|
||||||
to: {
|
to: {
|
||||||
dependencyTypes: ["npm-no-pkg", "npm-unknown"],
|
dependencyTypes: ["npm-no-pkg", "npm-unknown"],
|
||||||
@ -120,8 +108,7 @@ module.exports = {
|
|||||||
{
|
{
|
||||||
name: "not-to-unresolvable",
|
name: "not-to-unresolvable",
|
||||||
comment:
|
comment:
|
||||||
"This module depends on a module that cannot be found ('resolved to disk'). If it's an npm " +
|
"This module depends on a module that cannot be found ('resolved to disk'). If it's an npm module: add it to your package.json. In all other cases you likely already know what to do.",
|
||||||
"module: add it to your package.json. In all other cases you likely already know what to do.",
|
|
||||||
severity: "error",
|
severity: "error",
|
||||||
from: {},
|
from: {},
|
||||||
to: {
|
to: {
|
||||||
@ -131,9 +118,7 @@ module.exports = {
|
|||||||
{
|
{
|
||||||
name: "no-duplicate-dep-types",
|
name: "no-duplicate-dep-types",
|
||||||
comment:
|
comment:
|
||||||
"Likely this module depends on an external ('npm') package that occurs more than once " +
|
"Likely this module depends on an external ('npm') package that occurs more than once in your package.json i.e. bot as a devDependencies and in dependencies. This will cause maintenance problems later on.",
|
||||||
"in your package.json i.e. bot as a devDependencies and in dependencies. This will cause " +
|
|
||||||
"maintenance problems later on.",
|
|
||||||
severity: "error",
|
severity: "error",
|
||||||
from: {},
|
from: {},
|
||||||
to: {
|
to: {
|
||||||
@ -150,9 +135,7 @@ module.exports = {
|
|||||||
{
|
{
|
||||||
name: "not-to-spec",
|
name: "not-to-spec",
|
||||||
comment:
|
comment:
|
||||||
"This module depends on a spec (test) file. The sole responsibility of a spec file is to test code. " +
|
"This module depends on a spec (test) file. The sole responsibility of a spec file is to test code. If there's something in a spec that's of use to other modules, it doesn't have that single responsibility anymore. Factor it out into (e.g.) a separate utility/ helper or a mock.",
|
||||||
"If there's something in a spec that's of use to other modules, it doesn't have that single " +
|
|
||||||
"responsibility anymore. Factor it out into (e.g.) a separate utility/ helper or a mock.",
|
|
||||||
severity: "error",
|
severity: "error",
|
||||||
from: {},
|
from: {},
|
||||||
to: {
|
to: {
|
||||||
@ -163,11 +146,7 @@ module.exports = {
|
|||||||
name: "not-to-dev-dep",
|
name: "not-to-dev-dep",
|
||||||
severity: "error",
|
severity: "error",
|
||||||
comment:
|
comment:
|
||||||
"This module depends on an npm package from the 'devDependencies' section of your " +
|
"This module depends on an npm package from the 'devDependencies' section of your package.json. It looks like something that ships to production, though. To prevent problems with npm packages that aren't there on production declare it (only!) in the 'dependencies'section of your package.json. If this module is development only - add it to the from.pathNot re of the not-to-dev-dep rule in the dependency-cruiser configuration",
|
||||||
"package.json. It looks like something that ships to production, though. To prevent problems " +
|
|
||||||
"with npm packages that aren't there on production declare it (only!) in the 'dependencies'" +
|
|
||||||
"section of your package.json. If this module is development only - add it to the " +
|
|
||||||
"from.pathNot re of the not-to-dev-dep rule in the dependency-cruiser configuration",
|
|
||||||
from: {
|
from: {
|
||||||
path: "^(src)",
|
path: "^(src)",
|
||||||
pathNot: ["[.](?:spec|test|setup|script)[.](?:js|mjs|cjs|jsx|ts|mts|cts|tsx)$", "./test"],
|
pathNot: ["[.](?:spec|test|setup|script)[.](?:js|mjs|cjs|jsx|ts|mts|cts|tsx)$", "./test"],
|
||||||
@ -184,10 +163,7 @@ module.exports = {
|
|||||||
name: "optional-deps-used",
|
name: "optional-deps-used",
|
||||||
severity: "info",
|
severity: "info",
|
||||||
comment:
|
comment:
|
||||||
"This module depends on an npm package that is declared as an optional dependency " +
|
"This module depends on an npm package that is declared as an optional dependency in your package.json. As this makes sense in limited situations only, it's flagged here. If you're using an optional dependency here by design - add an exception to yourdependency-cruiser configuration.",
|
||||||
"in your package.json. As this makes sense in limited situations only, it's flagged here. " +
|
|
||||||
"If you're using an optional dependency here by design - add an exception to your" +
|
|
||||||
"dependency-cruiser configuration.",
|
|
||||||
from: {},
|
from: {},
|
||||||
to: {
|
to: {
|
||||||
dependencyTypes: ["npm-optional"],
|
dependencyTypes: ["npm-optional"],
|
||||||
@ -196,10 +172,7 @@ module.exports = {
|
|||||||
{
|
{
|
||||||
name: "peer-deps-used",
|
name: "peer-deps-used",
|
||||||
comment:
|
comment:
|
||||||
"This module depends on an npm package that is declared as a peer dependency " +
|
"This module depends on an npm package that is declared as a peer dependency in your package.json. This makes sense if your package is e.g. a plugin, but in other cases - maybe not so much. If the use of a peer dependency is intentional add an exception to your dependency-cruiser configuration.",
|
||||||
"in your package.json. This makes sense if your package is e.g. a plugin, but in " +
|
|
||||||
"other cases - maybe not so much. If the use of a peer dependency is intentional " +
|
|
||||||
"add an exception to your dependency-cruiser configuration.",
|
|
||||||
severity: "error",
|
severity: "error",
|
||||||
from: {},
|
from: {},
|
||||||
to: {
|
to: {
|
||||||
|
@ -3,7 +3,7 @@
|
|||||||
# top-most EditorConfig file
|
# top-most EditorConfig file
|
||||||
root = true
|
root = true
|
||||||
|
|
||||||
[src/*.{js,ts}]
|
[**/*.{js,ts,json,jsonc}]
|
||||||
indent_style = space
|
indent_style = space
|
||||||
indent_size = 2
|
indent_size = 2
|
||||||
end_of_line = lf
|
end_of_line = lf
|
||||||
|
20
.github/workflows/github-pages.yml
vendored
@ -27,20 +27,18 @@ jobs:
|
|||||||
# Only push docs when running on pushes to main/beta
|
# Only push docs when running on pushes to main/beta
|
||||||
DRY_RUN: ${{github.event_name != 'push' || (github.ref_name != 'beta' && github.ref_name != 'main')}}
|
DRY_RUN: ${{github.event_name != 'push' || (github.ref_name != 'beta' && github.ref_name != 'main')}}
|
||||||
|
|
||||||
strategy:
|
|
||||||
fail-fast: false
|
|
||||||
|
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout repository for Typedoc
|
- name: Checkout repository for Typedoc
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v4
|
||||||
with:
|
with:
|
||||||
submodules: 'recursive'
|
|
||||||
path: pokerogue_docs
|
path: pokerogue_docs
|
||||||
|
sparse-checkout: |
|
||||||
- name: Install OS package
|
/*
|
||||||
run: |
|
!/public/
|
||||||
sudo apt update
|
/public/images/pokemon/variant/_exp_masterlist.json
|
||||||
sudo apt install -y git openssh-client
|
/public/images/pokemon/variant/_masterlist.json
|
||||||
|
/public/images/logo.png
|
||||||
|
sparse-checkout-cone-mode: false
|
||||||
|
|
||||||
- name: Install pnpm
|
- name: Install pnpm
|
||||||
uses: pnpm/action-setup@v4
|
uses: pnpm/action-setup@v4
|
||||||
@ -77,9 +75,7 @@ jobs:
|
|||||||
cd pokerogue_gh
|
cd pokerogue_gh
|
||||||
git config user.email "github-actions[bot]@users.noreply.github.com"
|
git config user.email "github-actions[bot]@users.noreply.github.com"
|
||||||
git config user.name "github-actions[bot]"
|
git config user.name "github-actions[bot]"
|
||||||
mkdir -p $GITHUB_REF_NAME
|
rsync -rd --delete /tmp/docs/ $GITHUB_REF_NAME
|
||||||
rm -rf $GITHUB_REF_NAME/*
|
|
||||||
cp -r /tmp/docs $GITHUB_REF_NAME
|
|
||||||
git add $GITHUB_REF_NAME
|
git add $GITHUB_REF_NAME
|
||||||
git commit -m "[skip ci] Deploy docs"
|
git commit -m "[skip ci] Deploy docs"
|
||||||
git push
|
git push
|
||||||
|
81
.github/workflows/linting.yml
vendored
@ -18,7 +18,7 @@ on:
|
|||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
run-linters:
|
run-linters:
|
||||||
name: Run linters
|
name: Run all linters
|
||||||
timeout-minutes: 10
|
timeout-minutes: 10
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
|
||||||
@ -26,27 +26,86 @@ jobs:
|
|||||||
- name: Check out Git repository
|
- name: Check out Git repository
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v4
|
||||||
with:
|
with:
|
||||||
submodules: 'recursive'
|
submodules: "recursive"
|
||||||
|
|
||||||
- name: Install pnpm
|
- name: Install pnpm
|
||||||
uses: pnpm/action-setup@v4
|
uses: pnpm/action-setup@v4
|
||||||
with:
|
with:
|
||||||
version: 10
|
version: 10
|
||||||
|
|
||||||
- name: Set up Node.js
|
- name: Set up Node
|
||||||
uses: actions/setup-node@v4
|
uses: actions/setup-node@v4
|
||||||
with:
|
with:
|
||||||
node-version-file: '.nvmrc'
|
node-version-file: ".nvmrc"
|
||||||
cache: 'pnpm'
|
cache: "pnpm"
|
||||||
|
|
||||||
- name: Install Node.js dependencies
|
- name: Install Node modules
|
||||||
run: pnpm i
|
run: pnpm i
|
||||||
|
|
||||||
- name: Lint with Biome
|
# Lint files with Biome-Lint - https://biomejs.dev/linter/
|
||||||
|
- name: Run Biome-Lint
|
||||||
run: pnpm biome-ci
|
run: pnpm biome-ci
|
||||||
|
id: biome_lint
|
||||||
|
continue-on-error: true
|
||||||
|
|
||||||
- name: Check dependencies with depcruise
|
# Validate dependencies with dependency-cruiser - https://github.com/sverweij/dependency-cruiser
|
||||||
|
- name: Run Dependency-Cruise
|
||||||
run: pnpm depcruise
|
run: pnpm depcruise
|
||||||
|
id: depcruise
|
||||||
- name: Lint with ls-lint
|
continue-on-error: true
|
||||||
run: pnpm ls-lint
|
|
||||||
|
# Validate types with tsc - https://www.typescriptlang.org/docs/handbook/compiler-options.html#using-the-cli
|
||||||
|
- name: Run Typecheck
|
||||||
|
run: pnpm typecheck
|
||||||
|
id: typecheck
|
||||||
|
continue-on-error: true
|
||||||
|
|
||||||
|
# The exact same thing
|
||||||
|
- name: Run Typecheck (scripts)
|
||||||
|
run: pnpm typecheck:scripts
|
||||||
|
id: typecheck-scripts
|
||||||
|
continue-on-error: true
|
||||||
|
|
||||||
|
- name: Evaluate for Errors
|
||||||
|
env:
|
||||||
|
BIOME_LINT_OUTCOME: ${{ steps.biome_lint.outcome }}
|
||||||
|
DEPCRUISE_OUTCOME: ${{ steps.depcruise.outcome }}
|
||||||
|
TYPECHECK_OUTCOME: ${{ steps.typecheck.outcome }}
|
||||||
|
TYPECHECK_SCRIPTS_OUTCOME: ${{ steps.typecheck-scripts.outcome }}
|
||||||
|
run: |
|
||||||
|
# Check for Errors
|
||||||
|
|
||||||
|
# Make text red.
|
||||||
|
red () {
|
||||||
|
printf "\e[31m%s\e[0m" "$1"
|
||||||
|
}
|
||||||
|
|
||||||
|
# Make text green.
|
||||||
|
green () {
|
||||||
|
printf "\e[32m%s\e[0m" "$1"
|
||||||
|
}
|
||||||
|
|
||||||
|
print_result() {
|
||||||
|
local name=$1
|
||||||
|
local outcome=$2
|
||||||
|
if [ "$outcome" == "success" ]; then
|
||||||
|
printf "$(green "✅ $name: $outcome")\n"
|
||||||
|
else
|
||||||
|
printf "$(red "❌ $name: $outcome")\n"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
print_result "Biome" "$BIOME_LINT_OUTCOME"
|
||||||
|
print_result "Depcruise" "$DEPCRUISE_OUTCOME"
|
||||||
|
print_result "Typecheck" "$TYPECHECK_OUTCOME"
|
||||||
|
print_result "Typecheck scripts" "$TYPECHECK_SCRIPTS_OUTCOME"
|
||||||
|
|
||||||
|
if [[ "$BIOME_LINT_OUTCOME" != "success" || \
|
||||||
|
"$DEPCRUISE_OUTCOME" != "success" || \
|
||||||
|
"$TYPECHECK_OUTCOME" != "success" || \
|
||||||
|
"$TYPECHECK_SCRIPTS_OUTCOME" != "success" ]]; then
|
||||||
|
printf "$(red "❌ One or more checks failed!")\n" >&2
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
printf "$(green "✅ All checks passed!")\n"
|
||||||
|
4
.github/workflows/tests.yml
vendored
@ -28,6 +28,10 @@ jobs:
|
|||||||
steps:
|
steps:
|
||||||
- name: checkout
|
- name: checkout
|
||||||
uses: actions/checkout@v4
|
uses: actions/checkout@v4
|
||||||
|
with:
|
||||||
|
sparse-checkout: |
|
||||||
|
.github/test-filters.yml
|
||||||
|
sparse-checkout-cone-mode: false
|
||||||
|
|
||||||
- uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36
|
- uses: dorny/paths-filter@de90cc6fb38fc0963ad72b210f1f284cd68cea36
|
||||||
id: filter
|
id: filter
|
||||||
|
1
.gitignore
vendored
@ -11,6 +11,7 @@ node_modules
|
|||||||
dist
|
dist
|
||||||
dist-ssr
|
dist-ssr
|
||||||
*.local
|
*.local
|
||||||
|
build
|
||||||
|
|
||||||
# Editor directories and files (excluding `extensions.json` for devcontainer)
|
# Editor directories and files (excluding `extensions.json` for devcontainer)
|
||||||
*.code-workspace
|
*.code-workspace
|
||||||
|
2
.vscode/extensions.json
vendored
@ -10,4 +10,4 @@
|
|||||||
"aaron-bond.better-comments",
|
"aaron-bond.better-comments",
|
||||||
"MuTsunTsai.jsdoc-link"
|
"MuTsunTsai.jsdoc-link"
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
@ -1,9 +1,9 @@
|
|||||||
<picture><img src="./public/images/logo.png" width="300" alt="PokéRogue"></picture>
|
<div align="center"><picture><img src="./public/images/logo.png" width="300" alt="PokéRogue"></picture>
|
||||||
|
|
||||||

|
[](https://discord.gg/pokerogue)
|
||||||
[](https://pagefaultgames.github.io/pokerogue/beta)
|
[](https://pagefaultgames.github.io/pokerogue/beta)
|
||||||
[](https://github.com/pagefaultgames/pokerogue/actions/workflows/tests.yml)
|
[](https://github.com/pagefaultgames/pokerogue/actions/workflows/tests.yml)
|
||||||
[](https://www.gnu.org/licenses/agpl-3.0)
|
[](https://www.gnu.org/licenses/agpl-3.0)</div>
|
||||||
|
|
||||||
PokéRogue is a browser based Pokémon fangame heavily inspired by the roguelite genre. Battle endlessly while gathering stacking items, exploring many different biomes, fighting trainers, bosses, and more!
|
PokéRogue is a browser based Pokémon fangame heavily inspired by the roguelite genre. Battle endlessly while gathering stacking items, exploring many different biomes, fighting trainers, bosses, and more!
|
||||||
|
|
||||||
|
161
biome.jsonc
@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"$schema": "https://biomejs.dev/schemas/2.0.0/schema.json",
|
"$schema": "https://biomejs.dev/schemas/2.2.3/schema.json",
|
||||||
"vcs": {
|
"vcs": {
|
||||||
"enabled": false,
|
"enabled": true,
|
||||||
"clientKind": "git",
|
"clientKind": "git",
|
||||||
"useIgnoreFile": true,
|
"useIgnoreFile": true,
|
||||||
"defaultBranch": "beta"
|
"defaultBranch": "beta"
|
||||||
@ -10,7 +10,7 @@
|
|||||||
"enabled": true,
|
"enabled": true,
|
||||||
"useEditorconfig": true,
|
"useEditorconfig": true,
|
||||||
"indentStyle": "space",
|
"indentStyle": "space",
|
||||||
"includes": ["**", "!**/src/enums/**/*", "!**/src/data/balance/**/*"],
|
"includes": ["**", "!**/src/data/balance/**"],
|
||||||
"lineWidth": 120
|
"lineWidth": 120
|
||||||
},
|
},
|
||||||
"files": {
|
"files": {
|
||||||
@ -19,14 +19,12 @@
|
|||||||
// and having to verify whether each individual file is ignored
|
// and having to verify whether each individual file is ignored
|
||||||
"includes": [
|
"includes": [
|
||||||
"**",
|
"**",
|
||||||
"!**/dist/**/*",
|
"!**/dist",
|
||||||
"!**/build/**/*",
|
"!**/coverage",
|
||||||
"!**/coverage/**/*",
|
"!**/public",
|
||||||
"!**/public/**/*",
|
"!**/.github",
|
||||||
"!**/.github/**/*",
|
"!**/node_modules",
|
||||||
"!**/node_modules/**/*",
|
"!**/typedoc",
|
||||||
"!**/.vscode/**/*",
|
|
||||||
"!**/typedoc/**/*",
|
|
||||||
// TODO: lint css and html?
|
// TODO: lint css and html?
|
||||||
"!**/*.css",
|
"!**/*.css",
|
||||||
"!**/*.html",
|
"!**/*.html",
|
||||||
@ -48,28 +46,75 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
// TODO: Remove unneeded `options` blocks once biome's JSON schema is fixed to not require them
|
||||||
"linter": {
|
"linter": {
|
||||||
"enabled": true,
|
"enabled": true,
|
||||||
"rules": {
|
"rules": {
|
||||||
"recommended": true,
|
"recommended": true,
|
||||||
"correctness": {
|
"correctness": {
|
||||||
"noUndeclaredVariables": "off",
|
"noUndeclaredVariables": "error",
|
||||||
"noUnusedVariables": "error",
|
"noUnusedVariables": "error",
|
||||||
"noSwitchDeclarations": "error",
|
"noSwitchDeclarations": "error",
|
||||||
"noVoidTypeReturn": "error",
|
"noVoidTypeReturn": "error",
|
||||||
"noUnusedImports": {
|
"noUnusedImports": {
|
||||||
"level": "error",
|
"level": "error",
|
||||||
"fix": "safe"
|
"fix": "safe",
|
||||||
|
"options": {}
|
||||||
},
|
},
|
||||||
"noUnusedFunctionParameters": "error",
|
"noUnusedFunctionParameters": "error",
|
||||||
"noUnusedLabels": "error",
|
"noUnusedLabels": "error",
|
||||||
"noPrivateImports": "error"
|
"noPrivateImports": "error",
|
||||||
|
"useSingleJsDocAsterisk": "error",
|
||||||
|
"useJsonImportAttributes": "off" // "Import attributes are only supported when the '--module' option is set to 'esnext', 'node18', 'nodenext', or 'preserve'. ts(2823)"
|
||||||
},
|
},
|
||||||
"style": {
|
"style": {
|
||||||
"useEnumInitializers": "off", // large enums like Moves/Species would make this cumbersome
|
"useExplicitLengthCheck": {
|
||||||
|
"level": "error",
|
||||||
|
"fix": "safe",
|
||||||
|
"options": {}
|
||||||
|
},
|
||||||
|
"useAtIndex": "error",
|
||||||
|
"noNegationElse": {
|
||||||
|
"level": "info", // TODO: Promote to error eventually
|
||||||
|
"fix": "unsafe", // duplicates else blocks
|
||||||
|
"options": {}
|
||||||
|
},
|
||||||
|
// TODO: Fix all instances of this and promote to `error` - this and enums are the 2 things
|
||||||
|
// barring us from `esModuleInterop`
|
||||||
|
"noParameterProperties": "warn",
|
||||||
|
"useConsistentBuiltinInstantiation": {
|
||||||
|
"level": "error",
|
||||||
|
"fix": "safe",
|
||||||
|
"options": {}
|
||||||
|
},
|
||||||
|
"noDefaultExport": "warn", // TODO: Fix `overrides.ts` and enable
|
||||||
|
"noShoutyConstants": "error",
|
||||||
|
"useThrowNewError": {
|
||||||
|
"level": "error",
|
||||||
|
"fix": "safe",
|
||||||
|
"options": {}
|
||||||
|
},
|
||||||
|
"useThrowOnlyError": "error",
|
||||||
|
"useTrimStartEnd": "error",
|
||||||
|
"useReadonlyClassProperties": {
|
||||||
|
"level": "info", // TODO: Graduate to error eventually
|
||||||
|
"options": { "checkAllProperties": true }
|
||||||
|
},
|
||||||
|
"useConsistentObjectDefinitions": {
|
||||||
|
"level": "error",
|
||||||
|
"options": { "syntax": "shorthand" }
|
||||||
|
},
|
||||||
|
"useCollapsedIf": "error",
|
||||||
|
"useCollapsedElseIf": "error",
|
||||||
|
|
||||||
|
"noSubstr": "error",
|
||||||
|
"noYodaExpression": "error",
|
||||||
|
"useForOf": "error",
|
||||||
|
"useEnumInitializers": "off", // large enums like MoveId/SpeciesId would make this cumbersome
|
||||||
"useBlockStatements": {
|
"useBlockStatements": {
|
||||||
"level": "error",
|
"level": "error",
|
||||||
"fix": "safe"
|
"fix": "safe",
|
||||||
|
"options": {}
|
||||||
},
|
},
|
||||||
"useConst": "error",
|
"useConst": "error",
|
||||||
"useImportType": "error",
|
"useImportType": "error",
|
||||||
@ -80,9 +125,14 @@
|
|||||||
// TODO: Fix spots in the codebase where this flag would be triggered
|
// TODO: Fix spots in the codebase where this flag would be triggered
|
||||||
// and then set to "error" and re-enable the fixer
|
// and then set to "error" and re-enable the fixer
|
||||||
"level": "warn",
|
"level": "warn",
|
||||||
"fix": "none"
|
"fix": "none",
|
||||||
|
"options": {}
|
||||||
|
},
|
||||||
|
"useSingleVarDeclarator": {
|
||||||
|
"level": "error",
|
||||||
|
"fix": "safe",
|
||||||
|
"options": {}
|
||||||
},
|
},
|
||||||
"useSingleVarDeclarator": "off",
|
|
||||||
"useNodejsImportProtocol": "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
|
||||||
"useAsConstAssertion": "error",
|
"useAsConstAssertion": "error",
|
||||||
@ -100,58 +150,80 @@
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
},
|
||||||
|
|
||||||
|
// TODO: Wait until the rule gets options for ignoring doc comments and/or different parameter names,
|
||||||
|
// and THEN enable it codebase-wide
|
||||||
|
"useUnifiedTypeSignatures": {
|
||||||
|
"level": "info",
|
||||||
|
"fix": "none",
|
||||||
|
"options": {}
|
||||||
|
},
|
||||||
|
"useGroupedAccessorPairs": "error",
|
||||||
|
"useObjectSpread": "error",
|
||||||
|
"useNumericSeparators": "off" // TODO: Consider enabling?
|
||||||
},
|
},
|
||||||
"suspicious": {
|
"suspicious": {
|
||||||
|
"useErrorMessage": "error",
|
||||||
|
"noEvolvingTypes": "warn", // TODO: Review and enable ASAP - this is VERY VERY BAD
|
||||||
|
"useNumberToFixedDigitsArgument": "error",
|
||||||
|
"useGuardForIn": "warn", // TODO: Review and enable ASAP - this is EVEN FRICKING WORSE
|
||||||
"noDoubleEquals": "error",
|
"noDoubleEquals": "error",
|
||||||
// While this would be a nice rule to enable, the current structure of the codebase makes this infeasible
|
// While this would be a nice rule to enable, the current structure of the codebase makes this infeasible
|
||||||
// due to being used for move/ability `args` params and save data-related code.
|
// due to being used for move/ability `args` params and save data-related code.
|
||||||
// This can likely be enabled for all non-utils files once these are eventually reworked, but until then we leave it off.
|
// This can likely be enabled for all non-utils files once these are eventually reworked, but until then we leave it off.
|
||||||
"noExplicitAny": "off",
|
"noExplicitAny": "off",
|
||||||
"noAssignInExpressions": "off",
|
"noAssignInExpressions": "off",
|
||||||
"noPrototypeBuiltins": "off",
|
"noPrototypeBuiltins": "off", // TODO: enable this
|
||||||
"noFallthroughSwitchClause": "error", // Prevents accidental automatic fallthroughs in switch cases (use disable comment if needed)
|
"noFallthroughSwitchClause": "error", // Prevents accidental automatic fallthroughs in switch cases (use disable comment if needed)
|
||||||
"noImplicitAnyLet": "warn", // TODO: Refactor and make this an error
|
"noImplicitAnyLet": "warn", // TODO: Refactor and make this an error
|
||||||
"noRedeclare": "info", // TODO: Refactor and make this an error
|
"noRedeclare": "info", // TODO: Refactor and make this an error
|
||||||
"noGlobalIsNan": "off",
|
"noGlobalIsNan": "error",
|
||||||
"noAsyncPromiseExecutor": "warn", // TODO: Refactor and make this an error
|
"noAsyncPromiseExecutor": "warn", // TODO: Refactor and make this an error
|
||||||
"noVar": "error",
|
"noVar": "error",
|
||||||
"noDocumentCookie": "off" // Firefox has minimal support for the "Cookie Store API"
|
"noDocumentCookie": "off", // Firefox has minimal support for the "Cookie Store API"
|
||||||
|
"noConstantBinaryExpressions": "error",
|
||||||
|
"noTsIgnore": "error",
|
||||||
|
"useIterableCallbackReturn": "warn" // TODO: Refactor and change to error
|
||||||
},
|
},
|
||||||
"complexity": {
|
"complexity": {
|
||||||
|
"useWhile": "error",
|
||||||
|
"noVoid": "warn", // TODO: Review and enable ASAP - this is also bad
|
||||||
|
"noUselessStringConcat": "error",
|
||||||
"noExcessiveCognitiveComplexity": "info", // TODO: Refactor and make this an error
|
"noExcessiveCognitiveComplexity": "info", // TODO: Refactor and make this an error
|
||||||
"useLiteralKeys": "off",
|
"useLiteralKeys": "off", // TODO: enable?
|
||||||
"noForEach": "off", // Foreach vs for of is not that simple.
|
"noForEach": "off", // Foreach vs for of is not that simple.
|
||||||
"noUselessSwitchCase": "off", // Explicit > Implicit
|
"noUselessSwitchCase": "off", // Explicit > Implicit
|
||||||
"noUselessConstructor": "error",
|
"noUselessConstructor": "error",
|
||||||
"noBannedTypes": "warn", // TODO: Refactor and make this an error
|
"noBannedTypes": "warn", // TODO: Refactor and make this an error
|
||||||
"noThisInStatic": "error",
|
"noThisInStatic": "error",
|
||||||
"noUselessThisAlias": "error",
|
"noUselessThisAlias": "error",
|
||||||
"noUselessTernary": "error"
|
"noUselessTernary": "error",
|
||||||
|
"useIndexOf": "error"
|
||||||
},
|
},
|
||||||
"performance": {
|
"performance": {
|
||||||
"noNamespaceImport": "error",
|
"noNamespaceImport": "error",
|
||||||
"noDelete": "error"
|
"noDelete": "error",
|
||||||
|
"noBarrelFile": "error"
|
||||||
},
|
},
|
||||||
"nursery": {
|
"nursery": {
|
||||||
"useAdjacentGetterSetter": "error",
|
"noUselessUndefined": "error",
|
||||||
"noConstantBinaryExpression": "error",
|
"useMaxParams": {
|
||||||
"noTsIgnore": "error",
|
"level": "warn", // TODO: Change to "error"... eventually...
|
||||||
"noAwaitInLoop": "off",
|
"options": { "max": 4 } // A lot of stuff has a few params, but
|
||||||
"useJsonImportAttribute": "off", // "Import attributes are only supported when the '--module' option is set to 'esnext', 'node18', 'nodenext', or 'preserve'. ts(2823)"
|
},
|
||||||
"useIndexOf": "error",
|
"noShadow": "warn", // TODO: refactor and make "error"
|
||||||
"useObjectSpread": "error",
|
"noNonNullAssertedOptionalChain": "warn" // TODO: refactor and make "error"
|
||||||
"useNumericSeparators": "off", // TODO: enable?
|
|
||||||
"useIterableCallbackReturn": "warn", // TODO: refactor and make "error"
|
|
||||||
"noShadow": "warn" // TODO: refactor and make "error"
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"javascript": {
|
"javascript": {
|
||||||
"formatter": {
|
"formatter": {
|
||||||
"quoteStyle": "double",
|
"quoteStyle": "double",
|
||||||
"arrowParentheses": "asNeeded"
|
"arrowParentheses": "asNeeded",
|
||||||
|
"operatorLinebreak": "before"
|
||||||
},
|
},
|
||||||
|
"globals": ["Phaser"],
|
||||||
"parser": {
|
"parser": {
|
||||||
"jsxEverywhere": false
|
"jsxEverywhere": false
|
||||||
}
|
}
|
||||||
@ -166,7 +238,7 @@
|
|||||||
"noNamespaceImport": "off" // this is required for `vi.spyOn` to work in some tests
|
"noNamespaceImport": "off" // this is required for `vi.spyOn` to work in some tests
|
||||||
},
|
},
|
||||||
"style": {
|
"style": {
|
||||||
"noNonNullAssertion": "off"
|
"noNonNullAssertion": "off" // tedious in some tests
|
||||||
},
|
},
|
||||||
"nursery": {
|
"nursery": {
|
||||||
"noFloatingPromises": "error"
|
"noFloatingPromises": "error"
|
||||||
@ -175,10 +247,17 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
// Overrides to prevent unused import removal inside `overrides.ts` and enums files (for TSDoc linkcodes),
|
// Overrides to prevent unused import removal inside `overrides.ts`, enums & `.d.ts` files (for TSDoc linkcodes),
|
||||||
// as well as in all TS files in `scripts/` (which are assumed to be boilerplate templates).
|
// as well as inside script boilerplate files.
|
||||||
{
|
{
|
||||||
"includes": ["**/src/overrides.ts", "**/src/enums/**/*", "**/scripts/**/*.ts", "**/*.d.ts"],
|
// TODO: Rename existing boilerplates in the folder and remove this last alias
|
||||||
|
"includes": [
|
||||||
|
"**/src/overrides.ts",
|
||||||
|
"**/src/enums/**/*",
|
||||||
|
"**/*.d.ts",
|
||||||
|
"scripts/**/*.boilerplate.ts",
|
||||||
|
"**/boilerplates/*.ts"
|
||||||
|
],
|
||||||
"linter": {
|
"linter": {
|
||||||
"rules": {
|
"rules": {
|
||||||
"correctness": {
|
"correctness": {
|
||||||
@ -188,7 +267,7 @@
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"includes": ["**/src/overrides.ts", "**/scripts/**/*.ts"],
|
"includes": ["**/src/overrides.ts"],
|
||||||
"linter": {
|
"linter": {
|
||||||
"rules": {
|
"rules": {
|
||||||
"style": {
|
"style": {
|
||||||
|
@ -1,48 +1,57 @@
|
|||||||
# Linting & Formatting
|
# Linting & Formatting
|
||||||
|
|
||||||
Writing clean, readable code is important, and linters and formatters are an integral part of ensuring code quality and readability.
|
Writing clean, readable code is important, and linters and formatters are an integral part of ensuring code quality and readability. \
|
||||||
It is for this reason we are using [Biome](https://biomejs.dev), an opinionated linter/formatter (akin to Prettier) with a heavy focus on speed and performance.
|
It is for this reason we are using [Biome](https://biomejs.dev), an opinionated linter/formatter (akin to Prettier) with a heavy focus on speed and performance.
|
||||||
|
|
||||||
### Installation
|
### Installation
|
||||||
You probably installed Biome already without noticing it - it's included inside `package.json` and should've been downloaded when you ran `pnpm install` after cloning the repo. If you haven't done that yet, go do it.
|
You probably installed Biome already without noticing it - it's included inside `package.json` and should've been downloaded when you ran `pnpm install` after cloning the repo. If you haven't done that yet, go do that first.
|
||||||
|
|
||||||
# Using Biome
|
# Using Biome
|
||||||
|
|
||||||
For the most part, Biome attempts to stay "out of your hair", letting you write code while enforcing a consistent formatting standard and only notifying for errors it can't automatically fix.\
|
For the most part, Biome attempts to stay "out of your hair", letting you write code while enforcing a consistent formatting standard and only notifying for errors it can't automatically fix. \
|
||||||
On the other hand, if Biome complains about a piece of code, **there's probably a good reason why**. Disable comments should be used sparingly or when readabilty demands it - your first instinct should be to fix the code in question, not disable the rule.
|
On the other hand, if Biome complains about a piece of code, **there's probably a good reason why**. Disable comments should be used sparingly or when readabilty demands it - your first instinct should be to fix the code in question, not disable the rule.
|
||||||
|
|
||||||
## Editor Integration
|
## Editor Integration
|
||||||
Biome has integration with many popular code editors. See [these](https://biomejs.dev/guides/editors/first-party-extensions/) [pages](https://biomejs.dev/guides/editors/third-party-extensions/) for information about enabling Biome in your editor of choice.
|
Biome has integration with many popular code editors. See [these](https://biomejs.dev/guides/editors/first-party-extensions/) [pages](https://biomejs.dev/guides/editors/third-party-extensions/) for information about enabling Biome in your editor of choice.
|
||||||
|
|
||||||
## Automated Runs
|
## Automated Runs
|
||||||
Generally speaking, most users shouldn't need to run Biome directly; in addition to editor integration, [pre-commit hook](../lefthook.yml) will periodically run Biome before each commit.
|
Generally speaking, most users shouldn't need to run Biome directly; in addition to editor integration, a [pre-commit hook](../lefthook.yml) will automatically format and lint all staged files before each commit.
|
||||||
You will **not** be able to push code with `error`-level linting problems - fix them beforehand.
|
|
||||||
|
|
||||||
We also have a [Github Action](../.github/workflows/quality.yml) to verify code quality each time a PR is updated, preventing bad code from inadvertently making its way upstream.
|
> ![WARNING]
|
||||||
|
> You will **not** be able to commit code if any staged files contain `error`-level linting problems. \
|
||||||
|
> If you, for whatever reason, _absolutely need_ to bypass Lefthook for a given commit,
|
||||||
|
> pass the `--no-verify` flag to `git commit`.
|
||||||
|
|
||||||
|
We also have a [Github Action](../.github/workflows/linting.yml) to verify code quality each time a PR is updated, preventing bad code from inadvertently making its way upstream. \
|
||||||
|
These are effectively the same commands as run by Lefthook, merely on a project-wide scale.
|
||||||
|
|
||||||
## Running Biome via CLI
|
## Running Biome via CLI
|
||||||
If you want Biome to check your files manually, you can run it from the command line like so:
|
To run you Biome on your files manually, you have 2 main options:
|
||||||
|
1. Run the scripts included in `package.json` (`pnpm biome` and `pnpm biome:all`). \
|
||||||
|
These have sensible defaults for command-line options, but do not allow altering certain flags (as some cannot be specified twice in the same command)
|
||||||
|
|
||||||
```sh
|
2. Execute the Biome executable manually from the command line like so:
|
||||||
pnpm exec biome check --[flags]
|
```sh
|
||||||
```
|
pnpm exec biome check --[flags]
|
||||||
|
```
|
||||||
|
This allows customizing non-overridable flags like `--diagnostic-level` on a more granular level, but requires slightly more verbosity and specifying more options.
|
||||||
|
|
||||||
A full list of flags and options can be found on [their website](https://biomejs.dev/reference/cli/), but here's a few useful ones to keep in mind:
|
A full list of flags and options can be found on [their website](https://biomejs.dev/reference/cli/), but here's a few useful ones to keep in mind:
|
||||||
|
|
||||||
- `--write` will cause Biome to write all "safe" fixes and formatting changes directly to your files (rather than just complaining and doing nothing).
|
- `--write` will cause Biome to write all "safe" fixes and formatting changes directly to your files (rather than just complaining and erroring out).
|
||||||
- `--changed` and `--staged` will only perform checks on all changed or staged files respectively. Biome sources this info from the relevant version control system (in this case Git).
|
- `--changed` and `--staged` will limit checking to all changed or staged files respectively. Biome sources this info from the relevant version control system (in this case `git`).
|
||||||
- `diagnostic-level=XXX` will only show diagnostics with at least the given severity level (`info/warn/error`). Useful to only focus on errors causing a failed workflow run or similar.
|
- `diagnostic-level=XXX` will only show diagnostics with at least the given severity level (`info/warn/error`). Useful to only focus on errors causing a failed workflow run or similar.
|
||||||
|
|
||||||
## Linting Rules
|
## Linting Rules
|
||||||
|
|
||||||
We primarily use Biome's [recommended ruleset](https://biomejs.dev/linter/rules/) for linting JS/TS, with some customizations to better suit our project's needs[^1].
|
We primarily use Biome's [recommended ruleset](https://biomejs.dev/linter/rules/) for linting JS/TS files, with some customizations to better suit our project's needs[^1].
|
||||||
|
|
||||||
Some things to consider:
|
Some things to consider:
|
||||||
|
|
||||||
- We have disabled rules that prioritize style over performance, such as `useTemplate`.
|
- We have disabled rules that prioritize style over performance, such as `useTemplate`.
|
||||||
- Some rules are currently disabled or marked as warnings (`warn`) to allow for gradual refactoring without blocking development. **Do not write new code that triggers these warnings.**
|
- Some rules are currently marked as warnings (`warn`) to allow for gradual refactoring without blocking development. **Do not write new code that triggers these rules!**
|
||||||
- The linter is configured to ignore specific files and folders (such as excessively large files or ones in need of refactoring) to improve performance and focus on actionable areas.
|
- The linter is configured to ignore specific files and folders (such as excessively large files or ones in need of refactoring) to improve performance and focus on actionable areas.
|
||||||
|
|
||||||
Any questions about linting rules should be brought up in the `#dev-corner` channel in the discord.
|
Any questions about linting rules can be brought up in the `#dev-corner` channel in the community Discord.
|
||||||
|
|
||||||
[^1]: A complete list of rules can be found in the `biome.jsonc` file in the project root.
|
[^1]: A complete list of rules can be found in the [`biome.jsonc`](../biome.jsonc) file in the project root. Many rules are accompanied by comments explaining the reasons for their inclusion (or lack thereof).
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
# Localization 101
|
# Localization 101
|
||||||
|
|
||||||
PokéRogue's localization team puts immense effort into making the game accessible around the world, supporting over 12 different languages at the time of writing this document.
|
PokéRogue's localization team puts immense effort into making the game accessible around the world, supporting over 12 different languages at the time of writing this document. \
|
||||||
As a developer, it's important to help maintain global accessibility by effectively coordinating with the Translation Team on any new features or enhancements.
|
As a developer, it's important to help maintain global accessibility by effectively coordinating with the Translation Team on any new features or enhancements.
|
||||||
|
|
||||||
This document aims to cover everything you need to know to help keep the integration process for localization smooth and simple.
|
This document aims to cover everything you need to know to help keep the integration process for localization smooth and simple.
|
||||||
@ -19,11 +19,12 @@ This repository is integrated into the main one as a [git submodule](https://git
|
|||||||
|
|
||||||
## What Is a Submodule?
|
## What Is a Submodule?
|
||||||
|
|
||||||
In essence, a submodule is a way for one repository (i.e. `pokerogue`) to use another repository (i.e. `pokerogue-locales`) internally.
|
In essence, a submodule is a way for one repository (i.e. `pokerogue`) to use another repository (i.e. `pokerogue-locales`) internally.
|
||||||
The parent repo (the "superproject") houses a cloned version of the 2nd repository (the "submodule") inside it, making locales effectively a "repository within a repository", so to speak.
|
The parent repo (the "superproject") houses a cloned version of the 2nd repository (the "submodule") inside it, making locales effectively a "repository within a repository", so to speak.
|
||||||
|
|
||||||
>[!TIP]
|
>[!TIP]
|
||||||
> Many popular IDEs have integrated `git` support with special handling around submodules:
|
> Many popular IDEs have integrated `git` support with special handling around submodules:
|
||||||
|
>
|
||||||
> 
|
> 
|
||||||
>
|
>
|
||||||
> 
|
> 
|
||||||
@ -32,14 +33,14 @@ The parent repo (the "superproject") houses a cloned version of the 2nd reposito
|
|||||||
|
|
||||||
The following command will initialize your branch's locales repository and update its HEAD:
|
The following command will initialize your branch's locales repository and update its HEAD:
|
||||||
```bash
|
```bash
|
||||||
git submodule update --init --recursive
|
pnpm update-locales
|
||||||
```
|
```
|
||||||
|
|
||||||
> [!TIP]
|
> [!TIP]
|
||||||
> This command is run _automatically_ after cloning, merging or changing branches, so you should rarely have to run it manually.
|
> This command is run _automatically_ after cloning, merging or changing branches, so you should rarely have to run it manually.
|
||||||
|
|
||||||
> [!IMPORTANT]
|
> [!IMPORTANT]
|
||||||
> If you run into issues with the `locales` submodule, try deleting the `.git/modules/public` and `public/locales` folders before re-running the command.
|
> If you EVER run into issues with the `locales` submodule, try deleting the `.git/modules/public` and `public/locales` folders before re-initializing it again.
|
||||||
|
|
||||||
## How Are Translations Integrated?
|
## How Are Translations Integrated?
|
||||||
|
|
||||||
@ -65,7 +66,7 @@ The basic process for fetching translated text goes roughly as follows:
|
|||||||
```
|
```
|
||||||
|
|
||||||
# Submitting Locales Changes
|
# Submitting Locales Changes
|
||||||
If you have a feature or enhancement that requires additions or changes to in-game text, you will need to make a fork of the `pokerogue-locales` repo and submit your text changes as a pull request _in addition_ to your pull request to the main project.
|
If you have a feature or enhancement that requires additions or changes to in-game text, you will need to make a fork of the `pokerogue-locales` repo and submit your text changes as a pull request _in addition_ to your pull request to the main project. \
|
||||||
Since these two PRs aren't _technically_ linked, it's important to coordinate with the Translation Team to ensure that both PRs are integrated safely into the project.
|
Since these two PRs aren't _technically_ linked, it's important to coordinate with the Translation Team to ensure that both PRs are integrated safely into the project.
|
||||||
|
|
||||||
> [!CAUTION]
|
> [!CAUTION]
|
||||||
@ -73,29 +74,29 @@ Since these two PRs aren't _technically_ linked, it's important to coordinate wi
|
|||||||
|
|
||||||
## Making Changes
|
## Making Changes
|
||||||
|
|
||||||
One perk of submodules is you don't actually _need_ to clone the locales repository to start contributing - initializing the submodule already does that for you.
|
One perk of submodules is you don't actually _need_ to clone the locales repository to start contributing - `git` already does that for you on initialization.
|
||||||
|
|
||||||
Given `pokerogue-locales` is a full-fledged `git` repository _inside_ `pokerogue`, making changes is roughly the same as normal, merely using `public/locales` as your root directory.
|
Given `pokerogue-locales` is a full-fledged `git` repository _inside_ `pokerogue`, making changes is roughly the same as normal, merely using `public/locales` as your root directory.
|
||||||
|
|
||||||
> [!WARNING]
|
> [!WARNING]
|
||||||
> Make sure to checkout or rebase onto `upstream/HEAD` **BEFORE** creating a PR!
|
> Make sure to checkout or rebase onto `upstream/main` (`pnpm update-locales:remote`) **BEFORE** creating a locales PR!
|
||||||
> The checked-out commit is based on the superproject's SHA-1 by default, so hastily making changes may see you basing your commits on last week's `HEAD`.
|
> The checked-out commit is based on the superproject's SHA-1 by default, so hastily making changes may see you basing your commits on last week's `HEAD`.
|
||||||
|
|
||||||
## Requirements for Adding Translated Text
|
## Requirements for Adding Translated Text
|
||||||
When your new feature or enhancement requires adding a new locales key **without changing text in existing keys**, we require the following workflow with regards to localization:
|
When a new feature or enhancement requires adding a new locales key **without changing text in existing keys**, we have the following workflow with regards to localization:
|
||||||
1. You (the developer) make a pull request to the main repository for your new feature.
|
1. You (the developer) make a pull request to the main repository for your new feature.
|
||||||
If this feature requires new text, the text should be integrated into the code with a new `i18next` key pointing to where you plan to add it into the locales repository.
|
If this feature requires new text, the text should be integrated into the code with a new `i18next` key pointing to where you plan to add it into the locales repository.
|
||||||
2. You then make another pull request — this time to the `pokerogue-locales` repository — adding a new entry with text for each key you added to your main PR.
|
2. You then make another pull request — this time to the `pokerogue-locales` repository — adding a new entry with text for each key you added to your main PR.
|
||||||
- You must add the corresponding **English keys** while making the PR; the Translation Team can take care of the rest[^2].
|
- You must add the corresponding **English keys** while making the PR; the Translation Team can take care of the rest[^2].
|
||||||
- For any feature pulled from the mainline Pokémon games (e.g. a Move or Ability implementation), it's best practice to include a source link for any added text.
|
- For any feature pulled from the mainline Pokémon games (e.g. a Move or Ability implementation), it's best practice to include a source link for any added text. \
|
||||||
[Poké Corpus](https://abcboy101.github.io/poke-corpus/) is a great resource for finding text from the mainline games; otherwise, a video/picture showing the text being displayed should suffice.
|
[Poké Corpus](https://abcboy101.github.io/poke-corpus/) is a great resource for finding text from the mainline games; otherwise, a video/picture showing the text being displayed should suffice.
|
||||||
- You should also [notify the current Head of Translation](#notifying-translation) to ensure a fast response.
|
- You should also [notify the current Head of Translation](#notifying-translation) to ensure a fast response.
|
||||||
3. Your locales should use the following format:
|
3. Your locales should use the following format:
|
||||||
- File names should be in `kebab-case`. Example: `trainer-names.json`
|
- File names should be in `kebab-case`. Example: `trainer-names.json`
|
||||||
- Key names should be in `camelCase`. Example: `aceTrainer`
|
- Key names should be in `camelCase`. Example: `aceTrainer`
|
||||||
- If you make use of i18next's inbuilt [context support](https://www.i18next.com/translation-function/context), you need to use `snake_case` for the context key. Example: `aceTrainer_male`
|
- If you make use of i18next's inbuilt [context support](https://www.i18next.com/translation-function/context), you need to use `snake_case` for the context key. Example: `aceTrainer_male`
|
||||||
4. At this point, you may begin [testing locales integration in your main PR](#documenting-locales-changes).
|
4. At this point, you may begin [testing locales integration in your main PR](#documenting-locales-changes).
|
||||||
5. The Translation Team will approve the locale PR (after corrections, if necessary), then merge it into `pokerogue-locales`.
|
5. The Translation Team will approve the locales PR (after corrections, if necessary), then merge it into `pokerogue-locales`.
|
||||||
6. The Dev Team will approve your main PR for your feature, then merge it into PokéRogue's beta environment.
|
6. The Dev Team will approve your main PR for your feature, then merge it into PokéRogue's beta environment.
|
||||||
|
|
||||||
[^2]: For those wondering, the reason for choosing English specifically is due to it being the master language set in Pontoon (the program used by the Translation Team to perform locale updates).
|
[^2]: For those wondering, the reason for choosing English specifically is due to it being the master language set in Pontoon (the program used by the Translation Team to perform locale updates).
|
||||||
@ -106,7 +107,7 @@ If a key is present in any language _except_ the master language, it won't appea
|
|||||||
PRs that modify existing text have different risks with respect to coordination between development and translation, so their requirements are slightly different:
|
PRs that modify existing text have different risks with respect to coordination between development and translation, so their requirements are slightly different:
|
||||||
- As above, you set up 2 PRs: one for the feature itself in the main repo, and another for the associated locales changes in the locale repo.
|
- As above, you set up 2 PRs: one for the feature itself in the main repo, and another for the associated locales changes in the locale repo.
|
||||||
- Now, however, you need to have your main PR be approved by the Dev Team **before** your corresponding locale changes are merged in.
|
- Now, however, you need to have your main PR be approved by the Dev Team **before** your corresponding locale changes are merged in.
|
||||||
- After your main PR is approved, the Translation Team will merge your locale PR, and you may update the submodule and post video evidence of integration into the **locales PR**.
|
- After your main PR is approved, you may update the submodule and post video evidence of integration into the **locales PR**.
|
||||||
- A Lead or Senior Translator from the Translation Team will then approve your main PR (if all is well), clearing your feature for merging into `beta`.
|
- A Lead or Senior Translator from the Translation Team will then approve your main PR (if all is well), clearing your feature for merging into `beta`.
|
||||||
|
|
||||||
## Documenting Locales Changes
|
## Documenting Locales Changes
|
||||||
@ -115,12 +116,12 @@ After making a PR involving any outwards-facing behavior (but _especially_ local
|
|||||||
|
|
||||||
The basic procedure is roughly as follows:
|
The basic procedure is roughly as follows:
|
||||||
1. Update your locales submodule to point to **the branch you used to make the locales PR**. \
|
1. Update your locales submodule to point to **the branch you used to make the locales PR**. \
|
||||||
Many IDEs with `git` integration support doing this from the GUI, \
|
Many IDEs with `git` integration support doing this from the GUI, \
|
||||||
or you can simply do it via command-line:
|
or you can simply do it via command-line:
|
||||||
```bash
|
```bash
|
||||||
cd public/locales
|
cd public/locales
|
||||||
git checkout your-branch-name-here
|
git checkout your-branch-name-here
|
||||||
```
|
```
|
||||||
2. Set some of the [in-game overrides](../CONTRIBUTING.md#1---manual-testing) inside `overrides.ts` to values corresponding to the interactions being tested.
|
2. Set some of the [in-game overrides](../CONTRIBUTING.md#1---manual-testing) inside `overrides.ts` to values corresponding to the interactions being tested.
|
||||||
3. Start a local dev server (`pnpm start:dev`) and open localhost in your browser.
|
3. Start a local dev server (`pnpm start:dev`) and open localhost in your browser.
|
||||||
4. Take screenshots or record a video of the locales changes being displayed in-game using the software of your choice[^2].
|
4. Take screenshots or record a video of the locales changes being displayed in-game using the software of your choice[^2].
|
||||||
|
10
lefthook.yml
@ -1,10 +1,12 @@
|
|||||||
pre-commit:
|
pre-commit:
|
||||||
skip:
|
skip:
|
||||||
- merge
|
- merge
|
||||||
- rebase
|
- rebase
|
||||||
commands:
|
commands:
|
||||||
biome-lint:
|
biome-lint:
|
||||||
run: pnpm exec biome check --write --reporter=summary --staged --no-errors-on-unmatched
|
# Disable colors as certain IDEs don't support it in the output pane.
|
||||||
|
# Summary mode looks decent in plain ASCII anyhow
|
||||||
|
run: pnpm exec biome check --write --colors=off --reporter=summary --staged --no-errors-on-unmatched --diagnostic-level=error
|
||||||
stage_fixed: true
|
stage_fixed: true
|
||||||
ls-lint:
|
ls-lint:
|
||||||
run: pnpm exec ls-lint
|
run: pnpm exec ls-lint
|
||||||
@ -12,11 +14,11 @@ pre-commit:
|
|||||||
post-merge:
|
post-merge:
|
||||||
commands:
|
commands:
|
||||||
update-submodules:
|
update-submodules:
|
||||||
run: git submodule update --init --recursive
|
run: pnpm update-locales
|
||||||
|
|
||||||
post-checkout:
|
post-checkout:
|
||||||
commands:
|
commands:
|
||||||
update-submodules:
|
update-submodules:
|
||||||
# cf https://git-scm.com/docs/githooks#_post_checkout:
|
# cf https://git-scm.com/docs/githooks#_post_checkout:
|
||||||
# The 3rd argument is 1 for branch checkouts and 0 for file checkouts.
|
# The 3rd argument is 1 for branch checkouts and 0 for file checkouts.
|
||||||
run: if test {3} -eq "1"; then git submodule update --init --recursive; fi
|
run: if test {3} -eq "1"; then pnpm update-locales; fi
|
@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"name": "pokemon-rogue-battle",
|
"name": "pokemon-rogue-battle",
|
||||||
"private": true,
|
"private": true,
|
||||||
"version": "1.10.6",
|
"version": "1.10.7",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"start:prod": "vite --mode production",
|
"start:prod": "vite --mode production",
|
||||||
@ -15,25 +15,30 @@
|
|||||||
"test:watch": "vitest watch --coverage --no-isolate",
|
"test:watch": "vitest watch --coverage --no-isolate",
|
||||||
"test:silent": "vitest run --silent='passed-only' --no-isolate",
|
"test:silent": "vitest run --silent='passed-only' --no-isolate",
|
||||||
"test:create": "node scripts/create-test/create-test.js",
|
"test:create": "node scripts/create-test/create-test.js",
|
||||||
|
"eggMoves:parse": "node scripts/parse-egg-moves/main.js",
|
||||||
"scrape-trainers": "node scripts/scrape-trainer-names/main.js",
|
"scrape-trainers": "node scripts/scrape-trainer-names/main.js",
|
||||||
"typecheck": "tsc --noEmit",
|
"typecheck": "tsc --noEmit",
|
||||||
|
"typecheck:scripts": "tsc -p scripts/jsconfig.json",
|
||||||
"biome": "biome check --write --changed --no-errors-on-unmatched --diagnostic-level=error",
|
"biome": "biome check --write --changed --no-errors-on-unmatched --diagnostic-level=error",
|
||||||
|
"biome:all": "biome check --write --no-errors-on-unmatched --diagnostic-level=error",
|
||||||
"biome-ci": "biome ci --diagnostic-level=error --reporter=github --no-errors-on-unmatched",
|
"biome-ci": "biome ci --diagnostic-level=error --reporter=github --no-errors-on-unmatched",
|
||||||
"typedoc": "typedoc",
|
"typedoc": "typedoc",
|
||||||
"depcruise": "depcruise src test",
|
"depcruise": "depcruise src test",
|
||||||
"postinstall": "lefthook install; git submodule update --init --recursive",
|
"postinstall": "lefthook install; git submodule update --init --recursive",
|
||||||
"update-version:patch": "pnpm version patch --force --no-git-tag-version",
|
"update-version:patch": "pnpm version patch --force --no-git-tag-version",
|
||||||
"update-version:minor": "pnpm version minor --force --no-git-tag-version",
|
"update-version:minor": "pnpm version minor --force --no-git-tag-version",
|
||||||
|
"update-locales": "git submodule update --progress --init --recursive",
|
||||||
"update-locales:remote": "git submodule update --progress --init --recursive --force --remote"
|
"update-locales:remote": "git submodule update --progress --init --recursive --force --remote"
|
||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@biomejs/biome": "2.0.0",
|
"@biomejs/biome": "2.2.3",
|
||||||
"@ls-lint/ls-lint": "2.3.1",
|
"@ls-lint/ls-lint": "2.3.1",
|
||||||
"@types/crypto-js": "^4.2.0",
|
"@types/crypto-js": "^4.2.0",
|
||||||
"@types/jsdom": "^21.1.7",
|
"@types/jsdom": "^21.1.7",
|
||||||
"@types/node": "^22.16.5",
|
"@types/node": "^22.16.5",
|
||||||
"@vitest/coverage-istanbul": "^3.2.4",
|
"@vitest/coverage-istanbul": "^3.2.4",
|
||||||
"@vitest/expect": "^3.2.4",
|
"@vitest/expect": "^3.2.4",
|
||||||
|
"@vitest/utils": "^3.2.4",
|
||||||
"chalk": "^5.4.1",
|
"chalk": "^5.4.1",
|
||||||
"dependency-cruiser": "^16.10.4",
|
"dependency-cruiser": "^16.10.4",
|
||||||
"inquirer": "^12.8.2",
|
"inquirer": "^12.8.2",
|
||||||
|
@ -43,8 +43,8 @@ importers:
|
|||||||
version: 1.80.16(graphology-types@0.24.8)
|
version: 1.80.16(graphology-types@0.24.8)
|
||||||
devDependencies:
|
devDependencies:
|
||||||
'@biomejs/biome':
|
'@biomejs/biome':
|
||||||
specifier: 2.0.0
|
specifier: 2.2.3
|
||||||
version: 2.0.0
|
version: 2.2.3
|
||||||
'@ls-lint/ls-lint':
|
'@ls-lint/ls-lint':
|
||||||
specifier: 2.3.1
|
specifier: 2.3.1
|
||||||
version: 2.3.1
|
version: 2.3.1
|
||||||
@ -63,6 +63,9 @@ importers:
|
|||||||
'@vitest/expect':
|
'@vitest/expect':
|
||||||
specifier: ^3.2.4
|
specifier: ^3.2.4
|
||||||
version: 3.2.4
|
version: 3.2.4
|
||||||
|
'@vitest/utils':
|
||||||
|
specifier: ^3.2.4
|
||||||
|
version: 3.2.4
|
||||||
chalk:
|
chalk:
|
||||||
specifier: ^5.4.1
|
specifier: ^5.4.1
|
||||||
version: 5.4.1
|
version: 5.4.1
|
||||||
@ -192,55 +195,55 @@ packages:
|
|||||||
resolution: {integrity: sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ==}
|
resolution: {integrity: sha512-ruv7Ae4J5dUYULmeXw1gmb7rYRz57OWCPM57pHojnLq/3Z1CK2lNSLTCVjxVk1F/TZHwOZZrOWi0ur95BbLxNQ==}
|
||||||
engines: {node: '>=6.9.0'}
|
engines: {node: '>=6.9.0'}
|
||||||
|
|
||||||
'@biomejs/biome@2.0.0':
|
'@biomejs/biome@2.2.3':
|
||||||
resolution: {integrity: sha512-BlUoXEOI/UQTDEj/pVfnkMo8SrZw3oOWBDrXYFT43V7HTkIUDkBRY53IC5Jx1QkZbaB+0ai1wJIfYwp9+qaJTQ==}
|
resolution: {integrity: sha512-9w0uMTvPrIdvUrxazZ42Ib7t8Y2yoGLKLdNne93RLICmaHw7mcLv4PPb5LvZLJF3141gQHiCColOh/v6VWlWmg==}
|
||||||
engines: {node: '>=14.21.3'}
|
engines: {node: '>=14.21.3'}
|
||||||
hasBin: true
|
hasBin: true
|
||||||
|
|
||||||
'@biomejs/cli-darwin-arm64@2.0.0':
|
'@biomejs/cli-darwin-arm64@2.2.3':
|
||||||
resolution: {integrity: sha512-QvqWYtFFhhxdf8jMAdJzXW+Frc7X8XsnHQLY+TBM1fnT1TfeV/v9vsFI5L2J7GH6qN1+QEEJ19jHibCY2Ypplw==}
|
resolution: {integrity: sha512-OrqQVBpadB5eqzinXN4+Q6honBz+tTlKVCsbEuEpljK8ASSItzIRZUA02mTikl3H/1nO2BMPFiJ0nkEZNy3B1w==}
|
||||||
engines: {node: '>=14.21.3'}
|
engines: {node: '>=14.21.3'}
|
||||||
cpu: [arm64]
|
cpu: [arm64]
|
||||||
os: [darwin]
|
os: [darwin]
|
||||||
|
|
||||||
'@biomejs/cli-darwin-x64@2.0.0':
|
'@biomejs/cli-darwin-x64@2.2.3':
|
||||||
resolution: {integrity: sha512-5JFhls1EfmuIH4QGFPlNpxJQFC6ic3X1ltcoLN+eSRRIPr6H/lUS1ttuD0Fj7rPgPhZqopK/jfH8UVj/1hIsQw==}
|
resolution: {integrity: sha512-OCdBpb1TmyfsTgBAM1kPMXyYKTohQ48WpiN9tkt9xvU6gKVKHY4oVwteBebiOqyfyzCNaSiuKIPjmHjUZ2ZNMg==}
|
||||||
engines: {node: '>=14.21.3'}
|
engines: {node: '>=14.21.3'}
|
||||||
cpu: [x64]
|
cpu: [x64]
|
||||||
os: [darwin]
|
os: [darwin]
|
||||||
|
|
||||||
'@biomejs/cli-linux-arm64-musl@2.0.0':
|
'@biomejs/cli-linux-arm64-musl@2.2.3':
|
||||||
resolution: {integrity: sha512-Bxsz8ki8+b3PytMnS5SgrGV+mbAWwIxI3ydChb/d1rURlJTMdxTTq5LTebUnlsUWAX6OvJuFeiVq9Gjn1YbCyA==}
|
resolution: {integrity: sha512-q3w9jJ6JFPZPeqyvwwPeaiS/6NEszZ+pXKF+IczNo8Xj6fsii45a4gEEicKyKIytalV+s829ACZujQlXAiVLBQ==}
|
||||||
engines: {node: '>=14.21.3'}
|
engines: {node: '>=14.21.3'}
|
||||||
cpu: [arm64]
|
cpu: [arm64]
|
||||||
os: [linux]
|
os: [linux]
|
||||||
|
|
||||||
'@biomejs/cli-linux-arm64@2.0.0':
|
'@biomejs/cli-linux-arm64@2.2.3':
|
||||||
resolution: {integrity: sha512-BAH4QVi06TzAbVchXdJPsL0Z/P87jOfes15rI+p3EX9/EGTfIjaQ9lBVlHunxcmoptaA5y1Hdb9UYojIhmnjIw==}
|
resolution: {integrity: sha512-g/Uta2DqYpECxG+vUmTAmUKlVhnGEcY7DXWgKP8ruLRa8Si1QHsWknPY3B/wCo0KgYiFIOAZ9hjsHfNb9L85+g==}
|
||||||
engines: {node: '>=14.21.3'}
|
engines: {node: '>=14.21.3'}
|
||||||
cpu: [arm64]
|
cpu: [arm64]
|
||||||
os: [linux]
|
os: [linux]
|
||||||
|
|
||||||
'@biomejs/cli-linux-x64-musl@2.0.0':
|
'@biomejs/cli-linux-x64-musl@2.2.3':
|
||||||
resolution: {integrity: sha512-tiQ0ABxMJb9I6GlfNp0ulrTiQSFacJRJO8245FFwE3ty3bfsfxlU/miblzDIi+qNrgGsLq5wIZcVYGp4c+HXZA==}
|
resolution: {integrity: sha512-y76Dn4vkP1sMRGPFlNc+OTETBhGPJ90jY3il6jAfur8XWrYBQV3swZ1Jo0R2g+JpOeeoA0cOwM7mJG6svDz79w==}
|
||||||
engines: {node: '>=14.21.3'}
|
engines: {node: '>=14.21.3'}
|
||||||
cpu: [x64]
|
cpu: [x64]
|
||||||
os: [linux]
|
os: [linux]
|
||||||
|
|
||||||
'@biomejs/cli-linux-x64@2.0.0':
|
'@biomejs/cli-linux-x64@2.2.3':
|
||||||
resolution: {integrity: sha512-09PcOGYTtkopWRm6mZ/B6Mr6UHdkniUgIG/jLBv+2J8Z61ezRE+xQmpi3yNgUrFIAU4lPA9atg7mhvE/5Bo7Wg==}
|
resolution: {integrity: sha512-LEtyYL1fJsvw35CxrbQ0gZoxOG3oZsAjzfRdvRBRHxOpQ91Q5doRVjvWW/wepgSdgk5hlaNzfeqpyGmfSD0Eyw==}
|
||||||
engines: {node: '>=14.21.3'}
|
engines: {node: '>=14.21.3'}
|
||||||
cpu: [x64]
|
cpu: [x64]
|
||||||
os: [linux]
|
os: [linux]
|
||||||
|
|
||||||
'@biomejs/cli-win32-arm64@2.0.0':
|
'@biomejs/cli-win32-arm64@2.2.3':
|
||||||
resolution: {integrity: sha512-vrTtuGu91xNTEQ5ZcMJBZuDlqr32DWU1r14UfePIGndF//s2WUAmer4FmgoPgruo76rprk37e8S2A2c0psXdxw==}
|
resolution: {integrity: sha512-Ms9zFYzjcJK7LV+AOMYnjN3pV3xL8Prxf9aWdDVL74onLn5kcvZ1ZMQswE5XHtnd/r/0bnUd928Rpbs14BzVmA==}
|
||||||
engines: {node: '>=14.21.3'}
|
engines: {node: '>=14.21.3'}
|
||||||
cpu: [arm64]
|
cpu: [arm64]
|
||||||
os: [win32]
|
os: [win32]
|
||||||
|
|
||||||
'@biomejs/cli-win32-x64@2.0.0':
|
'@biomejs/cli-win32-x64@2.2.3':
|
||||||
resolution: {integrity: sha512-2USVQ0hklNsph/KIR72ZdeptyXNnQ3JdzPn3NbjI4Sna34CnxeiYAaZcZzXPDl5PYNFBivV4xmvT3Z3rTmyDBg==}
|
resolution: {integrity: sha512-gvCpewE7mBwBIpqk1YrUqNR4mCiyJm6UI3YWQQXkedSSEwzRdodRpaKhbdbHw1/hmTWOVXQ+Eih5Qctf4TCVOQ==}
|
||||||
engines: {node: '>=14.21.3'}
|
engines: {node: '>=14.21.3'}
|
||||||
cpu: [x64]
|
cpu: [x64]
|
||||||
os: [win32]
|
os: [win32]
|
||||||
@ -2151,39 +2154,39 @@ snapshots:
|
|||||||
'@babel/helper-string-parser': 7.27.1
|
'@babel/helper-string-parser': 7.27.1
|
||||||
'@babel/helper-validator-identifier': 7.27.1
|
'@babel/helper-validator-identifier': 7.27.1
|
||||||
|
|
||||||
'@biomejs/biome@2.0.0':
|
'@biomejs/biome@2.2.3':
|
||||||
optionalDependencies:
|
optionalDependencies:
|
||||||
'@biomejs/cli-darwin-arm64': 2.0.0
|
'@biomejs/cli-darwin-arm64': 2.2.3
|
||||||
'@biomejs/cli-darwin-x64': 2.0.0
|
'@biomejs/cli-darwin-x64': 2.2.3
|
||||||
'@biomejs/cli-linux-arm64': 2.0.0
|
'@biomejs/cli-linux-arm64': 2.2.3
|
||||||
'@biomejs/cli-linux-arm64-musl': 2.0.0
|
'@biomejs/cli-linux-arm64-musl': 2.2.3
|
||||||
'@biomejs/cli-linux-x64': 2.0.0
|
'@biomejs/cli-linux-x64': 2.2.3
|
||||||
'@biomejs/cli-linux-x64-musl': 2.0.0
|
'@biomejs/cli-linux-x64-musl': 2.2.3
|
||||||
'@biomejs/cli-win32-arm64': 2.0.0
|
'@biomejs/cli-win32-arm64': 2.2.3
|
||||||
'@biomejs/cli-win32-x64': 2.0.0
|
'@biomejs/cli-win32-x64': 2.2.3
|
||||||
|
|
||||||
'@biomejs/cli-darwin-arm64@2.0.0':
|
'@biomejs/cli-darwin-arm64@2.2.3':
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
'@biomejs/cli-darwin-x64@2.0.0':
|
'@biomejs/cli-darwin-x64@2.2.3':
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
'@biomejs/cli-linux-arm64-musl@2.0.0':
|
'@biomejs/cli-linux-arm64-musl@2.2.3':
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
'@biomejs/cli-linux-arm64@2.0.0':
|
'@biomejs/cli-linux-arm64@2.2.3':
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
'@biomejs/cli-linux-x64-musl@2.0.0':
|
'@biomejs/cli-linux-x64-musl@2.2.3':
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
'@biomejs/cli-linux-x64@2.0.0':
|
'@biomejs/cli-linux-x64@2.2.3':
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
'@biomejs/cli-win32-arm64@2.0.0':
|
'@biomejs/cli-win32-arm64@2.2.3':
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
'@biomejs/cli-win32-x64@2.0.0':
|
'@biomejs/cli-win32-x64@2.2.3':
|
||||||
optional: true
|
optional: true
|
||||||
|
|
||||||
'@bundled-es-modules/cookie@2.0.1':
|
'@bundled-es-modules/cookie@2.0.1':
|
||||||
|
Before Width: | Height: | Size: 237 B |
Before Width: | Height: | Size: 237 B |
Before Width: | Height: | Size: 114 B |
Before Width: | Height: | Size: 129 B |
Before Width: | Height: | Size: 169 B After Width: | Height: | Size: 140 B |
Before Width: | Height: | Size: 124 B |
Before Width: | Height: | Size: 331 B After Width: | Height: | Size: 299 B |
Before Width: | Height: | Size: 308 B After Width: | Height: | Size: 274 B |
Before Width: | Height: | Size: 355 B After Width: | Height: | Size: 318 B |
Before Width: | Height: | Size: 309 B After Width: | Height: | Size: 292 B |
Before Width: | Height: | Size: 232 B |
After Width: | Height: | Size: 116 B |
After Width: | Height: | Size: 169 B |
After Width: | Height: | Size: 149 B |
After Width: | Height: | Size: 124 B |
@ -0,0 +1,209 @@
|
|||||||
|
{
|
||||||
|
"textures": [
|
||||||
|
{
|
||||||
|
"image": "pbinfo_stat_ca.png",
|
||||||
|
"format": "RGBA8888",
|
||||||
|
"size": {
|
||||||
|
"w": 112,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"scale": 1,
|
||||||
|
"frames": [
|
||||||
|
{
|
||||||
|
"filename": "SPATK",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": true,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 19,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 1,
|
||||||
|
"y": 0,
|
||||||
|
"w": 18,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 18,
|
||||||
|
"h": 8
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "SPDEF",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": true,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 19,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 1,
|
||||||
|
"y": 0,
|
||||||
|
"w": 18,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 18,
|
||||||
|
"y": 0,
|
||||||
|
"w": 18,
|
||||||
|
"h": 8
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "CRIT",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": true,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 17,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 1,
|
||||||
|
"y": 0,
|
||||||
|
"w": 16,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 36,
|
||||||
|
"y": 0,
|
||||||
|
"w": 16,
|
||||||
|
"h": 8
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "ACC",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": true,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 13,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 1,
|
||||||
|
"y": 0,
|
||||||
|
"w": 12,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 52,
|
||||||
|
"y": 0,
|
||||||
|
"w": 12,
|
||||||
|
"h": 8
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "ATK",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": true,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 13,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 1,
|
||||||
|
"y": 0,
|
||||||
|
"w": 12,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 64,
|
||||||
|
"y": 0,
|
||||||
|
"w": 12,
|
||||||
|
"h": 8
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "DEF",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": true,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 13,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 1,
|
||||||
|
"y": 0,
|
||||||
|
"w": 12,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 76,
|
||||||
|
"y": 0,
|
||||||
|
"w": 12,
|
||||||
|
"h": 8
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "EVA",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": true,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 13,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 1,
|
||||||
|
"y": 0,
|
||||||
|
"w": 12,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 88,
|
||||||
|
"y": 0,
|
||||||
|
"w": 12,
|
||||||
|
"h": 8
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "SPD",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": true,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 13,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 1,
|
||||||
|
"y": 0,
|
||||||
|
"w": 12,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 100,
|
||||||
|
"y": 0,
|
||||||
|
"w": 12,
|
||||||
|
"h": 8
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "HP",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": true,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 9,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 1,
|
||||||
|
"y": 0,
|
||||||
|
"w": 8,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 112,
|
||||||
|
"y": 0,
|
||||||
|
"w": 8,
|
||||||
|
"h": 8
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"meta": {
|
||||||
|
"app": "https://www.codeandweb.com/texturepacker",
|
||||||
|
"version": "3.0",
|
||||||
|
"smartupdate": "$TexturePacker:SmartUpdate:40d30205ce8efd40dfa86cd11b0491d6:7076db6ed74199dcfb38fc8cd4d4a0e8:05882267d3999884e0491134e98b1b53$"
|
||||||
|
}
|
||||||
|
}
|
After Width: | Height: | Size: 288 B |
After Width: | Height: | Size: 146 B |
After Width: | Height: | Size: 125 B |
After Width: | Height: | Size: 120 B |
After Width: | Height: | Size: 169 B |
After Width: | Height: | Size: 146 B |
After Width: | Height: | Size: 111 B |
@ -0,0 +1,209 @@
|
|||||||
|
{
|
||||||
|
"textures": [
|
||||||
|
{
|
||||||
|
"image": "pbinfo_stat_da.png",
|
||||||
|
"format": "RGBA8888",
|
||||||
|
"size": {
|
||||||
|
"w": 112,
|
||||||
|
"h": 6
|
||||||
|
},
|
||||||
|
"scale": 1,
|
||||||
|
"frames": [
|
||||||
|
{
|
||||||
|
"filename": "SPATK",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": true,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 19,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 1,
|
||||||
|
"y": 2,
|
||||||
|
"w": 18,
|
||||||
|
"h": 6
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 18,
|
||||||
|
"h": 6
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "SPDEF",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": true,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 19,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 1,
|
||||||
|
"y": 2,
|
||||||
|
"w": 18,
|
||||||
|
"h": 6
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 18,
|
||||||
|
"y": 0,
|
||||||
|
"w": 18,
|
||||||
|
"h": 6
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "CRIT",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": true,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 17,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 1,
|
||||||
|
"y": 2,
|
||||||
|
"w": 16,
|
||||||
|
"h": 6
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 36,
|
||||||
|
"y": 0,
|
||||||
|
"w": 16,
|
||||||
|
"h": 6
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "ACC",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": true,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 13,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 1,
|
||||||
|
"y": 2,
|
||||||
|
"w": 12,
|
||||||
|
"h": 6
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 52,
|
||||||
|
"y": 0,
|
||||||
|
"w": 12,
|
||||||
|
"h": 6
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "ATK",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": true,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 13,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 1,
|
||||||
|
"y": 2,
|
||||||
|
"w": 12,
|
||||||
|
"h": 6
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 64,
|
||||||
|
"y": 0,
|
||||||
|
"w": 12,
|
||||||
|
"h": 6
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "DEF",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": true,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 13,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 1,
|
||||||
|
"y": 2,
|
||||||
|
"w": 12,
|
||||||
|
"h": 6
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 76,
|
||||||
|
"y": 0,
|
||||||
|
"w": 12,
|
||||||
|
"h": 6
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "EVA",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": true,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 13,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 1,
|
||||||
|
"y": 2,
|
||||||
|
"w": 12,
|
||||||
|
"h": 6
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 88,
|
||||||
|
"y": 0,
|
||||||
|
"w": 12,
|
||||||
|
"h": 6
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "SPD",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": true,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 13,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 1,
|
||||||
|
"y": 2,
|
||||||
|
"w": 12,
|
||||||
|
"h": 6
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 100,
|
||||||
|
"y": 0,
|
||||||
|
"w": 12,
|
||||||
|
"h": 6
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "HP",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": true,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 9,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 1,
|
||||||
|
"y": 2,
|
||||||
|
"w": 8,
|
||||||
|
"h": 6
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 112,
|
||||||
|
"y": 0,
|
||||||
|
"w": 8,
|
||||||
|
"h": 6
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"meta": {
|
||||||
|
"app": "https://www.codeandweb.com/texturepacker",
|
||||||
|
"version": "3.0",
|
||||||
|
"smartupdate": "$TexturePacker:SmartUpdate:40d30205ce8efd40dfa86cd11b0491d6:7076db6ed74199dcfb38fc8cd4d4a0e8:05882267d3999884e0491134e98b1b53$"
|
||||||
|
}
|
||||||
|
}
|
After Width: | Height: | Size: 236 B |
After Width: | Height: | Size: 144 B |
Before Width: | Height: | Size: 112 B After Width: | Height: | Size: 112 B |
After Width: | Height: | Size: 120 B |
After Width: | Height: | Size: 169 B |
After Width: | Height: | Size: 149 B |
After Width: | Height: | Size: 111 B |
@ -0,0 +1,209 @@
|
|||||||
|
{
|
||||||
|
"textures": [
|
||||||
|
{
|
||||||
|
"image": "pbinfo_stat_de.png",
|
||||||
|
"format": "RGBA8888",
|
||||||
|
"size": {
|
||||||
|
"w": 112,
|
||||||
|
"h": 6
|
||||||
|
},
|
||||||
|
"scale": 1,
|
||||||
|
"frames": [
|
||||||
|
{
|
||||||
|
"filename": "SPATK",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": true,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 19,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 1,
|
||||||
|
"y": 2,
|
||||||
|
"w": 18,
|
||||||
|
"h": 6
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 18,
|
||||||
|
"h": 6
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "SPDEF",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": true,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 19,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 1,
|
||||||
|
"y": 2,
|
||||||
|
"w": 18,
|
||||||
|
"h": 6
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 18,
|
||||||
|
"y": 0,
|
||||||
|
"w": 18,
|
||||||
|
"h": 6
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "CRIT",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": true,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 17,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 1,
|
||||||
|
"y": 2,
|
||||||
|
"w": 16,
|
||||||
|
"h": 6
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 36,
|
||||||
|
"y": 0,
|
||||||
|
"w": 16,
|
||||||
|
"h": 6
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "ACC",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": true,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 13,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 1,
|
||||||
|
"y": 2,
|
||||||
|
"w": 12,
|
||||||
|
"h": 6
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 52,
|
||||||
|
"y": 0,
|
||||||
|
"w": 12,
|
||||||
|
"h": 6
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "ATK",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": true,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 13,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 1,
|
||||||
|
"y": 2,
|
||||||
|
"w": 12,
|
||||||
|
"h": 6
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 64,
|
||||||
|
"y": 0,
|
||||||
|
"w": 12,
|
||||||
|
"h": 6
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "DEF",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": true,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 13,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 1,
|
||||||
|
"y": 2,
|
||||||
|
"w": 12,
|
||||||
|
"h": 6
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 76,
|
||||||
|
"y": 0,
|
||||||
|
"w": 12,
|
||||||
|
"h": 6
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "EVA",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": true,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 13,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 1,
|
||||||
|
"y": 2,
|
||||||
|
"w": 12,
|
||||||
|
"h": 6
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 88,
|
||||||
|
"y": 0,
|
||||||
|
"w": 12,
|
||||||
|
"h": 6
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "SPD",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": true,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 13,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 1,
|
||||||
|
"y": 2,
|
||||||
|
"w": 12,
|
||||||
|
"h": 6
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 100,
|
||||||
|
"y": 0,
|
||||||
|
"w": 12,
|
||||||
|
"h": 6
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "HP",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": true,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 9,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 1,
|
||||||
|
"y": 2,
|
||||||
|
"w": 8,
|
||||||
|
"h": 6
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 112,
|
||||||
|
"y": 0,
|
||||||
|
"w": 8,
|
||||||
|
"h": 6
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"meta": {
|
||||||
|
"app": "https://www.codeandweb.com/texturepacker",
|
||||||
|
"version": "3.0",
|
||||||
|
"smartupdate": "$TexturePacker:SmartUpdate:40d30205ce8efd40dfa86cd11b0491d6:7076db6ed74199dcfb38fc8cd4d4a0e8:05882267d3999884e0491134e98b1b53$"
|
||||||
|
}
|
||||||
|
}
|
After Width: | Height: | Size: 240 B |
After Width: | Height: | Size: 145 B |
After Width: | Height: | Size: 112 B |
After Width: | Height: | Size: 1.4 KiB |
After Width: | Height: | Size: 146 B |
After Width: | Height: | Size: 169 B |
BIN
public/images/ui/legacy/text_images/en/battle_ui/overlay_lv.png
Normal file
After Width: | Height: | Size: 111 B |
BIN
public/images/ui/legacy/text_images/en/battle_ui/pbinfo_stat.png
Normal file
After Width: | Height: | Size: 236 B |
After Width: | Height: | Size: 144 B |
After Width: | Height: | Size: 112 B |
After Width: | Height: | Size: 116 B |
After Width: | Height: | Size: 159 B |
After Width: | Height: | Size: 149 B |
After Width: | Height: | Size: 124 B |
@ -0,0 +1,209 @@
|
|||||||
|
{
|
||||||
|
"textures": [
|
||||||
|
{
|
||||||
|
"image": "pbinfo_stat_es-ES.png",
|
||||||
|
"format": "RGBA8888",
|
||||||
|
"size": {
|
||||||
|
"w": 112,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"scale": 1,
|
||||||
|
"frames": [
|
||||||
|
{
|
||||||
|
"filename": "SPATK",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": true,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 19,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 1,
|
||||||
|
"y": 0,
|
||||||
|
"w": 18,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 18,
|
||||||
|
"h": 8
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "SPDEF",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": true,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 19,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 1,
|
||||||
|
"y": 0,
|
||||||
|
"w": 18,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 18,
|
||||||
|
"y": 0,
|
||||||
|
"w": 18,
|
||||||
|
"h": 8
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "CRIT",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": true,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 17,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 1,
|
||||||
|
"y": 0,
|
||||||
|
"w": 16,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 36,
|
||||||
|
"y": 0,
|
||||||
|
"w": 16,
|
||||||
|
"h": 8
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "ACC",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": true,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 13,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 1,
|
||||||
|
"y": 0,
|
||||||
|
"w": 12,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 52,
|
||||||
|
"y": 0,
|
||||||
|
"w": 12,
|
||||||
|
"h": 8
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "ATK",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": true,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 13,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 1,
|
||||||
|
"y": 0,
|
||||||
|
"w": 12,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 64,
|
||||||
|
"y": 0,
|
||||||
|
"w": 12,
|
||||||
|
"h": 8
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "DEF",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": true,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 13,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 1,
|
||||||
|
"y": 0,
|
||||||
|
"w": 12,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 76,
|
||||||
|
"y": 0,
|
||||||
|
"w": 12,
|
||||||
|
"h": 8
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "EVA",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": true,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 13,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 1,
|
||||||
|
"y": 0,
|
||||||
|
"w": 12,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 88,
|
||||||
|
"y": 0,
|
||||||
|
"w": 12,
|
||||||
|
"h": 8
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "SPD",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": true,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 13,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 1,
|
||||||
|
"y": 0,
|
||||||
|
"w": 12,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 100,
|
||||||
|
"y": 0,
|
||||||
|
"w": 12,
|
||||||
|
"h": 8
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "HP",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": true,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 9,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 1,
|
||||||
|
"y": 0,
|
||||||
|
"w": 8,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 112,
|
||||||
|
"y": 0,
|
||||||
|
"w": 8,
|
||||||
|
"h": 8
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"meta": {
|
||||||
|
"app": "https://www.codeandweb.com/texturepacker",
|
||||||
|
"version": "3.0",
|
||||||
|
"smartupdate": "$TexturePacker:SmartUpdate:40d30205ce8efd40dfa86cd11b0491d6:7076db6ed74199dcfb38fc8cd4d4a0e8:05882267d3999884e0491134e98b1b53$"
|
||||||
|
}
|
||||||
|
}
|
After Width: | Height: | Size: 285 B |
After Width: | Height: | Size: 146 B |
After Width: | Height: | Size: 125 B |
After Width: | Height: | Size: 116 B |
After Width: | Height: | Size: 159 B |
After Width: | Height: | Size: 149 B |
After Width: | Height: | Size: 124 B |
@ -0,0 +1,209 @@
|
|||||||
|
{
|
||||||
|
"textures": [
|
||||||
|
{
|
||||||
|
"image": "pbinfo_stat_es-MX.png",
|
||||||
|
"format": "RGBA8888",
|
||||||
|
"size": {
|
||||||
|
"w": 112,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"scale": 1,
|
||||||
|
"frames": [
|
||||||
|
{
|
||||||
|
"filename": "SPATK",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": true,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 19,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 1,
|
||||||
|
"y": 0,
|
||||||
|
"w": 18,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 18,
|
||||||
|
"h": 8
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "SPDEF",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": true,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 19,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 1,
|
||||||
|
"y": 0,
|
||||||
|
"w": 18,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 18,
|
||||||
|
"y": 0,
|
||||||
|
"w": 18,
|
||||||
|
"h": 8
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "CRIT",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": true,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 17,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 1,
|
||||||
|
"y": 0,
|
||||||
|
"w": 16,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 36,
|
||||||
|
"y": 0,
|
||||||
|
"w": 16,
|
||||||
|
"h": 8
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "ACC",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": true,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 13,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 1,
|
||||||
|
"y": 0,
|
||||||
|
"w": 12,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 52,
|
||||||
|
"y": 0,
|
||||||
|
"w": 12,
|
||||||
|
"h": 8
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "ATK",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": true,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 13,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 1,
|
||||||
|
"y": 0,
|
||||||
|
"w": 12,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 64,
|
||||||
|
"y": 0,
|
||||||
|
"w": 12,
|
||||||
|
"h": 8
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "DEF",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": true,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 13,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 1,
|
||||||
|
"y": 0,
|
||||||
|
"w": 12,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 76,
|
||||||
|
"y": 0,
|
||||||
|
"w": 12,
|
||||||
|
"h": 8
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "EVA",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": true,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 13,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 1,
|
||||||
|
"y": 0,
|
||||||
|
"w": 12,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 88,
|
||||||
|
"y": 0,
|
||||||
|
"w": 12,
|
||||||
|
"h": 8
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "SPD",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": true,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 13,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 1,
|
||||||
|
"y": 0,
|
||||||
|
"w": 12,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 100,
|
||||||
|
"y": 0,
|
||||||
|
"w": 12,
|
||||||
|
"h": 8
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "HP",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": true,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 9,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 1,
|
||||||
|
"y": 0,
|
||||||
|
"w": 8,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 112,
|
||||||
|
"y": 0,
|
||||||
|
"w": 8,
|
||||||
|
"h": 8
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"meta": {
|
||||||
|
"app": "https://www.codeandweb.com/texturepacker",
|
||||||
|
"version": "3.0",
|
||||||
|
"smartupdate": "$TexturePacker:SmartUpdate:40d30205ce8efd40dfa86cd11b0491d6:7076db6ed74199dcfb38fc8cd4d4a0e8:05882267d3999884e0491134e98b1b53$"
|
||||||
|
}
|
||||||
|
}
|
After Width: | Height: | Size: 285 B |
After Width: | Height: | Size: 146 B |
After Width: | Height: | Size: 125 B |
After Width: | Height: | Size: 1.4 KiB |
After Width: | Height: | Size: 169 B |
After Width: | Height: | Size: 147 B |
After Width: | Height: | Size: 124 B |
@ -0,0 +1,209 @@
|
|||||||
|
{
|
||||||
|
"textures": [
|
||||||
|
{
|
||||||
|
"image": "pbinfo_stat_fr.png",
|
||||||
|
"format": "RGBA8888",
|
||||||
|
"size": {
|
||||||
|
"w": 112,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"scale": 1,
|
||||||
|
"frames": [
|
||||||
|
{
|
||||||
|
"filename": "SPATK",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": true,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 19,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 1,
|
||||||
|
"y": 0,
|
||||||
|
"w": 18,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 18,
|
||||||
|
"h": 8
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "SPDEF",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": true,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 19,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 1,
|
||||||
|
"y": 0,
|
||||||
|
"w": 18,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 18,
|
||||||
|
"y": 0,
|
||||||
|
"w": 18,
|
||||||
|
"h": 8
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "CRIT",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": true,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 17,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 1,
|
||||||
|
"y": 0,
|
||||||
|
"w": 16,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 36,
|
||||||
|
"y": 0,
|
||||||
|
"w": 16,
|
||||||
|
"h": 8
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "ACC",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": true,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 13,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 1,
|
||||||
|
"y": 0,
|
||||||
|
"w": 12,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 52,
|
||||||
|
"y": 0,
|
||||||
|
"w": 12,
|
||||||
|
"h": 8
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "ATK",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": true,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 13,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 1,
|
||||||
|
"y": 0,
|
||||||
|
"w": 12,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 64,
|
||||||
|
"y": 0,
|
||||||
|
"w": 12,
|
||||||
|
"h": 8
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "DEF",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": true,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 13,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 1,
|
||||||
|
"y": 0,
|
||||||
|
"w": 12,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 76,
|
||||||
|
"y": 0,
|
||||||
|
"w": 12,
|
||||||
|
"h": 8
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "EVA",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": true,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 13,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 1,
|
||||||
|
"y": 0,
|
||||||
|
"w": 12,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 88,
|
||||||
|
"y": 0,
|
||||||
|
"w": 12,
|
||||||
|
"h": 8
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "SPD",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": true,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 13,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 1,
|
||||||
|
"y": 0,
|
||||||
|
"w": 12,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 100,
|
||||||
|
"y": 0,
|
||||||
|
"w": 12,
|
||||||
|
"h": 8
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "HP",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": true,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 9,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 1,
|
||||||
|
"y": 0,
|
||||||
|
"w": 8,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 112,
|
||||||
|
"y": 0,
|
||||||
|
"w": 8,
|
||||||
|
"h": 8
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"meta": {
|
||||||
|
"app": "https://www.codeandweb.com/texturepacker",
|
||||||
|
"version": "3.0",
|
||||||
|
"smartupdate": "$TexturePacker:SmartUpdate:40d30205ce8efd40dfa86cd11b0491d6:7076db6ed74199dcfb38fc8cd4d4a0e8:05882267d3999884e0491134e98b1b53$"
|
||||||
|
}
|
||||||
|
}
|
After Width: | Height: | Size: 273 B |
After Width: | Height: | Size: 148 B |
After Width: | Height: | Size: 119 B |
After Width: | Height: | Size: 120 B |
After Width: | Height: | Size: 169 B |
After Width: | Height: | Size: 149 B |
After Width: | Height: | Size: 117 B |
@ -0,0 +1,209 @@
|
|||||||
|
{
|
||||||
|
"textures": [
|
||||||
|
{
|
||||||
|
"image": "pbinfo_stat_it.png",
|
||||||
|
"format": "RGBA8888",
|
||||||
|
"size": {
|
||||||
|
"w": 112,
|
||||||
|
"h": 6
|
||||||
|
},
|
||||||
|
"scale": 1,
|
||||||
|
"frames": [
|
||||||
|
{
|
||||||
|
"filename": "SPATK",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": true,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 19,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 1,
|
||||||
|
"y": 2,
|
||||||
|
"w": 18,
|
||||||
|
"h": 6
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 18,
|
||||||
|
"h": 6
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "SPDEF",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": true,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 19,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 1,
|
||||||
|
"y": 2,
|
||||||
|
"w": 18,
|
||||||
|
"h": 6
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 18,
|
||||||
|
"y": 0,
|
||||||
|
"w": 18,
|
||||||
|
"h": 6
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "CRIT",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": true,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 17,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 1,
|
||||||
|
"y": 2,
|
||||||
|
"w": 16,
|
||||||
|
"h": 6
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 36,
|
||||||
|
"y": 0,
|
||||||
|
"w": 16,
|
||||||
|
"h": 6
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "ACC",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": true,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 13,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 1,
|
||||||
|
"y": 2,
|
||||||
|
"w": 12,
|
||||||
|
"h": 6
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 52,
|
||||||
|
"y": 0,
|
||||||
|
"w": 12,
|
||||||
|
"h": 6
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "ATK",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": true,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 13,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 1,
|
||||||
|
"y": 2,
|
||||||
|
"w": 12,
|
||||||
|
"h": 6
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 64,
|
||||||
|
"y": 0,
|
||||||
|
"w": 12,
|
||||||
|
"h": 6
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "DEF",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": true,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 13,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 1,
|
||||||
|
"y": 2,
|
||||||
|
"w": 12,
|
||||||
|
"h": 6
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 76,
|
||||||
|
"y": 0,
|
||||||
|
"w": 12,
|
||||||
|
"h": 6
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "EVA",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": true,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 13,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 1,
|
||||||
|
"y": 2,
|
||||||
|
"w": 12,
|
||||||
|
"h": 6
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 88,
|
||||||
|
"y": 0,
|
||||||
|
"w": 12,
|
||||||
|
"h": 6
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "SPD",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": true,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 13,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 1,
|
||||||
|
"y": 2,
|
||||||
|
"w": 12,
|
||||||
|
"h": 6
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 100,
|
||||||
|
"y": 0,
|
||||||
|
"w": 12,
|
||||||
|
"h": 6
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "HP",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": true,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 9,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 1,
|
||||||
|
"y": 2,
|
||||||
|
"w": 8,
|
||||||
|
"h": 6
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 112,
|
||||||
|
"y": 0,
|
||||||
|
"w": 8,
|
||||||
|
"h": 6
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"meta": {
|
||||||
|
"app": "https://www.codeandweb.com/texturepacker",
|
||||||
|
"version": "3.0",
|
||||||
|
"smartupdate": "$TexturePacker:SmartUpdate:40d30205ce8efd40dfa86cd11b0491d6:7076db6ed74199dcfb38fc8cd4d4a0e8:05882267d3999884e0491134e98b1b53$"
|
||||||
|
}
|
||||||
|
}
|
After Width: | Height: | Size: 267 B |
After Width: | Height: | Size: 146 B |
After Width: | Height: | Size: 111 B |
After Width: | Height: | Size: 1.4 KiB |
After Width: | Height: | Size: 169 B |
After Width: | Height: | Size: 146 B |
After Width: | Height: | Size: 111 B |
@ -0,0 +1,209 @@
|
|||||||
|
{
|
||||||
|
"textures": [
|
||||||
|
{
|
||||||
|
"image": "pbinfo_stat_ja.png",
|
||||||
|
"format": "RGBA8888",
|
||||||
|
"size": {
|
||||||
|
"w": 112,
|
||||||
|
"h": 6
|
||||||
|
},
|
||||||
|
"scale": 1,
|
||||||
|
"frames": [
|
||||||
|
{
|
||||||
|
"filename": "SPATK",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": true,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 19,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 1,
|
||||||
|
"y": 2,
|
||||||
|
"w": 18,
|
||||||
|
"h": 6
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 0,
|
||||||
|
"y": 0,
|
||||||
|
"w": 18,
|
||||||
|
"h": 6
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "SPDEF",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": true,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 19,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 1,
|
||||||
|
"y": 2,
|
||||||
|
"w": 18,
|
||||||
|
"h": 6
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 18,
|
||||||
|
"y": 0,
|
||||||
|
"w": 18,
|
||||||
|
"h": 6
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "CRIT",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": true,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 17,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 1,
|
||||||
|
"y": 2,
|
||||||
|
"w": 16,
|
||||||
|
"h": 6
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 36,
|
||||||
|
"y": 0,
|
||||||
|
"w": 16,
|
||||||
|
"h": 6
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "ACC",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": true,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 13,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 1,
|
||||||
|
"y": 2,
|
||||||
|
"w": 12,
|
||||||
|
"h": 6
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 52,
|
||||||
|
"y": 0,
|
||||||
|
"w": 12,
|
||||||
|
"h": 6
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "ATK",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": true,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 13,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 1,
|
||||||
|
"y": 2,
|
||||||
|
"w": 12,
|
||||||
|
"h": 6
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 64,
|
||||||
|
"y": 0,
|
||||||
|
"w": 12,
|
||||||
|
"h": 6
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "DEF",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": true,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 13,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 1,
|
||||||
|
"y": 2,
|
||||||
|
"w": 12,
|
||||||
|
"h": 6
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 76,
|
||||||
|
"y": 0,
|
||||||
|
"w": 12,
|
||||||
|
"h": 6
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "EVA",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": true,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 13,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 1,
|
||||||
|
"y": 2,
|
||||||
|
"w": 12,
|
||||||
|
"h": 6
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 88,
|
||||||
|
"y": 0,
|
||||||
|
"w": 12,
|
||||||
|
"h": 6
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "SPD",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": true,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 13,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 1,
|
||||||
|
"y": 2,
|
||||||
|
"w": 12,
|
||||||
|
"h": 6
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 100,
|
||||||
|
"y": 0,
|
||||||
|
"w": 12,
|
||||||
|
"h": 6
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"filename": "HP",
|
||||||
|
"rotated": false,
|
||||||
|
"trimmed": true,
|
||||||
|
"sourceSize": {
|
||||||
|
"w": 9,
|
||||||
|
"h": 8
|
||||||
|
},
|
||||||
|
"spriteSourceSize": {
|
||||||
|
"x": 1,
|
||||||
|
"y": 2,
|
||||||
|
"w": 8,
|
||||||
|
"h": 6
|
||||||
|
},
|
||||||
|
"frame": {
|
||||||
|
"x": 112,
|
||||||
|
"y": 0,
|
||||||
|
"w": 8,
|
||||||
|
"h": 6
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"meta": {
|
||||||
|
"app": "https://www.codeandweb.com/texturepacker",
|
||||||
|
"version": "3.0",
|
||||||
|
"smartupdate": "$TexturePacker:SmartUpdate:40d30205ce8efd40dfa86cd11b0491d6:7076db6ed74199dcfb38fc8cd4d4a0e8:05882267d3999884e0491134e98b1b53$"
|
||||||
|
}
|
||||||
|
}
|
After Width: | Height: | Size: 236 B |
After Width: | Height: | Size: 144 B |
After Width: | Height: | Size: 112 B |
After Width: | Height: | Size: 1.4 KiB |
After Width: | Height: | Size: 169 B |
After Width: | Height: | Size: 146 B |