diff --git a/.github/workflows/test-shard-template.yml b/.github/workflows/test-shard-template.yml
new file mode 100644
index 00000000000..ac89b503f0c
--- /dev/null
+++ b/.github/workflows/test-shard-template.yml
@@ -0,0 +1,30 @@
+name: Test Template
+
+on:
+ workflow_call:
+ inputs:
+ project:
+ required: true
+ type: string
+ shard:
+ required: true
+ type: number
+ totalShards:
+ required: true
+ type: number
+
+jobs:
+ test:
+ name: Shard ${{ inputs.shard }} of ${{ inputs.totalShards }}
+ runs-on: ubuntu-latest
+ steps:
+ - name: Check out Git repository
+ uses: actions/checkout@v4
+ - name: Set up Node.js
+ uses: actions/setup-node@v4
+ with:
+ node-version: 20
+ - name: Install Node.js dependencies
+ run: npm ci
+ - name: Run tests
+ run: npx vitest --project ${{ inputs.project }} --shard=${{ inputs.shard }}/${{ inputs.totalShards }} ${{ !runner.debug && '--silent' || '' }}
diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml
index 2a78ec252b8..66cc3ecc139 100644
--- a/.github/workflows/tests.yml
+++ b/.github/workflows/tests.yml
@@ -15,91 +15,33 @@ on:
types: [checks_requested]
jobs:
- run-misc-tests: # Define a job named "run-tests"
- name: Run misc tests # Human-readable name for the job
- runs-on: ubuntu-latest # Specify the latest Ubuntu runner for the job
-
- steps:
- - name: Check out Git repository # Step to check out the repository
- uses: actions/checkout@v4 # Use the checkout action version 4
-
- - name: Set up Node.js # Step to set up Node.js environment
- uses: actions/setup-node@v4 # Use the setup-node action version 4
- with:
- node-version: 20 # Specify Node.js version 20
-
- - name: Install Node.js dependencies # Step to install Node.js dependencies
- run: npm ci # Use 'npm ci' to install dependencies
-
- - name: pre-test # pre-test to check overrides
- run: npx vitest run --project pre
- - name: test misc
- run: npx vitest --project misc
-
- run-abilities-tests:
- name: Run abilities tests
- runs-on: ubuntu-latest
+ pre-test:
+ name: Run Pre-test
+ runs-on: ubuntu-latest
steps:
- name: Check out Git repository
uses: actions/checkout@v4
+ with:
+ path: tests-action
- name: Set up Node.js
uses: actions/setup-node@v4
with:
node-version: 20
- name: Install Node.js dependencies
+ working-directory: tests-action
run: npm ci
- - name: pre-test
- run: npx vitest run --project pre
- - name: test abilities
- run: npx vitest --project abilities
+ - name: Run Pre-test
+ working-directory: tests-action
+ run: npx vitest run --project pre ${{ !runner.debug && '--silent' || '' }}
- run-items-tests:
- name: Run items tests
- runs-on: ubuntu-latest
- steps:
- - name: Check out Git repository
- uses: actions/checkout@v4
- - name: Set up Node.js
- uses: actions/setup-node@v4
- with:
- node-version: 20
- - name: Install Node.js dependencies
- run: npm ci
- - name: pre-test
- run: npx vitest run --project pre
- - name: test items
- run: npx vitest --project items
-
- run-moves-tests:
- name: Run moves tests
- runs-on: ubuntu-latest
- steps:
- - name: Check out Git repository
- uses: actions/checkout@v4
- - name: Set up Node.js
- uses: actions/setup-node@v4
- with:
- node-version: 20
- - name: Install Node.js dependencies
- run: npm ci
- - name: pre-test
- run: npx vitest run --project pre
- - name: test moves
- run: npx vitest --project moves
-
- run-battle-tests:
- name: Run battle tests
- runs-on: ubuntu-latest
- steps:
- - name: Check out Git repository
- uses: actions/checkout@v4
- - name: Set up Node.js
- uses: actions/setup-node@v4
- with:
- node-version: 20
- - name: Install Node.js dependencies
- run: npm ci
- - name: pre-test
- run: npx vitest run --project pre
- - name: test battle
- run: npx vitest --project battle
\ No newline at end of file
+ run-tests:
+ name: Run Tests
+ needs: [pre-test]
+ strategy:
+ matrix:
+ shard: [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
+ uses: ./.github/workflows/test-shard-template.yml
+ with:
+ project: main
+ shard: ${{ matrix.shard }}
+ totalShards: 10
\ No newline at end of file
diff --git a/create-test-boilerplate.js b/create-test-boilerplate.js
index 3c53eb1125b..d9cdbd4e7cf 100644
--- a/create-test-boilerplate.js
+++ b/create-test-boilerplate.js
@@ -20,54 +20,58 @@ const type = args[0]; // "move" or "ability"
let fileName = args[1]; // The file name
if (!type || !fileName) {
- console.error('Please provide both a type ("move", "ability", or "item") and a file name.');
- process.exit(1);
+ console.error('Please provide a type ("move", "ability", or "item") and a file name.');
+ process.exit(1);
}
-// Convert fileName from to snake_case if camelCase is given
-fileName = fileName.replace(/([a-z])([A-Z])/g, '$1_$2').toLowerCase();
+// Convert fileName from kebab-case or camelCase to snake_case
+fileName = fileName
+ .replace(/-+/g, '_') // Convert kebab-case (dashes) to underscores
+ .replace(/([a-z])([A-Z])/g, '$1_$2') // Convert camelCase to snake_case
+ .toLowerCase(); // Ensure all lowercase
// Format the description for the test case
const formattedName = fileName
- .replace(/_/g, ' ')
- .replace(/\b\w/g, char => char.toUpperCase());
+ .replace(/_/g, ' ')
+ .replace(/\b\w/g, char => char.toUpperCase());
// Determine the directory based on the type
let dir;
let description;
if (type === 'move') {
- dir = path.join(__dirname, 'src', 'test', 'moves');
- description = `Moves - ${formattedName}`;
+ dir = path.join(__dirname, 'src', 'test', 'moves');
+ description = `Moves - ${formattedName}`;
} else if (type === 'ability') {
- dir = path.join(__dirname, 'src', 'test', 'abilities');
- description = `Abilities - ${formattedName}`;
+ dir = path.join(__dirname, 'src', 'test', 'abilities');
+ description = `Abilities - ${formattedName}`;
} else if (type === "item") {
- dir = path.join(__dirname, 'src', 'test', 'items');
- description = `Items - ${formattedName}`;
+ dir = path.join(__dirname, 'src', 'test', 'items');
+ description = `Items - ${formattedName}`;
} else {
- console.error('Invalid type. Please use "move", "ability", or "item".');
- process.exit(1);
+ console.error('Invalid type. Please use "move", "ability", or "item".');
+ process.exit(1);
}
// Ensure the directory exists
if (!fs.existsSync(dir)) {
- fs.mkdirSync(dir, { recursive: true });
+ fs.mkdirSync(dir, { recursive: true });
}
// Create the file with the given name
const filePath = path.join(dir, `${fileName}.test.ts`);
if (fs.existsSync(filePath)) {
- console.error(`File "${fileName}.test.ts" already exists.`);
- process.exit(1);
+ console.error(`File "${fileName}.test.ts" already exists.`);
+ process.exit(1);
}
// Define the content template
const content = `import { Abilities } from "#enums/abilities";
+import { Moves } from "#enums/moves";
+import { Species } from "#enums/species";
import GameManager from "#test/utils/gameManager";
-import { SPLASH_ONLY } from "#test/utils/testUtils";
import Phaser from "phaser";
-import { afterEach, beforeAll, beforeEach, describe, it } from "vitest";
+import { afterEach, beforeAll, beforeEach, describe, it, expect } from "vitest";
describe("${description}", () => {
let phaserGame: Phaser.Game;
@@ -87,14 +91,15 @@ describe("${description}", () => {
beforeEach(() => {
game = new GameManager(phaserGame);
game.override
+ .moveset([Moves.SPLASH])
.battleType("single")
.enemyAbility(Abilities.BALL_FETCH)
- .enemyMoveset(SPLASH_ONLY);
+ .enemyMoveset(Moves.SPLASH);
});
it("test case", async () => {
- // await game.classicMode.startBattle();
- // game.move.select();
+ // await game.classicMode.startBattle([Species.MAGIKARP]);
+ // game.move.select(Moves.SPLASH);
}, TIMEOUT);
});
`;
diff --git a/eslint.config.js b/eslint.config.js
index eeea38e3178..80e9e67b525 100644
--- a/eslint.config.js
+++ b/eslint.config.js
@@ -1,7 +1,7 @@
import tseslint from '@typescript-eslint/eslint-plugin';
import stylisticTs from '@stylistic/eslint-plugin-ts'
import parser from '@typescript-eslint/parser';
-// import imports from 'eslint-plugin-import'; // Disabled due to not being compatible with eslint v9
+import importX from 'eslint-plugin-import-x';
export default [
{
@@ -11,7 +11,7 @@ export default [
parser: parser
},
plugins: {
- // imports: imports.configs.recommended // Disabled due to not being compatible with eslint v9
+ "import-x": importX,
'@stylistic/ts': stylisticTs,
'@typescript-eslint': tseslint
},
@@ -39,7 +39,8 @@ export default [
}],
"space-before-blocks": ["error", "always"], // Enforces a space before blocks
"keyword-spacing": ["error", { "before": true, "after": true }], // Enforces spacing before and after keywords
- "comma-spacing": ["error", { "before": false, "after": true }] // Enforces spacing after comma
+ "comma-spacing": ["error", { "before": false, "after": true }], // Enforces spacing after comma
+ "import-x/extensions": ["error", "never", { "json": "always" }], // Enforces no extension for imports unless json
}
}
]
diff --git a/package-lock.json b/package-lock.json
index 0605b299dab..4a447554819 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -28,6 +28,7 @@
"@vitest/coverage-istanbul": "^2.0.4",
"dependency-cruiser": "^16.3.10",
"eslint": "^9.7.0",
+ "eslint-plugin-import-x": "^4.2.1",
"jsdom": "^24.0.0",
"lefthook": "^1.6.12",
"phaser3spectorjs": "^0.0.8",
@@ -2505,6 +2506,19 @@
"node": ">=8"
}
},
+ "node_modules/doctrine": {
+ "version": "3.0.0",
+ "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
+ "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
+ "dev": true,
+ "license": "Apache-2.0",
+ "dependencies": {
+ "esutils": "^2.0.2"
+ },
+ "engines": {
+ "node": ">=6.0.0"
+ }
+ },
"node_modules/eastasianwidth": {
"version": "0.2.0",
"resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz",
@@ -2687,6 +2701,155 @@
"url": "https://opencollective.com/eslint"
}
},
+ "node_modules/eslint-import-resolver-node": {
+ "version": "0.3.9",
+ "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz",
+ "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "debug": "^3.2.7",
+ "is-core-module": "^2.13.0",
+ "resolve": "^1.22.4"
+ }
+ },
+ "node_modules/eslint-import-resolver-node/node_modules/debug": {
+ "version": "3.2.7",
+ "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz",
+ "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "ms": "^2.1.1"
+ }
+ },
+ "node_modules/eslint-plugin-import-x": {
+ "version": "4.2.1",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-import-x/-/eslint-plugin-import-x-4.2.1.tgz",
+ "integrity": "sha512-WWi2GedccIJa0zXxx3WDnTgouGQTtdYK1nhXMwywbqqAgB0Ov+p1pYBsWh3VaB0bvBOwLse6OfVII7jZD9xo5Q==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@typescript-eslint/utils": "^8.1.0",
+ "debug": "^4.3.4",
+ "doctrine": "^3.0.0",
+ "eslint-import-resolver-node": "^0.3.9",
+ "get-tsconfig": "^4.7.3",
+ "is-glob": "^4.0.3",
+ "minimatch": "^9.0.3",
+ "semver": "^7.6.3",
+ "stable-hash": "^0.0.4",
+ "tslib": "^2.6.3"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "peerDependencies": {
+ "eslint": "^8.57.0 || ^9.0.0"
+ }
+ },
+ "node_modules/eslint-plugin-import-x/node_modules/@typescript-eslint/scope-manager": {
+ "version": "8.5.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.5.0.tgz",
+ "integrity": "sha512-06JOQ9Qgj33yvBEx6tpC8ecP9o860rsR22hWMEd12WcTRrfaFgHr2RB/CA/B+7BMhHkXT4chg2MyboGdFGawYg==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@typescript-eslint/types": "8.5.0",
+ "@typescript-eslint/visitor-keys": "8.5.0"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ }
+ },
+ "node_modules/eslint-plugin-import-x/node_modules/@typescript-eslint/types": {
+ "version": "8.5.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.5.0.tgz",
+ "integrity": "sha512-qjkormnQS5wF9pjSi6q60bKUHH44j2APxfh9TQRXK8wbYVeDYYdYJGIROL87LGZZ2gz3Rbmjc736qyL8deVtdw==",
+ "dev": true,
+ "license": "MIT",
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ }
+ },
+ "node_modules/eslint-plugin-import-x/node_modules/@typescript-eslint/typescript-estree": {
+ "version": "8.5.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.5.0.tgz",
+ "integrity": "sha512-vEG2Sf9P8BPQ+d0pxdfndw3xIXaoSjliG0/Ejk7UggByZPKXmJmw3GW5jV2gHNQNawBUyfahoSiCFVov0Ruf7Q==",
+ "dev": true,
+ "license": "BSD-2-Clause",
+ "dependencies": {
+ "@typescript-eslint/types": "8.5.0",
+ "@typescript-eslint/visitor-keys": "8.5.0",
+ "debug": "^4.3.4",
+ "fast-glob": "^3.3.2",
+ "is-glob": "^4.0.3",
+ "minimatch": "^9.0.4",
+ "semver": "^7.6.0",
+ "ts-api-utils": "^1.3.0"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
+ "node_modules/eslint-plugin-import-x/node_modules/@typescript-eslint/utils": {
+ "version": "8.5.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.5.0.tgz",
+ "integrity": "sha512-6yyGYVL0e+VzGYp60wvkBHiqDWOpT63pdMV2CVG4LVDd5uR6q1qQN/7LafBZtAtNIn/mqXjsSeS5ggv/P0iECw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@eslint-community/eslint-utils": "^4.4.0",
+ "@typescript-eslint/scope-manager": "8.5.0",
+ "@typescript-eslint/types": "8.5.0",
+ "@typescript-eslint/typescript-estree": "8.5.0"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "eslint": "^8.57.0 || ^9.0.0"
+ }
+ },
+ "node_modules/eslint-plugin-import-x/node_modules/@typescript-eslint/visitor-keys": {
+ "version": "8.5.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.5.0.tgz",
+ "integrity": "sha512-yTPqMnbAZJNy2Xq2XU8AdtOW9tJIr+UQb64aXB9f3B1498Zx9JorVgFJcZpEc9UBuCCrdzKID2RGAMkYcDtZOw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@typescript-eslint/types": "8.5.0",
+ "eslint-visitor-keys": "^3.4.3"
+ },
+ "engines": {
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ }
+ },
"node_modules/eslint-scope": {
"version": "8.0.2",
"resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.0.2.tgz",
@@ -3143,6 +3306,19 @@
"url": "https://github.com/sponsors/sindresorhus"
}
},
+ "node_modules/get-tsconfig": {
+ "version": "4.8.0",
+ "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.8.0.tgz",
+ "integrity": "sha512-Pgba6TExTZ0FJAn1qkJAjIeKoDJ3CsI2ChuLohJnZl/tTU8MVrq3b+2t5UOPfRa4RMsorClBjJALkJUMjG1PAw==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "resolve-pkg-maps": "^1.0.0"
+ },
+ "funding": {
+ "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1"
+ }
+ },
"node_modules/glob-parent": {
"version": "6.0.2",
"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz",
@@ -4854,6 +5030,16 @@
"node": ">=4"
}
},
+ "node_modules/resolve-pkg-maps": {
+ "version": "1.0.0",
+ "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz",
+ "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==",
+ "dev": true,
+ "license": "MIT",
+ "funding": {
+ "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1"
+ }
+ },
"node_modules/reusify": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
@@ -5069,6 +5255,13 @@
"node": ">=0.10.0"
}
},
+ "node_modules/stable-hash": {
+ "version": "0.0.4",
+ "resolved": "https://registry.npmjs.org/stable-hash/-/stable-hash-0.0.4.tgz",
+ "integrity": "sha512-LjdcbuBeLcdETCrPn9i8AYAZ1eCtu4ECAWtP7UleOiZ9LzVxRzzUZEoZ8zB24nhkQnDWyET0I+3sWokSDS3E7g==",
+ "dev": true,
+ "license": "MIT"
+ },
"node_modules/stackback": {
"version": "0.0.2",
"resolved": "https://registry.npmjs.org/stackback/-/stackback-0.0.2.tgz",
@@ -5460,6 +5653,13 @@
"node": ">=6"
}
},
+ "node_modules/tslib": {
+ "version": "2.7.0",
+ "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz",
+ "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==",
+ "dev": true,
+ "license": "0BSD"
+ },
"node_modules/type-check": {
"version": "0.4.0",
"resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz",
diff --git a/package.json b/package.json
index 83e82585d1e..dddf5aedebd 100644
--- a/package.json
+++ b/package.json
@@ -32,6 +32,7 @@
"@vitest/coverage-istanbul": "^2.0.4",
"dependency-cruiser": "^16.3.10",
"eslint": "^9.7.0",
+ "eslint-plugin-import-x": "^4.2.1",
"jsdom": "^24.0.0",
"lefthook": "^1.6.12",
"phaser3spectorjs": "^0.0.8",
diff --git a/public/images/ui/legacy/summary_moves_effect_de.png b/public/images/ui/legacy/summary_moves_effect_de.png
deleted file mode 100644
index 8d6ef024cf3..00000000000
Binary files a/public/images/ui/legacy/summary_moves_effect_de.png and /dev/null differ
diff --git a/public/images/ui/legacy/summary_moves_effect_es.png b/public/images/ui/legacy/summary_moves_effect_es.png
deleted file mode 100644
index a48f90cc8f6..00000000000
Binary files a/public/images/ui/legacy/summary_moves_effect_es.png and /dev/null differ
diff --git a/public/images/ui/legacy/summary_moves_effect_fr.png b/public/images/ui/legacy/summary_moves_effect_fr.png
deleted file mode 100644
index 9d65c920176..00000000000
Binary files a/public/images/ui/legacy/summary_moves_effect_fr.png and /dev/null differ
diff --git a/public/images/ui/legacy/summary_moves_effect_it.png b/public/images/ui/legacy/summary_moves_effect_it.png
deleted file mode 100644
index 8d6ef024cf3..00000000000
Binary files a/public/images/ui/legacy/summary_moves_effect_it.png and /dev/null differ
diff --git a/public/images/ui/legacy/summary_moves_effect_pt-BR.png b/public/images/ui/legacy/summary_moves_effect_pt-BR.png
deleted file mode 100644
index f5a0c2ea736..00000000000
Binary files a/public/images/ui/legacy/summary_moves_effect_pt-BR.png and /dev/null differ
diff --git a/public/images/ui/legacy/summary_moves_effect_zh-CN.png b/public/images/ui/legacy/summary_moves_effect_zh-CN.png
deleted file mode 100644
index 8d6ef024cf3..00000000000
Binary files a/public/images/ui/legacy/summary_moves_effect_zh-CN.png and /dev/null differ
diff --git a/src/battle-scene.ts b/src/battle-scene.ts
index ff4258a13f5..72778fa8589 100644
--- a/src/battle-scene.ts
+++ b/src/battle-scene.ts
@@ -2193,8 +2193,14 @@ export default class BattleScene extends SceneBase {
return true;
}
- findPhase(phaseFilter: (phase: Phase) => boolean): Phase | undefined {
- return this.phaseQueue.find(phaseFilter);
+ /**
+ * Find a specific {@linkcode Phase} in the phase queue.
+ *
+ * @param phaseFilter filter function to use to find the wanted phase
+ * @returns the found phase or undefined if none found
+ */
+ findPhase
(phaseFilter: (phase: P) => boolean): P | undefined {
+ return this.phaseQueue.find(phaseFilter) as P;
}
tryReplacePhase(phaseFilter: (phase: Phase) => boolean, phase: Phase): boolean {
diff --git a/src/constants.ts b/src/constants.ts
new file mode 100644
index 00000000000..a2f7e47b996
--- /dev/null
+++ b/src/constants.ts
@@ -0,0 +1 @@
+export const PLAYER_PARTY_MAX_SIZE = 6;
diff --git a/src/data/ability.ts b/src/data/ability.ts
index 0073306eb4b..9858cd91e2a 100644
--- a/src/data/ability.ts
+++ b/src/data/ability.ts
@@ -1595,8 +1595,8 @@ export class PostAttackAbAttr extends AbAttr {
private attackCondition: PokemonAttackCondition;
/** The default attackCondition requires that the selected move is a damaging move */
- constructor(attackCondition: PokemonAttackCondition = (user, target, move) => (move.category !== MoveCategory.STATUS)) {
- super();
+ constructor(attackCondition: PokemonAttackCondition = (user, target, move) => (move.category !== MoveCategory.STATUS), showAbility: boolean = true) {
+ super(showAbility);
this.attackCondition = attackCondition;
}
@@ -1624,6 +1624,40 @@ export class PostAttackAbAttr extends AbAttr {
}
}
+/**
+ * Ability attribute for Gorilla Tactics
+ * @extends PostAttackAbAttr
+ */
+export class GorillaTacticsAbAttr extends PostAttackAbAttr {
+ constructor() {
+ super((user, target, move) => true, false);
+ }
+
+ /**
+ *
+ * @param {Pokemon} pokemon the {@linkcode Pokemon} with this ability
+ * @param passive n/a
+ * @param simulated whether the ability is being simulated
+ * @param defender n/a
+ * @param move n/a
+ * @param hitResult n/a
+ * @param args n/a
+ * @returns `true` if the ability is applied
+ */
+ applyPostAttackAfterMoveTypeCheck(pokemon: Pokemon, passive: boolean, simulated: boolean, defender: Pokemon, move: Move, hitResult: HitResult | null, args: any[]): boolean | Promise {
+ if (simulated) {
+ return simulated;
+ }
+
+ if (pokemon.getTag(BattlerTagType.GORILLA_TACTICS)) {
+ return false;
+ }
+
+ pokemon.addTag(BattlerTagType.GORILLA_TACTICS);
+ return true;
+ }
+}
+
export class PostAttackStealHeldItemAbAttr extends PostAttackAbAttr {
private stealCondition: PokemonAttackCondition | null;
@@ -3978,7 +4012,7 @@ export class PostBattleLootAbAttr extends PostBattleAbAttr {
}
export class PostFaintAbAttr extends AbAttr {
- applyPostFaint(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, hitResult: HitResult, args: any[]): boolean {
+ applyPostFaint(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker?: Pokemon, move?: Move, hitResult?: HitResult, ...args: any[]): boolean {
return false;
}
}
@@ -4029,7 +4063,7 @@ export class PostFaintClearWeatherAbAttr extends PostFaintAbAttr {
* @param args N/A
* @returns {boolean} Returns true if the weather clears, otherwise false.
*/
- applyPostFaint(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, hitResult: HitResult, args: any[]): boolean {
+ applyPostFaint(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker?: Pokemon, move?: Move, hitResult?: HitResult, ...args: any[]): boolean {
const weatherType = pokemon.scene.arena.weather?.weatherType;
let turnOffWeather = false;
@@ -4077,8 +4111,8 @@ export class PostFaintContactDamageAbAttr extends PostFaintAbAttr {
this.damageRatio = damageRatio;
}
- applyPostFaint(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, hitResult: HitResult, args: any[]): boolean {
- if (move.checkFlag(MoveFlags.MAKES_CONTACT, attacker, pokemon)) {
+ applyPostFaint(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker?: Pokemon, move?: Move, hitResult?: HitResult, ...args: any[]): boolean {
+ if (move !== undefined && attacker !== undefined && move.checkFlag(MoveFlags.MAKES_CONTACT, attacker, pokemon)) { //If the mon didn't die to indirect damage
const cancelled = new Utils.BooleanHolder(false);
pokemon.scene.getField(true).map(p => applyAbAttrs(FieldPreventExplosiveMovesAbAttr, p, cancelled, simulated));
if (cancelled.value || attacker.hasAbilityWithAttr(BlockNonDirectDamageAbAttr)) {
@@ -4107,8 +4141,8 @@ export class PostFaintHPDamageAbAttr extends PostFaintAbAttr {
super ();
}
- applyPostFaint(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker: Pokemon, move: Move, hitResult: HitResult, args: any[]): boolean {
- if (!simulated) {
+ applyPostFaint(pokemon: Pokemon, passive: boolean, simulated: boolean, attacker?: Pokemon, move?: Move, hitResult?: HitResult, ...args: any[]): boolean {
+ if (move !== undefined && attacker !== undefined && !simulated) { //If the mon didn't die to indirect damage
const damage = pokemon.turnData.attacksReceived[0].damage;
attacker.damageAndUpdate((damage), HitResult.OTHER);
attacker.turnData.damageTaken += damage;
@@ -4770,7 +4804,7 @@ export function applyPostBattleAbAttrs(attrType: Constructor,
}
export function applyPostFaintAbAttrs(attrType: Constructor,
- pokemon: Pokemon, attacker: Pokemon, move: Move, hitResult: HitResult, simulated: boolean = false, ...args: any[]): Promise {
+ pokemon: Pokemon, attacker?: Pokemon, move?: Move, hitResult?: HitResult, simulated: boolean = false, ...args: any[]): Promise {
return applyAbAttrsInternal(attrType, pokemon, (attr, passive) => attr.applyPostFaint(pokemon, passive, simulated, attacker, move, hitResult, args), args, false, simulated);
}
@@ -5657,7 +5691,7 @@ export function initAbilities() {
.bypassFaint()
.partial(),
new Ability(Abilities.GORILLA_TACTICS, 8)
- .unimplemented(),
+ .attr(GorillaTacticsAbAttr),
new Ability(Abilities.NEUTRALIZING_GAS, 8)
.attr(SuppressFieldAbilitiesAbAttr)
.attr(UncopiableAbilityAbAttr)
diff --git a/src/data/battler-tags.ts b/src/data/battler-tags.ts
index ddb85600c18..52e039ed874 100644
--- a/src/data/battler-tags.ts
+++ b/src/data/battler-tags.ts
@@ -107,8 +107,8 @@ export interface TerrainBattlerTag {
* to select restricted moves.
*/
export abstract class MoveRestrictionBattlerTag extends BattlerTag {
- constructor(tagType: BattlerTagType, turnCount: integer, sourceMove?: Moves, sourceId?: integer) {
- super(tagType, [ BattlerTagLapseType.PRE_MOVE, BattlerTagLapseType.TURN_END ], turnCount, sourceMove, sourceId);
+ constructor(tagType: BattlerTagType, lapseType: BattlerTagLapseType | BattlerTagLapseType[], turnCount: integer, sourceMove?: Moves, sourceId?: integer) {
+ super(tagType, lapseType, turnCount, sourceMove, sourceId);
}
/** @override */
@@ -119,7 +119,9 @@ export abstract class MoveRestrictionBattlerTag extends BattlerTag {
const move = phase.move;
if (this.isMoveRestricted(move.moveId)) {
- pokemon.scene.queueMessage(this.interruptedText(pokemon, move.moveId));
+ if (this.interruptedText(pokemon, move.moveId)) {
+ pokemon.scene.queueMessage(this.interruptedText(pokemon, move.moveId));
+ }
phase.cancel();
}
@@ -155,7 +157,52 @@ export abstract class MoveRestrictionBattlerTag extends BattlerTag {
* @param {Moves} move {@linkcode Moves} ID of the move being interrupted
* @returns {string} text to display when the move is interrupted
*/
- abstract interruptedText(pokemon: Pokemon, move: Moves): string;
+ interruptedText(pokemon: Pokemon, move: Moves): string {
+ return "";
+ }
+}
+
+/**
+ * Tag representing the "Throat Chop" effect. Pokemon with this tag cannot use sound-based moves.
+ * @see {@link https://bulbapedia.bulbagarden.net/wiki/Throat_Chop_(move) | Throat Chop}
+ * @extends MoveRestrictionBattlerTag
+ */
+export class ThroatChoppedTag extends MoveRestrictionBattlerTag {
+ constructor() {
+ super(BattlerTagType.THROAT_CHOPPED, [ BattlerTagLapseType.TURN_END, BattlerTagLapseType.PRE_MOVE ], 2, Moves.THROAT_CHOP);
+ }
+
+ /**
+ * Checks if a {@linkcode Moves | move} is restricted by Throat Chop.
+ * @override
+ * @param {Moves} move the {@linkcode Moves | move} to check for sound-based restriction
+ * @returns true if the move is sound-based
+ */
+ override isMoveRestricted(move: Moves): boolean {
+ return allMoves[move].hasFlag(MoveFlags.SOUND_BASED);
+ }
+
+ /**
+ * Shows a message when the player attempts to select a move that is restricted by Throat Chop.
+ * @override
+ * @param {Pokemon} pokemon the {@linkcode Pokemon} that is attempting to select the restricted move
+ * @param {Moves} move the {@linkcode Moves | move} that is being restricted
+ * @returns the message to display when the player attempts to select the restricted move
+ */
+ override selectionDeniedText(pokemon: Pokemon, move: Moves): string {
+ return i18next.t("battle:moveCannotBeSelected", { moveName: allMoves[move].name });
+ }
+
+ /**
+ * Shows a message when a move is interrupted by Throat Chop.
+ * @override
+ * @param {Pokemon} pokemon the interrupted {@linkcode Pokemon}
+ * @param {Moves} move the {@linkcode Moves | move} that was interrupted
+ * @returns the message to display when the move is interrupted
+ */
+ override interruptedText(pokemon: Pokemon, move: Moves): string {
+ return i18next.t("battle:throatChopInterruptedMove", { pokemonName: getPokemonNameWithAffix(pokemon) });
+ }
}
/**
@@ -167,7 +214,7 @@ export class DisabledTag extends MoveRestrictionBattlerTag {
private moveId: Moves = Moves.NONE;
constructor(sourceId: number) {
- super(BattlerTagType.DISABLED, 4, Moves.DISABLE, sourceId);
+ super(BattlerTagType.DISABLED, [ BattlerTagLapseType.PRE_MOVE, BattlerTagLapseType.TURN_END ], 4, Moves.DISABLE, sourceId);
}
/** @override */
@@ -178,7 +225,7 @@ export class DisabledTag extends MoveRestrictionBattlerTag {
/**
* @override
*
- * Ensures that move history exists on `pokemon` and has a valid move. If so, sets the {@link moveId} and shows a message.
+ * Ensures that move history exists on `pokemon` and has a valid move. If so, sets the {@linkcode moveId} and shows a message.
* Otherwise the move ID will not get assigned and this tag will get removed next turn.
*/
override onAdd(pokemon: Pokemon): void {
@@ -207,7 +254,12 @@ export class DisabledTag extends MoveRestrictionBattlerTag {
return i18next.t("battle:moveDisabled", { moveName: allMoves[move].name });
}
- /** @override */
+ /**
+ * @override
+ * @param {Pokemon} pokemon {@linkcode Pokemon} attempting to use the restricted move
+ * @param {Moves} move {@linkcode Moves} ID of the move being interrupted
+ * @returns {string} text to display when the move is interrupted
+ */
override interruptedText(pokemon: Pokemon, move: Moves): string {
return i18next.t("battle:disableInterruptedMove", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon), moveName: allMoves[move].name });
}
@@ -219,6 +271,72 @@ export class DisabledTag extends MoveRestrictionBattlerTag {
}
}
+/**
+ * Tag used by Gorilla Tactics to restrict the user to using only one move.
+ * @extends MoveRestrictionBattlerTag
+ */
+export class GorillaTacticsTag extends MoveRestrictionBattlerTag {
+ private moveId = Moves.NONE;
+
+ constructor() {
+ super(BattlerTagType.GORILLA_TACTICS, BattlerTagLapseType.CUSTOM, 0);
+ }
+
+ /** @override */
+ override isMoveRestricted(move: Moves): boolean {
+ return move !== this.moveId;
+ }
+
+ /**
+ * @override
+ * @param {Pokemon} pokemon the {@linkcode Pokemon} to check if the tag can be added
+ * @returns `true` if the pokemon has a valid move and no existing {@linkcode GorillaTacticsTag}; `false` otherwise
+ */
+ override canAdd(pokemon: Pokemon): boolean {
+ return (this.getLastValidMove(pokemon) !== undefined) && !pokemon.getTag(GorillaTacticsTag);
+ }
+
+ /**
+ * Ensures that move history exists on {@linkcode Pokemon} and has a valid move.
+ * If so, sets the {@linkcode moveId} and increases the user's Attack by 50%.
+ * @override
+ * @param {Pokemon} pokemon the {@linkcode Pokemon} to add the tag to
+ */
+ override onAdd(pokemon: Pokemon): void {
+ const lastValidMove = this.getLastValidMove(pokemon);
+
+ if (!lastValidMove) {
+ return;
+ }
+
+ this.moveId = lastValidMove;
+ pokemon.setStat(Stat.ATK, pokemon.getStat(Stat.ATK, false) * 1.5, false);
+ }
+
+ /**
+ *
+ * @override
+ * @param {Pokemon} pokemon n/a
+ * @param {Moves} move {@linkcode Moves} ID of the move being denied
+ * @returns {string} text to display when the move is denied
+ */
+ override selectionDeniedText(pokemon: Pokemon, move: Moves): string {
+ return i18next.t("battle:canOnlyUseMove", { moveName: allMoves[this.moveId].name, pokemonName: getPokemonNameWithAffix(pokemon) });
+ }
+
+ /**
+ * Gets the last valid move from the pokemon's move history.
+ * @param {Pokemon} pokemon {@linkcode Pokemon} to get the last valid move from
+ * @returns {Moves | undefined} the last valid move from the pokemon's move history
+ */
+ getLastValidMove(pokemon: Pokemon): Moves | undefined {
+ const move = pokemon.getLastXMoves()
+ .find(m => m.move !== Moves.NONE && m.move !== Moves.STRUGGLE && !m.virtual);
+
+ return move?.move;
+ }
+}
+
/**
* BattlerTag that represents the "recharge" effects of moves like Hyper Beam.
*/
@@ -1984,7 +2102,38 @@ export class ExposedTag extends BattlerTag {
}
}
+/**
+ * Tag that doubles the type effectiveness of Fire-type moves.
+ * @extends BattlerTag
+ */
+export class TarShotTag extends BattlerTag {
+ constructor() {
+ super(BattlerTagType.TAR_SHOT, BattlerTagLapseType.CUSTOM, 0);
+ }
+ /**
+ * If the Pokemon is terastallized, the tag cannot be added.
+ * @param {Pokemon} pokemon the {@linkcode Pokemon} to which the tag is added
+ * @returns whether the tag is applied
+ */
+ override canAdd(pokemon: Pokemon): boolean {
+ return !pokemon.isTerastallized();
+ }
+
+ override onAdd(pokemon: Pokemon): void {
+ pokemon.scene.queueMessage(i18next.t("battlerTags:tarShotOnAdd", { pokemonNameWithAffix: getPokemonNameWithAffix(pokemon) }));
+ }
+}
+
+/**
+ * Retrieves a {@linkcode BattlerTag} based on the provided tag type, turn count, source move, and source ID.
+ *
+ * @param {BattlerTagType} tagType the type of the {@linkcode BattlerTagType}.
+ * @param turnCount the turn count.
+ * @param {Moves} sourceMove the source {@linkcode Moves}.
+ * @param sourceId the source ID.
+ * @returns {BattlerTag} the corresponding {@linkcode BattlerTag} object.
+ */
export function getBattlerTag(tagType: BattlerTagType, turnCount: number, sourceMove: Moves, sourceId: number): BattlerTag {
switch (tagType) {
case BattlerTagType.RECHARGING:
@@ -2125,6 +2274,12 @@ export function getBattlerTag(tagType: BattlerTagType, turnCount: number, source
case BattlerTagType.GULP_MISSILE_ARROKUDA:
case BattlerTagType.GULP_MISSILE_PIKACHU:
return new GulpMissileTag(tagType, sourceMove);
+ case BattlerTagType.TAR_SHOT:
+ return new TarShotTag();
+ case BattlerTagType.THROAT_CHOPPED:
+ return new ThroatChoppedTag();
+ case BattlerTagType.GORILLA_TACTICS:
+ return new GorillaTacticsTag();
case BattlerTagType.NONE:
default:
return new BattlerTag(tagType, BattlerTagLapseType.CUSTOM, turnCount, sourceMove, sourceId);
diff --git a/src/data/egg.ts b/src/data/egg.ts
index ce27030ebef..1cd5c65fc18 100644
--- a/src/data/egg.ts
+++ b/src/data/egg.ts
@@ -222,7 +222,7 @@ export class Egg {
let pokemonSpecies = getPokemonSpecies(this._species);
// Special condition to have Phione eggs also have a chance of generating Manaphy
- if (this._species === Species.PHIONE) {
+ if (this._species === Species.PHIONE && this._sourceType === EggSourceType.SAME_SPECIES_EGG) {
pokemonSpecies = getPokemonSpecies(Utils.randSeedInt(MANAPHY_EGG_MANAPHY_RATE) ? Species.PHIONE : Species.MANAPHY);
}
@@ -326,7 +326,8 @@ export class Egg {
break;
}
- return Utils.randSeedInt(baseChance * Math.pow(2, 3 - this.tier)) ? Utils.randSeedInt(3) : 3;
+ const tierMultiplier = this.isManaphyEgg() ? 2 : Math.pow(2, 3 - this.tier);
+ return Utils.randSeedInt(baseChance * tierMultiplier) ? Utils.randSeedInt(3) : 3;
}
private getEggTierDefaultHatchWaves(eggTier?: EggTier): number {
@@ -361,7 +362,12 @@ export class Egg {
* the species that was the legendary focus at the time
*/
if (this.isManaphyEgg()) {
- const rand = Utils.randSeedInt(MANAPHY_EGG_MANAPHY_RATE);
+ /**
+ * Adding a technicality to make unit tests easier: By making this check pass
+ * when Utils.randSeedInt(8) = 1, and by making the generatePlayerPokemon() species
+ * check pass when Utils.randSeedInt(8) = 0, we can tell them apart during tests.
+ */
+ const rand = (Utils.randSeedInt(MANAPHY_EGG_MANAPHY_RATE) !== 1);
return rand ? Species.PHIONE : Species.MANAPHY;
} else if (this.tier === EggTier.MASTER
&& this._sourceType === EggSourceType.GACHA_LEGENDARY) {
diff --git a/src/data/move.ts b/src/data/move.ts
index e2ee31674d5..03b6e075681 100644
--- a/src/data/move.ts
+++ b/src/data/move.ts
@@ -5986,9 +5986,8 @@ export class SwapStatAttr extends MoveEffectAttr {
}
/**
- * Takes the average of the user's and target's corresponding current
- * {@linkcode stat} values and sets that stat to the average for both
- * temporarily.
+ * Swaps the user's and target's corresponding current
+ * {@linkcode EffectiveStat | stat} values
* @param user the {@linkcode Pokemon} that used the move
* @param target the {@linkcode Pokemon} that the move was used on
* @param move N/A
@@ -6012,6 +6011,62 @@ export class SwapStatAttr extends MoveEffectAttr {
}
}
+/**
+ * Attribute used to switch the user's own stats.
+ * Used by Power Shift.
+ * @extends MoveEffectAttr
+ */
+export class ShiftStatAttr extends MoveEffectAttr {
+ private statToSwitch: EffectiveStat;
+ private statToSwitchWith: EffectiveStat;
+
+ constructor(statToSwitch: EffectiveStat, statToSwitchWith: EffectiveStat) {
+ super();
+
+ this.statToSwitch = statToSwitch;
+ this.statToSwitchWith = statToSwitchWith;
+ }
+
+ /**
+ * Switches the user's stats based on the {@linkcode statToSwitch} and {@linkcode statToSwitchWith} attributes.
+ * @param {Pokemon} user the {@linkcode Pokemon} that used the move
+ * @param target n/a
+ * @param move n/a
+ * @param args n/a
+ * @returns whether the effect was applied
+ */
+ override apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean {
+ if (!super.apply(user, target, move, args)) {
+ return false;
+ }
+
+ const firstStat = user.getStat(this.statToSwitch, false);
+ const secondStat = user.getStat(this.statToSwitchWith, false);
+
+ user.setStat(this.statToSwitch, secondStat, false);
+ user.setStat(this.statToSwitchWith, firstStat, false);
+
+ user.scene.queueMessage(i18next.t("moveTriggers:shiftedStats", {
+ pokemonName: getPokemonNameWithAffix(user),
+ statToSwitch: i18next.t(getStatKey(this.statToSwitch)),
+ statToSwitchWith: i18next.t(getStatKey(this.statToSwitchWith))
+ }));
+
+ return true;
+ }
+
+ /**
+ * Encourages the user to use the move if the stat to switch with is greater than the stat to switch.
+ * @param {Pokemon} user the {@linkcode Pokemon} that used the move
+ * @param target n/a
+ * @param move n/a
+ * @returns number of points to add to the user's benefit score
+ */
+ override getUserBenefitScore(user: Pokemon, target: Pokemon, move: Move): integer {
+ return user.getStat(this.statToSwitchWith, false) > user.getStat(this.statToSwitch, false) ? 10 : 0;
+ }
+}
+
/**
* Attribute used for status moves, namely Power Split and Guard Split,
* that take the average of a user's and target's corresponding
@@ -6216,12 +6271,42 @@ export class VariableTargetAttr extends MoveAttr {
}
}
+/**
+ * Attribute for {@linkcode Moves.AFTER_YOU}
+ *
+ * [After You - Move | Bulbapedia](https://bulbapedia.bulbagarden.net/wiki/After_You_(move))
+ */
+export class AfterYouAttr extends MoveEffectAttr {
+ /**
+ * Allows the target of this move to act right after the user.
+ *
+ * @param user {@linkcode Pokemon} that is using the move.
+ * @param target {@linkcode Pokemon} that will move right after this move is used.
+ * @param move {@linkcode Move} {@linkcode Moves.AFTER_YOU}
+ * @param _args N/A
+ * @returns true
+ */
+ override apply(user: Pokemon, target: Pokemon, _move: Move, _args: any[]): boolean {
+ user.scene.queueMessage(i18next.t("moveTriggers:afterYou", {targetName: getPokemonNameWithAffix(target)}));
+
+ //Will find next acting phase of the targeted pokémon, delete it and queue it next on successful delete.
+ const nextAttackPhase = target.scene.findPhase((phase) => phase.pokemon === target);
+ if (nextAttackPhase && target.scene.tryRemovePhase((phase: MovePhase) => phase.pokemon === target)) {
+ target.scene.prependToPhase(new MovePhase(target.scene, target, [...nextAttackPhase.targets], nextAttackPhase.move), MovePhase);
+ }
+
+ return true;
+ }
+}
+
const failOnGravityCondition: MoveConditionFunc = (user, target, move) => !user.scene.arena.getTag(ArenaTagType.GRAVITY);
const failOnBossCondition: MoveConditionFunc = (user, target, move) => !target.isBossImmune();
const failOnMaxCondition: MoveConditionFunc = (user, target, move) => !target.isMax();
+const failIfSingleBattle: MoveConditionFunc = (user, target, move) => user.scene.currentBattle.double;
+
const failIfDampCondition: MoveConditionFunc = (user, target, move) => {
const cancelled = new Utils.BooleanHolder(false);
user.scene.getField(true).map(p=>applyAbAttrs(FieldPreventExplosiveMovesAbAttr, p, cancelled));
@@ -7869,7 +7954,10 @@ export function initMoves() {
.attr(AbilityGiveAttr),
new StatusMove(Moves.AFTER_YOU, Type.NORMAL, -1, 15, -1, 0, 5)
.ignoresProtect()
- .unimplemented(),
+ .target(MoveTarget.NEAR_OTHER)
+ .condition(failIfSingleBattle)
+ .condition((user, target, move) => !target.turnData.acted)
+ .attr(AfterYouAttr),
new AttackMove(Moves.ROUND, Type.NORMAL, MoveCategory.SPECIAL, 60, 100, 15, -1, 0, 5)
.soundBased()
.partial(),
@@ -8403,7 +8491,7 @@ export function initMoves() {
.target(MoveTarget.USER_AND_ALLIES)
.condition((user, target, move) => !![ user, user.getAlly() ].filter(p => p?.isActive()).find(p => !![ Abilities.PLUS, Abilities.MINUS].find(a => p.hasAbility(a, false)))),
new AttackMove(Moves.THROAT_CHOP, Type.DARK, MoveCategory.PHYSICAL, 80, 100, 15, 100, 0, 7)
- .partial(),
+ .attr(AddBattlerTagAttr, BattlerTagType.THROAT_CHOPPED),
new AttackMove(Moves.POLLEN_PUFF, Type.BUG, MoveCategory.SPECIAL, 90, 100, 15, -1, 0, 7)
.attr(StatusCategoryOnAllyAttr)
.attr(HealOnAllyAttr, 0.5, true, false)
@@ -8643,7 +8731,7 @@ export function initMoves() {
.condition((user, target, move) => user.getTag(TrappedTag)?.sourceMove !== Moves.NO_RETREAT), // fails if the user is currently trapped by No Retreat
new StatusMove(Moves.TAR_SHOT, Type.ROCK, 100, 15, -1, 0, 8)
.attr(StatStageChangeAttr, [ Stat.SPD ], -1)
- .partial(),
+ .attr(AddBattlerTagAttr, BattlerTagType.TAR_SHOT, false),
new StatusMove(Moves.MAGIC_POWDER, Type.PSYCHIC, 100, 20, -1, 0, 8)
.attr(ChangeTypeAttr, Type.PSYCHIC)
.powderMove(),
@@ -8893,7 +8981,8 @@ export function initMoves() {
new AttackMove(Moves.PSYSHIELD_BASH, Type.PSYCHIC, MoveCategory.PHYSICAL, 70, 90, 10, 100, 0, 8)
.attr(StatStageChangeAttr, [ Stat.DEF ], 1, true),
new SelfStatusMove(Moves.POWER_SHIFT, Type.NORMAL, -1, 10, -1, 0, 8)
- .unimplemented(),
+ .target(MoveTarget.USER)
+ .attr(ShiftStatAttr, Stat.ATK, Stat.DEF),
new AttackMove(Moves.STONE_AXE, Type.ROCK, MoveCategory.PHYSICAL, 65, 90, 15, 100, 0, 8)
.attr(AddArenaTrapTagHitAttr, ArenaTagType.STEALTH_ROCK)
.slicingMove(),
diff --git a/src/enums/battler-tag-type.ts b/src/enums/battler-tag-type.ts
index a2bcf9e4c0e..cb83ebf4882 100644
--- a/src/enums/battler-tag-type.ts
+++ b/src/enums/battler-tag-type.ts
@@ -73,4 +73,7 @@ export enum BattlerTagType {
SHELL_TRAP = "SHELL_TRAP",
DRAGON_CHEER = "DRAGON_CHEER",
NO_RETREAT = "NO_RETREAT",
+ GORILLA_TACTICS = "GORILLA_TACTICS",
+ THROAT_CHOPPED = "THROAT_CHOPPED",
+ TAR_SHOT = "TAR_SHOT",
}
diff --git a/src/field/pokemon.ts b/src/field/pokemon.ts
index 0425c0effeb..2595d868d51 100644
--- a/src/field/pokemon.ts
+++ b/src/field/pokemon.ts
@@ -17,7 +17,7 @@ import { initMoveAnim, loadMoveAnimAssets } from "../data/battle-anims";
import { Status, StatusEffect, getRandomStatus } from "../data/status-effect";
import { pokemonEvolutions, pokemonPrevolutions, SpeciesFormEvolution, SpeciesEvolutionCondition, FusionSpeciesFormEvolution } from "../data/pokemon-evolutions";
import { reverseCompatibleTms, tmSpecies, tmPoolTiers } from "../data/tms";
-import { BattlerTag, BattlerTagLapseType, EncoreTag, GroundedTag, HighestStatBoostTag, TypeImmuneTag, getBattlerTag, SemiInvulnerableTag, TypeBoostTag, MoveRestrictionBattlerTag, ExposedTag, DragonCheerTag, CritBoostTag, TrappedTag } from "../data/battler-tags";
+import { BattlerTag, BattlerTagLapseType, EncoreTag, GroundedTag, HighestStatBoostTag, TypeImmuneTag, getBattlerTag, SemiInvulnerableTag, TypeBoostTag, MoveRestrictionBattlerTag, ExposedTag, DragonCheerTag, CritBoostTag, TrappedTag, TarShotTag } from "../data/battler-tags";
import { WeatherType } from "../data/weather";
import { ArenaTagSide, NoCritTag, WeakenMoveScreenTag } from "../data/arena-tag";
import { Ability, AbAttr, StatMultiplierAbAttr, BlockCritAbAttr, BonusCritAbAttr, BypassBurnDamageReductionAbAttr, FieldPriorityMoveImmunityAbAttr, IgnoreOpponentStatStagesAbAttr, MoveImmunityAbAttr, PreDefendFullHpEndureAbAttr, ReceivedMoveDamageMultiplierAbAttr, ReduceStatusEffectDurationAbAttr, StabBoostAbAttr, StatusEffectImmunityAbAttr, TypeImmunityAbAttr, WeightMultiplierAbAttr, allAbilities, applyAbAttrs, applyStatMultiplierAbAttrs, applyPreApplyBattlerTagAbAttrs, applyPreAttackAbAttrs, applyPreDefendAbAttrs, applyPreSetStatusAbAttrs, UnsuppressableAbilityAbAttr, SuppressFieldAbilitiesAbAttr, NoFusionAbilityAbAttr, MultCritAbAttr, IgnoreTypeImmunityAbAttr, DamageBoostAbAttr, IgnoreTypeStatusEffectImmunityAbAttr, ConditionalCritAbAttr, applyFieldStatMultiplierAbAttrs, FieldMultiplyStatAbAttr, AddSecondStrikeAbAttr, UserFieldStatusEffectImmunityAbAttr, UserFieldBattlerTagImmunityAbAttr, BattlerTagImmunityAbAttr, MoveTypeChangeAbAttr, FullHpResistTypeAbAttr, applyCheckTrappedAbAttrs, CheckTrappedAbAttr, PostSetStatusAbAttr, applyPostSetStatusAbAttrs } from "../data/ability";
@@ -58,6 +58,7 @@ import { StatStageChangePhase } from "#app/phases/stat-stage-change-phase";
import { SwitchSummonPhase } from "#app/phases/switch-summon-phase";
import { ToggleDoublePositionPhase } from "#app/phases/toggle-double-position-phase";
import { Challenges } from "#enums/challenges";
+import { PLAYER_PARTY_MAX_SIZE } from "#app/constants";
export enum FieldPosition {
CENTER,
@@ -983,10 +984,16 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
: this.moveset;
// Overrides moveset based on arrays specified in overrides.ts
- const overrideArray: Array = this.isPlayer() ? Overrides.MOVESET_OVERRIDE : Overrides.OPP_MOVESET_OVERRIDE;
+ let overrideArray: Moves | Array = this.isPlayer() ? Overrides.MOVESET_OVERRIDE : Overrides.OPP_MOVESET_OVERRIDE;
+ if (!Array.isArray(overrideArray)) {
+ overrideArray = [overrideArray];
+ }
if (overrideArray.length > 0) {
+ if (!this.isPlayer()) {
+ this.moveset = [];
+ }
overrideArray.forEach((move: Moves, index: number) => {
- const ppUsed = this.moveset[index]?.ppUsed || 0;
+ const ppUsed = this.moveset[index]?.ppUsed ?? 0;
this.moveset[index] = new PokemonMove(move, Math.min(ppUsed, allMoves[move].pp));
});
}
@@ -1323,9 +1330,10 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
}
const trappedByAbility = new Utils.BooleanHolder(false);
+ const opposingField = this.isPlayer() ? this.scene.getEnemyField() : this.scene.getPlayerField();
- this.scene.getEnemyField()!.forEach(enemyPokemon =>
- applyCheckTrappedAbAttrs(CheckTrappedAbAttr, enemyPokemon, trappedByAbility, this, trappedAbMessages, simulated)
+ opposingField.forEach(opponent =>
+ applyCheckTrappedAbAttrs(CheckTrappedAbAttr, opponent, trappedByAbility, this, trappedAbMessages, simulated)
);
return (trappedByAbility.value || !!this.getTag(TrappedTag));
@@ -1351,7 +1359,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
/**
* Calculates the effectiveness of a move against the Pokémon.
- *
+ * This includes modifiers from move and ability attributes.
* @param source {@linkcode Pokemon} The attacking Pokémon.
* @param move {@linkcode Move} The move being used by the attacking Pokémon.
* @param ignoreAbility Whether to ignore abilities that might affect type effectiveness or immunity (defaults to `false`).
@@ -1375,6 +1383,10 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
typeMultiplier.value = 0;
}
+ if (this.getTag(TarShotTag) && (this.getMoveType(move) === Type.FIRE)) {
+ typeMultiplier.value *= 2;
+ }
+
const cancelledHolder = cancelled ?? new Utils.BooleanHolder(false);
if (!ignoreAbility) {
applyPreDefendAbAttrs(TypeImmunityAbAttr, this, source, move, cancelledHolder, simulated, typeMultiplier);
@@ -1406,7 +1418,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container {
}
/**
- * Calculates the type effectiveness multiplier for an attack type
+ * Calculates the move's type effectiveness multiplier based on the target's type/s.
* @param moveType {@linkcode Type} the type of the move being used
* @param source {@linkcode Pokemon} the Pokemon using the move
* @param ignoreStrongWinds whether or not this ignores strong winds (anticipation, forewarn, stealth rocks)
@@ -4466,17 +4478,29 @@ export class EnemyPokemon extends Pokemon {
return BattlerIndex.ENEMY + this.getFieldIndex();
}
- addToParty(pokeballType: PokeballType) {
+ /**
+ * Add a new pokemon to the player's party (at `slotIndex` if set).
+ * @param pokeballType the type of pokeball the pokemon was caught with
+ * @param slotIndex an optional index to place the pokemon in the party
+ * @returns the pokemon that was added or null if the pokemon could not be added
+ */
+ addToParty(pokeballType: PokeballType, slotIndex: number = -1) {
const party = this.scene.getParty();
let ret: PlayerPokemon | null = null;
- if (party.length < 6) {
+ if (party.length < PLAYER_PARTY_MAX_SIZE) {
this.pokeball = pokeballType;
this.metLevel = this.level;
this.metBiome = this.scene.arena.biomeType;
this.metSpecies = this.species.speciesId;
const newPokemon = this.scene.addPlayerPokemon(this.species, this.level, this.abilityIndex, this.formIndex, this.gender, this.shiny, this.variant, this.ivs, this.nature, this);
- party.push(newPokemon);
+
+ if (Utils.isBetween(slotIndex, 0, PLAYER_PARTY_MAX_SIZE - 1)) {
+ party.splice(slotIndex, 0, newPokemon);
+ } else {
+ party.push(newPokemon);
+ }
+
ret = newPokemon;
this.scene.triggerPokemonFormChange(newPokemon, SpeciesFormChangeActiveTrigger, true);
}
diff --git a/src/locales/de/fight-ui-handler.json b/src/locales/de/fight-ui-handler.json
index 6965540c703..f803375e8de 100644
--- a/src/locales/de/fight-ui-handler.json
+++ b/src/locales/de/fight-ui-handler.json
@@ -3,5 +3,6 @@
"power": "Stärke",
"accuracy": "Genauigkeit",
"abilityFlyInText": "{{passive}}{{abilityName}} von {{pokemonName}} wirkt!",
- "passive": "Passive Fähigkeit "
+ "passive": "Passive Fähigkeit ",
+ "teraHover": "Tera-Typ {{type}}"
}
\ No newline at end of file
diff --git a/src/locales/de/move-trigger.json b/src/locales/de/move-trigger.json
index 61283c9e62e..01b22429fb3 100644
--- a/src/locales/de/move-trigger.json
+++ b/src/locales/de/move-trigger.json
@@ -66,5 +66,6 @@
"revivalBlessing": "{{pokemonName}} ist wieder fit und kampfbereit!",
"swapArenaTags": "{{pokemonName}} hat die Effekte, die auf den beiden Seiten des Kampffeldes wirken, miteinander getauscht!",
"exposedMove": "{{pokemonName}} erkennt {{targetPokemonName}}!",
- "safeguard": "{{targetName}} wird durch Bodyguard geschützt!"
+ "safeguard": "{{targetName}} wird durch Bodyguard geschützt!",
+ "afterYou": "{{targetName}} lässt sich auf Galanterie ein!"
}
diff --git a/src/locales/en/battle.json b/src/locales/en/battle.json
index 120ac749acb..217c77422d1 100644
--- a/src/locales/en/battle.json
+++ b/src/locales/en/battle.json
@@ -44,7 +44,10 @@
"moveNotImplemented": "{{moveName}} is not yet implemented and cannot be selected.",
"moveNoPP": "There's no PP left for\nthis move!",
"moveDisabled": "{{moveName}} is disabled!",
+ "canOnlyUseMove": "{{pokemonName}} can only use {{moveName}}!",
+ "moveCannotBeSelected": "{{moveName}} cannot be selected!",
"disableInterruptedMove": "{{pokemonNameWithAffix}}'s {{moveName}}\nis disabled!",
+ "throatChopInterruptedMove": "The effects of Throat Chop prevent\n{{pokemonName}} from using certain moves!",
"noPokeballForce": "An unseen force\nprevents using Poké Balls.",
"noPokeballTrainer": "You can't catch\nanother trainer's Pokémon!",
"noPokeballMulti": "You can only throw a Poké Ball\nwhen there is one Pokémon remaining!",
diff --git a/src/locales/en/battler-tags.json b/src/locales/en/battler-tags.json
index 222aee4087c..5c351fc6961 100644
--- a/src/locales/en/battler-tags.json
+++ b/src/locales/en/battler-tags.json
@@ -69,5 +69,6 @@
"cursedLapse": "{{pokemonNameWithAffix}} is afflicted by the Curse!",
"stockpilingOnAdd": "{{pokemonNameWithAffix}} stockpiled {{stockpiledCount}}!",
"disabledOnAdd": "{{pokemonNameWithAffix}}'s {{moveName}}\nwas disabled!",
- "disabledLapse": "{{pokemonNameWithAffix}}'s {{moveName}}\nis no longer disabled."
+ "disabledLapse": "{{pokemonNameWithAffix}}'s {{moveName}}\nis no longer disabled.",
+ "tarShotOnAdd": "{{pokemonNameWithAffix}} became weaker to fire!"
}
diff --git a/src/locales/en/fight-ui-handler.json b/src/locales/en/fight-ui-handler.json
index 35b7f42772a..1b8bd1f5c71 100644
--- a/src/locales/en/fight-ui-handler.json
+++ b/src/locales/en/fight-ui-handler.json
@@ -3,5 +3,6 @@
"power": "Power",
"accuracy": "Accuracy",
"abilityFlyInText": " {{pokemonName}}'s {{passive}}{{abilityName}}",
- "passive": "Passive "
+ "passive": "Passive ",
+ "teraHover": "{{type}} Terastallized"
}
\ No newline at end of file
diff --git a/src/locales/en/move-trigger.json b/src/locales/en/move-trigger.json
index e70fb9dcfb7..375ea354d33 100644
--- a/src/locales/en/move-trigger.json
+++ b/src/locales/en/move-trigger.json
@@ -7,6 +7,7 @@
"switchedStat": "{{pokemonName}} switched {{stat}} with its target!",
"sharedGuard": "{{pokemonName}} shared its guard with the target!",
"sharedPower": "{{pokemonName}} shared its power with the target!",
+ "shiftedStats": "{{pokemonName}} switched its {{statToSwitch}} and {{statToSwitchWith}}!",
"goingAllOutForAttack": "{{pokemonName}} is going all out for this attack!",
"regainedHealth": "{{pokemonName}} regained\nhealth!",
"keptGoingAndCrashed": "{{pokemonName}} kept going\nand crashed!",
@@ -66,5 +67,6 @@
"revivalBlessing": "{{pokemonName}} was revived!",
"swapArenaTags": "{{pokemonName}} swapped the battle effects affecting each side of the field!",
"exposedMove": "{{pokemonName}} identified\n{{targetPokemonName}}!",
- "safeguard": "{{targetName}} is protected by Safeguard!"
-}
\ No newline at end of file
+ "safeguard": "{{targetName}} is protected by Safeguard!",
+ "afterYou": "{{pokemonName}} took the kind offer!"
+}
diff --git a/src/locales/ja/ability-trigger.json b/src/locales/ja/ability-trigger.json
index 1b30e52c490..26d27701aef 100644
--- a/src/locales/ja/ability-trigger.json
+++ b/src/locales/ja/ability-trigger.json
@@ -2,11 +2,11 @@
"blockRecoilDamage": "{{pokemonName}}は {{abilityName}}で 反動ダメージを 受けない!",
"badDreams": "{{pokemonName}}は ナイトメアに うなされている!",
"costar": "{{pokemonName}}は {{allyName}}の\n能力変化を コピーした!",
- "iceFaceAvoidedDamage": "{{pokemonName}}は\n{{abilityName}}で ダメージを 受けない!",
+ "iceFaceAvoidedDamage": "{{pokemonNameWithAffix}}は\n{{abilityName}}で ダメージを 受けない!",
"perishBody": "{{pokemonName}}の {{abilityName}}で\nおたがいは 3ターン後に ほろびいてしまう!",
"poisonHeal": "{{pokemonName}}は {{abilityName}}で 回復した!",
"trace": "{{pokemonName}}は 相手の {{targetName}}の\n{{abilityName}}を トレースした!",
- "windPowerCharged": "{{pokemonName}}は\n{{moveName}}を 受けて じゅうでんした!",
+ "windPowerCharged": "{{pokemonNameWithAffix}}は\n{{moveName}}を 受けて じゅうでんした!",
"quickDraw": "{{pokemonName}}は クイックドロウで\n行動が はやくなった!",
"disguiseAvoidedDamage": "{{pokemonNameWithAffix}}の\nばけのかわが はがれた!",
"blockItemTheft": "{{pokemonNameWithAffix}}の {{abilityName}}で\n道具を うばわれない!",
diff --git a/src/locales/ja/ability.json b/src/locales/ja/ability.json
index bfbf5d3a3c8..c44eeb06234 100644
--- a/src/locales/ja/ability.json
+++ b/src/locales/ja/ability.json
@@ -1,1071 +1,1071 @@
{
"stench": {
"name": "あくしゅう",
- "description": "臭い においを 放つことによって 攻撃した ときに 相手を ひるませることが ある。"
+ "description": "臭い においを 放つことによって 攻撃した ときに 相手を ひるませることが ある。"
},
"drizzle": {
"name": "あめふらし",
- "description": "登場 したときに 天気を 雨に する。"
+ "description": "登場 したときに 天気を 雨に する。"
},
"speedBoost": {
"name": "かそく",
- "description": "毎ターン 素早さが 上がる。"
+ "description": "毎ターン 素早さが 上がる。"
},
"battleArmor": {
"name": "カブトアーマー",
- "description": "硬い 甲羅に 守られて 相手の 攻撃が 急所に 当たらない。"
+ "description": "硬い 甲羅に 守られて 相手の 攻撃が 急所に 当たらない。"
},
"sturdy": {
"name": "がんじょう",
- "description": "相手の 技を 受けても 一撃で 倒されることが ない。 一撃必殺技も 効かない。"
+ "description": "相手の 技を 受けても 一撃で 倒されることが ない。 一撃必殺技も 効かない。"
},
"damp": {
"name": "しめりけ",
- "description": "あたりを 湿らせることに よって じばく などの 爆発する 技を だれも 使えなくなる。"
+ "description": "あたりを 湿らせることに よって じばく などの 爆発する 技を だれも 使えなくなる。"
},
"limber": {
"name": "じゅうなん",
- "description": "柔軟な 体によって まひ状態に ならない。"
+ "description": "柔軟な 体によって まひ状態に ならない。"
},
"sandVeil": {
"name": "すながくれ",
- "description": "砂あらしの とき 回避率が 上がる。"
+ "description": "砂あらしの とき 回避率が 上がる。"
},
"static": {
"name": "せいでんき",
- "description": "静電気を 体に まとい 触った 相手を まひさせる ことがある。"
+ "description": "静電気を 体に まとい 触った 相手を まひさせる ことがある。"
},
"voltAbsorb": {
"name": "ちくでん",
- "description": "でんきタイプの 技を 受けると ダメージを 受けずに 回復する。"
+ "description": "でんきタイプの 技を 受けると ダメージを 受けずに 回復する。"
},
"waterAbsorb": {
"name": "ちょすい",
- "description": "みずタイプの 技を 受けると ダメージを 受けずに 回復する。"
+ "description": "みずタイプの 技を 受けると ダメージを 受けずに 回復する。"
},
"oblivious": {
"name": "どんかん",
- "description": "鈍感なので メロメロや ちょうはつ状態に ならない。"
+ "description": "鈍感なので メロメロや ちょうはつ状態に ならない。"
},
"cloudNine": {
"name": "ノーてんき",
- "description": "あらゆる 天気の 影響が なくなって しまう。"
+ "description": "あらゆる 天気の 影響が なくなって しまう。"
},
"compoundEyes": {
"name": "ふくがん",
- "description": "複眼を 持っているため 技の 命中率が 上がる。"
+ "description": "複眼を 持っているため 技の 命中率が 上がる。"
},
"insomnia": {
"name": "ふみん",
- "description": "眠れない 体質 なので ねむり状態に ならない。"
+ "description": "眠れない 体質 なので ねむり状態に ならない。"
},
"colorChange": {
"name": "へんしょく",
- "description": "相手から 受けた 技の タイプに 自分の タイプが 変化 する。"
+ "description": "相手から 受けた 技の タイプに 自分の タイプが 変化 する。"
},
"immunity": {
"name": "めんえき",
- "description": "体内に 免疫を 持っているため どく状態に ならない。"
+ "description": "体内に 免疫を 持っているため どく状態に ならない。"
},
"flashFire": {
"name": "もらいび",
- "description": "ほのおタイプの 技を 受けると 炎を もらい 自分が 出す ほのおタイプの 技が 強くなる。"
+ "description": "ほのおタイプの 技を 受けると 炎を もらい 自分が 出す ほのおタイプの 技が 強くなる。"
},
"shieldDust": {
"name": "りんぷん",
- "description": "りんぷんに 守られて 技の 追加効果を 受けなくなる。"
+ "description": "りんぷんに 守られて 技の 追加効果を 受けなくなる。"
},
"ownTempo": {
"name": "マイペース",
- "description": "マイペースなので こんらん状態に ならない。"
+ "description": "マイペースなので こんらん状態に ならない。"
},
"suctionCups": {
"name": "きゅうばん",
- "description": "吸盤で 地面に 張り付き ポケモンを 入れ替えさせる 技や 道具が 効かなくなる。"
+ "description": "吸盤で 地面に 張り付き ポケモンを 入れ替えさせる 技や 道具が 効かなくなる。"
},
"intimidate": {
"name": "いかく",
- "description": "登場 したとき 威嚇して 相手を 萎縮させ 相手の 攻撃を 下げて しまう。"
+ "description": "登場 したとき 威嚇して 相手を 萎縮させ 相手の 攻撃を 下げて しまう。"
},
"shadowTag": {
"name": "かげふみ",
- "description": "相手の 影を 踏み 逃げたり 交代 できなくする。"
+ "description": "相手の 影を 踏み 逃げたり 交代 できなくする。"
},
"roughSkin": {
"name": "さめはだ",
- "description": "攻撃を 受けたとき 自分に 触れた 相手を ざらざらの 肌で キズつける。"
+ "description": "攻撃を 受けたとき 自分に 触れた 相手を ざらざらの 肌で キズつける。"
},
"wonderGuard": {
"name": "ふしぎなまもり",
- "description": "効果バツグンの 技しか 当たらない 不思議な 力。"
+ "description": "効果バツグンの 技しか 当たらない 不思議な 力。"
},
"levitate": {
"name": "ふゆう",
- "description": "地面から 浮くことによって じめんタイプの 技を 受けない。"
+ "description": "地面から 浮くことによって じめんタイプの 技を 受けない。"
},
"effectSpore": {
"name": "ほうし",
- "description": "攻撃で 自分に 触れた 相手を どくや まひや ねむり状態に する ことがある。"
+ "description": "攻撃で 自分に 触れた 相手を どくや まひや ねむり状態に する ことがある。"
},
"synchronize": {
"name": "シンクロ",
- "description": "自分が なってしまった どくや まひや やけどを 相手に うつす。"
+ "description": "自分が なってしまった どくや まひや やけどを 相手に うつす。"
},
"clearBody": {
"name": "クリアボディ",
- "description": "相手の 技や 特性で 能力を 下げられない。"
+ "description": "相手の 技や 特性で 能力を 下げられない。"
},
"naturalCure": {
"name": "しぜんかいふく",
- "description": "手持ちに ひっこむと 状態異常が 治る。"
+ "description": "手持ちに ひっこむと 状態異常が 治る。"
},
"lightningRod": {
"name": "ひらいしん",
- "description": "でんきタイプの 技を 自分に 寄せつけ ダメージを 受けずに 特攻が 上がる。"
+ "description": "でんきタイプの 技を 自分に 寄せつけ ダメージを 受けずに 特攻が 上がる。"
},
"sereneGrace": {
"name": "てんのめぐみ",
- "description": "天の恵みの おかげで 技の 追加効果が でやすい。"
+ "description": "天の恵みの おかげで 技の 追加効果が でやすい。"
},
"swiftSwim": {
"name": "すいすい",
- "description": "天気が 雨のとき 素早さが 上がる。"
+ "description": "天気が 雨のとき 素早さが 上がる。"
},
"chlorophyll": {
"name": "ようりょくそ",
- "description": "天気が 晴れのとき 素早さが 上がる。"
+ "description": "天気が 晴れのとき 素早さが 上がる。"
},
"illuminate": {
"name": "はっこう",
- "description": "あたりを 明るくすることで 命中率を 下げられない。"
+ "description": "あたりを 明るくすることで 命中率を 下げられない。"
},
"trace": {
"name": "トレース",
- "description": "登場 したとき 相手の 特性を トレースして 同じ 特性に なる。"
+ "description": "登場 したとき 相手の 特性を トレースして 同じ 特性に なる。"
},
"hugePower": {
"name": "ちからもち",
- "description": "物理攻撃の 威力が 2倍になる。"
+ "description": "物理攻撃の 威力が 2倍になる。"
},
"poisonPoint": {
"name": "どくのトゲ",
- "description": "自分に 触った 相手を どく状態に することがある。"
+ "description": "自分に 触った 相手を どく状態に することがある。"
},
"innerFocus": {
"name": "せいしんりょく",
- "description": "鍛えられた 精神に よって 相手の 攻撃に ひるまない。"
+ "description": "鍛えられた 精神に よって 相手の 攻撃に ひるまない。"
},
"magmaArmor": {
"name": "マグマのよろい",
- "description": "熱い マグマを 身にまとい こおり状態に ならない。"
+ "description": "熱い マグマを 身にまとい こおり状態に ならない。"
},
"waterVeil": {
"name": "みずのベール",
- "description": "水のベールを 身にまとい やけど状態に ならない。"
+ "description": "水のベールを 身にまとい やけど状態に ならない。"
},
"magnetPull": {
"name": "じりょく",
- "description": "はがねタイプの ポケモンを 磁力で 引きつけて 逃げられなくする。"
+ "description": "はがねタイプの ポケモンを 磁力で 引きつけて 逃げられなくする。"
},
"soundproof": {
"name": "ぼうおん",
- "description": "音を 遮断 することに よって 音の 攻撃を 受けない。"
+ "description": "音を 遮断 することに よって 音の 攻撃を 受けない。"
},
"rainDish": {
"name": "あめうけざら",
- "description": "天気が 雨のとき 少しずつ HPを 回復する。"
+ "description": "天気が 雨のとき 少しずつ HPを 回復する。"
},
"sandStream": {
"name": "すなおこし",
- "description": "登場 したとき 天気を 砂あらしにする。"
+ "description": "登場 したとき 天気を 砂あらしにする。"
},
"pressure": {
"name": "プレッシャー",
- "description": "プレッシャーを あたえて 相手の 使う 技の PPを 多く 減らす。"
+ "description": "プレッシャーを あたえて 相手の 使う 技の PPを 多く 減らす。"
},
"thickFat": {
"name": "あついしぼう",
- "description": "厚い 脂肪で 守られているので ほのおタイプと こおりタイプの 技の ダメージを 半減させる。"
+ "description": "厚い 脂肪で 守られているので ほのおタイプと こおりタイプの 技の ダメージを 半減させる。"
},
"earlyBird": {
"name": "はやおき",
- "description": "ねむり状態に なっても 2倍の 早さで 目覚める ことが できる。"
+ "description": "ねむり状態に なっても 2倍の 早さで 目覚める ことが できる。"
},
"flameBody": {
"name": "ほのおのからだ",
- "description": "自分に 触った 相手を やけど状態に する ことがある。"
+ "description": "自分に 触った 相手を やけど状態に する ことがある。"
},
"runAway": {
"name": "にげあし",
- "description": "野生の ポケモンから 必ず 逃げられる。"
+ "description": "野生の ポケモンから 必ず 逃げられる。"
},
"keenEye": {
"name": "するどいめ",
- "description": "鋭い 目の おかげで 命中率を 下げられない。"
+ "description": "鋭い 目の おかげで 命中率を 下げられない。"
},
"hyperCutter": {
"name": "かいりきバサミ",
- "description": "力自慢の ハサミを 持っているので 相手に 攻撃を 下げられない。"
+ "description": "力自慢の ハサミを 持っているので 相手に 攻撃を 下げられない。"
},
"pickup": {
"name": "ものひろい",
- "description": "戦闘が 終わったとき 相手の 持った 道具を 一つ 拾ってくることが ある。"
+ "description": "戦闘が 終わったとき 相手の 持った 道具を 一つ 拾ってくることが ある。"
},
"truant": {
"name": "なまけ",
- "description": "技を 出すと 次の ターンは 休んでしまう。"
+ "description": "技を 出すと 次の ターンは 休んでしまう。"
},
"hustle": {
"name": "はりきり",
- "description": "自分の 攻撃が 高くなるが 命中率が 下がる。"
+ "description": "自分の 攻撃が 高くなるが 命中率が 下がる。"
},
"cuteCharm": {
"name": "メロメロボディ",
- "description": "自分に 触った 相手を メロメロに することが ある。"
+ "description": "自分に 触った 相手を メロメロに することが ある。"
},
"plus": {
"name": "プラス",
- "description": "プラスか マイナスの 特性を 持つ ポケモンが 仲間に いると 自分の 特攻が 上がる。"
+ "description": "プラスか マイナスの 特性を 持つ ポケモンが 仲間に いると 自分の 特攻が 上がる。"
},
"minus": {
"name": "マイナス",
- "description": "プラスか マイナスの 特性を 持つ ポケモンが 仲間に いると 自分の 特攻が 上がる。"
+ "description": "プラスか マイナスの 特性を 持つ ポケモンが 仲間に いると 自分の 特攻が 上がる。"
},
"forecast": {
"name": "てんきや",
- "description": "天気の 影響を 受けて みずタイプ ほのおタイプ こおりタイプの どれかに 変化する。"
+ "description": "天気の 影響を 受けて みずタイプ ほのおタイプ こおりタイプの どれかに 変化する。"
},
"stickyHold": {
"name": "ねんちゃく",
- "description": "粘着質の 体に 道具が くっついているため 相手に 道具を 奪われない。"
+ "description": "粘着質の 体に 道具が くっついているため 相手に 道具を 奪われない。"
},
"shedSkin": {
"name": "だっぴ",
- "description": "体の 皮を 脱ぎ捨てることで 状態異常を 治すことが ある。"
+ "description": "体の 皮を 脱ぎ捨てることで 状態異常を 治すことが ある。"
},
"guts": {
"name": "こんじょう",
- "description": "状態異常に なると 根性を だして 攻撃が 上がる。"
+ "description": "状態異常に なると 根性を だして 攻撃が 上がる。"
},
"marvelScale": {
"name": "ふしぎなうろこ",
- "description": "状態異常に なると 不思議なウロコが 反応して 防御が 上がる。"
+ "description": "状態異常に なると 不思議なウロコが 反応して 防御が 上がる。"
},
"liquidOoze": {
"name": "ヘドロえき",
- "description": "ヘドロ液を 吸い取った 相手は 強烈な 悪臭で ダメージを 受けて HPを 減らす。"
+ "description": "ヘドロ液を 吸い取った 相手は 強烈な 悪臭で ダメージを 受けて HPを 減らす。"
},
"overgrow": {
"name": "しんりょく",
- "description": "HPが 減ったとき くさタイプの 技の 威力が 上がる。"
+ "description": "HPが 減ったとき くさタイプの 技の 威力が 上がる。"
},
"blaze": {
"name": "もうか",
- "description": "HPが 減ったとき ほのおタイプの 技の 威力が 上がる。"
+ "description": "HPが 減ったとき ほのおタイプの 技の 威力が 上がる。"
},
"torrent": {
"name": "げきりゅう",
- "description": "HPが 減ったとき みずタイプの 技の 威力が 上がる。"
+ "description": "HPが 減ったとき みずタイプの 技の 威力が 上がる。"
},
"swarm": {
"name": "むしのしらせ",
- "description": "HPが 減ったとき むしタイプの 技の 威力が 上がる。"
+ "description": "HPが 減ったとき むしタイプの 技の 威力が 上がる。"
},
"rockHead": {
"name": "いしあたま",
- "description": "反動を 受ける 技を 出しても HPが 減らない。"
+ "description": "反動を 受ける 技を 出しても HPが 減らない。"
},
"drought": {
"name": "ひでり",
- "description": "登場 したときに 天気を 晴れに する。"
+ "description": "登場 したときに 天気を 晴れに する。"
},
"arenaTrap": {
"name": "ありじごく",
- "description": "戦闘で 相手を 逃げられなくする。"
+ "description": "戦闘で 相手を 逃げられなくする。"
},
"vitalSpirit": {
"name": "やるき",
- "description": "やる気を だすことに よって ねむり状態に ならない。"
+ "description": "やる気を だすことに よって ねむり状態に ならない。"
},
"whiteSmoke": {
"name": "しろいけむり",
- "description": "白い煙に 守られて 相手に 能力を 下げられない。"
+ "description": "白い煙に 守られて 相手に 能力を 下げられない。"
},
"purePower": {
"name": "ヨガパワー",
- "description": "ヨガの 力で 物理攻撃の 威力が 2倍に なる。"
+ "description": "ヨガの 力で 物理攻撃の 威力が 2倍に なる。"
},
"shellArmor": {
"name": "シェルアーマー",
- "description": "硬い 殻に 守られ 相手の 攻撃が 急所に 当たらない。"
+ "description": "硬い 殻に 守られ 相手の 攻撃が 急所に 当たらない。"
},
"airLock": {
"name": "エアロック",
- "description": "あらゆる 天気の 影響が なくなって しまう。"
+ "description": "あらゆる 天気の 影響が なくなって しまう。"
},
"tangledFeet": {
"name": "ちどりあし",
- "description": "こんらん状態の ときは 回避率が アップする。"
+ "description": "こんらん状態の ときは 回避率が アップする。"
},
"motorDrive": {
"name": "でんきエンジン",
- "description": "でんきタイプの 技を 受けると ダメージを 受けずに 素早さが 上がる。"
+ "description": "でんきタイプの 技を 受けると ダメージを 受けずに 素早さが 上がる。"
},
"rivalry": {
"name": "とうそうしん",
- "description": "性別が 同じだと 闘争心を 燃やして 強くなる。 性別が 違うと 弱くなる。"
+ "description": "性別が 同じだと 闘争心を 燃やして 強くなる。 性別が 違うと 弱くなる。"
},
"steadfast": {
"name": "ふくつのこころ",
- "description": "ひるむ たびに 不屈の心を 燃やして 素早さが 上がる。"
+ "description": "ひるむ たびに 不屈の心を 燃やして 素早さが 上がる。"
},
"snowCloak": {
"name": "ゆきがくれ",
- "description": "天気が ゆきのとき 回避率が 上がる。"
+ "description": "天気が ゆきのとき 回避率が 上がる。"
},
"gluttony": {
"name": "くいしんぼう",
- "description": "HPが 少なくなったら 食べる きのみを HP 半分の 時に 食べてしまう。"
+ "description": "HPが 少なくなったら 食べる きのみを HP 半分の 時に 食べてしまう。"
},
"angerPoint": {
"name": "いかりのつぼ",
- "description": "急所に 攻撃が 当たると 怒りくるって 攻撃力が 最大に なる。"
+ "description": "急所に 攻撃が 当たると 怒りくるって 攻撃力が 最大に なる。"
},
"unburden": {
"name": "かるわざ",
- "description": "持っていた 道具が なくなると 素早さが 上がる。"
+ "description": "持っていた 道具が なくなると 素早さが 上がる。"
},
"heatproof": {
"name": "たいねつ",
- "description": "耐熱の 体に よって ほのおタイプの 技の 威力を 半減させる。"
+ "description": "耐熱の 体に よって ほのおタイプの 技の 威力を 半減させる。"
},
"simple": {
"name": "たんじゅん",
- "description": "能力 変化が いつもの 2倍に なる。"
+ "description": "能力 変化が いつもの 2倍に なる。"
},
"drySkin": {
"name": "かんそうはだ",
- "description": "天気が 雨の時や みずタイプの 技で HPが 回復し はれの時や ほのおタイプの 技で 減ってしまう。"
+ "description": "天気が 雨の時や みずタイプの 技で HPが 回復し はれの時や ほのおタイプの 技で 減ってしまう。"
},
"download": {
"name": "ダウンロード",
- "description": "相手の 防御と 特防を くらべて 低い ほうの 能力に あわせて 自分の 攻撃か 特攻を 上げる。"
+ "description": "相手の 防御と 特防を くらべて 低い ほうの 能力に あわせて 自分の 攻撃か 特攻を 上げる。"
},
"ironFist": {
"name": "てつのこぶし",
- "description": "パンチを 使う 技の 威力が 上がる。"
+ "description": "パンチを 使う 技の 威力が 上がる。"
},
"poisonHeal": {
"name": "ポイズンヒール",
- "description": "どく状態に なると HPが 減らずに 増えていく。"
+ "description": "どく状態に なると HPが 減らずに 増えていく。"
},
"adaptability": {
"name": "てきおうりょく",
- "description": "自分と おなじ タイプの 技の 威力が 上がる。"
+ "description": "自分と おなじ タイプの 技の 威力が 上がる。"
},
"skillLink": {
"name": "スキルリンク",
- "description": "連続技を 使うと いつも 最高回数 出すことが できる。"
+ "description": "連続技を 使うと いつも 最高回数 出すことが できる。"
},
"hydration": {
"name": "うるおいボディ",
- "description": "天気が 雨のとき 状態異常が 治る。"
+ "description": "天気が 雨のとき 状態異常が 治る。"
},
"solarPower": {
"name": "サンパワー",
- "description": "天気が 晴れると 特攻が 上がるが 毎ターン HPが 減る。"
+ "description": "天気が 晴れると 特攻が 上がるが 毎ターン HPが 減る。"
},
"quickFeet": {
"name": "はやあし",
- "description": "状態異常に なると 素早さが 上がる。"
+ "description": "状態異常に なると 素早さが 上がる。"
},
"normalize": {
"name": "ノーマルスキン",
- "description": "どんな タイプの 技でも すべて ノーマルタイプに なる。 威力が 少し 上がる。"
+ "description": "どんな タイプの 技でも すべて ノーマルタイプに なる。 威力が 少し 上がる。"
},
"sniper": {
"name": "スナイパー",
- "description": "攻撃を 急所に 当てると 威力が さらに 上がる。"
+ "description": "攻撃を 急所に 当てると 威力が さらに 上がる。"
},
"magicGuard": {
"name": "マジックガード",
- "description": "攻撃 以外では ダメージを 受けない。"
+ "description": "攻撃 以外では ダメージを 受けない。"
},
"noGuard": {
"name": "ノーガード",
- "description": "ノーガード戦法に よって お互いの 出す 技が かならず 当たる ようになる。"
+ "description": "ノーガード戦法に よって お互いの 出す 技が かならず 当たる ようになる。"
},
"stall": {
"name": "あとだし",
- "description": "技を 出す 順番が かならず 最後に なる。"
+ "description": "技を 出す 順番が かならず 最後に なる。"
},
"technician": {
"name": "テクニシャン",
- "description": "威力が 低い 技の 威力を 高くして 攻撃できる。"
+ "description": "威力が 低い 技の 威力を 高くして 攻撃できる。"
},
"leafGuard": {
"name": "リーフガード",
- "description": "天気が 晴れのときは 状態異常に ならない。"
+ "description": "天気が 晴れのときは 状態異常に ならない。"
},
"klutz": {
"name": "ぶきよう",
- "description": "持っている 道具を 使うことが できない。"
+ "description": "持っている 道具を 使うことが できない。"
},
"moldBreaker": {
"name": "かたやぶり",
- "description": "相手の 特性に ジャマされる ことなく 相手に 技を 出すことが できる。"
+ "description": "相手の 特性に ジャマされる ことなく 相手に 技を 出すことが できる。"
},
"superLuck": {
"name": "きょううん",
- "description": "強運を 持っているため 相手の 急所に 攻撃が 当たりやすい。"
+ "description": "強運を 持っているため 相手の 急所に 攻撃が 当たりやすい。"
},
"aftermath": {
"name": "ゆうばく",
- "description": "ひんしに なったとき 触った 相手に ダメージを あたえる。"
+ "description": "ひんしに なったとき 触った 相手に ダメージを あたえる。"
},
"anticipation": {
"name": "きけんよち",
- "description": "相手の 持つ 危険な 技を 察知する ことができる。"
+ "description": "相手の 持つ 危険な 技を 察知する ことができる。"
},
"forewarn": {
"name": "よちむ",
- "description": "登場 したとき 相手の 持つ 技を ひとつだけ 読み取る。"
+ "description": "登場 したとき 相手の 持つ 技を ひとつだけ 読み取る。"
},
"unaware": {
"name": "てんねん",
- "description": "相手の 能力の 変化を 無視して 攻撃が できる。"
+ "description": "相手の 能力の 変化を 無視して 攻撃が できる。"
},
"tintedLens": {
"name": "いろめがね",
- "description": "効果が いまひとつの 技を 通常の 威力で 出すことが できる。"
+ "description": "効果が いまひとつの 技を 通常の 威力で 出すことが できる。"
},
"filter": {
"name": "フィルター",
- "description": "効果バツグンに なってしまう 攻撃の 威力を 弱める ことが できる。"
+ "description": "効果バツグンに なってしまう 攻撃の 威力を 弱める ことが できる。"
},
"slowStart": {
"name": "スロースタート",
- "description": "5ターンの あいだ 攻撃と 素早さが 半分に なる。"
+ "description": "5ターンの あいだ 攻撃と 素早さが 半分に なる。"
},
"scrappy": {
"name": "きもったま",
- "description": "ゴーストタイプの ポケモンに ノーマルタイプと かくとうタイプの 技を 当てることが できる。"
+ "description": "ゴーストタイプの ポケモンに ノーマルタイプと かくとうタイプの 技を 当てることが できる。"
},
"stormDrain": {
"name": "よびみず",
- "description": "みずタイプの 技を 自分に よせつけ ダメージは 受けずに 特攻が 上がる。"
+ "description": "みずタイプの 技を 自分に よせつけ ダメージは 受けずに 特攻が 上がる。"
},
"iceBody": {
"name": "アイスボディ",
- "description": "天気が ゆきのとき HPを 少しずつ 回復 する。"
+ "description": "天気が ゆきのとき HPを 少しずつ 回復 する。"
},
"solidRock": {
"name": "ハードロック",
- "description": "効果バツグンに なってしまう 攻撃の 威力を 弱める ことが できる。"
+ "description": "効果バツグンに なってしまう 攻撃の 威力を 弱める ことが できる。"
},
"snowWarning": {
"name": "ゆきふらし",
- "description": "登場 したときに 天気を ゆきに する。"
+ "description": "登場 したときに 天気を ゆきに する。"
},
"honeyGather": {
"name": "みつあつめ",
- "description": "戦闘が 終わったとき あまいミツを 拾う。そのあまいミツが 売られて お金を もらう。"
+ "description": "戦闘が 終わったとき あまいミツを 拾う。そのあまいミツが 売られて お金を もらう。"
},
"frisk": {
"name": "おみとおし",
- "description": "登場 したとき 相手の 持ち物を 見通すことが できる。"
+ "description": "登場 したとき 相手の 持ち物を 見通すことが できる。"
},
"reckless": {
"name": "すてみ",
- "description": "反動で ダメージを 受ける 技の 威力が 上がる。"
+ "description": "反動で ダメージを 受ける 技の 威力が 上がる。"
},
"multitype": {
"name": "マルチタイプ",
- "description": "持っている プレートや Zクリスタルの タイプによって 自分の タイプが 変わる。"
+ "description": "持っている プレートや Zクリスタルの タイプによって 自分の タイプが 変わる。"
},
"flowerGift": {
"name": "フラワーギフト",
- "description": "天気が 晴れのとき 自分と 味方の 攻撃と 特防の 能力が 上がる。"
+ "description": "天気が 晴れのとき 自分と 味方の 攻撃と 特防の 能力が 上がる。"
},
"badDreams": {
"name": "ナイトメア",
- "description": "ねむり状態の 相手に ダメージを あたえる。"
+ "description": "ねむり状態の 相手に ダメージを あたえる。"
},
"pickpocket": {
"name": "わるいてぐせ",
- "description": "触られた 相手の 道具を 盗んで しまう。"
+ "description": "触られた 相手の 道具を 盗んで しまう。"
},
"sheerForce": {
"name": "ちからずく",
- "description": "技の 追加効果は なくなるが そのぶん 高い 威力で 技を 出すことが できる。"
+ "description": "技の 追加効果は なくなるが そのぶん 高い 威力で 技を 出すことが できる。"
},
"contrary": {
"name": "あまのじゃく",
- "description": "能力の 変化が 逆転して 上がるときに 下がり 下がるときに 上がる。"
+ "description": "能力の 変化が 逆転して 上がるときに 下がり 下がるときに 上がる。"
},
"unnerve": {
"name": "きんちょうかん",
- "description": "相手を 緊張させて きのみを 食べられなく させる。"
+ "description": "相手を 緊張させて きのみを 食べられなく させる。"
},
"defiant": {
"name": "まけんき",
- "description": "能力を 下げられると 攻撃が ぐーんと 上がる。"
+ "description": "能力を 下げられると 攻撃が ぐーんと 上がる。"
},
"defeatist": {
"name": "よわき",
- "description": "HPが 半分に なると 弱気に なって 攻撃と 特攻が 半減する。"
+ "description": "HPが 半分に なると 弱気に なって 攻撃と 特攻が 半減する。"
},
"cursedBody": {
"name": "のろわれボディ",
- "description": "攻撃を 受けると 相手の 技を かなしばり状態に することが ある。"
+ "description": "攻撃を 受けると 相手の 技を かなしばり状態に することが ある。"
},
"healer": {
"name": "いやしのこころ",
- "description": "状態異常の 味方を たまに 治してあげる。"
+ "description": "状態異常の 味方を たまに 治してあげる。"
},
"friendGuard": {
"name": "フレンドガード",
- "description": "味方の ダメージを 減らすことが できる。"
+ "description": "味方の ダメージを 減らすことが できる。"
},
"weakArmor": {
"name": "くだけるよろい",
- "description": "物理技で ダメージを 受けると 防御が 下がり 素早さが ぐーんと 上がる。"
+ "description": "物理技で ダメージを 受けると 防御が 下がり 素早さが ぐーんと 上がる。"
},
"heavyMetal": {
"name": "ヘヴィメタル",
- "description": "自分の 重さが 2倍に なる。"
+ "description": "自分の 重さが 2倍に なる。"
},
"lightMetal": {
"name": "ライトメタル",
- "description": "自分の 重さが 半分に なる。"
+ "description": "自分の 重さが 半分に なる。"
},
"multiscale": {
"name": "マルチスケイル",
- "description": "HPが 満タンの ときに 受ける ダメージが 少なくなる。"
+ "description": "HPが 満タンの ときに 受ける ダメージが 少なくなる。"
},
"toxicBoost": {
"name": "どくぼうそう",
- "description": "どく状態に なったとき 物理技の 威力が 上がる。"
+ "description": "どく状態に なったとき 物理技の 威力が 上がる。"
},
"flareBoost": {
"name": "ねつぼうそう",
- "description": "やけど状態に なったとき 特殊技の 威力が 上がる。"
+ "description": "やけど状態に なったとき 特殊技の 威力が 上がる。"
},
"harvest": {
"name": "しゅうかく",
- "description": "使った きのみを 何回も 作りだす。"
+ "description": "使った きのみを 何回も 作りだす。"
},
"telepathy": {
"name": "テレパシー",
- "description": "味方の 攻撃を 読み取って 技を 回避する。"
+ "description": "味方の 攻撃を 読み取って 技を 回避する。"
},
"moody": {
"name": "ムラっけ",
- "description": "毎ターン 能力の どれかが ぐーんと 上がって どれかが 下がる。"
+ "description": "毎ターン 能力の どれかが ぐーんと 上がって どれかが 下がる。"
},
"overcoat": {
"name": "ぼうじん",
- "description": "すなあらしや あられなどの ダメージを 受けない。 粉の 技を 受けない。"
+ "description": "すなあらしや あられなどの ダメージを 受けない。 粉の 技を 受けない。"
},
"poisonTouch": {
"name": "どくしゅ",
- "description": "触る だけで 相手を どく 状態に することがある。"
+ "description": "触る だけで 相手を どく 状態に することがある。"
},
"regenerator": {
"name": "さいせいりょく",
- "description": "手持ちに 引っ込むと HPが 少し 回復する。"
+ "description": "手持ちに 引っ込むと HPが 少し 回復する。"
},
"bigPecks": {
"name": "はとむね",
- "description": "防御を 下げる 効果を 受けない。"
+ "description": "防御を 下げる 効果を 受けない。"
},
"sandRush": {
"name": "すなかき",
- "description": "天気が すなあらし のとき 素早さが 上がる。"
+ "description": "天気が すなあらし のとき 素早さが 上がる。"
},
"wonderSkin": {
"name": "ミラクルスキン",
- "description": "変化技を 受けにくい 体に なっている。"
+ "description": "変化技を 受けにくい 体に なっている。"
},
"analytic": {
"name": "アナライズ",
- "description": "いちばん 最後に 技を 出すと 技の 威力が 上がる。"
+ "description": "いちばん 最後に 技を 出すと 技の 威力が 上がる。"
},
"illusion": {
"name": "イリュージョン",
- "description": "手持ちの いちばん うしろに いる ポケモンに なりきって 登場して 相手を 化かす。"
+ "description": "手持ちの いちばん うしろに いる ポケモンに なりきって 登場して 相手を 化かす。"
},
"imposter": {
"name": "かわりもの",
- "description": "目の前の ポケモンに 変身 してしまう。"
+ "description": "目の前の ポケモンに 変身 してしまう。"
},
"infiltrator": {
"name": "すりぬけ",
- "description": "相手の 壁や 身代わりを すりぬけて 攻撃 できる"
+ "description": "相手の 壁や 身代わりを すりぬけて 攻撃 できる"
},
"mummy": {
"name": "ミイラ",
- "description": "相手に 触られると 相手を ミイラに してしまう。"
+ "description": "相手に 触られると 相手を ミイラに してしまう。"
},
"moxie": {
"name": "じしんかじょう",
- "description": "相手を 倒すと 自信が ついて 攻撃が 上がる。"
+ "description": "相手を 倒すと 自信が ついて 攻撃が 上がる。"
},
"justified": {
"name": "せいぎのこころ",
- "description": "あくタイプの 攻撃を 受けると 正義感で 攻撃が 上がる。"
+ "description": "あくタイプの 攻撃を 受けると 正義感で 攻撃が 上がる。"
},
"rattled": {
"name": "びびり",
- "description": "あく ゴースト むしタイプの 攻撃を 受けたり いかくを されると びびって 素早さが 上がる。"
+ "description": "あく ゴースト むしタイプの 攻撃を 受けたり いかくを されると びびって 素早さが 上がる。"
},
"magicBounce": {
"name": "マジックミラー",
- "description": "相手に だされた 変化技を 受けずに そのまま 返す ことが できる。"
+ "description": "相手に だされた 変化技を 受けずに そのまま 返す ことが できる。"
},
"sapSipper": {
"name": "そうしょく",
- "description": "くさタイプの 技を 受けると ダメージを 受けずに 攻撃が 上がる。"
+ "description": "くさタイプの 技を 受けると ダメージを 受けずに 攻撃が 上がる。"
},
"prankster": {
"name": "いたずらごころ",
- "description": "変化技を 先制で 出すことが できる。"
+ "description": "変化技を 先制で 出すことが できる。"
},
"sandForce": {
"name": "すなのちから",
- "description": "天気が すなあらしの とき いわタイプと じめんタイプと はがねタイプの 威力が 上がる。"
+ "description": "天気が すなあらしの とき いわタイプと じめんタイプと はがねタイプの 威力が 上がる。"
},
"ironBarbs": {
"name": "てつのトゲ",
- "description": "自分に 触った 相手に 鉄のトゲで ダメージを あたえる。"
+ "description": "自分に 触った 相手に 鉄のトゲで ダメージを あたえる。"
},
"zenMode": {
"name": "ダルマモード",
- "description": "HPが 半分 以下に なると 姿が 変化する。"
+ "description": "HPが 半分 以下に なると 姿が 変化する。"
},
"victoryStar": {
"name": "しょうりのほし",
- "description": "自分や 味方の 命中率が 上がる。"
+ "description": "自分や 味方の 命中率が 上がる。"
},
"turboblaze": {
"name": "ターボブレイズ",
- "description": "相手の 特性に ジャマされる ことなく 相手に 技を 出すことが できる。"
+ "description": "相手の 特性に ジャマされる ことなく 相手に 技を 出すことが できる。"
},
"teravolt": {
"name": "テラボルテージ",
- "description": "相手の 特性に ジャマされる ことなく 相手に 技を 出すことが できる。"
+ "description": "相手の 特性に ジャマされる ことなく 相手に 技を 出すことが できる。"
},
"aromaVeil": {
"name": "アロマベール",
- "description": "自分と 味方への メンタル 攻撃を 防ぐことが できる。"
+ "description": "自分と 味方への メンタル 攻撃を 防ぐことが できる。"
},
"flowerVeil": {
"name": "フラワーベール",
- "description": "味方の 草ポケモンは 能力が 下がらず 状態異常にも ならない。"
+ "description": "味方の 草ポケモンは 能力が 下がらず 状態異常にも ならない。"
},
"cheekPouch": {
"name": "ほおぶくろ",
- "description": "どんな きのみでも 食べると HPも 回復する。"
+ "description": "どんな きのみでも 食べると HPも 回復する。"
},
"protean": {
"name": "へんげんじざい",
- "description": "自分が 出す 技と 同じ タイプに 変化する。"
+ "description": "自分が 出す 技と 同じ タイプに 変化する。"
},
"furCoat": {
"name": "ファーコート",
- "description": "相手から 受ける 物理技の ダメージが 半分に なる。"
+ "description": "相手から 受ける 物理技の ダメージが 半分に なる。"
},
"magician": {
"name": "マジシャン",
- "description": "技を 当てた 相手の 道具を 奪ってしまう。"
+ "description": "技を 当てた 相手の 道具を 奪ってしまう。"
},
"bulletproof": {
"name": "ぼうだん",
- "description": "相手の 弾や 爆弾などの 技を 防ぐことが できる。"
+ "description": "相手の 弾や 爆弾などの 技を 防ぐことが できる。"
},
"competitive": {
"name": "かちき",
- "description": "能力を 下げられると 特攻が ぐーんと 上がる。"
+ "description": "能力を 下げられると 特攻が ぐーんと 上がる。"
},
"strongJaw": {
"name": "がんじょうあご",
- "description": "あごが 頑丈で 噛む 技の 威力が 高くなる。"
+ "description": "あごが 頑丈で 噛む 技の 威力が 高くなる。"
},
"refrigerate": {
"name": "フリーズスキン",
- "description": "ノーマルタイプの 技が こおりタイプに なる。 威力が 少し 上がる。"
+ "description": "ノーマルタイプの 技が こおりタイプに なる。 威力が 少し 上がる。"
},
"sweetVeil": {
"name": "スイートベール",
- "description": "味方の ポケモンは 眠らなくなる。"
+ "description": "味方の ポケモンは 眠らなくなる。"
},
"stanceChange": {
"name": "バトルスイッチ",
- "description": "攻撃技を 出すと ブレードフォルムに 技 キングシールドを 出すと シールドフォルムに 変化する。"
+ "description": "攻撃技を 出すと ブレードフォルムに 技 キングシールドを 出すと シールドフォルムに 変化する。"
},
"galeWings": {
"name": "はやてのつばさ",
- "description": "HPが 満タン だと ひこうタイプの 技を 先制で 出すことが できる。"
+ "description": "HPが 満タン だと ひこうタイプの 技を 先制で 出すことが できる。"
},
"megaLauncher": {
"name": "メガランチャー",
- "description": "波動の 技の 威力が 高くなる。"
+ "description": "波動の 技の 威力が 高くなる。"
},
"grassPelt": {
"name": "くさのけがわ",
- "description": "グラスフィールドのとき 防御が 上がる。"
+ "description": "グラスフィールドのとき 防御が 上がる。"
},
"symbiosis": {
"name": "きょうせい",
- "description": "味方が 道具を 使うと 自分の 持っている 道具を 味方に 渡す。"
+ "description": "味方が 道具を 使うと 自分の 持っている 道具を 味方に 渡す。"
},
"toughClaws": {
"name": "かたいツメ",
- "description": "相手に 接触する 技の 威力が 高くなる。"
+ "description": "相手に 接触する 技の 威力が 高くなる。"
},
"pixilate": {
"name": "フェアリースキン",
- "description": "ノーマルタイプの 技が フェアリータイプになる。 威力が 少し 上がる。"
+ "description": "ノーマルタイプの 技が フェアリータイプになる。 威力が 少し 上がる。"
},
"gooey": {
"name": "ぬめぬめ",
- "description": "攻撃で 自分に 触れた 相手の 素早さを 下げる。"
+ "description": "攻撃で 自分に 触れた 相手の 素早さを 下げる。"
},
"aerilate": {
"name": "スカイスキン",
- "description": "ノーマルタイプの 技が ひこうタイプになる。 威力が 少し 上がる。"
+ "description": "ノーマルタイプの 技が ひこうタイプになる。 威力が 少し 上がる。"
},
"parentalBond": {
"name": "おやこあい",
- "description": "親子 2匹で 2回 攻撃することが できる。"
+ "description": "親子 2匹で 2回 攻撃することが できる。"
},
"darkAura": {
"name": "ダークオーラ",
- "description": "全員の あくタイプの 技が 強くなる。"
+ "description": "全員の あくタイプの 技が 強くなる。"
},
"fairyAura": {
"name": "フェアリーオーラ",
- "description": "全員の フェアリータイプの 技が 強くなる。"
+ "description": "全員の フェアリータイプの 技が 強くなる。"
},
"auraBreak": {
"name": "オーラブレイク",
- "description": "オーラの 効果を 逆転させて 威力を 下げる。"
+ "description": "オーラの 効果を 逆転させて 威力を 下げる。"
},
"primordialSea": {
"name": "はじまりのうみ",
- "description": "ほのおタイプの 攻撃を 受けない 天気にする。"
+ "description": "ほのおタイプの 攻撃を 受けない 天気にする。"
},
"desolateLand": {
"name": "おわりのだいち",
- "description": "みずタイプの 攻撃を 受けない 天気にする。"
+ "description": "みずタイプの 攻撃を 受けない 天気にする。"
},
"deltaStream": {
"name": "デルタストリーム",
- "description": "ひこうタイプの 弱点が なくなる 天気にする。"
+ "description": "ひこうタイプの 弱点が なくなる 天気にする。"
},
"stamina": {
"name": "じきゅうりょく",
- "description": "攻撃を 受けると 防御が 上がる。"
+ "description": "攻撃を 受けると 防御が 上がる。"
},
"wimpOut": {
"name": "にげごし",
- "description": "HPが 半分に なると あわてて 逃げ出して 手持ちに 引っ込んで しまう。"
+ "description": "HPが 半分に なると あわてて 逃げ出して 手持ちに 引っ込んで しまう。"
},
"emergencyExit": {
"name": "ききかいひ",
- "description": "HPが 半分に なると 危険を 回避するため 手持ちに 引っ込んで しまう。"
+ "description": "HPが 半分に なると 危険を 回避するため 手持ちに 引っ込んで しまう。"
},
"waterCompaction": {
"name": "みずがため",
- "description": "みずタイプの 技を 受けると 防御が ぐーんと 上がる。"
+ "description": "みずタイプの 技を 受けると 防御が ぐーんと 上がる。"
},
"merciless": {
"name": "ひとでなし",
- "description": "どく状態の 相手を 攻撃すると かならず 急所に 当たる。"
+ "description": "どく状態の 相手を 攻撃すると かならず 急所に 当たる。"
},
"shieldsDown": {
"name": "リミットシールド",
- "description": "HPが 半分に なると 殻が 壊れて 攻撃的に なる。"
+ "description": "HPが 半分に なると 殻が 壊れて 攻撃的に なる。"
},
"stakeout": {
"name": "はりこみ",
- "description": "交代で 出てきた 相手に 2倍の ダメージで 攻撃 できる。"
+ "description": "交代で 出てきた 相手に 2倍の ダメージで 攻撃 できる。"
},
"waterBubble": {
"name": "すいほう",
- "description": "自分に 対する ほのおタイプの 技の 威力を 下げる。 やけど しない。"
+ "description": "自分に 対する ほのおタイプの 技の 威力を 下げる。 やけど しない。"
},
"steelworker": {
"name": "はがねつかい",
- "description": "はがねタイプの 技の 威力が 上がる。"
+ "description": "はがねタイプの 技の 威力が 上がる。"
},
"berserk": {
"name": "ぎゃくじょう",
- "description": "相手の 攻撃で HPが 半分に なると 特攻が 上がる。"
+ "description": "相手の 攻撃で HPが 半分に なると 特攻が 上がる。"
},
"slushRush": {
"name": "ゆきかき",
- "description": "天気が ゆき のとき 素早さが 上がる。"
+ "description": "天気が ゆき のとき 素早さが 上がる。"
},
"longReach": {
"name": "えんかく",
- "description": "すべての 技を 相手に 接触 しないで 出すことが できる。"
+ "description": "すべての 技を 相手に 接触 しないで 出すことが できる。"
},
"liquidVoice": {
"name": "うるおいボイス",
- "description": "すべての 音技が みずタイプに なる。"
+ "description": "すべての 音技が みずタイプに なる。"
},
"triage": {
"name": "ヒーリングシフト",
- "description": "回復技を 先制で 出すことが できる。"
+ "description": "回復技を 先制で 出すことが できる。"
},
"galvanize": {
"name": "エレキスキン",
- "description": "ノーマルタイプの 技が でんきタイプになる。 威力が 少し 上がる。"
+ "description": "ノーマルタイプの 技が でんきタイプになる。 威力が 少し 上がる。"
},
"surgeSurfer": {
"name": "サーフテール",
- "description": "エレキフィールド のとき 素早さが 2倍に なる。"
+ "description": "エレキフィールド のとき 素早さが 2倍に なる。"
},
"schooling": {
"name": "ぎょぐん",
- "description": "HPが 多いときは 群れて 強くなる。 HPの 残りが 少なくなると 群れは 散り散りに なってしまう。"
+ "description": "HPが 多いときは 群れて 強くなる。 HPの 残りが 少なくなると 群れは 散り散りに なってしまう。"
},
"disguise": {
"name": "ばけのかわ",
- "description": "体を 被う 化けの皮で 1回 攻撃を 防ぐことが できる。"
+ "description": "体を 被う 化けの皮で 1回 攻撃を 防ぐことが できる。"
},
"battleBond": {
"name": "きずなへんげ",
- "description": "相手を 倒すと トレーナーとの キズナが 深まり サトシゲッコウガに 変化する。みずしゅりけんが 強くなる。"
+ "description": "相手を 倒すと トレーナーとの キズナが 深まり サトシゲッコウガに 変化する。みずしゅりけんが 強くなる。"
},
"powerConstruct": {
"name": "スワームチェンジ",
- "description": "HPが 半分に なると セルたちが 応援に 駆けつけ パーフェクトフォルムに 姿を 変える。"
+ "description": "HPが 半分に なると セルたちが 応援に 駆けつけ パーフェクトフォルムに 姿を 変える。"
},
"corrosion": {
"name": "ふしょく",
- "description": "はがねタイプや どくタイプも どく状態に することが できる。"
+ "description": "はがねタイプや どくタイプも どく状態に することが できる。"
},
"comatose": {
"name": "ぜったいねむり",
- "description": "つねに 夢うつつの 状態で 絶対に 目覚めない。 眠ったまま 攻撃が できる。"
+ "description": "つねに 夢うつつの 状態で 絶対に 目覚めない。 眠ったまま 攻撃が できる。"
},
"queenlyMajesty": {
"name": "じょおうのいげん",
- "description": "相手に 威圧感を あたえ こちらに むかって 先制技を 出せない ようにする。"
+ "description": "相手に 威圧感を あたえ こちらに むかって 先制技を 出せない ようにする。"
},
"innardsOut": {
"name": "とびだすなかみ",
- "description": "相手に 倒されたとき HPの 残りの ぶんだけ 相手に ダメージを あたえる。"
+ "description": "相手に 倒されたとき HPの 残りの ぶんだけ 相手に ダメージを あたえる。"
},
"dancer": {
"name": "おどりこ",
- "description": "だれかが 踊り技を 使うと 自分も それに 続いて 踊り技を 出すことが できる。"
+ "description": "だれかが 踊り技を 使うと 自分も それに 続いて 踊り技を 出すことが できる。"
},
"battery": {
"name": "バッテリー",
- "description": "味方の 特殊技の 威力を 上げる。"
+ "description": "味方の 特殊技の 威力を 上げる。"
},
"fluffy": {
"name": "もふもふ",
- "description": "相手から 受けた 接触する 技の ダメージを 半減するが ほのおタイプの 技の ダメージは 2倍になる。"
+ "description": "相手から 受けた 接触する 技の ダメージを 半減するが ほのおタイプの 技の ダメージは 2倍になる。"
},
"dazzling": {
"name": "ビビッドボディ",
- "description": "相手を びっくり させて こちらに むかって 先制技を 出せない ようにする。"
+ "description": "相手を びっくり させて こちらに むかって 先制技を 出せない ようにする。"
},
"soulHeart": {
"name": "ソウルハート",
- "description": "ポケモンが ひんしに なるたびに 特攻が 上がる。"
+ "description": "ポケモンが ひんしに なるたびに 特攻が 上がる。"
},
"tanglingHair": {
"name": "カーリーヘアー",
- "description": "攻撃で 自分に 触れた 相手の 素早さを 下げる。"
+ "description": "攻撃で 自分に 触れた 相手の 素早さを 下げる。"
},
"receiver": {
"name": "レシーバー",
- "description": "倒された 味方の 特性を 受け継いで 同じ 特性に なる。"
+ "description": "倒された 味方の 特性を 受け継いで 同じ 特性に なる。"
},
"powerOfAlchemy": {
"name": "かがくのちから",
- "description": "倒された 味方の 特性を 受け継いで 同じ 特性に なる。"
+ "description": "倒された 味方の 特性を 受け継いで 同じ 特性に なる。"
},
"beastBoost": {
"name": "ビーストブースト",
- "description": "相手を 倒したとき 自分の いちばん 高い 能力が 上がる。"
+ "description": "相手を 倒したとき 自分の いちばん 高い 能力が 上がる。"
},
"rksSystem": {
"name": "ARシステム",
- "description": "持っている メモリで 自分の タイプが 変わる。"
+ "description": "持っている メモリで 自分の タイプが 変わる。"
},
"electricSurge": {
"name": "エレキメイカー",
- "description": "登場 したときに エレキフィールドを はりめぐらせる。"
+ "description": "登場 したときに エレキフィールドを はりめぐらせる。"
},
"psychicSurge": {
"name": "サイコメイカー",
- "description": "登場 したときに サイコフィールドを はりめぐらせる。"
+ "description": "登場 したときに サイコフィールドを はりめぐらせる。"
},
"mistySurge": {
"name": "ミストメイカー",
- "description": "登場 したときに ミストフィールドを はりめぐらせる。"
+ "description": "登場 したときに ミストフィールドを はりめぐらせる。"
},
"grassySurge": {
"name": "グラスメイカー",
- "description": "登場 したときに グラスフィールドを はりめぐらせる。"
+ "description": "登場 したときに グラスフィールドを はりめぐらせる。"
},
"fullMetalBody": {
"name": "メタルプロテクト",
- "description": "相手の 技や 特性で 能力を 下げられない。"
+ "description": "相手の 技や 特性で 能力を 下げられない。"
},
"shadowShield": {
"name": "ファントムガード",
- "description": "HPが 満タンの ときに 受ける ダメージが 少なくなる。"
+ "description": "HPが 満タンの ときに 受ける ダメージが 少なくなる。"
},
"prismArmor": {
"name": "プリズムアーマー",
- "description": "効果バツグンに なってしまう 攻撃の 威力を 弱める ことが できる。"
+ "description": "効果バツグンに なってしまう 攻撃の 威力を 弱める ことが できる。"
},
"neuroforce": {
"name": "ブレインフォース",
- "description": "効果バツグンの 攻撃で 威力が さらに 上がる。"
+ "description": "効果バツグンの 攻撃で 威力が さらに 上がる。"
},
"intrepidSword": {
"name": "ふとうのけん",
- "description": "登場 したときに 攻撃が 上がる。"
+ "description": "登場 したときに 攻撃が 上がる。"
},
"dauntlessShield": {
"name": "ふくつのたて",
- "description": "登場 したときに 防御が 上がる。"
+ "description": "登場 したときに 防御が 上がる。"
},
"libero": {
"name": "リベロ",
- "description": "自分が 出す 技と 同じ タイプに 変化する。"
+ "description": "自分が 出す 技と 同じ タイプに 変化する。"
},
"ballFetch": {
"name": "たまひろい",
- "description": "1回目に 投げて 失敗 した モンスターボールを 拾ってくる。"
+ "description": "1回目に 投げて 失敗 した モンスターボールを 拾ってくる。"
},
"cottonDown": {
"name": "わたげ",
- "description": "攻撃を 受けると わたげを ばらまいて 自分以外の ポケモン すべての 素早さを 下げる。"
+ "description": "攻撃を 受けると わたげを ばらまいて 自分以外の ポケモン すべての 素早さを 下げる。"
},
"propellerTail": {
"name": "スクリューおびれ",
- "description": "相手の 技を 引き受ける 特性や 技の 影響を 無視 できる。"
+ "description": "相手の 技を 引き受ける 特性や 技の 影響を 無視 できる。"
},
"mirrorArmor": {
"name": "ミラーアーマー",
- "description": "自分が 受けた 能力 ダウンの 効果 だけを 跳ね返す。"
+ "description": "自分が 受けた 能力 ダウンの 効果 だけを 跳ね返す。"
},
"gulpMissile": {
"name": "うのミサイル",
- "description": "なみのりか ダイビングを すると 獲物を くわえてくる。 ダメージを 受けると 獲物を 吐きだして 攻撃。"
+ "description": "なみのりか ダイビングを すると 獲物を くわえてくる。 ダメージを 受けると 獲物を 吐きだして 攻撃。"
},
"stalwart": {
"name": "すじがねいり",
- "description": "相手の 技を 引き受ける 特性や 技の 影響を 無視 できる。"
+ "description": "相手の 技を 引き受ける 特性や 技の 影響を 無視 できる。"
},
"steamEngine": {
"name": "じょうききかん",
- "description": "みずタイプ ほのおタイプの 技を 受けると 素早さが ぐぐーんと 上がる。"
+ "description": "みずタイプ ほのおタイプの 技を 受けると 素早さが ぐぐーんと 上がる。"
},
"punkRock": {
"name": "パンクロック",
- "description": "音技の 威力が 上がる。 受けた 音技の ダメージは 半分に なる。"
+ "description": "音技の 威力が 上がる。 受けた 音技の ダメージは 半分に なる。"
},
"sandSpit": {
"name": "すなはき",
- "description": "攻撃を 受けると 砂あらしを 起こす。"
+ "description": "攻撃を 受けると 砂あらしを 起こす。"
},
"iceScales": {
"name": "こおりのりんぷん",
- "description": "こおりのりんぷんに 守られて 特殊攻撃で 受ける ダメージが 半減 する。"
+ "description": "こおりのりんぷんに 守られて 特殊攻撃で 受ける ダメージが 半減 する。"
},
"ripen": {
"name": "じゅくせい",
- "description": "熟成 させることで きのみの 効果が 倍に なる。"
+ "description": "熟成 させることで きのみの 効果が 倍に なる。"
},
"iceFace": {
"name": "アイスフェイス",
- "description": "物理攻撃は 頭の 氷が みがわりに なるが 姿も 変わる。 氷は あられが 降ると 元に戻る。"
+ "description": "物理攻撃は 頭の 氷が みがわりに なるが 姿も 変わる。 氷は あられが 降ると 元に戻る。"
},
"powerSpot": {
"name": "パワースポット",
- "description": "隣に いるだけで 技の 威力が 上がる。"
+ "description": "隣に いるだけで 技の 威力が 上がる。"
},
"mimicry": {
"name": "ぎたい",
- "description": "フィールドの 状態に あわせて ポケモンの タイプが 変わる。"
+ "description": "フィールドの 状態に あわせて ポケモンの タイプが 変わる。"
},
"screenCleaner": {
"name": "バリアフリー",
- "description": "登場 したときに 敵と 味方の ひかりのかべ リフレクター オーロラベールの 効果が 消える。"
+ "description": "登場 したときに 敵と 味方の ひかりのかべ リフレクター オーロラベールの 効果が 消える。"
},
"steelySpirit": {
"name": "はがねのせいしん",
- "description": "味方の はがねタイプの 攻撃の 威力が 上がる。"
+ "description": "味方の はがねタイプの 攻撃の 威力が 上がる。"
},
"perishBody": {
"name": "ほろびのボディ",
- "description": "接触する 技を 受けると お互い 3ターン たつと ひんしになる。 交代すると 効果は なくなる。"
+ "description": "接触する 技を 受けると お互い 3ターン たつと ひんしになる。 交代すると 効果は なくなる。"
},
"wanderingSpirit": {
"name": "さまようたましい",
- "description": "接触する 技で 攻撃 してきた ポケモンと 特性を 入れ替える。"
+ "description": "接触する 技で 攻撃 してきた ポケモンと 特性を 入れ替える。"
},
"gorillaTactics": {
"name": "ごりむちゅう",
- "description": "攻撃は 上がるが 最初に 選んだ 技しか 出せなくなる。"
+ "description": "攻撃は 上がるが 最初に 選んだ 技しか 出せなくなる。"
},
"neutralizingGas": {
"name": "かがくへんかガス",
- "description": "かがくへんかガスの ポケモンが 場にいると すべての ポケモンの 特性の 効果が 消えたり 発動 しなくなる。"
+ "description": "かがくへんかガスの ポケモンが 場にいると すべての ポケモンの 特性の 効果が 消えたり 発動 しなくなる。"
},
"pastelVeil": {
"name": "パステルベール",
- "description": "自分も 味方も どくの 状態異常を 受けなくなる。"
+ "description": "自分も 味方も どくの 状態異常を 受けなくなる。"
},
"hungerSwitch": {
"name": "はらぺこスイッチ",
- "description": "ターンの 終わりに まんぷくもよう はらぺこもよう まんぷくもよう……と 交互に 姿を 変える。"
+ "description": "ターンの 終わりに まんぷくもよう はらぺこもよう まんぷくもよう……と 交互に 姿を 変える。"
},
"quickDraw": {
"name": "クイックドロウ",
- "description": "相手より 先に 行動できることが ある。"
+ "description": "相手より 先に 行動できることが ある。"
},
"unseenFist": {
"name": "ふかしのこぶし",
- "description": "相手に 接触する 技なら 守りの 効果を 無視して 攻撃することが できる。"
+ "description": "相手に 接触する 技なら 守りの 効果を 無視して 攻撃することが できる。"
},
"curiousMedicine": {
"name": "きみょうなくすり",
- "description": "登場 したときに 貝がらから 薬を 振りまいて 味方の 能力変化を 元に戻す。"
+ "description": "登場 したときに 貝がらから 薬を 振りまいて 味方の 能力変化を 元に戻す。"
},
"transistor": {
"name": "トランジスタ",
- "description": "でんきタイプの 技の 威力が 上がる。"
+ "description": "でんきタイプの 技の 威力が 上がる。"
},
"dragonsMaw": {
"name": "りゅうのあぎと",
- "description": "ドラゴンタイプの 技の 威力が 上がる。"
+ "description": "ドラゴンタイプの 技の 威力が 上がる。"
},
"chillingNeigh": {
"name": "しろのいななき",
- "description": "相手を 倒すと 冷たい 声で いなないて 攻撃が 上がる。"
+ "description": "相手を 倒すと 冷たい 声で いなないて 攻撃が 上がる。"
},
"grimNeigh": {
"name": "くろのいななき",
- "description": "相手を 倒すと 恐ろしい 声で いなないて 特攻が 上がる。"
+ "description": "相手を 倒すと 恐ろしい 声で いなないて 特攻が 上がる。"
},
"asOneGlastrier": {
"name": "じんばいったい",
- "description": "バドレックスの きんちょうかんと ブリザポスの しろのいななきの 二つの 特性を あわせ持つ。"
+ "description": "バドレックスの きんちょうかんと ブリザポスの しろのいななきの 二つの 特性を あわせ持つ。"
},
"asOneSpectrier": {
"name": "じんばいったい",
- "description": "バドレックスの きんちょうかんと レイスポスの くろのいななきの 二つの 特性を あわせ持つ。"
+ "description": "バドレックスの きんちょうかんと レイスポスの くろのいななきの 二つの 特性を あわせ持つ。"
},
"lingeringAroma": {
"name": "とれないにおい",
@@ -1073,170 +1073,170 @@
},
"seedSower": {
"name": "こぼれダネ",
- "description": "攻撃を 受けると グラスフィールドに する。"
+ "description": "攻撃を 受けると グラスフィールドに する。"
},
"thermalExchange": {
"name": "ねつこうかん",
- "description": "ほのおタイプの 技を 受けると 攻撃が 上がる。 やけど状態に ならない。"
+ "description": "ほのおタイプの 技を 受けると 攻撃が 上がる。 やけど状態に ならない。"
},
"angerShell": {
"name": "いかりのこうら",
- "description": "相手の攻撃で HPが 半分に なると 怒りで 防御と 特防が 下がるが 攻撃 特攻 素早さが 上がる。"
+ "description": "相手の攻撃で HPが 半分に なると 怒りで 防御と 特防が 下がるが 攻撃 特攻 素早さが 上がる。"
},
"purifyingSalt": {
"name": "きよめのしお",
- "description": "清らかな塩で 状態異常に ならない。 ゴーストタイプの 技の ダメージを 半減させる。"
+ "description": "清らかな塩で 状態異常に ならない。 ゴーストタイプの 技の ダメージを 半減させる。"
},
"wellBakedBody": {
"name": "こんがりボディ",
- "description": "ほのおタイプの 技を 受けると ダメージを 受けずに 防御が ぐーんと 上がる。"
+ "description": "ほのおタイプの 技を 受けると ダメージを 受けずに 防御が ぐーんと 上がる。"
},
"windRider": {
"name": "かぜのり",
- "description": "おいかぜが 吹いたり 風技を 受けると ダメージを 受けずに 攻撃が 上がる。"
+ "description": "おいかぜが 吹いたり 風技を 受けると ダメージを 受けずに 攻撃が 上がる。"
},
"guardDog": {
"name": "ばんけん",
- "description": "いかく されると 攻撃が 上がる。 ポケモンを 入れ替えさせる 技や 道具が 効かない。"
+ "description": "いかく されると 攻撃が 上がる。 ポケモンを 入れ替えさせる 技や 道具が 効かない。"
},
"rockyPayload": {
"name": "いわはこび",
- "description": "いわタイプの 技の 威力が 上がる。"
+ "description": "いわタイプの 技の 威力が 上がる。"
},
"windPower": {
"name": "ふうりょくでんき",
- "description": "風技を 受けると じゅうでん 状態に なる。"
+ "description": "風技を 受けると じゅうでん 状態に なる。"
},
"zeroToHero": {
"name": "マイティチェンジ",
- "description": "手持ちに ひっこむと マイティフォルムに 変化する。"
+ "description": "手持ちに ひっこむと マイティフォルムに 変化する。"
},
"commander": {
"name": "しれいとう",
- "description": "登場したとき 味方に ヘイラッシャが いると 口の中に 入って そこから 指令を だす。"
+ "description": "登場したとき 味方に ヘイラッシャが いると 口の中に 入って そこから 指令を だす。"
},
"electromorphosis": {
"name": "でんきにかえる",
- "description": "ダメージを 受けると じゅうでん 状態に なる。"
+ "description": "ダメージを 受けると じゅうでん 状態に なる。"
},
"protosynthesis": {
"name": "こだいかっせい",
- "description": "ブーストエナジーを 持たせるか 天気が 晴れのとき いちばん 高い能力が 上がる。"
+ "description": "ブーストエナジーを 持たせるか 天気が 晴れのとき いちばん 高い能力が 上がる。"
},
"quarkDrive": {
"name": "クォークチャージ",
- "description": "ブーストエナジーを 持たせるか エレキフィールドのとき いちばん 高い能力が 上がる。"
+ "description": "ブーストエナジーを 持たせるか エレキフィールドのとき いちばん 高い能力が 上がる。"
},
"goodAsGold": {
"name": "おうごんのからだ",
- "description": "酸化せず 丈夫な 黄金の体は 相手からの 変化技を 受けない。"
+ "description": "酸化せず 丈夫な 黄金の体は 相手からの 変化技を 受けない。"
},
"vesselOfRuin": {
"name": "わざわいのうつわ",
- "description": "災厄を 呼ぶ 器の力で 自分以外の 特攻が 弱くなる。"
+ "description": "災厄を 呼ぶ 器の力で 自分以外の 特攻が 弱くなる。"
},
"swordOfRuin": {
"name": "わざわいのつるぎ",
- "description": "災厄を 呼ぶ 剣の力で 自分以外の 防御が 弱くなる。"
+ "description": "災厄を 呼ぶ 剣の力で 自分以外の 防御が 弱くなる。"
},
"tabletsOfRuin": {
"name": "わざわいのおふだ",
- "description": "災厄を 呼ぶ 木札の力で 自分以外の 攻撃が 弱くなる。"
+ "description": "災厄を 呼ぶ 木札の力で 自分以外の 攻撃が 弱くなる。"
},
"beadsOfRuin": {
"name": "わざわいのたま",
- "description": "災厄を 呼ぶ 勾玉の力で 自分以外の 特防が 弱くなる。"
+ "description": "災厄を 呼ぶ 勾玉の力で 自分以外の 特防が 弱くなる。"
},
"orichalcumPulse": {
"name": "ひひいろのこどう",
- "description": "登場したとき 天気を 晴れにする。 日差しが 強いと 古代の 鼓動により 攻撃が 高まる。"
+ "description": "登場したとき 天気を 晴れにする。 日差しが 強いと 古代の 鼓動により 攻撃が 高まる。"
},
"hadronEngine": {
"name": "ハドロンエンジン",
- "description": "登場したとき エレキフィールドを はる。 エレキフィールドだと 未来の 機関により 特攻が 高まる。"
+ "description": "登場したとき エレキフィールドを はる。 エレキフィールドだと 未来の 機関により 特攻が 高まる。"
},
"opportunist": {
"name": "びんじょう",
- "description": "相手の 能力が 上がったとき 自分も 便乗して 同じように 能力を 上げる。"
+ "description": "相手の 能力が 上がったとき 自分も 便乗して 同じように 能力を 上げる。"
},
"cudChew": {
"name": "はんすう",
- "description": "きのみを 食べると 次のターンの 終わりに 胃から 出して もう1回だけ 食べる。"
+ "description": "きのみを 食べると 次のターンの 終わりに 胃から 出して もう1回だけ 食べる。"
},
"sharpness": {
"name": "きれあじ",
- "description": "相手を 切る技の 威力が 上がる。"
+ "description": "相手を 切る技の 威力が 上がる。"
},
"supremeOverlord": {
"name": "そうだいしょう",
- "description": "登場したとき 今まで 倒された 味方の 数が 多いほど 少しずつ 攻撃と 特攻が 上がる。"
+ "description": "登場したとき 今まで 倒された 味方の 数が 多いほど 少しずつ 攻撃と 特攻が 上がる。"
},
"costar": {
"name": "きょうえん",
- "description": "登場 したときに 味方の 能力変化を コピーする。"
+ "description": "登場 したときに 味方の 能力変化を コピーする。"
},
"toxicDebris": {
"name": "どくげしょう",
- "description": "物理技で ダメージを 受けると 相手の 足下に どくびしが ちらばる。"
+ "description": "物理技で ダメージを 受けると 相手の 足下に どくびしが ちらばる。"
},
"armorTail": {
"name": "テイルアーマー",
- "description": "頭を包む 謎のしっぽが こちらに むかって 先制技を 出せない ようにする。"
+ "description": "頭を包む 謎のしっぽが こちらに むかって 先制技を 出せない ようにする。"
},
"earthEater": {
"name": "どしょく",
- "description": "じめんタイプの 技を 受けると ダメージを 受けずに 回復する。"
+ "description": "じめんタイプの 技を 受けると ダメージを 受けずに 回復する。"
},
"myceliumMight": {
"name": "きんしのちから",
- "description": "変化技を 出すとき 必ず 行動が 遅くなるが 相手の 特性に ジャマされない。"
+ "description": "変化技を 出すとき 必ず 行動が 遅くなるが 相手の 特性に ジャマされない。"
},
"mindsEye": {
"name": "しんがん",
- "description": "ノーマル かくとうタイプの技を ゴーストタイプに 当てることが できる。 相手の 回避率の 変化を 無視し 命中率も 下げられない。"
+ "description": "ノーマル かくとうタイプの技を ゴーストタイプに 当てることが できる。 相手の 回避率の 変化を 無視し 命中率も 下げられない。"
},
"supersweetSyrup": {
"name": "かんろなミツ",
- "description": "最初に 登場 したとき 甘ったるい 蜜の香りを ふりまいて 相手の 回避率を 下げる。"
+ "description": "最初に 登場 したとき 甘ったるい 蜜の香りを ふりまいて 相手の 回避率を 下げる。"
},
"hospitality": {
"name": "おもてなし",
- "description": "登場したとき 味方を もてなして HPを 少しだけ 回復してあげる。"
+ "description": "登場したとき 味方を もてなして HPを 少しだけ 回復してあげる。"
},
"toxicChain": {
"name": "どくのくさり",
- "description": "毒素を ふくんだ 鎖の力で 技を 当てた 相手を 猛毒の状態に することが ある。"
+ "description": "毒素を ふくんだ 鎖の力で 技を 当てた 相手を 猛毒の状態に することが ある。"
},
"embodyAspectTeal": {
"name": "おもかげやどし",
- "description": "思い出を 心に 宿すことで みどりのめんを かがやかせ 自分の 素早さを 上げる。"
+ "description": "思い出を 心に 宿すことで みどりのめんを かがやかせ 自分の 素早さを 上げる。"
},
"embodyAspectWellspring": {
"name": "おもかげやどし",
- "description": "思い出を 心に 宿すことで いどのめんを かがやかせ 自分の 特防を 上げる。"
+ "description": "思い出を 心に 宿すことで いどのめんを かがやかせ 自分の 特防を 上げる。"
},
"embodyAspectHearthflame": {
"name": "おもかげやどし",
- "description": "思い出を 心に 宿すことで かまどのめんを かがやかせ 自分の 攻撃を 上げる。"
+ "description": "思い出を 心に 宿すことで かまどのめんを かがやかせ 自分の 攻撃を 上げる。"
},
"embodyAspectCornerstone": {
"name": "おもかげやどし",
- "description": "思い出を 心に 宿すことで いしずえのめんを かがやかせ 自分の 防御を 上げる。"
+ "description": "思い出を 心に 宿すことで いしずえのめんを かがやかせ 自分の 防御を 上げる。"
},
"teraShift": {
"name": "テラスチェンジ",
- "description": "登場したとき 周囲の エネルギーを 吸収し テラスタルフォルムに 変化する。"
+ "description": "登場したとき 周囲の エネルギーを 吸収し テラスタルフォルムに 変化する。"
},
"teraShell": {
"name": "テラスシェル",
- "description": "全タイプの力を 秘めた甲羅は HPが 満タンの ときに 受ける ダメージを すべて 今ひとつに する。"
+ "description": "全タイプの力を 秘めた甲羅は HPが 満タンの ときに 受ける ダメージを すべて 今ひとつに する。"
},
"teraformZero": {
"name": "ゼロフォーミング",
- "description": "テラパゴスが ステラフォルムに なったとき 秘められた力で 天気と フィールドの 影響を すべて ゼロにする。"
+ "description": "テラパゴスが ステラフォルムに なったとき 秘められた力で 天気と フィールドの 影響を すべて ゼロにする。"
},
"poisonPuppeteer": {
"name": "どくくぐつ",
- "description": "モモワロウの 技によって どく状態に なった 相手は こんらん状態にも なってしまう。"
+ "description": "モモワロウの 技によって どく状態に なった 相手は こんらん状態にも なってしまう。"
}
-}
\ No newline at end of file
+}
diff --git a/src/locales/ja/arena-flyout.json b/src/locales/ja/arena-flyout.json
index fa29b4567c5..8585b8e8fb4 100644
--- a/src/locales/ja/arena-flyout.json
+++ b/src/locales/ja/arena-flyout.json
@@ -39,5 +39,6 @@
"matBlock": "たたみがえし",
"craftyShield": "トリックガード",
"tailwind": "おいかぜ",
- "happyHour": "ハッピータイム"
+ "happyHour": "ハッピータイム",
+ "safeguard": "しんぴなまもり"
}
diff --git a/src/locales/ja/arena-tag.json b/src/locales/ja/arena-tag.json
index 56be30d8d55..a81942338fd 100644
--- a/src/locales/ja/arena-tag.json
+++ b/src/locales/ja/arena-tag.json
@@ -47,5 +47,11 @@
"tailwindOnRemovePlayer": "味方の 追い風が 止んだ!",
"tailwindOnRemoveEnemy": "相手の 追い風が 止んだ!",
"happyHourOnAdd": "みんなが ハッピーな気分に\n包まれた!",
- "happyHourOnRemove": "みんなの 気分が 元に戻った"
-}
\ No newline at end of file
+ "happyHourOnRemove": "みんなの 気分が 元に戻った",
+ "safeguardOnAdd": "場の全体は 神秘のベールに 包まれた!",
+ "safeguardOnAddPlayer": "味方は 神秘のベールに 包まれた!",
+ "safeguardOnAddEnemy": "相手は 神秘のベールに 包まれた!",
+ "safeguardOnRemove": "場の全体を 包んでいた\n神秘のベールが なくなった!",
+ "safeguardOnRemovePlayer": "味方を 包んでいた\n神秘のベールが なくなった!",
+ "safeguardOnRemoveEnemy": "相手を 包んでいた\n神秘のベールが なくなった!"
+}
diff --git a/src/locales/ja/battle.json b/src/locales/ja/battle.json
index 636d17f23d6..1fe24068cdf 100644
--- a/src/locales/ja/battle.json
+++ b/src/locales/ja/battle.json
@@ -4,7 +4,7 @@
"trainerAppearedDouble": "{{trainerName}}が\n勝負を しかけてきた!",
"trainerSendOut": "{{trainerName}}は\n{{pokemonName}}を 繰り出した!",
"singleWildAppeared": "あっ! 野生の {{pokemonName}}が 飛び出してきた!",
- "multiWildAppeared": "あっ! 野生の {{pokemonName1}}と\n{{pokemonName2}}が 飛び出してきた!",
+ "multiWildAppeared": "あっ! 野生の {{pokemonName1}}と\n{{pokemonName2}}が 飛び出してきた!",
"playerComeBack": "{{pokemonName}}! 戻れ!",
"trainerComeBack": "{{trainerName}}は\n{{pokemonName}}を 引っ込めた!",
"playerGo": "ゆけっ! {{pokemonName}}!",
@@ -51,7 +51,7 @@
"noPokeballStrong": "相手の ポケモンが 強すぎて 捕まえられない!\nまずは 弱めよう!",
"noEscapeForce": "見えない 力の せいで\n逃げることが できない!",
"noEscapeTrainer": "ダメだ! 勝負の最中に\n相手に 背中を 見せられない!",
- "noEscapePokemon": "{{pokemonName}}の {{moveName}}で {{escapeVerb}}!",
+ "noEscapePokemon": "{{pokemonName}}の {{moveName}}で\n{{escapeVerb}}!",
"runAwaySuccess": " うまく 逃げ切れた!",
"runAwayCannotEscape": "逃げることが できない!",
"escapeVerbSwitch": "入れ替えることが できない",
@@ -62,6 +62,7 @@
"skipItemQuestion": "本当に アイテムを 取らずに 進みますか?",
"itemStackFull": "{{fullItemName}}の スタックが いっぱいです。\n代わりに {{itemName}}を 取得します。",
"eggHatching": "おや?",
+ "eggSkipPrompt": "タマゴは ふかします!\nタマゴまとめに 飛ばしますか?",
"ivScannerUseQuestion": "{{pokemonName}}を\n個体値スキャナーで 操作しますか?",
"wildPokemonWithAffix": "野生の {{pokemonName}}",
"foePokemonWithAffix": "相手の {{pokemonName}}",
diff --git a/src/locales/ja/berry.json b/src/locales/ja/berry.json
index 73d13d5e8f0..1d1e01296d1 100644
--- a/src/locales/ja/berry.json
+++ b/src/locales/ja/berry.json
@@ -1,46 +1,46 @@
{
"SITRUS": {
"name": "オボンのみ",
- "effect": "持たせると HPが 50%以下になるとき HPを 25% 回復する"
+ "effect": "持たせると HPが 50%以下に なるとき HPを 25% 回復する"
},
"LUM": {
"name": "ラムのみ",
- "effect": "持たせると 状態異常や 混乱になるとき 回復する\n"
+ "effect": "持たせると 状態異常や 混乱に なるとき 回復する"
},
"ENIGMA": {
"name": "ナゾのみ",
- "effect": "持たせると 効果バツグンの 技を 受けたとき HPを 25%回復する"
+ "effect": "持たせると 効果バツグンの 技を 受けたとき HPを 25%回復する"
},
"LIECHI": {
"name": "チイラのみ",
- "effect": "持たせると HPが 25%以下に なるとき 攻撃が あがる"
+ "effect": "持たせると HPが 25%以下に なるとき 攻撃が あがる"
},
"GANLON": {
"name": "リュガのみ",
- "effect": "持たせると HPが 25%以下に なるとき 防御が あがる\n"
+ "effect": "持たせると HPが 25%以下に なるとき 防御が あがる"
},
"PETAYA": {
"name": "ヤタピのみ",
- "effect": "持たせると HPが 25%以下に なるとき 特攻が あがる\n"
+ "effect": "持たせると HPが 25%以下に なるとき 特攻が あがる"
},
"APICOT": {
"name": "ズアのみ",
- "effect": "持たせると HPが 25%以下に なるとき 特防が あがる\n"
+ "effect": "持たせると HPが 25%以下に なるとき 特防が あがる"
},
"SALAC": {
"name": "カムラのみ",
- "effect": "持たせると HPが 25%以下に なるとき 素早さが あがる"
+ "effect": "持たせると HPが 25%以下に なるとき 素早さが あがる"
},
"LANSAT": {
"name": "サンのみ",
- "effect": "持たせると HPが 25%以下に なるとき 攻撃が 急所に 当たりやすくなる"
+ "effect": "持たせると HPが 25%以下に なるとき 攻撃が 急所に 当たりやすくなる"
},
"STARF": {
"name": "スターのみ",
- "effect": "持たせると HPが 25%以下に なるとき どれか 1つの 能力が ぐーんと あがる"
+ "effect": "持たせると HPが 25%以下に なるとき どれか 1つの 能力が ぐーんと あがる"
},
"LEPPA": {
"name": "ヒメリのみ",
- "effect": "持たせると PPが 0になる 技のPPを 10回復する"
+ "effect": "持たせると PPが0になる 技の PPを 10回復する"
}
}
diff --git a/src/locales/ja/fight-ui-handler.json b/src/locales/ja/fight-ui-handler.json
index 41ec140c2ca..c0c725ccaf3 100644
--- a/src/locales/ja/fight-ui-handler.json
+++ b/src/locales/ja/fight-ui-handler.json
@@ -2,6 +2,6 @@
"pp": "PP",
"power": "威力",
"accuracy": "命中",
- "abilityFlyInText": " {{pokemonName}}の\n{{passive}}:{{abilityName}}",
+ "abilityFlyInText": " {{pokemonName}}の\n{{passive}} {{abilityName}}",
"passive": "パッシブ "
}
diff --git a/src/locales/ja/menu.json b/src/locales/ja/menu.json
index 3630f7590ba..f0914a7941c 100644
--- a/src/locales/ja/menu.json
+++ b/src/locales/ja/menu.json
@@ -22,7 +22,7 @@
"unmatchingPassword": "入力したパスワードが 一致しません",
"passwordNotMatchingConfirmPassword": "パスワードは パスワード確認と 一致する 必要があります",
"confirmPassword": "パスワード確認",
- "registrationAgeWarning": "登録では 13歳以上 であることを 確認します。",
+ "registrationAgeWarning": "登録では 13歳以上 であることを 確認します。",
"backToLogin": "ログインへ",
"failedToLoadSaveData": "セーブデータの 読み込みは 不可能でした。ページを 再読み込み してください。\n長い間に続く 場合は 管理者に 連絡してください。",
"sessionSuccess": "セッションが 正常に 読み込まれました。",
@@ -46,10 +46,10 @@
"yes": "はい",
"no": "いいえ",
"disclaimer": "免責",
- "disclaimerDescription": "このゲームは 未完成作品です。\nセーブデータの 損失を含める ゲーム性に関する 問題が 起きる可能性が あります。\nなお、ゲームは 予告なく変更される 可能性もあり、さらに更新され、完成されるとも 限りません。",
+ "disclaimerDescription": "このゲームは 未完成作品です。\nセーブデータの 損失を含める ゲーム性に関する 問題が 起きる可能性が あります。\nなお、ゲームは 予告なく変更される 可能性もあり、\nさらに更新され、完成されるとも 限りません。",
"choosePokemon": "ポケモンを選ぶ",
"renamePokemon": "ニックネームを変える",
- "rename": "変える",
+ "rename": "名前を変える",
"nickname": "ニックネーム",
"errorServerDown": "おや!\nサーバーとの 接続中に 問題が 発生しました。\nゲームは 自動的に 再接続されます から\nウィンドウは 開いたままに しておいても よろしいです。",
"noSaves": "何の セーブファイルも ありません!",
diff --git a/src/locales/ja/move.json b/src/locales/ja/move.json
index fbeb2132d23..2e602407902 100644
--- a/src/locales/ja/move.json
+++ b/src/locales/ja/move.json
@@ -1,2491 +1,2491 @@
{
"pound": {
"name": "はたく",
- "effect": "長い しっぽや 手などを 使って 相手を はたいて 攻撃する。"
+ "effect": "長い しっぽや 手などを 使って 相手を はたいて 攻撃する。"
},
"karateChop": {
"name": "からてチョップ",
- "effect": "鋭い チョップで 相手を たたいて 攻撃する。 急所に 当たりやすい。"
+ "effect": "鋭い チョップで 相手を たたいて 攻撃する。 急所に 当たりやすい。"
},
"doubleSlap": {
"name": "おうふくビンタ",
- "effect": "おうふく ビンタで 相手を たたいて 攻撃する。 2ー5回の 間 連続で だす。"
+ "effect": "おうふく ビンタで 相手を たたいて 攻撃する。 2ー5回の 間 連続で だす。"
},
"cometPunch": {
"name": "れんぞくパンチ",
- "effect": "どとうの パンチで 相手を なぐりつけて 攻撃する。 2ー5回の 間 連続で だす。"
+ "effect": "どとうの パンチで 相手を なぐりつけて 攻撃する。 2ー5回の 間 連続で だす。"
},
"megaPunch": {
"name": "メガトンパンチ",
- "effect": "力を こめた パンチで 相手を 攻撃する。"
+ "effect": "力を こめた パンチで 相手を 攻撃する。"
},
"payDay": {
"name": "ネコにこばん",
- "effect": "相手の 体に 小判を 投げつけて 攻撃する。 戦闘の あとで お金が もらえる。"
+ "effect": "相手の 体に 小判を 投げつけて 攻撃する。 戦闘の あとで お金が もらえる。"
},
"firePunch": {
"name": "ほのおのパンチ",
- "effect": "炎を こめた パンチで 相手を 攻撃する。 やけど状態に することが ある。"
+ "effect": "炎を こめた パンチで 相手を 攻撃する。 やけど状態に することが ある。"
},
"icePunch": {
"name": "れいとうパンチ",
- "effect": "冷気を こめた パンチで 相手を 攻撃する。 こおり状態に することが ある。"
+ "effect": "冷気を こめた パンチで 相手を 攻撃する。 こおり状態に することが ある。"
},
"thunderPunch": {
"name": "かみなりパンチ",
- "effect": "電撃を こめた パンチで 相手を 攻撃する。 まひ状態に することが ある。"
+ "effect": "電撃を こめた パンチで 相手を 攻撃する。 まひ状態に することが ある。"
},
"scratch": {
"name": "ひっかく",
- "effect": "硬く とがった 鋭い ツメで 相手を ひっかいて 攻撃する。"
+ "effect": "硬く とがった 鋭い ツメで 相手を ひっかいて 攻撃する。"
},
"viseGrip": {
"name": "はさむ",
- "effect": "相手を 両側から はさんで ダメージを あたえる。"
+ "effect": "相手を 両側から はさんで ダメージを あたえる。"
},
"guillotine": {
"name": "ハサミギロチン",
- "effect": "大きな ハサミで 相手を 切り裂いて 攻撃する。 当たれば 一撃で ひんしに する。"
+ "effect": "大きな ハサミで 相手を 切り裂いて 攻撃する。 当たれば 一撃で ひんしに する。"
},
"razorWind": {
"name": "かまいたち",
- "effect": "風の 刃を つくり 2ターン目に 相手を 攻撃する。 急所に 当たりやすい。"
+ "effect": "風の 刃を つくり 2ターン目に 相手を 攻撃する。 急所に 当たりやすい。"
},
"swordsDance": {
"name": "つるぎのまい",
- "effect": "戦いの舞を 激しく おどって 気合を 高める。 自分の 攻撃を ぐーんと あげる。"
+ "effect": "戦いの舞を 激しく おどって 気合を 高める。 自分の 攻撃を ぐーんと あげる。"
},
"cut": {
"name": "いあいぎり",
- "effect": "カマや ツメなどで 相手を 切りつけて 攻撃する。"
+ "effect": "カマや ツメなどで 相手を 切りつけて 攻撃する。"
},
"gust": {
"name": "かぜおこし",
- "effect": "翼で おこした 激しい 風を 相手に ぶつけて 攻撃する。"
+ "effect": "翼で おこした 激しい 風を 相手に ぶつけて 攻撃する。"
},
"wingAttack": {
"name": "つばさでうつ",
- "effect": "大きく ひろげた りっぱな 翼を 相手に ぶつけて 攻撃する。"
+ "effect": "大きく ひろげた りっぱな 翼を 相手に ぶつけて 攻撃する。"
},
"whirlwind": {
"name": "ふきとばし",
- "effect": "相手を 吹きとばして 控えの ポケモンを ひきずりだす。 野生の 場合は 戦闘が 終わる。"
+ "effect": "相手を 吹きとばして 控えの ポケモンを ひきずりだす。 野生の 場合は 戦闘が 終わる。"
},
"fly": {
"name": "そらをとぶ",
- "effect": "1ターン目で 空へ 飛び 2ターン目に 相手を 攻撃する。"
+ "effect": "1ターン目で 空へ 飛び 2ターン目に 相手を 攻撃する。"
},
"bind": {
"name": "しめつける",
- "effect": "長い 体や つるなどを 使い 4ー5ターンの 間 相手を 締めつけて 攻撃する。"
+ "effect": "長い 体や つるなどを 使い 4ー5ターンの 間 相手を 締めつけて 攻撃する。"
},
"slam": {
"name": "たたきつける",
- "effect": "長い しっぽや つるなどを 使い 相手を たたきつけて 攻撃する。"
+ "effect": "長い しっぽや つるなどを 使い 相手を たたきつけて 攻撃する。"
},
"vineWhip": {
"name": "つるのムチ",
- "effect": "ムチのように しなる 細長い つるで 相手を たたきつけて 攻撃する。"
+ "effect": "ムチのように しなる 細長い つるで 相手を たたきつけて 攻撃する。"
},
"stomp": {
"name": "ふみつけ",
- "effect": "大きな 足で 相手を 踏みつけて 攻撃する。 相手を ひるませることが ある。"
+ "effect": "大きな 足で 相手を 踏みつけて 攻撃する。 相手を ひるませることが ある。"
},
"doubleKick": {
"name": "にどげり",
- "effect": "2本の 足で 相手を けとばして 攻撃する。 2回連続で ダメージを 与える。"
+ "effect": "2本の 足で 相手を けとばして 攻撃する。 2回連続で ダメージを 与える。"
},
"megaKick": {
"name": "メガトンキック",
- "effect": "ものすごい 力を こめた キックで 相手を けとばして 攻撃する。"
+ "effect": "ものすごい 力を こめた キックで 相手を けとばして 攻撃する。"
},
"jumpKick": {
"name": "とびげり",
- "effect": "高い ジャンプからの キックで 相手を 攻撃する。 はずすと 自分が ダメージを 受ける。"
+ "effect": "高い ジャンプからの キックで 相手を 攻撃する。 はずすと 自分が ダメージを 受ける。"
},
"rollingKick": {
"name": "まわしげり",
- "effect": "体を 素早く 回転させながら けとばして 攻撃する。 相手を ひるませる ことが ある。"
+ "effect": "体を 素早く 回転させながら けとばして 攻撃する。 相手を ひるませる ことが ある。"
},
"sandAttack": {
"name": "すなかけ",
- "effect": "相手の 顔に 砂を かけて 命中率を さげる。"
+ "effect": "相手の 顔に 砂を かけて 命中率を さげる。"
},
"headbutt": {
"name": "ずつき",
- "effect": "頭を 突きだして まっすぐ つっこんで 攻撃する。 相手を ひるませることが ある。"
+ "effect": "頭を 突きだして まっすぐ つっこんで 攻撃する。 相手を ひるませることが ある。"
},
"hornAttack": {
"name": "つのでつく",
- "effect": "鋭く とがった つので 相手を 攻撃する。"
+ "effect": "鋭く とがった つので 相手を 攻撃する。"
},
"furyAttack": {
"name": "みだれづき",
- "effect": "つのや くちばしで 相手を つついて 攻撃する。 2ー5回の 間 連続で だす。"
+ "effect": "つのや くちばしで 相手を つついて 攻撃する。 2ー5回の 間 連続で だす。"
},
"hornDrill": {
"name": "つのドリル",
- "effect": "回転する つのを 相手に 突き刺して 攻撃する。 当たれば 一撃で ひんしに する。"
+ "effect": "回転する つのを 相手に 突き刺して 攻撃する。 当たれば 一撃で ひんしに する。"
},
"tackle": {
"name": "たいあたり",
- "effect": "相手に むかって 全身で ぶつかっていき 攻撃する。"
+ "effect": "相手に むかって 全身で ぶつかっていき 攻撃する。"
},
"bodySlam": {
"name": "のしかかり",
- "effect": "全身で 相手に のしかかり 攻撃する。 まひ状態に することが ある。"
+ "effect": "全身で 相手に のしかかり 攻撃する。 まひ状態に することが ある。"
},
"wrap": {
"name": "まきつく",
- "effect": "長い 体や つるなどを 使って 4ー5ターンの 間 相手に まきついて 攻撃する。"
+ "effect": "長い 体や つるなどを 使って 4ー5ターンの 間 相手に まきついて 攻撃する。"
},
"takeDown": {
"name": "とっしん",
- "effect": "すごい 勢いで 相手に ぶつかって 攻撃する。 自分も 少し ダメージを 受ける。"
+ "effect": "すごい 勢いで 相手に ぶつかって 攻撃する。 自分も 少し ダメージを 受ける。"
},
"thrash": {
"name": "あばれる",
- "effect": "2ー3ターンの 間 暴れまくって 相手を 攻撃する。 暴れたあとは 混乱する。"
+ "effect": "2ー3ターンの 間 暴れまくって 相手を 攻撃する。 暴れたあとは 混乱する。"
},
"doubleEdge": {
"name": "すてみタックル",
- "effect": "命を 懸けて 相手に 突進して 攻撃する。 自分も かなり ダメージを 受ける。"
+ "effect": "命を 懸けて 相手に 突進して 攻撃する。 自分も かなり ダメージを 受ける。"
},
"tailWhip": {
"name": "しっぽをふる",
- "effect": "しっぽを 左右に かわいく ふって 油断を 誘う。 相手の 防御を さげる。"
+ "effect": "しっぽを 左右に かわいく ふって 油断を 誘う。 相手の 防御を さげる。"
},
"poisonSting": {
"name": "どくばり",
- "effect": "毒の ある ハリを 相手に 突き刺して 攻撃する。 毒状態に することが ある。"
+ "effect": "毒の ある ハリを 相手に 突き刺して 攻撃する。 毒状態に することが ある。"
},
"twineedle": {
"name": "ダブルニードル",
- "effect": "2本の ハリを 相手に 突き刺し 2回連続で ダメージ。 毒状態に することが ある。"
+ "effect": "2本の ハリを 相手に 突き刺し 2回連続で ダメージ。 毒状態に することが ある。"
},
"pinMissile": {
"name": "ミサイルばり",
- "effect": "鋭い ハリを 相手に 発射して 攻撃する。 2ー5回の 間 連続で だす。"
+ "effect": "鋭い ハリを 相手に 発射して 攻撃する。 2ー5回の 間 連続で だす。"
},
"leer": {
"name": "にらみつける",
- "effect": "鋭い 目つきで おびえさせて 相手の 防御を さげる。"
+ "effect": "鋭い 目つきで おびえさせて 相手の 防御を さげる。"
},
"bite": {
"name": "かみつく",
- "effect": "鋭く とがった 歯で かみついて 攻撃する。 相手を ひるませることが ある。"
+ "effect": "鋭く とがった 歯で かみついて 攻撃する。 相手を ひるませることが ある。"
},
"growl": {
"name": "なきごえ",
- "effect": "かわいい なきごえを 聞かせて 気を ひき 油断を させて 相手の 攻撃を さげる。"
+ "effect": "かわいい なきごえを 聞かせて 気を ひき 油断を させて 相手の 攻撃を さげる。"
},
"roar": {
"name": "ほえる",
- "effect": "相手を 逃がして 控えの ポケモンを ひきずりだす。 野生の 場合は 戦闘が 終わる。"
+ "effect": "相手を 逃がして 控えの ポケモンを ひきずりだす。 野生の 場合は 戦闘が 終わる。"
},
"sing": {
"name": "うたう",
- "effect": "心地好い きれいな 歌声を 聞かせて 相手を 眠り状態に する。"
+ "effect": "心地好い きれいな 歌声を 聞かせて 相手を 眠り状態に する。"
},
"supersonic": {
"name": "ちょうおんぱ",
- "effect": "特殊な 音波を 体から 発して 相手を 混乱させる。"
+ "effect": "特殊な 音波を 体から 発して 相手を 混乱させる。"
},
"sonicBoom": {
"name": "ソニックブーム",
- "effect": "衝撃波を 相手に ぶつけて 攻撃する。 20の ダメージを 決まって 与える。"
+ "effect": "衝撃波を 相手に ぶつけて 攻撃する。 20の ダメージを 決まって 与える。"
},
"disable": {
"name": "かなしばり",
- "effect": "相手の 動きを とめて 直前に だしていた 技を 4ターンの 間 使えなくする。"
+ "effect": "相手の 動きを とめて 直前に だしていた 技を 4ターンの 間 使えなくする。"
},
"acid": {
"name": "ようかいえき",
- "effect": "強い 酸を 相手に かけて 攻撃する。 相手の 特防を さげることが ある。"
+ "effect": "強い 酸を 相手に かけて 攻撃する。 相手の 特防を さげることが ある。"
},
"ember": {
"name": "ひのこ",
- "effect": "小さな 炎を 相手に 発射して 攻撃する。 やけど状態に することが ある。"
+ "effect": "小さな 炎を 相手に 発射して 攻撃する。 やけど状態に することが ある。"
},
"flamethrower": {
"name": "かえんほうしゃ",
- "effect": "激しい 炎を 相手に 発射して 攻撃する。 やけど状態に することが ある。"
+ "effect": "激しい 炎を 相手に 発射して 攻撃する。 やけど状態に することが ある。"
},
"mist": {
"name": "しろいきり",
- "effect": "白い霧で 体を おおう。 5ターンの 間 相手に 能力を さげられなく なる。"
+ "effect": "白い霧で 体を おおう。 5ターンの 間 相手に 能力を さげられなく なる。"
},
"waterGun": {
"name": "みずでっぽう",
- "effect": "水を 勢いよく 相手に 発射して 攻撃する。"
+ "effect": "水を 勢いよく 相手に 発射して 攻撃する。"
},
"hydroPump": {
"name": "ハイドロポンプ",
- "effect": "大量の 水を 激しい 勢いで 相手に 発射して 攻撃する。"
+ "effect": "大量の 水を 激しい 勢いで 相手に 発射して 攻撃する。"
},
"surf": {
"name": "なみのり",
- "effect": "大きな 波で 自分の 周りに いるものを 攻撃する。"
+ "effect": "大きな 波で 自分の 周りに いるものを 攻撃する。"
},
"iceBeam": {
"name": "れいとうビーム",
- "effect": "凍える ビームを 相手に 発射して 攻撃する。 こおり状態に することが ある。"
+ "effect": "凍える ビームを 相手に 発射して 攻撃する。 こおり状態に することが ある。"
},
"blizzard": {
"name": "ふぶき",
- "effect": "激しい 吹雪を 相手に 吹きつけて 攻撃する。 こおり状態に することが ある。"
+ "effect": "激しい 吹雪を 相手に 吹きつけて 攻撃する。 こおり状態に することが ある。"
},
"psybeam": {
"name": "サイケこうせん",
- "effect": "不思議な 光線を 相手に 発射して 攻撃する。 混乱させることが ある。"
+ "effect": "不思議な 光線を 相手に 発射して 攻撃する。 混乱させることが ある。"
},
"bubbleBeam": {
"name": "バブルこうせん",
- "effect": "泡を 勢いよく 相手に 発射して 攻撃する。 素早さを さげる ことが ある。"
+ "effect": "泡を 勢いよく 相手に 発射して 攻撃する。 素早さを さげる ことが ある。"
},
"auroraBeam": {
"name": "オーロラビーム",
- "effect": "にじいろの ビームを 相手に 発射して 攻撃する。 攻撃を さげる ことが ある。"
+ "effect": "にじいろの ビームを 相手に 発射して 攻撃する。 攻撃を さげる ことが ある。"
},
"hyperBeam": {
"name": "はかいこうせん",
- "effect": "強い 光線を 相手に 発射して 攻撃する。 次の ターンは 動けなくなる。"
+ "effect": "強い 光線を 相手に 発射して 攻撃する。 次の ターンは 動けなくなる。"
},
"peck": {
"name": "つつく",
- "effect": "鋭く とがった くちばしや つので 相手を 突いて 攻撃する。"
+ "effect": "鋭く とがった くちばしや つので 相手を 突いて 攻撃する。"
},
"drillPeck": {
"name": "ドリルくちばし",
- "effect": "回転しながら とがった くちばしを 相手に 突き刺して 攻撃する。"
+ "effect": "回転しながら とがった くちばしを 相手に 突き刺して 攻撃する。"
},
"submission": {
"name": "じごくぐるま",
- "effect": "地面に 自分ごと 相手を 投げつけて 攻撃する。 自分も 少し ダメージを 受ける。"
+ "effect": "地面に 自分ごと 相手を 投げつけて 攻撃する。 自分も 少し ダメージを 受ける。"
},
"lowKick": {
"name": "けたぐり",
- "effect": "足を 強く けり 相手を 転ばせて 攻撃する。 相手が 重いほど 威力が あがる。"
+ "effect": "足を 強く けり 相手を 転ばせて 攻撃する。 相手が 重いほど 威力が あがる。"
},
"counter": {
"name": "カウンター",
- "effect": "相手から 受けた 物理攻撃の ダメージを 2倍に して 同じ 相手に 返す。"
+ "effect": "相手から 受けた 物理攻撃の ダメージを 2倍に して 同じ 相手に 返す。"
},
"seismicToss": {
"name": "ちきゅうなげ",
- "effect": "引力を 使い 投げとばす。 自分の レベルと 同じ ダメージを 相手に 与える。"
+ "effect": "引力を 使い 投げとばす。 自分の レベルと 同じ ダメージを 相手に 与える。"
},
"strength": {
"name": "かいりき",
- "effect": "こん身の 力で 相手を なぐりつけて 攻撃する。"
+ "effect": "こん身の 力で 相手を なぐりつけて 攻撃する。"
},
"absorb": {
"name": "すいとる",
- "effect": "養分を 吸い取り 攻撃する。 相手に 与えた ダメージの 半分の HPを 回復できる。"
+ "effect": "養分を 吸い取り 攻撃する。 相手に 与えた ダメージの 半分の HPを 回復できる。"
},
"megaDrain": {
"name": "メガドレイン",
- "effect": "養分を 吸い取り 攻撃する。 相手に 与えた ダメージの 半分の HPを 回復できる。"
+ "effect": "養分を 吸い取り 攻撃する。 相手に 与えた ダメージの 半分の HPを 回復できる。"
},
"leechSeed": {
"name": "やどりぎのタネ",
- "effect": "植えつけた 相手の HPを 毎ターン 少しだけ 吸い取り 自分の HPを 回復する。"
+ "effect": "植えつけた 相手の HPを 毎ターン 少しだけ 吸い取り 自分の HPを 回復する。"
},
"growth": {
"name": "せいちょう",
- "effect": "体を 一気に 大きく 生長させて 攻撃と 特攻を あげる。"
+ "effect": "体を 一気に 大きく 生長させて 攻撃と 特攻を あげる。"
},
"razorLeaf": {
"name": "はっぱカッター",
- "effect": "はっぱを とばして 相手を 切りつけて 攻撃する。 急所に 当たりやすい。"
+ "effect": "はっぱを とばして 相手を 切りつけて 攻撃する。 急所に 当たりやすい。"
},
"solarBeam": {
"name": "ソーラービーム",
- "effect": "1ターン目に 光を いっぱいに 集め 2ターン目に 光の 束を 発射して 攻撃する。"
+ "effect": "1ターン目に 光を いっぱいに 集め 2ターン目に 光の 束を 発射して 攻撃する。"
},
"poisonPowder": {
"name": "どくのこな",
- "effect": "毒の ある 粉を たくさん ふりまいて 相手を 毒状態に する。"
+ "effect": "毒の ある 粉を たくさん ふりまいて 相手を 毒状態に する。"
},
"stunSpore": {
"name": "しびれごな",
- "effect": "しびれる 粉を たくさん ふりまいて 相手を まひ状態に する。"
+ "effect": "しびれる 粉を たくさん ふりまいて 相手を まひ状態に する。"
},
"sleepPowder": {
"name": "ねむりごな",
- "effect": "眠くなる 粉を たくさん ふりまいて 相手を 眠り状態に する。"
+ "effect": "眠くなる 粉を たくさん ふりまいて 相手を 眠り状態に する。"
},
"petalDance": {
"name": "はなびらのまい",
- "effect": "2ー3ターンの 間 花を まきちらして 相手を 攻撃する。 まきちらした あとは 混乱する。"
+ "effect": "2ー3ターンの 間 花を まきちらして 相手を 攻撃する。 まきちらした あとは 混乱する。"
},
"stringShot": {
"name": "いとをはく",
- "effect": "口から 吹きだした 糸を まきつけて 相手の 素早さを がくっと さげる。"
+ "effect": "口から 吹きだした 糸を まきつけて 相手の 素早さを がくっと さげる。"
},
"dragonRage": {
"name": "りゅうのいかり",
- "effect": "怒りの 衝撃波を 相手に ぶつけて 攻撃する。 40の ダメージを 決まって 与える。"
+ "effect": "怒りの 衝撃波を 相手に ぶつけて 攻撃する。 40の ダメージを 決まって 与える。"
},
"fireSpin": {
"name": "ほのおのうず",
- "effect": "激しく 渦をまく 炎の中に 4ー5ターンの 間 相手を 閉じこめて 攻撃する。"
+ "effect": "激しく 渦をまく 炎の中に 4ー5ターンの 間 相手を 閉じこめて 攻撃する。"
},
"thunderShock": {
"name": "でんきショック",
- "effect": "電気の 刺激を 相手に 浴びせて 攻撃する。 まひ状態に することが ある。"
+ "effect": "電気の 刺激を 相手に 浴びせて 攻撃する。 まひ状態に することが ある。"
},
"thunderbolt": {
"name": "10まんボルト",
- "effect": "強い 電撃を 相手に 浴びせて 攻撃する。 まひ状態に することが ある。"
+ "effect": "強い 電撃を 相手に 浴びせて 攻撃する。 まひ状態に することが ある。"
},
"thunderWave": {
"name": "でんじは",
- "effect": "弱い 電撃を 浴びせることで 相手を まひ状態に する。"
+ "effect": "弱い 電撃を 浴びせることで 相手を まひ状態に する。"
},
"thunder": {
"name": "かみなり",
- "effect": "激しい 雷を 相手に 落として 攻撃する。 まひ状態に することが ある。"
+ "effect": "激しい 雷を 相手に 落として 攻撃する。 まひ状態に することが ある。"
},
"rockThrow": {
"name": "いわおとし",
- "effect": "小さな 岩を 持ちあげて 相手に 投げつけて 攻撃する。"
+ "effect": "小さな 岩を 持ちあげて 相手に 投げつけて 攻撃する。"
},
"earthquake": {
"name": "じしん",
- "effect": "地震の 衝撃で 自分の 周りに いるものを 攻撃する。"
+ "effect": "地震の 衝撃で 自分の 周りに いるものを 攻撃する。"
},
"fissure": {
"name": "じわれ",
- "effect": "地割れの 裂け目に 相手を 落として 攻撃する。 当たれば 一撃で ひんしに する。"
+ "effect": "地割れの 裂け目に 相手を 落として 攻撃する。 当たれば 一撃で ひんしに する。"
},
"dig": {
"name": "あなをほる",
- "effect": "1ターン目に 潜り 2ターン目で 相手を 攻撃する。"
+ "effect": "1ターン目に 潜り 2ターン目で 相手を 攻撃する。"
},
"toxic": {
"name": "どくどく",
- "effect": "相手を 猛毒の 状態に する。 ターンが すすむほど 毒の ダメージが 増えていく。"
+ "effect": "相手を 猛毒の 状態に する。 ターンが すすむほど 毒の ダメージが 増えていく。"
},
"confusion": {
"name": "ねんりき",
- "effect": "弱い 念力を 相手に 送って 攻撃する。 相手を 混乱させることが ある。"
+ "effect": "弱い 念力を 相手に 送って 攻撃する。 相手を 混乱させることが ある。"
},
"psychic": {
"name": "サイコキネシス",
- "effect": "強い 念力を 相手に 送って 攻撃する。 相手の 特防を さげることが ある。"
+ "effect": "強い 念力を 相手に 送って 攻撃する。 相手の 特防を さげることが ある。"
},
"hypnosis": {
"name": "さいみんじゅつ",
- "effect": "眠気を 誘う 暗示を かけて 相手を 眠り状態に する。"
+ "effect": "眠気を 誘う 暗示を かけて 相手を 眠り状態に する。"
},
"meditate": {
"name": "ヨガのポーズ",
- "effect": "眠っている 力を 体の 奥から ひきだして 自分の 攻撃を あげる。"
+ "effect": "眠っている 力を 体の 奥から ひきだして 自分の 攻撃を あげる。"
},
"agility": {
"name": "こうそくいどう",
- "effect": "力を ぬいて 体を 軽くして 高速で 動く。 自分の 素早さを ぐーんと あげる。"
+ "effect": "力を ぬいて 体を 軽くして 高速で 動く。 自分の 素早さを ぐーんと あげる。"
},
"quickAttack": {
"name": "でんこうせっか",
- "effect": "目にも 留まらぬ ものすごい 速さで 相手に つっこむ。 必ず 先制攻撃 できる。"
+ "effect": "目にも 留まらぬ ものすごい 速さで 相手に つっこむ。 必ず 先制攻撃 できる。"
},
"rage": {
"name": "いかり",
- "effect": "技を だしたときに 攻撃を 受けると 怒りの 力で 攻撃が あがる。"
+ "effect": "技を だしたときに 攻撃を 受けると 怒りの 力で 攻撃が あがる。"
},
"teleport": {
"name": "テレポート",
- "effect": "ひかえの ポケモンが いるときに 使うと 入れ替わる。 野生の ポケモンは 逃げてしまう。"
+ "effect": "ひかえの ポケモンが いるときに 使うと 入れ替わる。 野生の ポケモンは 逃げてしまう。"
},
"nightShade": {
"name": "ナイトヘッド",
- "effect": "恐ろしい 幻を みせて 自分の レベルと 同じだけの ダメージを 相手に 与える。"
+ "effect": "恐ろしい 幻を みせて 自分の レベルと 同じだけの ダメージを 相手に 与える。"
},
"mimic": {
"name": "ものまね",
- "effect": "相手が 最後に 使った 技を 戦闘の あいだ 自分の 技に することが できる。"
+ "effect": "相手が 最後に 使った 技を 戦闘の あいだ 自分の 技に することが できる。"
},
"screech": {
"name": "いやなおと",
- "effect": "おもわず 耳を ふさぎたくなる いやなおとを だして 相手の 防御を がくっと さげる。"
+ "effect": "おもわず 耳を ふさぎたくなる いやなおとを だして 相手の 防御を がくっと さげる。"
},
"doubleTeam": {
"name": "かげぶんしん",
- "effect": "素早い 動きで 分身を つくり 相手を まどわせて 回避率を あげる。"
+ "effect": "素早い 動きで 分身を つくり 相手を まどわせて 回避率を あげる。"
},
"recover": {
"name": "じこさいせい",
- "effect": "細胞を 再生させて 自分の 最大HPの 半分の HPを 回復する。"
+ "effect": "細胞を 再生させて 自分の 最大HPの 半分の HPを 回復する。"
},
"harden": {
"name": "かたくなる",
- "effect": "全身に 力を こめて 体を 硬くして 自分の 防御を あげる。"
+ "effect": "全身に 力を こめて 体を 硬くして 自分の 防御を あげる。"
},
"minimize": {
"name": "ちいさくなる",
- "effect": "体を ちぢめて 小さく みせて 自分の 回避率を ぐーんと あげる。"
+ "effect": "体を ちぢめて 小さく みせて 自分の 回避率を ぐーんと あげる。"
},
"smokescreen": {
"name": "えんまく",
- "effect": "煙や 墨などを 吹きかけて 相手の 命中率を さげる。"
+ "effect": "煙や 墨などを 吹きかけて 相手の 命中率を さげる。"
},
"confuseRay": {
"name": "あやしいひかり",
- "effect": "怪しい 光を 相手に みせて まどわせる。 相手を 混乱させる。"
+ "effect": "怪しい 光を 相手に みせて まどわせる。 相手を 混乱させる。"
},
"withdraw": {
"name": "からにこもる",
- "effect": "殻に 潜りこんで 身を守り 自分の 防御を あげる。"
+ "effect": "殻に 潜りこんで 身を守り 自分の 防御を あげる。"
},
"defenseCurl": {
"name": "まるくなる",
- "effect": "体を まるめて ちぢこまり 自分の 防御を あげる。"
+ "effect": "体を まるめて ちぢこまり 自分の 防御を あげる。"
},
"barrier": {
"name": "バリアー",
- "effect": "頑丈な 壁を つくって 自分の 防御を ぐーんと あげる。"
+ "effect": "頑丈な 壁を つくって 自分の 防御を ぐーんと あげる。"
},
"lightScreen": {
"name": "ひかりのかべ",
- "effect": "5ターンの 間 不思議な かべで 相手から 受ける 特殊攻撃の ダメージを 弱める。"
+ "effect": "5ターンの 間 不思議な かべで 相手から 受ける 特殊攻撃の ダメージを 弱める。"
},
"haze": {
"name": "くろいきり",
- "effect": "黒い霧を だして 戦闘に でている ポケモン 全員の 能力変化を もとに もどす。"
+ "effect": "黒い霧を だして 戦闘に でている ポケモン 全員の 能力変化を もとに もどす。"
},
"reflect": {
"name": "リフレクター",
- "effect": "5ターンの 間 不思議な かべで 相手から 受ける 物理攻撃の ダメージを 弱める。"
+ "effect": "5ターンの 間 不思議な かべで 相手から 受ける 物理攻撃の ダメージを 弱める。"
},
"focusEnergy": {
"name": "きあいだめ",
- "effect": "深く 息を 吸い 気合を こめる。 自分の 攻撃が 急所に 当たりやすくなる。"
+ "effect": "深く 息を 吸い 気合を こめる。 自分の 攻撃が 急所に 当たりやすくなる。"
},
"bide": {
"name": "がまん",
- "effect": "2ターンの 間 攻撃に たえて 受けた ダメージを 2倍にして 相手に 返す。"
+ "effect": "2ターンの 間 攻撃に たえて 受けた ダメージを 2倍にして 相手に 返す。"
},
"metronome": {
"name": "ゆびをふる",
- "effect": "指をふり 自分の 脳を 刺激して すべての 技の なかから どれか 1つを くりだす。"
+ "effect": "指をふり 自分の 脳を 刺激して すべての 技の なかから どれか 1つを くりだす。"
},
"mirrorMove": {
"name": "オウムがえし",
- "effect": "相手の 使った 技を まねして 自分も 同じ技を 使う。"
+ "effect": "相手の 使った 技を まねして 自分も 同じ技を 使う。"
},
"selfDestruct": {
"name": "じばく",
- "effect": "爆発を おこして 自分の 周りに いるものを 攻撃する。 使ったあとに ひんしに なる。"
+ "effect": "爆発を おこして 自分の 周りに いるものを 攻撃する。 使ったあとに ひんしに なる。"
},
"eggBomb": {
"name": "タマゴばくだん",
- "effect": "大きな タマゴを 力いっぱい 相手に 投げつけて 攻撃する。"
+ "effect": "大きな タマゴを 力いっぱい 相手に 投げつけて 攻撃する。"
},
"lick": {
"name": "したでなめる",
- "effect": "長い 舌で 相手を なめまわして 攻撃する。 まひ状態に することが ある。"
+ "effect": "長い 舌で 相手を なめまわして 攻撃する。 まひ状態に することが ある。"
},
"smog": {
"name": "スモッグ",
- "effect": "汚れた ガスを 相手に 吹きつけて 攻撃する。 毒状態に することが ある。"
+ "effect": "汚れた ガスを 相手に 吹きつけて 攻撃する。 毒状態に することが ある。"
},
"sludge": {
"name": "ヘドロこうげき",
- "effect": "汚い ヘドロを 相手に 投げつけて 攻撃する。 毒状態に することが ある。"
+ "effect": "汚い ヘドロを 相手に 投げつけて 攻撃する。 毒状態に することが ある。"
},
"boneClub": {
"name": "ホネこんぼう",
- "effect": "手に 持った ホネで 相手を なぐりつけて 攻撃する。 相手を ひるませることが ある。"
+ "effect": "手に 持った ホネで 相手を なぐりつけて 攻撃する。 相手を ひるませることが ある。"
},
"fireBlast": {
"name": "だいもんじ",
- "effect": "大の字の 炎で 相手を 焼きつくす。 やけど状態に することが ある。"
+ "effect": "大の字の 炎で 相手を 焼きつくす。 やけど状態に することが ある。"
},
"waterfall": {
"name": "たきのぼり",
- "effect": "すごい 勢いで 相手に つっこむ。 相手を ひるませることが ある。"
+ "effect": "すごい 勢いで 相手に つっこむ。 相手を ひるませることが ある。"
},
"clamp": {
"name": "からではさむ",
- "effect": "とても 頑丈な ぶあつい 殻に 4ー5ターンの 間 相手を はさんで 攻撃する。"
+ "effect": "とても 頑丈な ぶあつい 殻に 4ー5ターンの 間 相手を はさんで 攻撃する。"
},
"swift": {
"name": "スピードスター",
- "effect": "星型の 光を 発射して 相手を 攻撃する。 攻撃は 必ず 命中する。"
+ "effect": "星型の 光を 発射して 相手を 攻撃する。 攻撃は 必ず 命中する。"
},
"skullBash": {
"name": "ロケットずつき",
- "effect": "1ターン目に 頭を ひっこめて 防御を あげる。 2ターン目に 相手を 攻撃する。"
+ "effect": "1ターン目に 頭を ひっこめて 防御を あげる。 2ターン目に 相手を 攻撃する。"
},
"spikeCannon": {
"name": "とげキャノン",
- "effect": "鋭い ハリを 相手に 発射して 攻撃する。 2ー5回の 間 連続で だす。"
+ "effect": "鋭い ハリを 相手に 発射して 攻撃する。 2ー5回の 間 連続で だす。"
},
"constrict": {
"name": "からみつく",
- "effect": "触手や ツタなどを からみつけて 攻撃する。相手の 素早さを さげることが ある。"
+ "effect": "触手や ツタなどを からみつけて 攻撃する。相手の 素早さを さげることが ある。"
},
"amnesia": {
"name": "ドわすれ",
- "effect": "頭を からにして 一瞬 なにかを 忘れることで 自分の 特防を ぐーんと あげる。"
+ "effect": "頭を からにして 一瞬 なにかを 忘れることで 自分の 特防を ぐーんと あげる。"
},
"kinesis": {
"name": "スプーンまげ",
- "effect": "スプーンを まげて 注意を ひき 相手の 命中率を さげる。"
+ "effect": "スプーンを まげて 注意を ひき 相手の 命中率を さげる。"
},
"softBoiled": {
"name": "タマゴうみ",
- "effect": "最大HPの 半分 自分の HPを 回復する。"
+ "effect": "最大HPの 半分 自分の HPを 回復する。"
},
"highJumpKick": {
"name": "とびひざげり",
- "effect": "ジャンプからの ひざげりで 相手を 攻撃する。 はずすと 自分が ダメージを 受ける。"
+ "effect": "ジャンプからの ひざげりで 相手を 攻撃する。 はずすと 自分が ダメージを 受ける。"
},
"glare": {
"name": "へびにらみ",
- "effect": "おなかの 模様で おびえさせて 相手を まひの 状態に する。"
+ "effect": "おなかの 模様で おびえさせて 相手を まひの 状態に する。"
},
"dreamEater": {
"name": "ゆめくい",
- "effect": "寝ている 相手の 夢を 食べて 攻撃する。 ダメージの 半分の HPを 回復する。"
+ "effect": "寝ている 相手の 夢を 食べて 攻撃する。 ダメージの 半分の HPを 回復する。"
},
"poisonGas": {
"name": "どくガス",
- "effect": "毒ガスを 相手の 顔に 吹きかけて 毒の 状態に する。"
+ "effect": "毒ガスを 相手の 顔に 吹きかけて 毒の 状態に する。"
},
"barrage": {
"name": "たまなげ",
- "effect": "まるい ものを 相手に 投げつけて 攻撃する。 2ー5回の 間 連続で だす。"
+ "effect": "まるい ものを 相手に 投げつけて 攻撃する。 2ー5回の 間 連続で だす。"
},
"leechLife": {
"name": "きゅうけつ",
- "effect": "血を 吸い取って 相手を 攻撃する。 与えた ダメージの 半分の HPを 回復できる。"
+ "effect": "血を 吸い取って 相手を 攻撃する。 与えた ダメージの 半分の HPを 回復できる。"
},
"lovelyKiss": {
"name": "あくまのキッス",
- "effect": "恐ろしい 顔で キスを せまる。 相手を 眠り状態に する。"
+ "effect": "恐ろしい 顔で キスを せまる。 相手を 眠り状態に する。"
},
"skyAttack": {
"name": "ゴッドバード",
- "effect": "2ターン目に 相手を 攻撃する。 たまに ひるませる。 急所にも 当たりやすい。"
+ "effect": "2ターン目に 相手を 攻撃する。 たまに ひるませる。 急所にも 当たりやすい。"
},
"transform": {
"name": "へんしん",
- "effect": "相手の ポケモンに 変身することで 相手と まったく 同じ 技が 使える。"
+ "effect": "相手の ポケモンに 変身することで 相手と まったく 同じ 技が 使える。"
},
"bubble": {
"name": "あわ",
- "effect": "無数の 泡を 相手に 吹きかけて 攻撃する。 相手の 素早さを さげることが ある。"
+ "effect": "無数の 泡を 相手に 吹きかけて 攻撃する。 相手の 素早さを さげることが ある。"
},
"dizzyPunch": {
"name": "ピヨピヨパンチ",
- "effect": "リズミカルに パンチを くりだして 相手を 攻撃する。 混乱させることが ある。"
+ "effect": "リズミカルに パンチを くりだして 相手を 攻撃する。 混乱させることが ある。"
},
"spore": {
"name": "キノコのほうし",
- "effect": "催眠効果の ある 胞子を パラパラと ふりまき 相手を 眠り状態に する。"
+ "effect": "催眠効果の ある 胞子を パラパラと ふりまき 相手を 眠り状態に する。"
},
"flash": {
"name": "フラッシュ",
- "effect": "まぶしい 光で 相手の 命中率を さげる。"
+ "effect": "まぶしい 光で 相手の 命中率を さげる。"
},
"psywave": {
"name": "サイコウェーブ",
- "effect": "不思議な 念波を 相手に 発射して 攻撃する。 使うたびに ダメージが 変わる。"
+ "effect": "不思議な 念波を 相手に 発射して 攻撃する。 使うたびに ダメージが 変わる。"
},
"splash": {
"name": "はねる",
- "effect": "攻撃もせずに ピョン ピョンと 跳ねるだけで なにも おこらない……。"
+ "effect": "攻撃もせずに ピョン ピョンと 跳ねるだけで なにも おこらない……。"
},
"acidArmor": {
"name": "とける",
- "effect": "細胞の 変化で 液状に なり 自分の 防御を ぐーんと あげる。"
+ "effect": "細胞の 変化で 液状に なり 自分の 防御を ぐーんと あげる。"
},
"crabhammer": {
"name": "クラブハンマー",
- "effect": "大きな ハサミを 相手に たたきつけて 攻撃する。 急所に 当たりやすい。"
+ "effect": "大きな ハサミを 相手に たたきつけて 攻撃する。 急所に 当たりやすい。"
},
"explosion": {
"name": "だいばくはつ",
- "effect": "大きな 爆発で 自分の 周りに いるものを 攻撃する。 使ったあとに ひんしに なる。"
+ "effect": "大きな 爆発で 自分の 周りに いるものを 攻撃する。 使ったあとに ひんしに なる。"
},
"furySwipes": {
"name": "みだれひっかき",
- "effect": "ツメや カマなどで 相手を ひっかいて 攻撃する。 2ー5回の 間 連続で だす。"
+ "effect": "ツメや カマなどで 相手を ひっかいて 攻撃する。 2ー5回の 間 連続で だす。"
},
"bonemerang": {
"name": "ホネブーメラン",
- "effect": "手に 持った ホネを 相手に 投げつけ 行きと 帰りの 2回連続で ダメージを 与える。"
+ "effect": "手に 持った ホネを 相手に 投げつけ 行きと 帰りの 2回連続で ダメージを 与える。"
},
"rest": {
"name": "ねむる",
- "effect": "2ターンの 間 眠り続ける。 自分の HPと 状態異常を すべて 回復する。"
+ "effect": "2ターンの 間 眠り続ける。 自分の HPと 状態異常を すべて 回復する。"
},
"rockSlide": {
"name": "いわなだれ",
- "effect": "大きな 岩を 激しく ぶつけて 攻撃する。 相手を ひるませることが ある。"
+ "effect": "大きな 岩を 激しく ぶつけて 攻撃する。 相手を ひるませることが ある。"
},
"hyperFang": {
"name": "ひっさつまえば",
- "effect": "鋭い 前歯で 強く かみついて 攻撃する。 相手を ひるませることが ある。"
+ "effect": "鋭い 前歯で 強く かみついて 攻撃する。 相手を ひるませることが ある。"
},
"sharpen": {
"name": "かくばる",
- "effect": "体の かどを 増やして カクカクに なることで 自分の 攻撃を あげる。"
+ "effect": "体の かどを 増やして カクカクに なることで 自分の 攻撃を あげる。"
},
"conversion": {
"name": "テクスチャー",
- "effect": "自分の タイプを おぼえている 技で 一番 上の 技と 同じ タイプに する。"
+ "effect": "自分の タイプを おぼえている 技で 一番 上の 技と 同じ タイプに する。"
},
"triAttack": {
"name": "トライアタック",
- "effect": "3つの 光線で 攻撃する。 まひか やけどか こおり状態の どれかに することが ある。"
+ "effect": "3つの 光線で 攻撃する。 まひか やけどか こおり状態の どれかに することが ある。"
},
"superFang": {
"name": "いかりのまえば",
- "effect": "鋭い 前歯で 激しく かみついて 攻撃する。 相手の HPは 半分に なる。"
+ "effect": "鋭い 前歯で 激しく かみついて 攻撃する。 相手の HPは 半分に なる。"
},
"slash": {
"name": "きりさく",
- "effect": "ツメや カマなどで 相手を 切り裂いて 攻撃する。 急所に 当たりやすい。"
+ "effect": "ツメや カマなどで 相手を 切り裂いて 攻撃する。 急所に 当たりやすい。"
},
"substitute": {
"name": "みがわり",
- "effect": "自分の HPを 少し 削って 分身を だす。 分身は 自分の 身代わりに なる。"
+ "effect": "自分の HPを 少し 削って 分身を だす。 分身は 自分の 身代わりに なる。"
},
"struggle": {
"name": "わるあがき",
- "effect": "自分の PPが なくなると あがいて 相手を 攻撃する。 自分も 少し ダメージを 受ける。"
+ "effect": "自分の PPが なくなると あがいて 相手を 攻撃する。 自分も 少し ダメージを 受ける。"
},
"sketch": {
"name": "スケッチ",
- "effect": "相手が 使った 技を 自分の ものに する。 1回 使うと スケッチは 消える。"
+ "effect": "相手が 使った 技を 自分の ものに する。 1回 使うと スケッチは 消える。"
},
"tripleKick": {
"name": "トリプルキック",
- "effect": "3回連続で キックを くりだして 攻撃する。 技が 当たるたびに 威力は あがる。"
+ "effect": "3回連続で キックを くりだして 攻撃する。 技が 当たるたびに 威力は あがる。"
},
"thief": {
"name": "どろぼう",
- "effect": "攻撃と 同時に 道具を 盗もうとする。 盗む 可能性は 30%。"
+ "effect": "攻撃と 同時に 道具を 盗もうとする。 盗む 可能性は 30%。"
},
"spiderWeb": {
"name": "クモのす",
- "effect": "ネバネバした 細い 糸を グルグルと からませて 相手を 戦闘から 逃げられなくする。"
+ "effect": "ネバネバした 細い 糸を グルグルと からませて 相手を 戦闘から 逃げられなくする。"
},
"mindReader": {
"name": "こころのめ",
- "effect": "相手の 動きを 心で 感じて 次の 攻撃が 必ず 相手に 当たるように する。"
+ "effect": "相手の 動きを 心で 感じて 次の 攻撃が 必ず 相手に 当たるように する。"
},
"nightmare": {
"name": "あくむ",
- "effect": "眠り状態の 相手に 悪夢を みせて 毎ターン 少しずつ HPを 減らしていく。"
+ "effect": "眠り状態の 相手に 悪夢を みせて 毎ターン 少しずつ HPを 減らしていく。"
},
"flameWheel": {
"name": "かえんぐるま",
- "effect": "炎を まとい 相手に 突進して 攻撃する。 やけど状態に することが ある。"
+ "effect": "炎を まとい 相手に 突進して 攻撃する。 やけど状態に することが ある。"
},
"snore": {
"name": "いびき",
- "effect": "自分が 寝ているときに 雑音を だして 攻撃する。 相手を ひるませることが ある。"
+ "effect": "自分が 寝ているときに 雑音を だして 攻撃する。 相手を ひるませることが ある。"
},
"curse": {
"name": "のろい",
- "effect": "使う ポケモンが ゴーストタイプと それ以外 とでは 効果が 変わる。"
+ "effect": "使う ポケモンが ゴーストタイプと それ以外 とでは 効果が 変わる。"
},
"flail": {
"name": "じたばた",
- "effect": "じたばた 暴れて 攻撃する。 自分の HPが 少ないほど 技の 威力は あがる。"
+ "effect": "じたばた 暴れて 攻撃する。 自分の HPが 少ないほど 技の 威力は あがる。"
},
"conversion2": {
"name": "テクスチャー2",
- "effect": "相手が 最後に 使った技に 抵抗できる ように 自分の タイプを 変化させる。"
+ "effect": "相手が 最後に 使った技に 抵抗できる ように 自分の タイプを 変化させる。"
},
"aeroblast": {
"name": "エアロブラスト",
- "effect": "空気の 渦を 発射して 攻撃する。 急所に 当たりやすい。"
+ "effect": "空気の 渦を 発射して 攻撃する。 急所に 当たりやすい。"
},
"cottonSpore": {
"name": "わたほうし",
- "effect": "綿のような フワフワの 胞子を まとわり つかせて 相手の 素早さを がくっと さげる。"
+ "effect": "綿のような フワフワの 胞子を まとわり つかせて 相手の 素早さを がくっと さげる。"
},
"reversal": {
"name": "きしかいせい",
- "effect": "力を ふりしぼり 攻撃する。 自分の HPが 少ないほど 技の 威力は あがる。"
+ "effect": "力を ふりしぼり 攻撃する。 自分の HPが 少ないほど 技の 威力は あがる。"
},
"spite": {
"name": "うらみ",
- "effect": "相手が 最後に 使った技に 恨みを 抱いて その技の PPを 4だけ 減らす。"
+ "effect": "相手が 最後に 使った技に 恨みを 抱いて その技の PPを 4だけ 減らす。"
},
"powderSnow": {
"name": "こなゆき",
- "effect": "冷たい 粉雪を 相手に 吹きつけて 攻撃する。 こおり状態に することが ある。"
+ "effect": "冷たい 粉雪を 相手に 吹きつけて 攻撃する。 こおり状態に することが ある。"
},
"protect": {
"name": "まもる",
- "effect": "相手の 攻撃を まったく 受けない。 連続で だすと 失敗しやすい。"
+ "effect": "相手の 攻撃を まったく 受けない。 連続で だすと 失敗しやすい。"
},
"machPunch": {
"name": "マッハパンチ",
- "effect": "目にも 留まらぬ ものすごい 速さで パンチを くりだす。 必ず 先制攻撃 できる。"
+ "effect": "目にも 留まらぬ ものすごい 速さで パンチを くりだす。 必ず 先制攻撃 できる。"
},
"scaryFace": {
"name": "こわいかお",
- "effect": "恐ろしい 顔で にらみ おびえさせて 相手の 素早さを がくっと さげる。"
+ "effect": "恐ろしい 顔で にらみ おびえさせて 相手の 素早さを がくっと さげる。"
},
"feintAttack": {
"name": "だましうち",
- "effect": "さりげなく 相手に ちかづき 油断した すきを みて なぐりつける。 攻撃は 必ず 命中する。"
+ "effect": "さりげなく 相手に ちかづき 油断した すきを みて なぐりつける。 攻撃は 必ず 命中する。"
},
"sweetKiss": {
"name": "てんしのキッス",
- "effect": "天使のように かわいく キスして 相手を 混乱させる。"
+ "effect": "天使のように かわいく キスして 相手を 混乱させる。"
},
"bellyDrum": {
"name": "はらだいこ",
- "effect": "自分の HPを 最大HPの 半分 減らして 自分の 攻撃を 最大に あげる。"
+ "effect": "自分の HPを 最大HPの 半分 減らして 自分の 攻撃を 最大に あげる。"
},
"sludgeBomb": {
"name": "ヘドロばくだん",
- "effect": "汚い ヘドロを 相手に 投げつけて 攻撃する。 毒状態に することが ある。"
+ "effect": "汚い ヘドロを 相手に 投げつけて 攻撃する。 毒状態に することが ある。"
},
"mudSlap": {
"name": "どろかけ",
- "effect": "相手の 顔などに 泥を 投げつけて 攻撃する。 命中率を さげる。"
+ "effect": "相手の 顔などに 泥を 投げつけて 攻撃する。 命中率を さげる。"
},
"octazooka": {
"name": "オクタンほう",
- "effect": "相手の 顔などに 墨を 吹きかけて 攻撃する。 命中率を さげることが ある。"
+ "effect": "相手の 顔などに 墨を 吹きかけて 攻撃する。 命中率を さげることが ある。"
},
"spikes": {
"name": "まきびし",
- "effect": "相手の 足下に まきびしを しかける。交代で でてきた 相手の ポケモンに ダメージを 与える。"
+ "effect": "相手の 足下に まきびしを しかける。交代で でてきた 相手の ポケモンに ダメージを 与える。"
},
"zapCannon": {
"name": "でんじほう",
- "effect": "大砲の ような 電気を 発射して 攻撃する。 相手を まひの 状態に する。"
+ "effect": "大砲の ような 電気を 発射して 攻撃する。 相手を まひの 状態に する。"
},
"foresight": {
"name": "みやぶる",
- "effect": "ゴーストタイプに 効果がない 技や 回避率の 高い 相手に 攻撃が 当たるように なる。"
+ "effect": "ゴーストタイプに 効果がない 技や 回避率の 高い 相手に 攻撃が 当たるように なる。"
},
"destinyBond": {
"name": "みちづれ",
- "effect": "技のあと 相手の 攻撃で ひんしに なると 攻撃 相手も ひんしにする。 連続して 出すと 失敗する。"
+ "effect": "技のあと 相手の 攻撃で ひんしに なると 攻撃 相手も ひんしにする。 連続して 出すと 失敗する。"
},
"perishSong": {
"name": "ほろびのうた",
- "effect": "歌を 聴いた ポケモンは 3ターン たつと ひんしに なる。 交代すると 効果は なくなる。"
+ "effect": "歌を 聴いた ポケモンは 3ターン たつと ひんしに なる。 交代すると 効果は なくなる。"
},
"icyWind": {
"name": "こごえるかぜ",
- "effect": "凍てつく 冷気を 相手に 吹きつけて 攻撃する。 相手の 素早さを さげる。"
+ "effect": "凍てつく 冷気を 相手に 吹きつけて 攻撃する。 相手の 素早さを さげる。"
},
"detect": {
"name": "みきり",
- "effect": "相手の 攻撃を まったく 受けない。 連続で だすと 失敗しやすい。"
+ "effect": "相手の 攻撃を まったく 受けない。 連続で だすと 失敗しやすい。"
},
"boneRush": {
"name": "ボーンラッシュ",
- "effect": "硬い ホネで 相手を なぐりつけて 攻撃する。 2ー5回の 間 連続で だす。"
+ "effect": "硬い ホネで 相手を なぐりつけて 攻撃する。 2ー5回の 間 連続で だす。"
},
"lockOn": {
"name": "ロックオン",
- "effect": "照準を しっかり あわせて 次の 攻撃が 必ず 相手に 当たるように する。"
+ "effect": "照準を しっかり あわせて 次の 攻撃が 必ず 相手に 当たるように する。"
},
"outrage": {
"name": "げきりん",
- "effect": "2ー3ターンの 間 暴れまくって 相手を 攻撃する。 暴れたあとは 混乱する。"
+ "effect": "2ー3ターンの 間 暴れまくって 相手を 攻撃する。 暴れたあとは 混乱する。"
},
"sandstorm": {
"name": "すなあらし",
- "effect": "5ターンの 間 砂あらしで いわ じめん はがねタイプ 以外に ダメージ。 いわタイプの 特防が あがる。"
+ "effect": "5ターンの 間 砂あらしで いわ じめん はがねタイプ 以外に ダメージ。 いわタイプの 特防が あがる。"
},
"gigaDrain": {
"name": "ギガドレイン",
- "effect": "養分を 吸い取り 攻撃する。 相手に 与えた ダメージの 半分の HPを 回復できる。"
+ "effect": "養分を 吸い取り 攻撃する。 相手に 与えた ダメージの 半分の HPを 回復できる。"
},
"endure": {
"name": "こらえる",
- "effect": "攻撃を 受けても HPを 必ず 1だけ 残せる。 連続で だすと 失敗しやすい。"
+ "effect": "攻撃を 受けても HPを 必ず 1だけ 残せる。 連続で だすと 失敗しやすい。"
},
"charm": {
"name": "あまえる",
- "effect": "かわいく みつめて 油断を 誘い 相手の 攻撃を がくっと さげる。"
+ "effect": "かわいく みつめて 油断を 誘い 相手の 攻撃を がくっと さげる。"
},
"rollout": {
"name": "ころがる",
- "effect": "5ターンの 間 転がり続けて 攻撃する。 技が 当たるたびに 威力が あがる。"
+ "effect": "5ターンの 間 転がり続けて 攻撃する。 技が 当たるたびに 威力が あがる。"
},
"falseSwipe": {
"name": "みねうち",
- "effect": "相手の HPが 必ず 1だけ 残るように 手加減して 攻撃する。"
+ "effect": "相手の HPが 必ず 1だけ 残るように 手加減して 攻撃する。"
},
"swagger": {
"name": "いばる",
- "effect": "相手を 怒らせて 混乱させる。 怒りで 相手の 攻撃は ぐーんと あがってしまう。"
+ "effect": "相手を 怒らせて 混乱させる。 怒りで 相手の 攻撃は ぐーんと あがってしまう。"
},
"milkDrink": {
"name": "ミルクのみ",
- "effect": "最大HPの 半分 自分の HPを 回復する。"
+ "effect": "最大HPの 半分 自分の HPを 回復する。"
},
"spark": {
"name": "スパーク",
- "effect": "電気を まとい 相手に 突進して 攻撃する。 まひ状態に することが ある。"
+ "effect": "電気を まとい 相手に 突進して 攻撃する。 まひ状態に することが ある。"
},
"furyCutter": {
"name": "れんぞくぎり",
- "effect": "カマや ツメなどで 相手を 切りつけて 攻撃する。 連続で 当てると 威力が あがる。"
+ "effect": "カマや ツメなどで 相手を 切りつけて 攻撃する。 連続で 当てると 威力が あがる。"
},
"steelWing": {
"name": "はがねのつばさ",
- "effect": "硬い 翼を 相手に たたきつけて 攻撃する。 自分の 防御が あがることが ある。"
+ "effect": "硬い 翼を 相手に たたきつけて 攻撃する。 自分の 防御が あがることが ある。"
},
"meanLook": {
"name": "くろいまなざし",
- "effect": "吸いこまれるような 黒い まなざしで じっと みつめて 相手を 戦闘から 逃げられなくする。"
+ "effect": "吸いこまれるような 黒い まなざしで じっと みつめて 相手を 戦闘から 逃げられなくする。"
},
"attract": {
"name": "メロメロ",
- "effect": "♂なら♀を ♀なら♂を 誘惑して メロメロに する。 相手は 技が だしにくくなる。"
+ "effect": "♂なら♀を ♀なら♂を 誘惑して メロメロに する。 相手は 技が だしにくくなる。"
},
"sleepTalk": {
"name": "ねごと",
- "effect": "自分が おぼえている 技の うち どれか 1つを くりだす。 自分が 寝ているときだけ 使える。"
+ "effect": "自分が おぼえている 技の うち どれか 1つを くりだす。 自分が 寝ているときだけ 使える。"
},
"healBell": {
"name": "いやしのすず",
- "effect": "心地好い 鈴の 音色を 聞かせて 味方 全員の 状態異常を 回復 する。"
+ "effect": "心地好い 鈴の 音色を 聞かせて 味方 全員の 状態異常を 回復 する。"
},
"return": {
"name": "おんがえし",
- "effect": "トレーナーの ために 全力で 相手を 攻撃する。 なついているほど 威力は あがる。"
+ "effect": "トレーナーの ために 全力で 相手を 攻撃する。 なついているほど 威力は あがる。"
},
"present": {
"name": "プレゼント",
- "effect": "わなを しかけた 箱を 相手に わたして 攻撃する。HPが 回復して しまうことも ある。"
+ "effect": "わなを しかけた 箱を 相手に わたして 攻撃する。HPが 回復して しまうことも ある。"
},
"frustration": {
"name": "やつあたり",
- "effect": "不満を はらすため 全力で 相手を 攻撃する。 なついていないほど 威力は あがる。"
+ "effect": "不満を はらすため 全力で 相手を 攻撃する。 なついていないほど 威力は あがる。"
},
"safeguard": {
"name": "しんぴのまもり",
- "effect": "5ターンの 間 不思議な 力に 守られて 状態異常に ならなくなる。"
+ "effect": "5ターンの 間 不思議な 力に 守られて 状態異常に ならなくなる。"
},
"painSplit": {
"name": "いたみわけ",
- "effect": "自分の HPと 相手の HPを あわせて それを 自分と 相手で なかよく わける。"
+ "effect": "自分の HPと 相手の HPを あわせて それを 自分と 相手で なかよく わける。"
},
"sacredFire": {
"name": "せいなるほのお",
- "effect": "神秘の 炎で 相手を 焼きつくして 攻撃する。 やけど状態に することが ある。"
+ "effect": "神秘の 炎で 相手を 焼きつくして 攻撃する。 やけど状態に することが ある。"
},
"magnitude": {
"name": "マグニチュード",
- "effect": "地面を 揺らして 自分の 周りに いるものを 攻撃する。 技の 威力は いろいろ 変わる。"
+ "effect": "地面を 揺らして 自分の 周りに いるものを 攻撃する。 技の 威力は いろいろ 変わる。"
},
"dynamicPunch": {
"name": "ばくれつパンチ",
- "effect": "こん身の 力で パンチを くりだして 攻撃する。 相手を 必ず 混乱させる。"
+ "effect": "こん身の 力で パンチを くりだして 攻撃する。 相手を 必ず 混乱させる。"
},
"megahorn": {
"name": "メガホーン",
- "effect": "硬くて りっぱな つので おもいっきり 相手を 突き刺して 攻撃する。"
+ "effect": "硬くて りっぱな つので おもいっきり 相手を 突き刺して 攻撃する。"
},
"dragonBreath": {
"name": "りゅうのいぶき",
- "effect": "ものすごい 息を 相手に 吹きつけて 攻撃する。 まひ状態に することが ある。"
+ "effect": "ものすごい 息を 相手に 吹きつけて 攻撃する。 まひ状態に することが ある。"
},
"batonPass": {
"name": "バトンタッチ",
- "effect": "控えの ポケモンと 入れ替わる。 能力変化は 替わった ポケモンが そのまま 受けつぐ。"
+ "effect": "控えの ポケモンと 入れ替わる。 能力変化は 替わった ポケモンが そのまま 受けつぐ。"
},
"encore": {
"name": "アンコール",
- "effect": "相手に アンコールした 技を 3回 続けて 出させる。"
+ "effect": "相手に アンコールした 技を 3回 続けて 出させる。"
},
"pursuit": {
"name": "おいうち",
- "effect": "相手 ポケモンが 入れ替わるときに 技を だしていると 倍の 威力で 攻撃できる。"
+ "effect": "相手 ポケモンが 入れ替わるときに 技を だしていると 倍の 威力で 攻撃できる。"
},
"rapidSpin": {
"name": "こうそくスピン",
- "effect": "回転して 相手を 攻撃する。 しめつける まきつく やどりぎのタネ など 吹きとばす。自分の 素早さも あがる。"
+ "effect": "回転して 相手を 攻撃する。 しめつける まきつく やどりぎのタネ など 吹きとばす。自分の 素早さも あがる。"
},
"sweetScent": {
"name": "あまいかおり",
- "effect": "香りで 相手の 回避率を がくっと さげる。"
+ "effect": "香りで 相手の 回避率を がくっと さげる。"
},
"ironTail": {
"name": "アイアンテール",
- "effect": "硬い しっぽで 相手を たたきつけて 攻撃する。 相手の 防御を さげることが ある。"
+ "effect": "硬い しっぽで 相手を たたきつけて 攻撃する。 相手の 防御を さげることが ある。"
},
"metalClaw": {
"name": "メタルクロー",
- "effect": "鋼鉄の ツメで 相手を 切り裂いて 攻撃する。 自分の 攻撃が あがることが ある。"
+ "effect": "鋼鉄の ツメで 相手を 切り裂いて 攻撃する。 自分の 攻撃が あがることが ある。"
},
"vitalThrow": {
"name": "あてみなげ",
- "effect": "相手より あとに 攻撃する。 そのかわり 自分の 攻撃は 必ず 命中する。"
+ "effect": "相手より あとに 攻撃する。 そのかわり 自分の 攻撃は 必ず 命中する。"
},
"morningSun": {
"name": "あさのひざし",
- "effect": "自分の HPを 回復する。 天気に よって 回復の 量が 変化する。"
+ "effect": "自分の HPを 回復する。 天気に よって 回復の 量が 変化する。"
},
"synthesis": {
"name": "こうごうせい",
- "effect": "自分の HPを 回復する。 天気に よって 回復の 量が 変化する。"
+ "effect": "自分の HPを 回復する。 天気に よって 回復の 量が 変化する。"
},
"moonlight": {
"name": "つきのひかり",
- "effect": "自分の HPを 回復する。 天気に よって 回復の 量が 変化する。"
+ "effect": "自分の HPを 回復する。 天気に よって 回復の 量が 変化する。"
},
"hiddenPower": {
"name": "めざめるパワー",
- "effect": "技を 使った ポケモンに よって 技の タイプが 変わる。"
+ "effect": "技を 使った ポケモンに よって 技の タイプが 変わる。"
},
"crossChop": {
"name": "クロスチョップ",
- "effect": "両手チョップを 相手に たたきつけて 攻撃する。 急所に 当たりやすい。"
+ "effect": "両手チョップを 相手に たたきつけて 攻撃する。 急所に 当たりやすい。"
},
"twister": {
"name": "たつまき",
- "effect": "竜巻を おこして 相手を まきこみ 攻撃する。 相手を ひるませることが ある。"
+ "effect": "竜巻を おこして 相手を まきこみ 攻撃する。 相手を ひるませることが ある。"
},
"rainDance": {
"name": "あまごい",
- "effect": "5ターンの 間 雨を 降らせて みずタイプの 威力を あげる。 ほのおタイプの 威力は さがる。"
+ "effect": "5ターンの 間 雨を 降らせて みずタイプの 威力を あげる。 ほのおタイプの 威力は さがる。"
},
"sunnyDay": {
"name": "にほんばれ",
- "effect": "5ターンの 間 日差しを 強くして ほのおタイプの 威力を あげる。 みずタイプの 威力は さがる。"
+ "effect": "5ターンの 間 日差しを 強くして ほのおタイプの 威力を あげる。 みずタイプの 威力は さがる。"
},
"crunch": {
"name": "かみくだく",
- "effect": "鋭い 歯で 相手を かみくだいて 攻撃する。 相手の 防御を さげることが ある。"
+ "effect": "鋭い 歯で 相手を かみくだいて 攻撃する。 相手の 防御を さげることが ある。"
},
"mirrorCoat": {
"name": "ミラーコート",
- "effect": "相手から 受けた 特殊攻撃の ダメージを 2倍に して その相手に 返す。"
+ "effect": "相手から 受けた 特殊攻撃の ダメージを 2倍に して その相手に 返す。"
},
"psychUp": {
"name": "じこあんじ",
- "effect": "自分に 暗示を かけることで 能力変化の 状態を 相手と 同じにする。"
+ "effect": "自分に 暗示を かけることで 能力変化の 状態を 相手と 同じにする。"
},
"extremeSpeed": {
"name": "しんそく",
- "effect": "目にも 留まらぬ ものすごい 速さで 相手に 突進して 攻撃する。 必ず 先制攻撃 できる。"
+ "effect": "目にも 留まらぬ ものすごい 速さで 相手に 突進して 攻撃する。 必ず 先制攻撃 できる。"
},
"ancientPower": {
"name": "げんしのちから",
- "effect": "原始の 力で 攻撃する。 自分の すべての 能力が あがることが ある。"
+ "effect": "原始の 力で 攻撃する。 自分の すべての 能力が あがることが ある。"
},
"shadowBall": {
"name": "シャドーボール",
- "effect": "黒い影の 塊を 投げつけて 攻撃する。 相手の 特防を さげることが ある。"
+ "effect": "黒い影の 塊を 投げつけて 攻撃する。 相手の 特防を さげることが ある。"
},
"futureSight": {
"name": "みらいよち",
- "effect": "技を 使った 2ターン後に 相手に 念力の 塊を 送って 攻撃する。"
+ "effect": "技を 使った 2ターン後に 相手に 念力の 塊を 送って 攻撃する。"
},
"rockSmash": {
"name": "いわくだき",
- "effect": "パンチで 攻撃する。相手の 防御を さげる ことが ある。"
+ "effect": "パンチで 攻撃する。相手の 防御を さげる ことが ある。"
},
"whirlpool": {
"name": "うずしお",
- "effect": "激しく 渦をまく 水の中に 4ー5ターンの 間 相手を 閉じこめて 攻撃する。"
+ "effect": "激しく 渦をまく 水の中に 4ー5ターンの 間 相手を 閉じこめて 攻撃する。"
},
"beatUp": {
"name": "ふくろだたき",
- "effect": "味方 全員で 攻撃する。 仲間の ポケモンが 多いほど 技の 攻撃回数が 増える。"
+ "effect": "味方 全員で 攻撃する。 仲間の ポケモンが 多いほど 技の 攻撃回数が 増える。"
},
"fakeOut": {
"name": "ねこだまし",
- "effect": "先制攻撃で 相手を ひるませる。 戦闘に でたら すぐに ださないと 成功しない。"
+ "effect": "先制攻撃で 相手を ひるませる。 戦闘に でたら すぐに ださないと 成功しない。"
},
"uproar": {
"name": "さわぐ",
- "effect": "3ターンの 間 騒いで 相手を 攻撃する。 そのあいだは だれも 眠れなくなる。"
+ "effect": "3ターンの 間 騒いで 相手を 攻撃する。 そのあいだは だれも 眠れなくなる。"
},
"stockpile": {
"name": "たくわえる",
- "effect": "力を 蓄えて 自分の 防御と 特防を あげる。 最大 3回まで 蓄えられる。"
+ "effect": "力を 蓄えて 自分の 防御と 特防を あげる。 最大 3回まで 蓄えられる。"
},
"spitUp": {
"name": "はきだす",
- "effect": "蓄えた 力を 相手に ぶつけて 攻撃する。 蓄えているほど 威力が あがる。"
+ "effect": "蓄えた 力を 相手に ぶつけて 攻撃する。 蓄えているほど 威力が あがる。"
},
"swallow": {
"name": "のみこむ",
- "effect": "蓄えた 力を のみこんで 自分の HPを 回復する。 蓄えているほど 回復する。"
+ "effect": "蓄えた 力を のみこんで 自分の HPを 回復する。 蓄えているほど 回復する。"
},
"heatWave": {
"name": "ねっぷう",
- "effect": "熱い 息を 相手に 吹きつけて 攻撃する。 やけど状態に することが ある。"
+ "effect": "熱い 息を 相手に 吹きつけて 攻撃する。 やけど状態に することが ある。"
},
"hail": {
"name": "あられ",
- "effect": "5ターンの 間 あられを 降らして こおりタイプで ない ポケモン 全員に ダメージを 与える。"
+ "effect": "5ターンの 間 あられを 降らして こおりタイプで ない ポケモン 全員に ダメージを 与える。"
},
"torment": {
"name": "いちゃもん",
- "effect": "相手に いちゃもんを つけて 同じ 技を 2回連続で だせなくする。"
+ "effect": "相手に いちゃもんを つけて 同じ 技を 2回連続で だせなくする。"
},
"flatter": {
"name": "おだてる",
- "effect": "相手を おだてて 混乱させる。 同時に 相手の 特攻も あげてしまう。"
+ "effect": "相手を おだてて 混乱させる。 同時に 相手の 特攻も あげてしまう。"
},
"willOWisp": {
"name": "おにび",
- "effect": "不気味で 怪しい 炎を 放って 相手を やけどの 状態に する。"
+ "effect": "不気味で 怪しい 炎を 放って 相手を やけどの 状態に する。"
},
"memento": {
"name": "おきみやげ",
- "effect": "自分は ひんしに なるが そのかわりに 相手の 攻撃と 特攻を がくっと さげる。"
+ "effect": "自分は ひんしに なるが そのかわりに 相手の 攻撃と 特攻を がくっと さげる。"
},
"facade": {
"name": "からげんき",
- "effect": "自分が 毒 まひ やけど 状態のとき 相手に くりだすと 技の 威力が 2倍に なる。"
+ "effect": "自分が 毒 まひ やけど 状態のとき 相手に くりだすと 技の 威力が 2倍に なる。"
},
"focusPunch": {
"name": "きあいパンチ",
- "effect": "精神を 高めて パンチを くりだす。 技を だすまでに 攻撃を 受けると 失敗する。"
+ "effect": "精神を 高めて パンチを くりだす。 技を だすまでに 攻撃を 受けると 失敗する。"
},
"smellingSalts": {
"name": "きつけ",
- "effect": "まひ状態の 相手には 威力が 2倍に なるが かわりに 相手の まひが 治る。"
+ "effect": "まひ状態の 相手には 威力が 2倍に なるが かわりに 相手の まひが 治る。"
},
"followMe": {
"name": "このゆびとまれ",
- "effect": "自分に 注目させて 相手からの 攻撃を すべて 自分に むけさせる。"
+ "effect": "自分に 注目させて 相手からの 攻撃を すべて 自分に むけさせる。"
},
"naturePower": {
"name": "しぜんのちから",
- "effect": "自然の 力で 攻撃する。 使う 場所で でてくる 技が 変化する。"
+ "effect": "自然の 力で 攻撃する。 使う 場所で でてくる 技が 変化する。"
},
"charge": {
"name": "じゅうでん",
- "effect": "次の ターンに だす でんきタイプの 技の 威力を あげる。 自分の 特防も あがる。"
+ "effect": "次の ターンに だす でんきタイプの 技の 威力を あげる。 自分の 特防も あがる。"
},
"taunt": {
"name": "ちょうはつ",
- "effect": "相手を 怒らせる。 3ターンの 間 相手は ダメージを 与える 技しか だせなくなる。"
+ "effect": "相手を 怒らせる。 3ターンの 間 相手は ダメージを 与える 技しか だせなくなる。"
},
"helpingHand": {
"name": "てだすけ",
- "effect": "仲間を 助ける。 てだすけ された ポケモンの 技の 威力は いつもより 大きくなる。"
+ "effect": "仲間を 助ける。 てだすけ された ポケモンの 技の 威力は いつもより 大きくなる。"
},
"trick": {
"name": "トリック",
- "effect": "相手の すきを ついて 自分と 相手の 持ち物を 交換する。"
+ "effect": "相手の すきを ついて 自分と 相手の 持ち物を 交換する。"
},
"rolePlay": {
"name": "なりきり",
- "effect": "相手に なりきって 自分も 相手と 同じ 特性に 変化する。"
+ "effect": "相手に なりきって 自分も 相手と 同じ 特性に 変化する。"
},
"wish": {
"name": "ねがいごと",
- "effect": "次の ターンに 自分 もしくは 入れ替わった ポケモンの HPを 最大HPの 半分 回復する。"
+ "effect": "次の ターンに 自分 もしくは 入れ替わった ポケモンの HPを 最大HPの 半分 回復する。"
},
"assist": {
"name": "ねこのて",
- "effect": "大急ぎで 味方の 助けを かりて 味方の ポケモンが おぼえている 技を どれか 1つ 使う。"
+ "effect": "大急ぎで 味方の 助けを かりて 味方の ポケモンが おぼえている 技を どれか 1つ 使う。"
},
"ingrain": {
"name": "ねをはる",
- "effect": "大地に 根を 張り 毎ターン 自分の HPを 回復する。 根を 張っているので 入れ替えられない。"
+ "effect": "大地に 根を 張り 毎ターン 自分の HPを 回復する。 根を 張っているので 入れ替えられない。"
},
"superpower": {
"name": "ばかぢから",
- "effect": "すごい 力を 発揮して 相手を 攻撃する。自分の 攻撃と 防御が さがる。"
+ "effect": "すごい 力を 発揮して 相手を 攻撃する。自分の 攻撃と 防御が さがる。"
},
"magicCoat": {
"name": "マジックコート",
- "effect": "状態異常に なる 技や やどりぎのタネ などを だされたとき 相手に 跳ね返す。"
+ "effect": "状態異常に なる 技や やどりぎのタネ などを だされたとき 相手に 跳ね返す。"
},
"recycle": {
"name": "リサイクル",
- "effect": "戦闘中に 使って なくなった 自分の 持ち物を 再生させて 使えるように する。"
+ "effect": "戦闘中に 使って なくなった 自分の 持ち物を 再生させて 使えるように する。"
},
"revenge": {
"name": "リベンジ",
- "effect": "相手から 技を 受けていると その相手に 対して 与える ダメージが 2倍に なる。"
+ "effect": "相手から 技を 受けていると その相手に 対して 与える ダメージが 2倍に なる。"
},
"brickBreak": {
"name": "かわらわり",
- "effect": "手刀を 勢いよく 振りおろして 相手を 攻撃する。 ひかりのかべや リフレクター なども 破壊できる。"
+ "effect": "手刀を 勢いよく 振りおろして 相手を 攻撃する。 ひかりのかべや リフレクター なども 破壊できる。"
},
"yawn": {
"name": "あくび",
- "effect": "大きな あくびで 眠気を 誘う。 次の ターンに 相手を 眠り状態に する。"
+ "effect": "大きな あくびで 眠気を 誘う。 次の ターンに 相手を 眠り状態に する。"
},
"knockOff": {
"name": "はたきおとす",
- "effect": "相手の 持ち物を はたき 落として 戦闘が 終わるまで 使えなくする。 物を持つ 相手には ダメージが増す。"
+ "effect": "相手の 持ち物を はたき 落として 戦闘が 終わるまで 使えなくする。 物を持つ 相手には ダメージが増す。"
},
"endeavor": {
"name": "がむしゃら",
- "effect": "相手の HPが 自分の HPと 同じくらいに なるように ダメージを 与える。"
+ "effect": "相手の HPが 自分の HPと 同じくらいに なるように ダメージを 与える。"
},
"eruption": {
"name": "ふんか",
- "effect": "怒りを 爆発させて 相手を 攻撃する。 自分の HPが 少ないほど 技の 威力は さがる。"
+ "effect": "怒りを 爆発させて 相手を 攻撃する。 自分の HPが 少ないほど 技の 威力は さがる。"
},
"skillSwap": {
"name": "スキルスワップ",
- "effect": "超能力で 自分の 特性と 相手の 特性を 入れ替える。"
+ "effect": "超能力で 自分の 特性と 相手の 特性を 入れ替える。"
},
"imprison": {
"name": "ふういん",
- "effect": "相手が 自分と 同じ 技を おぼえていたら 相手だけ その技を 使えなくする。"
+ "effect": "相手が 自分と 同じ 技を おぼえていたら 相手だけ その技を 使えなくする。"
},
"refresh": {
"name": "リフレッシュ",
- "effect": "体を やすめて 自分が おっている 毒 まひ やけどの 状態異常を 治す。"
+ "effect": "体を やすめて 自分が おっている 毒 まひ やけどの 状態異常を 治す。"
},
"grudge": {
"name": "おんねん",
- "effect": "相手の 技で ひんしに されたとき おんねんを かけて その技の PPを 0に する。"
+ "effect": "相手の 技で ひんしに されたとき おんねんを かけて その技の PPを 0に する。"
},
"snatch": {
"name": "よこどり",
- "effect": "相手が 使おうと した 回復技や 能力変化の 技を うばって 自分に 使う。"
+ "effect": "相手が 使おうと した 回復技や 能力変化の 技を うばって 自分に 使う。"
},
"secretPower": {
"name": "ひみつのちから",
- "effect": "使う場所で 追加効果が 変化する 攻撃。"
+ "effect": "使う場所で 追加効果が 変化する 攻撃。"
},
"dive": {
"name": "ダイビング",
- "effect": "1ターン目で 潜り 2ターン目に 浮きあがって 攻撃する。"
+ "effect": "1ターン目で 潜り 2ターン目に 浮きあがって 攻撃する。"
},
"armThrust": {
"name": "つっぱり",
- "effect": "ひらいた 両手で 相手を つっぱって 攻撃する。 2ー5回の 間 連続で だす。"
+ "effect": "ひらいた 両手で 相手を つっぱって 攻撃する。 2ー5回の 間 連続で だす。"
},
"camouflage": {
"name": "ほごしょく",
- "effect": "水辺や 草むら どうくつなど いる 場所に あわせて 自分の タイプを 変える。"
+ "effect": "水辺や 草むら どうくつなど いる 場所に あわせて 自分の タイプを 変える。"
},
"tailGlow": {
"name": "ほたるび",
- "effect": "点滅する 光を 眺めて 自分の 精神を 統一し 特攻を ぐぐーんと あげる。"
+ "effect": "点滅する 光を 眺めて 自分の 精神を 統一し 特攻を ぐぐーんと あげる。"
},
"lusterPurge": {
"name": "ラスターパージ",
- "effect": "まばゆい 光を 解放して 攻撃する。 相手の 特防を さげることが ある。"
+ "effect": "まばゆい 光を 解放して 攻撃する。 相手の 特防を さげることが ある。"
},
"mistBall": {
"name": "ミストボール",
- "effect": "霧状の 羽毛で 包みこみ 攻撃する。 相手の 特攻を さげることが ある。"
+ "effect": "霧状の 羽毛で 包みこみ 攻撃する。 相手の 特攻を さげることが ある。"
},
"featherDance": {
"name": "フェザーダンス",
- "effect": "羽毛を ふりまいて 相手の 体に からませる。 相手の 攻撃を がくっと さげる。"
+ "effect": "羽毛を ふりまいて 相手の 体に からませる。 相手の 攻撃を がくっと さげる。"
},
"teeterDance": {
"name": "フラフラダンス",
- "effect": "フラフラと ダンスを おどって 自分の 周りに いるものを 混乱状態に させる。"
+ "effect": "フラフラと ダンスを おどって 自分の 周りに いるものを 混乱状態に させる。"
},
"blazeKick": {
"name": "ブレイズキック",
- "effect": "攻撃した 相手を やけど状態に することが ある。 急所にも 当たりやすい。"
+ "effect": "攻撃した 相手を やけど状態に することが ある。 急所にも 当たりやすい。"
},
"mudSport": {
"name": "どろあそび",
- "effect": "あたりを 泥まみれにする。 5ターンの 間 でんきタイプの 技を 弱める。"
+ "effect": "あたりを 泥まみれにする。 5ターンの 間 でんきタイプの 技を 弱める。"
},
"iceBall": {
"name": "アイスボール",
- "effect": "5ターンの 間 相手を 攻撃する。 技が 当たるたび 威力が あがる。"
+ "effect": "5ターンの 間 相手を 攻撃する。 技が 当たるたび 威力が あがる。"
},
"needleArm": {
"name": "ニードルアーム",
- "effect": "トゲの 腕を 激しく ふるって 攻撃する。 相手を ひるませることが ある。"
+ "effect": "トゲの 腕を 激しく ふるって 攻撃する。 相手を ひるませることが ある。"
},
"slackOff": {
"name": "なまける",
- "effect": "怠けて やすむ。 自分の HPを 最大HPの 半分 回復する。"
+ "effect": "怠けて やすむ。 自分の HPを 最大HPの 半分 回復する。"
},
"hyperVoice": {
"name": "ハイパーボイス",
- "effect": "うるさく 響く 大きな 振動を 相手に 与えて 攻撃する。"
+ "effect": "うるさく 響く 大きな 振動を 相手に 与えて 攻撃する。"
},
"poisonFang": {
"name": "どくどくのキバ",
- "effect": "毒の ある キバで 相手に かみついて 攻撃する。 猛毒を おわせる ことが ある。"
+ "effect": "毒の ある キバで 相手に かみついて 攻撃する。 猛毒を おわせる ことが ある。"
},
"crushClaw": {
"name": "ブレイククロー",
- "effect": "硬く 鋭い ツメで 切り裂いて 攻撃する。 相手の 防御を さげることが ある。"
+ "effect": "硬く 鋭い ツメで 切り裂いて 攻撃する。 相手の 防御を さげることが ある。"
},
"blastBurn": {
"name": "ブラストバーン",
- "effect": "爆発の 炎で 相手を 焼きつくして 攻撃する。 次の ターンは 動けなくなる。"
+ "effect": "爆発の 炎で 相手を 焼きつくして 攻撃する。 次の ターンは 動けなくなる。"
},
"hydroCannon": {
"name": "ハイドロカノン",
- "effect": "水の 大砲を 相手に 発射して 攻撃する。 次の ターンは 動けなくなる。"
+ "effect": "水の 大砲を 相手に 発射して 攻撃する。 次の ターンは 動けなくなる。"
},
"meteorMash": {
"name": "コメットパンチ",
- "effect": "すい星の ごとく パンチを くりだして 相手を 攻撃する。 自分の 攻撃が あがることが ある。"
+ "effect": "すい星の ごとく パンチを くりだして 相手を 攻撃する。 自分の 攻撃が あがることが ある。"
},
"astonish": {
"name": "おどろかす",
- "effect": "大きな 声などで 不意に 驚かして 攻撃する。 相手を ひるませることが ある。"
+ "effect": "大きな 声などで 不意に 驚かして 攻撃する。 相手を ひるませることが ある。"
},
"weatherBall": {
"name": "ウェザーボール",
- "effect": "使ったときの 天気に よって 技の タイプと 威力が 変わる。"
+ "effect": "使ったときの 天気に よって 技の タイプと 威力が 変わる。"
},
"aromatherapy": {
"name": "アロマセラピー",
- "effect": "心地好い やすらぐ 香りを かがせて 味方全員の 状態異常を 回復する。"
+ "effect": "心地好い やすらぐ 香りを かがせて 味方全員の 状態異常を 回復する。"
},
"fakeTears": {
"name": "うそなき",
- "effect": "ないた ふりをして 涙を 流す。 こまらせる ことで 相手の 特防を がくっと さげる。"
+ "effect": "ないた ふりをして 涙を 流す。 こまらせる ことで 相手の 特防を がくっと さげる。"
},
"airCutter": {
"name": "エアカッター",
- "effect": "鋭い 風で 相手を 切りつけて 攻撃する。 急所に 当たりやすい。"
+ "effect": "鋭い 風で 相手を 切りつけて 攻撃する。 急所に 当たりやすい。"
},
"overheat": {
"name": "オーバーヒート",
- "effect": "フルパワーで 相手を 攻撃する。 使うと 反動で 自分の 特攻が がくっと さがる。"
+ "effect": "フルパワーで 相手を 攻撃する。 使うと 反動で 自分の 特攻が がくっと さがる。"
},
"odorSleuth": {
"name": "かぎわける",
- "effect": "ゴーストタイプに 効果がない 技や 回避率の 高い 相手に 攻撃が 当たるように なる。"
+ "effect": "ゴーストタイプに 効果がない 技や 回避率の 高い 相手に 攻撃が 当たるように なる。"
},
"rockTomb": {
"name": "がんせきふうじ",
- "effect": "岩石を 投げつけて 攻撃する。 相手の 動きを 封じることで 素早さを さげる。"
+ "effect": "岩石を 投げつけて 攻撃する。 相手の 動きを 封じることで 素早さを さげる。"
},
"silverWind": {
"name": "ぎんいろのかぜ",
- "effect": "風に りんぷんを のせて 相手を 攻撃する。自分の すべての 能力が あがることが ある。"
+ "effect": "風に りんぷんを のせて 相手を 攻撃する。自分の すべての 能力が あがることが ある。"
},
"metalSound": {
"name": "きんぞくおん",
- "effect": "金属を こすって でるような いやな 音を 聞かせる。 相手の 特防を がくっと さげる。"
+ "effect": "金属を こすって でるような いやな 音を 聞かせる。 相手の 特防を がくっと さげる。"
},
"grassWhistle": {
"name": "くさぶえ",
- "effect": "心地好い 笛の 音色を 聞かせて 相手を 眠りの 状態に する。"
+ "effect": "心地好い 笛の 音色を 聞かせて 相手を 眠りの 状態に する。"
},
"tickle": {
"name": "くすぐる",
- "effect": "体を くすぐり 笑わせる ことで 相手の 攻撃と 防御を さげる。"
+ "effect": "体を くすぐり 笑わせる ことで 相手の 攻撃と 防御を さげる。"
},
"cosmicPower": {
"name": "コスモパワー",
- "effect": "宇宙から 神秘の 力を とりこむ ことで 自分の 防御と 特防を あげる。"
+ "effect": "宇宙から 神秘の 力を とりこむ ことで 自分の 防御と 特防を あげる。"
},
"waterSpout": {
"name": "しおふき",
- "effect": "潮を 吹きつけて 攻撃する。 自分の HPが 少ないほど 技の 威力は さがる。"
+ "effect": "潮を 吹きつけて 攻撃する。 自分の HPが 少ないほど 技の 威力は さがる。"
},
"signalBeam": {
"name": "シグナルビーム",
- "effect": "不思議な 光を 発射して 攻撃する。 相手を 混乱させることが ある。"
+ "effect": "不思議な 光を 発射して 攻撃する。 相手を 混乱させることが ある。"
},
"shadowPunch": {
"name": "シャドーパンチ",
- "effect": "影に まぎれて パンチを くりだす。 攻撃は 必ず 命中する。"
+ "effect": "影に まぎれて パンチを くりだす。 攻撃は 必ず 命中する。"
},
"extrasensory": {
"name": "じんつうりき",
- "effect": "みえない 不思議な 力を 送って 攻撃する。 相手を ひるませることが ある。"
+ "effect": "みえない 不思議な 力を 送って 攻撃する。 相手を ひるませることが ある。"
},
"skyUppercut": {
"name": "スカイアッパー",
- "effect": "空に むかうような 高い アッパーで 相手を 突きあげて 攻撃する。"
+ "effect": "空に むかうような 高い アッパーで 相手を 突きあげて 攻撃する。"
},
"sandTomb": {
"name": "すなじごく",
- "effect": "激しく 吹きあれる 砂あらしの 中に 4ー5ターンの 間 相手を 閉じこめて 攻撃する。"
+ "effect": "激しく 吹きあれる 砂あらしの 中に 4ー5ターンの 間 相手を 閉じこめて 攻撃する。"
},
"sheerCold": {
"name": "ぜったいれいど",
- "effect": "相手を 一撃で 瀕死に する。 こおりタイプ 以外の ポケモンが 使うと 当たりにくい。"
+ "effect": "相手を 一撃で 瀕死に する。 こおりタイプ 以外の ポケモンが 使うと 当たりにくい。"
},
"muddyWater": {
"name": "だくりゅう",
- "effect": "濁った 水を 相手に 発射して 攻撃する。 命中率を さげることが ある。"
+ "effect": "濁った 水を 相手に 発射して 攻撃する。 命中率を さげることが ある。"
},
"bulletSeed": {
"name": "タネマシンガン",
- "effect": "タネを 勢いよく 相手に 発射して 攻撃する。 2ー5回の 間 連続で だす。"
+ "effect": "タネを 勢いよく 相手に 発射して 攻撃する。 2ー5回の 間 連続で だす。"
},
"aerialAce": {
"name": "つばめがえし",
- "effect": "素早い 動きで 相手を ほんろうして 切りつける。 攻撃は 必ず 命中する。"
+ "effect": "素早い 動きで 相手を ほんろうして 切りつける。 攻撃は 必ず 命中する。"
},
"icicleSpear": {
"name": "つららばり",
- "effect": "鋭い 氷柱を 相手に 発射して 攻撃する。 2ー5回の 間 連続で だす。"
+ "effect": "鋭い 氷柱を 相手に 発射して 攻撃する。 2ー5回の 間 連続で だす。"
},
"ironDefense": {
"name": "てっぺき",
- "effect": "皮膚を 鉄のように 硬くする ことで 自分の 防御を ぐーんと あげる。"
+ "effect": "皮膚を 鉄のように 硬くする ことで 自分の 防御を ぐーんと あげる。"
},
"block": {
"name": "とおせんぼう",
- "effect": "両手を ひろげて たちはだかり 相手の 逃げ道を ふさいで 逃げられなくする。"
+ "effect": "両手を ひろげて たちはだかり 相手の 逃げ道を ふさいで 逃げられなくする。"
},
"howl": {
"name": "とおぼえ",
- "effect": "大声で ほえて 気合を 高め 自分と 味方の 攻撃を あげる。"
+ "effect": "大声で ほえて 気合を 高め 自分と 味方の 攻撃を あげる。"
},
"dragonClaw": {
"name": "ドラゴンクロー",
- "effect": "鋭く とがった 巨大な ツメで 相手を 切り裂いて 攻撃する。"
+ "effect": "鋭く とがった 巨大な ツメで 相手を 切り裂いて 攻撃する。"
},
"frenzyPlant": {
"name": "ハードプラント",
- "effect": "大きな 樹木で 相手を たたきつけて 攻撃する。 次の ターンは 動けなくなる。"
+ "effect": "大きな 樹木で 相手を たたきつけて 攻撃する。 次の ターンは 動けなくなる。"
},
"bulkUp": {
"name": "ビルドアップ",
- "effect": "体に 力を こめて 筋肉を ぶあつく することで 自分の 攻撃と 防御を あげる。"
+ "effect": "体に 力を こめて 筋肉を ぶあつく することで 自分の 攻撃と 防御を あげる。"
},
"bounce": {
"name": "とびはねる",
- "effect": "空高く 飛び跳ねて 2ターン目に 相手を 攻撃する。 まひ状態に することが ある。"
+ "effect": "空高く 飛び跳ねて 2ターン目に 相手を 攻撃する。 まひ状態に することが ある。"
},
"mudShot": {
"name": "マッドショット",
- "effect": "泥の 塊を 相手に 投げつけて 攻撃する。 同時に 相手の 素早さを さげる。"
+ "effect": "泥の 塊を 相手に 投げつけて 攻撃する。 同時に 相手の 素早さを さげる。"
},
"poisonTail": {
"name": "ポイズンテール",
- "effect": "しっぽで たたく。 毒状態に することが あり 急所にも 当たりやすい。"
+ "effect": "しっぽで たたく。 毒状態に することが あり 急所にも 当たりやすい。"
},
"covet": {
"name": "ほしがる",
- "effect": "かわいく あまえながら 相手に ちかづき 持っている 道具を うばおうとする。 うばう 可能性は 30%。"
+ "effect": "かわいく あまえながら 相手に ちかづき 持っている 道具を うばおうとする。 うばう 可能性は 30%。"
},
"voltTackle": {
"name": "ボルテッカー",
- "effect": "電気を まとって 突進する。 自分も かなり ダメージを 受ける。 まひ状態に することが ある。"
+ "effect": "電気を まとって 突進する。 自分も かなり ダメージを 受ける。 まひ状態に することが ある。"
},
"magicalLeaf": {
"name": "マジカルリーフ",
- "effect": "相手を 追跡する 不思議な はっぱを まきちらす。 攻撃は 必ず 命中する。"
+ "effect": "相手を 追跡する 不思議な はっぱを まきちらす。 攻撃は 必ず 命中する。"
},
"waterSport": {
"name": "みずあそび",
- "effect": "あたりを 水で びしょびしょにする。 5ターンの 間 ほのおタイプの 技を 弱める。"
+ "effect": "あたりを 水で びしょびしょにする。 5ターンの 間 ほのおタイプの 技を 弱める。"
},
"calmMind": {
"name": "めいそう",
- "effect": "静かに 精神を 統一し 心を 鎮めることで 自分の 特攻と 特防を あげる。"
+ "effect": "静かに 精神を 統一し 心を 鎮めることで 自分の 特攻と 特防を あげる。"
},
"leafBlade": {
"name": "リーフブレード",
- "effect": "はっぱを 剣のように あやつり 相手を 切りつけて 攻撃する。 急所に 当たりやすい。"
+ "effect": "はっぱを 剣のように あやつり 相手を 切りつけて 攻撃する。 急所に 当たりやすい。"
},
"dragonDance": {
"name": "りゅうのまい",
- "effect": "神秘的で 力強い 舞を 激しく おどる。 自分の 攻撃と 素早さを あげる。"
+ "effect": "神秘的で 力強い 舞を 激しく おどる。 自分の 攻撃と 素早さを あげる。"
},
"rockBlast": {
"name": "ロックブラスト",
- "effect": "硬い 岩石を 相手に 発射して 攻撃する。 2ー5回の 間 連続で だす。"
+ "effect": "硬い 岩石を 相手に 発射して 攻撃する。 2ー5回の 間 連続で だす。"
},
"shockWave": {
"name": "でんげきは",
- "effect": "電撃を 素早く 相手に 浴びせる。 攻撃は 必ず 命中する。"
+ "effect": "電撃を 素早く 相手に 浴びせる。 攻撃は 必ず 命中する。"
},
"waterPulse": {
"name": "みずのはどう",
- "effect": "水の 振動を 相手に 与えて 攻撃する。 相手を 混乱させることが ある。"
+ "effect": "水の 振動を 相手に 与えて 攻撃する。 相手を 混乱させることが ある。"
},
"doomDesire": {
"name": "はめつのねがい",
- "effect": "技を 使った 2ターン後に 無数の 光の 束で 相手を 攻撃する。"
+ "effect": "技を 使った 2ターン後に 無数の 光の 束で 相手を 攻撃する。"
},
"psychoBoost": {
"name": "サイコブースト",
- "effect": "フルパワーで 相手を 攻撃する。 使うと 反動で 自分の 特攻が がくっと さがる。"
+ "effect": "フルパワーで 相手を 攻撃する。 使うと 反動で 自分の 特攻が がくっと さがる。"
},
"roost": {
"name": "はねやすめ",
- "effect": "地面に 降りて 体を やすめる。 最大HPの 半分の HPを 回復する。"
+ "effect": "地面に 降りて 体を やすめる。 最大HPの 半分の HPを 回復する。"
},
"gravity": {
"name": "じゅうりょく",
- "effect": "5ターンの間 ふゆうや ひこうタイプに じめんタイプの 技が 当たるようになる。 空中に 飛ぶ 技も 使えない。"
+ "effect": "5ターンの間 ふゆうや ひこうタイプに じめんタイプの 技が 当たるようになる。 空中に 飛ぶ 技も 使えない。"
},
"miracleEye": {
"name": "ミラクルアイ",
- "effect": "あくタイプに 効果がない 技や 回避率の 高い 相手に 攻撃が 当たるように なる。"
+ "effect": "あくタイプに 効果がない 技や 回避率の 高い 相手に 攻撃が 当たるように なる。"
},
"wakeUpSlap": {
"name": "めざましビンタ",
- "effect": "眠り状態の 相手に 大きな ダメージを 与える。 かわりに 相手は 眠りから さめる。"
+ "effect": "眠り状態の 相手に 大きな ダメージを 与える。 かわりに 相手は 眠りから さめる。"
},
"hammerArm": {
"name": "アームハンマー",
- "effect": "強くて 重い こぶしを ふるって ダメージを 与える。 自分の 素早さが さがる。"
+ "effect": "強くて 重い こぶしを ふるって ダメージを 与える。 自分の 素早さが さがる。"
},
"gyroBall": {
"name": "ジャイロボール",
- "effect": "体を 高速に 回転させて 体当たりする。相手より 素早さが 低いほど 強い。"
+ "effect": "体を 高速に 回転させて 体当たりする。相手より 素早さが 低いほど 強い。"
},
"healingWish": {
"name": "いやしのねがい",
- "effect": "自分は ひんしに なるが 控えから でてくる ポケモンの 状態異常と HPを 回復する。"
+ "effect": "自分は ひんしに なるが 控えから でてくる ポケモンの 状態異常と HPを 回復する。"
},
"brine": {
"name": "しおみず",
- "effect": "相手が HPの 半分くらい きずを おっていると 技の 威力が 2倍に なる。"
+ "effect": "相手が HPの 半分くらい きずを おっていると 技の 威力が 2倍に なる。"
},
"naturalGift": {
"name": "しぜんのめぐみ",
- "effect": "きのみから 力を もらい 攻撃する。持たせた きのみで 技の タイプと 威力が 変わる。"
+ "effect": "きのみから 力を もらい 攻撃する。持たせた きのみで 技の タイプと 威力が 変わる。"
},
"feint": {
"name": "フェイント",
- "effect": "まもるや みきり などを している 相手に 攻撃が できる。 守りの 効果を 解除させる。"
+ "effect": "まもるや みきり などを している 相手に 攻撃が できる。 守りの 効果を 解除させる。"
},
"pluck": {
"name": "ついばむ",
- "effect": "くちばしで 攻撃。 相手が きのみを 持っているとき 食べて きのみの 効果を 受けられる。"
+ "effect": "くちばしで 攻撃。 相手が きのみを 持っているとき 食べて きのみの 効果を 受けられる。"
},
"tailwind": {
"name": "おいかぜ",
- "effect": "激しく 吹きあれる 風の渦を つくり 4ターンの 間 味方 全員の 素早さを あげる。"
+ "effect": "激しく 吹きあれる 風の渦を つくり 4ターンの 間 味方 全員の 素早さを あげる。"
},
"acupressure": {
"name": "つぼをつく",
- "effect": "つぼおしで 体を 活性化させる。 能力の どれか 1つを ぐーんと あげる。"
+ "effect": "つぼおしで 体を 活性化させる。 能力の どれか 1つを ぐーんと あげる。"
},
"metalBurst": {
"name": "メタルバースト",
- "effect": "技を だす前に 最後に 受けた 技の ダメージを 大きくして だした 相手に 返す。"
+ "effect": "技を だす前に 最後に 受けた 技の ダメージを 大きくして だした 相手に 返す。"
},
"uTurn": {
"name": "とんぼがえり",
- "effect": "攻撃したあと ものすごい スピードで もどってきて 控えの ポケモンと 入れ替わる。"
+ "effect": "攻撃したあと ものすごい スピードで もどってきて 控えの ポケモンと 入れ替わる。"
},
"closeCombat": {
"name": "インファイト",
- "effect": "守りを 捨てて 相手の ふところに 突撃する。 自分の 防御と 特防が さがる。"
+ "effect": "守りを 捨てて 相手の ふところに 突撃する。 自分の 防御と 特防が さがる。"
},
"payback": {
"name": "しっぺがえし",
- "effect": "ためこんで 攻撃する。 相手より あとに 攻撃できると 技の 威力は 2倍に なる。"
+ "effect": "ためこんで 攻撃する。 相手より あとに 攻撃できると 技の 威力は 2倍に なる。"
},
"assurance": {
"name": "ダメおし",
- "effect": "そのターンに 相手が すでに ダメージを 受けていたら 技の 威力は 2倍に なる。"
+ "effect": "そのターンに 相手が すでに ダメージを 受けていたら 技の 威力は 2倍に なる。"
},
"embargo": {
"name": "さしおさえ",
- "effect": "持たせた 道具を 5ターンの 間 使えなくする。 トレーナーも その ポケモンには 道具を 使えない。"
+ "effect": "持たせた 道具を 5ターンの 間 使えなくする。 トレーナーも その ポケモンには 道具を 使えない。"
},
"fling": {
"name": "なげつける",
- "effect": "持たせた 道具を 素早く 投げつけて 攻撃する。 道具で 威力と 効果が 変わる。"
+ "effect": "持たせた 道具を 素早く 投げつけて 攻撃する。 道具で 威力と 効果が 変わる。"
},
"psychoShift": {
"name": "サイコシフト",
- "effect": "超能力で 暗示を かけて 自分の 受けている 状態異常を 相手に うつす。"
+ "effect": "超能力で 暗示を かけて 自分の 受けている 状態異常を 相手に うつす。"
},
"trumpCard": {
"name": "きりふだ",
- "effect": "きりふだの 残り PPが 少なければ 少ないほど 技の 威力が あがる。"
+ "effect": "きりふだの 残り PPが 少なければ 少ないほど 技の 威力が あがる。"
},
"healBlock": {
"name": "かいふくふうじ",
- "effect": "5ターンの 間 技や 特性や 持っている 道具によって HPを 回復 できなくする。"
+ "effect": "5ターンの 間 技や 特性や 持っている 道具によって HPを 回復 できなくする。"
},
"wringOut": {
"name": "しぼりとる",
- "effect": "強く 締めあげて 攻撃を する。 相手の HPが 残っているほど 威力は あがる。"
+ "effect": "強く 締めあげて 攻撃を する。 相手の HPが 残っているほど 威力は あがる。"
},
"powerTrick": {
"name": "パワートリック",
- "effect": "超能力で 自分の 攻撃と 防御の 力を 交換する。"
+ "effect": "超能力で 自分の 攻撃と 防御の 力を 交換する。"
},
"gastroAcid": {
"name": "いえき",
- "effect": "胃液を 相手の 体に 吐きつける。 ついた 胃液は 相手の 特性の 効果を 消す。"
+ "effect": "胃液を 相手の 体に 吐きつける。 ついた 胃液は 相手の 特性の 効果を 消す。"
},
"luckyChant": {
"name": "おまじない",
- "effect": "天に むかって おいのりを ささげ 5ターンの 間 相手の 攻撃を 急所に 当たらなくする。"
+ "effect": "天に むかって おいのりを ささげ 5ターンの 間 相手の 攻撃を 急所に 当たらなくする。"
},
"meFirst": {
"name": "さきどり",
- "effect": "威力を あげて 相手が だそうとする 技を 先にだす。 先に だせないと 失敗する。"
+ "effect": "威力を あげて 相手が だそうとする 技を 先にだす。 先に だせないと 失敗する。"
},
"copycat": {
"name": "まねっこ",
- "effect": "直前に でた 技を まねして 同じ 技を だす。 技が でていないと 失敗する。"
+ "effect": "直前に でた 技を まねして 同じ 技を だす。 技が でていないと 失敗する。"
},
"powerSwap": {
"name": "パワースワップ",
- "effect": "超能力で 自分と 相手の 攻撃と 特攻の 能力変化を 入れ替える。"
+ "effect": "超能力で 自分と 相手の 攻撃と 特攻の 能力変化を 入れ替える。"
},
"guardSwap": {
"name": "ガードスワップ",
- "effect": "超能力で 自分と 相手の 防御と 特防の 能力変化を 入れ替える。"
+ "effect": "超能力で 自分と 相手の 防御と 特防の 能力変化を 入れ替える。"
},
"punishment": {
"name": "おしおき",
- "effect": "能力変化で 相手が パワーアップ しているほど 技の 威力が あがる。"
+ "effect": "能力変化で 相手が パワーアップ しているほど 技の 威力が あがる。"
},
"lastResort": {
"name": "とっておき",
- "effect": "戦闘中に おぼえている 技を すべて 使うと はじめて だせる とっておきの 技。"
+ "effect": "戦闘中に おぼえている 技を すべて 使うと はじめて だせる とっておきの 技。"
},
"worrySeed": {
"name": "なやみのタネ",
- "effect": "心を なやませる タネを 植えつける。 相手を 眠れなくして 特性を ふみんに する。"
+ "effect": "心を なやませる タネを 植えつける。 相手を 眠れなくして 特性を ふみんに する。"
},
"suckerPunch": {
"name": "ふいうち",
- "effect": "相手より 先に 攻撃 できる。 相手が だす技が 攻撃技でないと 失敗する。"
+ "effect": "相手より 先に 攻撃 できる。 相手が だす技が 攻撃技でないと 失敗する。"
},
"toxicSpikes": {
"name": "どくびし",
- "effect": "相手の 足下に どくびしを しかける。 交代で でてきた 相手の ポケモンに 毒を おわせる。"
+ "effect": "相手の 足下に どくびしを しかける。 交代で でてきた 相手の ポケモンに 毒を おわせる。"
},
"heartSwap": {
"name": "ハートスワップ",
- "effect": "超能力で 自分と 相手に かかっている 能力変化を 入れ替える。"
+ "effect": "超能力で 自分と 相手に かかっている 能力変化を 入れ替える。"
},
"aquaRing": {
"name": "アクアリング",
- "effect": "自分の 体の 周りを 水で つくった ベールで おおう。 毎ターン HPを 回復する。"
+ "effect": "自分の 体の 周りを 水で つくった ベールで おおう。 毎ターン HPを 回復する。"
},
"magnetRise": {
"name": "でんじふゆう",
- "effect": "電気で つくった 磁力の 力で 宙に 浮かぶ。 5ターンの 間 浮遊できる。"
+ "effect": "電気で つくった 磁力の 力で 宙に 浮かぶ。 5ターンの 間 浮遊できる。"
},
"flareBlitz": {
"name": "フレアドライブ",
- "effect": "炎を まとって 突進する。 自分も かなり ダメージを 受ける。 やけど状態に することが ある。"
+ "effect": "炎を まとって 突進する。 自分も かなり ダメージを 受ける。 やけど状態に することが ある。"
},
"forcePalm": {
"name": "はっけい",
- "effect": "相手の 体に 衝撃波を 当てて 攻撃する。 まひ状態に することが ある。"
+ "effect": "相手の 体に 衝撃波を 当てて 攻撃する。 まひ状態に することが ある。"
},
"auraSphere": {
"name": "はどうだん",
- "effect": "体の 奥から 波導の 力を 相手に うち放つ。 攻撃は 必ず 命中する。"
+ "effect": "体の 奥から 波導の 力を 相手に うち放つ。 攻撃は 必ず 命中する。"
},
"rockPolish": {
"name": "ロックカット",
- "effect": "自分の 体を 磨いて 空気の 抵抗を 少なくする。素早さを ぐーんと あげることが できる。"
+ "effect": "自分の 体を 磨いて 空気の 抵抗を 少なくする。素早さを ぐーんと あげることが できる。"
},
"poisonJab": {
"name": "どくづき",
- "effect": "毒に そまった 触手や 腕で 相手を 突き刺す。 毒状態に することが ある。"
+ "effect": "毒に そまった 触手や 腕で 相手を 突き刺す。 毒状態に することが ある。"
},
"darkPulse": {
"name": "あくのはどう",
- "effect": "体から 悪意に みちた 恐ろしい オーラを 発する。 相手を ひるませることが ある。"
+ "effect": "体から 悪意に みちた 恐ろしい オーラを 発する。 相手を ひるませることが ある。"
},
"nightSlash": {
"name": "つじぎり",
- "effect": "一瞬の すきを ついて 相手を 切りはらう。 急所に 当たりやすい。"
+ "effect": "一瞬の すきを ついて 相手を 切りはらう。 急所に 当たりやすい。"
},
"aquaTail": {
"name": "アクアテール",
- "effect": "激しく あれくるう 荒波の ように 大きな しっぽを ふって 相手を 攻撃する。"
+ "effect": "激しく あれくるう 荒波の ように 大きな しっぽを ふって 相手を 攻撃する。"
},
"seedBomb": {
"name": "タネばくだん",
- "effect": "硬い 殻を もつ 大きな タネを 上から たたきつけて 相手を 攻撃する。"
+ "effect": "硬い 殻を もつ 大きな タネを 上から たたきつけて 相手を 攻撃する。"
},
"airSlash": {
"name": "エアスラッシュ",
- "effect": "空をも 切り裂く 空気の 刃で 攻撃する。 相手を ひるませることが ある。"
+ "effect": "空をも 切り裂く 空気の 刃で 攻撃する。 相手を ひるませることが ある。"
},
"xScissor": {
"name": "シザークロス",
- "effect": "カマや ツメを ハサミのように 交差させながら 相手を 切り裂く。"
+ "effect": "カマや ツメを ハサミのように 交差させながら 相手を 切り裂く。"
},
"bugBuzz": {
"name": "むしのさざめき",
- "effect": "振動で 音波を おこして 攻撃する。相手の 特防を さげることが ある。"
+ "effect": "振動で 音波を おこして 攻撃する。相手の 特防を さげることが ある。"
},
"dragonPulse": {
"name": "りゅうのはどう",
- "effect": "大きな 口から 衝撃波を まきおこして 相手を 攻撃する。"
+ "effect": "大きな 口から 衝撃波を まきおこして 相手を 攻撃する。"
},
"dragonRush": {
"name": "ドラゴンダイブ",
- "effect": "すさまじい 殺気で 威圧しながら 体当たりする。 相手を ひるませることが ある。"
+ "effect": "すさまじい 殺気で 威圧しながら 体当たりする。 相手を ひるませることが ある。"
},
"powerGem": {
"name": "パワージェム",
- "effect": "宝石のように きらめく 光を 発射して 相手を 攻撃する。"
+ "effect": "宝石のように きらめく 光を 発射して 相手を 攻撃する。"
},
"drainPunch": {
"name": "ドレインパンチ",
- "effect": "こぶしから 相手の 力を 吸い取る。 与えた ダメージの 半分の HPを 回復できる。"
+ "effect": "こぶしから 相手の 力を 吸い取る。 与えた ダメージの 半分の HPを 回復できる。"
},
"vacuumWave": {
"name": "しんくうは",
- "effect": "こぶしを ふって 真空の 波を まきおこす。 必ず 先制攻撃できる。"
+ "effect": "こぶしを ふって 真空の 波を まきおこす。 必ず 先制攻撃できる。"
},
"focusBlast": {
"name": "きあいだま",
- "effect": "気合を 高めて ありったけの 力を 放出する。 相手の 特防を さげることが ある。"
+ "effect": "気合を 高めて ありったけの 力を 放出する。 相手の 特防を さげることが ある。"
},
"energyBall": {
"name": "エナジーボール",
- "effect": "自然から 集めた 命の力を 発射する。 相手の 特防を さげることがある。"
+ "effect": "自然から 集めた 命の力を 発射する。 相手の 特防を さげることがある。"
},
"braveBird": {
"name": "ブレイブバード",
- "effect": "はねを おりたたみ 低空飛行で 突撃する。 自分も かなり ダメージを 受ける。"
+ "effect": "はねを おりたたみ 低空飛行で 突撃する。 自分も かなり ダメージを 受ける。"
},
"earthPower": {
"name": "だいちのちから",
- "effect": "相手の 足下へ 大地の力を 放出する。相手の 特防を さげることが ある。"
+ "effect": "相手の 足下へ 大地の力を 放出する。相手の 特防を さげることが ある。"
},
"switcheroo": {
"name": "すりかえ",
- "effect": "目にも とまらぬ 速さで 自分と 相手の 持ち物を 交換する。"
+ "effect": "目にも とまらぬ 速さで 自分と 相手の 持ち物を 交換する。"
},
"gigaImpact": {
"name": "ギガインパクト",
- "effect": "持てる 力を すべて 使って 相手に 突撃する。 次の ターンは 動けなくなる。"
+ "effect": "持てる 力を すべて 使って 相手に 突撃する。 次の ターンは 動けなくなる。"
},
"nastyPlot": {
"name": "わるだくみ",
- "effect": "悪いことを 考えて 頭を 活性化させる。 自分の 特攻を ぐーんと あげる。"
+ "effect": "悪いことを 考えて 頭を 活性化させる。 自分の 特攻を ぐーんと あげる。"
},
"bulletPunch": {
"name": "バレットパンチ",
- "effect": "弾丸の ような 速くて 硬い パンチを 相手に くりだす。 必ず 先制攻撃 できる。"
+ "effect": "弾丸の ような 速くて 硬い パンチを 相手に くりだす。 必ず 先制攻撃 できる。"
},
"avalanche": {
"name": "ゆきなだれ",
- "effect": "相手から 技を 受けていると その 相手に 対して 技の 威力が 2倍に なる。"
+ "effect": "相手から 技を 受けていると その 相手に 対して 技の 威力が 2倍に なる。"
},
"iceShard": {
"name": "こおりのつぶて",
- "effect": "氷の塊を 一瞬で つくり 相手に 素早く 放つ。 必ず 先制攻撃 できる。"
+ "effect": "氷の塊を 一瞬で つくり 相手に 素早く 放つ。 必ず 先制攻撃 できる。"
},
"shadowClaw": {
"name": "シャドークロー",
- "effect": "影から つくった 鋭い ツメで 相手を 切り裂く。 急所に 当たりやすい。"
+ "effect": "影から つくった 鋭い ツメで 相手を 切り裂く。 急所に 当たりやすい。"
},
"thunderFang": {
"name": "かみなりのキバ",
- "effect": "電気を ためた キバで かみつく。 相手を ひるませたり まひ状態に することが ある。"
+ "effect": "電気を ためた キバで かみつく。 相手を ひるませたり まひ状態に することが ある。"
},
"iceFang": {
"name": "こおりのキバ",
- "effect": "冷気を ひめた キバで かみつく。 相手を ひるませたり こおり状態に することが ある。"
+ "effect": "冷気を ひめた キバで かみつく。 相手を ひるませたり こおり状態に することが ある。"
},
"fireFang": {
"name": "ほのおのキバ",
- "effect": "炎を まとった キバで かみつく。 相手を ひるませたり やけど状態に することが ある。"
+ "effect": "炎を まとった キバで かみつく。 相手を ひるませたり やけど状態に することが ある。"
},
"shadowSneak": {
"name": "かげうち",
- "effect": "影を のばして 相手の 背後から 攻撃する。 必ず 先制攻撃 できる。"
+ "effect": "影を のばして 相手の 背後から 攻撃する。 必ず 先制攻撃 できる。"
},
"mudBomb": {
"name": "どろばくだん",
- "effect": "硬い 泥の 弾を 相手に 発射して 攻撃する。 命中率を さげることが ある。"
+ "effect": "硬い 泥の 弾を 相手に 発射して 攻撃する。 命中率を さげることが ある。"
},
"psychoCut": {
"name": "サイコカッター",
- "effect": "実体化させた 心の 刃で 相手を 切り裂く。 急所に 当たりやすい。"
+ "effect": "実体化させた 心の 刃で 相手を 切り裂く。 急所に 当たりやすい。"
},
"zenHeadbutt": {
"name": "しねんのずつき",
- "effect": "思念の 力を 額に 集めて 攻撃する。 相手を ひるませることが ある。"
+ "effect": "思念の 力を 額に 集めて 攻撃する。 相手を ひるませることが ある。"
},
"mirrorShot": {
"name": "ミラーショット",
- "effect": "磨きあげられた 体から せん光の 力を 相手に 放つ。 命中率を さげることが ある。"
+ "effect": "磨きあげられた 体から せん光の 力を 相手に 放つ。 命中率を さげることが ある。"
},
"flashCannon": {
"name": "ラスターカノン",
- "effect": "体の 光を 一点に 集めて 力を 放つ。 相手の 特防を さげることが ある。"
+ "effect": "体の 光を 一点に 集めて 力を 放つ。 相手の 特防を さげることが ある。"
},
"rockClimb": {
"name": "ロッククライム",
- "effect": "すごい 勢いで 相手に つっこみ 攻撃する。 相手を 混乱させることが ある。"
+ "effect": "すごい 勢いで 相手に つっこみ 攻撃する。 相手を 混乱させることが ある。"
},
"defog": {
"name": "きりばらい",
- "effect": "強い風で 相手の リフレクターや ひかりのかべ などを はらいのける。 回避率も さげる。"
+ "effect": "強い風で 相手の リフレクターや ひかりのかべ などを はらいのける。 回避率も さげる。"
},
"trickRoom": {
"name": "トリックルーム",
- "effect": "まか不思議な 空間を つくる。 5ターンの 間 遅い ポケモンから 行動できる。"
+ "effect": "まか不思議な 空間を つくる。 5ターンの 間 遅い ポケモンから 行動できる。"
},
"dracoMeteor": {
"name": "りゅうせいぐん",
- "effect": "天空から 隕石を 相手に 落とす。使うと 反動で 自分の 特攻が がくっと さがる。"
+ "effect": "天空から 隕石を 相手に 落とす。使うと 反動で 自分の 特攻が がくっと さがる。"
},
"discharge": {
"name": "ほうでん",
- "effect": "まばゆい 電撃で 自分の 周りに いるものを 攻撃する。 まひ状態に することが ある。"
+ "effect": "まばゆい 電撃で 自分の 周りに いるものを 攻撃する。 まひ状態に することが ある。"
},
"lavaPlume": {
"name": "ふんえん",
- "effect": "真っ赤な 炎で 自分の 周りに いるものを 攻撃する。 やけど状態に することが ある。"
+ "effect": "真っ赤な 炎で 自分の 周りに いるものを 攻撃する。 やけど状態に することが ある。"
},
"leafStorm": {
"name": "リーフストーム",
- "effect": "とがった はっぱで 相手に あらしを おこす。使うと 反動で 自分の 特攻が がくっと さがる。"
+ "effect": "とがった はっぱで 相手に あらしを おこす。使うと 反動で 自分の 特攻が がくっと さがる。"
},
"powerWhip": {
"name": "パワーウィップ",
- "effect": "ツタや 触手を 激しく ふるって 相手を たたきつけ 攻撃する。"
+ "effect": "ツタや 触手を 激しく ふるって 相手を たたきつけ 攻撃する。"
},
"rockWrecker": {
"name": "がんせきほう",
- "effect": "巨大な 岩を 相手に 発射して 攻撃する。 次の ターンは 動けなくなる。"
+ "effect": "巨大な 岩を 相手に 発射して 攻撃する。 次の ターンは 動けなくなる。"
},
"crossPoison": {
"name": "クロスポイズン",
- "effect": "毒の 刃で 相手を 切り裂く。 毒状態に することが あり 急所にも 当たりやすい。"
+ "effect": "毒の 刃で 相手を 切り裂く。 毒状態に することが あり 急所にも 当たりやすい。"
},
"gunkShot": {
"name": "ダストシュート",
- "effect": "汚い ゴミを 相手に ぶつけて 攻撃する。 毒状態に することが ある。"
+ "effect": "汚い ゴミを 相手に ぶつけて 攻撃する。 毒状態に することが ある。"
},
"ironHead": {
"name": "アイアンヘッド",
- "effect": "鋼の ような 硬い 頭で 攻撃する。 相手を ひるませることが ある。"
+ "effect": "鋼の ような 硬い 頭で 攻撃する。 相手を ひるませることが ある。"
},
"magnetBomb": {
"name": "マグネットボム",
- "effect": "相手に 吸いつく 鋼の 爆弾を 発射する。 攻撃は 必ず 命中 する。"
+ "effect": "相手に 吸いつく 鋼の 爆弾を 発射する。 攻撃は 必ず 命中 する。"
},
"stoneEdge": {
"name": "ストーンエッジ",
- "effect": "とがった 岩を 相手に 突き刺して 攻撃する。 急所に 当たりやすい。"
+ "effect": "とがった 岩を 相手に 突き刺して 攻撃する。 急所に 当たりやすい。"
},
"captivate": {
"name": "ゆうわく",
- "effect": "♂なら♀を ♀なら♂を 誘惑して 相手の 特攻を がくっと さげる。"
+ "effect": "♂なら♀を ♀なら♂を 誘惑して 相手の 特攻を がくっと さげる。"
},
"stealthRock": {
"name": "ステルスロック",
- "effect": "相手の 周りに 無数の 岩を 浮かべて 交代で でてきた 相手の ポケモンに ダメージを 与える。"
+ "effect": "相手の 周りに 無数の 岩を 浮かべて 交代で でてきた 相手の ポケモンに ダメージを 与える。"
},
"grassKnot": {
"name": "くさむすび",
- "effect": "草を からませて 相手を 転ばせる。相手が 重いほど 威力が あがる。"
+ "effect": "草を からませて 相手を 転ばせる。相手が 重いほど 威力が あがる。"
},
"chatter": {
"name": "おしゃべり",
- "effect": "とても うるさい おしゃべりの 音波で 相手を 攻撃する。 相手を 混乱させる。"
+ "effect": "とても うるさい おしゃべりの 音波で 相手を 攻撃する。 相手を 混乱させる。"
},
"judgment": {
"name": "さばきのつぶて",
- "effect": "無数の 光弾を 相手に 放出する。 自分の 持つ プレートに より タイプが 変わる。"
+ "effect": "無数の 光弾を 相手に 放出する。 自分の 持つ プレートに より タイプが 変わる。"
},
"bugBite": {
"name": "むしくい",
- "effect": "かみついて 攻撃する。 相手が きのみを 持っているとき 食べて きのみの 効果を 受けられる。"
+ "effect": "かみついて 攻撃する。 相手が きのみを 持っているとき 食べて きのみの 効果を 受けられる。"
},
"chargeBeam": {
"name": "チャージビーム",
- "effect": "電撃の 束を 相手に 発射する。電気を ためて 自分の 特攻を あげることが ある。"
+ "effect": "電撃の 束を 相手に 発射する。電気を ためて 自分の 特攻を あげることが ある。"
},
"woodHammer": {
"name": "ウッドハンマー",
- "effect": "硬い 胴体を 相手に たたきつけて 攻撃する。 自分も かなり ダメージを 受ける。"
+ "effect": "硬い 胴体を 相手に たたきつけて 攻撃する。 自分も かなり ダメージを 受ける。"
},
"aquaJet": {
"name": "アクアジェット",
- "effect": "目にも 留まらぬ ものすごい 速さで 相手に つっこむ。 必ず 先制攻撃 できる。"
+ "effect": "目にも 留まらぬ ものすごい 速さで 相手に つっこむ。 必ず 先制攻撃 できる。"
},
"attackOrder": {
"name": "こうげきしれい",
- "effect": "しもべを 呼びだして 相手に むかって 攻撃させる。 急所に 当たりやすい。"
+ "effect": "しもべを 呼びだして 相手に むかって 攻撃させる。 急所に 当たりやすい。"
},
"defendOrder": {
"name": "ぼうぎょしれい",
- "effect": "しもべを 呼びだして 自分の 体に おおい つかせる。防御と 特防を あげることが できる。"
+ "effect": "しもべを 呼びだして 自分の 体に おおい つかせる。防御と 特防を あげることが できる。"
},
"healOrder": {
"name": "かいふくしれい",
- "effect": "しもべを 呼びだして きずを 治す。 最大HPの 半分 自分の HPを 回復する。"
+ "effect": "しもべを 呼びだして きずを 治す。 最大HPの 半分 自分の HPを 回復する。"
},
"headSmash": {
"name": "もろはのずつき",
- "effect": "命を 懸けて こん身の 力で 相手に ずつきを する。 自分も ものすごい ダメージを 受ける。"
+ "effect": "命を 懸けて こん身の 力で 相手に ずつきを する。 自分も ものすごい ダメージを 受ける。"
},
"doubleHit": {
"name": "ダブルアタック",
- "effect": "しっぽなどを 使い 相手を たたいて 攻撃する。 2回連続で ダメージを 与える。"
+ "effect": "しっぽなどを 使い 相手を たたいて 攻撃する。 2回連続で ダメージを 与える。"
},
"roarOfTime": {
"name": "ときのほうこう",
- "effect": "時間が ゆがむほどの 力を うちだして 相手を 攻撃する。 次の ターンは 動けなくなる。"
+ "effect": "時間が ゆがむほどの 力を うちだして 相手を 攻撃する。 次の ターンは 動けなくなる。"
},
"spacialRend": {
"name": "あくうせつだん",
- "effect": "周りの 空間ごと 相手を 引き裂き ダメージを 与える。 急所に 当たりやすい。"
+ "effect": "周りの 空間ごと 相手を 引き裂き ダメージを 与える。 急所に 当たりやすい。"
},
"lunarDance": {
"name": "みかづきのまい",
- "effect": "自分は ひんしに なるが 控えから でてくる ポケモンの すべての 状態を 回復する。"
+ "effect": "自分は ひんしに なるが 控えから でてくる ポケモンの すべての 状態を 回復する。"
},
"crushGrip": {
"name": "にぎりつぶす",
- "effect": "すさまじい 力で 相手を にぎりつぶす。 相手の HPが 残っているほど 威力が あがる。"
+ "effect": "すさまじい 力で 相手を にぎりつぶす。 相手の HPが 残っているほど 威力が あがる。"
},
"magmaStorm": {
"name": "マグマストーム",
- "effect": "激しく 燃えたぎる 炎の なかに 4ー5ターンの 間 相手を 閉じこめて 攻撃する。"
+ "effect": "激しく 燃えたぎる 炎の なかに 4ー5ターンの 間 相手を 閉じこめて 攻撃する。"
},
"darkVoid": {
"name": "ダークホール",
- "effect": "暗黒の 世界に ひきずり 落として 相手を 眠り状態に する。"
+ "effect": "暗黒の 世界に ひきずり 落として 相手を 眠り状態に する。"
},
"seedFlare": {
"name": "シードフレア",
- "effect": "体の 中から 衝撃波を 発生させる。相手の 特防を がくっと さげることが ある。"
+ "effect": "体の 中から 衝撃波を 発生させる。相手の 特防を がくっと さげることが ある。"
},
"ominousWind": {
"name": "あやしいかぜ",
- "effect": "みのけも よだつ 突風で 相手を 攻撃する。自分の すべての 能力が あがることが ある。"
+ "effect": "みのけも よだつ 突風で 相手を 攻撃する。自分の すべての 能力が あがることが ある。"
},
"shadowForce": {
"name": "シャドーダイブ",
- "effect": "1ターン目で 姿を 消して 2ターン目に 相手を 攻撃する。 守っていても 攻撃は 当たる。"
+ "effect": "1ターン目で 姿を 消して 2ターン目に 相手を 攻撃する。 守っていても 攻撃は 当たる。"
},
"honeClaws": {
"name": "つめとぎ",
- "effect": "ツメを 磨いて 鋭く する。 自分の 攻撃と 命中率を あげる。"
+ "effect": "ツメを 磨いて 鋭く する。 自分の 攻撃と 命中率を あげる。"
},
"wideGuard": {
"name": "ワイドガード",
- "effect": "味方全員に 当たる 攻撃を 1ターンの 間 防ぐ。"
+ "effect": "味方全員に 当たる 攻撃を 1ターンの 間 防ぐ。"
},
"guardSplit": {
"name": "ガードシェア",
- "effect": "超能力で 自分と 相手の 防御と 特防を たして 半分に わける。"
+ "effect": "超能力で 自分と 相手の 防御と 特防を たして 半分に わける。"
},
"powerSplit": {
"name": "パワーシェア",
- "effect": "超能力で 自分と 相手の 攻撃と 特攻を たして 半分に わける。"
+ "effect": "超能力で 自分と 相手の 攻撃と 特攻を たして 半分に わける。"
},
"wonderRoom": {
"name": "ワンダールーム",
- "effect": "まか不思議な 空間を つくる。 5ターンのあいだ すべてのポケモンの 防御と 特防が 入れ替わる。"
+ "effect": "まか不思議な 空間を つくる。 5ターンのあいだ すべてのポケモンの 防御と 特防が 入れ替わる。"
},
"psyshock": {
"name": "サイコショック",
- "effect": "不思議な 念波を 実体化して 相手を 攻撃する。 物理的な ダメージを 与える。"
+ "effect": "不思議な 念波を 実体化して 相手を 攻撃する。 物理的な ダメージを 与える。"
},
"venoshock": {
"name": "ベノムショック",
- "effect": "特殊な 毒液を 浴びせかける。 毒状態の 相手には 威力が 2倍に なる。"
+ "effect": "特殊な 毒液を 浴びせかける。 毒状態の 相手には 威力が 2倍に なる。"
},
"autotomize": {
"name": "ボディパージ",
- "effect": "体の ムダな 部分を 削る。 自分の 素早さを ぐーんと あげて 体重も 軽くなる。"
+ "effect": "体の ムダな 部分を 削る。 自分の 素早さを ぐーんと あげて 体重も 軽くなる。"
},
"ragePowder": {
"name": "いかりのこな",
- "effect": "イライラさせる 粉を 自分に ふりかけて 注意を ひく。 相手の 攻撃を すべて 自分に むける。"
+ "effect": "イライラさせる 粉を 自分に ふりかけて 注意を ひく。 相手の 攻撃を すべて 自分に むける。"
},
"telekinesis": {
"name": "テレキネシス",
- "effect": "超能力で 相手を 浮かせる。 3ターンの 間 攻撃が 相手に 当たりやすく なる。"
+ "effect": "超能力で 相手を 浮かせる。 3ターンの 間 攻撃が 相手に 当たりやすく なる。"
},
"magicRoom": {
"name": "マジックルーム",
- "effect": "まか不思議な 空間を つくる。 5ターンの間 すべてのポケモンの 道具の 効果が なくなる。"
+ "effect": "まか不思議な 空間を つくる。 5ターンの間 すべてのポケモンの 道具の 効果が なくなる。"
},
"smackDown": {
"name": "うちおとす",
- "effect": "石や 弾を 投げて 飛んでいる 相手を 攻撃する。 相手は うち落とされて 地面に 落ちる。"
+ "effect": "石や 弾を 投げて 飛んでいる 相手を 攻撃する。 相手は うち落とされて 地面に 落ちる。"
},
"stormThrow": {
"name": "やまあらし",
- "effect": "強烈な 一撃を 相手に くりだす。攻撃は 必ず 急所に 当たる。"
+ "effect": "強烈な 一撃を 相手に くりだす。攻撃は 必ず 急所に 当たる。"
},
"flameBurst": {
"name": "はじけるほのお",
- "effect": "当たると はじける 炎で 相手を 攻撃する。はじけた 炎は 隣の 相手にも ふりかかる。"
+ "effect": "当たると はじける 炎で 相手を 攻撃する。はじけた 炎は 隣の 相手にも ふりかかる。"
},
"sludgeWave": {
"name": "ヘドロウェーブ",
- "effect": "ヘドロの 波で 自分の 周りに いるものを 攻撃する。 毒状態に することが ある。"
+ "effect": "ヘドロの 波で 自分の 周りに いるものを 攻撃する。 毒状態に することが ある。"
},
"quiverDance": {
"name": "ちょうのまい",
- "effect": "神秘的で 美しい 舞を 軽やかに おどる。 自分の 特攻と 特防と 素早さを あげる。"
+ "effect": "神秘的で 美しい 舞を 軽やかに おどる。 自分の 特攻と 特防と 素早さを あげる。"
},
"heavySlam": {
"name": "ヘビーボンバー",
- "effect": "重たい 体で 相手に ぶつかって 攻撃する。 自分が 相手より 重いほど 威力が あがる。"
+ "effect": "重たい 体で 相手に ぶつかって 攻撃する。 自分が 相手より 重いほど 威力が あがる。"
},
"synchronoise": {
"name": "シンクロノイズ",
- "effect": "不思議な 電波で 周りに いる 自分と 同じ タイプの ポケモンに ダメージを 与える。"
+ "effect": "不思議な 電波で 周りに いる 自分と 同じ タイプの ポケモンに ダメージを 与える。"
},
"electroBall": {
"name": "エレキボール",
- "effect": "電気の 塊を 相手に ぶつける。相手より 素早さが 速いほど 威力が あがる。"
+ "effect": "電気の 塊を 相手に ぶつける。相手より 素早さが 速いほど 威力が あがる。"
},
"soak": {
"name": "みずびたし",
- "effect": "たくさんの 水を 浴びせかけて 相手を みずタイプに する。"
+ "effect": "たくさんの 水を 浴びせかけて 相手を みずタイプに する。"
},
"flameCharge": {
"name": "ニトロチャージ",
- "effect": "炎を まとい 相手を 攻撃する。 力を ためて 自分の 素早さを あげる。"
+ "effect": "炎を まとい 相手を 攻撃する。 力を ためて 自分の 素早さを あげる。"
},
"coil": {
"name": "とぐろをまく",
- "effect": "とぐろを まいて 集中する。 自分の 攻撃と 防御と 命中率を あげる。"
+ "effect": "とぐろを まいて 集中する。 自分の 攻撃と 防御と 命中率を あげる。"
},
"lowSweep": {
"name": "ローキック",
- "effect": "素早い 動きで 相手の 足を ねらって 攻撃する。 相手の 素早さを さげる。"
+ "effect": "素早い 動きで 相手の 足を ねらって 攻撃する。 相手の 素早さを さげる。"
},
"acidSpray": {
"name": "アシッドボム",
- "effect": "相手を とかす 液体を 吐きだして 攻撃する。 相手の 特防を がくっと さげる。"
+ "effect": "相手を とかす 液体を 吐きだして 攻撃する。 相手の 特防を がくっと さげる。"
},
"foulPlay": {
"name": "イカサマ",
- "effect": "相手の 力を 利用する。 戦っている 相手の 攻撃が 高いほど ダメージが あがる。"
+ "effect": "相手の 力を 利用する。 戦っている 相手の 攻撃が 高いほど ダメージが あがる。"
},
"simpleBeam": {
"name": "シンプルビーム",
- "effect": "なぞの 念波を 相手に 送る。 念波を 受けとった 相手は 特性が たんじゅんに なる。"
+ "effect": "なぞの 念波を 相手に 送る。 念波を 受けとった 相手は 特性が たんじゅんに なる。"
},
"entrainment": {
"name": "なかまづくり",
- "effect": "不思議な リズムで おどる。 動きを まねさせて 自分と 相手の 特性を 同じに する。"
+ "effect": "不思議な リズムで おどる。 動きを まねさせて 自分と 相手の 特性を 同じに する。"
},
"afterYou": {
"name": "おさきにどうぞ",
- "effect": "相手の 行動を サポートして 自分の 行動の あとに 続けて 動けるように する。"
+ "effect": "相手の 行動を サポートして 自分の 行動の あとに 続けて 動けるように する。"
},
"round": {
"name": "りんしょう",
- "effect": "歌で 相手を 攻撃する。 みんなで 輪唱すると 続けて だすことが でき 威力も あがる。"
+ "effect": "歌で 相手を 攻撃する。 みんなで 輪唱すると 続けて だすことが でき 威力も あがる。"
},
"echoedVoice": {
"name": "エコーボイス",
- "effect": "響く 声で 相手を 攻撃する。 毎ターン だれかが 技を 使い続けると 威力が あがる。"
+ "effect": "響く 声で 相手を 攻撃する。 毎ターン だれかが 技を 使い続けると 威力が あがる。"
},
"chipAway": {
"name": "なしくずし",
- "effect": "すきを みて 堅実に 攻撃する。 相手の 能力変化に 関係なく ダメージを 与える。"
+ "effect": "すきを みて 堅実に 攻撃する。 相手の 能力変化に 関係なく ダメージを 与える。"
},
"clearSmog": {
"name": "クリアスモッグ",
- "effect": "特殊な 泥の 塊を 相手に 投げつけて 攻撃する。 能力変化を もとに もどす。"
+ "effect": "特殊な 泥の 塊を 相手に 投げつけて 攻撃する。 能力変化を もとに もどす。"
},
"storedPower": {
"name": "アシストパワー",
- "effect": "蓄積された パワーで 相手を 攻撃する。自分の 能力が あがっているほど 威力が あがる。"
+ "effect": "蓄積された パワーで 相手を 攻撃する。自分の 能力が あがっているほど 威力が あがる。"
},
"quickGuard": {
"name": "ファストガード",
- "effect": "自分と 味方を 相手の 先制攻撃から 守る。"
+ "effect": "自分と 味方を 相手の 先制攻撃から 守る。"
},
"allySwitch": {
"name": "サイドチェンジ",
- "effect": "不思議な 力で テレポートして 自分と 味方の 居場所を 入れ替える。"
+ "effect": "不思議な 力で テレポートして 自分と 味方の 居場所を 入れ替える。"
},
"scald": {
"name": "ねっとう",
- "effect": "熱く 煮えたぎる 水を 相手に 発射して 攻撃する。 やけど状態に することが ある。"
+ "effect": "熱く 煮えたぎる 水を 相手に 発射して 攻撃する。 やけど状態に することが ある。"
},
"shellSmash": {
"name": "からをやぶる",
- "effect": "殻を やぶって 自分の 防御 特防を さげるが 攻撃 特攻 素早さを ぐーんと あげる。"
+ "effect": "殻を やぶって 自分の 防御 特防を さげるが 攻撃 特攻 素早さを ぐーんと あげる。"
},
"healPulse": {
"name": "いやしのはどう",
- "effect": "いやしのはどうを とばして 最大HPの 半分 相手の HPを 回復する。"
+ "effect": "いやしのはどうを とばして 最大HPの 半分 相手の HPを 回復する。"
},
"hex": {
"name": "たたりめ",
- "effect": "たたみかける ように 攻撃する。 状態異常の 相手に 大きな ダメージを 与える。"
+ "effect": "たたみかける ように 攻撃する。 状態異常の 相手に 大きな ダメージを 与える。"
},
"skyDrop": {
"name": "フリーフォール",
- "effect": "1ターン目で 相手を 空へ 連れさり 2ターン目に 落として 攻撃する。 連れさられた 相手は 動けない。"
+ "effect": "1ターン目で 相手を 空へ 連れさり 2ターン目に 落として 攻撃する。 連れさられた 相手は 動けない。"
},
"shiftGear": {
"name": "ギアチェンジ",
- "effect": "歯車を 回して 自分の 攻撃を あげる だけでなく 素早さも ぐーんと あげる。"
+ "effect": "歯車を 回して 自分の 攻撃を あげる だけでなく 素早さも ぐーんと あげる。"
},
"circleThrow": {
"name": "ともえなげ",
- "effect": "相手を 投げとばして 控えの ポケモンを ひきずりだす。 野生の 場合は 戦闘が 終わる。"
+ "effect": "相手を 投げとばして 控えの ポケモンを ひきずりだす。 野生の 場合は 戦闘が 終わる。"
},
"incinerate": {
"name": "やきつくす",
- "effect": "炎で 相手を 攻撃する。 相手が きのみなどを 持っているとき 燃やして 使えなくする。"
+ "effect": "炎で 相手を 攻撃する。 相手が きのみなどを 持っているとき 燃やして 使えなくする。"
},
"quash": {
"name": "さきおくり",
- "effect": "相手を おさえつけて 行動の 順番を 最後に する。"
+ "effect": "相手を おさえつけて 行動の 順番を 最後に する。"
},
"acrobatics": {
"name": "アクロバット",
- "effect": "軽やかに 相手を 攻撃する。 自分が 道具を 持っていないとき 大きな ダメージを 与える。"
+ "effect": "軽やかに 相手を 攻撃する。 自分が 道具を 持っていないとき 大きな ダメージを 与える。"
},
"reflectType": {
"name": "ミラータイプ",
- "effect": "相手の タイプを 反射して 自分も 同じ タイプに なる。"
+ "effect": "相手の タイプを 反射して 自分も 同じ タイプに なる。"
},
"retaliate": {
"name": "かたきうち",
- "effect": "倒れた 味方の かたきを 討つ。 前の ターンに 味方が 倒されていると 威力が あがる。"
+ "effect": "倒れた 味方の かたきを 討つ。 前の ターンに 味方が 倒されていると 威力が あがる。"
},
"finalGambit": {
"name": "いのちがけ",
- "effect": "命懸けで 相手を 攻撃する。 自分は ひんしに なるが 相手に HP分の ダメージを 与える。"
+ "effect": "命懸けで 相手を 攻撃する。 自分は ひんしに なるが 相手に HP分の ダメージを 与える。"
},
"bestow": {
"name": "ギフトパス",
- "effect": "相手が 道具を 持っていないとき 自分が 持っている 道具を 相手に わたす。"
+ "effect": "相手が 道具を 持っていないとき 自分が 持っている 道具を 相手に わたす。"
},
"inferno": {
"name": "れんごく",
- "effect": "激しい 炎で 相手を 包みこみ 攻撃する。 やけど状態に する。"
+ "effect": "激しい 炎で 相手を 包みこみ 攻撃する。 やけど状態に する。"
},
"waterPledge": {
"name": "みずのちかい",
- "effect": "水の柱で 攻撃する。 ほのおと 組みあわせると 威力が あがって 空に にじが かかる。"
+ "effect": "水の柱で 攻撃する。 ほのおと 組みあわせると 威力が あがって 空に にじが かかる。"
},
"firePledge": {
"name": "ほのおのちかい",
- "effect": "炎の柱で 攻撃する。 くさと 組みあわせると 威力が あがって 周りが 火の海に なる。"
+ "effect": "炎の柱で 攻撃する。 くさと 組みあわせると 威力が あがって 周りが 火の海に なる。"
},
"grassPledge": {
"name": "くさのちかい",
- "effect": "草の柱で 攻撃する。 みずと 組みあわせると 威力が あがって あたりが 湿原に なる。"
+ "effect": "草の柱で 攻撃する。 みずと 組みあわせると 威力が あがって あたりが 湿原に なる。"
},
"voltSwitch": {
"name": "ボルトチェンジ",
- "effect": "攻撃したあと ものすごい スピードで もどってきて 控えの ポケモンと 入れ替わる。"
+ "effect": "攻撃したあと ものすごい スピードで もどってきて 控えの ポケモンと 入れ替わる。"
},
"struggleBug": {
"name": "むしのていこう",
- "effect": "抵抗して 相手を 攻撃する。 相手の 特攻を さげる。"
+ "effect": "抵抗して 相手を 攻撃する。 相手の 特攻を さげる。"
},
"bulldoze": {
"name": "じならし",
- "effect": "地面を 踏みならして 自分の 周りに いるものを 攻撃する。 相手の 素早さを さげる。"
+ "effect": "地面を 踏みならして 自分の 周りに いるものを 攻撃する。 相手の 素早さを さげる。"
},
"frostBreath": {
"name": "こおりのいぶき",
- "effect": "冷たい 息を 相手に 吹きつけて 攻撃する。 必ず 急所に 当たる。"
+ "effect": "冷たい 息を 相手に 吹きつけて 攻撃する。 必ず 急所に 当たる。"
},
"dragonTail": {
"name": "ドラゴンテール",
- "effect": "相手を はじきとばして 控えの ポケモンを ひきずりだす。 野生の 場合は 戦闘が 終わる。"
+ "effect": "相手を はじきとばして 控えの ポケモンを ひきずりだす。 野生の 場合は 戦闘が 終わる。"
},
"workUp": {
"name": "ふるいたてる",
- "effect": "自分を 奮いたてて 攻撃と 特攻を あげる。"
+ "effect": "自分を 奮いたてて 攻撃と 特攻を あげる。"
},
"electroweb": {
"name": "エレキネット",
- "effect": "電気の ネットで 相手を 捕まえて 攻撃する。 相手の 素早さを さげる。"
+ "effect": "電気の ネットで 相手を 捕まえて 攻撃する。 相手の 素早さを さげる。"
},
"wildCharge": {
"name": "ワイルドボルト",
- "effect": "電気を まとって 相手に ぶつかって 攻撃する。 自分も 少し ダメージを 受ける。"
+ "effect": "電気を まとって 相手に ぶつかって 攻撃する。 自分も 少し ダメージを 受ける。"
},
"drillRun": {
"name": "ドリルライナー",
- "effect": "ドリルのように 体を 回転しながら 相手に 体当たりする。 急所に 当たりやすい。"
+ "effect": "ドリルのように 体を 回転しながら 相手に 体当たりする。 急所に 当たりやすい。"
},
"dualChop": {
"name": "ダブルチョップ",
- "effect": "体の 硬い部分で 相手を たたいて 攻撃する。 2回連続で ダメージを 与える。"
+ "effect": "体の 硬い部分で 相手を たたいて 攻撃する。 2回連続で ダメージを 与える。"
},
"heartStamp": {
"name": "ハートスタンプ",
- "effect": "かわいい しぐさで 油断させて 強烈な 一撃を 浴びせる。 相手を ひるませることが ある。"
+ "effect": "かわいい しぐさで 油断させて 強烈な 一撃を 浴びせる。 相手を ひるませることが ある。"
},
"hornLeech": {
"name": "ウッドホーン",
- "effect": "つのを 突き刺して 相手の 養分を 吸い取る。 与えた ダメージの 半分の HPを 回復できる。"
+ "effect": "つのを 突き刺して 相手の 養分を 吸い取る。 与えた ダメージの 半分の HPを 回復できる。"
},
"sacredSword": {
"name": "せいなるつるぎ",
- "effect": "長い つので 切りつけ 攻撃する。 相手の 能力変化に 関係なく ダメージを 与える。"
+ "effect": "長い つので 切りつけ 攻撃する。 相手の 能力変化に 関係なく ダメージを 与える。"
},
"razorShell": {
"name": "シェルブレード",
- "effect": "鋭い 貝殻で 切りつけて 攻撃する。 相手の 防御を さげることが ある。"
+ "effect": "鋭い 貝殻で 切りつけて 攻撃する。 相手の 防御を さげることが ある。"
},
"heatCrash": {
"name": "ヒートスタンプ",
- "effect": "燃える 体で 相手に ぶつかって 攻撃する。 自分が 相手より 重いほど 威力が あがる。"
+ "effect": "燃える 体で 相手に ぶつかって 攻撃する。 自分が 相手より 重いほど 威力が あがる。"
},
"leafTornado": {
"name": "グラスミキサー",
- "effect": "鋭い はっぱで 相手を 包みこんで 攻撃する。 命中率を さげることが ある。"
+ "effect": "鋭い はっぱで 相手を 包みこんで 攻撃する。 命中率を さげることが ある。"
},
"steamroller": {
"name": "ハードローラー",
- "effect": "まるめた 体で 回転して 相手を おしつぶす。 相手を ひるませることが ある。"
+ "effect": "まるめた 体で 回転して 相手を おしつぶす。 相手を ひるませることが ある。"
},
"cottonGuard": {
"name": "コットンガード",
- "effect": "フワフワの 綿毛で 自分の 体を 包みこんで 守る。 防御を ぐぐーんと あげる。"
+ "effect": "フワフワの 綿毛で 自分の 体を 包みこんで 守る。 防御を ぐぐーんと あげる。"
},
"nightDaze": {
"name": "ナイトバースト",
- "effect": "暗黒の 衝撃波を とばして 相手を 攻撃する。 命中率を さげることが ある。"
+ "effect": "暗黒の 衝撃波を とばして 相手を 攻撃する。 命中率を さげることが ある。"
},
"psystrike": {
"name": "サイコブレイク",
- "effect": "不思議な 念波を 実体化して 相手を 攻撃する。 物理的な ダメージを 与える。"
+ "effect": "不思議な 念波を 実体化して 相手を 攻撃する。 物理的な ダメージを 与える。"
},
"tailSlap": {
"name": "スイープビンタ",
- "effect": "硬い しっぽで 相手を たたいて 攻撃する。 2ー5回の 間 連続で だす。"
+ "effect": "硬い しっぽで 相手を たたいて 攻撃する。 2ー5回の 間 連続で だす。"
},
"hurricane": {
"name": "ぼうふう",
- "effect": "強烈な 風で 相手を 包みこんで 攻撃する。 相手を 混乱させることが ある。"
+ "effect": "強烈な 風で 相手を 包みこんで 攻撃する。 相手を 混乱させることが ある。"
},
"headCharge": {
"name": "アフロブレイク",
- "effect": "すごい アフロの 頭で 相手に 突進して 攻撃する。 自分も 少し ダメージを 受ける。"
+ "effect": "すごい アフロの 頭で 相手に 突進して 攻撃する。 自分も 少し ダメージを 受ける。"
},
"gearGrind": {
"name": "ギアソーサー",
- "effect": "鋼鉄の ギアを 相手に 投げつけて 攻撃する。 2回連続で ダメージを 与える。"
+ "effect": "鋼鉄の ギアを 相手に 投げつけて 攻撃する。 2回連続で ダメージを 与える。"
},
"searingShot": {
"name": "かえんだん",
- "effect": "真っ赤な 炎で 自分の 周りに いるものを 攻撃する。 やけど状態に することが ある。"
+ "effect": "真っ赤な 炎で 自分の 周りに いるものを 攻撃する。 やけど状態に することが ある。"
},
"technoBlast": {
"name": "テクノバスター",
- "effect": "光弾を 相手に 放出する。 自分の 持つ カセットにより タイプが 変わる。"
+ "effect": "光弾を 相手に 放出する。 自分の 持つ カセットにより タイプが 変わる。"
},
"relicSong": {
"name": "いにしえのうた",
- "effect": "いにしえのうたを 相手に 聞かせて 心に うったえて 攻撃する。 眠り状態に することが ある。"
+ "effect": "いにしえのうたを 相手に 聞かせて 心に うったえて 攻撃する。 眠り状態に することが ある。"
},
"secretSword": {
"name": "しんぴのつるぎ",
- "effect": "長い つので 切りつけ 攻撃する。 つのが まとった 不思議な 力は 物理的な ダメージを 与える。"
+ "effect": "長い つので 切りつけ 攻撃する。 つのが まとった 不思議な 力は 物理的な ダメージを 与える。"
},
"glaciate": {
"name": "こごえるせかい",
- "effect": "凍えるような 冷気を 相手に 吹きつけて 攻撃する。 相手の 素早さを さげる。"
+ "effect": "凍えるような 冷気を 相手に 吹きつけて 攻撃する。 相手の 素早さを さげる。"
},
"boltStrike": {
"name": "らいげき",
- "effect": "ぼうだいな 電気を 身に まとって 相手に 突進して 攻撃する。 まひ状態に することが ある。"
+ "effect": "ぼうだいな 電気を 身に まとって 相手に 突進して 攻撃する。 まひ状態に することが ある。"
},
"blueFlare": {
"name": "あおいほのお",
- "effect": "美しくも 激しい 青い炎で 相手を 包みこんで 攻撃する。 やけど状態に することが ある。"
+ "effect": "美しくも 激しい 青い炎で 相手を 包みこんで 攻撃する。 やけど状態に することが ある。"
},
"fieryDance": {
"name": "ほのおのまい",
- "effect": "炎を まとい はばたいて 相手を 攻撃する。自分の 特攻が あがることが ある。"
+ "effect": "炎を まとい はばたいて 相手を 攻撃する。自分の 特攻が あがることが ある。"
},
"freezeShock": {
"name": "フリーズボルト",
- "effect": "電気を まとった 氷の 塊で 2ターン目に 相手を たたきつける。 まひ状態に することが ある。"
+ "effect": "電気を まとった 氷の 塊で 2ターン目に 相手を たたきつける。 まひ状態に することが ある。"
},
"iceBurn": {
"name": "コールドフレア",
- "effect": "すべてを 凍らせる 激しい 冷気で 2ターン目に 相手を 包みこむ。 やけど状態に することが ある。"
+ "effect": "すべてを 凍らせる 激しい 冷気で 2ターン目に 相手を 包みこむ。 やけど状態に することが ある。"
},
"snarl": {
"name": "バークアウト",
- "effect": "まくしたてる ように 怒鳴りつけて 相手の 特攻を さげる。"
+ "effect": "まくしたてる ように 怒鳴りつけて 相手の 特攻を さげる。"
},
"icicleCrash": {
"name": "つららおとし",
- "effect": "大きな 氷柱を 激しく ぶつけて 攻撃する。 相手を ひるませることが ある。"
+ "effect": "大きな 氷柱を 激しく ぶつけて 攻撃する。 相手を ひるませることが ある。"
},
"vCreate": {
"name": "Vジェネレート",
- "effect": "灼熱の 炎を 額から 発生させて 捨て身の 体当たり。 防御 特防 素早さが さがる。"
+ "effect": "灼熱の 炎を 額から 発生させて 捨て身の 体当たり。 防御 特防 素早さが さがる。"
},
"fusionFlare": {
"name": "クロスフレイム",
- "effect": "巨大な 炎を たたきつける。 巨大な 雷の 影響を受け 技の 威力が あがる。"
+ "effect": "巨大な 炎を たたきつける。 巨大な 雷の 影響を受け 技の 威力が あがる。"
},
"fusionBolt": {
"name": "クロスサンダー",
- "effect": "巨大な 雷を たたきつける。 巨大な 炎の 影響を受け 技の 威力が あがる。"
+ "effect": "巨大な 雷を たたきつける。 巨大な 炎の 影響を受け 技の 威力が あがる。"
},
"flyingPress": {
"name": "フライングプレス",
- "effect": "空中から 相手に ダイブする。 この技は かくとうタイプと 同時に ひこうタイプでも ある。"
+ "effect": "空中から 相手に ダイブする。 この技は かくとうタイプと 同時に ひこうタイプでも ある。"
},
"matBlock": {
"name": "たたみがえし",
- "effect": "かえした タタミを 盾にして 自分や 味方への 技の ダメージを 防ぐ。 変化技は 防ぐことが できない。"
+ "effect": "かえした タタミを 盾にして 自分や 味方への 技の ダメージを 防ぐ。 変化技は 防ぐことが できない。"
},
"belch": {
"name": "ゲップ",
- "effect": "相手に 向かって ゲップを 浴びせて ダメージを 与える。 きのみを 食べないと だせない。"
+ "effect": "相手に 向かって ゲップを 浴びせて ダメージを 与える。 きのみを 食べないと だせない。"
},
"rototiller": {
"name": "たがやす",
- "effect": "地面を 耕して 草木が 育ちやすいようにする。 くさタイプの 攻撃と 特攻が あがる。"
+ "effect": "地面を 耕して 草木が 育ちやすいようにする。 くさタイプの 攻撃と 特攻が あがる。"
},
"stickyWeb": {
"name": "ねばねばネット",
- "effect": "相手の 周りに ねばねばした ネットを はりめぐらせ 交代で でてきた 相手の 素早さを さげる。"
+ "effect": "相手の 周りに ねばねばした ネットを はりめぐらせ 交代で でてきた 相手の 素早さを さげる。"
},
"fellStinger": {
"name": "とどめばり",
- "effect": "この 技を 使って 相手を 倒すと 攻撃が ぐぐーんと あがる。"
+ "effect": "この 技を 使って 相手を 倒すと 攻撃が ぐぐーんと あがる。"
},
"phantomForce": {
"name": "ゴーストダイブ",
- "effect": "1ターンめで どこかに 消えて 2ターンめに 相手を 攻撃する。 守りを 無視して 攻撃できる。"
+ "effect": "1ターンめで どこかに 消えて 2ターンめに 相手を 攻撃する。 守りを 無視して 攻撃できる。"
},
"trickOrTreat": {
"name": "ハロウィン",
- "effect": "相手を ハロウィンに 誘う。 相手の タイプに ゴーストタイプが 追加される。"
+ "effect": "相手を ハロウィンに 誘う。 相手の タイプに ゴーストタイプが 追加される。"
},
"nobleRoar": {
"name": "おたけび",
- "effect": "おたけびを あげて 相手を 威嚇し 相手の 攻撃と 特攻を さげる。"
+ "effect": "おたけびを あげて 相手を 威嚇し 相手の 攻撃と 特攻を さげる。"
},
"ionDeluge": {
"name": "プラズマシャワー",
- "effect": "電気を 帯びた 粒子を 拡散し ノーマルタイプの 技を でんきタイプに してしまう。"
+ "effect": "電気を 帯びた 粒子を 拡散し ノーマルタイプの 技を でんきタイプに してしまう。"
},
"parabolicCharge": {
"name": "パラボラチャージ",
- "effect": "周りにいる ポケモン 全員に ダメージ。 与えた ダメージの 半分を 自分が 回復する。"
+ "effect": "周りにいる ポケモン 全員に ダメージ。 与えた ダメージの 半分を 自分が 回復する。"
},
"forestsCurse": {
"name": "もりののろい",
- "effect": "相手に 森ののろいを かける。 のろいを かけられた 相手は タイプに くさタイプが 追加される。"
+ "effect": "相手に 森ののろいを かける。 のろいを かけられた 相手は タイプに くさタイプが 追加される。"
},
"petalBlizzard": {
"name": "はなふぶき",
- "effect": "激しい 花吹雪を 起こし 周りに いるものに 攻撃して ダメージを 与える。"
+ "effect": "激しい 花吹雪を 起こし 周りに いるものに 攻撃して ダメージを 与える。"
},
"freezeDry": {
"name": "フリーズドライ",
- "effect": "相手を 急激に 冷やして こおり 状態に することが ある。 みずタイプにも 効果バツグンになる。"
+ "effect": "相手を 急激に 冷やして こおり 状態に することが ある。 みずタイプにも 効果バツグンになる。"
},
"disarmingVoice": {
"name": "チャームボイス",
- "effect": "魅惑の 鳴き声を だして 相手に 精神的な ダメージを 与える。 攻撃は 必ず 命中 する。"
+ "effect": "魅惑の 鳴き声を だして 相手に 精神的な ダメージを 与える。 攻撃は 必ず 命中 する。"
},
"partingShot": {
"name": "すてゼリフ",
- "effect": "すてゼリフで 相手を いかくし 攻撃と 特攻を さげたのち 控えの ポケモンと 入れ替わる。"
+ "effect": "すてゼリフで 相手を いかくし 攻撃と 特攻を さげたのち 控えの ポケモンと 入れ替わる。"
},
"topsyTurvy": {
"name": "ひっくりかえす",
- "effect": "相手に かかっている すべての 能力変化を ひっくり返して 逆にする。"
+ "effect": "相手に かかっている すべての 能力変化を ひっくり返して 逆にする。"
},
"drainingKiss": {
"name": "ドレインキッス",
- "effect": "キッスによって 相手から HPを 吸い取る。 与えた ダメージの 半分以上 HPを 回復する。"
+ "effect": "キッスによって 相手から HPを 吸い取る。 与えた ダメージの 半分以上 HPを 回復する。"
},
"craftyShield": {
"name": "トリックガード",
- "effect": "不思議な 力を 使って 味方への 変化技を 防ぐ。 ダメージ技は 受けてしまう。"
+ "effect": "不思議な 力を 使って 味方への 変化技を 防ぐ。 ダメージ技は 受けてしまう。"
},
"flowerShield": {
"name": "フラワーガード",
- "effect": "不思議な 力を 使って 場にいる くさタイプの ポケモン 全員の 防御を あげる。"
+ "effect": "不思議な 力を 使って 場にいる くさタイプの ポケモン 全員の 防御を あげる。"
},
"grassyTerrain": {
"name": "グラスフィールド",
- "effect": "5ターンの 間 グラスフィールドにする。 地面にいると 毎ターン 回復する。 くさタイプの 威力が あがる。"
+ "effect": "5ターンの 間 グラスフィールドにする。 地面にいると 毎ターン 回復する。 くさタイプの 威力が あがる。"
},
"mistyTerrain": {
"name": "ミストフィールド",
- "effect": "5ターンの 間 地面にいると 状態異常に ならず ドラゴン技の ダメージも 半分になる。"
+ "effect": "5ターンの 間 地面にいると 状態異常に ならず ドラゴン技の ダメージも 半分になる。"
},
"electrify": {
"name": "そうでん",
- "effect": "相手が 技を だす前に そうでん すると そのターン 相手の 技は でんきタイプになる。"
+ "effect": "相手が 技を だす前に そうでん すると そのターン 相手の 技は でんきタイプになる。"
},
"playRough": {
"name": "じゃれつく",
- "effect": "相手に じゃれついて 攻撃する。 相手の 攻撃を さげる ことがある。"
+ "effect": "相手に じゃれついて 攻撃する。 相手の 攻撃を さげる ことがある。"
},
"fairyWind": {
"name": "ようせいのかぜ",
- "effect": "ようせいのかぜを 起こし 相手に 吹きつけて 攻撃する。"
+ "effect": "ようせいのかぜを 起こし 相手に 吹きつけて 攻撃する。"
},
"moonblast": {
"name": "ムーンフォース",
- "effect": "月の パワーを かりて 相手を 攻撃する。 相手の 特攻を さげる ことがある。"
+ "effect": "月の パワーを かりて 相手を 攻撃する。 相手の 特攻を さげる ことがある。"
},
"boomburst": {
"name": "ばくおんぱ",
- "effect": "すさまじい 爆音の 破壊力に よって 周りに いるものを 攻撃する。"
+ "effect": "すさまじい 爆音の 破壊力に よって 周りに いるものを 攻撃する。"
},
"fairyLock": {
"name": "フェアリーロック",
- "effect": "ロックを かけることによって 次のターン すべての ポケモンを 逃げられなくする。"
+ "effect": "ロックを かけることによって 次のターン すべての ポケモンを 逃げられなくする。"
},
"kingsShield": {
"name": "キングシールド",
- "effect": "相手の 攻撃を 防ぐと 同時に 防御態勢になる。 触れた 相手の 攻撃を さげる。"
+ "effect": "相手の 攻撃を 防ぐと 同時に 防御態勢になる。 触れた 相手の 攻撃を さげる。"
},
"playNice": {
"name": "なかよくする",
- "effect": "相手と なかよくなって 戦う 気力を 失わせ 相手の 攻撃を さげる。"
+ "effect": "相手と なかよくなって 戦う 気力を 失わせ 相手の 攻撃を さげる。"
},
"confide": {
"name": "ないしょばなし",
- "effect": "ないしょばなしを することで 相手の 集中力を 失わせ 相手の 特攻を さげる。"
+ "effect": "ないしょばなしを することで 相手の 集中力を 失わせ 相手の 特攻を さげる。"
},
"diamondStorm": {
"name": "ダイヤストーム",
- "effect": "ダイヤの 嵐を 巻き起こし ダメージを 与える。 自分の 防御を ぐーんと あげることが ある。"
+ "effect": "ダイヤの 嵐を 巻き起こし ダメージを 与える。 自分の 防御を ぐーんと あげることが ある。"
},
"steamEruption": {
"name": "スチームバースト",
- "effect": "ものすごく 熱い 蒸気を 相手に 浴びせる。 相手は やけどする ことがある。"
+ "effect": "ものすごく 熱い 蒸気を 相手に 浴びせる。 相手は やけどする ことがある。"
},
"hyperspaceHole": {
"name": "いじげんホール",
- "effect": "異次元ホールで 突然 相手の 真横に 現れ 攻撃する。 まもるや みきり なども 無視 できる。"
+ "effect": "異次元ホールで 突然 相手の 真横に 現れ 攻撃する。 まもるや みきり なども 無視 できる。"
},
"waterShuriken": {
"name": "みずしゅりけん",
- "effect": "粘液で できた 手裏剣を 2ー5回の 間 連続で だす。 必ず 先制攻撃 できる。"
+ "effect": "粘液で できた 手裏剣を 2ー5回の 間 連続で だす。 必ず 先制攻撃 できる。"
},
"mysticalFire": {
"name": "マジカルフレイム",
- "effect": "口から 吐きだす 特別 熱い 炎で 攻撃する。 相手の 特攻を さげる。"
+ "effect": "口から 吐きだす 特別 熱い 炎で 攻撃する。 相手の 特攻を さげる。"
},
"spikyShield": {
"name": "ニードルガード",
- "effect": "相手の 攻撃を 防ぐと 同時に 触れた 相手の 体力を 削って しまう。"
+ "effect": "相手の 攻撃を 防ぐと 同時に 触れた 相手の 体力を 削って しまう。"
},
"aromaticMist": {
"name": "アロマミスト",
- "effect": "不思議な アロマの 香りによって 味方の 特防を あげる。"
+ "effect": "不思議な アロマの 香りによって 味方の 特防を あげる。"
},
"eerieImpulse": {
"name": "かいでんぱ",
- "effect": "体から かいでんぱを 放ち 相手に 浴びせる ことによって 特攻を がくっと さげる。"
+ "effect": "体から かいでんぱを 放ち 相手に 浴びせる ことによって 特攻を がくっと さげる。"
},
"venomDrench": {
"name": "ベノムトラップ",
- "effect": "特殊な 毒液を 浴びせかける。 毒状態の 相手は 攻撃 特攻 素早さが さがる。"
+ "effect": "特殊な 毒液を 浴びせかける。 毒状態の 相手は 攻撃 特攻 素早さが さがる。"
},
"powder": {
"name": "ふんじん",
- "effect": "ふんじんを 浴びせた 相手が ほのお技を 使うと 爆発して ダメージを 与える。"
+ "effect": "ふんじんを 浴びせた 相手が ほのお技を 使うと 爆発して ダメージを 与える。"
},
"geomancy": {
"name": "ジオコントロール",
- "effect": "1ターン目で エネルギーを 吸収し 2ターン目に 特攻 特防 素早さを ぐーんと あげる。"
+ "effect": "1ターン目で エネルギーを 吸収し 2ターン目に 特攻 特防 素早さを ぐーんと あげる。"
},
"magneticFlux": {
"name": "じばそうさ",
- "effect": "磁場を 操作 することによって 特性 プラスと マイナスの 防御 特防が あがる。"
+ "effect": "磁場を 操作 することによって 特性 プラスと マイナスの 防御 特防が あがる。"
},
"happyHour": {
"name": "ハッピータイム",
- "effect": "ハッピータイムの 技を 使うと 戦闘の あとで もらえる お金が 倍になる。"
+ "effect": "ハッピータイムの 技を 使うと 戦闘の あとで もらえる お金が 倍になる。"
},
"electricTerrain": {
"name": "エレキフィールド",
- "effect": "5ターンの 間 エレキフィールドにする。 地面にいる ポケモンは 眠らない。 でんきタイプの 威力が あがる。"
+ "effect": "5ターンの 間 エレキフィールドにする。 地面にいる ポケモンは 眠らない。 でんきタイプの 威力が あがる。"
},
"dazzlingGleam": {
"name": "マジカルシャイン",
- "effect": "強力な 光を 放ち 相手に ダメージを 与える。"
+ "effect": "強力な 光を 放ち 相手に ダメージを 与える。"
},
"celebrate": {
"name": "おいわい",
- "effect": "ポケモンが とっても ハッピーな あなたのことを お祝い してくれる。"
+ "effect": "ポケモンが とっても ハッピーな あなたのことを お祝い してくれる。"
},
"holdHands": {
"name": "てをつなぐ",
- "effect": "味方の ポケモン 同士が 手をつなぐ。 とっても 幸せな 気持ちに なれる。"
+ "effect": "味方の ポケモン 同士が 手をつなぐ。 とっても 幸せな 気持ちに なれる。"
},
"babyDollEyes": {
"name": "つぶらなひとみ",
- "effect": "つぶらなひとみで 相手を みつめて 攻撃を さげる。 必ず 先制攻撃 できる。"
+ "effect": "つぶらなひとみで 相手を みつめて 攻撃を さげる。 必ず 先制攻撃 できる。"
},
"nuzzle": {
"name": "ほっぺすりすり",
- "effect": "電気を 帯びた ほっぺを すりつけて 攻撃。 相手を まひ状態に する。"
+ "effect": "電気を 帯びた ほっぺを すりつけて 攻撃。 相手を まひ状態に する。"
},
"holdBack": {
"name": "てかげん",
- "effect": "手加減 した 攻撃で 相手の HPを 必ず 1だけ 残す。"
+ "effect": "手加減 した 攻撃で 相手の HPを 必ず 1だけ 残す。"
},
"infestation": {
"name": "まとわりつく",
- "effect": "4ー5ターンの 間 相手に まとわりついて 攻撃する。 そのあいだ 相手は 逃げられない。"
+ "effect": "4ー5ターンの 間 相手に まとわりついて 攻撃する。 そのあいだ 相手は 逃げられない。"
},
"powerUpPunch": {
"name": "グロウパンチ",
- "effect": "繰り返し 打つことで だんだん こぶしが 固くなる。 相手に 当てると 攻撃が あがる。"
+ "effect": "繰り返し 打つことで だんだん こぶしが 固くなる。 相手に 当てると 攻撃が あがる。"
},
"oblivionWing": {
"name": "デスウイング",
- "effect": "ねらいを 定めた 相手から HPを 吸い取る。 与えた ダメージの 半分以上 HPを 回復する。"
+ "effect": "ねらいを 定めた 相手から HPを 吸い取る。 与えた ダメージの 半分以上 HPを 回復する。"
},
"thousandArrows": {
"name": "サウザンアロー",
- "effect": "浮いている ポケモンにも 当たる。 浮いていた 相手は 撃ち落とされて 地面に 落ちる。"
+ "effect": "浮いている ポケモンにも 当たる。 浮いていた 相手は 撃ち落とされて 地面に 落ちる。"
},
"thousandWaves": {
"name": "サウザンウェーブ",
- "effect": "地をはう 波によって 攻撃。 波に 巻き込まれた 相手は 戦闘から 逃げられなくなる。"
+ "effect": "地をはう 波によって 攻撃。 波に 巻き込まれた 相手は 戦闘から 逃げられなくなる。"
},
"landsWrath": {
"name": "グランドフォース",
- "effect": "大地の パワーを 集め 力を 相手に 集中させて ダメージを 与える。"
+ "effect": "大地の パワーを 集め 力を 相手に 集中させて ダメージを 与える。"
},
"lightOfRuin": {
"name": "はめつのひかり",
- "effect": "永遠の花 の パワーを かりて 強力な 光線を 撃ちだす。 自分も かなりの ダメージを 受ける。"
+ "effect": "永遠の花 の パワーを かりて 強力な 光線を 撃ちだす。 自分も かなりの ダメージを 受ける。"
},
"originPulse": {
"name": "こんげんのはどう",
- "effect": "青白く 輝く 無数の 光線で 相手を 攻撃する。"
+ "effect": "青白く 輝く 無数の 光線で 相手を 攻撃する。"
},
"precipiceBlades": {
"name": "だんがいのつるぎ",
- "effect": "大地の 力を 刃に 変えて 相手を 攻撃する。"
+ "effect": "大地の 力を 刃に 変えて 相手を 攻撃する。"
},
"dragonAscent": {
"name": "ガリョウテンセイ",
- "effect": "大空から 急速落下 して 相手を 攻撃する。 自分の 防御と 特防が さがる。"
+ "effect": "大空から 急速落下 して 相手を 攻撃する。 自分の 防御と 特防が さがる。"
},
"hyperspaceFury": {
"name": "いじげんラッシュ",
- "effect": "たくさんの 腕で まもるや みきり などを 無視した 連続攻撃。 自分の 防御が さがる。"
+ "effect": "たくさんの 腕で まもるや みきり などを 無視した 連続攻撃。 自分の 防御が さがる。"
},
"breakneckBlitzPhysical": {
"name": "ウルトラダッシュアタック",
- "effect": "Zパワーで 勢いを つけて 全力で 相手に ぶつかる。 元になった 技で 威力が 変わる。"
+ "effect": "Zパワーで 勢いを つけて 全力で 相手に ぶつかる。 元になった 技で 威力が 変わる。"
},
"breakneckBlitzSpecial": {
"name": "ウルトラダッシュアタック",
@@ -2493,7 +2493,7 @@
},
"allOutPummelingPhysical": {
"name": "ぜんりょくむそうげきれつけん",
- "effect": "Zパワーで 作った エネルギーの 弾を 全力で 相手に ぶつける。 元になった 技で 威力が 変わる。"
+ "effect": "Zパワーで 作った エネルギーの 弾を 全力で 相手に ぶつける。 元になった 技で 威力が 変わる。"
},
"allOutPummelingSpecial": {
"name": "ぜんりょくむそうげきれつけん",
@@ -2501,7 +2501,7 @@
},
"supersonicSkystrikePhysical": {
"name": "ファイナルダイブクラッシュ",
- "effect": "Zパワーで 勢いよく 飛びあがり 相手に 向かって 全力で 落下。 元になった 技で 威力が 変わる。"
+ "effect": "Zパワーで 勢いよく 飛びあがり 相手に 向かって 全力で 落下。 元になった 技で 威力が 変わる。"
},
"supersonicSkystrikeSpecial": {
"name": "ファイナルダイブクラッシュ",
@@ -2509,7 +2509,7 @@
},
"acidDownpourPhysical": {
"name": "アシッドポイズンデリート",
- "effect": "Zパワーで 毒の 沼を 湧きあがらせ 全力で 相手を 沈める。 元になった 技で 威力が 変わる。"
+ "effect": "Zパワーで 毒の 沼を 湧きあがらせ 全力で 相手を 沈める。 元になった 技で 威力が 変わる。"
},
"acidDownpourSpecial": {
"name": "アシッドポイズンデリート",
@@ -2517,7 +2517,7 @@
},
"tectonicRagePhysical": {
"name": "ライジングランドオーバー",
- "effect": "Zパワーで 地面の 奥深くに 潜り 全力で 相手に ぶつかる。 元になった 技で 威力が 変わる。"
+ "effect": "Zパワーで 地面の 奥深くに 潜り 全力で 相手に ぶつかる。 元になった 技で 威力が 変わる。"
},
"tectonicRageSpecial": {
"name": "ライジングランドオーバー",
@@ -2525,7 +2525,7 @@
},
"continentalCrushPhysical": {
"name": "ワールズエンドフォール",
- "effect": "Zパワーで 大きな 岩山を 呼びだし 全力で 相手に ぶつける。 元になった 技で 威力が 変わる。"
+ "effect": "Zパワーで 大きな 岩山を 呼びだし 全力で 相手に ぶつける。 元になった 技で 威力が 変わる。"
},
"continentalCrushSpecial": {
"name": "ワールズエンドフォール",
@@ -2533,7 +2533,7 @@
},
"savageSpinOutPhysical": {
"name": "ぜったいほしょくかいてんざん",
- "effect": "Zパワーで 吐きだした 糸が 全力で 相手を 縛りつける。 元になった 技で 威力が 変わる。"
+ "effect": "Zパワーで 吐きだした 糸が 全力で 相手を 縛りつける。 元になった 技で 威力が 変わる。"
},
"savageSpinOutSpecial": {
"name": "ぜったいほしょくかいてんざん",
@@ -2541,7 +2541,7 @@
},
"neverEndingNightmarePhysical": {
"name": "むげんあんやへのいざない",
- "effect": "Zパワーで 呼びよせた 強い 怨念が 全力で 相手に 降りかかる。 元になった 技で 威力が 変わる。"
+ "effect": "Zパワーで 呼びよせた 強い 怨念が 全力で 相手に 降りかかる。 元になった 技で 威力が 変わる。"
},
"neverEndingNightmareSpecial": {
"name": "むげんあんやへのいざない",
@@ -2549,7 +2549,7 @@
},
"corkscrewCrashPhysical": {
"name": "ちょうぜつらせんれんげき",
- "effect": "Zパワーで 高速回転を おこない 全力で 相手に ぶつかる。 元になった 技で 威力が 変わる。"
+ "effect": "Zパワーで 高速回転を おこない 全力で 相手に ぶつかる。 元になった 技で 威力が 変わる。"
},
"corkscrewCrashSpecial": {
"name": "ちょうぜつらせんれんげき",
@@ -2557,7 +2557,7 @@
},
"infernoOverdrivePhysical": {
"name": "ダイナミックフルフレイム",
- "effect": "Zパワーで 燃えさかる 炎を 吐きだし 全力で 相手に ぶつける。 元になった 技で 威力が 変わる。"
+ "effect": "Zパワーで 燃えさかる 炎を 吐きだし 全力で 相手に ぶつける。 元になった 技で 威力が 変わる。"
},
"infernoOverdriveSpecial": {
"name": "ダイナミックフルフレイム",
@@ -2565,7 +2565,7 @@
},
"hydroVortexPhysical": {
"name": "スーパーアクアトルネード",
- "effect": "Zパワーで 大きな 渦潮を 作り 全力で 相手を 飲みこむ。 元になった 技で 威力が 変わる。"
+ "effect": "Zパワーで 大きな 渦潮を 作り 全力で 相手を 飲みこむ。 元になった 技で 威力が 変わる。"
},
"hydroVortexSpecial": {
"name": "スーパーアクアトルネード",
@@ -2573,7 +2573,7 @@
},
"bloomDoomPhysical": {
"name": "ブルームシャインエクストラ",
- "effect": "Zパワーで 草花の エネルギーを 借り 全力で 相手を 攻撃する。 元になった 技で 威力が 変わる。"
+ "effect": "Zパワーで 草花の エネルギーを 借り 全力で 相手を 攻撃する。 元になった 技で 威力が 変わる。"
},
"bloomDoomSpecial": {
"name": "ブルームシャインエクストラ",
@@ -2581,7 +2581,7 @@
},
"gigavoltHavocPhysical": {
"name": "スパーキングギガボルト",
- "effect": "Zパワーで 溜めた 強い 電気を 全力で 相手に ぶつける。 元になった 技で 威力が 変わる。"
+ "effect": "Zパワーで 溜めた 強い 電気を 全力で 相手に ぶつける。 元になった 技で 威力が 変わる。"
},
"gigavoltHavocSpecial": {
"name": "スパーキングギガボルト",
@@ -2589,7 +2589,7 @@
},
"shatteredPsychePhysical": {
"name": "マキシマムサイブレイカー",
- "effect": "Zパワーで 相手を 操り 全力で 痛い 思いを させる。 元になった 技で 威力が 変わる。"
+ "effect": "Zパワーで 相手を 操り 全力で 痛い 思いを させる。 元になった 技で 威力が 変わる。"
},
"shatteredPsycheSpecial": {
"name": "マキシマムサイブレイカー",
@@ -2597,7 +2597,7 @@
},
"subzeroSlammerPhysical": {
"name": "レイジングジオフリーズ",
- "effect": "Zパワーで 気温を 急激に 下げ 全力で 相手を 凍らせる。 元になった 技で 威力が 変わる。"
+ "effect": "Zパワーで 気温を 急激に 下げ 全力で 相手を 凍らせる。 元になった 技で 威力が 変わる。"
},
"subzeroSlammerSpecial": {
"name": "レイジングジオフリーズ",
@@ -2605,7 +2605,7 @@
},
"devastatingDrakePhysical": {
"name": "アルティメットドラゴンバーン",
- "effect": "Zパワーで オーラを 実体化し 全力で 相手に 襲いかかる。 元になった 技で 威力が 変わる。"
+ "effect": "Zパワーで オーラを 実体化し 全力で 相手に 襲いかかる。 元になった 技で 威力が 変わる。"
},
"devastatingDrakeSpecial": {
"name": "アルティメットドラゴンバーン",
@@ -2613,7 +2613,7 @@
},
"blackHoleEclipsePhysical": {
"name": "ブラックホールイクリプス",
- "effect": "Zパワーで 悪の エネルギーを 集め 全力で 相手を 吸いよせる。 元になった 技で 威力が 変わる。"
+ "effect": "Zパワーで 悪の エネルギーを 集め 全力で 相手を 吸いよせる。 元になった 技で 威力が 変わる。"
},
"blackHoleEclipseSpecial": {
"name": "ブラックホールイクリプス",
@@ -2621,7 +2621,7 @@
},
"twinkleTacklePhysical": {
"name": "ラブリースターインパクト",
- "effect": "Zパワーで 魅惑の 空間を 作り 全力で 相手を もてあそぶ。 元になった 技で 威力が 変わる。"
+ "effect": "Zパワーで 魅惑の 空間を 作り 全力で 相手を もてあそぶ。 元になった 技で 威力が 変わる。"
},
"twinkleTackleSpecial": {
"name": "ラブリースターインパクト",
@@ -2629,1182 +2629,1182 @@
},
"catastropika": {
"name": "ひっさつのピカチュート",
- "effect": "Zパワーで 最大 電力を 身に まとったピカチュウが 全力で 相手に 飛び掛る。"
+ "effect": "Zパワーで 最大 電力を 身に まとったピカチュウが 全力で 相手に 飛び掛る。"
},
"shoreUp": {
"name": "すなあつめ",
- "effect": "最大HPの 半分 自分の HPを 回復する。 すなあらしの時は 多く 回復。"
+ "effect": "最大HPの 半分 自分の HPを 回復する。 すなあらしの時は 多く 回復。"
},
"firstImpression": {
"name": "であいがしら",
- "effect": "威力が 高い 技 だが 戦闘に 出たら すぐに 出さないと 成功 しない。"
+ "effect": "威力が 高い 技 だが 戦闘に 出たら すぐに 出さないと 成功 しない。"
},
"banefulBunker": {
"name": "トーチカ",
- "effect": "相手の 攻撃を 防ぐと 同時に 触れた 相手に 毒を 与えてしまう。"
+ "effect": "相手の 攻撃を 防ぐと 同時に 触れた 相手に 毒を 与えてしまう。"
},
"spiritShackle": {
"name": "かげぬい",
- "effect": "攻撃と 同時に 相手の 影を 縫い付けて 逃げられなくする。"
+ "effect": "攻撃と 同時に 相手の 影を 縫い付けて 逃げられなくする。"
},
"darkestLariat": {
"name": "DDラリアット",
- "effect": "両腕を 回し 相手に 当てる。 相手の 能力変化に 関係なく ダメージを 与える。"
+ "effect": "両腕を 回し 相手に 当てる。 相手の 能力変化に 関係なく ダメージを 与える。"
},
"sparklingAria": {
"name": "うたかたのアリア",
- "effect": "歌うことによって たくさんの バルーンを 放出する。 技を 受けると やけどが 治る。"
+ "effect": "歌うことによって たくさんの バルーンを 放出する。 技を 受けると やけどが 治る。"
},
"iceHammer": {
"name": "アイスハンマー",
- "effect": "強くて 重い こぶしを ふるって ダメージを 与える。 自分の 素早さが さがる。"
+ "effect": "強くて 重い こぶしを ふるって ダメージを 与える。 自分の 素早さが さがる。"
},
"floralHealing": {
"name": "フラワーヒール",
- "effect": "最大HPの 半分 相手の HPを 回復する。 グラスフィールドの時 効果が あがる。"
+ "effect": "最大HPの 半分 相手の HPを 回復する。 グラスフィールドの時 効果が あがる。"
},
"highHorsepower": {
"name": "10まんばりき",
- "effect": "全身を 使って 相手に 猛アタックする。"
+ "effect": "全身を 使って 相手に 猛アタックする。"
},
"strengthSap": {
"name": "ちからをすいとる",
- "effect": "相手の 攻撃力と 同じだけ 自分の HPを 回復する。 そして 相手の 攻撃を さげる。"
+ "effect": "相手の 攻撃力と 同じだけ 自分の HPを 回復する。 そして 相手の 攻撃を さげる。"
},
"solarBlade": {
"name": "ソーラーブレード",
- "effect": "1ターン目に 光を いっぱいに 集め 2ターン目に その 力を 剣に 込めて 攻撃する。"
+ "effect": "1ターン目に 光を いっぱいに 集め 2ターン目に その 力を 剣に 込めて 攻撃する。"
},
"leafage": {
"name": "このは",
- "effect": "はっぱを 相手に 当てて 攻撃する。"
+ "effect": "はっぱを 相手に 当てて 攻撃する。"
},
"spotlight": {
"name": "スポットライト",
- "effect": "ポケモンに スポットライトを 当て そのターンに そのポケモンしか 狙えない ようにする。"
+ "effect": "ポケモンに スポットライトを 当て そのターンに そのポケモンしか 狙えない ようにする。"
},
"toxicThread": {
"name": "どくのいと",
- "effect": "毒の 混じった 糸を 吹き付ける。 相手を 毒にして 素早さを さげる。"
+ "effect": "毒の 混じった 糸を 吹き付ける。 相手を 毒にして 素早さを さげる。"
},
"laserFocus": {
"name": "とぎすます",
- "effect": "精神を 集中して 次の 攻撃を 必ず 急所に 当てる。"
+ "effect": "精神を 集中して 次の 攻撃を 必ず 急所に 当てる。"
},
"gearUp": {
"name": "アシストギア",
- "effect": "ギアを 入れる ことによって 特性 プラスと マイナスの 攻撃と 特攻が あがる。"
+ "effect": "ギアを 入れる ことによって 特性 プラスと マイナスの 攻撃と 特攻が あがる。"
},
"throatChop": {
"name": "じごくづき",
- "effect": "この 技を 受けた 相手は 地獄の 苦しみから 2ターンの間 音の 技を 出すことが できなくなる。"
+ "effect": "この 技を 受けた 相手は 地獄の 苦しみから 2ターンの間 音の 技を 出すことが できなくなる。"
},
"pollenPuff": {
"name": "かふんだんご",
- "effect": "敵には 爆発する だんごを 使って 攻撃。 味方には 回復する だんごを 与える。"
+ "effect": "敵には 爆発する だんごを 使って 攻撃。 味方には 回復する だんごを 与える。"
},
"anchorShot": {
"name": "アンカーショット",
- "effect": "アンカーを 相手に からませて 攻撃する。 相手は 逃げることが できなくなる。"
+ "effect": "アンカーを 相手に からませて 攻撃する。 相手は 逃げることが できなくなる。"
},
"psychicTerrain": {
"name": "サイコフィールド",
- "effect": "5ターンの間 地面にいると 先制技を 受けない。 エスパータイプの 威力が あがる。"
+ "effect": "5ターンの間 地面にいると 先制技を 受けない。 エスパータイプの 威力が あがる。"
},
"lunge": {
"name": "とびかかる",
- "effect": "全力で 相手に 飛びかかって 攻撃。 相手の 攻撃を さげる。"
+ "effect": "全力で 相手に 飛びかかって 攻撃。 相手の 攻撃を さげる。"
},
"fireLash": {
"name": "ほのおのムチ",
- "effect": "焼けたムチで 相手を 打ちつける。 攻撃を 受けた 相手は 防御が さがる。"
+ "effect": "焼けたムチで 相手を 打ちつける。 攻撃を 受けた 相手は 防御が さがる。"
},
"powerTrip": {
"name": "つけあがる",
- "effect": "自分の 強さを 鼻高々に 攻撃する。自分の 能力が あがって いるほど 威力が あがる。"
+ "effect": "自分の 強さを 鼻高々に 攻撃する。自分の 能力が あがって いるほど 威力が あがる。"
},
"burnUp": {
"name": "もえつきる",
- "effect": "全身の ほのおを すべて 燃やして 大ダメージを 与える。 自分の ほのおタイプが なくなる。"
+ "effect": "全身の ほのおを すべて 燃やして 大ダメージを 与える。 自分の ほのおタイプが なくなる。"
},
"speedSwap": {
"name": "スピードスワップ",
- "effect": "相手の 素早さと 自分の 素早さを 入れ替えてしまう。"
+ "effect": "相手の 素早さと 自分の 素早さを 入れ替えてしまう。"
},
"smartStrike": {
"name": "スマートホーン",
- "effect": "とがった つので 相手を 突き刺して 攻撃する。 攻撃は 必ず 命中する。"
+ "effect": "とがった つので 相手を 突き刺して 攻撃する。 攻撃は 必ず 命中する。"
},
"purify": {
"name": "じょうか",
- "effect": "相手の 状態異常を 治す。 治すと 自分は HPを 回復 することが できる。"
+ "effect": "相手の 状態異常を 治す。 治すと 自分は HPを 回復 することが できる。"
},
"revelationDance": {
"name": "めざめるダンス",
- "effect": "全力で 踊って 攻撃する。 この 技の タイプは 自分の タイプと 同じになる。"
+ "effect": "全力で 踊って 攻撃する。 この 技の タイプは 自分の タイプと 同じになる。"
},
"coreEnforcer": {
"name": "コアパニッシャー",
- "effect": "ダメージを 与えた 相手が すでに 行動を 終えていたら 相手の 特性を 消してしまう。"
+ "effect": "ダメージを 与えた 相手が すでに 行動を 終えていたら 相手の 特性を 消してしまう。"
},
"tropKick": {
"name": "トロピカルキック",
- "effect": "南国 由来の 熱い キックを 相手に 浴びせる。 相手の 攻撃を さげる。"
+ "effect": "南国 由来の 熱い キックを 相手に 浴びせる。 相手の 攻撃を さげる。"
},
"instruct": {
"name": "さいはい",
- "effect": "相手が 出した 技を 指示して もう一度 出させることが できる。"
+ "effect": "相手が 出した 技を 指示して もう一度 出させることが できる。"
},
"beakBlast": {
"name": "くちばしキャノン",
- "effect": "最初に クチバシを 加熱してから 攻撃を くりだす。 加熱中に さわると やけどする。"
+ "effect": "最初に クチバシを 加熱してから 攻撃を くりだす。 加熱中に さわると やけどする。"
},
"clangingScales": {
"name": "スケイルノイズ",
- "effect": "全身の うろこを こすり 大きな 音を 出して 攻撃する。 攻撃後 自分の 防御が さがる。"
+ "effect": "全身の うろこを こすり 大きな 音を 出して 攻撃する。 攻撃後 自分の 防御が さがる。"
},
"dragonHammer": {
"name": "ドラゴンハンマー",
- "effect": "体を ハンマーのように 使って 相手に 襲いかかり ダメージを 与える。"
+ "effect": "体を ハンマーのように 使って 相手に 襲いかかり ダメージを 与える。"
},
"brutalSwing": {
"name": "ぶんまわす",
- "effect": "自分の 体を ぶんまわして 相手に ダメージを 与える。"
+ "effect": "自分の 体を ぶんまわして 相手に ダメージを 与える。"
},
"auroraVeil": {
"name": "オーロラベール",
- "effect": "5ターンの 間 物理と 特殊の ダメージを 弱める。 ゆきの 時しか 出すことが できない。"
+ "effect": "5ターンの 間 物理と 特殊の ダメージを 弱める。 ゆきの 時しか 出すことが できない。"
},
"sinisterArrowRaid": {
"name": "シャドーアローズストライク",
- "effect": "Zパワーで 無数の 矢を 作りだした ジュナイパーが 全力で 相手を 射抜く 攻撃。"
+ "effect": "Zパワーで 無数の 矢を 作りだした ジュナイパーが 全力で 相手を 射抜く 攻撃。"
},
"maliciousMoonsault": {
"name": "ハイパーダーククラッシャー",
- "effect": "Zパワーで タフな 肉体を 得た ガオガエンが 全力で 相手に ぶつかって 攻撃する。"
+ "effect": "Zパワーで タフな 肉体を 得た ガオガエンが 全力で 相手に ぶつかって 攻撃する。"
},
"oceanicOperetta": {
"name": "わだつみのシンフォニア",
- "effect": "Zパワーで 大量の 水を 呼んだ アシレーヌが 全力で 相手を 攻撃する。"
+ "effect": "Zパワーで 大量の 水を 呼んだ アシレーヌが 全力で 相手を 攻撃する。"
},
"guardianOfAlola": {
"name": "ガーディアン・デ・アローラ",
- "effect": "Zパワーで アローラの 力を 得た とちがみポケモン 全力の 攻撃。 相手の 残りHPを たくさん 減らす。"
+ "effect": "Zパワーで アローラの 力を 得た とちがみポケモン 全力の 攻撃。 相手の 残りHPを たくさん 減らす。"
},
"soulStealing7StarStrike": {
"name": "しちせいだっこんたい",
- "effect": "Zパワーを 得た マーシャドーが パンチと キックの 連続技を 全力で 相手に 叩き込む。"
+ "effect": "Zパワーを 得た マーシャドーが パンチと キックの 連続技を 全力で 相手に 叩き込む。"
},
"stokedSparksurfer": {
"name": "ライトニングサーフライド",
- "effect": "Zパワーを 得た アローラ地方の ライチュウが 全力で 攻撃する。 相手を まひ 状態に する。"
+ "effect": "Zパワーを 得た アローラ地方の ライチュウが 全力で 攻撃する。 相手を まひ 状態に する。"
},
"pulverizingPancake": {
- "name": "ほんきをだす こうげき",
- "effect": "Zパワーで 本気を 出した カビゴンが 巨体を 躍動させて 全力で 相手に 襲いかかる。"
+ "name": "ほんきをだす こうげき",
+ "effect": "Zパワーで 本気を 出した カビゴンが 巨体を 躍動させて 全力で 相手に 襲いかかる。"
},
"extremeEvoboost": {
"name": "ナインエボルブースト",
- "effect": "Zパワーを 得た イーブイが 進化した 仲間たちの 力を 借りて 能力を ぐーんと 上げる。"
+ "effect": "Zパワーを 得た イーブイが 進化した 仲間たちの 力を 借りて 能力を ぐーんと 上げる。"
},
"genesisSupernova": {
"name": "オリジンズスーパーノヴァ",
- "effect": "Zパワーを 得た ミュウが 全力で 相手を 攻撃する。 足元が サイコフィールドになる。"
+ "effect": "Zパワーを 得た ミュウが 全力で 相手を 攻撃する。 足元が サイコフィールドになる。"
},
"shellTrap": {
"name": "トラップシェル",
- "effect": "こうらの トラップを しかける。 相手が 物理技を 出すと 爆発して ダメージを 与える。"
+ "effect": "こうらの トラップを しかける。 相手が 物理技を 出すと 爆発して ダメージを 与える。"
},
"fleurCannon": {
"name": "フルールカノン",
- "effect": "強力な ビームを 放ったあと 自分の 特攻が がくっと さがる。"
+ "effect": "強力な ビームを 放ったあと 自分の 特攻が がくっと さがる。"
},
"psychicFangs": {
"name": "サイコファング",
- "effect": "サイコパワーで かみついて 相手を 攻撃する。 ひかりのかべや リフレクター なども 破壊できる。"
+ "effect": "サイコパワーで かみついて 相手を 攻撃する。 ひかりのかべや リフレクター なども 破壊できる。"
},
"stompingTantrum": {
"name": "じだんだ",
- "effect": "悔しさを バネにして 攻撃する。 前の ターンに 技を 外していると 威力が 倍に なる。"
+ "effect": "悔しさを バネにして 攻撃する。 前の ターンに 技を 外していると 威力が 倍に なる。"
},
"shadowBone": {
"name": "シャドーボーン",
- "effect": "魂の 宿った ホネで 相手を なぐりつけて 攻撃する。 相手の 防御を さげる ことがある。"
+ "effect": "魂の 宿った ホネで 相手を なぐりつけて 攻撃する。 相手の 防御を さげる ことがある。"
},
"accelerock": {
"name": "アクセルロック",
- "effect": "素早い スピードで 相手に ぶつかって 攻撃する。 必ず 先制攻撃 できる。"
+ "effect": "素早い スピードで 相手に ぶつかって 攻撃する。 必ず 先制攻撃 できる。"
},
"liquidation": {
"name": "アクアブレイク",
- "effect": "水の 力で 相手に ぶつかって 攻撃する。 相手の 防御を さげる ことがある。"
+ "effect": "水の 力で 相手に ぶつかって 攻撃する。 相手の 防御を さげる ことがある。"
},
"prismaticLaser": {
"name": "プリズムレーザー",
- "effect": "プリズムの 力で 強力な 光線を 発射する。 次の ターンは 動けなくなる。"
+ "effect": "プリズムの 力で 強力な 光線を 発射する。 次の ターンは 動けなくなる。"
},
"spectralThief": {
"name": "シャドースチール",
- "effect": "相手の 影に 潜り込み 相手の 能力アップを 奪って 攻撃する。"
+ "effect": "相手の 影に 潜り込み 相手の 能力アップを 奪って 攻撃する。"
},
"sunsteelStrike": {
"name": "メテオドライブ",
- "effect": "流星の ような 勢いで 突進する。 相手の 特性を 無視して 攻撃 することが できる。"
+ "effect": "流星の ような 勢いで 突進する。 相手の 特性を 無視して 攻撃 することが できる。"
},
"moongeistBeam": {
"name": "シャドーレイ",
- "effect": "怪しい 光線を 放って 攻撃する。相手の 特性を 無視して 攻撃 することが できる。"
+ "effect": "怪しい 光線を 放って 攻撃する。相手の 特性を 無視して 攻撃 することが できる。"
},
"tearfulLook": {
"name": "なみだめ",
- "effect": "なみだめに なって 相手の 戦力を 喪失させる。 相手の 攻撃と 特攻が さがる。"
+ "effect": "なみだめに なって 相手の 戦力を 喪失させる。 相手の 攻撃と 特攻が さがる。"
},
"zingZap": {
"name": "びりびりちくちく",
- "effect": "相手に ぶつかって 強力な 電気を浴びせ びりびりちくちく させる。 相手を ひるませる ことが ある。"
+ "effect": "相手に ぶつかって 強力な 電気を浴びせ びりびりちくちく させる。 相手を ひるませる ことが ある。"
},
"naturesMadness": {
"name": "しぜんのいかり",
- "effect": "自然の 怒りを 相手に ぶつける。 相手の HPは 半分に なる。"
+ "effect": "自然の 怒りを 相手に ぶつける。 相手の HPは 半分に なる。"
},
"multiAttack": {
"name": "マルチアタック",
- "effect": "高い エネルギーを まといつつ 相手に ぶつかって 攻撃する。 メモリに より タイプが 変わる。"
+ "effect": "高い エネルギーを まといつつ 相手に ぶつかって 攻撃する。 メモリに より タイプが 変わる。"
},
"tenMillionVoltThunderbolt": {
"name": "1000まんボルト",
- "effect": "帽子を かぶった ピカチュウが Zパワーで パワーアップした 電撃を 放つ。 急所に 当たりやすい。"
+ "effect": "帽子を かぶった ピカチュウが Zパワーで パワーアップした 電撃を 放つ。 急所に 当たりやすい。"
},
"mindBlown": {
"name": "ビックリヘッド",
- "effect": "自分の 頭を 爆発 させて 周りの すべてを 攻撃する。 自分も ダメージを 受けてしまう。"
+ "effect": "自分の 頭を 爆発 させて 周りの すべてを 攻撃する。 自分も ダメージを 受けてしまう。"
},
"plasmaFists": {
"name": "プラズマフィスト",
- "effect": "電気を まとった こぶしで 攻撃。 ノーマルタイプの 技を でんきタイプに してしまう。"
+ "effect": "電気を まとった こぶしで 攻撃。 ノーマルタイプの 技を でんきタイプに してしまう。"
},
"photonGeyser": {
"name": "フォトンゲイザー",
- "effect": "光の 柱で 攻撃する。 攻撃と 特攻を 比べて 高いほうで ダメージを 与える。"
+ "effect": "光の 柱で 攻撃する。 攻撃と 特攻を 比べて 高いほうで ダメージを 与える。"
},
"lightThatBurnsTheSky": {
"name": "てんこがすめつぼうのひかり",
- "effect": "ネクロズマが 相手の 特性の 効果を 無視して 攻撃と 特攻の 高い方で ダメージを 与える。"
+ "effect": "ネクロズマが 相手の 特性の 効果を 無視して 攻撃と 特攻の 高い方で ダメージを 与える。"
},
"searingSunrazeSmash": {
"name": "サンシャインスマッシャー",
- "effect": "Zパワーを 得た ソルガレオが 全力で 攻撃する。 相手の 特性の 効果を 無視できる。"
+ "effect": "Zパワーを 得た ソルガレオが 全力で 攻撃する。 相手の 特性の 効果を 無視できる。"
},
"menacingMoonrazeMaelstrom": {
"name": "ムーンライトブラスター",
- "effect": "Zパワーを 得た ルナアーラが 全力で 攻撃する。 相手の 特性の 効果を 無視できる。"
+ "effect": "Zパワーを 得た ルナアーラが 全力で 攻撃する。 相手の 特性の 効果を 無視できる。"
},
"letsSnuggleForever": {
"name": "ぽかぼかフレンドタイム",
- "effect": "Zパワーを 得た ミミッキュが 全力で ぽかぽか 攻撃。"
+ "effect": "Zパワーを 得た ミミッキュが 全力で ぽかぽか 攻撃。"
},
"splinteredStormshards": {
"name": "ラジアルエッジストーム",
- "effect": "Zパワーを 得た ルガルガンが 全力で 攻撃する。 追加で フィールド状態を 打ち消す。"
+ "effect": "Zパワーを 得た ルガルガンが 全力で 攻撃する。 追加で フィールド状態を 打ち消す。"
},
"clangorousSoulblaze": {
"name": "ブレイジングソウルビート",
- "effect": "Zパワーを 得た ジャラランガが 全力で 相手を 攻撃する。 追加で 自分の 能力が 上がる。"
+ "effect": "Zパワーを 得た ジャラランガが 全力で 相手を 攻撃する。 追加で 自分の 能力が 上がる。"
},
"zippyZap": {
"name": "ばちばちアクセル",
- "effect": "猛スピードの 電撃 アタック。 必ず 先制攻撃 できて 急所に あたる。"
+ "effect": "猛スピードの 電撃 アタック。 必ず 先制攻撃 できて 急所に あたる。"
},
"splishySplash": {
"name": "ざぶざぶサーフ",
- "effect": "大きな 波に 電気を あびせ 相手に ぶつけて 攻撃する。 まひ状態に することが ある。"
+ "effect": "大きな 波に 電気を あびせ 相手に ぶつけて 攻撃する。 まひ状態に することが ある。"
},
"floatyFall": {
"name": "ふわふわフォール",
- "effect": "ふんわりと 浮かび あがり 一気に 急降下して 攻撃。 相手を ひるませることが ある。"
+ "effect": "ふんわりと 浮かび あがり 一気に 急降下して 攻撃。 相手を ひるませることが ある。"
},
"pikaPapow": {
"name": "ピカピカサンダー",
- "effect": "トレーナーへの 大好きな 気持ちが 強いほど 威力が あがる 電撃。 必ず 命中する。"
+ "effect": "トレーナーへの 大好きな 気持ちが 強いほど 威力が あがる 電撃。 必ず 命中する。"
},
"bouncyBubble": {
"name": "いきいきバブル",
- "effect": "水のかたまりを ぶつけて 攻撃。 水を 吸いとり ダメージの 半分の HPを 回復する。"
+ "effect": "水のかたまりを ぶつけて 攻撃。 水を 吸いとり ダメージの 半分の HPを 回復する。"
},
"buzzyBuzz": {
"name": "びりびりエレキ",
- "effect": "電気を 飛ばし 相手に あびせて 攻撃する。 相手を まひ状態に する。"
+ "effect": "電気を 飛ばし 相手に あびせて 攻撃する。 相手を まひ状態に する。"
},
"sizzlySlide": {
"name": "めらめらバーン",
- "effect": "炎を まとった 体で 勢いよく 相手に ぶつかる。 相手を やけど状態に する。"
+ "effect": "炎を まとった 体で 勢いよく 相手に ぶつかる。 相手を やけど状態に する。"
},
"glitzyGlow": {
"name": "どばどばオーラ",
- "effect": "念力を これでもかと あびせる。 相手の 特殊攻撃を 弱める 不思議な かべを つくりだす。"
+ "effect": "念力を これでもかと あびせる。 相手の 特殊攻撃を 弱める 不思議な かべを つくりだす。"
},
"baddyBad": {
"name": "わるわるゾーン",
- "effect": "わるさを アピールして 攻撃。 相手の 物理攻撃を 弱める 不思議な かべを つくりだす。"
+ "effect": "わるさを アピールして 攻撃。 相手の 物理攻撃を 弱める 不思議な かべを つくりだす。"
},
"sappySeed": {
"name": "すくすくボンバー",
- "effect": "巨大な ツルを 生やし タネを 撒きちらかして 攻撃する。 タネは 毎ターン 相手の HPを 吸いとる。"
+ "effect": "巨大な ツルを 生やし タネを 撒きちらかして 攻撃する。 タネは 毎ターン 相手の HPを 吸いとる。"
},
"freezyFrost": {
"name": "こちこちフロスト",
- "effect": "冷たく 凍った くろいきりの 結晶で 攻撃。 全員の 能力変化を もとに もどす。"
+ "effect": "冷たく 凍った くろいきりの 結晶で 攻撃。 全員の 能力変化を もとに もどす。"
},
"sparklySwirl": {
"name": "きらきらストーム",
- "effect": "むせかえる ような 香りの 竜巻で 相手を つつんで 攻撃。 味方の 状態異常を 回復する。"
+ "effect": "むせかえる ような 香りの 竜巻で 相手を つつんで 攻撃。 味方の 状態異常を 回復する。"
},
"veeveeVolley": {
"name": "ブイブイブレイク",
- "effect": "イーブイの トレーナーへの 大好きな 気持ちが 強いほど 威力が あがる 体当たり。 必ず 命中する。"
+ "effect": "イーブイの トレーナーへの 大好きな 気持ちが 強いほど 威力が あがる 体当たり。 必ず 命中する。"
},
"doubleIronBash": {
"name": "ダブルパンツァー",
- "effect": "胸の ナットを 軸に 回転して 2回 続けて うでを たたきつける。 相手を ひるませる ことが ある。"
+ "effect": "胸の ナットを 軸に 回転して 2回 続けて うでを たたきつける。 相手を ひるませる ことが ある。"
},
"maxGuard": {
"name": "ダイウォール",
- "effect": "相手の 攻撃を まったく 受けない。 連続で だすと 失敗しやすい。"
+ "effect": "相手の 攻撃を まったく 受けない。 連続で だすと 失敗しやすい。"
},
"dynamaxCannon": {
"name": "ダイマックスほう",
- "effect": "コアから ビームを 放つ。相手の レベルが 過度に 上がっている 場合は 与える ダメージが 最大 2倍に 増える。"
+ "effect": "コアから ビームを 放つ。相手の レベルが 過度に 上がっている 場合は 与える ダメージが 最大 2倍に 増える。"
},
"snipeShot": {
"name": "ねらいうち",
- "effect": "相手の 技を 引き受ける 特性や 技の 影響を 無視して 選んだ 相手を 攻撃 できる。"
+ "effect": "相手の 技を 引き受ける 特性や 技の 影響を 無視して 選んだ 相手を 攻撃 できる。"
},
"jawLock": {
"name": "くらいつく",
- "effect": "お互い ひんしに なるまで 交代が できなくなる。 どちらかの ポケモンが いなくなると 効果は消える。"
+ "effect": "お互い ひんしに なるまで 交代が できなくなる。 どちらかの ポケモンが いなくなると 効果は消える。"
},
"stuffCheeks": {
"name": "ほおばる",
- "effect": "持っている きのみを 食べて 防御を ぐーんと あげる。"
+ "effect": "持っている きのみを 食べて 防御を ぐーんと あげる。"
},
"noRetreat": {
"name": "はいすいのじん",
- "effect": "自分の すべての 能力が 上がるが 交代 したり 逃げることが できなくなる。"
+ "effect": "自分の すべての 能力が 上がるが 交代 したり 逃げることが できなくなる。"
},
"tarShot": {
"name": "タールショット",
- "effect": "ねばねばの タールを 浴びせて 相手の 素早さを 下げる。 相手は ほのおが 弱点に なる。"
+ "effect": "ねばねばの タールを 浴びせて 相手の 素早さを 下げる。 相手は ほのおが 弱点に なる。"
},
"magicPowder": {
"name": "まほうのこな",
- "effect": "まほうのこなを 浴びせて 相手を エスパータイプに 変化させる。"
+ "effect": "まほうのこなを 浴びせて 相手を エスパータイプに 変化させる。"
},
"dragonDarts": {
"name": "ドラゴンアロー",
- "effect": "ドラメシヤで 2回 攻撃。 相手が 2匹 いるときは それぞれに 1回ずつ 攻撃する。"
+ "effect": "ドラメシヤで 2回 攻撃。 相手が 2匹 いるときは それぞれに 1回ずつ 攻撃する。"
},
"teatime": {
"name": "おちゃかい",
- "effect": "おちゃかいを ひらいて 場にいる ポケモンが それぞれ 持っている きのみを 食べる。"
+ "effect": "おちゃかいを ひらいて 場にいる ポケモンが それぞれ 持っている きのみを 食べる。"
},
"octolock": {
"name": "たこがため",
- "effect": "相手を 逃げられなくする。 かためられた 相手は 毎ターン 防御と 特防が 下がる。"
+ "effect": "相手を 逃げられなくする。 かためられた 相手は 毎ターン 防御と 特防が 下がる。"
},
"boltBeak": {
"name": "でんげきくちばし",
- "effect": "電気を まとった くちばしで 刺す。 相手より 先に 攻撃できると 技の 威力は 2倍に なる。"
+ "effect": "電気を まとった くちばしで 刺す。 相手より 先に 攻撃できると 技の 威力は 2倍に なる。"
},
"fishiousRend": {
"name": "エラがみ",
- "effect": "かたい エラで かみつく。 相手より 先に 攻撃できると 技の 威力は 2倍に なる。"
+ "effect": "かたい エラで かみつく。 相手より 先に 攻撃できると 技の 威力は 2倍に なる。"
},
"courtChange": {
"name": "コートチェンジ",
- "effect": "不思議な 力で お互いの 場の 効果を 入れ替える。"
+ "effect": "不思議な 力で お互いの 場の 効果を 入れ替える。"
},
"maxFlare": {
"name": "ダイバーン",
- "effect": "ダイマックスした ポケモンが 繰りだす ほのおタイプの 攻撃。 5ターンの 間 日差しを 強くする。"
+ "effect": "ダイマックスした ポケモンが 繰りだす ほのおタイプの 攻撃。 5ターンの 間 日差しを 強くする。"
},
"maxFlutterby": {
"name": "ダイワーム",
- "effect": "ダイマックスした ポケモンが 繰りだす むしタイプの 攻撃。 相手の 特攻を 下げる。"
+ "effect": "ダイマックスした ポケモンが 繰りだす むしタイプの 攻撃。 相手の 特攻を 下げる。"
},
"maxLightning": {
"name": "ダイサンダー",
- "effect": "ダイマックスした ポケモンが 繰りだす でんきタイプの 攻撃。 5ターンの 間 エレキフィールドにする。"
+ "effect": "ダイマックスした ポケモンが 繰りだす でんきタイプの 攻撃。 5ターンの 間 エレキフィールドにする。"
},
"maxStrike": {
"name": "ダイアタック",
- "effect": "ダイマックスした ポケモンが 繰りだす ノーマルタイプの 攻撃。 相手の 素早さを 下げる。"
+ "effect": "ダイマックスした ポケモンが 繰りだす ノーマルタイプの 攻撃。 相手の 素早さを 下げる。"
},
"maxKnuckle": {
"name": "ダイナックル",
- "effect": "ダイマックスした ポケモンが 繰りだす かくとうタイプの 攻撃。 味方の 攻撃を 上げる。"
+ "effect": "ダイマックスした ポケモンが 繰りだす かくとうタイプの 攻撃。 味方の 攻撃を 上げる。"
},
"maxPhantasm": {
"name": "ダイホロウ",
- "effect": "ダイマックスした ポケモンが 繰りだす ゴーストタイプの 攻撃。 相手の 防御を 下げる。"
+ "effect": "ダイマックスした ポケモンが 繰りだす ゴーストタイプの 攻撃。 相手の 防御を 下げる。"
},
"maxHailstorm": {
"name": "ダイアイス",
- "effect": "ダイマックスした ポケモンが 繰りだす こおりタイプの 攻撃。 5ターンの 間 あられを 降らす。"
+ "effect": "ダイマックスした ポケモンが 繰りだす こおりタイプの 攻撃。 5ターンの 間 あられを 降らす。"
},
"maxOoze": {
"name": "ダイアシッド",
- "effect": "ダイマックスした ポケモンが 繰りだす どくタイプの 攻撃。 味方の 特攻を 上げる。"
+ "effect": "ダイマックスした ポケモンが 繰りだす どくタイプの 攻撃。 味方の 特攻を 上げる。"
},
"maxGeyser": {
"name": "ダイストリーム",
- "effect": "ダイマックスした ポケモンが 繰りだす みずタイプの 攻撃。 5ターンの 間 雨を 降らせる。"
+ "effect": "ダイマックスした ポケモンが 繰りだす みずタイプの 攻撃。 5ターンの 間 雨を 降らせる。"
},
"maxAirstream": {
"name": "ダイジェット",
- "effect": "ダイマックスした ポケモンが 繰りだす ひこうタイプの 攻撃。 味方の 素早さを 上げる。"
+ "effect": "ダイマックスした ポケモンが 繰りだす ひこうタイプの 攻撃。 味方の 素早さを 上げる。"
},
"maxStarfall": {
"name": "ダイフェアリー",
- "effect": "ダイマックスした ポケモンが 繰りだす フェアリータイプの 攻撃。 5ターンの 間 ミストフィールドにする。"
+ "effect": "ダイマックスした ポケモンが 繰りだす フェアリータイプの 攻撃。 5ターンの 間 ミストフィールドにする。"
},
"maxWyrmwind": {
"name": "ダイドラグーン",
- "effect": "ダイマックスした ポケモンが 繰りだす ドラゴンタイプの 攻撃。 相手の 攻撃を 下げる。"
+ "effect": "ダイマックスした ポケモンが 繰りだす ドラゴンタイプの 攻撃。 相手の 攻撃を 下げる。"
},
"maxMindstorm": {
"name": "ダイサイコ",
- "effect": "ダイマックスした ポケモンが 繰りだす エスパータイプの 攻撃。 5ターンの 間 サイコフィールドにする。"
+ "effect": "ダイマックスした ポケモンが 繰りだす エスパータイプの 攻撃。 5ターンの 間 サイコフィールドにする。"
},
"maxRockfall": {
"name": "ダイロック",
- "effect": "ダイマックスした ポケモンが 繰りだす いわタイプの 攻撃。 5ターンの 間 砂あらしにする。"
+ "effect": "ダイマックスした ポケモンが 繰りだす いわタイプの 攻撃。 5ターンの 間 砂あらしにする。"
},
"maxQuake": {
"name": "ダイアース",
- "effect": "ダイマックスした ポケモンが 繰りだす じめんタイプの 攻撃。 味方の 特防を 上げる。"
+ "effect": "ダイマックスした ポケモンが 繰りだす じめんタイプの 攻撃。 味方の 特防を 上げる。"
},
"maxDarkness": {
"name": "ダイアーク",
- "effect": "ダイマックスした ポケモンが 繰りだす あくタイプの 攻撃。 相手の 特防を 下げる。"
+ "effect": "ダイマックスした ポケモンが 繰りだす あくタイプの 攻撃。 相手の 特防を 下げる。"
},
"maxOvergrowth": {
"name": "ダイソウゲン",
- "effect": "ダイマックスした ポケモンが 繰りだす くさタイプの 攻撃。 5ターンの 間 グラスフィールドにする。"
+ "effect": "ダイマックスした ポケモンが 繰りだす くさタイプの 攻撃。 5ターンの 間 グラスフィールドにする。"
},
"maxSteelspike": {
"name": "ダイスチル",
- "effect": "ダイマックスした ポケモンが 繰りだす はがねタイプの 攻撃。 味方の 防御を 上げる。"
+ "effect": "ダイマックスした ポケモンが 繰りだす はがねタイプの 攻撃。 味方の 防御を 上げる。"
},
"clangorousSoul": {
"name": "ソウルビート",
- "effect": "自分の HPを 少し 削って すべての 能力を 上げる。"
+ "effect": "自分の HPを 少し 削って すべての 能力を 上げる。"
},
"bodyPress": {
"name": "ボディプレス",
- "effect": "体を ぶつけて 攻撃。 防御が 高いほど 与える ダメージが 増える。"
+ "effect": "体を ぶつけて 攻撃。 防御が 高いほど 与える ダメージが 増える。"
},
"decorate": {
"name": "デコレーション",
- "effect": "かざりつけを することで 相手の 攻撃と 特攻を ぐーんと 上げる。"
+ "effect": "かざりつけを することで 相手の 攻撃と 特攻を ぐーんと 上げる。"
},
"drumBeating": {
"name": "ドラムアタック",
- "effect": "ドラムの 根っこを ドラミングで コントロールして こうげき することで 相手の 素早さを 下げる。"
+ "effect": "ドラムの 根っこを ドラミングで コントロールして こうげき することで 相手の 素早さを 下げる。"
},
"snapTrap": {
"name": "トラバサミ",
- "effect": "トラバサミで 捕らえて 4-5ターンの 間 相手を はさんで 攻撃する。"
+ "effect": "トラバサミで 捕らえて 4-5ターンの 間 相手を はさんで 攻撃する。"
},
"pyroBall": {
"name": "かえんボール",
- "effect": "小石を 燃やした 炎の ボールで 相手を 攻撃する。 やけど 状態に することが ある。"
+ "effect": "小石を 燃やした 炎の ボールで 相手を 攻撃する。 やけど 状態に することが ある。"
},
"behemothBlade": {
"name": "きょじゅうざん",
- "effect": "全身で 強大な剣を 振りかざし 勢いよく 切りかかって 攻撃する。"
+ "effect": "全身で 強大な剣を 振りかざし 勢いよく 切りかかって 攻撃する。"
},
"behemothBash": {
"name": "きょじゅうだん",
- "effect": "全身を 強固な盾へと 変化させ 勢いよく ぶつかって 攻撃する。"
+ "effect": "全身を 強固な盾へと 変化させ 勢いよく ぶつかって 攻撃する。"
},
"auraWheel": {
"name": "オーラぐるま",
- "effect": "ほほぶくろに 溜めた エネルギーで 攻撃し 自分の 素早さを あげる。 モルペコの 姿で タイプが 変わる。"
+ "effect": "ほほぶくろに 溜めた エネルギーで 攻撃し 自分の 素早さを あげる。 モルペコの 姿で タイプが 変わる。"
},
"breakingSwipe": {
"name": "ワイドブレイカー",
- "effect": "きょうじんな しっぽを 激しく ふりはらって 相手を 攻撃する。 相手の 攻撃を 下げる。"
+ "effect": "きょうじんな しっぽを 激しく ふりはらって 相手を 攻撃する。 相手の 攻撃を 下げる。"
},
"branchPoke": {
"name": "えだづき",
- "effect": "するどく とがった 枝で 相手を 突いて 攻撃する。"
+ "effect": "するどく とがった 枝で 相手を 突いて 攻撃する。"
},
"overdrive": {
"name": "オーバードライブ",
- "effect": "ギターや ベースを かきならして 激しく 響く 大きな 振動を 相手に 与えて 攻撃する。"
+ "effect": "ギターや ベースを かきならして 激しく 響く 大きな 振動を 相手に 与えて 攻撃する。"
},
"appleAcid": {
"name": "りんごさん",
- "effect": "すっぱい りんごから つくりだした 酸性の 液体で 攻撃。 相手の 特防を 下げる。"
+ "effect": "すっぱい りんごから つくりだした 酸性の 液体で 攻撃。 相手の 特防を 下げる。"
},
"gravApple": {
"name": "Gのちから",
- "effect": "高いところから りんごを 落として ダメージを 与える。 相手の 防御を 下げる。"
+ "effect": "高いところから りんごを 落として ダメージを 与える。 相手の 防御を 下げる。"
},
"spiritBreak": {
"name": "ソウルクラッシュ",
- "effect": "食らうと くじけるほどの 勢いで 攻撃。 相手の 特攻を 下げる。"
+ "effect": "食らうと くじけるほどの 勢いで 攻撃。 相手の 特攻を 下げる。"
},
"strangeSteam": {
"name": "ワンダースチーム",
- "effect": "煙を 噴出して 相手を 攻撃。 混乱 させることが ある。"
+ "effect": "煙を 噴出して 相手を 攻撃。 混乱 させることが ある。"
},
"lifeDew": {
"name": "いのちのしずく",
- "effect": "不思議な 水を ふりまいて 自分と 場にいる 味方の HPを 回復する。"
+ "effect": "不思議な 水を ふりまいて 自分と 場にいる 味方の HPを 回復する。"
},
"obstruct": {
"name": "ブロッキング",
- "effect": "相手の 攻撃を まったく 受けない。 連続で だすと 失敗しやすい。 触れると 防御が がくっと 下がる。"
+ "effect": "相手の 攻撃を まったく 受けない。 連続で だすと 失敗しやすい。 触れると 防御が がくっと 下がる。"
},
"falseSurrender": {
"name": "どげざつき",
- "effect": "頭を 下げる ふりを しながら 振りみだした 髪の毛を 突き刺す。 攻撃は 必ず 命中する。"
+ "effect": "頭を 下げる ふりを しながら 振りみだした 髪の毛を 突き刺す。 攻撃は 必ず 命中する。"
},
"meteorAssault": {
"name": "スターアサルト",
- "effect": "太い クキを ふりまわして 攻撃。 ただし 自分も よろめいてしまうため 次の ターンは 動けなくなる。"
+ "effect": "太い クキを ふりまわして 攻撃。 ただし 自分も よろめいてしまうため 次の ターンは 動けなくなる。"
},
"eternabeam": {
"name": "ムゲンダイビーム",
- "effect": "本来の 姿と なった ムゲンダイナ 最大の 攻撃。 次の ターンは 動けなくなる。"
+ "effect": "本来の 姿と なった ムゲンダイナ 最大の 攻撃。 次の ターンは 動けなくなる。"
},
"steelBeam": {
"name": "てっていこうせん",
- "effect": "全身から 集めた はがねを ビームとして 激しく 撃ちだす。 自分も ダメージを 受けてしまう。"
+ "effect": "全身から 集めた はがねを ビームとして 激しく 撃ちだす。 自分も ダメージを 受けてしまう。"
},
"expandingForce": {
"name": "ワイドフォース",
- "effect": "サイコパワーで 相手を 攻撃する。 サイコフィールドの時 威力が あがり すべての 相手に ダメージを 与える。"
+ "effect": "サイコパワーで 相手を 攻撃する。 サイコフィールドの時 威力が あがり すべての 相手に ダメージを 与える。"
},
"steelRoller": {
"name": "アイアンローラー",
- "effect": "フィールドを 破壊しながら 攻撃。 なんらかの フィールド状態に 変わっていないと 技は 失敗する。"
+ "effect": "フィールドを 破壊しながら 攻撃。 なんらかの フィールド状態に 変わっていないと 技は 失敗する。"
},
"scaleShot": {
"name": "スケイルショット",
- "effect": "ウロコを 撃ちだして 攻撃する。 2ー5回の 間 連続で だす。 素早さが あがるが 防御が さがる。"
+ "effect": "ウロコを 撃ちだして 攻撃する。 2ー5回の 間 連続で だす。 素早さが あがるが 防御が さがる。"
},
"meteorBeam": {
"name": "メテオビーム",
- "effect": "1ターン目に 宇宙の 力を 集めることで 特攻が あがり 2ターン目に 相手を 攻撃する。"
+ "effect": "1ターン目に 宇宙の 力を 集めることで 特攻が あがり 2ターン目に 相手を 攻撃する。"
},
"shellSideArm": {
"name": "シェルアームズ",
- "effect": "物理か 特殊か より多く ダメージを 与えられる 能力で 攻撃する。 毒状態に することが ある。"
+ "effect": "物理か 特殊か より多く ダメージを 与えられる 能力で 攻撃する。 毒状態に することが ある。"
},
"mistyExplosion": {
"name": "ミストバースト",
- "effect": "自分の 周りに いる すべてを 攻撃するが 使うと 瀕死になる。 ミストフィールドで 威力が あがる。"
+ "effect": "自分の 周りに いる すべてを 攻撃するが 使うと 瀕死になる。 ミストフィールドで 威力が あがる。"
},
"grassyGlide": {
"name": "グラススライダー",
- "effect": "地面を 滑るように 相手を 攻撃。 グラスフィールドの時 必ず 先制攻撃 できる。"
+ "effect": "地面を 滑るように 相手を 攻撃。 グラスフィールドの時 必ず 先制攻撃 できる。"
},
"risingVoltage": {
"name": "ライジングボルト",
- "effect": "地面から 立ちのぼる 電撃で 攻撃。 相手が エレキフィールドに いる時 技の 威力が 2倍に なる。"
+ "effect": "地面から 立ちのぼる 電撃で 攻撃。 相手が エレキフィールドに いる時 技の 威力が 2倍に なる。"
},
"terrainPulse": {
"name": "だいちのはどう",
- "effect": "フィールドの力を 借りて 攻撃。 使った時の フィールドの状態に よって 技の タイプと 威力が 変わる。"
+ "effect": "フィールドの力を 借りて 攻撃。 使った時の フィールドの状態に よって 技の タイプと 威力が 変わる。"
},
"skitterSmack": {
"name": "はいよるいちげき",
- "effect": "背後から はいより 攻撃する。 相手の 特攻を さげる。"
+ "effect": "背後から はいより 攻撃する。 相手の 特攻を さげる。"
},
"burningJealousy": {
"name": "しっとのほのお",
- "effect": "しっとの エネルギーで 相手を 攻撃。 そのターン 能力が あがった ポケモンを やけどの 状態に する。"
+ "effect": "しっとの エネルギーで 相手を 攻撃。 そのターン 能力が あがった ポケモンを やけどの 状態に する。"
},
"lashOut": {
"name": "うっぷんばらし",
- "effect": "相手への いらだちを ぶつけて 攻撃。 そのターンに 能力を さげられていると 技の 威力が 2倍に なる。"
+ "effect": "相手への いらだちを ぶつけて 攻撃。 そのターンに 能力を さげられていると 技の 威力が 2倍に なる。"
},
"poltergeist": {
"name": "ポルターガイスト",
- "effect": "相手の 持ち物を あやつって 攻撃。 相手が 道具を 持っていない 場合は 失敗する。"
+ "effect": "相手の 持ち物を あやつって 攻撃。 相手が 道具を 持っていない 場合は 失敗する。"
},
"corrosiveGas": {
"name": "ふしょくガス",
- "effect": "強い 酸性の ガスで 周りに いるものを 包みこみ 持っている 道具を 溶かしてしまう。"
+ "effect": "強い 酸性の ガスで 周りに いるものを 包みこみ 持っている 道具を 溶かしてしまう。"
},
"coaching": {
"name": "コーチング",
- "effect": "的確な 指導を おこなうことで 味方 全員の 攻撃と 防御を 上げる。"
+ "effect": "的確な 指導を おこなうことで 味方 全員の 攻撃と 防御を 上げる。"
},
"flipTurn": {
"name": "クイックターン",
- "effect": "攻撃したあと ものすごい スピードで もどってきて 控えの ポケモンと 入れ替わる。"
+ "effect": "攻撃したあと ものすごい スピードで もどってきて 控えの ポケモンと 入れ替わる。"
},
"tripleAxel": {
"name": "トリプルアクセル",
- "effect": "3回連続で キックを くりだして 攻撃する。 技が 当たるたびに 威力は あがる。"
+ "effect": "3回連続で キックを くりだして 攻撃する。 技が 当たるたびに 威力は あがる。"
},
"dualWingbeat": {
"name": "ダブルウイング",
- "effect": "翼を 相手に ぶつけて 攻撃する。 2回連続で ダメージを 与える。"
+ "effect": "翼を 相手に ぶつけて 攻撃する。 2回連続で ダメージを 与える。"
},
"scorchingSands": {
"name": "ねっさのだいち",
- "effect": "熱く 焼けた 砂を 相手に ぶつけて 攻撃する。 やけど状態に することが ある。"
+ "effect": "熱く 焼けた 砂を 相手に ぶつけて 攻撃する。 やけど状態に することが ある。"
},
"jungleHealing": {
"name": "ジャングルヒール",
- "effect": "ジャングルと 一体化して 自分と 場にいる 味方の HPと 状態を 回復する。"
+ "effect": "ジャングルと 一体化して 自分と 場にいる 味方の HPと 状態を 回復する。"
},
"wickedBlow": {
"name": "あんこくきょうだ",
- "effect": "あくの型を 極めし 強烈な 一撃。 必ず 急所に 当たる。"
+ "effect": "あくの型を 極めし 強烈な 一撃。 必ず 急所に 当たる。"
},
"surgingStrikes": {
"name": "すいりゅうれんだ",
- "effect": "みずの型を 極めし 流れるような 3回の 連撃。 必ず 急所に 当たる。"
+ "effect": "みずの型を 極めし 流れるような 3回の 連撃。 必ず 急所に 当たる。"
},
"thunderCage": {
"name": "サンダープリズン",
- "effect": "ほとばしる 電気の おりの 中に 4ー5ターンの 間 相手を 閉じこめて 攻撃する。"
+ "effect": "ほとばしる 電気の おりの 中に 4ー5ターンの 間 相手を 閉じこめて 攻撃する。"
},
"dragonEnergy": {
"name": "ドラゴンエナジー",
- "effect": "生命力を パワーに 変え 相手を 攻撃する。 自分の HPが 少ないほど 技の 威力は さがる。"
+ "effect": "生命力を パワーに 変え 相手を 攻撃する。 自分の HPが 少ないほど 技の 威力は さがる。"
},
"freezingGlare": {
"name": "いてつくしせん",
- "effect": "両目から サイコパワーを 撃ちだして 攻撃する。 こおり状態に することが ある。"
+ "effect": "両目から サイコパワーを 撃ちだして 攻撃する。 こおり状態に することが ある。"
},
"fieryWrath": {
"name": "もえあがるいかり",
- "effect": "怒りを 炎の ような オーラに 変えて 攻撃する。 相手を ひるませることが ある。"
+ "effect": "怒りを 炎の ような オーラに 変えて 攻撃する。 相手を ひるませることが ある。"
},
"thunderousKick": {
"name": "らいめいげり",
- "effect": "雷の ような 動きで 相手を 翻弄しながら キックする。 相手の 防御を さげる。"
+ "effect": "雷の ような 動きで 相手を 翻弄しながら キックする。 相手の 防御を さげる。"
},
"glacialLance": {
"name": "ブリザードランス",
- "effect": "吹雪を まとった 氷の 槍を 相手に 投げつけて 攻撃する。"
+ "effect": "吹雪を まとった 氷の 槍を 相手に 投げつけて 攻撃する。"
},
"astralBarrage": {
"name": "アストラルビット",
- "effect": "たくさんの 小さな 霊体を 相手に ぶつけて 攻撃する。"
+ "effect": "たくさんの 小さな 霊体を 相手に ぶつけて 攻撃する。"
},
"eerieSpell": {
"name": "ぶきみなじゅもん",
- "effect": "強力な サイコパワーで 攻撃。 相手が 最後に 使った技の PPを 3だけ 減らす。"
+ "effect": "強力な サイコパワーで 攻撃。 相手が 最後に 使った技の PPを 3だけ 減らす。"
},
"direClaw": {
"name": "フェイタルクロー",
- "effect": "破滅的なツメで 攻撃する。 相手を どく まひ ねむりの いずれかの状態に することも ある。"
+ "effect": "破滅的なツメで 攻撃する。 相手を どく まひ ねむりの いずれかの状態に することも ある。"
},
"psyshieldBash": {
"name": "バリアーラッシュ",
- "effect": "思念のエネルギーを まといながら 相手に ぶつかっていく。 自分の 防御を あげる。"
+ "effect": "思念のエネルギーを まといながら 相手に ぶつかっていく。 自分の 防御を あげる。"
},
"powerShift": {
"name": "パワーシフト",
- "effect": "自分の 攻撃と防御を 入れ替える。"
+ "effect": "自分の 攻撃と防御を 入れ替える。"
},
"stoneAxe": {
"name": "がんせきアックス",
- "effect": "岩の斧で 攻撃する。 ばらまかれた 岩の破片が 相手の 周りに 浮かぶ。"
+ "effect": "岩の斧で 攻撃する。 ばらまかれた 岩の破片が 相手の 周りに 浮かぶ。"
},
"springtideStorm": {
"name": "はるのあらし",
- "effect": "愛憎 入りまじった 強烈な風で 相手を 包みこんで 攻撃する。 相手の 攻撃を さげることが ある。"
+ "effect": "愛憎 入りまじった 強烈な風で 相手を 包みこんで 攻撃する。 相手の 攻撃を さげることが ある。"
},
"mysticalPower": {
"name": "しんぴのちから",
- "effect": "不思議な力を 放出して 攻撃する。 自分の 特攻が あがる。"
+ "effect": "不思議な力を 放出して 攻撃する。 自分の 特攻が あがる。"
},
"ragingFury": {
"name": "だいふんげき",
- "effect": "2-3ターンの 間 炎を 放ちながら 暴れまわる。 暴れたあとは 混乱する。"
+ "effect": "2-3ターンの 間 炎を 放ちながら 暴れまわる。 暴れたあとは 混乱する。"
},
"waveCrash": {
"name": "ウェーブタックル",
- "effect": "水を まといつつ 全身で 相手に ぶつかるが 自分も かなりの ダメージ を受ける。"
+ "effect": "水を まといつつ 全身で 相手に ぶつかるが 自分も かなりの ダメージ を受ける。"
},
"chloroblast": {
"name": "クロロブラスト",
- "effect": "自身の 葉緑素を 集約し 放出して 攻撃する。 自分も ダメージを 受けてしまう。"
+ "effect": "自身の 葉緑素を 集約し 放出して 攻撃する。 自分も ダメージを 受けてしまう。"
},
"mountainGale": {
"name": "ひょうざんおろし",
- "effect": "氷山のような 大きな 氷塊を ぶつけて 攻撃する。 相手を ひるませることが ある。"
+ "effect": "氷山のような 大きな 氷塊を ぶつけて 攻撃する。 相手を ひるませることが ある。"
},
"victoryDance": {
"name": "しょうりのまい",
- "effect": "勝利を 呼びこむ 舞を 激しく 踊って 自分の 攻撃と 防御と 素早さを あげる。"
+ "effect": "勝利を 呼びこむ 舞を 激しく 踊って 自分の 攻撃と 防御と 素早さを あげる。"
},
"headlongRush": {
"name": "ぶちかまし",
- "effect": "全身全霊の たいあたりを くらわせる。 自分の 防御と 特防が さがる。"
+ "effect": "全身全霊の たいあたりを くらわせる。 自分の 防御と 特防が さがる。"
},
"barbBarrage": {
"name": "どくばりセンボン",
- "effect": "無数の毒針で 相手を 毒状態に することもある。 相手が 毒状態だと 威力は 2倍になる。"
+ "effect": "無数の毒針で 相手を 毒状態に することもある。 相手が 毒状態だと 威力は 2倍になる。"
},
"esperWing": {
"name": "オーラウイング",
- "effect": "オーラで 強化した翼で 切り裂く。 急所に 当たりやすい。 自分の 素早さを あげる。"
+ "effect": "オーラで 強化した翼で 切り裂く。 急所に 当たりやすい。 自分の 素早さを あげる。"
},
"bitterMalice": {
"name": "うらみつらみ",
- "effect": "背筋が 凍るような 怨念で 攻撃して 相手の 攻撃を さげる。"
+ "effect": "背筋が 凍るような 怨念で 攻撃して 相手の 攻撃を さげる。"
},
"shelter": {
"name": "たてこもる",
- "effect": "皮膚を 鉄の盾のように 硬くすることで 自分の 防御を ぐーんと あげる。"
+ "effect": "皮膚を 鉄の盾のように 硬くすることで 自分の 防御を ぐーんと あげる。"
},
"tripleArrows": {
"name": "3ぼんのや",
- "effect": "足技のあと 3本の矢を 同時に放つ。 相手の 防御を さげたり ひるませることが ある。 急所に 当たりやすい。"
+ "effect": "足技のあと 3本の矢を 同時に放つ。 相手の 防御を さげたり ひるませることが ある。 急所に 当たりやすい。"
},
"infernalParade": {
"name": "ひゃっきやこう",
- "effect": "無数の火の玉で 攻撃して やけど状態に することが ある。 相手が 状態異常だと 威力は 2倍。"
+ "effect": "無数の火の玉で 攻撃して やけど状態に することが ある。 相手が 状態異常だと 威力は 2倍。"
},
"ceaselessEdge": {
"name": "ひけん・ちえなみ",
- "effect": "貝殻の剣で 攻撃する。 ばらまかれた 貝殻の破片は 相手の 足下に まきびし となって 散らばる。"
+ "effect": "貝殻の剣で 攻撃する。 ばらまかれた 貝殻の破片は 相手の 足下に まきびし となって 散らばる。"
},
"bleakwindStorm": {
"name": "こがらしあらし",
- "effect": "身も心も 震える 冷たく 激しい風で 攻撃する。 相手の 素早さを さげることが ある。"
+ "effect": "身も心も 震える 冷たく 激しい風で 攻撃する。 相手の 素早さを さげることが ある。"
},
"wildboltStorm": {
"name": "かみなりあらし",
- "effect": "嵐を 起こし 雷雲を 呼びよせ 雷と風で 激しく 攻撃をする。 相手を まひ状態に することもある。"
+ "effect": "嵐を 起こし 雷雲を 呼びよせ 雷と風で 激しく 攻撃をする。 相手を まひ状態に することもある。"
},
"sandsearStorm": {
"name": "ねっさのあらし",
- "effect": "熱く焼けた砂と 強烈な風で 包みこんで 攻撃する。 相手を やけど状態に することがある。"
+ "effect": "熱く焼けた砂と 強烈な風で 包みこんで 攻撃する。 相手を やけど状態に することがある。"
},
"lunarBlessing": {
"name": "みかづきのいのり",
- "effect": "みかづきに いのりを ささげて 自分と 場にいる 味方の HPと 状態を 回復する。"
+ "effect": "みかづきに いのりを ささげて 自分と 場にいる 味方の HPと 状態を 回復する。"
},
"takeHeart": {
"name": "ブレイブチャージ",
- "effect": "心を 奮わせて 自分の 状態異常を 治し さらには 特攻と 特防を あげる。"
+ "effect": "心を 奮わせて 自分の 状態異常を 治し さらには 特攻と 特防を あげる。"
},
"gMaxWildfire": {
"name": "キョダイゴクエン",
- "effect": "キョダイマックスした リザードンが 繰りだす ほのおタイプの 攻撃。 4ターンの 間 ダメージを 与える。"
+ "effect": "キョダイマックスした リザードンが 繰りだす ほのおタイプの 攻撃。 4ターンの 間 ダメージを 与える。"
},
"gMaxBefuddle": {
"name": "キョダイコワク",
- "effect": "キョダイマックスした バタフリーが 繰り出す むしタイプの 攻撃。 毒・まひ・眠りの どれかに する。"
+ "effect": "キョダイマックスした バタフリーが 繰り出す むしタイプの 攻撃。 毒・まひ・眠りの どれかに する。"
},
"gMaxVoltCrash": {
"name": "キョダイバンライ",
- "effect": "キョダイマックスした ピカチュウが 繰りだす でんきタイプの 攻撃。 相手を まひ状態に する。"
+ "effect": "キョダイマックスした ピカチュウが 繰りだす でんきタイプの 攻撃。 相手を まひ状態に する。"
},
"gMaxGoldRush": {
"name": "キョダイコバン",
- "effect": "キョダイマックスした ニャースが 繰り出す ノーマルタイプの 攻撃。 相手を 混乱させ お金も もらえる。"
+ "effect": "キョダイマックスした ニャースが 繰り出す ノーマルタイプの 攻撃。 相手を 混乱させ お金も もらえる。"
},
"gMaxChiStrike": {
"name": "キョダイシンゲキ",
- "effect": "キョダイマックスした カイリキーが 繰りだす かくとうタイプの 攻撃。 急所に 当たりやすく なる。"
+ "effect": "キョダイマックスした カイリキーが 繰りだす かくとうタイプの 攻撃。 急所に 当たりやすく なる。"
},
"gMaxTerror": {
"name": "キョダイゲンエイ",
- "effect": "キョダイマックスした ゲンガーが 繰りだす ゴーストタイプの 攻撃。 影を 踏み 交代 できなくする。"
+ "effect": "キョダイマックスした ゲンガーが 繰りだす ゴーストタイプの 攻撃。 影を 踏み 交代 できなくする。"
},
"gMaxResonance": {
"name": "キョダイセンリツ",
- "effect": "キョダイマックスした ラプラスが 繰りだす こおりタイプの 攻撃。 5ターンの 間 ダメージを 弱める。"
+ "effect": "キョダイマックスした ラプラスが 繰りだす こおりタイプの 攻撃。 5ターンの 間 ダメージを 弱める。"
},
"gMaxCuddle": {
"name": "キョダイホーヨー",
- "effect": "キョダイマックスした イーブイが 繰りだす ノーマルタイプの 攻撃。 相手を メロメロに する。"
+ "effect": "キョダイマックスした イーブイが 繰りだす ノーマルタイプの 攻撃。 相手を メロメロに する。"
},
"gMaxReplenish": {
"name": "キョダイサイセイ",
- "effect": "キョダイマックスした カビゴンが 繰りだす ノーマルタイプの 攻撃。 食べた きのみを 再生する。"
+ "effect": "キョダイマックスした カビゴンが 繰りだす ノーマルタイプの 攻撃。 食べた きのみを 再生する。"
},
"gMaxMalodor": {
"name": "キョダイシュウキ",
- "effect": "キョダイマックスした ダストダスが 繰りだす どくタイプの 攻撃。 相手を 毒 状態に する。"
+ "effect": "キョダイマックスした ダストダスが 繰りだす どくタイプの 攻撃。 相手を 毒 状態に する。"
},
"gMaxStonesurge": {
"name": "キョダイガンジン",
- "effect": "キョダイマックスした カジリガメが 繰りだす みずタイプの 攻撃。 鋭い 無数の 岩を ばらまく。"
+ "effect": "キョダイマックスした カジリガメが 繰りだす みずタイプの 攻撃。 鋭い 無数の 岩を ばらまく。"
},
"gMaxWindRage": {
"name": "キョダイフウゲキ",
- "effect": "キョダイマックスした アーマーガアが 繰りだす ひこうタイプの 攻撃。 リフレクターや ひかりのかべを 消し去る。"
+ "effect": "キョダイマックスした アーマーガアが 繰りだす ひこうタイプの 攻撃。 リフレクターや ひかりのかべを 消し去る。"
},
"gMaxStunShock": {
"name": "キョダイカンデン",
- "effect": "キョダイマックスした ストリンダーが 繰り出す でんきタイプの 攻撃。 相手を 毒 か まひ どちらかにする。"
+ "effect": "キョダイマックスした ストリンダーが 繰り出す でんきタイプの 攻撃。 相手を 毒 か まひ どちらかにする。"
},
"gMaxFinale": {
"name": "キョダイダンエン",
- "effect": "キョダイマックスした マホイップが 繰りだす フェアリータイプの 攻撃。 味方の HPを 回復する。"
+ "effect": "キョダイマックスした マホイップが 繰りだす フェアリータイプの 攻撃。 味方の HPを 回復する。"
},
"gMaxDepletion": {
"name": "キョダイゲンスイ",
- "effect": "キョダイマックスした ジュラルドンが 繰りだす ドラゴンタイプの 攻撃。 最後に 使われた わざPPを 減らす。"
+ "effect": "キョダイマックスした ジュラルドンが 繰りだす ドラゴンタイプの 攻撃。 最後に 使われた わざPPを 減らす。"
},
"gMaxGravitas": {
"name": "キョダイテンドウ",
- "effect": "キョダイマックスした イオルブが 繰りだす エスパータイプの 攻撃。 5ターンの 間 重力が 変わる。"
+ "effect": "キョダイマックスした イオルブが 繰りだす エスパータイプの 攻撃。 5ターンの 間 重力が 変わる。"
},
"gMaxVolcalith": {
"name": "キョダイフンセキ",
- "effect": "キョダイマックスした セキタンザンが 繰りだす いわタイプの 攻撃。 4ターンの 間 ダメージを 与える。"
+ "effect": "キョダイマックスした セキタンザンが 繰りだす いわタイプの 攻撃。 4ターンの 間 ダメージを 与える。"
},
"gMaxSandblast": {
"name": "キョダイサジン",
- "effect": "キョダイマックスした サダイジャが 繰りだす じめんタイプの 攻撃。 4-5ターンの間 砂が 吹き荒れる。"
+ "effect": "キョダイマックスした サダイジャが 繰りだす じめんタイプの 攻撃。 4-5ターンの間 砂が 吹き荒れる。"
},
"gMaxSnooze": {
"name": "キョダイスイマ",
- "effect": "キョダイマックスした オーロンゲが 繰りだす あくタイプの 攻撃。 大きな あくびで 眠気を 誘う。"
+ "effect": "キョダイマックスした オーロンゲが 繰りだす あくタイプの 攻撃。 大きな あくびで 眠気を 誘う。"
},
"gMaxTartness": {
"name": "キョダイサンゲキ",
- "effect": "キョダイマックスした アップリューが 繰りだす くさタイプの 攻撃。 相手の 回避率を 下げる。"
+ "effect": "キョダイマックスした アップリューが 繰りだす くさタイプの 攻撃。 相手の 回避率を 下げる。"
},
"gMaxSweetness": {
"name": "キョダイカンロ",
- "effect": "キョダイマックスした タルップルが 繰りだす くさタイプの 攻撃。 味方の 状態異常を 回復する。"
+ "effect": "キョダイマックスした タルップルが 繰りだす くさタイプの 攻撃。 味方の 状態異常を 回復する。"
},
"gMaxSmite": {
"name": "キョダイテンバツ",
- "effect": "キョダイマックスした ブリムオンが 繰りだす フェアリータイプの 攻撃。 相手を 混乱させる。"
+ "effect": "キョダイマックスした ブリムオンが 繰りだす フェアリータイプの 攻撃。 相手を 混乱させる。"
},
"gMaxSteelsurge": {
"name": "キョダイコウジン",
- "effect": "キョダイマックスした ダイオウドウが 繰りだす タイプの 攻撃。 鋭い 無数の とげを ばらまく。"
+ "effect": "キョダイマックスした ダイオウドウが 繰りだす タイプの 攻撃。 鋭い 無数の とげを ばらまく。"
},
"gMaxMeltdown": {
"name": "キョダイユウゲキ",
- "effect": "キョダイマックスした メルメタルが 繰りだす はがねタイプの 攻撃。 同じ 技を 連続で 出せなくする。"
+ "effect": "キョダイマックスした メルメタルが 繰りだす はがねタイプの 攻撃。 同じ 技を 連続で 出せなくする。"
},
"gMaxFoamBurst": {
"name": "キョダイホウマツ",
- "effect": "キョダイマックスした キングラーが 繰りだす みずタイプの 攻撃。 相手の 素早さを がくっと さげる。"
+ "effect": "キョダイマックスした キングラーが 繰りだす みずタイプの 攻撃。 相手の 素早さを がくっと さげる。"
},
"gMaxCentiferno": {
"name": "キョダイヒャッカ",
- "effect": "キョダイマックスした マルヤクデが 繰りだす ほのおタイプの 攻撃。 4-5ターンの間 炎に 閉じこめる。"
+ "effect": "キョダイマックスした マルヤクデが 繰りだす ほのおタイプの 攻撃。 4-5ターンの間 炎に 閉じこめる。"
},
"gMaxVineLash": {
"name": "キョダイベンタツ",
- "effect": "キョダイマックスした フシギバナが 繰りだす くさタイプの 攻撃。 4ターンの 間 ダメージを 与える。"
+ "effect": "キョダイマックスした フシギバナが 繰りだす くさタイプの 攻撃。 4ターンの 間 ダメージを 与える。"
},
"gMaxCannonade": {
"name": "キョダイホウゲキ",
- "effect": "キョダイマックスした カメックスが 繰りだす みずタイプの 攻撃。 4ターンの 間 ダメージを 与える。"
+ "effect": "キョダイマックスした カメックスが 繰りだす みずタイプの 攻撃。 4ターンの 間 ダメージを 与える。"
},
"gMaxDrumSolo": {
"name": "キョダイコランダ",
- "effect": "キョダイマックスした ゴリランダーが 繰りだす くさタイプの 攻撃。 相手の 特性に ジャマされない。"
+ "effect": "キョダイマックスした ゴリランダーが 繰りだす くさタイプの 攻撃。 相手の 特性に ジャマされない。"
},
"gMaxFireball": {
"name": "キョダイカキュウ",
- "effect": "キョダイマックスした エースバーンが 繰りだす ほのおタイプの 攻撃。 相手の 特性に ジャマされない。"
+ "effect": "キョダイマックスした エースバーンが 繰りだす ほのおタイプの 攻撃。 相手の 特性に ジャマされない。"
},
"gMaxHydrosnipe": {
"name": "キョダイソゲキ",
- "effect": "キョダイマックスした インテレオンが 繰りだす みずタイプの 攻撃。 相手の 特性に ジャマされない。"
+ "effect": "キョダイマックスした インテレオンが 繰りだす みずタイプの 攻撃。 相手の 特性に ジャマされない。"
},
"gMaxOneBlow": {
"name": "キョダイイチゲキ",
- "effect": "キョダイマックスした ウーラオスが 繰りだす あくタイプの 攻撃。 ダイウォールを 無視できる 一撃。"
+ "effect": "キョダイマックスした ウーラオスが 繰りだす あくタイプの 攻撃。 ダイウォールを 無視できる 一撃。"
},
"gMaxRapidFlow": {
"name": "キョダイレンゲキ",
- "effect": "キョダイマックスした ウーラオスが 繰りだす みずタイプの 攻撃。 ダイウォールを 無視できる 連撃。"
+ "effect": "キョダイマックスした ウーラオスが 繰りだす みずタイプの 攻撃。 ダイウォールを 無視できる 連撃。"
},
"teraBlast": {
"name": "テラバースト",
- "effect": "テラスタルだと テラスタイプの エネルギーを 放出して 攻撃する。 攻撃と 特攻を 比べて 高いほうで ダメージを 与える。"
+ "effect": "テラスタルだと テラスタイプの エネルギーを 放出して 攻撃する。 攻撃と 特攻を 比べて 高いほうで ダメージを 与える。"
},
"silkTrap": {
"name": "スレッドトラップ",
- "effect": "糸の罠を はりめぐらせる。 相手の 攻撃を 防ぐと 同時に 触れた 相手の 素早さを さげる。"
+ "effect": "糸の罠を はりめぐらせる。 相手の 攻撃を 防ぐと 同時に 触れた 相手の 素早さを さげる。"
},
"axeKick": {
"name": "かかとおとし",
- "effect": "蹴りあげた かかとを 落として 攻撃する。 相手を 混乱させることが ある。 はずすと 自分が ダメージを 受ける。"
+ "effect": "蹴りあげた かかとを 落として 攻撃する。 相手を 混乱させることが ある。 はずすと 自分が ダメージを 受ける。"
},
"lastRespects": {
"name": "おはかまいり",
- "effect": "仲間の 無念を 晴らすため 攻撃する。 倒された 味方のポケモンが 多いほど 技の 威力が 増える。"
+ "effect": "仲間の 無念を 晴らすため 攻撃する。 倒された 味方のポケモンが 多いほど 技の 威力が 増える。"
},
"luminaCrash": {
"name": "ルミナコリジョン",
- "effect": "精神にも 作用する 奇妙な光を 放って 攻撃する。 相手の 特防を がくっと さげる。"
+ "effect": "精神にも 作用する 奇妙な光を 放って 攻撃する。 相手の 特防を がくっと さげる。"
},
"orderUp": {
"name": "いっちょうあがり",
- "effect": "いなせな 身のこなしで 攻撃。 口の中に シャリタツが いると そのすがたによって 能力が あがる。"
+ "effect": "いなせな 身のこなしで 攻撃。 口の中に シャリタツが いると そのすがたによって 能力が あがる。"
},
"jetPunch": {
"name": "ジェットパンチ",
- "effect": "激流を こぶしに まとって 目にも 留まらぬ パンチを くりだす。 必ず 先制攻撃 できる。"
+ "effect": "激流を こぶしに まとって 目にも 留まらぬ パンチを くりだす。 必ず 先制攻撃 できる。"
},
"spicyExtract": {
"name": "ハバネロエキス",
- "effect": "とんでもなく 辛いエキスを 出す。 相手の 攻撃が ぐーんと あがり 防御が がくっと さがる。"
+ "effect": "とんでもなく 辛いエキスを 出す。 相手の 攻撃が ぐーんと あがり 防御が がくっと さがる。"
},
"spinOut": {
"name": "ホイールスピン",
- "effect": "足に 負荷を かけることにより 激しく 回転して ダメージを 与える。 自分の 素早さが がくっと さがる。"
+ "effect": "足に 負荷を かけることにより 激しく 回転して ダメージを 与える。 自分の 素早さが がくっと さがる。"
},
"populationBomb": {
"name": "ネズミざん",
- "effect": "仲間たちが わらわらと 集まって コンビネーションで 攻撃を 与えていく。 1-10回の 間 連続で あたる。"
+ "effect": "仲間たちが わらわらと 集まって コンビネーションで 攻撃を 与えていく。 1-10回の 間 連続で あたる。"
},
"iceSpinner": {
"name": "アイススピナー",
- "effect": "足に 薄い氷を まとい クルクルと 回りながら ぶつかる。 回転の 動きによって フィールドを 壊す。"
+ "effect": "足に 薄い氷を まとい クルクルと 回りながら ぶつかる。 回転の 動きによって フィールドを 壊す。"
},
"glaiveRush": {
"name": "きょけんとつげき",
- "effect": "体を 投げだす 無謀な突撃。 技のあと 相手からの 攻撃は 必ず 命中し ダメージが 2倍に なってしまう。"
+ "effect": "体を 投げだす 無謀な突撃。 技のあと 相手からの 攻撃は 必ず 命中し ダメージが 2倍に なってしまう。"
},
"revivalBlessing": {
"name": "さいきのいのり",
- "effect": "慈愛の心で いのることにより 控えにいる ひんしの ポケモンを HPを 半分の状態で 復活させる。"
+ "effect": "慈愛の心で いのることにより 控えにいる ひんしの ポケモンを HPを 半分の状態で 復活させる。"
},
"saltCure": {
"name": "しおづけ",
- "effect": "相手を しおづけ状態に して 毎ターン ダメージを 与える。 はがね みずタイプは より 苦しむ。"
+ "effect": "相手を しおづけ状態に して 毎ターン ダメージを 与える。 はがね みずタイプは より 苦しむ。"
},
"tripleDive": {
"name": "トリプルダイブ",
- "effect": "息のあった 飛びこみを することで 相手に 水しぶきを あてる。 3回連続で ダメージを 与える。"
+ "effect": "息のあった 飛びこみを することで 相手に 水しぶきを あてる。 3回連続で ダメージを 与える。"
},
"mortalSpin": {
"name": "キラースピン",
- "effect": "回転して 相手を 攻撃する。 しめつける まきつく やどりぎのタネ など 吹きとばす。 相手を 毒状態に する。"
+ "effect": "回転して 相手を 攻撃する。 しめつける まきつく やどりぎのタネ など 吹きとばす。 相手を 毒状態に する。"
},
"doodle": {
"name": "うつしえ",
- "effect": "相手の本質を とらえて うつしだし 自分と 味方を 相手と 同じ 特性に 変化させる。"
+ "effect": "相手の本質を とらえて うつしだし 自分と 味方を 相手と 同じ 特性に 変化させる。"
},
"filletAway": {
"name": "みをけずる",
- "effect": "自分の HPを けずって 自分の 攻撃と 特攻と 素早さを ぐーんと あげる。"
+ "effect": "自分の HPを けずって 自分の 攻撃と 特攻と 素早さを ぐーんと あげる。"
},
"kowtowCleave": {
"name": "ドゲザン",
- "effect": "土下座して 相手を 油断させておいて 切りかかる。 攻撃は 必ず 命中する。"
+ "effect": "土下座して 相手を 油断させておいて 切りかかる。 攻撃は 必ず 命中する。"
},
"flowerTrick": {
"name": "トリックフラワー",
- "effect": "細工がある 花たばを 相手に 投げて 攻撃する。 必ず 命中して 急所にも 当たる。"
+ "effect": "細工がある 花たばを 相手に 投げて 攻撃する。 必ず 命中して 急所にも 当たる。"
},
"torchSong": {
"name": "フレアソング",
- "effect": "燃えたぎる 火炎を 歌うように 吹きつけて 相手を 焦がす。 自分の 特攻を あげる。"
+ "effect": "燃えたぎる 火炎を 歌うように 吹きつけて 相手を 焦がす。 自分の 特攻を あげる。"
},
"aquaStep": {
"name": "アクアステップ",
- "effect": "水もしたたる かろやかな 足どりで 相手を 翻弄し ダメージを 与える。 自分の 素早さを あげる。"
+ "effect": "水もしたたる かろやかな 足どりで 相手を 翻弄し ダメージを 与える。 自分の 素早さを あげる。"
},
"ragingBull": {
"name": "レイジングブル",
- "effect": "怒り狂う あばれうしの 猛烈な タックル。 フォルムで 技のタイプが 変わり ひかりのかべや リフレクターなども 破壊できる。"
+ "effect": "怒り狂う あばれうしの 猛烈な タックル。 フォルムで 技のタイプが 変わり ひかりのかべや リフレクターなども 破壊できる。"
},
"makeItRain": {
"name": "ゴールドラッシュ",
- "effect": "大量のコインを ぶちまけて 攻撃。 自分の 特攻が さがる。 戦闘の あとで お金も もらえる。"
+ "effect": "大量のコインを ぶちまけて 攻撃。 自分の 特攻が さがる。 戦闘の あとで お金も もらえる。"
},
"psyblade": {
"name": "サイコブレイド",
- "effect": "実体のない刃で 相手を 切り裂く。 エレキフィールドに いるとき 技の威力が 1.5倍に なる。"
+ "effect": "実体のない刃で 相手を 切り裂く。 エレキフィールドに いるとき 技の威力が 1.5倍に なる。"
},
"hydroSteam": {
"name": "ハイドロスチーム",
- "effect": "煮えたぎる水を 勢いよく 浴びせる。 日差しが 強いとき 技の威力が さがるどころか 1.5倍になる。"
+ "effect": "煮えたぎる水を 勢いよく 浴びせる。 日差しが 強いとき 技の威力が さがるどころか 1.5倍になる。"
},
"ruination": {
"name": "カタストロフィ",
- "effect": "破滅的な 災厄を 巻き起こし 相手の HPを 半分に する。"
+ "effect": "破滅的な 災厄を 巻き起こし 相手の HPを 半分に する。"
},
"collisionCourse": {
"name": "アクセルブレイク",
- "effect": "変形しながら 荒々しく 落下し いにしえの 大爆発を 引き起こす。 弱点をつくと さらに 威力が 増す。"
+ "effect": "変形しながら 荒々しく 落下し いにしえの 大爆発を 引き起こす。 弱点をつくと さらに 威力が 増す。"
},
"electroDrift": {
"name": "イナズマドライブ",
- "effect": "変形しながら 超高速で 走行し 未知なる 電撃が 相手を つらぬく。 弱点をつくと さらに 威力が 増す。"
+ "effect": "変形しながら 超高速で 走行し 未知なる 電撃が 相手を つらぬく。 弱点をつくと さらに 威力が 増す。"
},
"shedTail": {
"name": "しっぽきり",
- "effect": "自分の HPを 削って 分身を だしたあと もどってきて 控えの ポケモンと 入れ替わる。"
+ "effect": "自分の HPを 削って 分身を だしたあと もどってきて 控えの ポケモンと 入れ替わる。"
},
"chillyReception": {
"name": "さむいギャグ",
- "effect": "場を 凍らせる ギャグを 言い残し 控えの ポケモンと 入れ替わる。 5ターンの 間 ゆきを 降らす。"
+ "effect": "場を 凍らせる ギャグを 言い残し 控えの ポケモンと 入れ替わる。 5ターンの 間 ゆきを 降らす。"
},
"tidyUp": {
"name": "おかたづけ",
- "effect": "まきびし ステルスロック ねばねばネット どくびし みがわりを すべて かたづける。 自分の 攻撃と 素早さが あがる。"
+ "effect": "まきびし ステルスロック ねばねばネット どくびし みがわりを すべて かたづける。 自分の 攻撃と 素早さが あがる。"
},
"snowscape": {
"name": "ゆきげしき",
- "effect": "5ターンの 間 ゆきを 降らせる。 こおりタイプの 防御が あがる。"
+ "effect": "5ターンの 間 ゆきを 降らせる。 こおりタイプの 防御が あがる。"
},
"pounce": {
"name": "とびつく",
- "effect": "相手に 飛びついて 攻撃する。 相手の 素早さを さげる。"
+ "effect": "相手に 飛びついて 攻撃する。 相手の 素早さを さげる。"
},
"trailblaze": {
"name": "くさわけ",
- "effect": "草むらから 飛びだすように 攻撃する。 軽快な 足どりに よって 自分の 素早さを あげる。"
+ "effect": "草むらから 飛びだすように 攻撃する。 軽快な 足どりに よって 自分の 素早さを あげる。"
},
"chillingWater": {
"name": "ひやみず",
- "effect": "相手の 元気を 失わせるくらい 冷たい水を 浴びせて 攻撃する。 相手の 攻撃を さげる。"
+ "effect": "相手の 元気を 失わせるくらい 冷たい水を 浴びせて 攻撃する。 相手の 攻撃を さげる。"
},
"hyperDrill": {
"name": "ハイパードリル",
- "effect": "とがった 体の部位を 急速に 回転させ つらぬく。 まもるや みきり なども 無視 できる。"
+ "effect": "とがった 体の部位を 急速に 回転させ つらぬく。 まもるや みきり なども 無視 できる。"
},
"twinBeam": {
"name": "ツインビーム",
- "effect": "両目から 不可思議な 光線を 発射して 攻撃する。 2回連続で ダメージを 与える。"
+ "effect": "両目から 不可思議な 光線を 発射して 攻撃する。 2回連続で ダメージを 与える。"
},
"rageFist": {
"name": "ふんどのこぶし",
- "effect": "怒りを エネルギーに 変えて 攻撃。 受けた 攻撃の 回数が 多いほど 技の 威力が あがる。"
+ "effect": "怒りを エネルギーに 変えて 攻撃。 受けた 攻撃の 回数が 多いほど 技の 威力が あがる。"
},
"armorCannon": {
"name": "アーマーキャノン",
- "effect": "みずからの ヨロイを 燃えたぎる 弾として 撃ち出して 攻撃する。 自分の 防御と 特防が さがる。"
+ "effect": "みずからの ヨロイを 燃えたぎる 弾として 撃ち出して 攻撃する。 自分の 防御と 特防が さがる。"
},
"bitterBlade": {
"name": "むねんのつるぎ",
- "effect": "この世への 未練を 剣先に こめて 切りつける。 与えた ダメージの 半分の HPを 回復できる。"
+ "effect": "この世への 未練を 剣先に こめて 切りつける。 与えた ダメージの 半分の HPを 回復できる。"
},
"doubleShock": {
"name": "でんこうそうげき",
- "effect": "全身の でんきを すべて 放って 大ダメージを 与える。 自分の でんきタイプが なくなる。"
+ "effect": "全身の でんきを すべて 放って 大ダメージを 与える。 自分の でんきタイプが なくなる。"
},
"gigatonHammer": {
"name": "デカハンマー",
- "effect": "大きな ハンマーを 体ごと ぶんまわして 攻撃する。 この技は 2回連続で だせない。"
+ "effect": "大きな ハンマーを 体ごと ぶんまわして 攻撃する。 この技は 2回連続で だせない。"
},
"comeuppance": {
"name": "ほうふく",
- "effect": "技を だす前に 最後に 受けた 技の ダメージを 大きくして だした 相手に 返す。"
+ "effect": "技を だす前に 最後に 受けた 技の ダメージを 大きくして だした 相手に 返す。"
},
"aquaCutter": {
"name": "アクアカッター",
- "effect": "加圧された 水を 刃のように 噴射して 相手を 切り裂く。 急所に 当たりやすい。"
+ "effect": "加圧された 水を 刃のように 噴射して 相手を 切り裂く。 急所に 当たりやすい。"
},
"blazingTorque": {
"name": "バーンアクセル",
- "effect": "メラメラの エンジンを 吹かして 相手に ぶつかる。やけど状態に することが ある。"
+ "effect": "メラメラの エンジンを 吹かして 相手に ぶつかる。やけど状態に することが ある。"
},
"wickedTorque": {
"name": "ダークアクセル",
- "effect": "悪意で エンジンを 吹かして 相手に ぶつかる。眠り状態に することが ある。"
+ "effect": "悪意で エンジンを 吹かして 相手に ぶつかる。眠り状態に することが ある。"
},
"noxiousTorque": {
"name": "ポイズンアクセル",
- "effect": "有毒な エンジンを 吹かして 相手に ぶつかる。毒状態に することが ある。"
+ "effect": "有毒な エンジンを 吹かして 相手に ぶつかる。毒状態に することが ある。"
},
"combatTorque": {
"name": "ファイトアクセル",
- "effect": "力いっぱい エンジンを 吹かして 相手に ぶつかる。まひ状態に することが ある。"
+ "effect": "力いっぱい エンジンを 吹かして 相手に ぶつかる。まひ状態に することが ある。"
},
"magicalTorque": {
"name": "マジカルアクセル",
- "effect": "幻想的な エンジンを 吹かして 相手に ぶつかる。混乱させることが ある。"
+ "effect": "幻想的な エンジンを 吹かして 相手に ぶつかる。混乱させることが ある。"
},
"bloodMoon": {
"name": "ブラッドムーン",
- "effect": "血のように 赤い満月から ありったけの 気迫を 撃ちだす。 この技は 2回連続で だせない。"
+ "effect": "血のように 赤い満月から ありったけの 気迫を 撃ちだす。 この技は 2回連続で だせない。"
},
"matchaGotcha": {
"name": "シャカシャカほう",
- "effect": "かきまぜた お茶の 大砲は 与えた ダメージの 半分を 回復して やけど状態に することも ある。"
+ "effect": "かきまぜた お茶の 大砲は 与えた ダメージの 半分を 回復して やけど状態に することも ある。"
},
"syrupBomb": {
"name": "みずあめボム",
- "effect": "ねっとりした みずあめを 爆発させ 相手を あめまみれ 状態にして 3ターンの間 素早さを さげ続ける。"
+ "effect": "ねっとりした みずあめを 爆発させ 相手を あめまみれ 状態にして 3ターンの間 素早さを さげ続ける。"
},
"ivyCudgel": {
"name": "ツタこんぼう",
- "effect": "ツタを まきつけた こん棒で なぐる。 かぶっている お面で タイプが 変わる。 急所に 当たりやすい。"
+ "effect": "ツタを まきつけた こん棒で なぐる。 かぶっている お面で タイプが 変わる。 急所に 当たりやすい。"
},
"electroShot": {
"name": "エレクトロビーム",
- "effect": "1ターン目に 電気を 集めて 特攻が あがり 2ターン目に 高圧の 電気を 発射する。 天気が 雨のときは すぐに 発射できる。"
+ "effect": "1ターン目に 電気を 集めて 特攻が あがり 2ターン目に 高圧の 電気を 発射する。 天気が 雨のときは すぐに 発射できる。"
},
"teraStarstorm": {
"name": "テラクラスター",
- "effect": "結晶の力を 照射し 敵を 排除する。 テラパゴスが ステラフォルムで 放つと すべての 相手に ダメージを 与える。"
+ "effect": "結晶の力を 照射し 敵を 排除する。 テラパゴスが ステラフォルムで 放つと すべての 相手に ダメージを 与える。"
},
"fickleBeam": {
"name": "きまぐレーザー",
- "effect": "光線を 発射して 攻撃する。 ときどき ほかの首も 協力して レーザーを 放ち 威力が 2倍に なる。"
+ "effect": "光線を 発射して 攻撃する。 ときどき ほかの首も 協力して レーザーを 放ち 威力が 2倍に なる。"
},
"burningBulwark": {
"name": "かえんのまもり",
- "effect": "相手の 攻撃を 超高熱の 体毛で 防ぎ 同時に 触れた 相手に やけどを 与えてしまう。"
+ "effect": "相手の 攻撃を 超高熱の 体毛で 防ぎ 同時に 触れた 相手に やけどを 与えてしまう。"
},
"thunderclap": {
"name": "じんらい",
- "effect": "相手より 先に 電撃を 浴びせる。 相手が だす技が 攻撃技でないと 失敗する。"
+ "effect": "相手より 先に 電撃を 浴びせる。 相手が だす技が 攻撃技でないと 失敗する。"
},
"mightyCleave": {
"name": "パワフルエッジ",
- "effect": "頭部に 蓄積した 光で 切断する。 守りを 無視して 攻撃できる。"
+ "effect": "頭部に 蓄積した 光で 切断する。 守りを 無視して 攻撃できる。"
},
"tachyonCutter": {
"name": "タキオンカッター",
- "effect": "粒子の刃を たて続けに 発射して 2回連続で ダメージを 与える。 攻撃は 必ず 命中する。"
+ "effect": "粒子の刃を たて続けに 発射して 2回連続で ダメージを 与える。 攻撃は 必ず 命中する。"
},
"hardPress": {
"name": "ハードプレス",
- "effect": "腕やハサミで 相手を 圧迫する。 相手の HPが 残っているほど 威力が あがる。"
+ "effect": "腕やハサミで 相手を 圧迫する。 相手の HPが 残っているほど 威力が あがる。"
},
"dragonCheer": {
"name": "ドラゴンエール",
- "effect": "竜の鼓舞で 士気を 上げて 味方の技が 急所に 当たりやすくなる。 ドラゴンタイプだと より 鼓舞される。"
+ "effect": "竜の鼓舞で 士気を 上げて 味方の技が 急所に 当たりやすくなる。 ドラゴンタイプだと より 鼓舞される。"
},
"alluringVoice": {
"name": "みわくのボイス",
- "effect": "天使のような 歌声で 相手を 攻撃。 そのターン 能力が あがった ポケモンを 混乱の 状態に する。"
+ "effect": "天使のような 歌声で 相手を 攻撃。 そのターン 能力が あがった ポケモンを 混乱の 状態に する。"
},
"temperFlare": {
"name": "やけっぱち",
- "effect": "自棄になった 勢いで 攻撃する。 前の ターンに 技を 外していると 威力が 倍に なる。"
+ "effect": "自棄になった 勢いで 攻撃する。 前の ターンに 技を 外していると 威力が 倍に なる。"
},
"supercellSlam": {
"name": "サンダーダイブ",
- "effect": "体を 帯電させ て相手に のしかかる。 はずすと 自分が ダメージを 受ける。"
+ "effect": "体を 帯電させ て相手に のしかかる。 はずすと 自分が ダメージを 受ける。"
},
"psychicNoise": {
"name": "サイコノイズ",
- "effect": "不快な音波を 相手に 浴びせて 攻撃。 2ターンの間 技や 特性や 持っている 道具によって HPを 回復できなくなる。"
+ "effect": "不快な音波を 相手に 浴びせて 攻撃。 2ターンの間 技や 特性や 持っている 道具によって HPを 回復できなくなる。"
},
"upperHand": {
"name": "はやてがえし",
- "effect": "動きに 反応して 掌底を 打ちこみ 相手を ひるませる。 相手が だす技が 先制攻撃でないと 失敗する。"
+ "effect": "動きに 反応して 掌底を 打ちこみ 相手を ひるませる。 相手が だす技が 先制攻撃でないと 失敗する。"
},
"malignantChain": {
"name": "じゃどくのくさり",
- "effect": "毒でできた鎖を 相手に 巻きつけ 毒素を 流しこんで 蝕む。 猛毒の 状態に することが ある。"
+ "effect": "毒でできた鎖を 相手に 巻きつけ 毒素を 流しこんで 蝕む。 猛毒の 状態に することが ある。"
}
-}
\ No newline at end of file
+}
diff --git a/src/locales/ja/party-ui-handler.json b/src/locales/ja/party-ui-handler.json
index b112653c544..096d8d5bcba 100644
--- a/src/locales/ja/party-ui-handler.json
+++ b/src/locales/ja/party-ui-handler.json
@@ -4,5 +4,44 @@
"CANCEL": "やめる",
"RELEASE": "逃がす",
"APPLY": "使う",
- "TEACH": "教える"
+ "TEACH": "教える",
+ "SPLICE": "吸収合体",
+ "UNSPLICE": "合体を分離",
+ "ACTIVATE": "有効にする",
+ "DEACTIVATE": "無効にする",
+ "TRANSFER": "アイテムを移動",
+ "ALL": "全部",
+ "PASS_BATON": "バトンタッチ",
+ "UNPAUSE_EVOLUTION": "進化を有効にする",
+ "REVIVE": "復活する",
+ "RENAME": "名前を変える",
+ "choosePokemon": "ポケモンを 選んで ください。",
+ "doWhatWithThisPokemon": "このポケモンを どうする?",
+ "noEnergy": "{{pokemonName}}は 戦うための\n元気が 残っていません!",
+ "hasEnergy": "{{pokemonName}}は まだまだ 元気だ!",
+ "cantBeUsed": "{{pokemonName}}は このチャレンジで\n使えられません!",
+ "tooManyItems": "{{pokemonName}}は このアイテムが\nこれ以上 持ちきれない!",
+ "anyEffect": "使っても 効果がないよ",
+ "unpausedEvolutions": "{{pokemonName}}は また 進化できる。",
+ "unspliceConfirmation": "本当に {{pokemonName}}を {{fusionName}}から\n分離しますか? {{fusionName}}は なくなる。",
+ "wasReverted": "{{fusionName}}は {{pokemonName}}に 回帰した。",
+ "releaseConfirmation": "本当に {{pokemonName}}を 逃がしますか?",
+ "releaseInBattle": "戦闘中の ポケモンを\n逃がすことは できません!",
+ "selectAMove": "技を 選んでください。",
+ "changeQuantity": "移動する アイテムを 選んでください。\n< と > で 数量が 変えられる。",
+ "selectAnotherPokemonToSplice": "もう一つの ポケモンを 選んで 合体する。",
+ "cancel": "キャンセル",
+ "able": "可能",
+ "notAble": "不可能",
+ "learned": "覚えている",
+ "goodbye": "グッバイ {{pokemonName}}!",
+ "byebye": "ばいばい {{pokemonName}}!",
+ "farewell": "さようなら {{pokemonName}}!",
+ "soLong": "じゃあね {{pokemonName}}!",
+ "thisIsWhereWePart": "これでお別れだね {{pokemonName}}!",
+ "illMissYou": "恋しく思うよ {{pokemonName}}!",
+ "illNeverForgetYou": "一生忘れない {{pokemonName}}!",
+ "untilWeMeetAgain": "また出会える日まで、{{pokemonName}}!",
+ "sayonara": "さらば {{pokemonName}}!",
+ "smellYaLater": "そんじゃ あばよ {{pokemonName}}!"
}
diff --git a/src/locales/ja/settings.json b/src/locales/ja/settings.json
index 55d39ee70a4..afb2f94a047 100644
--- a/src/locales/ja/settings.json
+++ b/src/locales/ja/settings.json
@@ -20,7 +20,7 @@
"normal": "普通",
"fast": "早い",
"faster": "とても早い",
- "skip": "スキップ",
+ "skip": "飛ばす",
"levelUpNotifications": "レベルアップ時のみ",
"on": "オン",
"off": "オフ",
diff --git a/src/locales/ja/starter-select-ui-handler.json b/src/locales/ja/starter-select-ui-handler.json
index cab5c500df6..cefc5322385 100644
--- a/src/locales/ja/starter-select-ui-handler.json
+++ b/src/locales/ja/starter-select-ui-handler.json
@@ -23,7 +23,7 @@
"manageNature": "性格を変える",
"addToFavorites": "お気に入りにする",
"removeFromFavorites": "お気に入りから除く",
- "useCandies": "飴を使う",
+ "useCandies": "アメを使う",
"selectNature": "性格を選んでください。",
"selectMoveSwapOut": "入れ替えたい技を選んでください。",
"selectMoveSwapWith": "他の技と交換してください。",
diff --git a/src/locales/ja/tutorial.json b/src/locales/ja/tutorial.json
index 21b1b4856c8..99019b03f7f 100644
--- a/src/locales/ja/tutorial.json
+++ b/src/locales/ja/tutorial.json
@@ -1,10 +1,10 @@
{
- "intro": "PokéRogueへようこそ!ログライク要素が\n加わったバトル中心のポケモンファンゲームです。\n$このゲームは収益を上げず、Pokémonおよび使用される\n著作権資産に対する所有権を主張しません。\n$ゲームはまだ作業中ですが、完全にプレイすることができます。\nバグ報告はディスコードコミュニティをご利用ください。\n$ゲームが遅い場合は、ブラウザ設定で「ハードウェア\nアクセラレーション」がオンになっていることを確認してください",
- "accessMenu": "メニューにアクセスするには、入力待ちの間にMキーまたはEscを押してください。\nメニューには設定やさまざまな機能が含まれています。",
- "menu": "このメニューから設定にアクセスできます。\n$設定ではゲームスピード、ウィンドウスタイル、\nおよびその他のオプションを変更できます。\n$ここにはさまざまな他の機能もありますので、\nぜひ確認してみてください!",
- "starterSelect": "この画面でZキーやSpaceを押してポケモンを選択できます。\n選んだポケモンは自分の最初のパーティーになります。\n$最大6匹のパーティーで始めることができますが\nポケモンによってポイントがあり、合計10を超えてはなりません。\n$捕まえたりふかさせたりすることで\n選択できる性別、特性、フォルムなどの幅を広げることができます。\n$個体値も徐々に累積して高くなるので、\n同じポケモンをたくさん捕まえてみてください!",
- "pokerus": "毎日ランダムでスターターの\n3種類に紫色の枠が表示されます。\n$登録されたスターターの中にあれば、\nパーティに追加してつよさを確認してみましょう!",
- "statChange": "ポケモンは交代しない限り、\n次のバトルでも能力変化が維持されます。\n$その代わりに、トレーナーバトルや新しいバイオームに\n入る直前に自動的にリセットされます。\n$CキーまたはShiftキーを押し続けると、\n現在のポケモンの能力変化を確認できます。\n$Vキーを押すと、\n相手が使用した技も確認できます。\n$ただし、今のバトルで相手ポケモンがすでに\n使った技のみが表示されます。",
- "selectItem": "バトルが終わるたびに、\nランダムなアイテム3つの中から1つを選んで獲得します。\n$種類は消耗品、ポケモンの持ち物、\n永続的なパッシブアイテムなど様々です。\n$ほとんどの消耗しない道具は\n効果が累積されます。\n$進化用など一部のアイテムは\n使用できる場合にのみ登場します。\n$持ち物を渡す機能を使用して\nポケモン同士で道具を持たせることもできます。\n$持ち物があれば、アイテム選択画面の\n右下に渡す機能が表示されます。\n$お金で消耗品を購入することもでき、\nウェーブが進むにつれて購入可能な種類が増えます。\n$アイテムを選択すると次のウェーブに進むため、\nまず消耗品の購入を行ってください。",
- "eggGacha": "この画面でポケモンのたまごクーポンを\nガチャができます。\n$卵は戦闘を繰り返すうちにふかします。\n珍しいほどもっと長くかかります。\n$ふかさせたポケモンはパーティーに追加されず、\nスターティングに登録されます。\n$卵からふかしたポケモンは一般的に\n野生で捕まえたポケモンよりも高い個体値を持ちます。\n$一部のポケモンは卵からしか手に入りません。\n$各ガチャマシンがそれぞれ異なるボーナスを持っているため、\n好きな方を使ってみてください!,"
-}
\ No newline at end of file
+ "intro": "PokéRogueへ ようこそ! ローグライク要素が\n加わった バトル中心の ポケモンファンゲームです。\n$このゲームは 収益を上げず、Pokémonおよび 使用される\n著作権資産に 対する所有権を 主張しません。\n$ゲームは まだ開発中ですが、完全に プレイすることが できます。\nバグ報告は ディスコードコミュニティを ご利用ください。\n$ゲームが 遅い場合は、ブラウザ設定で「ハードウェア\nアクセラレーション」が オンになっている ことを 確認してください。",
+ "accessMenu": "メニューを開くには 入力待ちの間に Mキー/Escを 押してください。\nメニューには 設定や 様々な機能が 含まれています。",
+ "menu": "このメニューから 設定が 開けます。\n$設定では、ゲームの速さや ウィンドウタイプなどの オプションを 変更できます。\n$ここには 様々な機能が ありますので、\nぜひ 確認してみてください!",
+ "starterSelect": "この画面では Zキー/空白キーを押して ポケモンが 選択できます。\n選んだポケモンは 最初の手持ちに なります。\n$各ポケモンは ポイントが ある。最大6つを 選べますが\nポケモンのポイントが 合計10を超えては いけません。\n$ポケモンを 捕まえたり タマゴからふかしたり することで\n選択できる 性別、特性、フォルムなどの 幅を広げられます。\n$個体値も 徐々に 累積して 高くなるので、\n同じポケモンを たくさん 捕まえて みてください!",
+ "pokerus": "毎日、無作為に スターターの\n3種類には 紫色の枠が 表示されます。\n$登録された スターターの 中に いれば、\n手持ちに加えて 強さを 確認してみましょう!",
+ "statChange": "ポケモンを 入れ替えない限り、\n次のバトルでも 能力変化は なくなりません。\n$その代わりに、トレーナーバトルや 新しいバイオームに\n入る直前に 自動的に 能力変化は 元に戻ります。\n$Cキー/Shiftキーを 押し続けると、\n場にいるポケモンの 能力変化を 確認できます。\n$Vキーを押すと、\n相手が出した技も 確認できます。\n$ただし、現在のバトルでの 相手ポケモンが\nすでに使った 技のみが 表示されます。",
+ "selectItem": "バトルが 終わるたびには、「ショップ」という\n画面で 3つのご褒美から 1つが選べます。\n$種類は 消耗品、ポケモンの持ち物や道具、\n永続的な パッシブアイテムなど 様々です。\n$ほとんどの 消耗しない 道具は\n効果が 累積されます。\n$例えば 進化アイテムなどの ご褒美は\n使用できる 場合にのみ 登場します。\n$持ち物や道具が\n手持ちポケモン間に 移動できる\n$持ち物や道具が あれば、ショップ画面の\n右下に「アイテム移行」が 表示されます。\n$ショップ画面で お金で 消耗品を 買えます。\nラウンドが 進むにつれて 買えるアイテムが 増えます。\n$ご褒美を 選択すると 次のラウンドに\n進むから、まず 消耗品を 買ってください。",
+ "eggGacha": "この画面では、「タマゴクーポン」で\nポケモンのタマゴを 取得できます。\n$タマゴは ラウンドが進めるうちに ふかします。\nタマゴのふかは レア度によって 時間が かかります。\n$ふかしたポケモンは 手持ちに 加えられず、\nスターターに 登録されます。\n$ふかしたポケモンは 一般的に\n野生ポケモンよりも 高い個体値があります。\n$あるポケモンは タマゴからしか 手に入りません。\n$各ガチャマシンは 個性的なボーナスが あるますから、\n好きな方から 引いてみてください!,"
+}
diff --git a/src/locales/pt_BR/ability-trigger.json b/src/locales/pt_BR/ability-trigger.json
index f6a11267f9d..cd47fd8e3dc 100644
--- a/src/locales/pt_BR/ability-trigger.json
+++ b/src/locales/pt_BR/ability-trigger.json
@@ -12,6 +12,7 @@
"blockItemTheft": "{{abilityName}} de {{pokemonNameWithAffix}}\nprevine o roubo de itens!",
"typeImmunityHeal": "{{abilityName}} de {{pokemonNameWithAffix}}\nrestaurou um pouco de PS!",
"nonSuperEffectiveImmunity": "{{pokemonNameWithAffix}} evitou dano\ncom {{abilityName}}!",
+ "fullHpResistType": "{{pokemonNameWithAffix}} fez seu casco brilhar!\nEstá distorcendo o confronte de tipos!",
"moveImmunity": "Isso não afeta {{pokemonNameWithAffix}}!",
"reverseDrain": "{{pokemonNameWithAffix}} absorveu a gosma líquida!",
"postDefendTypeChange": "{{abilityName}} de {{pokemonNameWithAffix}}\ntransformou-o no tipo {{typeName}}!",
diff --git a/src/locales/pt_BR/battle.json b/src/locales/pt_BR/battle.json
index 2b20e0062ea..08eeb99e0cd 100644
--- a/src/locales/pt_BR/battle.json
+++ b/src/locales/pt_BR/battle.json
@@ -44,6 +44,7 @@
"moveNotImplemented": "{{moveName}} ainda não foi implementado e não pode ser usado.",
"moveNoPP": "Não há mais PP\npara esse movimento!",
"moveDisabled": "Não se pode usar {{moveName}} porque foi desabilitado!",
+ "disableInterruptedMove": "{{moveName}} de {{pokemonNameWithAffix}}\nestá desabilitado!",
"noPokeballForce": "Uma força misteriosa\nte impede de usar Poké Bolas.",
"noPokeballTrainer": "Não se pode capturar\nPokémon dos outros!",
"noPokeballMulti": "Não se pode lançar Poké Bolas\nquando há mais de um Pokémon!",
@@ -61,6 +62,7 @@
"skipItemQuestion": "Tem certeza de que não quer escolher um item?",
"itemStackFull": "O estoque de {{fullItemName}} está cheio.\nVocê receberá {{itemName}} no lugar.",
"eggHatching": "Opa?",
+ "eggSkipPrompt": "Pular para súmario de ovos?",
"ivScannerUseQuestion": "Quer usar o Scanner de IVs em {{pokemonName}}?",
"wildPokemonWithAffix": "{{pokemonName}} selvagem",
"foePokemonWithAffix": "{{pokemonName}} adversário",
@@ -89,7 +91,7 @@
"statSeverelyFell_other": "{{stats}} de {{pokemonNameWithAffix}} diminuíram severamente!",
"statWontGoAnyLower_one": "{{stats}} de {{pokemonNameWithAffix}} não vai mais diminuir!",
"statWontGoAnyLower_other": "{{stats}} de {{pokemonNameWithAffix}} não vão mais diminuir!",
- "transformedIntoType": "{{pokemonName}} transformed\ninto the {{type}} type!",
+ "transformedIntoType": "{{pokemonName}} se transformou\nno tipo {{type}}!",
"ppReduced": "O PP do movimento {{moveName}} de\n{{targetName}} foi reduzido em {{reduction}}!",
"retryBattle": "Você gostaria de tentar novamente desde o início da batalha?",
"unlockedSomething": "{{unlockedThing}}\nfoi desbloqueado.",
diff --git a/src/locales/pt_BR/battler-tags.json b/src/locales/pt_BR/battler-tags.json
index e0f6538404b..9c0f4732013 100644
--- a/src/locales/pt_BR/battler-tags.json
+++ b/src/locales/pt_BR/battler-tags.json
@@ -67,5 +67,7 @@
"saltCuredLapse": "{{pokemonNameWithAffix}} foi ferido pelo {{moveName}}!",
"cursedOnAdd": "{{pokemonNameWithAffix}} cortou seus PS pela metade e amaldiçoou {{pokemonName}}!",
"cursedLapse": "{{pokemonNameWithAffix}} foi ferido pelo Curse!",
- "stockpilingOnAdd": "{{pokemonNameWithAffix}} estocou {{stockpiledCount}}!"
+ "stockpilingOnAdd": "{{pokemonNameWithAffix}} estocou {{stockpiledCount}}!",
+ "disabledOnAdd": "{{moveName}} de {{pokemonNameWithAffix}}\nfoi desabilitado!",
+ "disabledLapse": "{{moveName}} de {{pokemonNameWithAffix}}\nnão está mais desabilitado."
}
diff --git a/src/locales/pt_BR/challenges.json b/src/locales/pt_BR/challenges.json
index 8402ad106b6..9dc613651a6 100644
--- a/src/locales/pt_BR/challenges.json
+++ b/src/locales/pt_BR/challenges.json
@@ -1,6 +1,7 @@
{
"title": "Desafios",
"illegalEvolution": "{{pokemon}} não pode ser escolhido\nnesse desafio!",
+ "noneSelected": "Nada Selecionado",
"singleGeneration": {
"name": "Geração Única",
"desc": "Você só pode user Pokémon da {{gen}} geração.",
@@ -33,4 +34,4 @@
"value.0": "Desligado",
"value.1": "Ligado"
}
-}
+}
\ No newline at end of file
diff --git a/src/overrides.ts b/src/overrides.ts
index 48c118b55bc..d1597dfdee8 100644
--- a/src/overrides.ts
+++ b/src/overrides.ts
@@ -98,7 +98,7 @@ class DefaultOverrides {
readonly PASSIVE_ABILITY_OVERRIDE: Abilities = Abilities.NONE;
readonly STATUS_OVERRIDE: StatusEffect = StatusEffect.NONE;
readonly GENDER_OVERRIDE: Gender | null = null;
- readonly MOVESET_OVERRIDE: Array = [];
+ readonly MOVESET_OVERRIDE: Moves | Array = [];
readonly SHINY_OVERRIDE: boolean = false;
readonly VARIANT_OVERRIDE: Variant = 0;
@@ -111,7 +111,7 @@ class DefaultOverrides {
readonly OPP_PASSIVE_ABILITY_OVERRIDE: Abilities = Abilities.NONE;
readonly OPP_STATUS_OVERRIDE: StatusEffect = StatusEffect.NONE;
readonly OPP_GENDER_OVERRIDE: Gender | null = null;
- readonly OPP_MOVESET_OVERRIDE: Array = [];
+ readonly OPP_MOVESET_OVERRIDE: Moves | Array = [];
readonly OPP_SHINY_OVERRIDE: boolean = false;
readonly OPP_VARIANT_OVERRIDE: Variant = 0;
readonly OPP_IVS_OVERRIDE: number | number[] = [];
diff --git a/src/phases/attempt-capture-phase.ts b/src/phases/attempt-capture-phase.ts
index 55a82affaf6..cf9ce997bfd 100644
--- a/src/phases/attempt-capture-phase.ts
+++ b/src/phases/attempt-capture-phase.ts
@@ -221,8 +221,8 @@ export class AttemptCapturePhase extends PokemonPhase {
this.scene.clearEnemyHeldItemModifiers();
this.scene.field.remove(pokemon, true);
};
- const addToParty = () => {
- const newPokemon = pokemon.addToParty(this.pokeballType);
+ const addToParty = (slotIndex?: number) => {
+ const newPokemon = pokemon.addToParty(this.pokeballType, slotIndex);
const modifiers = this.scene.findModifiers(m => m instanceof PokemonHeldItemModifier, false);
if (this.scene.getParty().filter(p => p.isShiny()).length === 6) {
this.scene.validateAchv(achvs.SHINY_PARTY);
@@ -253,7 +253,7 @@ export class AttemptCapturePhase extends PokemonPhase {
this.scene.ui.setMode(Mode.PARTY, PartyUiMode.RELEASE, this.fieldIndex, (slotIndex: integer, _option: PartyOption) => {
this.scene.ui.setMode(Mode.MESSAGE).then(() => {
if (slotIndex < 6) {
- addToParty();
+ addToParty(slotIndex);
} else {
promptRelease();
}
diff --git a/src/phases/faint-phase.ts b/src/phases/faint-phase.ts
index 48366afaad4..c30003b79aa 100644
--- a/src/phases/faint-phase.ts
+++ b/src/phases/faint-phase.ts
@@ -65,6 +65,8 @@ export class FaintPhase extends PokemonPhase {
if (pokemon.turnData?.attacksReceived?.length) {
const lastAttack = pokemon.turnData.attacksReceived[0];
applyPostFaintAbAttrs(PostFaintAbAttr, pokemon, this.scene.getPokemonById(lastAttack.sourceId)!, new PokemonMove(lastAttack.move).getMove(), lastAttack.result); // TODO: is this bang correct?
+ } else { //If killed by indirect damage, apply post-faint abilities without providing a last move
+ applyPostFaintAbAttrs(PostFaintAbAttr, pokemon);
}
const alivePlayField = this.scene.getField(true);
diff --git a/src/phases/learn-move-phase.ts b/src/phases/learn-move-phase.ts
index 049fc6951b6..fad7eac9b68 100644
--- a/src/phases/learn-move-phase.ts
+++ b/src/phases/learn-move-phase.ts
@@ -1,6 +1,6 @@
import BattleScene from "#app/battle-scene";
import { initMoveAnim, loadMoveAnimAssets } from "#app/data/battle-anims";
-import { allMoves } from "#app/data/move";
+import Move, { allMoves } from "#app/data/move";
import { SpeciesFormChangeMoveLearnedTrigger } from "#app/data/pokemon-forms";
import { Moves } from "#app/enums/moves";
import { getPokemonNameWithAffix } from "#app/messages";
@@ -9,14 +9,15 @@ import { SummaryUiMode } from "#app/ui/summary-ui-handler";
import { Mode } from "#app/ui/ui";
import i18next from "i18next";
import { PlayerPartyMemberPokemonPhase } from "./player-party-member-pokemon-phase";
+import Pokemon from "#app/field/pokemon";
export class LearnMovePhase extends PlayerPartyMemberPokemonPhase {
private moveId: Moves;
+ private messageMode: Mode;
private fromTM: boolean;
constructor(scene: BattleScene, partyMemberIndex: integer, moveId: Moves, fromTM?: boolean) {
super(scene, partyMemberIndex);
-
this.moveId = moveId;
this.fromTM = fromTM ?? false;
}
@@ -26,87 +27,128 @@ export class LearnMovePhase extends PlayerPartyMemberPokemonPhase {
const pokemon = this.getPokemon();
const move = allMoves[this.moveId];
+ const currentMoveset = pokemon.getMoveset();
- const existingMoveIndex = pokemon.getMoveset().findIndex(m => m?.moveId === move.id);
-
- if (existingMoveIndex > -1) {
+ // The game first checks if the Pokemon already has the move and ends the phase if it does.
+ const hasMoveAlready = currentMoveset.some(m => m?.moveId === move.id) && this.moveId !== Moves.SKETCH;
+ if (hasMoveAlready) {
return this.end();
}
- const emptyMoveIndex = pokemon.getMoveset().length < 4
- ? pokemon.getMoveset().length
- : pokemon.getMoveset().findIndex(m => m === null);
-
- const messageMode = this.scene.ui.getHandler() instanceof EvolutionSceneHandler
- ? Mode.EVOLUTION_SCENE
- : Mode.MESSAGE;
-
- if (emptyMoveIndex > -1) {
- pokemon.setMove(emptyMoveIndex, this.moveId);
- if (this.fromTM) {
- pokemon.usedTMs.push(this.moveId);
- }
- initMoveAnim(this.scene, this.moveId).then(() => {
- loadMoveAnimAssets(this.scene, [this.moveId], true)
- .then(() => {
- this.scene.ui.setMode(messageMode).then(() => {
- // Sound loaded into game as is
- this.scene.playSound("level_up_fanfare");
- this.scene.ui.showText(i18next.t("battle:learnMove", { pokemonName: getPokemonNameWithAffix(pokemon), moveName: move.name }), null, () => {
- this.scene.triggerPokemonFormChange(pokemon, SpeciesFormChangeMoveLearnedTrigger, true);
- this.end();
- }, messageMode === Mode.EVOLUTION_SCENE ? 1000 : null, true);
- });
- });
- });
+ this.messageMode = this.scene.ui.getHandler() instanceof EvolutionSceneHandler ? Mode.EVOLUTION_SCENE : Mode.MESSAGE;
+ this.scene.ui.setMode(this.messageMode);
+ // If the Pokemon has less than 4 moves, the new move is added to the largest empty moveset index
+ // If it has 4 moves, the phase then checks if the player wants to replace the move itself.
+ if (currentMoveset.length < 4) {
+ this.learnMove(currentMoveset.length, move, pokemon);
} else {
- this.scene.ui.setMode(messageMode).then(() => {
- this.scene.ui.showText(i18next.t("battle:learnMovePrompt", { pokemonName: getPokemonNameWithAffix(pokemon), moveName: move.name }), null, () => {
- this.scene.ui.showText(i18next.t("battle:learnMoveLimitReached", { pokemonName: getPokemonNameWithAffix(pokemon) }), null, () => {
- this.scene.ui.showText(i18next.t("battle:learnMoveReplaceQuestion", { moveName: move.name }), null, () => {
- const noHandler = () => {
- this.scene.ui.setMode(messageMode).then(() => {
- this.scene.ui.showText(i18next.t("battle:learnMoveStopTeaching", { moveName: move.name }), null, () => {
- this.scene.ui.setModeWithoutClear(Mode.CONFIRM, () => {
- this.scene.ui.setMode(messageMode);
- this.scene.ui.showText(i18next.t("battle:learnMoveNotLearned", { pokemonName: getPokemonNameWithAffix(pokemon), moveName: move.name }), null, () => this.end(), null, true);
- }, () => {
- this.scene.ui.setMode(messageMode);
- this.scene.unshiftPhase(new LearnMovePhase(this.scene, this.partyMemberIndex, this.moveId));
- this.end();
- });
- });
- });
- };
- this.scene.ui.setModeWithoutClear(Mode.CONFIRM, () => {
- this.scene.ui.setMode(messageMode);
- this.scene.ui.showText(i18next.t("battle:learnMoveForgetQuestion"), null, () => {
- this.scene.ui.setModeWithoutClear(Mode.SUMMARY, this.getPokemon(), SummaryUiMode.LEARN_MOVE, move, (moveIndex: integer) => {
- if (moveIndex === 4) {
- noHandler();
- return;
- }
- this.scene.ui.setMode(messageMode).then(() => {
- this.scene.ui.showText(i18next.t("battle:countdownPoof"), null, () => {
- this.scene.ui.showText(i18next.t("battle:learnMoveForgetSuccess", { pokemonName: getPokemonNameWithAffix(pokemon), moveName: pokemon.moveset[moveIndex]!.getName() }), null, () => { // TODO: is the bang correct?
- this.scene.ui.showText(i18next.t("battle:learnMoveAnd"), null, () => {
- if (this.fromTM) {
- pokemon.usedTMs.push(this.moveId);
- }
- pokemon.setMove(moveIndex, Moves.NONE);
- this.scene.unshiftPhase(new LearnMovePhase(this.scene, this.partyMemberIndex, this.moveId));
- this.end();
- }, null, true);
- }, null, true);
- }, null, true);
- });
- });
- }, null, true);
- }, noHandler);
- });
- }, null, true);
- }, null, true);
- });
+ this.replaceMoveCheck(move, pokemon);
}
}
+
+ /**
+ * This displays a chain of messages (listed below) and asks if the user wishes to forget a move.
+ *
+ * > [Pokemon] wants to learn the move [MoveName]
+ * > However, [Pokemon] already knows four moves.
+ * > Should a move be forgotten and replaced with [MoveName]? --> `Mode.CONFIRM` -> Yes: Go to `this.forgetMoveProcess()`, No: Go to `this.rejectMoveAndEnd()`
+ * @param move The Move to be learned
+ * @param Pokemon The Pokemon learning the move
+ */
+ async replaceMoveCheck(move: Move, pokemon: Pokemon) {
+ const learnMovePrompt = i18next.t("battle:learnMovePrompt", { pokemonName: getPokemonNameWithAffix(pokemon), moveName: move.name });
+ const moveLimitReached = i18next.t("battle:learnMoveLimitReached", { pokemonName: getPokemonNameWithAffix(pokemon) });
+ const shouldReplaceQ = i18next.t("battle:learnMoveReplaceQuestion", { moveName: move.name });
+ const preQText = [learnMovePrompt, moveLimitReached].join("$");
+ await this.scene.ui.showTextPromise(preQText);
+ await this.scene.ui.showTextPromise(shouldReplaceQ, undefined, false);
+ await this.scene.ui.setModeWithoutClear(Mode.CONFIRM,
+ () => this.forgetMoveProcess(move, pokemon), // Yes
+ () => { // No
+ this.scene.ui.setMode(this.messageMode);
+ this.rejectMoveAndEnd(move, pokemon);
+ }
+ );
+ }
+
+ /**
+ * This facilitates the process in which an old move is chosen to be forgotten.
+ *
+ * > Which move should be forgotten?
+ *
+ * The game then goes `Mode.SUMMARY` to select a move to be forgotten.
+ * If a player does not select a move or chooses the new move (`moveIndex === 4`), the game goes to `this.rejectMoveAndEnd()`.
+ * If an old move is selected, the function then passes the `moveIndex` to `this.learnMove()`
+ * @param move The Move to be learned
+ * @param Pokemon The Pokemon learning the move
+ */
+ async forgetMoveProcess(move: Move, pokemon: Pokemon) {
+ this.scene.ui.setMode(this.messageMode);
+ await this.scene.ui.showTextPromise(i18next.t("battle:learnMoveForgetQuestion"), undefined, true);
+ await this.scene.ui.setModeWithoutClear(Mode.SUMMARY, pokemon, SummaryUiMode.LEARN_MOVE, move, (moveIndex: integer) => {
+ if (moveIndex === 4) {
+ this.scene.ui.setMode(this.messageMode).then(() => this.rejectMoveAndEnd(move, pokemon));
+ return;
+ }
+ const forgetSuccessText = i18next.t("battle:learnMoveForgetSuccess", { pokemonName: getPokemonNameWithAffix(pokemon), moveName: pokemon.moveset[moveIndex]!.getName() });
+ const fullText = [i18next.t("battle:countdownPoof"), forgetSuccessText, i18next.t("battle:learnMoveAnd")].join("$");
+ this.scene.ui.setMode(this.messageMode).then(() => this.learnMove(moveIndex, move, pokemon, fullText));
+ });
+ }
+
+ /**
+ * This asks the player if they wish to end the current move learning process.
+ *
+ * > Stop trying to teach [MoveName]? --> `Mode.CONFIRM` --> Yes: > [Pokemon] did not learn the move [MoveName], No: `this.replaceMoveCheck()`
+ *
+ * If the player wishes to not teach the Pokemon the move, it displays a message and ends the phase.
+ * If the player reconsiders, it repeats the process for a Pokemon with a full moveset once again.
+ * @param move The Move to be learned
+ * @param Pokemon The Pokemon learning the move
+ */
+ async rejectMoveAndEnd(move: Move, pokemon: Pokemon) {
+ await this.scene.ui.showTextPromise(i18next.t("battle:learnMoveStopTeaching", { moveName: move.name }), undefined, false);
+ this.scene.ui.setModeWithoutClear(Mode.CONFIRM,
+ () => {
+ this.scene.ui.setMode(this.messageMode);
+ this.scene.ui.showTextPromise(i18next.t("battle:learnMoveNotLearned", { pokemonName: getPokemonNameWithAffix(pokemon), moveName: move.name }), undefined, true).then(() => this.end());
+ },
+ () => {
+ this.scene.ui.setMode(this.messageMode);
+ this.replaceMoveCheck(move, pokemon);
+ }
+ );
+ }
+
+ /**
+ * This teaches the Pokemon the new move and ends the phase.
+ * When a Pokemon forgets a move and learns a new one, its 'Learn Move' message is significantly longer.
+ *
+ * Pokemon with a `moveset.length < 4`
+ * > [Pokemon] learned [MoveName]
+ *
+ * Pokemon with a `moveset.length > 4`
+ * > 1... 2... and 3... and Poof!
+ * > [Pokemon] forgot how to use [MoveName]
+ * > And...
+ * > [Pokemon] learned [MoveName]!
+ * @param move The Move to be learned
+ * @param Pokemon The Pokemon learning the move
+ */
+ async learnMove(index: number, move: Move, pokemon: Pokemon, textMessage?: string) {
+ if (this.fromTM) {
+ pokemon.usedTMs.push(this.moveId);
+ }
+ pokemon.setMove(index, this.moveId);
+ initMoveAnim(this.scene, this.moveId).then(() => {
+ loadMoveAnimAssets(this.scene, [this.moveId], true);
+ this.scene.playSound("level_up_fanfare"); // Sound loaded into game as is
+ });
+ this.scene.ui.setMode(this.messageMode);
+ const learnMoveText = i18next.t("battle:learnMove", { pokemonName: getPokemonNameWithAffix(pokemon), moveName: move.name });
+ textMessage = textMessage ? textMessage+"$"+learnMoveText : learnMoveText;
+ await this.scene.ui.showTextPromise(textMessage, this.messageMode === Mode.EVOLUTION_SCENE ? 1000 : undefined, true);
+ this.scene.triggerPokemonFormChange(pokemon, SpeciesFormChangeMoveLearnedTrigger, true);
+ this.end();
+ }
}
diff --git a/src/phases/quiet-form-change-phase.ts b/src/phases/quiet-form-change-phase.ts
index 6a1d31d137d..dde500e156a 100644
--- a/src/phases/quiet-form-change-phase.ts
+++ b/src/phases/quiet-form-change-phase.ts
@@ -65,7 +65,7 @@ export class QuietFormChangePhase extends BattlePhase {
pokemonFormTintSprite.setVisible(false);
pokemonFormTintSprite.setTintFill(0xFFFFFF);
- this.scene.playSound("PRSFX- Transform");
+ this.scene.playSound("battle_anims/PRSFX- Transform");
this.scene.tweens.add({
targets: pokemonTintSprite,
diff --git a/src/phases/weather-effect-phase.ts b/src/phases/weather-effect-phase.ts
index e85ef0326f6..73de44389d0 100644
--- a/src/phases/weather-effect-phase.ts
+++ b/src/phases/weather-effect-phase.ts
@@ -1,5 +1,5 @@
import BattleScene from "#app/battle-scene";
-import { applyPreWeatherEffectAbAttrs, SuppressWeatherEffectAbAttr, PreWeatherDamageAbAttr, applyAbAttrs, BlockNonDirectDamageAbAttr, applyPostWeatherLapseAbAttrs, PostWeatherLapseAbAttr } from "#app/data/ability.js";
+import { applyPreWeatherEffectAbAttrs, SuppressWeatherEffectAbAttr, PreWeatherDamageAbAttr, applyAbAttrs, BlockNonDirectDamageAbAttr, applyPostWeatherLapseAbAttrs, PostWeatherLapseAbAttr } from "#app/data/ability";
import { CommonAnim } from "#app/data/battle-anims";
import { Weather, getWeatherDamageMessage, getWeatherLapseMessage } from "#app/data/weather";
import { BattlerTagType } from "#app/enums/battler-tag-type";
diff --git a/src/system/version-converter.ts b/src/system/version-converter.ts
index ed65fcd99b8..1a7c7b2026a 100644
--- a/src/system/version-converter.ts
+++ b/src/system/version-converter.ts
@@ -1,4 +1,4 @@
-import { allSpecies } from "#app/data/pokemon-species.js";
+import { allSpecies } from "#app/data/pokemon-species";
import { AbilityAttr, defaultStarterSpecies, DexAttr, SessionSaveData, SystemSaveData } from "./game-data";
import { SettingKeys } from "./settings/settings";
diff --git a/src/test/abilities/aura_break.test.ts b/src/test/abilities/aura_break.test.ts
index 0fb2212d817..422ac5178c1 100644
--- a/src/test/abilities/aura_break.test.ts
+++ b/src/test/abilities/aura_break.test.ts
@@ -3,7 +3,6 @@ import { Abilities } from "#enums/abilities";
import { Moves } from "#enums/moves";
import { Species } from "#enums/species";
import GameManager from "#test/utils/gameManager";
-import { SPLASH_ONLY } from "#test/utils/testUtils";
import Phaser from "phaser";
import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest";
@@ -27,7 +26,7 @@ describe("Abilities - Aura Break", () => {
game = new GameManager(phaserGame);
game.override.battleType("single");
game.override.moveset([Moves.MOONBLAST, Moves.DARK_PULSE, Moves.MOONBLAST, Moves.DARK_PULSE]);
- game.override.enemyMoveset(SPLASH_ONLY);
+ game.override.enemyMoveset(Moves.SPLASH);
game.override.enemyAbility(Abilities.AURA_BREAK);
game.override.enemySpecies(Species.SHUCKLE);
});
diff --git a/src/test/abilities/battery.test.ts b/src/test/abilities/battery.test.ts
index 020866509d6..cd02ed0c4eb 100644
--- a/src/test/abilities/battery.test.ts
+++ b/src/test/abilities/battery.test.ts
@@ -5,7 +5,6 @@ import { TurnEndPhase } from "#app/phases/turn-end-phase";
import { Moves } from "#enums/moves";
import { Species } from "#enums/species";
import GameManager from "#test/utils/gameManager";
-import { SPLASH_ONLY } from "#test/utils/testUtils";
import Phaser from "phaser";
import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest";
@@ -31,7 +30,7 @@ describe("Abilities - Battery", () => {
game.override.enemySpecies(Species.SHUCKLE);
game.override.enemyAbility(Abilities.BALL_FETCH);
game.override.moveset([Moves.TACKLE, Moves.BREAKING_SWIPE, Moves.SPLASH, Moves.DAZZLING_GLEAM]);
- game.override.enemyMoveset(SPLASH_ONLY);
+ game.override.enemyMoveset(Moves.SPLASH);
});
it("raises the power of allies' special moves by 30%", async () => {
diff --git a/src/test/abilities/beast_boost.test.ts b/src/test/abilities/beast_boost.test.ts
index 05645a1231d..26bae7b8838 100644
--- a/src/test/abilities/beast_boost.test.ts
+++ b/src/test/abilities/beast_boost.test.ts
@@ -4,7 +4,6 @@ import { Moves } from "#enums/moves";
import { Species } from "#enums/species";
import { Stat } from "#enums/stat";
import GameManager from "#test/utils/gameManager";
-import { SPLASH_ONLY } from "#test/utils/testUtils";
import Phaser from "phaser";
import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest";
@@ -31,7 +30,7 @@ describe("Abilities - Beast Boost", () => {
.ability(Abilities.BEAST_BOOST)
.startingLevel(2000)
.moveset([ Moves.FLAMETHROWER ])
- .enemyMoveset(SPLASH_ONLY);
+ .enemyMoveset(Moves.SPLASH);
});
it("should prefer highest stat to boost its corresponding stat stage by 1 when winning a battle", async() => {
@@ -51,7 +50,7 @@ describe("Abilities - Beast Boost", () => {
}, 20000);
it("should use in-battle overriden stats when determining the stat stage to raise by 1", async() => {
- game.override.enemyMoveset(new Array(4).fill(Moves.GUARD_SPLIT));
+ game.override.enemyMoveset([Moves.GUARD_SPLIT]);
await game.classicMode.startBattle([Species.SLOWBRO]);
diff --git a/src/test/abilities/contrary.test.ts b/src/test/abilities/contrary.test.ts
index 19ecc7e0240..95a209395dc 100644
--- a/src/test/abilities/contrary.test.ts
+++ b/src/test/abilities/contrary.test.ts
@@ -1,10 +1,10 @@
-import { Stat } from "#enums/stat";
-import GameManager from "#test/utils/gameManager";
+import { Moves } from "#app/enums/moves";
import { Abilities } from "#enums/abilities";
import { Species } from "#enums/species";
+import { Stat } from "#enums/stat";
+import GameManager from "#test/utils/gameManager";
import Phaser from "phaser";
import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest";
-import { SPLASH_ONLY } from "../utils/testUtils";
describe("Abilities - Contrary", () => {
let phaserGame: Phaser.Game;
@@ -27,7 +27,7 @@ describe("Abilities - Contrary", () => {
.enemySpecies(Species.BULBASAUR)
.enemyAbility(Abilities.CONTRARY)
.ability(Abilities.INTIMIDATE)
- .enemyMoveset(SPLASH_ONLY);
+ .enemyMoveset(Moves.SPLASH);
});
it("should invert stat changes when applied", async() => {
diff --git a/src/test/abilities/costar.test.ts b/src/test/abilities/costar.test.ts
index 96ec775f2a0..794bed0d3cf 100644
--- a/src/test/abilities/costar.test.ts
+++ b/src/test/abilities/costar.test.ts
@@ -5,7 +5,6 @@ import { Species } from "#app/enums/species";
import { CommandPhase } from "#app/phases/command-phase";
import { MessagePhase } from "#app/phases/message-phase";
import GameManager from "#test/utils/gameManager";
-import { SPLASH_ONLY } from "#test/utils/testUtils";
import Phaser from "phaser";
import { afterEach, beforeAll, beforeEach, describe, expect, test } from "vitest";
@@ -30,7 +29,7 @@ describe("Abilities - COSTAR", () => {
game.override.battleType("double");
game.override.ability(Abilities.COSTAR);
game.override.moveset([Moves.SPLASH, Moves.NASTY_PLOT]);
- game.override.enemyMoveset(SPLASH_ONLY);
+ game.override.enemyMoveset(Moves.SPLASH);
});
diff --git a/src/test/abilities/dancer.test.ts b/src/test/abilities/dancer.test.ts
index d80f497f8b2..ec5ce53f4c3 100644
--- a/src/test/abilities/dancer.test.ts
+++ b/src/test/abilities/dancer.test.ts
@@ -30,7 +30,7 @@ describe("Abilities - Dancer", () => {
.moveset([Moves.SWORDS_DANCE, Moves.SPLASH])
.enemySpecies(Species.MAGIKARP)
.enemyAbility(Abilities.DANCER)
- .enemyMoveset(Array(4).fill(Moves.VICTORY_DANCE));
+ .enemyMoveset([Moves.VICTORY_DANCE]);
});
// Reference Link: https://bulbapedia.bulbagarden.net/wiki/Dancer_(Ability)
diff --git a/src/test/abilities/disguise.test.ts b/src/test/abilities/disguise.test.ts
index ef145262954..fa7f26d2716 100644
--- a/src/test/abilities/disguise.test.ts
+++ b/src/test/abilities/disguise.test.ts
@@ -6,7 +6,6 @@ import { StatusEffect } from "#app/data/status-effect";
import { Stat } from "#enums/stat";
import GameManager from "#test/utils/gameManager";
import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest";
-import { SPLASH_ONLY } from "../utils/testUtils";
const TIMEOUT = 20 * 1000;
@@ -31,7 +30,7 @@ describe("Abilities - Disguise", () => {
game.override
.battleType("single")
.enemySpecies(Species.MIMIKYU)
- .enemyMoveset(SPLASH_ONLY)
+ .enemyMoveset(Moves.SPLASH)
.starterSpecies(Species.REGIELEKI)
.moveset([Moves.SHADOW_SNEAK, Moves.VACUUM_WAVE, Moves.TOXIC_THREAD, Moves.SPLASH]);
}, TIMEOUT);
@@ -108,7 +107,7 @@ describe("Abilities - Disguise", () => {
}, TIMEOUT);
it("persists form change when switched out", async () => {
- game.override.enemyMoveset(Array(4).fill(Moves.SHADOW_SNEAK));
+ game.override.enemyMoveset([Moves.SHADOW_SNEAK]);
game.override.starterSpecies(0);
await game.classicMode.startBattle([ Species.MIMIKYU, Species.FURRET ]);
@@ -194,7 +193,7 @@ describe("Abilities - Disguise", () => {
}, TIMEOUT);
it("doesn't faint twice when fainting due to Disguise break damage, nor prevent faint from Disguise break damage if using Endure", async () => {
- game.override.enemyMoveset(Array(4).fill(Moves.ENDURE));
+ game.override.enemyMoveset([Moves.ENDURE]);
await game.classicMode.startBattle();
const mimikyu = game.scene.getEnemyPokemon()!;
diff --git a/src/test/abilities/dry_skin.test.ts b/src/test/abilities/dry_skin.test.ts
index b337e4d96f7..1af8831f25b 100644
--- a/src/test/abilities/dry_skin.test.ts
+++ b/src/test/abilities/dry_skin.test.ts
@@ -1,9 +1,7 @@
import { Species } from "#app/enums/species";
-import { TurnEndPhase } from "#app/phases/turn-end-phase";
import { Abilities } from "#enums/abilities";
import { Moves } from "#enums/moves";
import GameManager from "#test/utils/gameManager";
-import { SPLASH_ONLY } from "#test/utils/testUtils";
import Phaser from "phaser";
import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest";
@@ -23,63 +21,56 @@ describe("Abilities - Dry Skin", () => {
beforeEach(() => {
game = new GameManager(phaserGame);
- game.override.battleType("single");
- game.override.disableCrits();
- game.override.enemyAbility(Abilities.DRY_SKIN);
- game.override.enemyMoveset(SPLASH_ONLY);
- game.override.enemySpecies(Species.CHARMANDER);
- game.override.ability(Abilities.UNNERVE);
- game.override.starterSpecies(Species.CHANDELURE);
+ game.override
+ .battleType("single")
+ .disableCrits()
+ .enemyAbility(Abilities.DRY_SKIN)
+ .enemyMoveset(Moves.SPLASH)
+ .enemySpecies(Species.CHARMANDER)
+ .ability(Abilities.BALL_FETCH)
+ .moveset([Moves.SUNNY_DAY, Moves.RAIN_DANCE, Moves.SPLASH, Moves.WATER_GUN])
+ .starterSpecies(Species.CHANDELURE);
});
it("during sunlight, lose 1/8 of maximum health at the end of each turn", async () => {
- game.override.moveset([Moves.SUNNY_DAY, Moves.SPLASH]);
-
- await game.startBattle();
+ await game.classicMode.startBattle();
const enemy = game.scene.getEnemyPokemon()!;
- expect(enemy).not.toBe(undefined);
// first turn
- let previousEnemyHp = enemy.hp;
game.move.select(Moves.SUNNY_DAY);
- await game.phaseInterceptor.to(TurnEndPhase);
- expect(enemy.hp).toBeLessThan(previousEnemyHp);
+ await game.phaseInterceptor.to("TurnEndPhase");
+ expect(enemy.hp).toBeLessThan(enemy.getMaxHp());
// second turn
- previousEnemyHp = enemy.hp;
+ enemy.hp = enemy.getMaxHp();
game.move.select(Moves.SPLASH);
- await game.phaseInterceptor.to(TurnEndPhase);
- expect(enemy.hp).toBeLessThan(previousEnemyHp);
+ await game.phaseInterceptor.to("TurnEndPhase");
+ expect(enemy.hp).toBeLessThan(enemy.getMaxHp());
});
it("during rain, gain 1/8 of maximum health at the end of each turn", async () => {
- game.override.moveset([Moves.RAIN_DANCE, Moves.SPLASH]);
-
- await game.startBattle();
+ await game.classicMode.startBattle();
const enemy = game.scene.getEnemyPokemon()!;
- expect(enemy).not.toBe(undefined);
enemy.hp = 1;
// first turn
- let previousEnemyHp = enemy.hp;
game.move.select(Moves.RAIN_DANCE);
- await game.phaseInterceptor.to(TurnEndPhase);
- expect(enemy.hp).toBeGreaterThan(previousEnemyHp);
+ await game.phaseInterceptor.to("TurnEndPhase");
+ expect(enemy.hp).toBeGreaterThan(1);
// second turn
- previousEnemyHp = enemy.hp;
+ enemy.hp = 1;
game.move.select(Moves.SPLASH);
- await game.phaseInterceptor.to(TurnEndPhase);
- expect(enemy.hp).toBeGreaterThan(previousEnemyHp);
+ await game.phaseInterceptor.to("TurnEndPhase");
+ expect(enemy.hp).toBeGreaterThan(1);
});
it("opposing fire attacks do 25% more damage", async () => {
game.override.moveset([Moves.FLAMETHROWER]);
-
- await game.startBattle();
+ await game.classicMode.startBattle();
const enemy = game.scene.getEnemyPokemon()!;
const initialHP = 1000;
@@ -87,72 +78,65 @@ describe("Abilities - Dry Skin", () => {
// first turn
game.move.select(Moves.FLAMETHROWER);
- await game.phaseInterceptor.to(TurnEndPhase);
+ await game.phaseInterceptor.to("TurnEndPhase");
const fireDamageTakenWithDrySkin = initialHP - enemy.hp;
- expect(enemy.hp > 0);
enemy.hp = initialHP;
game.override.enemyAbility(Abilities.NONE);
// second turn
game.move.select(Moves.FLAMETHROWER);
- await game.phaseInterceptor.to(TurnEndPhase);
+ await game.phaseInterceptor.to("TurnEndPhase");
const fireDamageTakenWithoutDrySkin = initialHP - enemy.hp;
expect(fireDamageTakenWithDrySkin).toBeGreaterThan(fireDamageTakenWithoutDrySkin);
});
it("opposing water attacks heal 1/4 of maximum health and deal no damage", async () => {
- game.override.moveset([Moves.WATER_GUN]);
-
- await game.startBattle();
+ await game.classicMode.startBattle();
const enemy = game.scene.getEnemyPokemon()!;
- expect(enemy).not.toBe(undefined);
enemy.hp = 1;
game.move.select(Moves.WATER_GUN);
- await game.phaseInterceptor.to(TurnEndPhase);
+ await game.phaseInterceptor.to("TurnEndPhase");
expect(enemy.hp).toBeGreaterThan(1);
});
it("opposing water attacks do not heal if they were protected from", async () => {
- game.override.moveset([Moves.WATER_GUN]);
+ game.override.enemyMoveset([Moves.PROTECT]);
- await game.startBattle();
+ await game.classicMode.startBattle();
const enemy = game.scene.getEnemyPokemon()!;
- expect(enemy).not.toBe(undefined);
enemy.hp = 1;
- game.override.enemyMoveset([Moves.PROTECT, Moves.PROTECT, Moves.PROTECT, Moves.PROTECT]);
game.move.select(Moves.WATER_GUN);
- await game.phaseInterceptor.to(TurnEndPhase);
+ await game.phaseInterceptor.to("TurnEndPhase");
expect(enemy.hp).toBe(1);
});
it("multi-strike water attacks only heal once", async () => {
game.override.moveset([Moves.WATER_GUN, Moves.WATER_SHURIKEN]);
- await game.startBattle();
+ await game.classicMode.startBattle();
const enemy = game.scene.getEnemyPokemon()!;
- expect(enemy).not.toBe(undefined);
enemy.hp = 1;
// first turn
game.move.select(Moves.WATER_SHURIKEN);
- await game.phaseInterceptor.to(TurnEndPhase);
+ await game.phaseInterceptor.to("TurnEndPhase");
const healthGainedFromWaterShuriken = enemy.hp - 1;
enemy.hp = 1;
// second turn
game.move.select(Moves.WATER_GUN);
- await game.phaseInterceptor.to(TurnEndPhase);
+ await game.phaseInterceptor.to("TurnEndPhase");
const healthGainedFromWaterGun = enemy.hp - 1;
expect(healthGainedFromWaterShuriken).toBe(healthGainedFromWaterGun);
diff --git a/src/test/abilities/flash_fire.test.ts b/src/test/abilities/flash_fire.test.ts
index de40873998f..c3cf31496ea 100644
--- a/src/test/abilities/flash_fire.test.ts
+++ b/src/test/abilities/flash_fire.test.ts
@@ -7,7 +7,6 @@ import { TurnEndPhase } from "#app/phases/turn-end-phase";
import { Abilities } from "#enums/abilities";
import { Moves } from "#enums/moves";
import GameManager from "#test/utils/gameManager";
-import { SPLASH_ONLY } from "#test/utils/testUtils";
import Phaser from "phaser";
import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest";
@@ -38,7 +37,7 @@ describe("Abilities - Flash Fire", () => {
it("immune to Fire-type moves", async () => {
- game.override.enemyMoveset(Array(4).fill(Moves.EMBER)).moveset(SPLASH_ONLY);
+ game.override.enemyMoveset([Moves.EMBER]).moveset(Moves.SPLASH);
await game.startBattle([Species.BLISSEY]);
const blissey = game.scene.getPlayerPokemon()!;
@@ -49,7 +48,7 @@ describe("Abilities - Flash Fire", () => {
}, 20000);
it("not activate if the Pokémon is protected from the Fire-type move", async () => {
- game.override.enemyMoveset(Array(4).fill(Moves.EMBER)).moveset([Moves.PROTECT]);
+ game.override.enemyMoveset([Moves.EMBER]).moveset([Moves.PROTECT]);
await game.startBattle([Species.BLISSEY]);
const blissey = game.scene.getPlayerPokemon()!;
@@ -60,7 +59,7 @@ describe("Abilities - Flash Fire", () => {
}, 20000);
it("activated by Will-O-Wisp", async () => {
- game.override.enemyMoveset(Array(4).fill(Moves.WILL_O_WISP)).moveset(SPLASH_ONLY);
+ game.override.enemyMoveset([Moves.WILL_O_WISP]).moveset(Moves.SPLASH);
await game.startBattle([Species.BLISSEY]);
const blissey = game.scene.getPlayerPokemon()!;
@@ -75,7 +74,7 @@ describe("Abilities - Flash Fire", () => {
}, 20000);
it("activated after being frozen", async () => {
- game.override.enemyMoveset(Array(4).fill(Moves.EMBER)).moveset(SPLASH_ONLY);
+ game.override.enemyMoveset([Moves.EMBER]).moveset(Moves.SPLASH);
game.override.statusEffect(StatusEffect.FREEZE);
await game.startBattle([Species.BLISSEY]);
@@ -88,7 +87,7 @@ describe("Abilities - Flash Fire", () => {
}, 20000);
it("not passing with baton pass", async () => {
- game.override.enemyMoveset(Array(4).fill(Moves.EMBER)).moveset([Moves.BATON_PASS]);
+ game.override.enemyMoveset([Moves.EMBER]).moveset([Moves.BATON_PASS]);
await game.startBattle([Species.BLISSEY, Species.CHANSEY]);
// ensure use baton pass after enemy moved
@@ -104,7 +103,7 @@ describe("Abilities - Flash Fire", () => {
}, 20000);
it("boosts Fire-type move when the ability is activated", async () => {
- game.override.enemyMoveset(Array(4).fill(Moves.FIRE_PLEDGE)).moveset([Moves.EMBER, Moves.SPLASH]);
+ game.override.enemyMoveset([Moves.FIRE_PLEDGE]).moveset([Moves.EMBER, Moves.SPLASH]);
game.override.enemyAbility(Abilities.FLASH_FIRE).ability(Abilities.NONE);
await game.startBattle([Species.BLISSEY]);
const blissey = game.scene.getPlayerPokemon()!;
diff --git a/src/test/abilities/flower_gift.test.ts b/src/test/abilities/flower_gift.test.ts
index de07bd29478..256b61c6fea 100644
--- a/src/test/abilities/flower_gift.test.ts
+++ b/src/test/abilities/flower_gift.test.ts
@@ -5,7 +5,6 @@ import { WeatherType } from "#app/enums/weather-type";
import { Moves } from "#enums/moves";
import { Species } from "#enums/species";
import GameManager from "#test/utils/gameManager";
-import { SPLASH_ONLY } from "#test/utils/testUtils";
import Phaser from "phaser";
import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest";
@@ -44,7 +43,7 @@ describe("Abilities - Flower Gift", () => {
game.override
.moveset([Moves.SPLASH, Moves.RAIN_DANCE, Moves.SUNNY_DAY, Moves.SKILL_SWAP])
.enemySpecies(Species.MAGIKARP)
- .enemyMoveset(SPLASH_ONLY)
+ .enemyMoveset(Moves.SPLASH)
.enemyAbility(Abilities.BALL_FETCH);
});
@@ -92,7 +91,7 @@ describe("Abilities - Flower Gift", () => {
});
it("reverts to Overcast Form when the Pokémon loses Flower Gift, changes form under Harsh Sunlight/Sunny when it regains it", async () => {
- game.override.enemyMoveset(Array(4).fill(Moves.SKILL_SWAP)).weather(WeatherType.HARSH_SUN);
+ game.override.enemyMoveset([Moves.SKILL_SWAP]).weather(WeatherType.HARSH_SUN);
await game.classicMode.startBattle([Species.CHERRIM]);
@@ -111,7 +110,7 @@ describe("Abilities - Flower Gift", () => {
});
it("reverts to Overcast Form when the Flower Gift is suppressed, changes form under Harsh Sunlight/Sunny when it regains it", async () => {
- game.override.enemyMoveset(Array(4).fill(Moves.GASTRO_ACID)).weather(WeatherType.HARSH_SUN);
+ game.override.enemyMoveset([Moves.GASTRO_ACID]).weather(WeatherType.HARSH_SUN);
await game.classicMode.startBattle([Species.CHERRIM, Species.MAGIKARP]);
diff --git a/src/test/abilities/forecast.test.ts b/src/test/abilities/forecast.test.ts
index 78453c5f4d2..c1eb3600b8b 100644
--- a/src/test/abilities/forecast.test.ts
+++ b/src/test/abilities/forecast.test.ts
@@ -10,7 +10,6 @@ import { TurnEndPhase } from "#app/phases/turn-end-phase";
import { Moves } from "#enums/moves";
import { Species } from "#enums/species";
import GameManager from "#test/utils/gameManager";
-import { SPLASH_ONLY } from "#test/utils/testUtils";
import Phaser from "phaser";
import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest";
@@ -67,7 +66,7 @@ describe("Abilities - Forecast", () => {
game.override
.moveset([Moves.SPLASH, Moves.RAIN_DANCE, Moves.SUNNY_DAY, Moves.TACKLE])
.enemySpecies(Species.MAGIKARP)
- .enemyMoveset(SPLASH_ONLY)
+ .enemyMoveset(Moves.SPLASH)
.enemyAbility(Abilities.BALL_FETCH);
});
@@ -229,7 +228,7 @@ describe("Abilities - Forecast", () => {
});
it("reverts to Normal Form when Forecast is suppressed, changes form to match the weather when it regains it", async () => {
- game.override.enemyMoveset(Array(4).fill(Moves.GASTRO_ACID)).weather(WeatherType.RAIN);
+ game.override.enemyMoveset([Moves.GASTRO_ACID]).weather(WeatherType.RAIN);
await game.startBattle([Species.CASTFORM, Species.PIKACHU]);
const castform = game.scene.getPlayerPokemon()!;
@@ -260,7 +259,7 @@ describe("Abilities - Forecast", () => {
});
it("does not change Castform's form until after Stealth Rock deals damage", async () => {
- game.override.weather(WeatherType.RAIN).enemyMoveset(Array(4).fill(Moves.STEALTH_ROCK));
+ game.override.weather(WeatherType.RAIN).enemyMoveset([Moves.STEALTH_ROCK]);
await game.startBattle([Species.PIKACHU, Species.CASTFORM]);
// First turn - set up stealth rock
diff --git a/src/test/abilities/galvanize.test.ts b/src/test/abilities/galvanize.test.ts
index 4b0ddc14d7c..f81b854180a 100644
--- a/src/test/abilities/galvanize.test.ts
+++ b/src/test/abilities/galvanize.test.ts
@@ -6,7 +6,6 @@ import { Moves } from "#app/enums/moves";
import { Species } from "#app/enums/species";
import { HitResult } from "#app/field/pokemon";
import GameManager from "#test/utils/gameManager";
-import { SPLASH_ONLY } from "#test/utils/testUtils";
import Phaser from "phaser";
import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest";
@@ -36,7 +35,7 @@ describe("Abilities - Galvanize", () => {
.moveset([Moves.TACKLE, Moves.REVELATION_DANCE, Moves.FURY_SWIPES])
.enemySpecies(Species.DUSCLOPS)
.enemyAbility(Abilities.BALL_FETCH)
- .enemyMoveset(SPLASH_ONLY)
+ .enemyMoveset(Moves.SPLASH)
.enemyLevel(100);
});
diff --git a/src/test/abilities/gorilla_tactics.test.ts b/src/test/abilities/gorilla_tactics.test.ts
new file mode 100644
index 00000000000..df698194323
--- /dev/null
+++ b/src/test/abilities/gorilla_tactics.test.ts
@@ -0,0 +1,83 @@
+import { BattlerIndex } from "#app/battle";
+import { Moves } from "#app/enums/moves";
+import { Species } from "#app/enums/species";
+import { Stat } from "#app/enums/stat";
+import { Abilities } from "#enums/abilities";
+import GameManager from "#test/utils/gameManager";
+import Phaser from "phaser";
+import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest";
+
+describe("Abilities - Gorilla Tactics", () => {
+ let phaserGame: Phaser.Game;
+ let game: GameManager;
+ const TIMEOUT = 20 * 1000;
+
+ beforeAll(() => {
+ phaserGame = new Phaser.Game({
+ type: Phaser.HEADLESS,
+ });
+ });
+
+ afterEach(() => {
+ game.phaseInterceptor.restoreOg();
+ });
+
+ beforeEach(() => {
+ game = new GameManager(phaserGame);
+ game.override
+ .battleType("single")
+ .enemyAbility(Abilities.BALL_FETCH)
+ .enemyMoveset([Moves.SPLASH, Moves.DISABLE])
+ .enemySpecies(Species.MAGIKARP)
+ .enemyLevel(30)
+ .moveset([Moves.SPLASH, Moves.TACKLE, Moves.GROWL])
+ .ability(Abilities.GORILLA_TACTICS);
+ });
+
+ it("boosts the Pokémon's Attack by 50%, but limits the Pokémon to using only one move", async () => {
+ await game.classicMode.startBattle([Species.GALAR_DARMANITAN]);
+
+ const darmanitan = game.scene.getPlayerPokemon()!;
+ const initialAtkStat = darmanitan.getStat(Stat.ATK);
+
+ game.move.select(Moves.SPLASH);
+ await game.forceEnemyMove(Moves.SPLASH);
+
+ await game.phaseInterceptor.to("TurnEndPhase");
+
+ expect(darmanitan.getStat(Stat.ATK, false)).toBeCloseTo(initialAtkStat * 1.5);
+ // Other moves should be restricted
+ expect(darmanitan.isMoveRestricted(Moves.TACKLE)).toBe(true);
+ expect(darmanitan.isMoveRestricted(Moves.SPLASH)).toBe(false);
+ }, TIMEOUT);
+
+ it("should struggle if the only usable move is disabled", async () => {
+ await game.classicMode.startBattle([Species.GALAR_DARMANITAN]);
+
+ const darmanitan = game.scene.getPlayerPokemon()!;
+ const enemy = game.scene.getEnemyPokemon()!;
+
+ // First turn, lock move to Growl
+ game.move.select(Moves.GROWL);
+ await game.forceEnemyMove(Moves.SPLASH);
+
+ // Second turn, Growl is interrupted by Disable
+ await game.toNextTurn();
+
+ game.move.select(Moves.GROWL);
+ await game.forceEnemyMove(Moves.DISABLE);
+ await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]);
+
+ await game.phaseInterceptor.to("TurnEndPhase");
+ expect(enemy.getStatStage(Stat.ATK)).toBe(-1); // Only the effect of the first Growl should be applied
+
+ // Third turn, Struggle is used
+ await game.toNextTurn();
+
+ game.move.select(Moves.TACKLE);
+ await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]);
+
+ await game.phaseInterceptor.to("MoveEndPhase");
+ expect(darmanitan.hp).toBeLessThan(darmanitan.getMaxHp());
+ }, TIMEOUT);
+});
diff --git a/src/test/abilities/gulp_missile.test.ts b/src/test/abilities/gulp_missile.test.ts
index 286c3af1c56..ac0efd8e8d1 100644
--- a/src/test/abilities/gulp_missile.test.ts
+++ b/src/test/abilities/gulp_missile.test.ts
@@ -11,7 +11,6 @@ import { Moves } from "#enums/moves";
import { Species } from "#enums/species";
import Phaser from "phaser";
import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest";
-import { SPLASH_ONLY } from "../utils/testUtils";
import { Stat } from "#enums/stat";
describe("Abilities - Gulp Missile", () => {
@@ -49,7 +48,7 @@ describe("Abilities - Gulp Missile", () => {
.moveset([Moves.SURF, Moves.DIVE, Moves.SPLASH])
.enemySpecies(Species.SNORLAX)
.enemyAbility(Abilities.BALL_FETCH)
- .enemyMoveset(SPLASH_ONLY)
+ .enemyMoveset(Moves.SPLASH)
.enemyLevel(5);
});
@@ -108,7 +107,7 @@ describe("Abilities - Gulp Missile", () => {
});
it("deals 1/4 of the attacker's maximum HP when hit by a damaging attack", async () => {
- game.override.enemyMoveset(Array(4).fill(Moves.TACKLE));
+ game.override.enemyMoveset([Moves.TACKLE]);
await game.startBattle([Species.CRAMORANT]);
const enemy = game.scene.getEnemyPokemon()!;
@@ -121,7 +120,7 @@ describe("Abilities - Gulp Missile", () => {
});
it("does not have any effect when hit by non-damaging attack", async () => {
- game.override.enemyMoveset(Array(4).fill(Moves.TAIL_WHIP));
+ game.override.enemyMoveset([Moves.TAIL_WHIP]);
await game.startBattle([Species.CRAMORANT]);
const cramorant = game.scene.getPlayerPokemon()!;
@@ -140,7 +139,7 @@ describe("Abilities - Gulp Missile", () => {
});
it("lowers attacker's DEF stat stage by 1 when hit in Gulping form", async () => {
- game.override.enemyMoveset(Array(4).fill(Moves.TACKLE));
+ game.override.enemyMoveset([Moves.TACKLE]);
await game.startBattle([Species.CRAMORANT]);
const cramorant = game.scene.getPlayerPokemon()!;
@@ -164,7 +163,7 @@ describe("Abilities - Gulp Missile", () => {
});
it("paralyzes the enemy when hit in Gorging form", async () => {
- game.override.enemyMoveset(Array(4).fill(Moves.TACKLE));
+ game.override.enemyMoveset([Moves.TACKLE]);
await game.startBattle([Species.CRAMORANT]);
const cramorant = game.scene.getPlayerPokemon()!;
@@ -188,7 +187,7 @@ describe("Abilities - Gulp Missile", () => {
});
it("does not activate the ability when underwater", async () => {
- game.override.enemyMoveset(Array(4).fill(Moves.SURF));
+ game.override.enemyMoveset([Moves.SURF]);
await game.startBattle([Species.CRAMORANT]);
const cramorant = game.scene.getPlayerPokemon()!;
@@ -201,7 +200,7 @@ describe("Abilities - Gulp Missile", () => {
});
it("prevents effect damage but inflicts secondary effect on attacker with Magic Guard", async () => {
- game.override.enemyMoveset(Array(4).fill(Moves.TACKLE)).enemyAbility(Abilities.MAGIC_GUARD);
+ game.override.enemyMoveset([Moves.TACKLE]).enemyAbility(Abilities.MAGIC_GUARD);
await game.startBattle([Species.CRAMORANT]);
const cramorant = game.scene.getPlayerPokemon()!;
@@ -225,7 +224,7 @@ describe("Abilities - Gulp Missile", () => {
});
it("cannot be suppressed", async () => {
- game.override.enemyMoveset(Array(4).fill(Moves.GASTRO_ACID));
+ game.override.enemyMoveset([Moves.GASTRO_ACID]);
await game.startBattle([Species.CRAMORANT]);
const cramorant = game.scene.getPlayerPokemon()!;
@@ -245,7 +244,7 @@ describe("Abilities - Gulp Missile", () => {
});
it("cannot be swapped with another ability", async () => {
- game.override.enemyMoveset(Array(4).fill(Moves.SKILL_SWAP));
+ game.override.enemyMoveset([Moves.SKILL_SWAP]);
await game.startBattle([Species.CRAMORANT]);
const cramorant = game.scene.getPlayerPokemon()!;
diff --git a/src/test/abilities/heatproof.test.ts b/src/test/abilities/heatproof.test.ts
index e2a558e6d99..61c406201bd 100644
--- a/src/test/abilities/heatproof.test.ts
+++ b/src/test/abilities/heatproof.test.ts
@@ -5,7 +5,6 @@ import { toDmgValue } from "#app/utils";
import { Abilities } from "#enums/abilities";
import { Moves } from "#enums/moves";
import GameManager from "#test/utils/gameManager";
-import { SPLASH_ONLY } from "#test/utils/testUtils";
import Phaser from "phaser";
import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest";
@@ -30,7 +29,7 @@ describe("Abilities - Heatproof", () => {
.disableCrits()
.enemySpecies(Species.CHARMANDER)
.enemyAbility(Abilities.HEATPROOF)
- .enemyMoveset(SPLASH_ONLY)
+ .enemyMoveset(Moves.SPLASH)
.enemyLevel(100)
.starterSpecies(Species.CHANDELURE)
.ability(Abilities.BALL_FETCH)
diff --git a/src/test/abilities/hustle.test.ts b/src/test/abilities/hustle.test.ts
index ff96b98c7ac..29cbfdc1a5d 100644
--- a/src/test/abilities/hustle.test.ts
+++ b/src/test/abilities/hustle.test.ts
@@ -4,7 +4,6 @@ import { Stat } from "#app/enums/stat";
import { Moves } from "#enums/moves";
import { Species } from "#enums/species";
import GameManager from "#test/utils/gameManager";
-import { SPLASH_ONLY } from "#test/utils/testUtils";
import Phaser from "phaser";
import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest";
@@ -29,7 +28,7 @@ describe("Abilities - Hustle", () => {
.moveset([ Moves.TACKLE, Moves.GIGA_DRAIN, Moves.FISSURE ])
.disableCrits()
.battleType("single")
- .enemyMoveset(SPLASH_ONLY)
+ .enemyMoveset(Moves.SPLASH)
.enemySpecies(Species.SHUCKLE)
.enemyAbility(Abilities.BALL_FETCH);
});
diff --git a/src/test/abilities/hyper_cutter.test.ts b/src/test/abilities/hyper_cutter.test.ts
index 64e04ac2fd3..ec947add939 100644
--- a/src/test/abilities/hyper_cutter.test.ts
+++ b/src/test/abilities/hyper_cutter.test.ts
@@ -3,7 +3,6 @@ import { Abilities } from "#enums/abilities";
import { Moves } from "#enums/moves";
import { Species } from "#enums/species";
import GameManager from "#test/utils/gameManager";
-import { SPLASH_ONLY } from "#test/utils/testUtils";
import Phaser from "phaser";
import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest";
@@ -29,7 +28,7 @@ describe("Abilities - Hyper Cutter", () => {
.ability(Abilities.BALL_FETCH)
.enemySpecies(Species.SHUCKLE)
.enemyAbility(Abilities.HYPER_CUTTER)
- .enemyMoveset(SPLASH_ONLY);
+ .enemyMoveset(Moves.SPLASH);
});
// Reference Link: https://bulbapedia.bulbagarden.net/wiki/Hyper_Cutter_(Ability)
diff --git a/src/test/abilities/imposter.test.ts b/src/test/abilities/imposter.test.ts
index 2857f80632a..27673564aaa 100644
--- a/src/test/abilities/imposter.test.ts
+++ b/src/test/abilities/imposter.test.ts
@@ -6,7 +6,6 @@ import { TurnEndPhase } from "#app/phases/turn-end-phase";
import { Moves } from "#enums/moves";
import { Stat, BATTLE_STATS, EFFECTIVE_STATS } from "#enums/stat";
import { Abilities } from "#enums/abilities";
-import { SPLASH_ONLY } from "../utils/testUtils";
// TODO: Add more tests once Imposter is fully implemented
describe("Abilities - Imposter", () => {
@@ -31,9 +30,9 @@ describe("Abilities - Imposter", () => {
.enemyLevel(200)
.enemyAbility(Abilities.BEAST_BOOST)
.enemyPassiveAbility(Abilities.BALL_FETCH)
- .enemyMoveset(SPLASH_ONLY)
+ .enemyMoveset(Moves.SPLASH)
.ability(Abilities.IMPOSTER)
- .moveset(SPLASH_ONLY);
+ .moveset(Moves.SPLASH);
});
it("should copy species, ability, gender, all stats except HP, all stat stages, moveset, and types of target", async () => {
@@ -77,7 +76,7 @@ describe("Abilities - Imposter", () => {
}, 20000);
it("should copy in-battle overridden stats", async () => {
- game.override.enemyMoveset(new Array(4).fill(Moves.POWER_SPLIT));
+ game.override.enemyMoveset([Moves.POWER_SPLIT]);
await game.startBattle([
Species.DITTO
diff --git a/src/test/abilities/intimidate.test.ts b/src/test/abilities/intimidate.test.ts
index f90ba6c0e1e..d4c097022df 100644
--- a/src/test/abilities/intimidate.test.ts
+++ b/src/test/abilities/intimidate.test.ts
@@ -7,7 +7,6 @@ import { getMovePosition } from "#test/utils/gameManagerUtils";
import { Abilities } from "#enums/abilities";
import { Moves } from "#enums/moves";
import { Species } from "#enums/species";
-import { SPLASH_ONLY } from "#test/utils/testUtils";
describe("Abilities - Intimidate", () => {
let phaserGame: Phaser.Game;
@@ -31,7 +30,7 @@ describe("Abilities - Intimidate", () => {
.enemyPassiveAbility(Abilities.HYDRATION)
.ability(Abilities.INTIMIDATE)
.startingWave(3)
- .enemyMoveset(SPLASH_ONLY);
+ .enemyMoveset(Moves.SPLASH);
});
it("should lower ATK stat stage by 1 of enemy Pokemon on entry and player switch", async () => {
@@ -108,7 +107,7 @@ describe("Abilities - Intimidate", () => {
it("should lower ATK stat stage by 1 for every switch", async () => {
game.override.moveset([Moves.SPLASH])
- .enemyMoveset(new Array(4).fill(Moves.VOLT_SWITCH))
+ .enemyMoveset([Moves.VOLT_SWITCH])
.startingWave(5);
await game.classicMode.startBattle([ Species.MIGHTYENA, Species.POOCHYENA ]);
diff --git a/src/test/abilities/libero.test.ts b/src/test/abilities/libero.test.ts
index 7895e7de6bf..51f182d5401 100644
--- a/src/test/abilities/libero.test.ts
+++ b/src/test/abilities/libero.test.ts
@@ -9,7 +9,6 @@ import { Biome } from "#enums/biome";
import { Moves } from "#enums/moves";
import { Species } from "#enums/species";
import GameManager from "#test/utils/gameManager";
-import { SPLASH_ONLY } from "#test/utils/testUtils";
import Phaser from "phaser";
import { afterEach, beforeAll, beforeEach, describe, expect, test, vi } from "vitest";
@@ -183,7 +182,7 @@ describe("Abilities - Libero", () => {
"ability applies correctly even if the pokemon's move misses",
async () => {
game.override.moveset([Moves.TACKLE]);
- game.override.enemyMoveset(SPLASH_ONLY);
+ game.override.enemyMoveset(Moves.SPLASH);
await game.startBattle([Species.MAGIKARP]);
diff --git a/src/test/abilities/magic_guard.test.ts b/src/test/abilities/magic_guard.test.ts
index 64c1746c7d9..4b3fb0ba985 100644
--- a/src/test/abilities/magic_guard.test.ts
+++ b/src/test/abilities/magic_guard.test.ts
@@ -8,7 +8,6 @@ import { BattlerTagType } from "#enums/battler-tag-type";
import { Moves } from "#enums/moves";
import { Species } from "#enums/species";
import GameManager from "#test/utils/gameManager";
-import { SPLASH_ONLY } from "#test/utils/testUtils";
import Phaser from "phaser";
import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest";
@@ -39,7 +38,7 @@ describe("Abilities - Magic Guard", () => {
/** Enemy Pokemon overrides */
game.override.enemySpecies(Species.SNORLAX);
game.override.enemyAbility(Abilities.INSOMNIA);
- game.override.enemyMoveset(SPLASH_ONLY);
+ game.override.enemyMoveset(Moves.SPLASH);
game.override.enemyLevel(100);
});
diff --git a/src/test/abilities/moody.test.ts b/src/test/abilities/moody.test.ts
index 5c46ea68ec5..166f69b0fe3 100644
--- a/src/test/abilities/moody.test.ts
+++ b/src/test/abilities/moody.test.ts
@@ -3,7 +3,6 @@ import { Abilities } from "#enums/abilities";
import { Moves } from "#enums/moves";
import { Species } from "#enums/species";
import GameManager from "#test/utils/gameManager";
-import { SPLASH_ONLY } from "#test/utils/testUtils";
import Phaser from "phaser";
import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest";
@@ -29,8 +28,8 @@ describe("Abilities - Moody", () => {
.enemySpecies(Species.RATTATA)
.enemyAbility(Abilities.BALL_FETCH)
.ability(Abilities.MOODY)
- .enemyMoveset(SPLASH_ONLY)
- .moveset(SPLASH_ONLY);
+ .enemyMoveset(Moves.SPLASH)
+ .moveset(Moves.SPLASH);
});
it("should increase one stat stage by 2 and decrease a different stat stage by 1",
diff --git a/src/test/abilities/moxie.test.ts b/src/test/abilities/moxie.test.ts
index e713d78f39e..5f337fedabb 100644
--- a/src/test/abilities/moxie.test.ts
+++ b/src/test/abilities/moxie.test.ts
@@ -5,7 +5,6 @@ import { Moves } from "#enums/moves";
import { Species } from "#enums/species";
import Phaser from "phaser";
import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest";
-import { SPLASH_ONLY } from "../utils/testUtils";
import { BattlerIndex } from "#app/battle";
import { EnemyCommandPhase } from "#app/phases/enemy-command-phase";
import { VictoryPhase } from "#app/phases/victory-phase";
@@ -34,7 +33,7 @@ describe("Abilities - Moxie", () => {
game.override.ability(Abilities.MOXIE);
game.override.startingLevel(2000);
game.override.moveset([ moveToUse ]);
- game.override.enemyMoveset(SPLASH_ONLY);
+ game.override.enemyMoveset(Moves.SPLASH);
});
it("should raise ATK stat stage by 1 when winning a battle", async() => {
diff --git a/src/test/abilities/parental_bond.test.ts b/src/test/abilities/parental_bond.test.ts
index 81a30524a5e..2ad3f9e3f5c 100644
--- a/src/test/abilities/parental_bond.test.ts
+++ b/src/test/abilities/parental_bond.test.ts
@@ -7,7 +7,6 @@ import { Abilities } from "#enums/abilities";
import { Moves } from "#enums/moves";
import { Species } from "#enums/species";
import GameManager from "#test/utils/gameManager";
-import { SPLASH_ONLY } from "#test/utils/testUtils";
import Phaser from "phaser";
import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest";
@@ -34,7 +33,7 @@ describe("Abilities - Parental Bond", () => {
game.override.ability(Abilities.PARENTAL_BOND);
game.override.enemySpecies(Species.SNORLAX);
game.override.enemyAbility(Abilities.FUR_COAT);
- game.override.enemyMoveset(SPLASH_ONLY);
+ game.override.enemyMoveset(Moves.SPLASH);
game.override.startingLevel(100);
game.override.enemyLevel(100);
});
@@ -175,7 +174,7 @@ describe("Abilities - Parental Bond", () => {
"should not apply multiplier to counter moves",
async () => {
game.override.moveset([Moves.COUNTER]);
- game.override.enemyMoveset(Array(4).fill(Moves.TACKLE));
+ game.override.enemyMoveset([Moves.TACKLE]);
await game.classicMode.startBattle([Species.SHUCKLE]);
@@ -465,7 +464,7 @@ describe("Abilities - Parental Bond", () => {
"should not cause user to hit into King's Shield more than once",
async () => {
game.override.moveset([Moves.TACKLE]);
- game.override.enemyMoveset(Array(4).fill(Moves.KINGS_SHIELD));
+ game.override.enemyMoveset([Moves.KINGS_SHIELD]);
await game.classicMode.startBattle([Species.MAGIKARP]);
diff --git a/src/test/abilities/pastel_veil.test.ts b/src/test/abilities/pastel_veil.test.ts
index ba90c7e3b3f..31490aab143 100644
--- a/src/test/abilities/pastel_veil.test.ts
+++ b/src/test/abilities/pastel_veil.test.ts
@@ -8,7 +8,6 @@ import { Species } from "#enums/species";
import GameManager from "#test/utils/gameManager";
import Phaser from "phaser";
import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest";
-import { SPLASH_ONLY } from "../utils/testUtils";
describe("Abilities - Pastel Veil", () => {
let phaserGame: Phaser.Game;
@@ -31,7 +30,7 @@ describe("Abilities - Pastel Veil", () => {
.moveset([Moves.TOXIC_THREAD, Moves.SPLASH])
.enemyAbility(Abilities.BALL_FETCH)
.enemySpecies(Species.SUNKERN)
- .enemyMoveset(SPLASH_ONLY);
+ .enemyMoveset(Moves.SPLASH);
});
it("prevents the user and its allies from being afflicted by poison", async () => {
diff --git a/src/test/abilities/power_spot.test.ts b/src/test/abilities/power_spot.test.ts
index b83284c0bac..6d349a1a3f9 100644
--- a/src/test/abilities/power_spot.test.ts
+++ b/src/test/abilities/power_spot.test.ts
@@ -5,7 +5,6 @@ import { TurnEndPhase } from "#app/phases/turn-end-phase";
import { Moves } from "#enums/moves";
import { Species } from "#enums/species";
import GameManager from "#test/utils/gameManager";
-import { SPLASH_ONLY } from "#test/utils/testUtils";
import Phaser from "phaser";
import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest";
@@ -29,7 +28,7 @@ describe("Abilities - Power Spot", () => {
game = new GameManager(phaserGame);
game.override.battleType("double");
game.override.moveset([Moves.TACKLE, Moves.BREAKING_SWIPE, Moves.SPLASH, Moves.DAZZLING_GLEAM]);
- game.override.enemyMoveset(SPLASH_ONLY);
+ game.override.enemyMoveset(Moves.SPLASH);
game.override.enemySpecies(Species.SHUCKLE);
game.override.enemyAbility(Abilities.BALL_FETCH);
});
diff --git a/src/test/abilities/protean.test.ts b/src/test/abilities/protean.test.ts
index 6ecabbfade0..4be58a677a6 100644
--- a/src/test/abilities/protean.test.ts
+++ b/src/test/abilities/protean.test.ts
@@ -9,7 +9,6 @@ import { Biome } from "#enums/biome";
import { Moves } from "#enums/moves";
import { Species } from "#enums/species";
import GameManager from "#test/utils/gameManager";
-import { SPLASH_ONLY } from "#test/utils/testUtils";
import Phaser from "phaser";
import { afterEach, beforeAll, beforeEach, describe, expect, test, vi } from "vitest";
@@ -183,7 +182,7 @@ describe("Abilities - Protean", () => {
"ability applies correctly even if the pokemon's move misses",
async () => {
game.override.moveset([Moves.TACKLE]);
- game.override.enemyMoveset(SPLASH_ONLY);
+ game.override.enemyMoveset(Moves.SPLASH);
await game.startBattle([Species.MAGIKARP]);
diff --git a/src/test/abilities/quick_draw.test.ts b/src/test/abilities/quick_draw.test.ts
index 00d344ed333..a02ee5cf56a 100644
--- a/src/test/abilities/quick_draw.test.ts
+++ b/src/test/abilities/quick_draw.test.ts
@@ -32,7 +32,7 @@ describe("Abilities - Quick Draw", () => {
game.override.enemyLevel(100);
game.override.enemySpecies(Species.MAGIKARP);
game.override.enemyAbility(Abilities.BALL_FETCH);
- game.override.enemyMoveset(Array(4).fill(Moves.TACKLE));
+ game.override.enemyMoveset([Moves.TACKLE]);
vi.spyOn(allAbilities[Abilities.QUICK_DRAW].getAttrs(BypassSpeedChanceAbAttr)[0], "chance", "get").mockReturnValue(100);
});
@@ -76,7 +76,7 @@ describe("Abilities - Quick Draw", () => {
);
test("does not increase priority", async () => {
- game.override.enemyMoveset(Array(4).fill(Moves.EXTREME_SPEED));
+ game.override.enemyMoveset([Moves.EXTREME_SPEED]);
await game.startBattle();
diff --git a/src/test/abilities/sand_spit.test.ts b/src/test/abilities/sand_spit.test.ts
index 041e20faf7f..add13ede296 100644
--- a/src/test/abilities/sand_spit.test.ts
+++ b/src/test/abilities/sand_spit.test.ts
@@ -35,7 +35,7 @@ describe("Abilities - Sand Spit", () => {
});
it("should trigger when hit with damaging move", async () => {
- game.override.enemyMoveset(Array(4).fill(Moves.TACKLE));
+ game.override.enemyMoveset([Moves.TACKLE]);
await game.startBattle();
game.move.select(Moves.SPLASH);
@@ -45,7 +45,7 @@ describe("Abilities - Sand Spit", () => {
}, 20000);
it("should not trigger when targetted with status moves", async () => {
- game.override.enemyMoveset(Array(4).fill(Moves.GROWL));
+ game.override.enemyMoveset([Moves.GROWL]);
await game.startBattle();
game.move.select(Moves.COIL);
diff --git a/src/test/abilities/sap_sipper.test.ts b/src/test/abilities/sap_sipper.test.ts
index 2d70ede3530..5e8cac74c95 100644
--- a/src/test/abilities/sap_sipper.test.ts
+++ b/src/test/abilities/sap_sipper.test.ts
@@ -9,7 +9,6 @@ import { Species } from "#enums/species";
import GameManager from "#test/utils/gameManager";
import Phaser from "phaser";
import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest";
-import { SPLASH_ONLY } from "../utils/testUtils";
// See also: TypeImmunityAbAttr
describe("Abilities - Sap Sipper", () => {
@@ -37,7 +36,7 @@ describe("Abilities - Sap Sipper", () => {
const enemyAbility = Abilities.SAP_SIPPER;
game.override.moveset([ moveToUse ]);
- game.override.enemyMoveset(SPLASH_ONLY);
+ game.override.enemyMoveset(Moves.SPLASH);
game.override.enemySpecies(Species.DUSKULL);
game.override.enemyAbility(enemyAbility);
@@ -59,7 +58,7 @@ describe("Abilities - Sap Sipper", () => {
const enemyAbility = Abilities.SAP_SIPPER;
game.override.moveset([ moveToUse ]);
- game.override.enemyMoveset(SPLASH_ONLY);
+ game.override.enemyMoveset(Moves.SPLASH);
game.override.enemySpecies(Species.RATTATA);
game.override.enemyAbility(enemyAbility);
@@ -80,7 +79,7 @@ describe("Abilities - Sap Sipper", () => {
const enemyAbility = Abilities.SAP_SIPPER;
game.override.moveset([ moveToUse ]);
- game.override.enemyMoveset(SPLASH_ONLY);
+ game.override.enemyMoveset(Moves.SPLASH);
game.override.enemySpecies(Species.RATTATA);
game.override.enemyAbility(enemyAbility);
@@ -100,7 +99,7 @@ describe("Abilities - Sap Sipper", () => {
const enemyAbility = Abilities.SAP_SIPPER;
game.override.moveset([ moveToUse ]);
- game.override.enemyMoveset(SPLASH_ONLY);
+ game.override.enemyMoveset(Moves.SPLASH);
game.override.enemySpecies(Species.RATTATA);
game.override.enemyAbility(enemyAbility);
@@ -123,7 +122,7 @@ describe("Abilities - Sap Sipper", () => {
game.override.moveset([ moveToUse ]);
game.override.ability(ability);
- game.override.enemyMoveset(SPLASH_ONLY);
+ game.override.enemyMoveset(Moves.SPLASH);
game.override.enemySpecies(Species.RATTATA);
game.override.enemyAbility(Abilities.NONE);
diff --git a/src/test/abilities/simple.test.ts b/src/test/abilities/simple.test.ts
index 4310c5d45d1..e5ca474d7c3 100644
--- a/src/test/abilities/simple.test.ts
+++ b/src/test/abilities/simple.test.ts
@@ -1,10 +1,10 @@
-import { Stat } from "#enums/stat";
-import GameManager from "#test/utils/gameManager";
+import { Moves } from "#app/enums/moves";
import { Abilities } from "#enums/abilities";
import { Species } from "#enums/species";
+import { Stat } from "#enums/stat";
+import GameManager from "#test/utils/gameManager";
import Phaser from "phaser";
import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest";
-import { SPLASH_ONLY } from "../utils/testUtils";
describe("Abilities - Simple", () => {
let phaserGame: Phaser.Game;
@@ -27,7 +27,7 @@ describe("Abilities - Simple", () => {
.enemySpecies(Species.BULBASAUR)
.enemyAbility(Abilities.SIMPLE)
.ability(Abilities.INTIMIDATE)
- .enemyMoveset(SPLASH_ONLY);
+ .enemyMoveset(Moves.SPLASH);
});
it("should double stat changes when applied", async() => {
diff --git a/src/test/abilities/steely_spirit.test.ts b/src/test/abilities/steely_spirit.test.ts
index 7aaa0a42ae3..7b5879555be 100644
--- a/src/test/abilities/steely_spirit.test.ts
+++ b/src/test/abilities/steely_spirit.test.ts
@@ -4,7 +4,6 @@ import { Abilities } from "#app/enums/abilities";
import { Moves } from "#enums/moves";
import { Species } from "#enums/species";
import GameManager from "#test/utils/gameManager";
-import { SPLASH_ONLY } from "#test/utils/testUtils";
import Phaser from "phaser";
import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest";
@@ -31,7 +30,7 @@ describe("Abilities - Steely Spirit", () => {
game.override.enemySpecies(Species.SHUCKLE);
game.override.enemyAbility(Abilities.BALL_FETCH);
game.override.moveset([Moves.IRON_HEAD, Moves.SPLASH]);
- game.override.enemyMoveset(SPLASH_ONLY);
+ game.override.enemyMoveset(Moves.SPLASH);
vi.spyOn(allMoves[moveToCheck], "calculateBattlePower");
});
diff --git a/src/test/abilities/sweet_veil.test.ts b/src/test/abilities/sweet_veil.test.ts
index 5de3c7285a9..c2946443245 100644
--- a/src/test/abilities/sweet_veil.test.ts
+++ b/src/test/abilities/sweet_veil.test.ts
@@ -6,7 +6,6 @@ import { TurnEndPhase } from "#app/phases/turn-end-phase";
import { Moves } from "#enums/moves";
import { Species } from "#enums/species";
import GameManager from "#test/utils/gameManager";
-import { SPLASH_ONLY } from "#test/utils/testUtils";
import Phaser from "phaser";
import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest";
@@ -45,7 +44,7 @@ describe("Abilities - Sweet Veil", () => {
});
it("causes Rest to fail when used by the user or its allies", async () => {
- game.override.enemyMoveset(SPLASH_ONLY);
+ game.override.enemyMoveset(Moves.SPLASH);
await game.startBattle([Species.SWIRLIX, Species.MAGIKARP]);
game.move.select(Moves.SPLASH);
@@ -72,7 +71,7 @@ describe("Abilities - Sweet Veil", () => {
game.override.enemySpecies(Species.PIKACHU);
game.override.enemyLevel(5);
game.override.startingLevel(5);
- game.override.enemyMoveset(SPLASH_ONLY);
+ game.override.enemyMoveset(Moves.SPLASH);
await game.startBattle([Species.SHUCKLE, Species.SHUCKLE, Species.SWIRLIX]);
diff --git a/src/test/abilities/tera_shell.test.ts b/src/test/abilities/tera_shell.test.ts
index 6a6b7bb252b..2826469f3bf 100644
--- a/src/test/abilities/tera_shell.test.ts
+++ b/src/test/abilities/tera_shell.test.ts
@@ -30,7 +30,7 @@ describe("Abilities - Tera Shell", () => {
.moveset([Moves.SPLASH])
.enemySpecies(Species.SNORLAX)
.enemyAbility(Abilities.INSOMNIA)
- .enemyMoveset(Array(4).fill(Moves.MACH_PUNCH))
+ .enemyMoveset([Moves.MACH_PUNCH])
.startingLevel(100)
.enemyLevel(100);
});
@@ -60,7 +60,7 @@ describe("Abilities - Tera Shell", () => {
it(
"should not override type immunities",
async () => {
- game.override.enemyMoveset(Array(4).fill(Moves.SHADOW_SNEAK));
+ game.override.enemyMoveset([Moves.SHADOW_SNEAK]);
await game.classicMode.startBattle([Species.SNORLAX]);
@@ -77,7 +77,7 @@ describe("Abilities - Tera Shell", () => {
it(
"should not override type multipliers less than 0.5x",
async () => {
- game.override.enemyMoveset(Array(4).fill(Moves.QUICK_ATTACK));
+ game.override.enemyMoveset([Moves.QUICK_ATTACK]);
await game.classicMode.startBattle([Species.AGGRON]);
@@ -94,7 +94,7 @@ describe("Abilities - Tera Shell", () => {
it(
"should not affect the effectiveness of fixed-damage moves",
async () => {
- game.override.enemyMoveset(Array(4).fill(Moves.DRAGON_RAGE));
+ game.override.enemyMoveset([Moves.DRAGON_RAGE]);
await game.classicMode.startBattle([Species.CHARIZARD]);
diff --git a/src/test/abilities/wind_power.test.ts b/src/test/abilities/wind_power.test.ts
index c944e01b43a..12b8d2f2299 100644
--- a/src/test/abilities/wind_power.test.ts
+++ b/src/test/abilities/wind_power.test.ts
@@ -4,7 +4,6 @@ import { Abilities } from "#enums/abilities";
import { Moves } from "#enums/moves";
import { Species } from "#enums/species";
import GameManager from "#test/utils/gameManager";
-import { SPLASH_ONLY } from "#test/utils/testUtils";
import Phaser from "phaser";
import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest";
@@ -28,7 +27,7 @@ describe("Abilities - Wind Power", () => {
game.override.enemySpecies(Species.SHIFTRY);
game.override.enemyAbility(Abilities.WIND_POWER);
game.override.moveset([Moves.TAILWIND, Moves.SPLASH, Moves.PETAL_BLIZZARD, Moves.SANDSTORM]);
- game.override.enemyMoveset(SPLASH_ONLY);
+ game.override.enemyMoveset(Moves.SPLASH);
});
it("it becomes charged when hit by wind moves", async () => {
diff --git a/src/test/abilities/wind_rider.test.ts b/src/test/abilities/wind_rider.test.ts
index 7a1fee6794a..c917f56e101 100644
--- a/src/test/abilities/wind_rider.test.ts
+++ b/src/test/abilities/wind_rider.test.ts
@@ -3,7 +3,6 @@ import GameManager from "#test/utils/gameManager";
import { Abilities } from "#enums/abilities";
import { Moves } from "#enums/moves";
import { Species } from "#enums/species";
-import { SPLASH_ONLY } from "#test/utils/testUtils";
import Phaser from "phaser";
import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest";
@@ -28,7 +27,7 @@ describe("Abilities - Wind Rider", () => {
.enemySpecies(Species.SHIFTRY)
.enemyAbility(Abilities.WIND_RIDER)
.moveset([Moves.TAILWIND, Moves.SPLASH, Moves.PETAL_BLIZZARD, Moves.SANDSTORM])
- .enemyMoveset(SPLASH_ONLY);
+ .enemyMoveset(Moves.SPLASH);
});
it("takes no damage from wind moves and its ATK stat stage is raised by 1 when hit by one", async () => {
diff --git a/src/test/abilities/wonder_skin.test.ts b/src/test/abilities/wonder_skin.test.ts
index 0c2aedc8ce8..6ef985fbd42 100644
--- a/src/test/abilities/wonder_skin.test.ts
+++ b/src/test/abilities/wonder_skin.test.ts
@@ -5,7 +5,6 @@ import { Abilities } from "#enums/abilities";
import { Moves } from "#enums/moves";
import { Species } from "#enums/species";
import GameManager from "#test/utils/gameManager";
-import { SPLASH_ONLY } from "#test/utils/testUtils";
import Phaser from "phaser";
import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest";
@@ -30,7 +29,7 @@ describe("Abilities - Wonder Skin", () => {
game.override.ability(Abilities.BALL_FETCH);
game.override.enemySpecies(Species.SHUCKLE);
game.override.enemyAbility(Abilities.WONDER_SKIN);
- game.override.enemyMoveset(SPLASH_ONLY);
+ game.override.enemyMoveset(Moves.SPLASH);
});
it("lowers accuracy of status moves to 50%", async () => {
diff --git a/src/test/abilities/zero_to_hero.test.ts b/src/test/abilities/zero_to_hero.test.ts
index 1a9697f974e..eafc32b4c79 100644
--- a/src/test/abilities/zero_to_hero.test.ts
+++ b/src/test/abilities/zero_to_hero.test.ts
@@ -6,7 +6,6 @@ import { Moves } from "#enums/moves";
import { Species } from "#enums/species";
import GameManager from "#test/utils/gameManager";
import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest";
-import { SPLASH_ONLY } from "../utils/testUtils";
const TIMEOUT = 20 * 1000;
@@ -30,8 +29,8 @@ describe("Abilities - ZERO TO HERO", () => {
game = new GameManager(phaserGame);
game.override
.battleType("single")
- .moveset(SPLASH_ONLY)
- .enemyMoveset(SPLASH_ONLY)
+ .moveset(Moves.SPLASH)
+ .enemyMoveset(Moves.SPLASH)
.enemyAbility(Abilities.BALL_FETCH);
});
diff --git a/src/test/account.spec.ts b/src/test/account.test.ts
similarity index 100%
rename from src/test/account.spec.ts
rename to src/test/account.test.ts
diff --git a/src/test/arena/arena_gravity.test.ts b/src/test/arena/arena_gravity.test.ts
index eda8c687ba1..47b8bf4cf70 100644
--- a/src/test/arena/arena_gravity.test.ts
+++ b/src/test/arena/arena_gravity.test.ts
@@ -8,7 +8,6 @@ import { Species } from "#enums/species";
import GameManager from "#test/utils/gameManager";
import Phaser from "phaser";
import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest";
-import { SPLASH_ONLY } from "../utils/testUtils";
describe("Arena - Gravity", () => {
let phaserGame: Phaser.Game;
@@ -32,7 +31,7 @@ describe("Arena - Gravity", () => {
.ability(Abilities.UNNERVE)
.enemyAbility(Abilities.BALL_FETCH)
.enemySpecies(Species.SHUCKLE)
- .enemyMoveset(SPLASH_ONLY);
+ .enemyMoveset(Moves.SPLASH);
});
// Reference: https://bulbapedia.bulbagarden.net/wiki/Gravity_(move)
diff --git a/src/test/arena/weather_fog.test.ts b/src/test/arena/weather_fog.test.ts
index b36b0de2e06..b47145e8dd0 100644
--- a/src/test/arena/weather_fog.test.ts
+++ b/src/test/arena/weather_fog.test.ts
@@ -31,7 +31,7 @@ describe("Weather - Fog", () => {
game.override.ability(Abilities.BALL_FETCH);
game.override.enemyAbility(Abilities.BALL_FETCH);
game.override.enemySpecies(Species.MAGIKARP);
- game.override.enemyMoveset(new Array(4).fill(Moves.SPLASH));
+ game.override.enemyMoveset([Moves.SPLASH]);
});
it("move accuracy is multiplied by 90%", async () => {
diff --git a/src/test/arena/weather_hail.test.ts b/src/test/arena/weather_hail.test.ts
index 75125b3448c..31d20be2ded 100644
--- a/src/test/arena/weather_hail.test.ts
+++ b/src/test/arena/weather_hail.test.ts
@@ -4,7 +4,6 @@ import { Species } from "#enums/species";
import GameManager from "#test/utils/gameManager";
import Phaser from "phaser";
import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest";
-import { SPLASH_ONLY } from "../utils/testUtils";
import { BattlerIndex } from "#app/battle";
describe("Weather - Hail", () => {
@@ -26,8 +25,8 @@ describe("Weather - Hail", () => {
game.override
.weather(WeatherType.HAIL)
.battleType("single")
- .moveset(SPLASH_ONLY)
- .enemyMoveset(SPLASH_ONLY)
+ .moveset(Moves.SPLASH)
+ .enemyMoveset(Moves.SPLASH)
.enemySpecies(Species.MAGIKARP);
});
diff --git a/src/test/arena/weather_sandstorm.test.ts b/src/test/arena/weather_sandstorm.test.ts
index 978774ba4c1..91188de6985 100644
--- a/src/test/arena/weather_sandstorm.test.ts
+++ b/src/test/arena/weather_sandstorm.test.ts
@@ -4,7 +4,6 @@ import { Species } from "#enums/species";
import GameManager from "#test/utils/gameManager";
import Phaser from "phaser";
import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest";
-import { SPLASH_ONLY } from "../utils/testUtils";
describe("Weather - Sandstorm", () => {
let phaserGame: Phaser.Game;
@@ -25,8 +24,8 @@ describe("Weather - Sandstorm", () => {
game.override
.weather(WeatherType.SANDSTORM)
.battleType("single")
- .moveset(SPLASH_ONLY)
- .enemyMoveset(SPLASH_ONLY)
+ .moveset(Moves.SPLASH)
+ .enemyMoveset(Moves.SPLASH)
.enemySpecies(Species.MAGIKARP);
});
diff --git a/src/test/arena/weather_strong_winds.test.ts b/src/test/arena/weather_strong_winds.test.ts
index 8b2d3e2547e..5ce0e61e647 100644
--- a/src/test/arena/weather_strong_winds.test.ts
+++ b/src/test/arena/weather_strong_winds.test.ts
@@ -1,4 +1,5 @@
import { allMoves } from "#app/data/move";
+import { StatusEffect } from "#app/enums/status-effect";
import { TurnStartPhase } from "#app/phases/turn-start-phase";
import { Abilities } from "#enums/abilities";
import { Moves } from "#enums/moves";
@@ -33,7 +34,7 @@ describe("Weather - Strong Winds", () => {
it("electric type move is not very effective on Rayquaza", async () => {
game.override.enemySpecies(Species.RAYQUAZA);
- await game.startBattle([Species.PIKACHU]);
+ await game.classicMode.startBattle([Species.PIKACHU]);
const pikachu = game.scene.getPlayerPokemon()!;
const enemy = game.scene.getEnemyPokemon()!;
@@ -44,7 +45,7 @@ describe("Weather - Strong Winds", () => {
});
it("electric type move is neutral for flying type pokemon", async () => {
- await game.startBattle([Species.PIKACHU]);
+ await game.classicMode.startBattle([Species.PIKACHU]);
const pikachu = game.scene.getPlayerPokemon()!;
const enemy = game.scene.getEnemyPokemon()!;
@@ -55,7 +56,7 @@ describe("Weather - Strong Winds", () => {
});
it("ice type move is neutral for flying type pokemon", async () => {
- await game.startBattle([Species.PIKACHU]);
+ await game.classicMode.startBattle([Species.PIKACHU]);
const pikachu = game.scene.getPlayerPokemon()!;
const enemy = game.scene.getEnemyPokemon()!;
@@ -66,7 +67,7 @@ describe("Weather - Strong Winds", () => {
});
it("rock type move is neutral for flying type pokemon", async () => {
- await game.startBattle([Species.PIKACHU]);
+ await game.classicMode.startBattle([Species.PIKACHU]);
const pikachu = game.scene.getPlayerPokemon()!;
const enemy = game.scene.getEnemyPokemon()!;
@@ -75,4 +76,18 @@ describe("Weather - Strong Winds", () => {
await game.phaseInterceptor.to(TurnStartPhase);
expect(enemy.getAttackTypeEffectiveness(allMoves[Moves.ROCK_SLIDE].type, pikachu)).toBe(1);
});
+
+ it("weather goes away when last trainer pokemon dies to indirect damage", async () => {
+ game.override.enemyStatusEffect(StatusEffect.POISON);
+
+ await game.classicMode.startBattle([Species.MAGIKARP]);
+
+ const enemy = game.scene.getEnemyPokemon()!;
+ enemy.hp = 1;
+
+ game.move.select(Moves.SPLASH);
+ await game.phaseInterceptor.to("TurnEndPhase");
+
+ expect(game.scene.arena.weather?.weatherType).toBeUndefined();
+ });
});
diff --git a/src/test/battle/battle.test.ts b/src/test/battle/battle.test.ts
index 25dfbc765bd..6e15bbd99d9 100644
--- a/src/test/battle/battle.test.ts
+++ b/src/test/battle/battle.test.ts
@@ -25,7 +25,6 @@ import { PlayerGender } from "#enums/player-gender";
import { Species } from "#enums/species";
import Phaser from "phaser";
import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest";
-import { SPLASH_ONLY } from "../utils/testUtils";
describe("Test Battle Phase", () => {
let phaserGame: Phaser.Game;
@@ -319,7 +318,7 @@ describe("Test Battle Phase", () => {
.startingWave(1)
.startingLevel(100)
.moveset([moveToUse])
- .enemyMoveset(SPLASH_ONLY)
+ .enemyMoveset(Moves.SPLASH)
.startingHeldItems([{ name: "TEMP_STAT_STAGE_BOOSTER", type: Stat.ACC }]);
await game.startBattle();
diff --git a/src/test/battle/damage_calculation.test.ts b/src/test/battle/damage_calculation.test.ts
index 9c7c9dc9d3e..89f2bb4c269 100644
--- a/src/test/battle/damage_calculation.test.ts
+++ b/src/test/battle/damage_calculation.test.ts
@@ -5,7 +5,6 @@ import { ArenaTagType } from "#enums/arena-tag-type";
import { Moves } from "#enums/moves";
import { Species } from "#enums/species";
import GameManager from "#test/utils/gameManager";
-import { SPLASH_ONLY } from "#test/utils/testUtils";
import Phaser from "phaser";
import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest";
@@ -31,7 +30,7 @@ describe("Round Down and Minimun 1 test in Damage Calculation", () => {
it("When the user fails to use Jump Kick with Wonder Guard ability, the damage should be 1.", async () => {
game.override.enemySpecies(Species.GASTLY);
- game.override.enemyMoveset(SPLASH_ONLY);
+ game.override.enemyMoveset(Moves.SPLASH);
game.override.starterSpecies(Species.SHEDINJA);
game.override.moveset([Moves.JUMP_KICK]);
game.override.ability(Abilities.WONDER_GUARD);
diff --git a/src/test/battle/double_battle.test.ts b/src/test/battle/double_battle.test.ts
index d264a29ef9b..b7a5616d642 100644
--- a/src/test/battle/double_battle.test.ts
+++ b/src/test/battle/double_battle.test.ts
@@ -4,7 +4,6 @@ import { TurnInitPhase } from "#app/phases/turn-init-phase";
import { Moves } from "#enums/moves";
import { Species } from "#enums/species";
import GameManager from "#test/utils/gameManager";
-import { SPLASH_ONLY } from "#test/utils/testUtils";
import Phaser from "phaser";
import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest";
@@ -29,7 +28,7 @@ describe("Double Battles", () => {
// double-battle player's pokemon both fainted in same round, then revive one, and next double battle summons two player's pokemon successfully.
// (There were bugs that either only summon one when can summon two, player stuck in switchPhase etc)
it("3v2 edge case: player summons 2 pokemon on the next battle after being fainted and revived", async () => {
- game.override.battleType("double").enemyMoveset(SPLASH_ONLY).moveset(SPLASH_ONLY);
+ game.override.battleType("double").enemyMoveset(Moves.SPLASH).moveset(Moves.SPLASH);
await game.startBattle([
Species.BULBASAUR,
Species.CHARIZARD,
diff --git a/src/test/battle/inverse_battle.test.ts b/src/test/battle/inverse_battle.test.ts
index 2a561a09e5e..d808f71addb 100644
--- a/src/test/battle/inverse_battle.test.ts
+++ b/src/test/battle/inverse_battle.test.ts
@@ -8,7 +8,6 @@ import { Species } from "#enums/species";
import { StatusEffect } from "#enums/status-effect";
import GameManager from "#test/utils/gameManager";
import Phaser from "phaser";
-import { SPLASH_ONLY } from "#test/utils/testUtils";
import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest";
const TIMEOUT = 20 * 1000;
@@ -38,7 +37,7 @@ describe("Inverse Battle", () => {
.ability(Abilities.BALL_FETCH)
.enemySpecies(Species.MAGIKARP)
.enemyAbility(Abilities.BALL_FETCH)
- .enemyMoveset(SPLASH_ONLY);
+ .enemyMoveset(Moves.SPLASH);
});
it("Immune types are 2x effective - Thunderbolt against Ground Type", async () => {
diff --git a/src/test/boss-pokemon.test.ts b/src/test/boss-pokemon.test.ts
index c6fc276551f..8a0a0e01617 100644
--- a/src/test/boss-pokemon.test.ts
+++ b/src/test/boss-pokemon.test.ts
@@ -2,7 +2,6 @@ import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest";
import GameManager from "./utils/gameManager";
import { Species } from "#app/enums/species";
import { getPokemonSpecies } from "#app/data/pokemon-species";
-import { SPLASH_ONLY } from "./utils/testUtils";
import { Abilities } from "#app/enums/abilities";
import { Moves } from "#app/enums/moves";
import { EFFECTIVE_STATS } from "#app/enums/stat";
@@ -33,7 +32,7 @@ describe("Boss Pokemon / Shields", () => {
.disableTrainerWaves()
.disableCrits()
.enemySpecies(Species.RATTATA)
- .enemyMoveset(SPLASH_ONLY)
+ .enemyMoveset(Moves.SPLASH)
.enemyHeldItems([])
.startingLevel(1000)
.moveset([Moves.FALSE_SWIPE, Moves.SUPER_FANG, Moves.SPLASH])
diff --git a/src/test/eggs/manaphy-egg.test.ts b/src/test/eggs/manaphy-egg.test.ts
new file mode 100644
index 00000000000..257bf330bb8
--- /dev/null
+++ b/src/test/eggs/manaphy-egg.test.ts
@@ -0,0 +1,118 @@
+import { Egg } from "#app/data/egg";
+import { EggSourceType } from "#app/enums/egg-source-types";
+import { EggTier } from "#app/enums/egg-type";
+import { Species } from "#enums/species";
+import GameManager from "#test/utils/gameManager";
+import Phaser from "phaser";
+import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest";
+
+describe("Manaphy Eggs", () => {
+ let phaserGame: Phaser.Game;
+ let game: GameManager;
+ const EGG_HATCH_COUNT: integer = 48;
+ let rngSweepProgress: number = 0;
+
+ beforeAll(() => {
+ phaserGame = new Phaser.Game({
+ type: Phaser.HEADLESS,
+ });
+ game = new GameManager(phaserGame);
+ });
+
+ afterEach(() => {
+ game.phaseInterceptor.restoreOg();
+ vi.restoreAllMocks();
+ });
+
+ beforeEach(async () => {
+ await game.importData("src/test/utils/saves/everything.prsv");
+
+ /**
+ * In our tests, we will perform an "RNG sweep" by letting rngSweepProgress
+ * increase uniformly from 0 to 1 in order to get a uniform sample of the
+ * possible RNG outcomes. This will let us quickly and consistently find
+ * the probability of each RNG outcome.
+ */
+ vi.spyOn(Phaser.Math.RND, "realInRange").mockImplementation((min: number, max: number) => {
+ return rngSweepProgress * (max - min) + min;
+ });
+ });
+
+ it("should have correct Manaphy rates and Rare Egg Move rates, from the egg gacha", () => {
+ const scene = game.scene;
+
+ let manaphyCount = 0;
+ let phioneCount = 0;
+ let rareEggMoveCount = 0;
+ for (let i = 0; i < EGG_HATCH_COUNT; i++) {
+ rngSweepProgress = (2 * i + 1) / (2 * EGG_HATCH_COUNT);
+
+ const newEgg = new Egg({ scene, tier: EggTier.COMMON, sourceType: EggSourceType.GACHA_SHINY, id: 204 });
+ const newHatch = newEgg.generatePlayerPokemon(scene);
+ if (newHatch.species.speciesId === Species.MANAPHY) {
+ manaphyCount++;
+ } else if (newHatch.species.speciesId === Species.PHIONE) {
+ phioneCount++;
+ }
+ if (newEgg.eggMoveIndex === 3) {
+ rareEggMoveCount++;
+ }
+ }
+
+ expect(manaphyCount + phioneCount).toBe(EGG_HATCH_COUNT);
+ expect(manaphyCount).toBe(1/8 * EGG_HATCH_COUNT);
+ expect(rareEggMoveCount).toBe(1/12 * EGG_HATCH_COUNT);
+ });
+
+ it("should have correct Manaphy rates and Rare Egg Move rates, from Phione species eggs", () => {
+ const scene = game.scene;
+
+ let manaphyCount = 0;
+ let phioneCount = 0;
+ let rareEggMoveCount = 0;
+ for (let i = 0; i < EGG_HATCH_COUNT; i++) {
+ rngSweepProgress = (2 * i + 1) / (2 * EGG_HATCH_COUNT);
+
+ const newEgg = new Egg({ scene, species: Species.PHIONE, sourceType: EggSourceType.SAME_SPECIES_EGG });
+ const newHatch = newEgg.generatePlayerPokemon(scene);
+ if (newHatch.species.speciesId === Species.MANAPHY) {
+ manaphyCount++;
+ } else if (newHatch.species.speciesId === Species.PHIONE) {
+ phioneCount++;
+ }
+ if (newEgg.eggMoveIndex === 3) {
+ rareEggMoveCount++;
+ }
+ }
+
+ expect(manaphyCount + phioneCount).toBe(EGG_HATCH_COUNT);
+ expect(manaphyCount).toBe(1/8 * EGG_HATCH_COUNT);
+ expect(rareEggMoveCount).toBe(1/6 * EGG_HATCH_COUNT);
+ });
+
+ it("should have correct Manaphy rates and Rare Egg Move rates, from Manaphy species eggs", () => {
+ const scene = game.scene;
+
+ let manaphyCount = 0;
+ let phioneCount = 0;
+ let rareEggMoveCount = 0;
+ for (let i = 0; i < EGG_HATCH_COUNT; i++) {
+ rngSweepProgress = (2 * i + 1) / (2 * EGG_HATCH_COUNT);
+
+ const newEgg = new Egg({ scene, species: Species.MANAPHY, sourceType: EggSourceType.SAME_SPECIES_EGG });
+ const newHatch = newEgg.generatePlayerPokemon(scene);
+ if (newHatch.species.speciesId === Species.MANAPHY) {
+ manaphyCount++;
+ } else if (newHatch.species.speciesId === Species.PHIONE) {
+ phioneCount++;
+ }
+ if (newEgg.eggMoveIndex === 3) {
+ rareEggMoveCount++;
+ }
+ }
+
+ expect(phioneCount).toBe(0);
+ expect(manaphyCount).toBe(EGG_HATCH_COUNT);
+ expect(rareEggMoveCount).toBe(1/6 * EGG_HATCH_COUNT);
+ });
+});
diff --git a/src/test/evolution.test.ts b/src/test/evolution.test.ts
index 9f0806b8e24..16922babd7c 100644
--- a/src/test/evolution.test.ts
+++ b/src/test/evolution.test.ts
@@ -6,7 +6,6 @@ import * as Utils from "#app/utils";
import GameManager from "#test/utils/gameManager";
import Phaser from "phaser";
import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest";
-import { SPLASH_ONLY } from "./utils/testUtils";
describe("Evolution", () => {
let phaserGame: Phaser.Game;
@@ -99,7 +98,7 @@ describe("Evolution", () => {
it("should increase both HP and max HP when evolving", async () => {
game.override.moveset([Moves.SURF])
.enemySpecies(Species.GOLEM)
- .enemyMoveset(SPLASH_ONLY)
+ .enemyMoveset(Moves.SPLASH)
.startingWave(21)
.startingLevel(16)
.enemyLevel(50);
@@ -126,7 +125,7 @@ describe("Evolution", () => {
it("should not fully heal HP when evolving", async () => {
game.override.moveset([Moves.SURF])
.enemySpecies(Species.GOLEM)
- .enemyMoveset(SPLASH_ONLY)
+ .enemyMoveset(Moves.SPLASH)
.startingWave(21)
.startingLevel(13)
.enemyLevel(30);
diff --git a/src/test/field/pokemon.test.ts b/src/test/field/pokemon.test.ts
index d597cd5219c..f7c1cf8bc3d 100644
--- a/src/test/field/pokemon.test.ts
+++ b/src/test/field/pokemon.test.ts
@@ -1,6 +1,8 @@
import { Species } from "#app/enums/species";
import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest";
import GameManager from "../utils/gameManager";
+import { PokeballType } from "#app/enums/pokeball";
+import BattleScene from "#app/battle-scene";
describe("Spec - Pokemon", () => {
let phaserGame: Phaser.Game;
@@ -28,4 +30,37 @@ describe("Spec - Pokemon", () => {
expect(pkm.trySetStatus(undefined)).toBe(true);
});
+
+ describe("Add To Party", () => {
+ let scene: BattleScene;
+
+ beforeEach(async () => {
+ game.override.enemySpecies(Species.ZUBAT);
+ await game.classicMode.runToSummon([Species.ABRA, Species.ABRA, Species.ABRA, Species.ABRA, Species.ABRA]); // 5 Abra, only 1 slot left
+ scene = game.scene;
+ });
+
+ it("should append a new pokemon by default", async () => {
+ const zubat = scene.getEnemyPokemon()!;
+ zubat.addToParty(PokeballType.LUXURY_BALL);
+
+ const party = scene.getParty();
+ expect(party).toHaveLength(6);
+ party.forEach((pkm, index) =>{
+ expect(pkm.species.speciesId).toBe(index === 5 ? Species.ZUBAT : Species.ABRA);
+ });
+ });
+
+ it("should put a new pokemon into the passed slotIndex", async () => {
+ const slotIndex = 1;
+ const zubat = scene.getEnemyPokemon()!;
+ zubat.addToParty(PokeballType.LUXURY_BALL, slotIndex);
+
+ const party = scene.getParty();
+ expect(party).toHaveLength(6);
+ party.forEach((pkm, index) =>{
+ expect(pkm.species.speciesId).toBe(index === slotIndex ? Species.ZUBAT : Species.ABRA);
+ });
+ });
+ });
});
diff --git a/src/test/final_boss.test.ts b/src/test/final_boss.test.ts
index 5d006998a0b..fee4dc6c8f6 100644
--- a/src/test/final_boss.test.ts
+++ b/src/test/final_boss.test.ts
@@ -7,7 +7,6 @@ import { GameModes } from "#app/game-mode";
import { TurnHeldItemTransferModifier } from "#app/modifier/modifier";
import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest";
import GameManager from "./utils/gameManager";
-import { SPLASH_ONLY } from "./utils/testUtils";
const FinalWave = {
Classic: 200,
@@ -29,7 +28,7 @@ describe("Final Boss", () => {
.startingWave(FinalWave.Classic)
.startingBiome(Biome.END)
.disableCrits()
- .enemyMoveset(SPLASH_ONLY)
+ .enemyMoveset(Moves.SPLASH)
.moveset([ Moves.SPLASH, Moves.WILL_O_WISP, Moves.DRAGON_PULSE ])
.startingLevel(10000);
});
diff --git a/src/test/items/dire_hit.test.ts b/src/test/items/dire_hit.test.ts
index 4b5988294f3..601552de7f1 100644
--- a/src/test/items/dire_hit.test.ts
+++ b/src/test/items/dire_hit.test.ts
@@ -4,7 +4,6 @@ import { Species } from "#enums/species";
import GameManager from "#test/utils/gameManager";
import Phase from "phaser";
import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest";
-import { SPLASH_ONLY } from "../utils/testUtils";
import { BattleEndPhase } from "#app/phases/battle-end-phase";
import { TempCritBoosterModifier } from "#app/modifier/modifier";
import { Mode } from "#app/ui/ui";
@@ -34,7 +33,7 @@ describe("Items - Dire Hit", () => {
game.override
.enemySpecies(Species.MAGIKARP)
- .enemyMoveset(SPLASH_ONLY)
+ .enemyMoveset(Moves.SPLASH)
.moveset([ Moves.POUND ])
.startingHeldItems([{ name: "DIRE_HIT" }])
.battleType("single")
diff --git a/src/test/items/double_battle_chance_booster.test.ts b/src/test/items/double_battle_chance_booster.test.ts
index 808d4c7ca51..1d5051fa9e9 100644
--- a/src/test/items/double_battle_chance_booster.test.ts
+++ b/src/test/items/double_battle_chance_booster.test.ts
@@ -1,14 +1,13 @@
-import { Moves } from "#app/enums/moves.js";
-import { Species } from "#app/enums/species.js";
+import { Moves } from "#app/enums/moves";
+import { Species } from "#app/enums/species";
import { DoubleBattleChanceBoosterModifier } from "#app/modifier/modifier";
import GameManager from "#test/utils/gameManager";
import Phaser from "phaser";
import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest";
-import { SPLASH_ONLY } from "../utils/testUtils";
-import { ShopCursorTarget } from "#app/enums/shop-cursor-target.js";
-import { Mode } from "#app/ui/ui.js";
-import ModifierSelectUiHandler from "#app/ui/modifier-select-ui-handler.js";
-import { Button } from "#app/enums/buttons.js";
+import { ShopCursorTarget } from "#app/enums/shop-cursor-target";
+import { Mode } from "#app/ui/ui";
+import ModifierSelectUiHandler from "#app/ui/modifier-select-ui-handler";
+import { Button } from "#app/enums/buttons";
describe("Items - Double Battle Chance Boosters", () => {
let phaserGame: Phaser.Game;
@@ -64,7 +63,7 @@ describe("Items - Double Battle Chance Boosters", () => {
game.override
.startingModifier([{ name: "LURE" }])
.itemRewards([{ name: "LURE" }])
- .moveset(SPLASH_ONLY)
+ .moveset(Moves.SPLASH)
.startingLevel(200);
await game.classicMode.startBattle([
diff --git a/src/test/items/grip_claw.test.ts b/src/test/items/grip_claw.test.ts
index 09afa9aea0b..d9871616449 100644
--- a/src/test/items/grip_claw.test.ts
+++ b/src/test/items/grip_claw.test.ts
@@ -8,7 +8,6 @@ import { MoveEndPhase } from "#app/phases/move-end-phase";
import GameManager from "#test/utils/gameManager";
import Phase from "phaser";
import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest";
-import { SPLASH_ONLY } from "../utils/testUtils";
const TIMEOUT = 20 * 1000; // 20 seconds
@@ -38,7 +37,7 @@ describe("Items - Grip Claw", () => {
])
.enemySpecies(Species.SNORLAX)
.ability(Abilities.KLUTZ)
- .enemyMoveset(SPLASH_ONLY)
+ .enemyMoveset(Moves.SPLASH)
.enemyHeldItems([
{ name: "BERRY", type: BerryType.SITRUS, count: 2 },
{ name: "BERRY", type: BerryType.LUM, count: 2 },
diff --git a/src/test/items/scope_lens.test.ts b/src/test/items/scope_lens.test.ts
index c8629093ab5..e39517ceae9 100644
--- a/src/test/items/scope_lens.test.ts
+++ b/src/test/items/scope_lens.test.ts
@@ -4,7 +4,6 @@ import { Species } from "#enums/species";
import GameManager from "#test/utils/gameManager";
import Phase from "phaser";
import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest";
-import { SPLASH_ONLY } from "../utils/testUtils";
describe("Items - Scope Lens", () => {
let phaserGame: Phaser.Game;
@@ -25,7 +24,7 @@ describe("Items - Scope Lens", () => {
game.override
.enemySpecies(Species.MAGIKARP)
- .enemyMoveset(SPLASH_ONLY)
+ .enemyMoveset(Moves.SPLASH)
.moveset([ Moves.POUND ])
.startingHeldItems([{ name: "SCOPE_LENS" }])
.battleType("single")
diff --git a/src/test/items/temp_stat_stage_booster.test.ts b/src/test/items/temp_stat_stage_booster.test.ts
index 3e32fa13a04..6186799623a 100644
--- a/src/test/items/temp_stat_stage_booster.test.ts
+++ b/src/test/items/temp_stat_stage_booster.test.ts
@@ -5,7 +5,6 @@ import Phase from "phaser";
import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest";
import { Moves } from "#app/enums/moves";
import { TurnEndPhase } from "#app/phases/turn-end-phase";
-import { SPLASH_ONLY } from "../utils/testUtils";
import { Abilities } from "#app/enums/abilities";
import { TempStatStageBoosterModifier } from "#app/modifier/modifier";
import { Mode } from "#app/ui/ui";
@@ -34,7 +33,7 @@ describe("Items - Temporary Stat Stage Boosters", () => {
game.override
.battleType("single")
.enemySpecies(Species.SHUCKLE)
- .enemyMoveset(SPLASH_ONLY)
+ .enemyMoveset(Moves.SPLASH)
.enemyAbility(Abilities.BALL_FETCH)
.moveset([ Moves.TACKLE, Moves.SPLASH, Moves.HONE_CLAWS, Moves.BELLY_DRUM ])
.startingModifier([{ name: "TEMP_STAT_STAGE_BOOSTER", type: Stat.ATK }]);
diff --git a/src/test/moves/after_you.test.ts b/src/test/moves/after_you.test.ts
new file mode 100644
index 00000000000..efce1b28a17
--- /dev/null
+++ b/src/test/moves/after_you.test.ts
@@ -0,0 +1,65 @@
+import { BattlerIndex } from "#app/battle";
+import { Abilities } from "#app/enums/abilities";
+import { MoveResult } from "#app/field/pokemon";
+import { MovePhase } from "#app/phases/move-phase";
+import { Moves } from "#enums/moves";
+import { Species } from "#enums/species";
+import GameManager from "#test/utils/gameManager";
+import Phaser from "phaser";
+import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest";
+
+const TIMEOUT = 20 * 1000;
+
+describe("Moves - After You", () => {
+ let phaserGame: Phaser.Game;
+ let game: GameManager;
+
+ beforeAll(() => {
+ phaserGame = new Phaser.Game({
+ type: Phaser.HEADLESS,
+ });
+ });
+
+ afterEach(() => {
+ game.phaseInterceptor.restoreOg();
+ });
+
+ beforeEach(() => {
+ game = new GameManager(phaserGame);
+ game.override
+ .battleType("double")
+ .enemyLevel(5)
+ .enemySpecies(Species.PIKACHU)
+ .enemyAbility(Abilities.BALL_FETCH)
+ .enemyMoveset(Moves.SPLASH)
+ .ability(Abilities.BALL_FETCH)
+ .moveset([Moves.AFTER_YOU, Moves.SPLASH]);
+ });
+
+ it("makes the target move immediately after the user", async () => {
+ await game.classicMode.startBattle([Species.REGIELEKI, Species.SHUCKLE]);
+
+ game.move.select(Moves.AFTER_YOU, 0, BattlerIndex.PLAYER_2);
+ game.move.select(Moves.SPLASH, 1);
+
+ await game.phaseInterceptor.to("MoveEffectPhase");
+ await game.phaseInterceptor.to(MovePhase, false);
+ const phase = game.scene.getCurrentPhase() as MovePhase;
+ expect(phase.pokemon).toBe(game.scene.getPlayerField()[1]);
+ await game.phaseInterceptor.to("MoveEndPhase");
+ }, TIMEOUT);
+
+ it("fails if target already moved", async () => {
+ game.override.enemySpecies(Species.SHUCKLE);
+ await game.classicMode.startBattle([Species.REGIELEKI, Species.PIKACHU]);
+
+ game.move.select(Moves.SPLASH);
+ game.move.select(Moves.AFTER_YOU, 1, BattlerIndex.PLAYER);
+
+ await game.phaseInterceptor.to("MoveEndPhase");
+ await game.phaseInterceptor.to("MoveEndPhase");
+ await game.phaseInterceptor.to(MovePhase);
+
+ expect(game.scene.getPlayerField()[1].getLastXMoves(1)[0].result).toBe(MoveResult.FAIL);
+ }, TIMEOUT);
+});
diff --git a/src/test/moves/alluring_voice.test.ts b/src/test/moves/alluring_voice.test.ts
index 9807d1bce85..b438d0f736a 100644
--- a/src/test/moves/alluring_voice.test.ts
+++ b/src/test/moves/alluring_voice.test.ts
@@ -31,7 +31,7 @@ describe("Moves - Alluring Voice", () => {
.disableCrits()
.enemySpecies(Species.MAGIKARP)
.enemyAbility(Abilities.ICE_SCALES)
- .enemyMoveset(Array(4).fill(Moves.HOWL))
+ .enemyMoveset([Moves.HOWL])
.startingLevel(10)
.enemyLevel(10)
.starterSpecies(Species.FEEBAS)
diff --git a/src/test/moves/baton_pass.test.ts b/src/test/moves/baton_pass.test.ts
index 1a4edafdd36..5643efceae2 100644
--- a/src/test/moves/baton_pass.test.ts
+++ b/src/test/moves/baton_pass.test.ts
@@ -5,7 +5,6 @@ import { BattlerTagType } from "#enums/battler-tag-type";
import { Moves } from "#enums/moves";
import { Species } from "#enums/species";
import { Stat } from "#enums/stat";
-import { SPLASH_ONLY } from "#test/utils/testUtils";
import Phaser from "phaser";
import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest";
@@ -31,7 +30,7 @@ describe("Moves - Baton Pass", () => {
.enemyAbility(Abilities.BALL_FETCH)
.moveset([Moves.BATON_PASS, Moves.NASTY_PLOT, Moves.SPLASH])
.ability(Abilities.BALL_FETCH)
- .enemyMoveset(SPLASH_ONLY)
+ .enemyMoveset(Moves.SPLASH)
.disableCrits();
});
@@ -71,7 +70,10 @@ describe("Moves - Baton Pass", () => {
// round 2 - baton pass
game.scene.getEnemyPokemon()!.hp = 100;
- game.override.enemyMoveset(new Array(4).fill(Moves.BATON_PASS));
+ game.override.enemyMoveset([Moves.BATON_PASS]);
+ // Force moveset to update mid-battle
+ // TODO: replace with enemy ai control function when it's added
+ game.scene.getEnemyParty()[0].getMoveset();
game.move.select(Moves.SPLASH);
await game.phaseInterceptor.to("PostSummonPhase", false);
@@ -90,7 +92,7 @@ describe("Moves - Baton Pass", () => {
}, 20000);
it("doesn't transfer effects that aren't transferrable", async() => {
- game.override.enemyMoveset(Array(4).fill(Moves.SALT_CURE));
+ game.override.enemyMoveset([Moves.SALT_CURE]);
await game.classicMode.startBattle([Species.PIKACHU, Species.FEEBAS]);
const [player1, player2] = game.scene.getParty();
diff --git a/src/test/moves/beak_blast.test.ts b/src/test/moves/beak_blast.test.ts
index 2a93dc00a54..fe748c87826 100644
--- a/src/test/moves/beak_blast.test.ts
+++ b/src/test/moves/beak_blast.test.ts
@@ -34,7 +34,7 @@ describe("Moves - Beak Blast", () => {
.moveset([Moves.BEAK_BLAST])
.enemySpecies(Species.SNORLAX)
.enemyAbility(Abilities.INSOMNIA)
- .enemyMoveset(Array(4).fill(Moves.TACKLE))
+ .enemyMoveset([Moves.TACKLE])
.startingLevel(100)
.enemyLevel(100);
});
@@ -80,7 +80,7 @@ describe("Moves - Beak Blast", () => {
it(
"should not burn attackers that don't make contact",
async () => {
- game.override.enemyMoveset(Array(4).fill(Moves.WATER_GUN));
+ game.override.enemyMoveset([Moves.WATER_GUN]);
await game.startBattle([Species.BLASTOISE]);
@@ -116,7 +116,7 @@ describe("Moves - Beak Blast", () => {
it(
"should be blocked by Protect",
async () => {
- game.override.enemyMoveset(Array(4).fill(Moves.PROTECT));
+ game.override.enemyMoveset([Moves.PROTECT]);
await game.startBattle([Species.BLASTOISE]);
diff --git a/src/test/moves/beat_up.test.ts b/src/test/moves/beat_up.test.ts
index ce1598a49b4..70b33f56583 100644
--- a/src/test/moves/beat_up.test.ts
+++ b/src/test/moves/beat_up.test.ts
@@ -29,7 +29,7 @@ describe("Moves - Beat Up", () => {
game.override.enemySpecies(Species.SNORLAX);
game.override.enemyLevel(100);
- game.override.enemyMoveset(Array(4).fill(Moves.SPLASH));
+ game.override.enemyMoveset([Moves.SPLASH]);
game.override.enemyAbility(Abilities.INSOMNIA);
game.override.startingLevel(100);
diff --git a/src/test/moves/belly_drum.test.ts b/src/test/moves/belly_drum.test.ts
index 7024deb3f18..3d85c59a2a5 100644
--- a/src/test/moves/belly_drum.test.ts
+++ b/src/test/moves/belly_drum.test.ts
@@ -6,7 +6,6 @@ import { Stat } from "#enums/stat";
import GameManager from "#test/utils/gameManager";
import Phaser from "phaser";
import { afterEach, beforeAll, beforeEach, describe, expect, test } from "vitest";
-import { SPLASH_ONLY } from "../utils/testUtils";
import { Abilities } from "#app/enums/abilities";
const TIMEOUT = 20 * 1000;
@@ -37,7 +36,7 @@ describe("Moves - BELLY DRUM", () => {
.startingLevel(100)
.enemyLevel(100)
.moveset([Moves.BELLY_DRUM])
- .enemyMoveset(SPLASH_ONLY)
+ .enemyMoveset(Moves.SPLASH)
.enemyAbility(Abilities.BALL_FETCH);
});
diff --git a/src/test/moves/burning_jealousy.test.ts b/src/test/moves/burning_jealousy.test.ts
index 2cb6a0bc52a..3f2bf453684 100644
--- a/src/test/moves/burning_jealousy.test.ts
+++ b/src/test/moves/burning_jealousy.test.ts
@@ -7,7 +7,6 @@ import { Species } from "#enums/species";
import GameManager from "#test/utils/gameManager";
import Phaser from "phaser";
import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest";
-import { SPLASH_ONLY } from "../utils/testUtils";
const TIMEOUT = 20 * 1000;
@@ -32,7 +31,7 @@ describe("Moves - Burning Jealousy", () => {
.disableCrits()
.enemySpecies(Species.MAGIKARP)
.enemyAbility(Abilities.ICE_SCALES)
- .enemyMoveset(Array(4).fill(Moves.HOWL))
+ .enemyMoveset([Moves.HOWL])
.startingLevel(10)
.enemyLevel(10)
.starterSpecies(Species.FEEBAS)
@@ -73,7 +72,7 @@ describe("Moves - Burning Jealousy", () => {
game.override
.enemySpecies(Species.DITTO)
.enemyAbility(Abilities.IMPOSTER)
- .enemyMoveset(SPLASH_ONLY);
+ .enemyMoveset(Moves.SPLASH);
await game.classicMode.startBattle();
const enemy = game.scene.getEnemyPokemon()!;
@@ -91,7 +90,7 @@ describe("Moves - Burning Jealousy", () => {
it("should be boosted by Sheer Force even if opponent didn't raise stat stages", async () => {
game.override
.ability(Abilities.SHEER_FORCE)
- .enemyMoveset(SPLASH_ONLY);
+ .enemyMoveset(Moves.SPLASH);
vi.spyOn(allMoves[Moves.BURNING_JEALOUSY], "calculateBattlePower");
await game.classicMode.startBattle();
diff --git a/src/test/moves/clangorous_soul.test.ts b/src/test/moves/clangorous_soul.test.ts
index 9bd3bc2379e..015b73b4dab 100644
--- a/src/test/moves/clangorous_soul.test.ts
+++ b/src/test/moves/clangorous_soul.test.ts
@@ -5,7 +5,6 @@ import { TurnEndPhase } from "#app/phases/turn-end-phase";
import { Moves } from "#enums/moves";
import { Species } from "#enums/species";
import { Stat } from "#enums/stat";
-import { SPLASH_ONLY } from "#test/utils/testUtils";
const TIMEOUT = 20 * 1000;
/** HP Cost of Move */
@@ -34,7 +33,7 @@ describe("Moves - Clangorous Soul", () => {
game.override.startingLevel(100);
game.override.enemyLevel(100);
game.override.moveset([Moves.CLANGOROUS_SOUL]);
- game.override.enemyMoveset(SPLASH_ONLY);
+ game.override.enemyMoveset(Moves.SPLASH);
});
//Bulbapedia Reference: https://bulbapedia.bulbagarden.net/wiki/Clangorous_Soul_(move)
diff --git a/src/test/moves/crafty_shield.test.ts b/src/test/moves/crafty_shield.test.ts
index e73a1fd256d..7b962518944 100644
--- a/src/test/moves/crafty_shield.test.ts
+++ b/src/test/moves/crafty_shield.test.ts
@@ -33,7 +33,7 @@ describe("Moves - Crafty Shield", () => {
game.override.moveset([Moves.CRAFTY_SHIELD, Moves.SPLASH, Moves.SWORDS_DANCE]);
game.override.enemySpecies(Species.SNORLAX);
- game.override.enemyMoveset(Array(4).fill(Moves.GROWL));
+ game.override.enemyMoveset([Moves.GROWL]);
game.override.enemyAbility(Abilities.INSOMNIA);
game.override.startingLevel(100);
@@ -62,7 +62,7 @@ describe("Moves - Crafty Shield", () => {
test(
"should not protect the user and allies from attack moves",
async () => {
- game.override.enemyMoveset(Array(4).fill(Moves.TACKLE));
+ game.override.enemyMoveset([Moves.TACKLE]);
await game.startBattle([Species.CHARIZARD, Species.BLASTOISE]);
@@ -84,7 +84,7 @@ describe("Moves - Crafty Shield", () => {
"should protect the user and allies from moves that ignore other protection",
async () => {
game.override.enemySpecies(Species.DUSCLOPS);
- game.override.enemyMoveset(Array(4).fill(Moves.CURSE));
+ game.override.enemyMoveset([Moves.CURSE]);
await game.startBattle([Species.CHARIZARD, Species.BLASTOISE]);
diff --git a/src/test/moves/disable.test.ts b/src/test/moves/disable.test.ts
index 3d207035ce3..a35d294e91f 100644
--- a/src/test/moves/disable.test.ts
+++ b/src/test/moves/disable.test.ts
@@ -4,7 +4,6 @@ import { Abilities } from "#enums/abilities";
import { Moves } from "#enums/moves";
import { Species } from "#enums/species";
import GameManager from "#test/utils/gameManager";
-import { SPLASH_ONLY } from "#test/utils/testUtils";
import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest";
describe("Moves - Disable", () => {
@@ -28,7 +27,7 @@ describe("Moves - Disable", () => {
.ability(Abilities.BALL_FETCH)
.enemyAbility(Abilities.BALL_FETCH)
.moveset([Moves.DISABLE, Moves.SPLASH])
- .enemyMoveset(SPLASH_ONLY)
+ .enemyMoveset(Moves.SPLASH)
.starterSpecies(Species.PIKACHU)
.enemySpecies(Species.SHUCKLE);
});
@@ -79,7 +78,7 @@ describe("Moves - Disable", () => {
}, 20000);
it("cannot disable STRUGGLE", async() => {
- game.override.enemyMoveset(Array(4).fill(Moves.STRUGGLE));
+ game.override.enemyMoveset([Moves.STRUGGLE]);
await game.classicMode.startBattle();
const playerMon = game.scene.getPlayerPokemon()!;
@@ -114,7 +113,7 @@ describe("Moves - Disable", () => {
}, 20000);
it("disables NATURE POWER, not the move invoked by it", async() => {
- game.override.enemyMoveset(Array(4).fill(Moves.NATURE_POWER));
+ game.override.enemyMoveset([Moves.NATURE_POWER]);
await game.classicMode.startBattle();
const enemyMon = game.scene.getEnemyPokemon()!;
diff --git a/src/test/moves/dragon_cheer.test.ts b/src/test/moves/dragon_cheer.test.ts
index 747d71bd000..0fc389ccfb6 100644
--- a/src/test/moves/dragon_cheer.test.ts
+++ b/src/test/moves/dragon_cheer.test.ts
@@ -4,7 +4,6 @@ import { Moves } from "#app/enums/moves";
import { Species } from "#app/enums/species";
import { Abilities } from "#enums/abilities";
import GameManager from "#test/utils/gameManager";
-import { SPLASH_ONLY } from "#test/utils/testUtils";
import Phaser from "phaser";
import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest";
@@ -28,7 +27,7 @@ describe("Moves - Dragon Cheer", () => {
game.override
.battleType("double")
.enemyAbility(Abilities.BALL_FETCH)
- .enemyMoveset(SPLASH_ONLY)
+ .enemyMoveset(Moves.SPLASH)
.enemyLevel(20)
.moveset([Moves.DRAGON_CHEER, Moves.TACKLE, Moves.SPLASH]);
});
diff --git a/src/test/moves/dragon_rage.test.ts b/src/test/moves/dragon_rage.test.ts
index 5da6e082ce5..cab8c3f808b 100644
--- a/src/test/moves/dragon_rage.test.ts
+++ b/src/test/moves/dragon_rage.test.ts
@@ -8,7 +8,6 @@ import { Abilities } from "#enums/abilities";
import { BattlerTagType } from "#enums/battler-tag-type";
import { Moves } from "#enums/moves";
import GameManager from "#test/utils/gameManager";
-import { SPLASH_ONLY } from "#test/utils/testUtils";
import Phaser from "phaser";
import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest";
@@ -42,7 +41,7 @@ describe("Moves - Dragon Rage", () => {
game.override.startingLevel(100);
game.override.enemySpecies(Species.SNORLAX);
- game.override.enemyMoveset(SPLASH_ONLY);
+ game.override.enemyMoveset(Moves.SPLASH);
game.override.enemyAbility(Abilities.BALL_FETCH);
game.override.enemyPassiveAbility(Abilities.BALL_FETCH);
game.override.enemyLevel(100);
diff --git a/src/test/moves/dragon_tail.test.ts b/src/test/moves/dragon_tail.test.ts
index 362383e2fe3..e1af29b2db1 100644
--- a/src/test/moves/dragon_tail.test.ts
+++ b/src/test/moves/dragon_tail.test.ts
@@ -9,7 +9,6 @@ import { Species } from "#enums/species";
import Phaser from "phaser";
import { afterEach, beforeAll, beforeEach, describe, expect, test, vi } from "vitest";
import GameManager from "../utils/gameManager";
-import { SPLASH_ONLY } from "../utils/testUtils";
const TIMEOUT = 20 * 1000;
@@ -32,7 +31,7 @@ describe("Moves - Dragon Tail", () => {
game.override.battleType("single")
.moveset([Moves.DRAGON_TAIL, Moves.SPLASH])
.enemySpecies(Species.WAILORD)
- .enemyMoveset(SPLASH_ONLY)
+ .enemyMoveset(Moves.SPLASH)
.startingLevel(5)
.enemyLevel(5);
@@ -82,7 +81,7 @@ describe("Moves - Dragon Tail", () => {
test(
"Double battles should proceed without crashing",
async () => {
- game.override.battleType("double").enemyMoveset(SPLASH_ONLY);
+ game.override.battleType("double").enemyMoveset(Moves.SPLASH);
game.override.moveset([Moves.DRAGON_TAIL, Moves.SPLASH, Moves.FLAMETHROWER])
.enemyAbility(Abilities.ROUGH_SKIN);
await game.startBattle([Species.DRATINI, Species.DRATINI, Species.WAILORD, Species.WAILORD]);
@@ -116,7 +115,7 @@ describe("Moves - Dragon Tail", () => {
test(
"Flee move redirection works",
async () => {
- game.override.battleType("double").enemyMoveset(SPLASH_ONLY);
+ game.override.battleType("double").enemyMoveset(Moves.SPLASH);
game.override.moveset([Moves.DRAGON_TAIL, Moves.SPLASH, Moves.FLAMETHROWER]);
game.override.enemyAbility(Abilities.ROUGH_SKIN);
await game.startBattle([Species.DRATINI, Species.DRATINI, Species.WAILORD, Species.WAILORD]);
diff --git a/src/test/moves/fake_out.test.ts b/src/test/moves/fake_out.test.ts
index ac09917daea..04d6216b952 100644
--- a/src/test/moves/fake_out.test.ts
+++ b/src/test/moves/fake_out.test.ts
@@ -3,7 +3,6 @@ import { Moves } from "#enums/moves";
import { Species } from "#enums/species";
import Phaser from "phaser";
import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest";
-import { SPLASH_ONLY } from "../utils/testUtils";
describe("Moves - Fake Out", () => {
let phaserGame: Phaser.Game;
@@ -26,7 +25,7 @@ describe("Moves - Fake Out", () => {
.enemySpecies(Species.CORVIKNIGHT)
.starterSpecies(Species.FEEBAS)
.moveset([Moves.FAKE_OUT, Moves.SPLASH])
- .enemyMoveset(SPLASH_ONLY)
+ .enemyMoveset(Moves.SPLASH)
.disableCrits();
});
diff --git a/src/test/moves/fillet_away.test.ts b/src/test/moves/fillet_away.test.ts
index a639a86c5c1..68ace42c2ec 100644
--- a/src/test/moves/fillet_away.test.ts
+++ b/src/test/moves/fillet_away.test.ts
@@ -4,7 +4,6 @@ import { Moves } from "#enums/moves";
import { Species } from "#enums/species";
import { Stat } from "#enums/stat";
import GameManager from "#test/utils/gameManager";
-import { SPLASH_ONLY } from "#test/utils/testUtils";
import Phaser from "phaser";
import { afterEach, beforeAll, beforeEach, describe, expect, test } from "vitest";
@@ -35,7 +34,7 @@ describe("Moves - FILLET AWAY", () => {
game.override.startingLevel(100);
game.override.enemyLevel(100);
game.override.moveset([Moves.FILLET_AWAY]);
- game.override.enemyMoveset(SPLASH_ONLY);
+ game.override.enemyMoveset(Moves.SPLASH);
});
//Bulbapedia Reference: https://bulbapedia.bulbagarden.net/wiki/fillet_away_(move)
diff --git a/src/test/moves/fissure.test.ts b/src/test/moves/fissure.test.ts
index 34612d1fb18..8689ce4079e 100644
--- a/src/test/moves/fissure.test.ts
+++ b/src/test/moves/fissure.test.ts
@@ -6,7 +6,6 @@ import { TurnEndPhase } from "#app/phases/turn-end-phase";
import { Abilities } from "#enums/abilities";
import { Moves } from "#enums/moves";
import GameManager from "#test/utils/gameManager";
-import { SPLASH_ONLY } from "#test/utils/testUtils";
import Phaser from "phaser";
import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest";
@@ -38,7 +37,7 @@ describe("Moves - Fissure", () => {
game.override.startingLevel(100);
game.override.enemySpecies(Species.SNORLAX);
- game.override.enemyMoveset(SPLASH_ONLY);
+ game.override.enemyMoveset(Moves.SPLASH);
game.override.enemyPassiveAbility(Abilities.BALL_FETCH);
game.override.enemyLevel(100);
diff --git a/src/test/moves/flame_burst.test.ts b/src/test/moves/flame_burst.test.ts
index 2777b8178b8..b2858af2b24 100644
--- a/src/test/moves/flame_burst.test.ts
+++ b/src/test/moves/flame_burst.test.ts
@@ -42,7 +42,7 @@ describe("Moves - Flame Burst", () => {
game.override.startingWave(4);
game.override.enemySpecies(Species.SHUCKLE);
game.override.enemyAbility(Abilities.BALL_FETCH);
- game.override.enemyMoveset(new Array(4).fill(Moves.SPLASH));
+ game.override.enemyMoveset([Moves.SPLASH]);
});
it("inflicts damage to the target's ally equal to 1/16 of its max HP", async () => {
diff --git a/src/test/moves/flower_shield.test.ts b/src/test/moves/flower_shield.test.ts
index ffe8ae995d3..f5fe8d532cc 100644
--- a/src/test/moves/flower_shield.test.ts
+++ b/src/test/moves/flower_shield.test.ts
@@ -7,7 +7,6 @@ import { Abilities } from "#enums/abilities";
import { Moves } from "#enums/moves";
import { Species } from "#enums/species";
import GameManager from "#test/utils/gameManager";
-import { SPLASH_ONLY } from "#test/utils/testUtils";
import Phaser from "phaser";
import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest";
@@ -31,7 +30,7 @@ describe("Moves - Flower Shield", () => {
game.override.enemyAbility(Abilities.NONE);
game.override.battleType("single");
game.override.moveset([Moves.FLOWER_SHIELD, Moves.SPLASH]);
- game.override.enemyMoveset(SPLASH_ONLY);
+ game.override.enemyMoveset(Moves.SPLASH);
});
it("raises DEF stat stage by 1 for all Grass-type Pokemon on the field by one stage - single battle", async () => {
diff --git a/src/test/moves/focus_punch.test.ts b/src/test/moves/focus_punch.test.ts
index 249647f0294..ca80c688169 100644
--- a/src/test/moves/focus_punch.test.ts
+++ b/src/test/moves/focus_punch.test.ts
@@ -7,7 +7,6 @@ import { Abilities } from "#enums/abilities";
import { Moves } from "#enums/moves";
import { Species } from "#enums/species";
import GameManager from "#test/utils/gameManager";
-import { SPLASH_ONLY } from "#test/utils/testUtils";
import Phaser from "phaser";
import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest";
@@ -35,7 +34,7 @@ describe("Moves - Focus Punch", () => {
.moveset([Moves.FOCUS_PUNCH])
.enemySpecies(Species.GROUDON)
.enemyAbility(Abilities.INSOMNIA)
- .enemyMoveset(SPLASH_ONLY)
+ .enemyMoveset(Moves.SPLASH)
.startingLevel(100)
.enemyLevel(100);
});
@@ -68,7 +67,7 @@ describe("Moves - Focus Punch", () => {
it(
"should fail if the user is hit",
async () => {
- game.override.enemyMoveset(Array(4).fill(Moves.TACKLE));
+ game.override.enemyMoveset([Moves.TACKLE]);
await game.startBattle([Species.CHARIZARD]);
@@ -95,7 +94,7 @@ describe("Moves - Focus Punch", () => {
it(
"should be cancelled if the user falls asleep mid-turn",
async () => {
- game.override.enemyMoveset(Array(4).fill(Moves.SPORE));
+ game.override.enemyMoveset([Moves.SPORE]);
await game.startBattle([Species.CHARIZARD]);
diff --git a/src/test/moves/foresight.test.ts b/src/test/moves/foresight.test.ts
index b856ec0f852..d58097691fd 100644
--- a/src/test/moves/foresight.test.ts
+++ b/src/test/moves/foresight.test.ts
@@ -4,7 +4,6 @@ import { MoveEffectPhase } from "#app/phases/move-effect-phase";
import GameManager from "#test/utils/gameManager";
import Phaser from "phaser";
import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest";
-import { SPLASH_ONLY } from "../utils/testUtils";
describe("Moves - Foresight", () => {
let phaserGame: Phaser.Game;
@@ -25,7 +24,7 @@ describe("Moves - Foresight", () => {
game.override
.disableCrits()
.enemySpecies(Species.GASTLY)
- .enemyMoveset(SPLASH_ONLY)
+ .enemyMoveset(Moves.SPLASH)
.enemyLevel(5)
.starterSpecies(Species.MAGIKARP)
.moveset([Moves.FORESIGHT, Moves.QUICK_ATTACK, Moves.MACH_PUNCH]);
@@ -55,7 +54,7 @@ describe("Moves - Foresight", () => {
});
it("should ignore target's evasiveness boosts", async () => {
- game.override.enemyMoveset(Array(4).fill(Moves.MINIMIZE));
+ game.override.enemyMoveset([Moves.MINIMIZE]);
await game.startBattle();
const pokemon = game.scene.getPlayerPokemon()!;
diff --git a/src/test/moves/freeze_dry.test.ts b/src/test/moves/freeze_dry.test.ts
index 445a432a812..ff9e2f07162 100644
--- a/src/test/moves/freeze_dry.test.ts
+++ b/src/test/moves/freeze_dry.test.ts
@@ -3,7 +3,6 @@ import { Abilities } from "#app/enums/abilities";
import { Moves } from "#app/enums/moves";
import { Species } from "#app/enums/species";
import GameManager from "#test/utils/gameManager";
-import { SPLASH_ONLY } from "#test/utils/testUtils";
import Phaser from "phaser";
import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest";
@@ -28,7 +27,7 @@ describe("Moves - Freeze-Dry", () => {
.battleType("single")
.enemySpecies(Species.MAGIKARP)
.enemyAbility(Abilities.BALL_FETCH)
- .enemyMoveset(SPLASH_ONLY)
+ .enemyMoveset(Moves.SPLASH)
.starterSpecies(Species.FEEBAS)
.ability(Abilities.BALL_FETCH)
.moveset([Moves.FREEZE_DRY]);
@@ -92,7 +91,7 @@ describe("Moves - Freeze-Dry", () => {
// enable once Electrify is implemented (and the interaction is fixed, as above)
it.todo("should deal 2x damage to water types under Electrify", async () => {
- game.override.enemyMoveset(Array(4).fill(Moves.ELECTRIFY));
+ game.override.enemyMoveset([Moves.ELECTRIFY]);
await game.classicMode.startBattle();
const enemy = game.scene.getEnemyPokemon()!;
diff --git a/src/test/moves/freezy_frost.test.ts b/src/test/moves/freezy_frost.test.ts
index ae42d5b6dc6..05c61aab49a 100644
--- a/src/test/moves/freezy_frost.test.ts
+++ b/src/test/moves/freezy_frost.test.ts
@@ -5,7 +5,6 @@ import { Moves } from "#enums/moves";
import { Species } from "#enums/species";
import Phaser from "phaser";
import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest";
-import { SPLASH_ONLY } from "#test/utils/testUtils";
import { allMoves } from "#app/data/move";
import { TurnInitPhase } from "#app/phases/turn-init-phase";
@@ -28,7 +27,7 @@ describe("Moves - Freezy Frost", () => {
game.override.enemySpecies(Species.RATTATA);
game.override.enemyLevel(100);
- game.override.enemyMoveset(SPLASH_ONLY);
+ game.override.enemyMoveset(Moves.SPLASH);
game.override.enemyAbility(Abilities.NONE);
game.override.startingLevel(100);
diff --git a/src/test/moves/gastro_acid.test.ts b/src/test/moves/gastro_acid.test.ts
index 67fd3464cf9..cfc458a908f 100644
--- a/src/test/moves/gastro_acid.test.ts
+++ b/src/test/moves/gastro_acid.test.ts
@@ -4,7 +4,6 @@ import { Moves } from "#app/enums/moves";
import { Species } from "#app/enums/species";
import { MoveResult } from "#app/field/pokemon";
import GameManager from "#test/utils/gameManager";
-import { SPLASH_ONLY } from "#test/utils/testUtils";
import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest";
const TIMEOUT = 20 * 1000;
@@ -31,7 +30,7 @@ describe("Moves - Gastro Acid", () => {
game.override.ability(Abilities.NONE);
game.override.moveset([Moves.GASTRO_ACID, Moves.WATER_GUN, Moves.SPLASH, Moves.CORE_ENFORCER]);
game.override.enemySpecies(Species.BIDOOF);
- game.override.enemyMoveset(SPLASH_ONLY);
+ game.override.enemyMoveset(Moves.SPLASH);
game.override.enemyAbility(Abilities.WATER_ABSORB);
});
diff --git a/src/test/moves/gigaton_hammer.test.ts b/src/test/moves/gigaton_hammer.test.ts
index 0162375cdb2..b0ab06fdeb5 100644
--- a/src/test/moves/gigaton_hammer.test.ts
+++ b/src/test/moves/gigaton_hammer.test.ts
@@ -4,7 +4,6 @@ import { Moves } from "#enums/moves";
import { Species } from "#enums/species";
import Phaser from "phaser";
import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest";
-import { SPLASH_ONLY } from "../utils/testUtils";
describe("Moves - Gigaton Hammer", () => {
let phaserGame: Phaser.Game;
@@ -29,7 +28,7 @@ describe("Moves - Gigaton Hammer", () => {
.moveset([Moves.GIGATON_HAMMER])
.startingLevel(10)
.enemyLevel(100)
- .enemyMoveset(SPLASH_ONLY)
+ .enemyMoveset(Moves.SPLASH)
.disableCrits();
});
diff --git a/src/test/moves/glaive_rush.test.ts b/src/test/moves/glaive_rush.test.ts
index 5867ef751b8..9eed6868432 100644
--- a/src/test/moves/glaive_rush.test.ts
+++ b/src/test/moves/glaive_rush.test.ts
@@ -29,7 +29,7 @@ describe("Moves - Glaive Rush", () => {
.disableCrits()
.enemySpecies(Species.MAGIKARP)
.enemyAbility(Abilities.BALL_FETCH)
- .enemyMoveset(Array(4).fill(Moves.GLAIVE_RUSH))
+ .enemyMoveset([Moves.GLAIVE_RUSH])
.starterSpecies(Species.KLINK)
.ability(Abilities.BALL_FETCH)
.moveset([Moves.SHADOW_SNEAK, Moves.AVALANCHE, Moves.SPLASH, Moves.GLAIVE_RUSH]);
@@ -67,7 +67,7 @@ describe("Moves - Glaive Rush", () => {
it("interacts properly with multi-lens", async () => {
game.override
.startingHeldItems([{ name: "MULTI_LENS", count: 2 }])
- .enemyMoveset(Array(4).fill(Moves.AVALANCHE));
+ .enemyMoveset([Moves.AVALANCHE]);
await game.classicMode.startBattle();
const player = game.scene.getPlayerPokemon()!;
@@ -88,7 +88,7 @@ describe("Moves - Glaive Rush", () => {
}, TIMEOUT);
it("secondary effects only last until next move", async () => {
- game.override.enemyMoveset(Array(4).fill(Moves.SHADOW_SNEAK));
+ game.override.enemyMoveset([Moves.SHADOW_SNEAK]);
await game.classicMode.startBattle();
const player = game.scene.getPlayerPokemon()!;
@@ -115,7 +115,7 @@ describe("Moves - Glaive Rush", () => {
it("secondary effects are removed upon switching", async () => {
game.override
- .enemyMoveset(Array(4).fill(Moves.SHADOW_SNEAK))
+ .enemyMoveset([Moves.SHADOW_SNEAK])
.starterSpecies(0);
await game.classicMode.startBattle([Species.KLINK, Species.FEEBAS]);
@@ -152,7 +152,7 @@ describe("Moves - Glaive Rush", () => {
game.move.select(Moves.SHADOW_SNEAK);
await game.phaseInterceptor.to("TurnEndPhase");
- game.override.enemyMoveset(Array(4).fill(Moves.SPLASH));
+ game.override.enemyMoveset([Moves.SPLASH]);
const damagedHP1 = 1000 - enemy.hp;
enemy.hp = 1000;
diff --git a/src/test/moves/growth.test.ts b/src/test/moves/growth.test.ts
index defe5e26f41..a66e4ec6719 100644
--- a/src/test/moves/growth.test.ts
+++ b/src/test/moves/growth.test.ts
@@ -5,7 +5,6 @@ import { Moves } from "#enums/moves";
import { Species } from "#enums/species";
import Phaser from "phaser";
import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest";
-import { SPLASH_ONLY } from "../utils/testUtils";
import { EnemyCommandPhase } from "#app/phases/enemy-command-phase";
import { TurnInitPhase } from "#app/phases/turn-init-phase";
@@ -29,7 +28,7 @@ describe("Moves - Growth", () => {
game.override.enemyAbility(Abilities.MOXIE);
game.override.ability(Abilities.INSOMNIA);
game.override.moveset([ Moves.GROWTH ]);
- game.override.enemyMoveset(SPLASH_ONLY);
+ game.override.enemyMoveset(Moves.SPLASH);
});
it("should raise SPATK stat stage by 1", async() => {
diff --git a/src/test/moves/guard_split.test.ts b/src/test/moves/guard_split.test.ts
index f95d09f726c..36be82ba5e4 100644
--- a/src/test/moves/guard_split.test.ts
+++ b/src/test/moves/guard_split.test.ts
@@ -6,7 +6,6 @@ import { TurnEndPhase } from "#app/phases/turn-end-phase";
import { Moves } from "#enums/moves";
import { Stat } from "#enums/stat";
import { Abilities } from "#enums/abilities";
-import { SPLASH_ONLY } from "../utils/testUtils";
describe("Moves - Guard Split", () => {
let phaserGame: Phaser.Game;
@@ -34,7 +33,7 @@ describe("Moves - Guard Split", () => {
});
it("should average the user's DEF and SPDEF stats with those of the target", async () => {
- game.override.enemyMoveset(SPLASH_ONLY);
+ game.override.enemyMoveset(Moves.SPLASH);
await game.startBattle([
Species.INDEEDEE
]);
@@ -56,7 +55,7 @@ describe("Moves - Guard Split", () => {
}, 20000);
it("should be idempotent", async () => {
- game.override.enemyMoveset(new Array(4).fill(Moves.GUARD_SPLIT));
+ game.override.enemyMoveset([Moves.GUARD_SPLIT]);
await game.startBattle([
Species.INDEEDEE
]);
diff --git a/src/test/moves/guard_swap.test.ts b/src/test/moves/guard_swap.test.ts
index 407d475de09..a27afaaa7ba 100644
--- a/src/test/moves/guard_swap.test.ts
+++ b/src/test/moves/guard_swap.test.ts
@@ -27,7 +27,7 @@ describe("Moves - Guard Swap", () => {
game.override
.battleType("single")
.enemyAbility(Abilities.BALL_FETCH)
- .enemyMoveset(new Array(4).fill(Moves.SHELL_SMASH))
+ .enemyMoveset([Moves.SHELL_SMASH])
.enemySpecies(Species.MEW)
.enemyLevel(200)
.moveset([ Moves.GUARD_SWAP ])
diff --git a/src/test/moves/hard_press.test.ts b/src/test/moves/hard_press.test.ts
index 70c78490269..5d2e4e5b145 100644
--- a/src/test/moves/hard_press.test.ts
+++ b/src/test/moves/hard_press.test.ts
@@ -4,7 +4,6 @@ import { Abilities } from "#enums/abilities";
import { Moves } from "#enums/moves";
import { Species } from "#enums/species";
import GameManager from "#test/utils/gameManager";
-import { SPLASH_ONLY } from "#test/utils/testUtils";
import Phaser from "phaser";
import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest";
@@ -30,7 +29,7 @@ describe("Moves - Hard Press", () => {
game.override.ability(Abilities.BALL_FETCH);
game.override.enemySpecies(Species.MUNCHLAX);
game.override.enemyAbility(Abilities.BALL_FETCH);
- game.override.enemyMoveset(SPLASH_ONLY);
+ game.override.enemyMoveset(Moves.SPLASH);
game.override.moveset([Moves.HARD_PRESS]);
vi.spyOn(moveToCheck, "calculateBattlePower");
});
diff --git a/src/test/moves/haze.test.ts b/src/test/moves/haze.test.ts
index 42081ce74e8..211c1a41409 100644
--- a/src/test/moves/haze.test.ts
+++ b/src/test/moves/haze.test.ts
@@ -5,7 +5,6 @@ import { Moves } from "#enums/moves";
import { Species } from "#enums/species";
import Phaser from "phaser";
import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest";
-import { SPLASH_ONLY } from "#test/utils/testUtils";
import { TurnInitPhase } from "#app/phases/turn-init-phase";
describe("Moves - Haze", () => {
@@ -28,7 +27,7 @@ describe("Moves - Haze", () => {
game.override.enemySpecies(Species.RATTATA);
game.override.enemyLevel(100);
- game.override.enemyMoveset(SPLASH_ONLY);
+ game.override.enemyMoveset(Moves.SPLASH);
game.override.enemyAbility(Abilities.NONE);
game.override.startingLevel(100);
diff --git a/src/test/moves/hyper_beam.test.ts b/src/test/moves/hyper_beam.test.ts
index 1280d8b429a..7aa2dbfec2b 100644
--- a/src/test/moves/hyper_beam.test.ts
+++ b/src/test/moves/hyper_beam.test.ts
@@ -32,7 +32,7 @@ describe("Moves - Hyper Beam", () => {
game.override.ability(Abilities.BALL_FETCH);
game.override.enemySpecies(Species.SNORLAX);
game.override.enemyAbility(Abilities.BALL_FETCH);
- game.override.enemyMoveset(Array(4).fill(Moves.SPLASH));
+ game.override.enemyMoveset([Moves.SPLASH]);
game.override.enemyLevel(100);
game.override.moveset([Moves.HYPER_BEAM, Moves.TACKLE]);
diff --git a/src/test/moves/jaw_lock.test.ts b/src/test/moves/jaw_lock.test.ts
index 42f7a244977..75fd6f0ff32 100644
--- a/src/test/moves/jaw_lock.test.ts
+++ b/src/test/moves/jaw_lock.test.ts
@@ -6,7 +6,6 @@ import { FaintPhase } from "#app/phases/faint-phase";
import { MoveEffectPhase } from "#app/phases/move-effect-phase";
import { TurnEndPhase } from "#app/phases/turn-end-phase";
import GameManager from "#app/test/utils/gameManager";
-import { SPLASH_ONLY } from "#app/test/utils/testUtils";
import { Moves } from "#enums/moves";
import { Species } from "#enums/species";
import Phaser from "phaser";
@@ -35,7 +34,7 @@ describe("Moves - Jaw Lock", () => {
.battleType("single")
.enemySpecies(Species.SNORLAX)
.enemyAbility(Abilities.INSOMNIA)
- .enemyMoveset(SPLASH_ONLY)
+ .enemyMoveset(Moves.SPLASH)
.moveset([Moves.JAW_LOCK, Moves.SPLASH])
.startingLevel(100)
.enemyLevel(100)
@@ -153,7 +152,7 @@ describe("Moves - Jaw Lock", () => {
it(
"should not trap either pokemon if the target is protected",
async () => {
- game.override.enemyMoveset(Array(4).fill(Moves.PROTECT));
+ game.override.enemyMoveset([Moves.PROTECT]);
await game.startBattle([Species.BULBASAUR]);
diff --git a/src/test/moves/lash_out.test.ts b/src/test/moves/lash_out.test.ts
index 74d9fcd66c0..8c414832f36 100644
--- a/src/test/moves/lash_out.test.ts
+++ b/src/test/moves/lash_out.test.ts
@@ -30,7 +30,7 @@ describe("Moves - Lash Out", () => {
.disableCrits()
.enemySpecies(Species.MAGIKARP)
.enemyAbility(Abilities.FUR_COAT)
- .enemyMoveset(Array(4).fill(Moves.GROWL))
+ .enemyMoveset([Moves.GROWL])
.startingLevel(10)
.enemyLevel(10)
.starterSpecies(Species.FEEBAS)
diff --git a/src/test/moves/lucky_chant.test.ts b/src/test/moves/lucky_chant.test.ts
index 7d5bfe02476..57e5ff80f1d 100644
--- a/src/test/moves/lucky_chant.test.ts
+++ b/src/test/moves/lucky_chant.test.ts
@@ -31,7 +31,7 @@ describe("Moves - Lucky Chant", () => {
.moveset([Moves.LUCKY_CHANT, Moves.SPLASH, Moves.FOLLOW_ME])
.enemySpecies(Species.SNORLAX)
.enemyAbility(Abilities.INSOMNIA)
- .enemyMoveset(Array(4).fill(Moves.FLOWER_TRICK))
+ .enemyMoveset([Moves.FLOWER_TRICK])
.startingLevel(100)
.enemyLevel(100);
});
@@ -87,7 +87,7 @@ describe("Moves - Lucky Chant", () => {
it(
"should prevent critical hits from field effects",
async () => {
- game.override.enemyMoveset(Array(4).fill(Moves.TACKLE));
+ game.override.enemyMoveset([Moves.TACKLE]);
await game.startBattle([Species.CHARIZARD]);
diff --git a/src/test/moves/lunar_blessing.test.ts b/src/test/moves/lunar_blessing.test.ts
index 92428c39029..6a104762f4d 100644
--- a/src/test/moves/lunar_blessing.test.ts
+++ b/src/test/moves/lunar_blessing.test.ts
@@ -4,7 +4,6 @@ import { Abilities } from "#enums/abilities";
import { Moves } from "#enums/moves";
import { Species } from "#enums/species";
import GameManager from "#test/utils/gameManager";
-import { SPLASH_ONLY } from "#test/utils/testUtils";
import Phaser from "phaser";
import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest";
@@ -26,7 +25,7 @@ describe("Moves - Lunar Blessing", () => {
game.override.battleType("double");
game.override.enemySpecies(Species.SHUCKLE);
- game.override.enemyMoveset(SPLASH_ONLY);
+ game.override.enemyMoveset(Moves.SPLASH);
game.override.enemyAbility(Abilities.BALL_FETCH);
game.override.moveset([Moves.LUNAR_BLESSING, Moves.SPLASH]);
diff --git a/src/test/moves/make_it_rain.test.ts b/src/test/moves/make_it_rain.test.ts
index e41472d7561..5ac35168f92 100644
--- a/src/test/moves/make_it_rain.test.ts
+++ b/src/test/moves/make_it_rain.test.ts
@@ -5,7 +5,6 @@ import { Species } from "#enums/species";
import GameManager from "#test/utils/gameManager";
import Phaser from "phaser";
import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest";
-import { SPLASH_ONLY } from "#test/utils/testUtils";
import { MoveEndPhase } from "#app/phases/move-end-phase";
import { StatStageChangePhase } from "#app/phases/stat-stage-change-phase";
@@ -31,7 +30,7 @@ describe("Moves - Make It Rain", () => {
game.override.moveset([Moves.MAKE_IT_RAIN, Moves.SPLASH]);
game.override.enemySpecies(Species.SNORLAX);
game.override.enemyAbility(Abilities.INSOMNIA);
- game.override.enemyMoveset(SPLASH_ONLY);
+ game.override.enemyMoveset(Moves.SPLASH);
game.override.startingLevel(100);
game.override.enemyLevel(100);
});
diff --git a/src/test/moves/mat_block.test.ts b/src/test/moves/mat_block.test.ts
index 4a95985eb92..b759f49bf98 100644
--- a/src/test/moves/mat_block.test.ts
+++ b/src/test/moves/mat_block.test.ts
@@ -33,7 +33,7 @@ describe("Moves - Mat Block", () => {
game.override.moveset([Moves.MAT_BLOCK, Moves.SPLASH]);
game.override.enemySpecies(Species.SNORLAX);
- game.override.enemyMoveset(Array(4).fill(Moves.TACKLE));
+ game.override.enemyMoveset([Moves.TACKLE]);
game.override.enemyAbility(Abilities.INSOMNIA);
game.override.startingLevel(100);
@@ -62,7 +62,7 @@ describe("Moves - Mat Block", () => {
test(
"should not protect the user and allies from status moves",
async () => {
- game.override.enemyMoveset(Array(4).fill(Moves.GROWL));
+ game.override.enemyMoveset([Moves.GROWL]);
await game.startBattle([Species.CHARIZARD, Species.BLASTOISE]);
diff --git a/src/test/moves/miracle_eye.test.ts b/src/test/moves/miracle_eye.test.ts
index d6b21a5dc2f..0528b509c82 100644
--- a/src/test/moves/miracle_eye.test.ts
+++ b/src/test/moves/miracle_eye.test.ts
@@ -5,7 +5,6 @@ import { MoveEffectPhase } from "#app/phases/move-effect-phase";
import GameManager from "#test/utils/gameManager";
import Phaser from "phaser";
import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest";
-import { SPLASH_ONLY } from "../utils/testUtils";
describe("Moves - Miracle Eye", () => {
let phaserGame: Phaser.Game;
@@ -26,7 +25,7 @@ describe("Moves - Miracle Eye", () => {
game.override
.disableCrits()
.enemySpecies(Species.UMBREON)
- .enemyMoveset(SPLASH_ONLY)
+ .enemyMoveset(Moves.SPLASH)
.enemyLevel(5)
.starterSpecies(Species.MAGIKARP)
.moveset([Moves.MIRACLE_EYE, Moves.CONFUSION]);
diff --git a/src/test/moves/multi_target.test.ts b/src/test/moves/multi_target.test.ts
index 16ccd5519b1..5e830f23fc7 100644
--- a/src/test/moves/multi_target.test.ts
+++ b/src/test/moves/multi_target.test.ts
@@ -4,7 +4,6 @@ import { Species } from "#app/enums/species";
import * as Utils from "#app/utils";
import { Moves } from "#enums/moves";
import GameManager from "#test/utils/gameManager";
-import { SPLASH_ONLY } from "#test/utils/testUtils";
import Phaser from "phaser";
import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest";
@@ -32,7 +31,7 @@ describe("Multi-target damage reduction", () => {
.enemyLevel(100)
.startingLevel(100)
.enemySpecies(Species.POLIWAG)
- .enemyMoveset(SPLASH_ONLY)
+ .enemyMoveset(Moves.SPLASH)
.enemyAbility(Abilities.BALL_FETCH)
.moveset([Moves.TACKLE, Moves.DAZZLING_GLEAM, Moves.EARTHQUAKE, Moves.SPLASH])
.ability(Abilities.BALL_FETCH);
diff --git a/src/test/moves/octolock.test.ts b/src/test/moves/octolock.test.ts
index c86906ea240..7618b08e9fc 100644
--- a/src/test/moves/octolock.test.ts
+++ b/src/test/moves/octolock.test.ts
@@ -7,7 +7,6 @@ import { Abilities } from "#enums/abilities";
import { Moves } from "#enums/moves";
import { Species } from "#enums/species";
import GameManager from "#test/utils/gameManager";
-import { SPLASH_ONLY } from "#test/utils/testUtils";
import Phaser from "phaser";
import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest";
@@ -30,7 +29,7 @@ describe("Moves - Octolock", () => {
game.override.battleType("single")
.enemySpecies(Species.RATTATA)
- .enemyMoveset(SPLASH_ONLY)
+ .enemyMoveset(Moves.SPLASH)
.enemyAbility(Abilities.BALL_FETCH)
.startingLevel(2000)
.moveset([ Moves.OCTOLOCK, Moves.SPLASH ])
diff --git a/src/test/moves/parting_shot.test.ts b/src/test/moves/parting_shot.test.ts
index d9535ca6482..52cfaf98111 100644
--- a/src/test/moves/parting_shot.test.ts
+++ b/src/test/moves/parting_shot.test.ts
@@ -9,7 +9,6 @@ import { BerryPhase } from "#app/phases/berry-phase";
import { FaintPhase } from "#app/phases/faint-phase";
import { MessagePhase } from "#app/phases/message-phase";
import { TurnInitPhase } from "#app/phases/turn-init-phase";
-import { SPLASH_ONLY } from "../utils/testUtils";
const TIMEOUT = 20 * 1000;
@@ -31,7 +30,7 @@ describe("Moves - Parting Shot", () => {
game = new GameManager(phaserGame);
game.override.battleType("single");
game.override.moveset([Moves.PARTING_SHOT, Moves.SPLASH]);
- game.override.enemyMoveset(SPLASH_ONLY);
+ game.override.enemyMoveset(Moves.SPLASH);
game.override.startingLevel(5);
game.override.enemyLevel(5);
@@ -125,7 +124,7 @@ describe("Moves - Parting Shot", () => {
game.override
.enemySpecies(Species.ALTARIA)
.enemyAbility(Abilities.NONE)
- .enemyMoveset(Array(4).fill(Moves.MIST));
+ .enemyMoveset([Moves.MIST]);
await game.startBattle([Species.SNORLAX, Species.MEOWTH]);
const enemyPokemon = game.scene.getEnemyPokemon()!;
diff --git a/src/test/moves/power_shift.test.ts b/src/test/moves/power_shift.test.ts
new file mode 100644
index 00000000000..3fda315193e
--- /dev/null
+++ b/src/test/moves/power_shift.test.ts
@@ -0,0 +1,63 @@
+import { Moves } from "#app/enums/moves";
+import { Species } from "#app/enums/species";
+import { Stat } from "#app/enums/stat";
+import { Abilities } from "#enums/abilities";
+import GameManager from "#test/utils/gameManager";
+import Phaser from "phaser";
+import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest";
+
+describe("Moves - Power Shift", () => {
+ let phaserGame: Phaser.Game;
+ let game: GameManager;
+ const TIMEOUT = 20 * 1000;
+
+ beforeAll(() => {
+ phaserGame = new Phaser.Game({
+ type: Phaser.HEADLESS,
+ });
+ });
+
+ afterEach(() => {
+ game.phaseInterceptor.restoreOg();
+ });
+
+ beforeEach(() => {
+ game = new GameManager(phaserGame);
+ game.override
+ .moveset([Moves.POWER_SHIFT, Moves.BULK_UP])
+ .battleType("single")
+ .ability(Abilities.BALL_FETCH)
+ .enemyAbility(Abilities.BALL_FETCH)
+ .enemyMoveset(Moves.SPLASH);
+ });
+
+ it("switches the user's raw Attack stat with its raw Defense stat", async () => {
+ await game.classicMode.startBattle([Species.MAGIKARP]);
+
+ const playerPokemon = game.scene.getPlayerPokemon()!;
+
+ playerPokemon.setStat(Stat.ATK, 10, false);
+ playerPokemon.setStat(Stat.DEF, 20, false);
+
+ game.move.select(Moves.BULK_UP);
+
+ await game.phaseInterceptor.to("TurnEndPhase");
+
+ // Stat stages are increased by 1
+ expect(playerPokemon.getStatStageMultiplier(Stat.ATK)).toBe(1.5);
+ expect(playerPokemon.getStatStageMultiplier(Stat.DEF)).toBe(1.5);
+
+ await game.toNextTurn();
+
+ game.move.select(Moves.POWER_SHIFT);
+
+ await game.phaseInterceptor.to("TurnEndPhase");
+
+ // Effective stats are calculated correctly
+ expect(playerPokemon.getEffectiveStat(Stat.ATK)).toBe(30);
+ expect(playerPokemon.getEffectiveStat(Stat.DEF)).toBe(15);
+ // Raw stats are swapped
+ expect(playerPokemon.getStat(Stat.ATK, false)).toBe(20);
+ expect(playerPokemon.getStat(Stat.DEF, false)).toBe(10);
+ }, TIMEOUT);
+});
diff --git a/src/test/moves/power_split.test.ts b/src/test/moves/power_split.test.ts
index a532a90a54d..aaf34541567 100644
--- a/src/test/moves/power_split.test.ts
+++ b/src/test/moves/power_split.test.ts
@@ -6,7 +6,6 @@ import { TurnEndPhase } from "#app/phases/turn-end-phase";
import { Moves } from "#enums/moves";
import { Stat } from "#enums/stat";
import { Abilities } from "#enums/abilities";
-import { SPLASH_ONLY } from "../utils/testUtils";
describe("Moves - Power Split", () => {
let phaserGame: Phaser.Game;
@@ -34,7 +33,7 @@ describe("Moves - Power Split", () => {
});
it("should average the user's ATK and SPATK stats with those of the target", async () => {
- game.override.enemyMoveset(SPLASH_ONLY);
+ game.override.enemyMoveset(Moves.SPLASH);
await game.startBattle([
Species.INDEEDEE
]);
@@ -56,7 +55,7 @@ describe("Moves - Power Split", () => {
}, 20000);
it("should be idempotent", async () => {
- game.override.enemyMoveset(new Array(4).fill(Moves.POWER_SPLIT));
+ game.override.enemyMoveset([Moves.POWER_SPLIT]);
await game.startBattle([
Species.INDEEDEE
]);
diff --git a/src/test/moves/power_swap.test.ts b/src/test/moves/power_swap.test.ts
index f1efeaa3af3..a3d4bfca19a 100644
--- a/src/test/moves/power_swap.test.ts
+++ b/src/test/moves/power_swap.test.ts
@@ -27,7 +27,7 @@ describe("Moves - Power Swap", () => {
game.override
.battleType("single")
.enemyAbility(Abilities.BALL_FETCH)
- .enemyMoveset(new Array(4).fill(Moves.SHELL_SMASH))
+ .enemyMoveset([Moves.SHELL_SMASH])
.enemySpecies(Species.MEW)
.enemyLevel(200)
.moveset([ Moves.POWER_SWAP ])
diff --git a/src/test/moves/protect.test.ts b/src/test/moves/protect.test.ts
index 83cd088aa47..24bbcbb9d34 100644
--- a/src/test/moves/protect.test.ts
+++ b/src/test/moves/protect.test.ts
@@ -35,7 +35,7 @@ describe("Moves - Protect", () => {
game.override.enemySpecies(Species.SNORLAX);
game.override.enemyAbility(Abilities.INSOMNIA);
- game.override.enemyMoveset(Array(4).fill(Moves.TACKLE));
+ game.override.enemyMoveset([Moves.TACKLE]);
game.override.startingLevel(100);
game.override.enemyLevel(100);
@@ -59,7 +59,7 @@ describe("Moves - Protect", () => {
test(
"should prevent secondary effects from the opponent's attack",
async () => {
- game.override.enemyMoveset(Array(4).fill(Moves.CEASELESS_EDGE));
+ game.override.enemyMoveset([Moves.CEASELESS_EDGE]);
vi.spyOn(allMoves[Moves.CEASELESS_EDGE], "accuracy", "get").mockReturnValue(100);
await game.classicMode.startBattle([Species.CHARIZARD]);
@@ -78,7 +78,7 @@ describe("Moves - Protect", () => {
test(
"should protect the user from status moves",
async () => {
- game.override.enemyMoveset(Array(4).fill(Moves.CHARM));
+ game.override.enemyMoveset([Moves.CHARM]);
await game.classicMode.startBattle([Species.CHARIZARD]);
@@ -95,7 +95,7 @@ describe("Moves - Protect", () => {
test(
"should stop subsequent hits of a multi-hit move",
async () => {
- game.override.enemyMoveset(Array(4).fill(Moves.TACHYON_CUTTER));
+ game.override.enemyMoveset([Moves.TACHYON_CUTTER]);
await game.classicMode.startBattle([Species.CHARIZARD]);
@@ -114,7 +114,7 @@ describe("Moves - Protect", () => {
test(
"should fail if the user is the last to move in the turn",
async () => {
- game.override.enemyMoveset(Array(4).fill(Moves.PROTECT));
+ game.override.enemyMoveset([Moves.PROTECT]);
await game.classicMode.startBattle([Species.CHARIZARD]);
diff --git a/src/test/moves/quick_guard.test.ts b/src/test/moves/quick_guard.test.ts
index 5f4af40eb71..9ab0fe1509c 100644
--- a/src/test/moves/quick_guard.test.ts
+++ b/src/test/moves/quick_guard.test.ts
@@ -32,7 +32,7 @@ describe("Moves - Quick Guard", () => {
game.override.moveset([Moves.QUICK_GUARD, Moves.SPLASH, Moves.FOLLOW_ME]);
game.override.enemySpecies(Species.SNORLAX);
- game.override.enemyMoveset(Array(4).fill(Moves.QUICK_ATTACK));
+ game.override.enemyMoveset([Moves.QUICK_ATTACK]);
game.override.enemyAbility(Abilities.INSOMNIA);
game.override.startingLevel(100);
@@ -59,7 +59,7 @@ describe("Moves - Quick Guard", () => {
"should protect the user and allies from Prankster-boosted moves",
async () => {
game.override.enemyAbility(Abilities.PRANKSTER);
- game.override.enemyMoveset(Array(4).fill(Moves.GROWL));
+ game.override.enemyMoveset([Moves.GROWL]);
await game.classicMode.startBattle([Species.CHARIZARD, Species.BLASTOISE]);
@@ -77,7 +77,7 @@ describe("Moves - Quick Guard", () => {
test(
"should stop subsequent hits of a multi-hit priority move",
async () => {
- game.override.enemyMoveset(Array(4).fill(Moves.WATER_SHURIKEN));
+ game.override.enemyMoveset([Moves.WATER_SHURIKEN]);
await game.classicMode.startBattle([Species.CHARIZARD, Species.BLASTOISE]);
@@ -98,7 +98,7 @@ describe("Moves - Quick Guard", () => {
"should fail if the user is the last to move in the turn",
async () => {
game.override.battleType("single");
- game.override.enemyMoveset(Array(4).fill(Moves.QUICK_GUARD));
+ game.override.enemyMoveset([Moves.QUICK_GUARD]);
await game.classicMode.startBattle([Species.CHARIZARD]);
diff --git a/src/test/moves/rollout.test.ts b/src/test/moves/rollout.test.ts
index ddb0b22e642..c08535a61df 100644
--- a/src/test/moves/rollout.test.ts
+++ b/src/test/moves/rollout.test.ts
@@ -4,7 +4,6 @@ import { Abilities } from "#enums/abilities";
import { Moves } from "#enums/moves";
import { Species } from "#enums/species";
import GameManager from "#test/utils/gameManager";
-import { SPLASH_ONLY } from "#test/utils/testUtils";
import Phaser from "phaser";
import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest";
@@ -32,7 +31,7 @@ describe("Moves - Rollout", () => {
game.override.enemyAbility(Abilities.BALL_FETCH);
game.override.startingLevel(100);
game.override.enemyLevel(100);
- game.override.enemyMoveset(SPLASH_ONLY);
+ game.override.enemyMoveset(Moves.SPLASH);
});
it("should double it's dmg on sequential uses but reset after 5", async () => {
diff --git a/src/test/moves/safeguard.test.ts b/src/test/moves/safeguard.test.ts
index 94a7aa6031e..2caf698a73a 100644
--- a/src/test/moves/safeguard.test.ts
+++ b/src/test/moves/safeguard.test.ts
@@ -29,7 +29,7 @@ describe("Moves - Safeguard", () => {
game.override
.battleType("single")
.enemySpecies(Species.DRATINI)
- .enemyMoveset(Array(4).fill(Moves.SAFEGUARD))
+ .enemyMoveset([Moves.SAFEGUARD])
.enemyAbility(Abilities.BALL_FETCH)
.enemyLevel(5)
.starterSpecies(Species.DRATINI)
@@ -38,7 +38,7 @@ describe("Moves - Safeguard", () => {
});
it("protects from damaging moves with additional effects", async () => {
- await game.startBattle();
+ await game.classicMode.startBattle();
const enemy = game.scene.getEnemyPokemon()!;
game.move.select(Moves.NUZZLE);
@@ -49,7 +49,7 @@ describe("Moves - Safeguard", () => {
}, TIMEOUT);
it("protects from status moves", async () => {
- await game.startBattle();
+ await game.classicMode.startBattle();
const enemyPokemon = game.scene.getEnemyPokemon()!;
game.move.select(Moves.SPORE);
@@ -61,7 +61,7 @@ describe("Moves - Safeguard", () => {
it("protects from confusion", async () => {
game.override.moveset([Moves.CONFUSE_RAY]);
- await game.startBattle();
+ await game.classicMode.startBattle();
const enemyPokemon = game.scene.getEnemyPokemon()!;
game.move.select(Moves.CONFUSE_RAY);
@@ -74,7 +74,7 @@ describe("Moves - Safeguard", () => {
it("protects ally from status", async () => {
game.override.battleType("double");
- await game.startBattle();
+ await game.classicMode.startBattle();
game.move.select(Moves.SPORE, 0, BattlerIndex.ENEMY_2);
game.move.select(Moves.NUZZLE, 1, BattlerIndex.ENEMY_2);
@@ -90,7 +90,7 @@ describe("Moves - Safeguard", () => {
}, TIMEOUT);
it("protects from Yawn", async () => {
- await game.startBattle();
+ await game.classicMode.startBattle();
const enemyPokemon = game.scene.getEnemyPokemon()!;
game.move.select(Moves.YAWN);
@@ -101,7 +101,7 @@ describe("Moves - Safeguard", () => {
}, TIMEOUT);
it("doesn't protect from already existing Yawn", async () => {
- await game.startBattle();
+ await game.classicMode.startBattle();
const enemyPokemon = game.scene.getEnemyPokemon()!;
game.move.select(Moves.YAWN);
@@ -116,17 +116,22 @@ describe("Moves - Safeguard", () => {
it("doesn't protect from self-inflicted via Rest or Flame Orb", async () => {
game.override.enemyHeldItems([{name: "FLAME_ORB"}]);
- await game.startBattle();
+ await game.classicMode.startBattle();
const enemyPokemon = game.scene.getEnemyPokemon()!;
game.move.select(Moves.SPLASH);
await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]);
await game.toNextTurn();
+ enemyPokemon.damageAndUpdate(1);
expect(enemyPokemon.status?.effect).toEqual(StatusEffect.BURN);
- game.override.enemyMoveset(Array(4).fill(Moves.REST));
+ game.override.enemyMoveset([Moves.REST]);
+ // Force the moveset to update mid-battle
+ // TODO: Remove after enemy AI rework is in
+ enemyPokemon.getMoveset();
game.move.select(Moves.SPLASH);
+ enemyPokemon.damageAndUpdate(1);
await game.toNextTurn();
expect(enemyPokemon.status?.effect).toEqual(StatusEffect.SLEEP);
@@ -135,13 +140,13 @@ describe("Moves - Safeguard", () => {
it("protects from ability-inflicted status", async () => {
game.override.ability(Abilities.STATIC);
vi.spyOn(allAbilities[Abilities.STATIC].getAttrs(PostDefendContactApplyStatusEffectAbAttr)[0], "chance", "get").mockReturnValue(100);
- await game.startBattle();
+ await game.classicMode.startBattle();
const enemyPokemon = game.scene.getEnemyPokemon()!;
game.move.select(Moves.SPLASH);
await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]);
await game.toNextTurn();
- game.override.enemyMoveset(Array(4).fill(Moves.TACKLE));
+ game.override.enemyMoveset([Moves.TACKLE]);
game.move.select(Moves.SPLASH);
await game.toNextTurn();
diff --git a/src/test/moves/shell_trap.test.ts b/src/test/moves/shell_trap.test.ts
index 4549a8b2b73..213b9c3fd0a 100644
--- a/src/test/moves/shell_trap.test.ts
+++ b/src/test/moves/shell_trap.test.ts
@@ -9,7 +9,6 @@ import { MovePhase } from "#app/phases/move-phase";
import GameManager from "#test/utils/gameManager";
import Phaser from "phaser";
import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest";
-import { SPLASH_ONLY } from "../utils/testUtils";
const TIMEOUT = 20 * 1000;
@@ -33,7 +32,7 @@ describe("Moves - Shell Trap", () => {
.battleType("double")
.moveset([Moves.SHELL_TRAP, Moves.SPLASH, Moves.BULLDOZE])
.enemySpecies(Species.SNORLAX)
- .enemyMoveset(Array(4).fill(Moves.RAZOR_LEAF))
+ .enemyMoveset([Moves.RAZOR_LEAF])
.startingLevel(100)
.enemyLevel(100);
@@ -67,7 +66,7 @@ describe("Moves - Shell Trap", () => {
it(
"should fail if the user is only hit by special attacks",
async () => {
- game.override.enemyMoveset(Array(4).fill(Moves.SWIFT));
+ game.override.enemyMoveset([Moves.SWIFT]);
await game.startBattle([Species.CHARIZARD, Species.TURTONATOR]);
@@ -93,7 +92,7 @@ describe("Moves - Shell Trap", () => {
it(
"should fail if the user isn't hit with any attack",
async () => {
- game.override.enemyMoveset(SPLASH_ONLY);
+ game.override.enemyMoveset(Moves.SPLASH);
await game.startBattle([Species.CHARIZARD, Species.TURTONATOR]);
@@ -119,7 +118,7 @@ describe("Moves - Shell Trap", () => {
it(
"should not activate from an ally's attack",
async () => {
- game.override.enemyMoveset(SPLASH_ONLY);
+ game.override.enemyMoveset(Moves.SPLASH);
await game.startBattle([Species.BLASTOISE, Species.CHARIZARD]);
diff --git a/src/test/moves/speed_swap.test.ts b/src/test/moves/speed_swap.test.ts
index 131d506792b..179f1212394 100644
--- a/src/test/moves/speed_swap.test.ts
+++ b/src/test/moves/speed_swap.test.ts
@@ -6,7 +6,6 @@ import { TurnEndPhase } from "#app/phases/turn-end-phase";
import { Moves } from "#enums/moves";
import { Stat } from "#enums/stat";
import { Abilities } from "#enums/abilities";
-import { SPLASH_ONLY } from "../utils/testUtils";
describe("Moves - Speed Swap", () => {
let phaserGame: Phaser.Game;
@@ -27,7 +26,7 @@ describe("Moves - Speed Swap", () => {
game.override
.battleType("single")
.enemyAbility(Abilities.NONE)
- .enemyMoveset(SPLASH_ONLY)
+ .enemyMoveset(Moves.SPLASH)
.enemySpecies(Species.MEW)
.enemyLevel(200)
.moveset([ Moves.SPEED_SWAP ])
diff --git a/src/test/moves/spikes.test.ts b/src/test/moves/spikes.test.ts
index fa2e7521152..aa59912d802 100644
--- a/src/test/moves/spikes.test.ts
+++ b/src/test/moves/spikes.test.ts
@@ -4,7 +4,6 @@ import { Species } from "#enums/species";
import GameManager from "#test/utils/gameManager";
import Phaser from "phaser";
import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest";
-import { SPLASH_ONLY } from "../utils/testUtils";
describe("Moves - Spikes", () => {
@@ -28,7 +27,7 @@ describe("Moves - Spikes", () => {
.enemySpecies(Species.MAGIKARP)
.enemyAbility(Abilities.BALL_FETCH)
.ability(Abilities.BALL_FETCH)
- .enemyMoveset(SPLASH_ONLY)
+ .enemyMoveset(Moves.SPLASH)
.moveset([Moves.SPIKES, Moves.SPLASH, Moves.ROAR]);
});
diff --git a/src/test/moves/spit_up.test.ts b/src/test/moves/spit_up.test.ts
index f88791efb74..acf7f01d991 100644
--- a/src/test/moves/spit_up.test.ts
+++ b/src/test/moves/spit_up.test.ts
@@ -9,7 +9,6 @@ import { Moves } from "#enums/moves";
import { Species } from "#enums/species";
import Phaser from "phaser";
import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest";
-import { SPLASH_ONLY } from "#test/utils/testUtils";
import { MovePhase } from "#app/phases/move-phase";
import { TurnInitPhase } from "#app/phases/turn-init-phase";
@@ -33,7 +32,7 @@ describe("Moves - Spit Up", () => {
game.override.battleType("single");
game.override.enemySpecies(Species.RATTATA);
- game.override.enemyMoveset(SPLASH_ONLY);
+ game.override.enemyMoveset(Moves.SPLASH);
game.override.enemyAbility(Abilities.NONE);
game.override.enemyLevel(2000);
diff --git a/src/test/moves/stockpile.test.ts b/src/test/moves/stockpile.test.ts
index d57768d0ffd..8e7a44d053b 100644
--- a/src/test/moves/stockpile.test.ts
+++ b/src/test/moves/stockpile.test.ts
@@ -7,7 +7,6 @@ import { Abilities } from "#enums/abilities";
import { Moves } from "#enums/moves";
import { Species } from "#enums/species";
import GameManager from "#test/utils/gameManager";
-import { SPLASH_ONLY } from "#test/utils/testUtils";
import Phaser from "phaser";
import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest";
@@ -30,7 +29,7 @@ describe("Moves - Stockpile", () => {
game.override.battleType("single");
game.override.enemySpecies(Species.RATTATA);
- game.override.enemyMoveset(SPLASH_ONLY);
+ game.override.enemyMoveset(Moves.SPLASH);
game.override.enemyAbility(Abilities.NONE);
game.override.startingLevel(2000);
diff --git a/src/test/moves/swallow.test.ts b/src/test/moves/swallow.test.ts
index 9cea7ae8dc9..5a0e63e6e78 100644
--- a/src/test/moves/swallow.test.ts
+++ b/src/test/moves/swallow.test.ts
@@ -8,7 +8,6 @@ import { Abilities } from "#enums/abilities";
import { Moves } from "#enums/moves";
import { Species } from "#enums/species";
import GameManager from "#test/utils/gameManager";
-import { SPLASH_ONLY } from "#test/utils/testUtils";
import Phaser from "phaser";
import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest";
@@ -30,7 +29,7 @@ describe("Moves - Swallow", () => {
game.override.battleType("single");
game.override.enemySpecies(Species.RATTATA);
- game.override.enemyMoveset(SPLASH_ONLY);
+ game.override.enemyMoveset(Moves.SPLASH);
game.override.enemyAbility(Abilities.NONE);
game.override.enemyLevel(2000);
diff --git a/src/test/moves/tail_whip.test.ts b/src/test/moves/tail_whip.test.ts
index 04730a04f7a..5c83feb8a4e 100644
--- a/src/test/moves/tail_whip.test.ts
+++ b/src/test/moves/tail_whip.test.ts
@@ -5,7 +5,6 @@ import { Moves } from "#enums/moves";
import { Species } from "#enums/species";
import Phaser from "phaser";
import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest";
-import { SPLASH_ONLY } from "../utils/testUtils";
import { EnemyCommandPhase } from "#app/phases/enemy-command-phase";
import { TurnInitPhase } from "#app/phases/turn-init-phase";
@@ -33,7 +32,7 @@ describe("Moves - Tail whip", () => {
game.override.ability(Abilities.INSOMNIA);
game.override.startingLevel(2000);
game.override.moveset([ moveToUse ]);
- game.override.enemyMoveset(SPLASH_ONLY);
+ game.override.enemyMoveset(Moves.SPLASH);
});
it("should lower DEF stat stage by 1", async() => {
diff --git a/src/test/moves/tailwind.test.ts b/src/test/moves/tailwind.test.ts
index d158a9cce86..6a08cfe802f 100644
--- a/src/test/moves/tailwind.test.ts
+++ b/src/test/moves/tailwind.test.ts
@@ -5,7 +5,6 @@ import { TurnEndPhase } from "#app/phases/turn-end-phase";
import { Moves } from "#enums/moves";
import { Species } from "#enums/species";
import GameManager from "#test/utils/gameManager";
-import { SPLASH_ONLY } from "#test/utils/testUtils";
import Phaser from "phaser";
import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest";
@@ -27,7 +26,7 @@ describe("Moves - Tailwind", () => {
game = new GameManager(phaserGame);
game.override.battleType("double");
game.override.moveset([Moves.TAILWIND, Moves.SPLASH, Moves.PETAL_BLIZZARD, Moves.SANDSTORM]);
- game.override.enemyMoveset(SPLASH_ONLY);
+ game.override.enemyMoveset(Moves.SPLASH);
});
it("doubles the Speed stat of the Pokemons on its side", async () => {
diff --git a/src/test/moves/tar_shot.test.ts b/src/test/moves/tar_shot.test.ts
new file mode 100644
index 00000000000..2963f061fc6
--- /dev/null
+++ b/src/test/moves/tar_shot.test.ts
@@ -0,0 +1,132 @@
+import { BattlerIndex } from "#app/battle";
+import { Type } from "#app/data/type";
+import { Moves } from "#app/enums/moves";
+import { Species } from "#app/enums/species";
+import { Stat } from "#app/enums/stat";
+import { Abilities } from "#enums/abilities";
+import GameManager from "#test/utils/gameManager";
+import Phaser from "phaser";
+import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest";
+
+describe("Moves - Tar Shot", () => {
+ let phaserGame: Phaser.Game;
+ let game: GameManager;
+ const TIMEOUT = 20 * 1000;
+
+ beforeAll(() => {
+ phaserGame = new Phaser.Game({
+ type: Phaser.HEADLESS,
+ });
+ });
+
+ afterEach(() => {
+ game.phaseInterceptor.restoreOg();
+ });
+
+ beforeEach(() => {
+ game = new GameManager(phaserGame);
+ game.override
+ .battleType("single")
+ .enemyAbility(Abilities.BALL_FETCH)
+ .enemyMoveset(Moves.SPLASH)
+ .enemySpecies(Species.TANGELA)
+ .enemyLevel(1000)
+ .moveset([Moves.TAR_SHOT, Moves.FIRE_PUNCH])
+ .disableCrits();
+ });
+
+ it("lowers the target's Speed stat by one stage and doubles the effectiveness of Fire-type moves used on the target", async () => {
+ await game.classicMode.startBattle([Species.PIKACHU]);
+
+ const enemy = game.scene.getEnemyPokemon()!;
+
+ vi.spyOn(enemy, "getMoveEffectiveness");
+
+ game.move.select(Moves.TAR_SHOT);
+
+ await game.phaseInterceptor.to("TurnEndPhase");
+ expect(enemy.getStatStage(Stat.SPD)).toBe(-1);
+
+ await game.toNextTurn();
+
+ game.move.select(Moves.FIRE_PUNCH);
+ await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]);
+
+ await game.phaseInterceptor.to("MoveEndPhase");
+ expect(enemy.getMoveEffectiveness).toHaveReturnedWith(4);
+ }, TIMEOUT);
+
+ it("will not double the effectiveness of Fire-type moves used on a target that is already under the effect of Tar Shot (but may still lower its Speed)", async () => {
+ await game.classicMode.startBattle([Species.PIKACHU]);
+
+ const enemy = game.scene.getEnemyPokemon()!;
+
+ vi.spyOn(enemy, "getMoveEffectiveness");
+
+ game.move.select(Moves.TAR_SHOT);
+
+ await game.phaseInterceptor.to("TurnEndPhase");
+ expect(enemy.getStatStage(Stat.SPD)).toBe(-1);
+
+ await game.toNextTurn();
+
+ game.move.select(Moves.TAR_SHOT);
+
+ await game.phaseInterceptor.to("TurnEndPhase");
+ expect(enemy.getStatStage(Stat.SPD)).toBe(-2);
+
+ await game.toNextTurn();
+
+ game.move.select(Moves.FIRE_PUNCH);
+ await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]);
+
+ await game.phaseInterceptor.to("MoveEndPhase");
+ expect(enemy.getMoveEffectiveness).toHaveReturnedWith(4);
+ }, TIMEOUT);
+
+ it("does not double the effectiveness of Fire-type moves against a Pokémon that is Terastallized", async () => {
+ game.override.enemyHeldItems([{ name: "TERA_SHARD", type: Type.GRASS }]).enemySpecies(Species.SPRIGATITO);
+ await game.classicMode.startBattle([Species.PIKACHU]);
+
+ const enemy = game.scene.getEnemyPokemon()!;
+
+ vi.spyOn(enemy, "getMoveEffectiveness");
+
+ game.move.select(Moves.TAR_SHOT);
+
+ await game.phaseInterceptor.to("TurnEndPhase");
+ expect(enemy.getStatStage(Stat.SPD)).toBe(-1);
+
+ await game.toNextTurn();
+
+ game.move.select(Moves.FIRE_PUNCH);
+ await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]);
+
+ await game.phaseInterceptor.to("MoveEndPhase");
+ expect(enemy.getMoveEffectiveness).toHaveReturnedWith(2);
+ }, TIMEOUT);
+
+ it("doubles the effectiveness of Fire-type moves against a Pokémon that is already under the effects of Tar Shot before it Terastallized", async () => {
+ game.override.enemySpecies(Species.SPRIGATITO);
+ await game.classicMode.startBattle([Species.PIKACHU]);
+
+ const enemy = game.scene.getEnemyPokemon()!;
+
+ vi.spyOn(enemy, "getMoveEffectiveness");
+
+ game.move.select(Moves.TAR_SHOT);
+
+ await game.phaseInterceptor.to("TurnEndPhase");
+ expect(enemy.getStatStage(Stat.SPD)).toBe(-1);
+
+ await game.toNextTurn();
+
+ game.override.enemyHeldItems([{ name: "TERA_SHARD", type: Type.GRASS }]);
+
+ game.move.select(Moves.FIRE_PUNCH);
+ await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]);
+
+ await game.phaseInterceptor.to("MoveEndPhase");
+ expect(enemy.getMoveEffectiveness).toHaveReturnedWith(4);
+ }, TIMEOUT);
+});
diff --git a/src/test/moves/tera_blast.test.ts b/src/test/moves/tera_blast.test.ts
index fa7a99adc14..55d61496297 100644
--- a/src/test/moves/tera_blast.test.ts
+++ b/src/test/moves/tera_blast.test.ts
@@ -9,7 +9,6 @@ import { Species } from "#enums/species";
import GameManager from "#test/utils/gameManager";
import Phaser from "phaser";
import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest";
-import { SPLASH_ONLY } from "../utils/testUtils";
describe("Moves - Tera Blast", () => {
let phaserGame: Phaser.Game;
@@ -37,7 +36,7 @@ describe("Moves - Tera Blast", () => {
.ability(Abilities.BALL_FETCH)
.startingHeldItems([{ name: "TERA_SHARD", type: Type.FIRE }])
.enemySpecies(Species.MAGIKARP)
- .enemyMoveset(SPLASH_ONLY)
+ .enemyMoveset(Moves.SPLASH)
.enemyAbility(Abilities.BALL_FETCH)
.enemyLevel(20);
diff --git a/src/test/moves/throat_chop.test.ts b/src/test/moves/throat_chop.test.ts
new file mode 100644
index 00000000000..cb34b4bafff
--- /dev/null
+++ b/src/test/moves/throat_chop.test.ts
@@ -0,0 +1,57 @@
+import { BattlerIndex } from "#app/battle";
+import { Moves } from "#app/enums/moves";
+import { Species } from "#app/enums/species";
+import { Stat } from "#app/enums/stat";
+import { Abilities } from "#enums/abilities";
+import GameManager from "#test/utils/gameManager";
+import Phaser from "phaser";
+import { afterEach, beforeAll, beforeEach, describe, it, expect } from "vitest";
+
+describe("Moves - Throat Chop", () => {
+ let phaserGame: Phaser.Game;
+ let game: GameManager;
+ const TIMEOUT = 20 * 1000;
+
+ beforeAll(() => {
+ phaserGame = new Phaser.Game({
+ type: Phaser.HEADLESS,
+ });
+ });
+
+ afterEach(() => {
+ game.phaseInterceptor.restoreOg();
+ });
+
+ beforeEach(() => {
+ game = new GameManager(phaserGame);
+ game.override
+ .moveset(Array(4).fill(Moves.GROWL))
+ .battleType("single")
+ .ability(Abilities.BALL_FETCH)
+ .enemyAbility(Abilities.BALL_FETCH)
+ .enemyMoveset(Array(4).fill(Moves.THROAT_CHOP))
+ .enemySpecies(Species.MAGIKARP);
+ });
+
+ it("prevents the target from using sound-based moves for two turns", async () => {
+ await game.classicMode.startBattle([Species.MAGIKARP]);
+
+ const enemy = game.scene.getEnemyPokemon()!;
+
+ game.move.select(Moves.GROWL);
+ await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]);
+
+ // First turn, move is interrupted
+ await game.phaseInterceptor.to("TurnEndPhase");
+ expect(enemy.getStatStage(Stat.ATK)).toBe(0);
+
+ // Second turn, struggle if no valid moves
+ await game.toNextTurn();
+
+ game.move.select(Moves.GROWL);
+ await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]);
+
+ await game.phaseInterceptor.to("MoveEndPhase");
+ expect(enemy.isFullHp()).toBe(false);
+ }, TIMEOUT);
+});
diff --git a/src/test/moves/thunder_wave.test.ts b/src/test/moves/thunder_wave.test.ts
index 0c91be29714..7ad59518013 100644
--- a/src/test/moves/thunder_wave.test.ts
+++ b/src/test/moves/thunder_wave.test.ts
@@ -6,7 +6,6 @@ import { Species } from "#enums/species";
import GameManager from "#test/utils/gameManager";
import Phaser from "phaser";
import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest";
-import { SPLASH_ONLY } from "../utils/testUtils";
const TIMEOUT = 20 * 1000;
@@ -30,7 +29,7 @@ describe("Moves - Thunder Wave", () => {
.battleType("single")
.starterSpecies(Species.PIKACHU)
.moveset([Moves.THUNDER_WAVE])
- .enemyMoveset(SPLASH_ONLY);
+ .enemyMoveset(Moves.SPLASH);
});
// References: https://bulbapedia.bulbagarden.net/wiki/Thunder_Wave_(move)
diff --git a/src/test/moves/tidy_up.test.ts b/src/test/moves/tidy_up.test.ts
index 5204b06106b..255fe948447 100644
--- a/src/test/moves/tidy_up.test.ts
+++ b/src/test/moves/tidy_up.test.ts
@@ -6,7 +6,6 @@ import { Abilities } from "#enums/abilities";
import { Moves } from "#enums/moves";
import { Species } from "#enums/species";
import GameManager from "#test/utils/gameManager";
-import { SPLASH_ONLY } from "#test/utils/testUtils";
import Phaser from "phaser";
import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest";
@@ -30,7 +29,7 @@ describe("Moves - Tidy Up", () => {
game.override.battleType("single");
game.override.enemySpecies(Species.MAGIKARP);
game.override.enemyAbility(Abilities.BALL_FETCH);
- game.override.enemyMoveset(SPLASH_ONLY);
+ game.override.enemyMoveset(Moves.SPLASH);
game.override.starterSpecies(Species.FEEBAS);
game.override.ability(Abilities.BALL_FETCH);
game.override.moveset([Moves.TIDY_UP]);
diff --git a/src/test/moves/transform.test.ts b/src/test/moves/transform.test.ts
index 45769447e4d..6686f1fc73b 100644
--- a/src/test/moves/transform.test.ts
+++ b/src/test/moves/transform.test.ts
@@ -6,7 +6,6 @@ import { TurnEndPhase } from "#app/phases/turn-end-phase";
import { Moves } from "#enums/moves";
import { Stat, BATTLE_STATS, EFFECTIVE_STATS } from "#enums/stat";
import { Abilities } from "#enums/abilities";
-import { SPLASH_ONLY } from "../utils/testUtils";
// TODO: Add more tests once Transform is fully implemented
describe("Moves - Transform", () => {
@@ -31,7 +30,7 @@ describe("Moves - Transform", () => {
.enemyLevel(200)
.enemyAbility(Abilities.BEAST_BOOST)
.enemyPassiveAbility(Abilities.BALL_FETCH)
- .enemyMoveset(SPLASH_ONLY)
+ .enemyMoveset(Moves.SPLASH)
.ability(Abilities.INTIMIDATE)
.moveset([ Moves.TRANSFORM ]);
});
@@ -77,7 +76,7 @@ describe("Moves - Transform", () => {
}, 20000);
it("should copy in-battle overridden stats", async () => {
- game.override.enemyMoveset(new Array(4).fill(Moves.POWER_SPLIT));
+ game.override.enemyMoveset([Moves.POWER_SPLIT]);
await game.startBattle([
Species.DITTO
diff --git a/src/test/moves/u_turn.test.ts b/src/test/moves/u_turn.test.ts
index ae55302bb42..c4b6ae2497f 100644
--- a/src/test/moves/u_turn.test.ts
+++ b/src/test/moves/u_turn.test.ts
@@ -7,7 +7,6 @@ import { Moves } from "#enums/moves";
import { Species } from "#enums/species";
import Phaser from "phaser";
import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest";
-import { SPLASH_ONLY } from "../utils/testUtils";
describe("Moves - U-turn", () => {
let phaserGame: Phaser.Game;
@@ -31,7 +30,7 @@ describe("Moves - U-turn", () => {
.startingLevel(90)
.startingWave(97)
.moveset([Moves.U_TURN])
- .enemyMoveset(SPLASH_ONLY)
+ .enemyMoveset(Moves.SPLASH)
.disableCrits();
});
diff --git a/src/test/moves/wide_guard.test.ts b/src/test/moves/wide_guard.test.ts
index 6feeff815b5..b4e6e305539 100644
--- a/src/test/moves/wide_guard.test.ts
+++ b/src/test/moves/wide_guard.test.ts
@@ -32,7 +32,7 @@ describe("Moves - Wide Guard", () => {
game.override.moveset([Moves.WIDE_GUARD, Moves.SPLASH, Moves.SURF]);
game.override.enemySpecies(Species.SNORLAX);
- game.override.enemyMoveset(Array(4).fill(Moves.SWIFT));
+ game.override.enemyMoveset([Moves.SWIFT]);
game.override.enemyAbility(Abilities.INSOMNIA);
game.override.startingLevel(100);
@@ -61,7 +61,7 @@ describe("Moves - Wide Guard", () => {
test(
"should protect the user and allies from multi-target status moves",
async () => {
- game.override.enemyMoveset(Array(4).fill(Moves.GROWL));
+ game.override.enemyMoveset([Moves.GROWL]);
await game.startBattle([Species.CHARIZARD, Species.BLASTOISE]);
@@ -82,7 +82,7 @@ describe("Moves - Wide Guard", () => {
test(
"should not protect the user and allies from single-target moves",
async () => {
- game.override.enemyMoveset(Array(4).fill(Moves.TACKLE));
+ game.override.enemyMoveset([Moves.TACKLE]);
await game.startBattle([Species.CHARIZARD, Species.BLASTOISE]);
@@ -103,7 +103,7 @@ describe("Moves - Wide Guard", () => {
test(
"should protect the user from its ally's multi-target move",
async () => {
- game.override.enemyMoveset(Array(4).fill(Moves.SPLASH));
+ game.override.enemyMoveset([Moves.SPLASH]);
await game.startBattle([Species.CHARIZARD, Species.BLASTOISE]);
diff --git a/src/test/phases/learn-move-phase.test.ts b/src/test/phases/learn-move-phase.test.ts
new file mode 100644
index 00000000000..60cdbee8570
--- /dev/null
+++ b/src/test/phases/learn-move-phase.test.ts
@@ -0,0 +1,47 @@
+import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest";
+import Phaser from "phaser";
+import GameManager from "#test/utils/gameManager";
+import { Species } from "#enums/species";
+import { Moves } from "#enums/moves";
+import { LearnMovePhase } from "#app/phases/learn-move-phase";
+
+describe("Learn Move Phase", () => {
+ let phaserGame: Phaser.Game;
+ let game: GameManager;
+
+ beforeAll(() => {
+ phaserGame = new Phaser.Game({
+ type: Phaser.HEADLESS,
+ });
+ });
+
+ afterEach(() => {
+ game.phaseInterceptor.restoreOg();
+ });
+
+ beforeEach(() => {
+ game = new GameManager(phaserGame);
+ game.override.xpMultiplier(50);
+ });
+
+ it("If Pokemon has less than 4 moves, its newest move will be added to the lowest empty index", async () => {
+ game.override.moveset([Moves.SPLASH]);
+ await game.startBattle([Species.BULBASAUR]);
+ const pokemon = game.scene.getPlayerPokemon()!;
+ const newMovePos = pokemon?.getMoveset().length;
+ game.move.select(Moves.SPLASH);
+ await game.doKillOpponents();
+ await game.phaseInterceptor.to(LearnMovePhase);
+ const levelMove = pokemon.getLevelMoves(5)[0];
+ const levelReq = levelMove[0];
+ const levelMoveId = levelMove[1];
+ expect(pokemon.level).toBeGreaterThanOrEqual(levelReq);
+ expect(pokemon?.getMoveset()[newMovePos]?.moveId).toBe(levelMoveId);
+ });
+
+ /**
+ * Future Tests:
+ * If a Pokemon has four moves, the user can specify an old move to be forgotten and a new move will take its place.
+ * If a Pokemon has four moves, the user can reject the new move, keeping the moveset the same.
+ */
+});
diff --git a/src/test/reload.test.ts b/src/test/reload.test.ts
index 0a712fcc7df..a96a525ca2d 100644
--- a/src/test/reload.test.ts
+++ b/src/test/reload.test.ts
@@ -2,7 +2,6 @@ import { Species } from "#app/enums/species";
import { GameModes } from "#app/game-mode";
import GameManager from "#test/utils/gameManager";
import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest";
-import { SPLASH_ONLY } from "./utils/testUtils";
import { Moves } from "#app/enums/moves";
import { Biome } from "#app/enums/biome";
@@ -45,7 +44,7 @@ describe("Reload", () => {
.enemyLevel(1000)
.disableTrainerWaves()
.moveset([Moves.KOWTOW_CLEAVE])
- .enemyMoveset(SPLASH_ONLY);
+ .enemyMoveset(Moves.SPLASH);
await game.dailyMode.startBattle();
// Transition from Daily Run Wave 10 to Wave 11 in order to trigger biome switch
diff --git a/src/test/ui/type-hints.test.ts b/src/test/ui/type-hints.test.ts
index ccab02b82bf..726094b258a 100644
--- a/src/test/ui/type-hints.test.ts
+++ b/src/test/ui/type-hints.test.ts
@@ -8,7 +8,6 @@ import GameManager from "#test/utils/gameManager";
import Phaser from "phaser";
import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest";
import MockText from "../utils/mocks/mocksContainer/mockText";
-import { SPLASH_ONLY } from "../utils/testUtils";
describe("UI - Type Hints", () => {
let phaserGame: Phaser.Game;
@@ -27,7 +26,7 @@ describe("UI - Type Hints", () => {
beforeEach(async () => {
game = new GameManager(phaserGame);
game.settings.typeHints(true); //activate type hints
- game.override.battleType("single").startingLevel(100).startingWave(1).enemyMoveset(SPLASH_ONLY);
+ game.override.battleType("single").startingLevel(100).startingWave(1).enemyMoveset(Moves.SPLASH);
});
it("check immunity color", async () => {
@@ -36,7 +35,7 @@ describe("UI - Type Hints", () => {
.startingLevel(100)
.startingWave(1)
.enemySpecies(Species.FLORGES)
- .enemyMoveset(SPLASH_ONLY)
+ .enemyMoveset(Moves.SPLASH)
.moveset([Moves.DRAGON_CLAW]);
game.settings.typeHints(true); //activate type hints
diff --git a/src/test/utils/helpers/overridesHelper.ts b/src/test/utils/helpers/overridesHelper.ts
index a42ef84b496..a17b841b682 100644
--- a/src/test/utils/helpers/overridesHelper.ts
+++ b/src/test/utils/helpers/overridesHelper.ts
@@ -48,6 +48,17 @@ export class OverridesHelper extends GameManagerHelper {
return this;
}
+ /**
+ * Override the XP Multiplier
+ * @param value the XP multiplier to set
+ * @returns `this`
+ */
+ xpMultiplier(value: number): this {
+ vi.spyOn(Overrides, "XP_MULTIPLIER_OVERRIDE", "get").mockReturnValue(value);
+ this.log(`XP Multiplier set to ${value}!`);
+ return this;
+ }
+
/**
* Override the player (pokemon) starting held items
* @param items the items to hold
@@ -122,8 +133,11 @@ export class OverridesHelper extends GameManagerHelper {
* @param moveset the {@linkcode Moves | moves}set to set
* @returns this
*/
- moveset(moveset: Moves[]): this {
+ moveset(moveset: Moves | Moves[]): this {
vi.spyOn(Overrides, "MOVESET_OVERRIDE", "get").mockReturnValue(moveset);
+ if (!Array.isArray(moveset)) {
+ moveset = [moveset];
+ }
const movesetStr = moveset.map((moveId) => Moves[moveId]).join(", ");
this.log(`Player Pokemon moveset set to ${movesetStr} (=[${moveset.join(", ")}])!`);
return this;
@@ -241,8 +255,11 @@ export class OverridesHelper extends GameManagerHelper {
* @param moveset the {@linkcode Moves | moves}set to set
* @returns this
*/
- enemyMoveset(moveset: Moves[]): this {
+ enemyMoveset(moveset: Moves | Moves[]): this {
vi.spyOn(Overrides, "OPP_MOVESET_OVERRIDE", "get").mockReturnValue(moveset);
+ if (!Array.isArray(moveset)) {
+ moveset = [moveset];
+ }
const movesetStr = moveset.map((moveId) => Moves[moveId]).join(", ");
this.log(`Enemy Pokemon moveset set to ${movesetStr} (=[${moveset.join(", ")}])!`);
return this;
diff --git a/src/test/utils/mocks/mocksContainer/mockContainer.ts b/src/test/utils/mocks/mocksContainer/mockContainer.ts
index d2cdd852257..94ae61a6ce4 100644
--- a/src/test/utils/mocks/mocksContainer/mockContainer.ts
+++ b/src/test/utils/mocks/mocksContainer/mockContainer.ts
@@ -52,9 +52,8 @@ export default class MockContainer implements MockGameObject {
/// Sets the position of this Game Object to be a relative position from the source Game Object.
}
- setInteractive(hitArea?, callback?, dropZone?) {
- /// Sets the InteractiveObject to be a drop zone for a drag and drop operation.
- }
+ setInteractive = vi.fn();
+
setOrigin(x, y) {
this.x = x;
this.y = y;
diff --git a/src/test/utils/mocks/mocksContainer/mockSprite.ts b/src/test/utils/mocks/mocksContainer/mockSprite.ts
index 35cd2d5faab..ae43df46cf5 100644
--- a/src/test/utils/mocks/mocksContainer/mockSprite.ts
+++ b/src/test/utils/mocks/mocksContainer/mockSprite.ts
@@ -1,5 +1,6 @@
import Phaser from "phaser";
import { MockGameObject } from "../mockGameObject";
+import { vi } from "vitest";
import Sprite = Phaser.GameObjects.Sprite;
import Frame = Phaser.Textures.Frame;
@@ -101,9 +102,7 @@ export default class MockSprite implements MockGameObject {
return this.phaserSprite.stop();
}
- setInteractive(hitArea, hitAreaCallback, dropZone) {
- return null;
- }
+ setInteractive = vi.fn();
on(event, callback, source) {
return this.phaserSprite.on(event, callback, source);
diff --git a/src/test/utils/mocks/mocksContainer/mockText.ts b/src/test/utils/mocks/mocksContainer/mockText.ts
index 6b9ecf083fd..5a89432902b 100644
--- a/src/test/utils/mocks/mocksContainer/mockText.ts
+++ b/src/test/utils/mocks/mocksContainer/mockText.ts
@@ -197,6 +197,8 @@ export default class MockText implements MockGameObject {
this.color = color;
});
+ setInteractive = vi.fn();
+
setShadowColor(color) {
// Sets the shadow color.
// return this.phaserText.setShadowColor(color);
diff --git a/src/test/utils/phaseInterceptor.ts b/src/test/utils/phaseInterceptor.ts
index 2eb5324a2aa..a89d1788be9 100644
--- a/src/test/utils/phaseInterceptor.ts
+++ b/src/test/utils/phaseInterceptor.ts
@@ -12,6 +12,7 @@ import { EndEvolutionPhase } from "#app/phases/end-evolution-phase";
import { EnemyCommandPhase } from "#app/phases/enemy-command-phase";
import { EvolutionPhase } from "#app/phases/evolution-phase";
import { FaintPhase } from "#app/phases/faint-phase";
+import { LearnMovePhase } from "#app/phases/learn-move-phase";
import { LevelCapPhase } from "#app/phases/level-cap-phase";
import { LoginPhase } from "#app/phases/login-phase";
import { MessagePhase } from "#app/phases/message-phase";
@@ -89,6 +90,7 @@ export default class PhaseInterceptor {
[NextEncounterPhase, this.startPhase],
[NewBattlePhase, this.startPhase],
[VictoryPhase, this.startPhase],
+ [LearnMovePhase, this.startPhase],
[MoveEndPhase, this.startPhase],
[StatStageChangePhase, this.startPhase],
[ShinySparklePhase, this.startPhase],
diff --git a/src/test/utils/testUtils.ts b/src/test/utils/testUtils.ts
index 2265cf8d79c..b922fc9c61c 100644
--- a/src/test/utils/testUtils.ts
+++ b/src/test/utils/testUtils.ts
@@ -1,10 +1,6 @@
-import { Moves } from "#app/enums/moves";
import i18next, { type ParseKeys } from "i18next";
import { vi } from "vitest";
-/** Ready to use array of Moves.SPLASH x4 */
-export const SPLASH_ONLY = [Moves.SPLASH, Moves.SPLASH, Moves.SPLASH, Moves.SPLASH];
-
/**
* Sets up the i18next mock.
* Includes a i18next.t mocked implementation only returning the raw key (`(key) => key`)
diff --git a/src/test/vitest.setup.ts b/src/test/vitest.setup.ts
index eaa987c1a66..bf806cd053a 100644
--- a/src/test/vitest.setup.ts
+++ b/src/test/vitest.setup.ts
@@ -1,4 +1,3 @@
-import "#test/fontFace.setup";
import "vitest-canvas-mock";
import { initLoggedInUser } from "#app/account";
diff --git a/src/ui/battle-info.ts b/src/ui/battle-info.ts
index 05c634609f8..c7b82dc826e 100644
--- a/src/ui/battle-info.ts
+++ b/src/ui/battle-info.ts
@@ -323,7 +323,7 @@ export default class BattleInfo extends Phaser.GameObjects.Container {
this.teraIcon.setVisible(this.lastTeraType !== Type.UNKNOWN);
this.teraIcon.on("pointerover", () => {
if (this.lastTeraType !== Type.UNKNOWN) {
- (this.scene as BattleScene).ui.showTooltip("", `${Utils.toReadableString(Type[this.lastTeraType])} Terastallized`);
+ (this.scene as BattleScene).ui.showTooltip("", i18next.t("fightUiHandler:teraHover", {type: i18next.t(`pokemonInfo:Type.${Type[this.lastTeraType]}`) }));
}
});
this.teraIcon.on("pointerout", () => (this.scene as BattleScene).ui.hideTooltip());
diff --git a/src/ui/battle-message-ui-handler.ts b/src/ui/battle-message-ui-handler.ts
index 3bea0f21433..9a694d50b29 100644
--- a/src/ui/battle-message-ui-handler.ts
+++ b/src/ui/battle-message-ui-handler.ts
@@ -97,6 +97,7 @@ export default class BattleMessageUiHandler extends MessageUiHandler {
this.levelUpStatsContainer = levelUpStatsContainer;
const levelUpStatsLabelsContent = addTextObject(this.scene, (this.scene.game.canvas.width / 6) - 73, -94, "", TextStyle.WINDOW, { maxLines: 6 });
+ levelUpStatsLabelsContent.setLineSpacing(i18next.resolvedLanguage === "ja" ? 25 : 5);
let levelUpStatsLabelText = "";
for (const s of PERMANENT_STATS) {
@@ -112,11 +113,13 @@ export default class BattleMessageUiHandler extends MessageUiHandler {
levelUpStatsContainer.add(levelUpStatsLabelsContent);
const levelUpStatsIncrContent = addTextObject(this.scene, (this.scene.game.canvas.width / 6) - 50, -94, "+\n+\n+\n+\n+\n+", TextStyle.WINDOW, { maxLines: 6 });
+ levelUpStatsIncrContent.setLineSpacing(i18next.resolvedLanguage === "ja" ? 25 : 5);
levelUpStatsContainer.add(levelUpStatsIncrContent);
this.levelUpStatsIncrContent = levelUpStatsIncrContent;
const levelUpStatsValuesContent = addBBCodeTextObject(this.scene, (this.scene.game.canvas.width / 6) - 7, -94, "", TextStyle.WINDOW, { maxLines: 6, lineSpacing: 5});
+ levelUpStatsValuesContent.setLineSpacing(i18next.resolvedLanguage === "ja" ? 25 : 5);
levelUpStatsValuesContent.setOrigin(1, 0);
levelUpStatsValuesContent.setAlign("right");
levelUpStatsContainer.add(levelUpStatsValuesContent);
diff --git a/src/ui/egg-summary-ui-handler.ts b/src/ui/egg-summary-ui-handler.ts
index af82ab33438..1d18e75f530 100644
--- a/src/ui/egg-summary-ui-handler.ts
+++ b/src/ui/egg-summary-ui-handler.ts
@@ -29,8 +29,10 @@ export default class EggSummaryUiHandler extends MessageUiHandler {
private summaryContainer: Phaser.GameObjects.Container;
/** container for the mini pokemon sprites */
private pokemonIconSpritesContainer: Phaser.GameObjects.Container;
- /** container for the icons displayed alongside the mini icons (e.g. shiny, HA capsule) */
+ /** container for the icons displayed on top of the mini pokemon sprites (e.g. shiny, HA capsule) */
private pokemonIconsContainer: Phaser.GameObjects.Container;
+ /** container for the elements displayed behind the mini pokemon sprites (e.g. egg rarity bg) */
+ private pokemonBackgroundContainer: Phaser.GameObjects.Container;
/** hatch info container that displays the current pokemon / hatch (main element on left hand side) */
private infoContainer: PokemonHatchInfoContainer;
/** handles jumping animations for the pokemon sprite icons */
@@ -71,15 +73,17 @@ export default class EggSummaryUiHandler extends MessageUiHandler {
this.eggHatchBg.setOrigin(0, 0);
this.eggHatchContainer.add(this.eggHatchBg);
- this.pokemonIconsContainer = this.scene.add.container(iconContainerX, iconContainerY);
- this.pokemonIconSpritesContainer = this.scene.add.container(iconContainerX, iconContainerY);
- this.summaryContainer.add(this.pokemonIconsContainer);
- this.summaryContainer.add(this.pokemonIconSpritesContainer);
-
this.cursorObj = this.scene.add.image(0, 0, "select_cursor");
this.cursorObj.setOrigin(0, 0);
this.summaryContainer.add(this.cursorObj);
+ this.pokemonIconSpritesContainer = this.scene.add.container(iconContainerX, iconContainerY);
+ this.pokemonIconsContainer = this.scene.add.container(iconContainerX, iconContainerY);
+ this.pokemonBackgroundContainer = this.scene.add.container(iconContainerX, iconContainerY);
+ this.summaryContainer.add(this.pokemonBackgroundContainer);
+ this.summaryContainer.add(this.pokemonIconSpritesContainer);
+ this.summaryContainer.add(this.pokemonIconsContainer);
+
this.infoContainer = new PokemonHatchInfoContainer(this.scene, this.summaryContainer);
this.infoContainer.setup();
this.infoContainer.changeToEggSummaryLayout();
@@ -95,6 +99,7 @@ export default class EggSummaryUiHandler extends MessageUiHandler {
this.summaryContainer.setVisible(false);
this.pokemonIconSpritesContainer.removeAll(true);
this.pokemonIconsContainer.removeAll(true);
+ this.pokemonBackgroundContainer.removeAll(true);
this.eggHatchBg.setVisible(false);
this.getUi().hideTooltip();
// Note: Questions on garbage collection go to @frutescens
@@ -164,25 +169,25 @@ export default class EggSummaryUiHandler extends MessageUiHandler {
const offset = 2;
const rightSideX = 12;
- const bg = this.scene.add.image(x+2, y+5, "passive_bg");
- bg.setOrigin(0, 0);
- bg.setScale(0.75);
- bg.setVisible(true);
- this.pokemonIconsContainer.add(bg);
+ const rarityBg = this.scene.add.image(x + 2, y + 5, "passive_bg");
+ rarityBg.setOrigin(0, 0);
+ rarityBg.setScale(0.75);
+ rarityBg.setVisible(true);
+ this.pokemonBackgroundContainer.add(rarityBg);
// set tint for passive bg
switch (getEggTierForSpecies(displayPokemon.species)) {
case EggTier.COMMON:
- bg.setVisible(false);
+ rarityBg.setVisible(false);
break;
case EggTier.GREAT:
- bg.setTint(0xabafff);
+ rarityBg.setTint(0xabafff);
break;
case EggTier.ULTRA:
- bg.setTint(0xffffaa);
+ rarityBg.setTint(0xffffaa);
break;
case EggTier.MASTER:
- bg.setTint(0xdfffaf);
+ rarityBg.setTint(0xdfffaf);
break;
}
const species = displayPokemon.species;
@@ -192,35 +197,31 @@ export default class EggSummaryUiHandler extends MessageUiHandler {
const isShiny = displayPokemon.shiny;
// set pokemon icon (and replace with base sprite if there is a mismatch)
- const icon = this.scene.add.sprite(x - offset, y + offset, species.getIconAtlasKey(formIndex, isShiny, variant));
- icon.setScale(0.5);
- icon.setOrigin(0, 0);
- icon.setFrame(species.getIconId(female, formIndex, isShiny, variant));
+ const pokemonIcon = this.scene.add.sprite(x - offset, y + offset, species.getIconAtlasKey(formIndex, isShiny, variant));
+ pokemonIcon.setScale(0.5);
+ pokemonIcon.setOrigin(0, 0);
+ pokemonIcon.setFrame(species.getIconId(female, formIndex, isShiny, variant));
- if (icon.frame.name !== species.getIconId(female, formIndex, isShiny, variant)) {
+ if (pokemonIcon.frame.name !== species.getIconId(female, formIndex, isShiny, variant)) {
console.log(`${species.name}'s variant icon does not exist. Replacing with default.`);
- icon.setTexture(species.getIconAtlasKey(formIndex, false, variant));
- icon.setFrame(species.getIconId(female, formIndex, false, variant));
+ pokemonIcon.setTexture(species.getIconAtlasKey(formIndex, false, variant));
+ pokemonIcon.setFrame(species.getIconId(female, formIndex, false, variant));
}
- this.pokemonIconSpritesContainer.add(icon);
- this.iconAnimHandler.addOrUpdate(icon, PokemonIconAnimMode.NONE);
+ this.pokemonIconSpritesContainer.add(pokemonIcon);
- const shiny = this.scene.add.image(x + rightSideX, y + offset * 2, "shiny_star_small");
- shiny.setScale(0.5);
- shiny.setVisible(displayPokemon.shiny);
- shiny.setTint(getVariantTint(displayPokemon.variant));
- this.pokemonIconsContainer.add(shiny);
+ const shinyIcon = this.scene.add.image(x + rightSideX, y + offset, "shiny_star_small");
+ shinyIcon.setOrigin(0, 0);
+ shinyIcon.setScale(0.5);
+ shinyIcon.setVisible(displayPokemon.shiny);
+ shinyIcon.setTint(getVariantTint(displayPokemon.variant));
+ this.pokemonIconsContainer.add(shinyIcon);
- const ha = this.scene.add.image(x + rightSideX, y + 7, "ha_capsule");
- ha.setScale(0.5);
- ha.setVisible((displayPokemon.hasAbility(displayPokemon.species.abilityHidden)));
- this.pokemonIconsContainer.add(ha);
+ const haIcon = this.scene.add.image(x + rightSideX, y + offset * 4, "ha_capsule");
+ haIcon.setOrigin(0, 0);
+ haIcon.setScale(0.5);
+ haIcon.setVisible(displayPokemon.abilityIndex === 2);
+ this.pokemonIconsContainer.add(haIcon);
- const pb = this.scene.add.image(x + rightSideX, y + offset * 7, "icon_owned");
- pb.setOrigin(0, 0);
- pb.setScale(0.5);
-
- // add animation for new unlocks (new catch or new shiny or new form)
const dexEntry = value.dexEntryBeforeUpdate;
const caughtAttr = dexEntry.caughtAttr;
const newShiny = BigInt(1 << (displayPokemon.shiny ? 1 : 0));
@@ -228,17 +229,24 @@ export default class EggSummaryUiHandler extends MessageUiHandler {
const newShinyOrVariant = ((newShiny & caughtAttr) === BigInt(0)) || ((newVariant & caughtAttr) === BigInt(0));
const newForm = (BigInt(1 << displayPokemon.formIndex) * DexAttr.DEFAULT_FORM & caughtAttr) === BigInt(0);
- pb.setVisible(!caughtAttr || newForm);
- if (!caughtAttr || newShinyOrVariant || newForm) {
- this.iconAnimHandler.addOrUpdate(icon, PokemonIconAnimMode.PASSIVE);
- }
- this.pokemonIconsContainer.add(pb);
+ const pokeballIcon = this.scene.add.image(x + rightSideX, y + offset * 7, "icon_owned");
+ pokeballIcon.setOrigin(0, 0);
+ pokeballIcon.setScale(0.5);
+ pokeballIcon.setVisible(!caughtAttr || newForm);
+ this.pokemonIconsContainer.add(pokeballIcon);
- const em = this.scene.add.image(x, y + offset, "icon_egg_move");
- em.setOrigin(0, 0);
- em.setScale(0.5);
- em.setVisible(value.eggMoveUnlocked);
- this.pokemonIconsContainer.add(em);
+ const eggMoveIcon = this.scene.add.image(x, y + offset, "icon_egg_move");
+ eggMoveIcon.setOrigin(0, 0);
+ eggMoveIcon.setScale(0.5);
+ eggMoveIcon.setVisible(value.eggMoveUnlocked);
+ this.pokemonIconsContainer.add(eggMoveIcon);
+
+ // add animation to the Pokemon sprite for new unlocks (new catch, new shiny or new form)
+ if (!caughtAttr || newShinyOrVariant || newForm) {
+ this.iconAnimHandler.addOrUpdate(pokemonIcon, PokemonIconAnimMode.PASSIVE);
+ } else {
+ this.iconAnimHandler.addOrUpdate(pokemonIcon, PokemonIconAnimMode.NONE);
+ }
});
this.setCursor(0);
diff --git a/src/ui/move-info-overlay.ts b/src/ui/move-info-overlay.ts
index 859e95a39b6..77010f84528 100644
--- a/src/ui/move-info-overlay.ts
+++ b/src/ui/move-info-overlay.ts
@@ -58,6 +58,7 @@ export default class MoveInfoOverlay extends Phaser.GameObjects.Container implem
// set up the description; wordWrap uses true pixels, unaffected by any scaling, while other values are affected
this.desc = addTextObject(scene, (options?.onSide && !options?.right ? EFF_WIDTH : 0) + BORDER, (options?.top ? EFF_HEIGHT : 0) + BORDER - 2, "", TextStyle.BATTLE_INFO, { wordWrap: { width: (width - (BORDER - 2) * 2 - (options?.onSide ? EFF_WIDTH : 0)) * GLOBAL_SCALE } });
+ this.desc.setLineSpacing(i18next.resolvedLanguage === "ja" ? 25 : 5);
// limit the text rendering, required for scrolling later on
const maskPointOrigin = {
diff --git a/src/ui/pokemon-info-container.ts b/src/ui/pokemon-info-container.ts
index 49bfd4d7293..3c54e529d43 100644
--- a/src/ui/pokemon-info-container.ts
+++ b/src/ui/pokemon-info-container.ts
@@ -262,7 +262,7 @@ export default class PokemonInfoContainer extends Phaser.GameObjects.Container {
this.pokemonFormText.disableInteractive();
}
- const abilityTextStyle = pokemon.abilityIndex === (pokemon.species.ability2 ? 2 : 1) ? TextStyle.MONEY : TextStyle.WINDOW;
+ const abilityTextStyle = pokemon.abilityIndex === 2 ? TextStyle.MONEY : TextStyle.WINDOW;
this.pokemonAbilityText.setText(pokemon.getAbility(true).name);
this.pokemonAbilityText.setColor(getTextColor(abilityTextStyle, false, this.scene.uiTheme));
this.pokemonAbilityText.setShadowColor(getTextColor(abilityTextStyle, true, this.scene.uiTheme));
diff --git a/src/ui/run-info-ui-handler.ts b/src/ui/run-info-ui-handler.ts
index d6bafb8599e..f398abed6f5 100644
--- a/src/ui/run-info-ui-handler.ts
+++ b/src/ui/run-info-ui-handler.ts
@@ -21,6 +21,7 @@ import { getVariantTint } from "#app/data/variant";
import * as Modifier from "../modifier/modifier";
import { Species } from "#enums/species";
import { PlayerGender } from "#enums/player-gender";
+import { SettingKeyboard } from "#app/system/settings/settings-keyboard";
/**
* RunInfoUiMode indicates possible overlays of RunInfoUiHandler.
@@ -151,7 +152,13 @@ export default class RunInfoUiHandler extends UiHandler {
const headerBgCoords = headerBg.getTopRight();
const abilityButtonContainer = this.scene.add.container(0, 0);
const abilityButtonText = addTextObject(this.scene, 8, 0, i18next.t("runHistory:viewHeldItems"), TextStyle.WINDOW, {fontSize:"34px"});
- const abilityButtonElement = new Phaser.GameObjects.Sprite(this.scene, 0, 2, "keyboard", "E.png");
+ const gamepadType = this.getUi().getGamepadType();
+ let abilityButtonElement: Phaser.GameObjects.Sprite;
+ if (gamepadType === "touch") {
+ abilityButtonElement = new Phaser.GameObjects.Sprite(this.scene, 0, 2, "keyboard", "E.png");
+ } else {
+ abilityButtonElement = new Phaser.GameObjects.Sprite(this.scene, 0, 2, gamepadType, this.scene.inputController?.getIconForLatestInputRecorded(SettingKeyboard.Button_Cycle_Ability));
+ }
abilityButtonContainer.add([abilityButtonText, abilityButtonElement]);
abilityButtonContainer.setPosition(headerBgCoords.x - abilityButtonText.displayWidth - abilityButtonElement.displayWidth - 8, 10);
this.runContainer.add(abilityButtonContainer);
@@ -180,11 +187,19 @@ export default class RunInfoUiHandler extends UiHandler {
if (this.isVictory) {
const hallofFameInstructionContainer = this.scene.add.container(0, 0);
const shinyButtonText = addTextObject(this.scene, 8, 0, i18next.t("runHistory:viewHallOfFame"), TextStyle.WINDOW, {fontSize:"65px"});
- const shinyButtonElement = new Phaser.GameObjects.Sprite(this.scene, 0, 4, "keyboard", "R.png");
+ const formButtonText = addTextObject(this.scene, 8, 12, i18next.t("runHistory:viewEndingSplash"), TextStyle.WINDOW, {fontSize:"65px"});
+ const gamepadType = this.getUi().getGamepadType();
+ let shinyButtonElement: Phaser.GameObjects.Sprite;
+ let formButtonElement: Phaser.GameObjects.Sprite;
+ if (gamepadType === "touch") {
+ shinyButtonElement = new Phaser.GameObjects.Sprite(this.scene, 0, 4, "keyboard", "R.png");
+ formButtonElement = new Phaser.GameObjects.Sprite(this.scene, 0, 16, "keyboard", "F.png");
+ } else {
+ shinyButtonElement = new Phaser.GameObjects.Sprite(this.scene, 0, 4, gamepadType, this.scene.inputController?.getIconForLatestInputRecorded(SettingKeyboard.Button_Cycle_Shiny));
+ formButtonElement = new Phaser.GameObjects.Sprite(this.scene, 0, 16, gamepadType, this.scene.inputController?.getIconForLatestInputRecorded(SettingKeyboard.Button_Cycle_Form));
+ }
hallofFameInstructionContainer.add([shinyButtonText, shinyButtonElement]);
- const formButtonText = addTextObject(this.scene, 8, 12, i18next.t("runHistory:viewEndingSplash"), TextStyle.WINDOW, {fontSize:"65px"});
- const formButtonElement = new Phaser.GameObjects.Sprite(this.scene, 0, 16, "keyboard", "F.png");
hallofFameInstructionContainer.add([formButtonText, formButtonElement]);
hallofFameInstructionContainer.setPosition(12, 25);
diff --git a/src/ui/starter-select-ui-handler.ts b/src/ui/starter-select-ui-handler.ts
index 6b75c46bd45..0c3d8de61b0 100644
--- a/src/ui/starter-select-ui-handler.ts
+++ b/src/ui/starter-select-ui-handler.ts
@@ -266,6 +266,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler {
private pokemonPassiveDisabledIcon: Phaser.GameObjects.Sprite;
private pokemonPassiveLockedIcon: Phaser.GameObjects.Sprite;
+ private activeTooltip: "ABILITY" | "PASSIVE" | "CANDY" | undefined;
private instructionsContainer: Phaser.GameObjects.Container;
private filterInstructionsContainer: Phaser.GameObjects.Container;
private shinyIconElement: Phaser.GameObjects.Sprite;
@@ -561,10 +562,13 @@ export default class StarterSelectUiHandler extends MessageUiHandler {
this.pokemonAbilityLabelText = addTextObject(this.scene, 6, 127 + starterInfoYOffset, i18next.t("starterSelectUiHandler:ability"), TextStyle.SUMMARY_ALT, { fontSize: starterInfoTextSize });
this.pokemonAbilityLabelText.setOrigin(0, 0);
this.pokemonAbilityLabelText.setVisible(false);
+
this.starterSelectContainer.add(this.pokemonAbilityLabelText);
this.pokemonAbilityText = addTextObject(this.scene, starterInfoXPos, 127 + starterInfoYOffset, "", TextStyle.SUMMARY_ALT, { fontSize: starterInfoTextSize });
this.pokemonAbilityText.setOrigin(0, 0);
+ this.pokemonAbilityText.setInteractive(new Phaser.Geom.Rectangle(0, 0, 250, 55), Phaser.Geom.Rectangle.Contains);
+
this.starterSelectContainer.add(this.pokemonAbilityText);
this.pokemonPassiveLabelText = addTextObject(this.scene, 6, 136 + starterInfoYOffset, i18next.t("starterSelectUiHandler:passive"), TextStyle.SUMMARY_ALT, { fontSize: starterInfoTextSize });
@@ -574,6 +578,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler {
this.pokemonPassiveText = addTextObject(this.scene, starterInfoXPos, 136 + starterInfoYOffset, "", TextStyle.SUMMARY_ALT, { fontSize: starterInfoTextSize });
this.pokemonPassiveText.setOrigin(0, 0);
+ this.pokemonPassiveText.setInteractive(new Phaser.Geom.Rectangle(0, 0, 250, 55), Phaser.Geom.Rectangle.Contains);
this.starterSelectContainer.add(this.pokemonPassiveText);
this.pokemonPassiveDisabledIcon = this.scene.add.sprite(starterInfoXPos, 137 + starterInfoYOffset, "icon_stop");
@@ -1215,6 +1220,19 @@ export default class StarterSelectUiHandler extends MessageUiHandler {
}
}
+ /**
+ * Update the display of candy upgrade icons or animations for the given StarterContainer
+ * @param starterContainer the container for the Pokemon to update
+ */
+ updateCandyUpgradeDisplay(starterContainer: StarterContainer) {
+ if (this.isUpgradeIconEnabled() ) {
+ this.setUpgradeIcon(starterContainer);
+ }
+ if (this.isUpgradeAnimationEnabled()) {
+ this.setUpgradeAnimation(starterContainer.icon, this.lastSpecies, true);
+ }
+ }
+
/**
* Processes an {@linkcode CandyUpgradeNotificationChangedEvent} sent when the corresponding setting changes
* @param event {@linkcode Event} sent by the callback
@@ -1619,7 +1637,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler {
}
});
}
- const candyCount = starterData.candyCount;
+
const passiveAttr = starterData.passiveAttr;
if (passiveAttr & PassiveAttr.UNLOCKED) { // this is for enabling and disabling the passive
if (!(passiveAttr & PassiveAttr.ENABLED)) {
@@ -1700,8 +1718,13 @@ export default class StarterSelectUiHandler extends MessageUiHandler {
return true;
}
});
- const showUseCandies = () => { // this lets you use your candies
+
+ // Purchases with Candy
+ const candyCount = starterData.candyCount;
+ const showUseCandies = () => {
const options: any[] = []; // TODO: add proper type
+
+ // Unlock passive option
if (!(passiveAttr & PassiveAttr.UNLOCKED)) {
const passiveCost = getPassiveCandyCount(speciesStarters[this.lastSpecies.speciesId]);
options.push({
@@ -1719,18 +1742,12 @@ export default class StarterSelectUiHandler extends MessageUiHandler {
}
});
ui.setMode(Mode.STARTER_SELECT);
- this.setSpeciesDetails(this.lastSpecies, undefined, undefined, undefined, undefined, undefined, undefined);
+ this.setSpeciesDetails(this.lastSpecies);
+ this.scene.playSound("se/buy");
- // if starterContainer exists, update the passive background
+ // update the passive background and icon/animation for available upgrade
if (starterContainer) {
- // Update the candy upgrade display
- if (this.isUpgradeIconEnabled() ) {
- this.setUpgradeIcon(starterContainer);
- }
- if (this.isUpgradeAnimationEnabled()) {
- this.setUpgradeAnimation(starterContainer.icon, this.lastSpecies, true);
- }
-
+ this.updateCandyUpgradeDisplay(starterContainer);
starterContainer.starterPassiveBgs.setVisible(!!this.scene.gameData.starterData[this.lastSpecies.speciesId].passiveAttr);
}
return true;
@@ -1741,6 +1758,8 @@ export default class StarterSelectUiHandler extends MessageUiHandler {
itemArgs: starterColors[this.lastSpecies.speciesId]
});
}
+
+ // Reduce cost option
const valueReduction = starterData.valueReduction;
if (valueReduction < valueReductionMax) {
const reductionCost = getValueReductionCandyCounts(speciesStarters[this.lastSpecies.speciesId])[valueReduction];
@@ -1762,19 +1781,10 @@ export default class StarterSelectUiHandler extends MessageUiHandler {
ui.setMode(Mode.STARTER_SELECT);
this.scene.playSound("se/buy");
- // if starterContainer exists, update the value reduction background
+ // update the value label and icon/animation for available upgrade
if (starterContainer) {
this.updateStarterValueLabel(starterContainer);
-
- // If the notification setting is set to 'On', update the candy upgrade display
- if (this.scene.candyUpgradeNotification === 2) {
- if (this.isUpgradeIconEnabled() ) {
- this.setUpgradeIcon(starterContainer);
- }
- if (this.isUpgradeAnimationEnabled()) {
- this.setUpgradeAnimation(starterContainer.icon, this.lastSpecies, true);
- }
- }
+ this.updateCandyUpgradeDisplay(starterContainer);
}
return true;
}
@@ -1807,6 +1817,11 @@ export default class StarterSelectUiHandler extends MessageUiHandler {
ui.setMode(Mode.STARTER_SELECT);
this.scene.playSound("se/buy");
+ // update the icon/animation for available upgrade
+ if (starterContainer) {
+ this.updateCandyUpgradeDisplay(starterContainer);
+ }
+
return true;
}
return false;
@@ -1921,6 +1936,14 @@ export default class StarterSelectUiHandler extends MessageUiHandler {
}
} while (newAbilityIndex !== this.abilityCursor);
starterAttributes.ability = newAbilityIndex; // store the selected ability
+
+ const { visible: tooltipVisible } = this.scene.ui.getTooltip();
+
+ if (tooltipVisible && this.activeTooltip === "ABILITY") {
+ const newAbility = allAbilities[this.lastSpecies.getAbility(newAbilityIndex)];
+ this.scene.ui.editTooltip(`${newAbility.name}`, `${newAbility.description}`);
+ }
+
this.setSpeciesDetails(this.lastSpecies, undefined, undefined, undefined, undefined, newAbilityIndex, undefined);
success = true;
}
@@ -2687,12 +2710,30 @@ export default class StarterSelectUiHandler extends MessageUiHandler {
}
}
+ getFriendship(speciesId: number) {
+ let currentFriendship = this.scene.gameData.starterData[speciesId].friendship;
+ if (!currentFriendship || currentFriendship === undefined) {
+ currentFriendship = 0;
+ }
+
+ const friendshipCap = getStarterValueFriendshipCap(speciesStarters[speciesId]);
+
+ return { currentFriendship, friendshipCap };
+ }
+
setSpecies(species: PokemonSpecies | null) {
this.speciesStarterDexEntry = species ? this.scene.gameData.dexData[species.speciesId] : null;
this.dexAttrCursor = species ? this.getCurrentDexProps(species.speciesId) : 0n;
this.abilityCursor = species ? this.scene.gameData.getStarterSpeciesDefaultAbilityIndex(species) : 0;
this.natureCursor = species ? this.scene.gameData.getSpeciesDefaultNature(species) : 0;
+ if (!species && this.scene.ui.getTooltip().visible) {
+ this.scene.ui.hideTooltip();
+ }
+
+ this.pokemonAbilityText.off("pointerover");
+ this.pokemonPassiveText.off("pointerover");
+
const starterAttributes : StarterAttributes | null = species ? {...this.starterPreferences[species.speciesId]} : null;
if (starterAttributes?.nature) {
@@ -2807,17 +2848,18 @@ export default class StarterSelectUiHandler extends MessageUiHandler {
this.pokemonHatchedIcon.setVisible(true);
this.pokemonHatchedCountText.setVisible(true);
- let currentFriendship = this.scene.gameData.starterData[this.lastSpecies.speciesId].friendship;
- if (!currentFriendship || currentFriendship === undefined) {
- currentFriendship = 0;
- }
-
- const friendshipCap = getStarterValueFriendshipCap(speciesStarters[this.lastSpecies.speciesId]);
+ const { currentFriendship, friendshipCap } = this.getFriendship(this.lastSpecies.speciesId);
const candyCropY = 16 - (16 * (currentFriendship / friendshipCap));
if (this.pokemonCandyDarknessOverlay.visible) {
- this.pokemonCandyDarknessOverlay.on("pointerover", () => (this.scene as BattleScene).ui.showTooltip("", `${currentFriendship}/${friendshipCap}`, true));
- this.pokemonCandyDarknessOverlay.on("pointerout", () => (this.scene as BattleScene).ui.hideTooltip());
+ this.pokemonCandyDarknessOverlay.on("pointerover", () => {
+ this.scene.ui.showTooltip("", `${currentFriendship}/${friendshipCap}`, true);
+ this.activeTooltip = "CANDY";
+ });
+ this.pokemonCandyDarknessOverlay.on("pointerout", () => {
+ this.scene.ui.hideTooltip();
+ this.activeTooltip = undefined;
+ });
}
this.pokemonCandyDarknessOverlay.setCrop(0, 0, 16, candyCropY);
@@ -2932,6 +2974,11 @@ export default class StarterSelectUiHandler extends MessageUiHandler {
this.abilityCursor = -1;
this.natureCursor = -1;
+ if (this.activeTooltip === "CANDY") {
+ const { currentFriendship, friendshipCap } = this.getFriendship(this.lastSpecies.speciesId);
+ this.scene.ui.editTooltip("", `${currentFriendship}/${friendshipCap}`);
+ }
+
if (species?.forms?.find(f => f.formKey === "female")) {
if (female !== undefined) {
formIndex = female ? 1 : 0;
@@ -3081,8 +3128,8 @@ export default class StarterSelectUiHandler extends MessageUiHandler {
}
if (dexEntry.caughtAttr) {
- const ability = this.lastSpecies.getAbility(abilityIndex!); // TODO: is this bang correct?
- this.pokemonAbilityText.setText(allAbilities[ability].name);
+ const ability = allAbilities[this.lastSpecies.getAbility(abilityIndex!)]; // TODO: is this bang correct?
+ this.pokemonAbilityText.setText(ability.name);
const isHidden = abilityIndex === (this.lastSpecies.ability2 ? 2 : 1);
this.pokemonAbilityText.setColor(this.getTextColor(!isHidden ? TextStyle.SUMMARY_ALT : TextStyle.SUMMARY_GOLD));
@@ -3091,6 +3138,21 @@ export default class StarterSelectUiHandler extends MessageUiHandler {
const passiveAttr = this.scene.gameData.starterData[species.speciesId].passiveAttr;
const passiveAbility = allAbilities[starterPassiveAbilities[this.lastSpecies.speciesId]];
+ if (this.pokemonAbilityText.visible) {
+ if (this.activeTooltip === "ABILITY") {
+ this.scene.ui.editTooltip(`${ability.name}`, `${ability.description}`);
+ }
+
+ this.pokemonAbilityText.on("pointerover", () => {
+ this.scene.ui.showTooltip(`${ability.name}`, `${ability.description}`, true);
+ this.activeTooltip = "ABILITY";
+ });
+ this.pokemonAbilityText.on("pointerout", () => {
+ this.scene.ui.hideTooltip();
+ this.activeTooltip = undefined;
+ });
+ }
+
if (passiveAbility) {
const isUnlocked = !!(passiveAttr & PassiveAttr.UNLOCKED);
const isEnabled = !!(passiveAttr & PassiveAttr.ENABLED);
@@ -3107,6 +3169,21 @@ export default class StarterSelectUiHandler extends MessageUiHandler {
this.pokemonPassiveText.setAlpha(textAlpha);
this.pokemonPassiveText.setShadowColor(this.getTextColor(textStyle, true));
+ if (this.activeTooltip === "PASSIVE") {
+ this.scene.ui.editTooltip(`${passiveAbility.name}`, `${passiveAbility.description}`);
+ }
+
+ if (this.pokemonPassiveText.visible) {
+ this.pokemonPassiveText.on("pointerover", () => {
+ this.scene.ui.showTooltip(`${passiveAbility.name}`, `${passiveAbility.description}`, true);
+ this.activeTooltip = "PASSIVE";
+ });
+ this.pokemonPassiveText.on("pointerout", () => {
+ this.scene.ui.hideTooltip();
+ this.activeTooltip = undefined;
+ });
+ }
+
const iconPosition = {
x: this.pokemonPassiveText.x + this.pokemonPassiveText.displayWidth + 1,
y: this.pokemonPassiveText.y + this.pokemonPassiveText.displayHeight / 2
diff --git a/src/ui/ui.ts b/src/ui/ui.ts
index 6c988b43043..82b3ee6b4fa 100644
--- a/src/ui/ui.ts
+++ b/src/ui/ui.ts
@@ -52,6 +52,7 @@ import RunInfoUiHandler from "./run-info-ui-handler";
import EggSummaryUiHandler from "./egg-summary-ui-handler";
import TestDialogueUiHandler from "#app/ui/test-dialogue-ui-handler";
import AutoCompleteUiHandler from "./autocomplete-ui-handler";
+import { Device } from "#enums/devices";
export enum Mode {
MESSAGE,
@@ -244,7 +245,7 @@ export default class UI extends Phaser.GameObjects.Container {
this.tooltipContent = addTextObject(this.scene, 6, 16, "", TextStyle.TOOLTIP_CONTENT);
this.tooltipContent.setName("text-tooltip-content");
- this.tooltipContent.setWordWrapWidth(696);
+ this.tooltipContent.setWordWrapWidth(850);
this.tooltipContainer.add(this.tooltipBg);
this.tooltipContainer.add(this.tooltipTitle);
@@ -289,6 +290,12 @@ export default class UI extends Phaser.GameObjects.Container {
return handler.processInput(button);
}
+ showTextPromise(text: string, callbackDelay: number = 0, prompt: boolean = true, promptDelay?: integer | null): Promise {
+ return new Promise(resolve => {
+ this.showText(text ?? "", null, () => resolve(), callbackDelay, prompt, promptDelay);
+ });
+ }
+
showText(text: string, delay?: integer | null, callback?: Function | null, callbackDelay?: integer | null, prompt?: boolean | null, promptDelay?: integer | null): void {
if (prompt && text.indexOf("$") > -1) {
const messagePages = text.split(/\$/g).map(m => m.trim());
@@ -362,14 +369,13 @@ export default class UI extends Phaser.GameObjects.Container {
return false;
}
+ getTooltip(): { visible: boolean; title: string; content: string } {
+ return { visible: this.tooltipContainer.visible, title: this.tooltipTitle.text, content: this.tooltipContent.text };
+ }
+
showTooltip(title: string, content: string, overlap?: boolean): void {
this.tooltipContainer.setVisible(true);
- this.tooltipTitle.setText(title || "");
- const wrappedContent = this.tooltipContent.runWordWrap(content);
- this.tooltipContent.setText(wrappedContent);
- this.tooltipContent.y = title ? 16 : 4;
- this.tooltipBg.width = Math.min(Math.max(this.tooltipTitle.displayWidth, this.tooltipContent.displayWidth) + 12, 684);
- this.tooltipBg.height = (title ? 31 : 19) + 10.5 * (wrappedContent.split("\n").length - 1);
+ this.editTooltip(title, content);
if (overlap) {
(this.scene as BattleScene).uiContainer.moveAbove(this.tooltipContainer, this);
} else {
@@ -377,6 +383,15 @@ export default class UI extends Phaser.GameObjects.Container {
}
}
+ editTooltip(title: string, content: string): void {
+ this.tooltipTitle.setText(title || "");
+ const wrappedContent = this.tooltipContent.runWordWrap(content);
+ this.tooltipContent.setText(wrappedContent);
+ this.tooltipContent.y = title ? 16 : 4;
+ this.tooltipBg.width = Math.min(Math.max(this.tooltipTitle.displayWidth, this.tooltipContent.displayWidth) + 12, 838);
+ this.tooltipBg.height = (title ? 31 : 19) + 10.5 * (wrappedContent.split("\n").length - 1);
+ }
+
hideTooltip(): void {
this.tooltipContainer.setVisible(false);
this.tooltipTitle.clearTint();
@@ -384,8 +399,12 @@ export default class UI extends Phaser.GameObjects.Container {
update(): void {
if (this.tooltipContainer.visible) {
- const reverse = this.scene.game.input.mousePointer && this.scene.game.input.mousePointer.x >= this.scene.game.canvas.width - this.tooltipBg.width * 6 - 12;
- this.tooltipContainer.setPosition(!reverse ? this.scene.game.input.mousePointer!.x / 6 + 2 : this.scene.game.input.mousePointer!.x / 6 - this.tooltipBg.width - 2, this.scene.game.input.mousePointer!.y / 6 + 2); // TODO: are these bangs correct?
+ const xReverse = this.scene.game.input.mousePointer && this.scene.game.input.mousePointer.x >= this.scene.game.canvas.width - this.tooltipBg.width * 6 - 12;
+ const yReverse = this.scene.game.input.mousePointer && this.scene.game.input.mousePointer.y >= this.scene.game.canvas.height - this.tooltipBg.height * 6 - 12;
+ this.tooltipContainer.setPosition(
+ !xReverse ? this.scene.game.input.mousePointer!.x / 6 + 2 : this.scene.game.input.mousePointer!.x / 6 - this.tooltipBg.width - 2,
+ !yReverse ? this.scene.game.input.mousePointer!.y / 6 + 2 : this.scene.game.input.mousePointer!.y / 6 - this.tooltipBg.height - 2,
+ );
}
}
@@ -560,4 +579,20 @@ export default class UI extends Phaser.GameObjects.Container {
public getModeChain(): Mode[] {
return this.modeChain;
}
+
+ /**
+ * getGamepadType - returns the type of gamepad being used
+ * inputMethod could be "keyboard" or "touch" or "gamepad"
+ * if inputMethod is "keyboard" or "touch", then the inputMethod is returned
+ * if inputMethod is "gamepad", then the gamepad type is returned it could be "xbox" or "dualshock"
+ * @returns gamepad type
+ */
+ public getGamepadType(): string {
+ const scene = this.scene as BattleScene;
+ if (scene.inputMethod === "gamepad") {
+ return scene.inputController.getConfig(scene.inputController.selectedDevice[Device.GAMEPAD]).padType;
+ } else {
+ return scene.inputMethod;
+ }
+ }
}
diff --git a/src/utils.ts b/src/utils.ts
index 592981c7643..7decf9bb4c0 100644
--- a/src/utils.ts
+++ b/src/utils.ts
@@ -609,3 +609,14 @@ export function toDmgValue(value: number, minValue: number = 1) {
export function getLocalizedSpriteKey(baseKey: string) {
return `${baseKey}${verifyLang(i18next.resolvedLanguage) ? `_${i18next.resolvedLanguage}` : ""}`;
}
+
+/**
+ * Check if a number is **inclusive** between two numbers
+ * @param num the number to check
+ * @param min the minimum value (included)
+ * @param max the maximum value (included)
+ * @returns true if number is **inclusive** between min and max
+ */
+export function isBetween(num: number, min: number, max: number): boolean {
+ return num >= min && num <= max;
+}
diff --git a/vitest.config.ts b/vitest.config.ts
index 9a765a89ae7..54462675704 100644
--- a/vitest.config.ts
+++ b/vitest.config.ts
@@ -1,46 +1,42 @@
-import { defineProject, UserWorkspaceConfig } from 'vitest/config';
-import { defaultConfig } from './vite.config';
-
-export const defaultProjectTestConfig: UserWorkspaceConfig["test"] = {
- setupFiles: ['./src/test/vitest.setup.ts'],
- server: {
- deps: {
- inline: ['vitest-canvas-mock'],
- //@ts-ignore
- optimizer: {
- web: {
- include: ['vitest-canvas-mock'],
- }
- }
- }
- },
- environment: 'jsdom' as const,
- environmentOptions: {
- jsdom: {
- resources: 'usable',
- },
- },
- threads: false,
- trace: true,
- restoreMocks: true,
- watch: false,
- coverage: {
- provider: 'istanbul' as const,
- reportsDirectory: 'coverage' as const,
- reporters: ['text-summary', 'html'],
- },
-}
+import { defineProject } from "vitest/config";
+import { defaultConfig } from "./vite.config";
export default defineProject(({ mode }) => ({
- ...defaultConfig,
- test: {
- ...defaultProjectTestConfig,
- name: "main",
- include: ["./src/test/**/*.{test,spec}.ts"],
- exclude: ["./src/test/pre.test.ts"],
- },
- esbuild: {
- pure: mode === 'production' ? [ 'console.log' ] : [],
- keepNames: true,
- },
-}))
+ ...defaultConfig,
+ test: {
+ setupFiles: ["./src/test/fontFace.setup.ts", "./src/test/vitest.setup.ts"],
+ server: {
+ deps: {
+ inline: ["vitest-canvas-mock"],
+ //@ts-ignore
+ optimizer: {
+ web: {
+ include: ["vitest-canvas-mock"],
+ },
+ },
+ },
+ },
+ environment: "jsdom" as const,
+ environmentOptions: {
+ jsdom: {
+ resources: "usable",
+ },
+ },
+ threads: false,
+ trace: true,
+ restoreMocks: true,
+ watch: false,
+ coverage: {
+ provider: "istanbul" as const,
+ reportsDirectory: "coverage" as const,
+ reporters: ["text-summary", "html"],
+ },
+ name: "main",
+ include: ["./src/test/**/*.{test,spec}.ts"],
+ exclude: ["./src/test/pre.test.ts"],
+ },
+ esbuild: {
+ pure: mode === "production" ? ["console.log"] : [],
+ keepNames: true,
+ },
+}));
diff --git a/vitest.workspace.ts b/vitest.workspace.ts
index a885b77dc9d..38121942004 100644
--- a/vitest.workspace.ts
+++ b/vitest.workspace.ts
@@ -1,6 +1,5 @@
import { defineWorkspace } from "vitest/config";
import { defaultConfig } from "./vite.config";
-import { defaultProjectTestConfig } from "./vitest.config";
export default defineWorkspace([
{
@@ -11,58 +10,5 @@ export default defineWorkspace([
environment: "jsdom",
},
},
- {
- ...defaultConfig,
- test: {
- ...defaultProjectTestConfig,
- name: "misc",
- include: [
- "src/test/achievements/**/*.{test,spec}.ts",
- "src/test/arena/**/*.{test,spec}.ts",
- "src/test/battlerTags/**/*.{test,spec}.ts",
- "src/test/eggs/**/*.{test,spec}.ts",
- "src/test/field/**/*.{test,spec}.ts",
- "src/test/inputs/**/*.{test,spec}.ts",
- "src/test/localization/**/*.{test,spec}.ts",
- "src/test/phases/**/*.{test,spec}.ts",
- "src/test/settingMenu/**/*.{test,spec}.ts",
- "src/test/sprites/**/*.{test,spec}.ts",
- "src/test/ui/**/*.{test,spec}.ts",
- "src/test/*.{test,spec}.ts",
- ],
- },
- },
- {
- ...defaultConfig,
- test: {
- ...defaultProjectTestConfig,
- name: "abilities",
- include: ["src/test/abilities/**/*.{test,spec}.ts"],
- },
- },
- {
- ...defaultConfig,
- test: {
- ...defaultProjectTestConfig,
- name: "battle",
- include: ["src/test/battle/**/*.{test,spec}.ts"],
- },
- },
- {
- ...defaultConfig,
- test: {
- ...defaultProjectTestConfig,
- name: "items",
- include: ["src/test/items/**/*.{test,spec}.ts"],
- },
- },
- {
- ...defaultConfig,
- test: {
- ...defaultProjectTestConfig,
- name: "moves",
- include: ["src/test/moves/**/*.{test,spec}.ts"],
- },
- },
"./vitest.config.ts",
]);