From 34058a57ed60b22171bd9818e127034cd84bcf77 Mon Sep 17 00:00:00 2001 From: AJ Fontaine <36677462+Fontbane@users.noreply.github.com> Date: Wed, 3 Jul 2024 15:36:00 -0400 Subject: [PATCH 01/37] Don't apply Classic bonus to friendship decreases (#2552) --- src/field/pokemon.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/field/pokemon.ts b/src/field/pokemon.ts index b31cdae9b1c..b76717d7d44 100644 --- a/src/field/pokemon.ts +++ b/src/field/pokemon.ts @@ -3112,7 +3112,7 @@ export class PlayerPokemon extends Pokemon { fusionStarterSpeciesId ? this.scene.gameData.starterData[fusionStarterSpeciesId] : null ].filter(d => d); const amount = new Utils.IntegerHolder(friendship); - const starterAmount = new Utils.IntegerHolder(Math.floor(friendship * (this.scene.gameMode.isClassic ? 2 : 1) / (fusionStarterSpeciesId ? 2 : 1))); + const starterAmount = new Utils.IntegerHolder(Math.floor(friendship * (this.scene.gameMode.isClassic && friendship > 0 ? 2 : 1) / (fusionStarterSpeciesId ? 2 : 1))); if (amount.value > 0) { this.scene.applyModifier(PokemonFriendshipBoosterModifier, true, this, amount); this.scene.applyModifier(PokemonFriendshipBoosterModifier, true, this, starterAmount); From e42c329adf14d0120ae9b3b096d5060f08a6ca8e Mon Sep 17 00:00:00 2001 From: Frederico Santos Date: Wed, 3 Jul 2024 22:01:32 +0200 Subject: [PATCH 02/37] [Beta] Add deployment workflow for beta environment (#2595) * feat: Add deployment workflow for beta environment This commit adds a new GitHub Actions workflow file, deploy-beta.yml, which is responsible for deploying the application to the beta environment. The workflow is triggered on push and pull request events. It checks if the repository is 'pagefaultgames/pokerogue' before running the deployment steps. The deployment includes checking out the code, setting up the Node.js environment, installing dependencies, building the application, setting up SSH for secure communication, deploying the build on the server using rsync, and purging the Cloudflare cache. The deployment is only performed when the push event is triggered on the default branch. It also changes the deploy.yml workflow to be triggered only when a release is generated. * feat: Update deployment workflow for beta environment * Update deploy-beta name * chore: Update deploy-beta.yml to use 'f-fsantos:beta-environment' as the ref name * chore: Update deploy-beta.yml to use 'f-fsantos:beta-environment' as the ref name * chore: Update deploy-beta.yml to use '2595/merge' as the ref name * chore: Update deploy-beta.yml to include event name in deployment message * chore: Update deploy-beta.yml to use 'pull_request' event and '2595/merge' as the ref name * chore: Update deploy-beta.yml to include SSH public key * chore: Update deploy-beta.yml to include SSH public key --------- Co-authored-by: Temps Ray --- .env.beta | 3 +++ .env.production | 3 +++ .github/workflows/deploy-beta.yml | 33 +++++++++++++++++++++++++++++++ package.json | 1 + src/utils.ts | 3 +-- 5 files changed, 41 insertions(+), 2 deletions(-) create mode 100644 .env.beta create mode 100644 .env.production create mode 100644 .github/workflows/deploy-beta.yml diff --git a/.env.beta b/.env.beta new file mode 100644 index 00000000000..8d1e93b3277 --- /dev/null +++ b/.env.beta @@ -0,0 +1,3 @@ +VITE_BYPASS_LOGIN=0 +VITE_BYPASS_TUTORIAL=0 +VITE_SERVER_URL=https://api.beta.pokerogue.net \ No newline at end of file diff --git a/.env.production b/.env.production new file mode 100644 index 00000000000..74818d41a12 --- /dev/null +++ b/.env.production @@ -0,0 +1,3 @@ +VITE_BYPASS_LOGIN=0 +VITE_BYPASS_TUTORIAL=0 +VITE_SERVER_URL=https://api.pokerogue.net \ No newline at end of file diff --git a/.github/workflows/deploy-beta.yml b/.github/workflows/deploy-beta.yml new file mode 100644 index 00000000000..d954d9bb865 --- /dev/null +++ b/.github/workflows/deploy-beta.yml @@ -0,0 +1,33 @@ +name: Deploy Beta + +on: + push: {} + pull_request: {} + +jobs: + deploy: + if: github.repository == 'pagefaultgames/pokerogue' + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-node@v4 + with: + node-version: "20" + - name: Install dependencies + run: npm ci + - name: Build + run: npm run build:beta + env: + NODE_ENV: production + - name: Set up SSH + if: github.event_name == 'push' && github.ref_name == github.event.repository.default_branch + run: | + mkdir ~/.ssh + echo "${{ secrets.BETA_SSH_PUBLIC_KEY }}" > ~/.ssh/id_ed25519.pub + echo "${{ secrets.BETA_SSH_PRIVATE_KEY }}" > ~/.ssh/id_ed25519 + chmod 600 ~/.ssh/* + ssh-keyscan -H ${{ secrets.BETA_SSH_HOST }} >> ~/.ssh/known_hosts + - name: Deploy build on server + if: github.event_name == 'push' && github.ref_name == github.event.repository.default_branch + run: | + rsync --del --no-times --checksum -vrm dist/* ${{ secrets.BETA_SSH_USER }}@${{ secrets.BETA_SSH_HOST }}:${{ secrets.BETA_DESTINATION_DIR }} \ No newline at end of file diff --git a/package.json b/package.json index 29a956f19c6..160ca965bc8 100644 --- a/package.json +++ b/package.json @@ -7,6 +7,7 @@ "start": "vite", "start:dev": "vite --mode development", "build": "vite build", + "build:beta": "vite build --mode beta", "preview": "vite preview", "test": "vitest run", "test:cov": "vitest run --coverage", diff --git a/src/utils.ts b/src/utils.ts index 5a67df314d2..5aa558bae3a 100644 --- a/src/utils.ts +++ b/src/utils.ts @@ -288,8 +288,7 @@ export const isLocal = ( export const localServerUrl = import.meta.env.VITE_SERVER_URL ?? `http://${window.location.hostname}:${window.location.port+1}`; // Set the server URL based on whether it's local or not -export const serverUrl = isLocal ? localServerUrl : ""; -export const apiUrl = isLocal ? serverUrl : "https://api.pokerogue.net"; +export const apiUrl = localServerUrl ?? "https://api.pokerogue.net"; // used to disable api calls when isLocal is true and a server is not found export let isLocalServerConnected = true; From f4a1c83a7ddff97895747d4129891f22a64b832b Mon Sep 17 00:00:00 2001 From: Xavion3 Date: Thu, 4 Jul 2024 06:37:23 +1000 Subject: [PATCH 03/37] Fix several incorrect movesets (#2776) --- src/data/pokemon-level-moves.ts | 31 +++++++++++++++++++++++-------- 1 file changed, 23 insertions(+), 8 deletions(-) diff --git a/src/data/pokemon-level-moves.ts b/src/data/pokemon-level-moves.ts index b212ea413a3..9f1f95e42ff 100644 --- a/src/data/pokemon-level-moves.ts +++ b/src/data/pokemon-level-moves.ts @@ -3488,6 +3488,10 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 0, Moves.DESTINY_BOND ], [ 0, Moves.SAFEGUARD ], [ 0, Moves.MIRROR_COAT ], + [ 1, Moves.COUNTER ], + [ 1, Moves.DESTINY_BOND ], + [ 1, Moves.SAFEGUARD ], + [ 1, Moves.MIRROR_COAT ], [ 1, Moves.AMNESIA ], [ 1, Moves.SPLASH ], [ 1, Moves.CHARM ], @@ -14125,6 +14129,9 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 0, Moves.CONFUSION ], [ 0, Moves.LIGHT_SCREEN ], [ 0, Moves.REFLECT ], + [ 1, Moves.CONFUSION ], + [ 1, Moves.LIGHT_SCREEN ], + [ 1, Moves.REFLECT ], [ 1, Moves.STRUGGLE_BUG ], ], [Species.ORBEETLE]: [ @@ -17169,10 +17176,12 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 98, Moves.HYPER_BEAM ], ], [Species.WALKING_WAKE]: [ - [ 0, Moves.LEER ], - [ 0, Moves.ROAR ], - [ 0, Moves.TWISTER ], - [ 0, Moves.AQUA_JET ], + [ -1, Moves.SUNNY_DAY ], + [ -1, Moves.HONE_CLAWS ], + [ 1, Moves.LEER ], + [ 1, Moves.ROAR ], + [ 1, Moves.TWISTER ], + [ 1, Moves.AQUA_JET ], [ 7, Moves.BITE ], [ 14, Moves.WATER_PULSE ], [ 21, Moves.NOBLE_ROAR ], @@ -17186,10 +17195,12 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 84, Moves.HYDRO_PUMP ], ], [Species.IRON_LEAVES]: [ - [ 0, Moves.LEER ], - [ 0, Moves.QUICK_ATTACK ], - [ 0, Moves.HELPING_HAND ], - [ 0, Moves.WORK_UP ], + [ -1, Moves.ELECTRIC_TERRAIN ], + [ -1, Moves.QUASH ], + [ 1, Moves.LEER ], + [ 1, Moves.QUICK_ATTACK ], + [ 1, Moves.HELPING_HAND ], + [ 1, Moves.WORK_UP ], [ 7, Moves.MAGICAL_LEAF ], [ 14, Moves.RETALIATE ], [ 21, Moves.QUICK_GUARD ], @@ -17353,6 +17364,9 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 54, Moves.POWER_WHIP ], ], [Species.GOUGING_FIRE]: [ + [ -1, Moves.DOUBLE_KICK ], + [ -1, Moves.ANCIENT_POWER ], + [ -1, Moves.NOBLE_ROAR ], [ 1, Moves.STOMP ], [ 1, Moves.LEER ], [ 1, Moves.INCINERATE ], @@ -17372,6 +17386,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 91, Moves.RAGING_FURY ], ], [Species.RAGING_BOLT]: [ + [ -1, Moves.ANCIENT_POWER ], [ 1, Moves.TWISTER ], [ 1, Moves.SUNNY_DAY ], [ 1, Moves.SHOCK_WAVE ], From a6091de5df81f9b82ca2f7a6c83dce92ff52b068 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Ricardo=20Fleury=20Oliveira?= Date: Thu, 4 Jul 2024 00:53:14 -0300 Subject: [PATCH 04/37] Update translation for "Lax" to "Frouxa" (#2784) --- src/locales/pt_BR/nature.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/locales/pt_BR/nature.ts b/src/locales/pt_BR/nature.ts index 976778bd1cb..fc906fde6ef 100644 --- a/src/locales/pt_BR/nature.ts +++ b/src/locales/pt_BR/nature.ts @@ -10,7 +10,7 @@ export const nature: SimpleTranslationEntries = { "Docile": "Dócil", "Relaxed": "Relaxada", "Impish": "Inquieta", - "Lax": "Relaxada", + "Lax": "Frouxa", "Timid": "Tímida", "Hasty": "Apressada", "Serious": "Séria", From 49e5ad764c90a38d3d53cc24aa74baa92e1edfe7 Mon Sep 17 00:00:00 2001 From: Xavion3 Date: Thu, 4 Jul 2024 14:28:02 +1000 Subject: [PATCH 05/37] Let eternatus keep stat changes when changing form (#2728) --- src/form-change-phase.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/src/form-change-phase.ts b/src/form-change-phase.ts index 7d4e8349775..ebf91c635fd 100644 --- a/src/form-change-phase.ts +++ b/src/form-change-phase.ts @@ -280,7 +280,6 @@ export class QuietFormChangePhase extends BattlePhase { end(): void { if (this.pokemon.scene?.currentBattle.battleSpec === BattleSpec.FINAL_BOSS && this.pokemon instanceof EnemyPokemon) { this.scene.playBgm(); - this.pokemon.summonData.battleStats = [ 0, 0, 0, 0, 0, 0, 0 ]; this.scene.unshiftPhase(new PokemonHealPhase(this.scene, this.pokemon.getBattlerIndex(), this.pokemon.getMaxHp(), null, false, false, false, true)); this.pokemon.findAndRemoveTags(() => true); this.pokemon.bossSegments = 5; From dac3f769797f473b8c512f4dbd62f54e7d0af616 Mon Sep 17 00:00:00 2001 From: mercurius-00 <80205689+mercurius-00@users.noreply.github.com> Date: Thu, 4 Jul 2024 13:22:17 +0800 Subject: [PATCH 06/37] [Localization] fix line break for zh-cn moves (#2786) --- src/locales/zh_CN/move.ts | 1740 ++++++++++++++++++------------------- 1 file changed, 870 insertions(+), 870 deletions(-) diff --git a/src/locales/zh_CN/move.ts b/src/locales/zh_CN/move.ts index f75ca001548..a444a59a3ff 100644 --- a/src/locales/zh_CN/move.ts +++ b/src/locales/zh_CN/move.ts @@ -3,19 +3,19 @@ import { MoveTranslationEntries } from "#app/interfaces/locales"; export const move: MoveTranslationEntries = { "pound": { name: "拍击", - effect: "使用长长的尾巴或手等拍打\n对手进行攻击", + effect: "使用长长的尾巴或手等拍打对手进行攻击", }, "karateChop": { name: "空手劈", - effect: "用锋利的手刀劈向对手进行\n攻击。容易击中要害", + effect: "用锋利的手刀劈向对手进行攻击。\n容易击中要害", }, "doubleSlap": { name: "连环巴掌", - effect: "用连环巴掌拍打对手进行攻\n击。连续攻击2~5次", + effect: "用连环巴掌拍打对手进行攻击。\n连续攻击2~5次", }, "cometPunch": { name: "连续拳", - effect: "用拳头怒涛般的殴打对手进\n行攻击。连续攻击2~5次", + effect: "用拳头怒涛般的殴打对手进行攻击。\n连续攻击2~5次", }, "megaPunch": { name: "百万吨重拳", @@ -23,35 +23,35 @@ export const move: MoveTranslationEntries = { }, "payDay": { name: "聚宝功", - effect: "向对手的身体投掷小金币进\n行攻击。战斗后可以拿到钱", + effect: "向对手的身体投掷小金币进行攻击。\n战斗后可以拿到钱", }, "firePunch": { name: "火焰拳", - effect: "用充满火焰的拳头攻击对手。\n有时会让对手陷入灼伤状\n态", + effect: "用充满火焰的拳头攻击对手。\n有时会让对手陷入灼伤状态", }, "icePunch": { name: "冰冻拳", - effect: "用充满寒气的拳头攻击对手。\n有时会让对手陷入冰冻状\n态", + effect: "用充满寒气的拳头攻击对手。\n有时会让对手陷入冰冻状态", }, "thunderPunch": { name: "雷电拳", - effect: "用充满电流的拳头攻击对手。\n有时会让对手陷入麻痹状\n态", + effect: "用充满电流的拳头攻击对手。\n有时会让对手陷入麻痹状态", }, "scratch": { name: "抓", - effect: "用坚硬且无比锋利的爪子抓\n对手进行攻击", + effect: "用坚硬且无比锋利的爪子抓对手进行攻击", }, "viseGrip": { name: "夹住", - effect: "将对手从两侧夹住,给予伤\n害", + effect: "将对手从两侧夹住,给予伤害", }, "guillotine": { name: "极落钳", - effect: "用大钳子或剪刀等夹断对手\n进行攻击。只要命中就会一\n击昏厥", + effect: "用大钳子或剪刀等夹断对手进行攻击。\n只要命中就会一击昏厥", }, "razorWind": { name: "旋风刀", - effect: "制造风之刃,于第2回合攻\n击对手。容易击中要害", + effect: "制造风之刃,于第2回合攻击对手。\n容易击中要害", }, "swordsDance": { name: "剑舞", @@ -59,35 +59,35 @@ export const move: MoveTranslationEntries = { }, "cut": { name: "居合劈", - effect: "用镰刀或爪子等切斩对手进\n行攻击", + effect: "用镰刀或爪子等切斩对手进行攻击", }, "gust": { name: "起风", - effect: "用翅膀将刮起的狂风袭向对\n手进行攻击", + effect: "用翅膀将刮起的狂风袭向对手进行攻击", }, "wingAttack": { name: "翅膀攻击", - effect: "大大地展开美丽的翅膀,将\n其撞向对手进行攻击", + effect: "大大地展开美丽的翅膀,\n将其撞向对手进行攻击", }, "whirlwind": { name: "吹飞", - effect: "吹飞对手,强制拉后备宝可\n梦上场。如果对手为野生宝\n可梦,战斗将直接结束", + effect: "吹飞对手,强制拉后备宝可梦上场。\n如果对手为野生宝可梦,\n战斗将直接结束", }, "fly": { name: "飞翔", - effect: "第1回合飞上天空,第2回\n合攻击对手", + effect: "第1回合飞上天空,第2回合攻击对手", }, "bind": { name: "绑紧", - effect: "使用长长的身体或藤蔓等,\n在4~5回合内绑紧对手进\n行攻击", + effect: "使用长长的身体或藤蔓等,\n在4~5回合内绑紧对手进行攻击", }, "slam": { name: "摔打", - effect: "使用长长的尾巴或藤蔓等摔\n打对手进行攻击", + effect: "使用长长的尾巴或藤蔓等摔打对手\n进行攻击", }, "vineWhip": { name: "藤鞭", - effect: "用如同鞭子般弯曲而细长的\n藤蔓摔打对手进行攻击", + effect: "用如同鞭子般弯曲而细长的藤蔓摔\n打对手进行攻击", }, "stomp": { name: "踩踏", @@ -99,23 +99,23 @@ export const move: MoveTranslationEntries = { }, "megaKick": { name: "百万吨重踢", - effect: "使出力大无穷的重踢踢飞对\n手进行攻击", + effect: "使出力大无穷的重踢踢飞对手进行攻击", }, "jumpKick": { name: "飞踢", - effect: "使出高高的腾空踢攻击对手。\n如果踢偏则自己会受到伤\n害", + effect: "使出高高的腾空踢攻击对手。\n如果踢偏则自己会受到伤害", }, "rollingKick": { name: "回旋踢", - effect: "一边使身体快速旋转,一边\n踢飞对手进行攻击。有时会\n使对手畏缩", + effect: "一边使身体快速旋转,\n一边踢飞对手进行攻击。有时会使对手畏缩", }, "sandAttack": { name: "泼沙", - effect: "向对手脸上泼沙子,从而降\n低命中率", + effect: "向对手脸上泼沙子,从而降低命中率", }, "headbutt": { name: "头锤", - effect: "将头伸出,笔直地扑向对手\n进行攻击。有时会使对手畏\n缩", + effect: "将头伸出,笔直地扑向对手进行攻击。\n有时会使对手畏缩", }, "hornAttack": { name: "角撞", @@ -127,27 +127,27 @@ export const move: MoveTranslationEntries = { }, "hornDrill": { name: "角钻", - effect: "用旋转的角刺入对手进行攻\n击。只要命中就会一击昏厥", + effect: "用旋转的角刺入对手进行攻击。\n只要命中就会一击昏厥", }, "tackle": { name: "撞击", - effect: "用整个身体撞向对手进行攻\n击", + effect: "用整个身体撞向对手进行攻击", }, "bodySlam": { name: "泰山压顶", - effect: "用整个身体压住对手进行攻\n击。有时会让对手陷入麻痹\n状态", + effect: "用整个身体压住对手进行攻击。\n有时会让对手陷入麻痹状态", }, "wrap": { name: "紧束", - effect: "使用长长的身体或藤蔓等,\n在4~5回合内紧束对手进\n行攻击", + effect: "使用长长的身体或藤蔓等,\n在4~5回合内紧束对手进行攻击", }, "takeDown": { name: "猛撞", - effect: "以惊人的气势撞向对手进行\n攻击。自己也会受到少许伤\n害", + effect: "以惊人的气势撞向对手进行攻击。\n自己也会受到少许伤害", }, "thrash": { name: "大闹一番", - effect: "在2~3回合内,乱打一气\n地攻击对手。大闹一番后自\n己会陷入混乱", + effect: "在2~3回合内,乱打一气地攻击对手。\n大闹一番后自己会陷入混乱", }, "doubleEdge": { name: "舍身冲撞", @@ -155,15 +155,15 @@ export const move: MoveTranslationEntries = { }, "tailWhip": { name: "摇尾巴", - effect: "可爱地左右摇晃尾巴,诱使\n对手疏忽大意。会降低对手\n的防御", + effect: "可爱地左右摇晃尾巴,\n诱使对手疏忽大意。会降低对手的防御", }, "poisonSting": { name: "毒针", - effect: "将有毒的针刺入对手进行攻\n击。有时会让对手陷入中毒\n状态", + effect: "将有毒的针刺入对手进行攻击。\n有时会让对手陷入中毒状态", }, "twineedle": { name: "双针", - effect: "将2根针刺入对手,连续2\n次给予伤害。有时会让对手\n陷入中毒状态", + effect: "将2根针刺入对手,连续2次给予伤害。\n有时会让对手陷入中毒状态", }, "pinMissile": { name: "飞弹针", @@ -171,19 +171,19 @@ export const move: MoveTranslationEntries = { }, "leer": { name: "瞪眼", - effect: "用犀利的眼神使其害怕,从\n而降低对手的防御", + effect: "用犀利的眼神使其害怕,\n从而降低对手的防御", }, "bite": { name: "咬住", - effect: "用尖锐的牙咬住对手进行攻\n击。有时会使对手畏缩", + effect: "用尖锐的牙咬住对手进行攻击。\n有时会使对手畏缩", }, "growl": { name: "叫声", - effect: "让对手听可爱的叫声,引开\n注意力使其疏忽,从而降低\n对手的攻击", + effect: "让对手听可爱的叫声,\n引开注意力使其疏忽,从而降低对手的攻击", }, "roar": { name: "吼叫", - effect: "放走对手,强制拉后备宝可\n梦上场。如果对手为野生宝\n可梦,战斗将直接结束", + effect: "放走对手,强制拉后备宝可梦上场。\n如果对手为野生宝可梦,\n战斗将直接结束", }, "sing": { name: "唱歌", @@ -191,7 +191,7 @@ export const move: MoveTranslationEntries = { }, "supersonic": { name: "超音波", - effect: "从身体发出特殊的音波,从\n而使对手混乱", + effect: "从身体发出特殊的音波,\n从而使对手混乱", }, "sonicBoom": { name: "音爆", @@ -199,7 +199,7 @@ export const move: MoveTranslationEntries = { }, "disable": { name: "定身法", - effect: "阻碍对手行动,之前使出的\n招式将在4回合内无法使用", + effect: "阻碍对手行动,之前使出的招式将\n在4回合内无法使用", }, "acid": { name: "溶解液", @@ -207,7 +207,7 @@ export const move: MoveTranslationEntries = { }, "ember": { name: "火花", - effect: "向对手发射小型火焰进行攻\n击。有时会让对手陷入灼伤\n状态", + effect: "向对手发射小型火焰进行攻击。\n有时会让对手陷入灼伤状态", }, "flamethrower": { name: "喷射火焰", @@ -215,91 +215,91 @@ export const move: MoveTranslationEntries = { }, "mist": { name: "白雾", - effect: "用白雾覆盖身体。在5回合\n内不会让对手降低自己的能\n力", + effect: "用白雾覆盖身体。在5回合内不会\n让对手降低自己的能力", }, "waterGun": { name: "水枪", - effect: "向对手猛烈地喷射水流进行\n攻击", + effect: "向对手猛烈地喷射水流进行攻击", }, "hydroPump": { name: "水炮", - effect: "向对手猛烈地喷射大量水流\n进行攻击", + effect: "向对手猛烈地喷射大量水流进行攻击", }, "surf": { name: "冲浪", - effect: "利用大浪攻击自己周围所有\n的宝可梦", + effect: "利用大浪攻击自己周围所有的宝可梦", }, "iceBeam": { name: "冰冻光束", - effect: "向对手发射冰冻光束进行攻\n击。有时会让对手陷入冰冻\n状态", + effect: "向对手发射冰冻光束进行攻击。\n有时会让对手陷入冰冻状态", }, "blizzard": { name: "暴风雪", - effect: "将猛烈的暴风雪刮向对手进\n行攻击。有时会让对手陷入\n冰冻状态", + effect: "将猛烈的暴风雪刮向对手进行攻击。\n有时会让对手陷入冰冻状态", }, "psybeam": { name: "幻象光线", - effect: "向对手发射神奇的光线进行\n攻击。有时会使对手混乱", + effect: "向对手发射神奇的光线进行攻击。\n有时会使对手混乱", }, "bubbleBeam": { name: "泡沫光线", - effect: "向对手猛烈地喷射泡沫进行\n攻击。有时会降低对手的速\n度", + effect: "向对手猛烈地喷射泡沫进行攻击。\n有时会降低对手的速度", }, "auroraBeam": { name: "极光束", - effect: "向对手发射虹色光束进行攻\n击。有时会降低对手的攻击", + effect: "向对手发射虹色光束进行攻击。\n有时会降低对手的攻击", }, "hyperBeam": { name: "破坏光线", - effect: "向对手发射强烈的光线进行\n攻击。下一回合自己将无法\n动弹", + effect: "向对手发射强烈的光线进行攻击。\n下一回合自己将无法动弹", }, "peck": { name: "啄", - effect: "用尖锐的喙或角刺向对手进\n行攻击", + effect: "用尖锐的喙或角刺向对手进行攻击", }, "drillPeck": { name: "啄钻", - effect: "一边旋转,一边将尖喙刺入\n对手进行攻击", + effect: "一边旋转,一边将尖喙刺入对手进行攻击", }, "submission": { name: "深渊翻滚", - effect: "将对手连同自己一起摔向地\n面进行攻击。自己也会受到\n少许伤害", + effect: "将对手连同自己一起摔向地面进行攻击。\n自己也会受到少许伤害", }, "lowKick": { name: "踢倒", - effect: "用力踢对手的脚,使其摔倒\n进行攻击。对手越重,威力\n越大", + effect: "用力踢对手的脚,使其摔倒进行攻击。\n对手越重,威力越大", }, "counter": { name: "双倍奉还", - effect: "从对手那里受到物理攻击的\n伤害将以2倍返还给同一个\n对手", + effect: "从对手那里受到物理攻击的伤害将\n以2倍返还给同一个对手", }, "seismicToss": { name: "地球上投", - effect: "利用引力将对手甩飞出去。\n给予对手和自己等级相同的\n伤害", + effect: "利用引力将对手甩飞出去。\n给予对手和自己等级相同的伤害", }, "strength": { name: "怪力", - effect: "使出浑身力气殴打对手进行\n攻击", + effect: "使出浑身力气殴打对手进行攻击", }, "absorb": { name: "吸取", - effect: "吸取对手的养分进行攻击。\n可以回复给予对手伤害的一\n半HP", + effect: "吸取对手的养分进行攻击。\n可以回复给予对手伤害的一半HP", }, "megaDrain": { name: "超级吸取", - effect: "吸取对手的养分进行攻击。\n可以回复给予对手伤害的一\n半HP", + effect: "吸取对手的养分进行攻击。\n可以回复给予对手伤害的一半HP", }, "leechSeed": { name: "寄生种子", - effect: "植入寄生种子后,将在每回\n合一点一点吸取对手的HP,\n从而用来回复自己的HP", + effect: "植入寄生种子后,将在每回合一点\n一点吸取对手的HP,\n从而用来回复自己的HP", }, "growth": { name: "生长", - effect: "让身体一下子长大,从而提\n高攻击和特攻", + effect: "让身体一下子长大,从而提高攻击和特攻", }, "razorLeaf": { name: "飞叶快刀", - effect: "飞出叶片,切斩对手进行攻\n击。容易击中要害", + effect: "飞出叶片,切斩对手进行攻击。\n容易击中要害", }, "solarBeam": { name: "日光束", @@ -307,19 +307,19 @@ export const move: MoveTranslationEntries = { }, "poisonPowder": { name: "毒粉", - effect: "撒出毒粉,从而让对手陷入\n中毒状态", + effect: "撒出毒粉,从而让对手陷入中毒状态", }, "stunSpore": { name: "麻痹粉", - effect: "撒出麻痹粉,从而让对手陷\n入麻痹状态", + effect: "撒出麻痹粉,从而让对手陷入麻痹状态", }, "sleepPowder": { name: "催眠粉", - effect: "撒出催眠粉,从而让对手陷\n入睡眠状态", + effect: "撒出催眠粉,从而让对手陷入睡眠状态", }, "petalDance": { name: "花瓣舞", - effect: "在2~3回合内,散落花瓣\n攻击对手。之后自己会陷入\n混乱", + effect: "在2~3回合内,散落花瓣攻击对手。\n之后自己会陷入混乱", }, "stringShot": { name: "吐丝", @@ -327,23 +327,23 @@ export const move: MoveTranslationEntries = { }, "dragonRage": { name: "龙之怒", - effect: "将愤怒的冲击波撞向对手进\n行攻击。必定会给予40的\n伤害", + effect: "将愤怒的冲击波撞向对手进行攻击。\n必定会给予40的伤害", }, "fireSpin": { name: "火焰旋涡", - effect: "将对手困在激烈的火焰旋涡\n中,在4~5回合内进行攻\n击", + effect: "将对手困在激烈的火焰旋涡中,\n在4~5回合内进行攻击", }, "thunderShock": { name: "电击", - effect: "发出电流刺激对手进行攻击。\n有时会让对手陷入麻痹状\n态", + effect: "发出电流刺激对手进行攻击。\n有时会让对手陷入麻痹状态", }, "thunderbolt": { name: "十万伏特", - effect: "向对手发出强力电击进行攻\n击。有时会让对手陷入麻痹\n状态", + effect: "向对手发出强力电击进行攻击。\n有时会让对手陷入麻痹状态", }, "thunderWave": { name: "电磁波", - effect: "向对手发出微弱的电击,从\n而让对手陷入麻痹状态", + effect: "向对手发出微弱的电击,\n从而让对手陷入麻痹状态", }, "thunder": { name: "打雷", @@ -351,35 +351,35 @@ export const move: MoveTranslationEntries = { }, "rockThrow": { name: "落石", - effect: "拿起小岩石,投掷对手进行\n攻击", + effect: "拿起小岩石,投掷对手进行攻击", }, "earthquake": { name: "地震", - effect: "利用地震的冲击,攻击自己\n周围所有的宝可梦", + effect: "利用地震的冲击,攻击自己周围所\n有的宝可梦", }, "fissure": { name: "地裂", - effect: "让对手掉落于地裂的裂缝中\n进行攻击。只要命中就会一\n击昏厥", + effect: "让对手掉落于地裂的裂缝中进行攻击。\n只要命中就会一击昏厥", }, "dig": { name: "挖洞", - effect: "第1回合钻入地底,第2回\n合攻击对手", + effect: "第1回合钻入地底,第2回合攻击对手", }, "toxic": { name: "剧毒", - effect: "让对手陷入剧毒状态。随着\n回合的推进,中毒伤害会增\n加", + effect: "让对手陷入剧毒状态。\n随着回合的推进,中毒伤害会增加", }, "confusion": { name: "念力", - effect: "向对手发送微弱的念力进行\n攻击。有时会使对手混乱", + effect: "向对手发送微弱的念力进行攻击。\n有时会使对手混乱", }, "psychic": { name: "精神强念", - effect: "向对手发送强大的念力进行\n攻击。有时会降低对手的特\n防", + effect: "向对手发送强大的念力进行攻击。\n有时会降低对手的特防", }, "hypnosis": { name: "催眠术", - effect: "施以诱导睡意的暗示,让对\n手陷入睡眠状态", + effect: "施以诱导睡意的暗示,\n让对手陷入睡眠状态", }, "meditate": { name: "瑜伽姿势", @@ -387,23 +387,23 @@ export const move: MoveTranslationEntries = { }, "agility": { name: "高速移动", - effect: "让身体放松变得轻盈,以便\n高速移动。大幅提高自己的\n速度", + effect: "让身体放松变得轻盈,\n以便高速移动。大幅提高自己的速度", }, "quickAttack": { name: "电光一闪", - effect: "以迅雷不及掩耳之势扑向对\n手。必定能够先制攻击", + effect: "以迅雷不及掩耳之势扑向对手。\n必定能够先制攻击", }, "rage": { name: "愤怒", - effect: "如果在使出招式后受到攻击\n的话,会因愤怒的力量而提\n高攻击", + effect: "如果在使出招式后受到攻击的话,\n会因愤怒的力量而提高攻击", }, "teleport": { name: "瞬间移动", - effect: "当有后备宝可梦时使用,就\n可以进行替换。野生的宝可\n梦使用则会逃走", + effect: "当有后备宝可梦时使用,\n就可以进行替换。野生的宝可梦使用则会逃走", }, "nightShade": { name: "黑夜魔影", - effect: "显示恐怖幻影,只给予对手\n和自己等级相同的伤害", + effect: "显示恐怖幻影,只给予对手和自己\n等级相同的伤害", }, "mimic": { name: "模仿", @@ -411,7 +411,7 @@ export const move: MoveTranslationEntries = { }, "screech": { name: "刺耳声", - effect: "发出不由自主想要捂起耳朵\n的刺耳声,从而大幅降低对\n手的防御", + effect: "发出不由自主想要捂起耳朵的刺耳声,\n从而大幅降低对手的防御", }, "doubleTeam": { name: "影子分身", @@ -419,19 +419,19 @@ export const move: MoveTranslationEntries = { }, "recover": { name: "自我再生", - effect: "让细胞再生,从而回复自己\n最大HP的一半", + effect: "让细胞再生,从而回复自己最大H\nP的一半", }, "harden": { name: "变硬", - effect: "全身使劲,让身体变硬,从\n而提高自己的防御", + effect: "全身使劲,让身体变硬,\n从而提高自己的防御", }, "minimize": { name: "变小", - effect: "蜷缩身体显得很小,从而大\n幅提高自己的闪避率", + effect: "蜷缩身体显得很小,从而大幅提高\n自己的闪避率", }, "smokescreen": { name: "烟幕", - effect: "向对手喷出烟或墨汁等,从\n而降低对手的命中率", + effect: "向对手喷出烟或墨汁等,\n从而降低对手的命中率", }, "confuseRay": { name: "奇异之光", @@ -439,59 +439,59 @@ export const move: MoveTranslationEntries = { }, "withdraw": { name: "缩入壳中", - effect: "缩入壳里保护身体,从而提\n高自己的防御", + effect: "缩入壳里保护身体,从而提高自己的防御", }, "defenseCurl": { name: "变圆", - effect: "将身体蜷曲变圆,从而提高\n自己的防御", + effect: "将身体蜷曲变圆,从而提高自己的防御", }, "barrier": { name: "屏障", - effect: "制造坚固的壁障,从而大幅\n提高自己的防御", + effect: "制造坚固的壁障,从而大幅提高自\n己的防御", }, "lightScreen": { name: "光墙", - effect: "利用神奇的墙壁,在5回合\n内减弱从对手那里受到的特\n殊攻击的伤害", + effect: "利用神奇的墙壁,在5回合内减弱\n从对手那里受到的特殊攻击的伤害", }, "haze": { name: "黑雾", - effect: "升起黑雾,将正在场上战斗\n的全体宝可梦的能力变回原\n点", + effect: "升起黑雾,将正在场上战斗的全体\n宝可梦的能力变回原点", }, "reflect": { name: "反射壁", - effect: "利用神奇的墙壁,在5回合\n内减弱从对手那里受到的物\n理攻击的伤害", + effect: "利用神奇的墙壁,在5回合内减弱\n从对手那里受到的物理攻击的伤害", }, "focusEnergy": { name: "聚气", - effect: "深深地吸口气,集中精神。\n自己的攻击会变得容易击中\n要害", + effect: "深深地吸口气,集中精神。\n自己的攻击会变得容易击中要害", }, "bide": { name: "忍耐", - effect: "在2回合内忍受攻击,受到\n的伤害会2倍返还给对手", + effect: "在2回合内忍受攻击,\n受到的伤害会2倍返还给对手", }, "metronome": { name: "挥指", - effect: "挥动手指刺激自己的大脑,\n从许多的招式中随机使出1\n个", + effect: "挥动手指刺激自己的大脑,\n从许多的招式中随机使出1个", }, "mirrorMove": { name: "鹦鹉学舌", - effect: "模仿对手使用的招式,自己\n也使用相同招式", + effect: "模仿对手使用的招式,\n自己也使用相同招式", }, "selfDestruct": { name: "玉石俱碎", - effect: "引发爆炸,攻击自己周围所\n有的宝可梦。使用后陷入昏\n厥", + effect: "引发爆炸,攻击自己周围所有的宝可梦。\n使用后陷入昏厥", }, "eggBomb": { name: "炸蛋", - effect: "向对手用力投掷大大的蛋进\n行攻击", + effect: "向对手用力投掷大大的蛋进行攻击", }, "lick": { name: "舌舔", - effect: "用长长的舌头,舔遍对手进\n行攻击。有时会让对手陷入\n麻痹状态", + effect: "用长长的舌头,舔遍对手进行攻击。\n有时会让对手陷入麻痹状态", }, "smog": { name: "浊雾", - effect: "将肮脏的浓雾吹向对手进行\n攻击。有时会让对手陷入中\n毒状态", + effect: "将肮脏的浓雾吹向对手进行攻击。\n有时会让对手陷入中毒状态", }, "sludge": { name: "污泥攻击", @@ -499,27 +499,27 @@ export const move: MoveTranslationEntries = { }, "boneClub": { name: "骨棒", - effect: "用手中的骨头殴打对手进行\n攻击。有时会使对手畏缩", + effect: "用手中的骨头殴打对手进行攻击。\n有时会使对手畏缩", }, "fireBlast": { name: "大字爆炎", - effect: "用大字形状的火焰烧尽对手。\n有时会让对手陷入灼伤状\n态", + effect: "用大字形状的火焰烧尽对手。\n有时会让对手陷入灼伤状态", }, "waterfall": { name: "攀瀑", - effect: "以惊人的气势扑向对手。有\n时会使对手畏缩", + effect: "以惊人的气势扑向对手。\n有时会使对手畏缩", }, "clamp": { name: "贝壳夹击", - effect: "用非常坚固且厚实的贝壳,\n在4~5回合内夹住对手进\n行攻击", + effect: "用非常坚固且厚实的贝壳,\n在4~5回合内夹住对手进行攻击", }, "swift": { name: "高速星星", - effect: "发射星形的光攻击对手。攻\n击必定会命中", + effect: "发射星形的光攻击对手。\n攻击必定会命中", }, "skullBash": { name: "火箭头锤", - effect: "第1回合把头缩进去,从而\n提高防御。第2回合攻击对\n手", + effect: "第1回合把头缩进去,\n从而提高防御。第2回合攻击对手", }, "spikeCannon": { name: "尖刺加农炮", @@ -527,7 +527,7 @@ export const move: MoveTranslationEntries = { }, "constrict": { name: "缠绕", - effect: "用触手或青藤等缠绕进行攻\n击。有时会降低对手的速度", + effect: "用触手或青藤等缠绕进行攻击。\n有时会降低对手的速度", }, "amnesia": { name: "瞬间失忆", @@ -535,7 +535,7 @@ export const move: MoveTranslationEntries = { }, "kinesis": { name: "折弯汤匙", - effect: "折弯汤匙引开注意,从而降\n低对手的命中率", + effect: "折弯汤匙引开注意,从而降低对手\n的命中率", }, "softBoiled": { name: "生蛋", @@ -543,7 +543,7 @@ export const move: MoveTranslationEntries = { }, "highJumpKick": { name: "飞膝踢", - effect: "跳起后用膝盖撞对手进行攻\n击。如果撞偏则自己会受到\n伤害", + effect: "跳起后用膝盖撞对手进行攻击。\n如果撞偏则自己会受到伤害", }, "glare": { name: "大蛇瞪眼", @@ -551,7 +551,7 @@ export const move: MoveTranslationEntries = { }, "dreamEater": { name: "食梦", - effect: "吃掉正在睡觉的对手的梦进\n行攻击。回复对手所受到伤\n害的一半HP", + effect: "吃掉正在睡觉的对手的梦进行攻击。\n回复对手所受到伤害的一半HP", }, "poisonGas": { name: "毒瓦斯", @@ -559,43 +559,43 @@ export const move: MoveTranslationEntries = { }, "barrage": { name: "投球", - effect: "向对手投掷圆形物体进行攻\n击。连续攻击2~5次", + effect: "向对手投掷圆形物体进行攻击。\n连续攻击2~5次", }, "leechLife": { name: "吸血", - effect: "吸取血液攻击对手。可以回\n复给予对手伤害的一半HP", + effect: "吸取血液攻击对手。可以回复给予\n对手伤害的一半HP", }, "lovelyKiss": { name: "恶魔之吻", - effect: "用恐怖的脸强吻对手。让对\n手陷入睡眠状态", + effect: "用恐怖的脸强吻对手。\n让对手陷入睡眠状态", }, "skyAttack": { name: "神鸟猛击", - effect: "第2回合攻击对手。偶尔使\n对手畏缩。也容易击中要害", + effect: "第2回合攻击对手。偶尔使对手畏缩。\n也容易击中要害", }, "transform": { name: "变身", - effect: "变身成对手宝可梦的样子,\n能够使用和对手完全相同的\n招式", + effect: "变身成对手宝可梦的样子,\n能够使用和对手完全相同的招式", }, "bubble": { name: "泡沫", - effect: "向对手用力吹起无数泡泡进\n行攻击。有时会降低对手的\n速度", + effect: "向对手用力吹起无数泡泡进行攻击。\n有时会降低对手的速度", }, "dizzyPunch": { name: "迷昏拳", - effect: "有节奏地出拳攻击对手。有\n时会使对手混乱", + effect: "有节奏地出拳攻击对手。\n有时会使对手混乱", }, "spore": { name: "蘑菇孢子", - effect: "沙沙沙地撒满具有催眠效果\n的孢子,从而让对手陷入睡\n眠状态", + effect: "沙沙沙地撒满具有催眠效果的孢子,\n从而让对手陷入睡眠状态", }, "flash": { name: "闪光", - effect: "使出光芒,从而降低对手的\n命中率。也可在阴暗的洞窟\n里照亮四周", + effect: "使出光芒,从而降低对手的命中率。\n也可在阴暗的洞窟里照亮四周", }, "psywave": { name: "精神波", - effect: "向对手发射神奇的念波进行\n攻击。每次使用,伤害都会\n改变", + effect: "向对手发射神奇的念波进行攻击。\n每次使用,伤害都会改变", }, "splash": { name: "跃起", @@ -611,59 +611,59 @@ export const move: MoveTranslationEntries = { }, "explosion": { name: "大爆炸", - effect: "引发大爆炸,攻击自己周围\n所有的宝可梦。使用后自己\n会陷入昏厥", + effect: "引发大爆炸,攻击自己周围所有的宝可梦。\n使用后自己会陷入昏厥", }, "furySwipes": { name: "乱抓", - effect: "用爪子或镰刀等抓对手进行\n攻击。连续攻击2~5次", + effect: "用爪子或镰刀等抓对手进行攻击。\n连续攻击2~5次", }, "bonemerang": { name: "骨头回力镖", - effect: "用手中的骨头投掷对手,来\n回连续2次给予伤害", + effect: "用手中的骨头投掷对手,\n来回连续2次给予伤害", }, "rest": { name: "睡觉", - effect: "连续睡上2回合。回复自己\n的全部HP以及治愈所有异\n常状态", + effect: "连续睡上2回合。回复自己的全部\nHP以及治愈所有异常状态", }, "rockSlide": { name: "岩崩", - effect: "将大岩石猛烈地撞向对手进\n行攻击。有时会使对手畏缩", + effect: "将大岩石猛烈地撞向对手进行攻击。\n有时会使对手畏缩", }, "hyperFang": { name: "终结门牙", - effect: "用锋利的门牙牢牢地咬住对\n手进行攻击。有时会使对手\n畏缩", + effect: "用锋利的门牙牢牢地咬住对手进行攻击。\n有时会使对手畏缩", }, "sharpen": { name: "棱角化", - effect: "增加身体的角,变得棱棱角\n角,从而提高自己的攻击", + effect: "增加身体的角,变得棱棱角角,\n从而提高自己的攻击", }, "conversion": { name: "纹理", - effect: "将自己的属性转换成和已学\n会的招式中第一个招式相同\n的属性", + effect: "将自己的属性转换成和已学会的招\n式中第一个招式相同的属性", }, "triAttack": { name: "三重攻击", - effect: "用3种光线进行攻击。有时\n会让对手陷入麻痹、灼伤或\n冰冻的状态", + effect: "用3种光线进行攻击。\n有时会让对手陷入麻痹、灼伤或冰冻的状态", }, "superFang": { name: "愤怒门牙", - effect: "用锋利的门牙猛烈地咬住对\n手进行攻击。对手的HP减\n半", + effect: "用锋利的门牙猛烈地咬住对手进行攻击。\n对手的HP减半", }, "slash": { name: "劈开", - effect: "用爪子或镰刀等劈开对手进\n行攻击。容易击中要害", + effect: "用爪子或镰刀等劈开对手进行攻击。\n容易击中要害", }, "substitute": { name: "替身", - effect: "削减少许自己的HP,制造\n分身。分身将成为自己的替\n身", + effect: "削减少许自己的HP,\n制造分身。分身将成为自己的替身", }, "struggle": { name: "挣扎", - effect: "当自己的PP耗尽时,努力\n挣扎攻击对手。自己也会受\n到少许伤害", + effect: "当自己的PP耗尽时,\n努力挣扎攻击对手。自己也会受到少许伤害", }, "sketch": { name: "写生", - effect: "将对手使用的招式变成自己\n的招式。使用1次后写生消\n失", + effect: "将对手使用的招式变成自己的招式。\n使用1次后写生消失", }, "tripleKick": { name: "三连踢", @@ -675,59 +675,59 @@ export const move: MoveTranslationEntries = { }, "spiderWeb": { name: "蛛网", - effect: "将黏糊糊的细丝一层一层缠\n住对手,使其不能从战斗中\n逃走", + effect: "将黏糊糊的细丝一层一层缠住对手,\n使其不能从战斗中逃走", }, "mindReader": { name: "心之眼", - effect: "用心感受对手的行动,下次\n攻击必定会击中对手", + effect: "用心感受对手的行动,\n下次攻击必定会击中对手", }, "nightmare": { name: "恶梦", - effect: "让在睡眠状态下的对手做恶\n梦,每回合会缓缓减少HP", + effect: "让在睡眠状态下的对手做恶梦,\n每回合会缓缓减少HP", }, "flameWheel": { name: "火焰轮", - effect: "让火焰覆盖全身,猛撞向对\n手进行攻击。有时会让对手\n陷入灼伤状态", + effect: "让火焰覆盖全身,猛撞向对手进行攻击。\n有时会让对手陷入灼伤状态", }, "snore": { name: "打鼾", - effect: "在自己睡觉时,发出噪音进\n行攻击。有时会使对手畏缩", + effect: "在自己睡觉时,发出噪音进行攻击。\n有时会使对手畏缩", }, "curse": { name: "诅咒", - effect: "使用该招式的宝可梦,其属\n性是幽灵属性或其他属性时,\n效果会不一样", + effect: "使用该招式的宝可梦,\n其属性是幽灵属性或其他属性时,\n效果会不一样", }, "flail": { name: "抓狂", - effect: "抓狂般乱打进行攻击。自己\n的HP越少,招式的威力越\n大", + effect: "抓狂般乱打进行攻击。\n自己的HP越少,招式的威力越大", }, "conversion2": { name: "纹理2", - effect: "为了可以抵抗对手最后使用\n的招式,从而使自己的属性\n发生变化", + effect: "为了可以抵抗对手最后使用的招式,\n从而使自己的属性发生变化", }, "aeroblast": { name: "气旋攻击", - effect: "发射空气旋涡进行攻击。容\n易击中要害", + effect: "发射空气旋涡进行攻击。\n容易击中要害", }, "cottonSpore": { name: "棉孢子", - effect: "将棉花般柔软的孢子紧贴对\n手,从而大幅降低对手的速\n度", + effect: "将棉花般柔软的孢子紧贴对手,\n从而大幅降低对手的速度", }, "reversal": { name: "绝处逢生", - effect: "竭尽全力进行攻击。自己的\nHP越少,招式的威力越大", + effect: "竭尽全力进行攻击。自己的HP越少,\n招式的威力越大", }, "spite": { name: "怨恨", - effect: "对对手最后使用的招式怀有\n怨恨,减少4PP该招式", + effect: "对对手最后使用的招式怀有怨恨,\n减少4PP该招式", }, "powderSnow": { name: "细雪", - effect: "将冰冷的细雪吹向对手进行\n攻击。有时会让对手陷入冰\n冻状态", + effect: "将冰冷的细雪吹向对手进行攻击。\n有时会让对手陷入冰冻状态", }, "protect": { name: "守住", - effect: "完全抵挡对手的攻击。连续\n使出则容易失败", + effect: "完全抵挡对手的攻击。\n连续使出则容易失败", }, "machPunch": { name: "音速拳", @@ -735,11 +735,11 @@ export const move: MoveTranslationEntries = { }, "scaryFace": { name: "可怕面孔", - effect: "用恐怖的表情瞪着对手,使\n其害怕,从而大幅降低对手\n的速度", + effect: "用恐怖的表情瞪着对手,\n使其害怕,从而大幅降低对手的速度", }, "feintAttack": { name: "出奇一击", - effect: "悄悄地靠近对手,趁其不备\n进行殴打。攻击必定会命中", + effect: "悄悄地靠近对手,趁其不备进行殴打。\n攻击必定会命中", }, "sweetKiss": { name: "天使之吻", @@ -747,7 +747,7 @@ export const move: MoveTranslationEntries = { }, "bellyDrum": { name: "腹鼓", - effect: "将自己的HP减少到最大\nHP的一半,从而最大限度提\n高自己的攻击", + effect: "将自己的HP减少到最大HP的一半,\n从而最大限度提高自己的攻击", }, "sludgeBomb": { name: "污泥炸弹", @@ -755,79 +755,79 @@ export const move: MoveTranslationEntries = { }, "mudSlap": { name: "掷泥", - effect: "向对手的脸等投掷泥块进行\n攻击。会降低对手的命中率", + effect: "向对手的脸等投掷泥块进行攻击。\n会降低对手的命中率", }, "octazooka": { name: "章鱼桶炮", - effect: "向对手的脸等喷出墨汁进行\n攻击。有时会降低对手的命\n中率", + effect: "向对手的脸等喷出墨汁进行攻击。\n有时会降低对手的命中率", }, "spikes": { name: "撒菱", - effect: "在对手的脚下扔撒菱。对替\n换出场的对手的宝可梦给予\n伤害", + effect: "在对手的脚下扔撒菱。\n对替换出场的对手的宝可梦给予伤害", }, "zapCannon": { name: "电磁炮", - effect: "发射大炮一样的电流进行攻\n击。让对手陷入麻痹状态", + effect: "发射大炮一样的电流进行攻击。\n让对手陷入麻痹状态", }, "foresight": { name: "识破", - effect: "使出后对幽灵属性宝可梦没\n有效果的招式以及闪避率高\n的对手,变得能够打中", + effect: "使出后对幽灵属性宝可梦没有效果\n的招式以及闪避率高的对手,\n变得能够打中", }, "destinyBond": { name: "同命", - effect: "使出招式后,当受到对手攻\n击陷入昏厥时,对手也会一\n同昏厥。连续使出则会失败", + effect: "使出招式后,当受到对手攻击陷入昏厥时,\n对手也会一同昏厥。\n连续使出则会失败", }, "perishSong": { name: "终焉之歌", - effect: "倾听歌声的宝可梦经过3回\n合陷入昏厥。替换后效果消\n失", + effect: "倾听歌声的宝可梦经过3回合陷入昏厥。\n替换后效果消失", }, "icyWind": { name: "冰冻之风", - effect: "将结冰的冷气吹向对手进行\n攻击。会降低对手的速度", + effect: "将结冰的冷气吹向对手进行攻击。\n会降低对手的速度", }, "detect": { name: "看穿", - effect: "完全抵挡对手的攻击。连续\n使出则容易失败", + effect: "完全抵挡对手的攻击。\n连续使出则容易失败", }, "boneRush": { name: "骨棒乱打", - effect: "用坚硬的骨头殴打对手进行\n攻击。连续攻击2~5次", + effect: "用坚硬的骨头殴打对手进行攻击。\n连续攻击2~5次", }, "lockOn": { name: "锁定", - effect: "紧紧瞄准对手,下次攻击必\n定会打中", + effect: "紧紧瞄准对手,下次攻击必定会打中", }, "outrage": { name: "逆鳞", - effect: "在2~3回合内,乱打一气\n地进行攻击。大闹一番后自\n己会陷入混乱", + effect: "在2~3回合内,乱打一气地进行攻击。\n大闹一番后自己会陷入混乱", }, "sandstorm": { name: "沙暴", - effect: "在5回合内扬起沙暴,除岩\n石、地面和钢属性以外的宝\n可梦,都会受到伤害。岩石\n属性的特防还会提高", + effect: "在5回合内扬起沙暴,\n除岩石、地面和钢属性以外的宝可梦,\n都会受到伤害。岩石属性的特防还会提高", }, "gigaDrain": { name: "终极吸取", - effect: "吸取对手的养分进行攻击。\n可以回复给予对手伤害的一\n半HP", + effect: "吸取对手的养分进行攻击。\n可以回复给予对手伤害的一半HP", }, "endure": { name: "挺住", - effect: "即使受到攻击,也至少会留\n下1HP。连续使出则容易\n失败", + effect: "即使受到攻击,也至少会留下1HP。\n连续使出则容易失败", }, "charm": { name: "撒娇", - effect: "可爱地凝视,诱使对手疏忽\n大意,从而大幅降低对手的\n攻击", + effect: "可爱地凝视,诱使对手疏忽大意,\n从而大幅降低对手的攻击", }, "rollout": { name: "滚动", - effect: "在5回合内连续滚动攻击对\n手。招式每次击中,威力就\n会提高", + effect: "在5回合内连续滚动攻击对手。\n招式每次击中,威力就会提高", }, "falseSwipe": { name: "点到为止", - effect: "对手的HP至少会留下1\nHP,如此般手下留情地攻击", + effect: "对手的HP至少会留下1HP,\n如此般手下留情地攻击", }, "swagger": { name: "虚张声势", - effect: "激怒对手,使其混乱。因为\n愤怒,对手的攻击会大幅提\n高", + effect: "激怒对手,使其混乱。\n因为愤怒,对手的攻击会大幅提高", }, "milkDrink": { name: "喝牛奶", @@ -835,31 +835,31 @@ export const move: MoveTranslationEntries = { }, "spark": { name: "电光", - effect: "让电流覆盖全身,猛撞向对\n手进行攻击。有时会让对手\n陷入麻痹状态", + effect: "让电流覆盖全身,猛撞向对手进行攻击。\n有时会让对手陷入麻痹状态", }, "furyCutter": { name: "连斩", - effect: "用镰刀或爪子等切斩对手进\n行攻击。连续击中,威力就\n会提高", + effect: "用镰刀或爪子等切斩对手进行攻击。\n连续击中,威力就会提高", }, "steelWing": { name: "钢翼", - effect: "用坚硬的翅膀敲打对手进行\n攻击。有时会提高自己的防\n御", + effect: "用坚硬的翅膀敲打对手进行攻击。\n有时会提高自己的防御", }, "meanLook": { name: "黑色目光", - effect: "用好似要勾人心魂的黑色目\n光一动不动地凝视对手,使\n其不能从战斗中逃走", + effect: "用好似要勾人心魂的黑色目光一动\n不动地凝视对手,使其不能从战斗中逃走", }, "attract": { name: "迷人", - effect: "♂诱惑♀或♀诱惑♂,让对\n手着迷。对手将很难使出招\n式", + effect: "♂诱惑♀或♀诱惑♂,让对手着迷。\n对手将很难使出招式", }, "sleepTalk": { name: "梦话", - effect: "从自己已学会的招式中任意\n使出1个。只能在自己睡觉\n时使用", + effect: "从自己已学会的招式中任意使出1个。\n只能在自己睡觉时使用", }, "healBell": { name: "治愈铃声", - effect: "让同伴听舒适的铃音,从而\n治愈我方全员的异常状态", + effect: "让同伴听舒适的铃音,\n从而治愈我方全员的异常状态", }, "return": { name: "报恩", @@ -867,27 +867,27 @@ export const move: MoveTranslationEntries = { }, "present": { name: "礼物", - effect: "递给对手设有圈套的盒子进\n行攻击。也有可能回复对手\nHP", + effect: "递给对手设有圈套的盒子进行攻击。\n也有可能回复对手HP", }, "frustration": { name: "迁怒", - effect: "为了发泄不满而全力攻击对\n手。亲密度越低,威力越大", + effect: "为了发泄不满而全力攻击对手。\n亲密度越低,威力越大", }, "safeguard": { name: "神秘守护", - effect: "在5回合内被神奇的力量守\n护,从而不会陷入异常状态", + effect: "在5回合内被神奇的力量守护,\n从而不会陷入异常状态", }, "painSplit": { name: "分担痛楚", - effect: "将自己的HP和对手的HP\n相加,然后自己和对手友好\n地平分", + effect: "将自己的HP和对手的HP相加,\n然后自己和对手友好地平分", }, "sacredFire": { name: "神圣之火", - effect: "用神秘的火焰烧尽对手进行\n攻击。有时会让对手陷入灼\n伤状态", + effect: "用神秘的火焰烧尽对手进行攻击。\n有时会让对手陷入灼伤状态", }, "magnitude": { name: "震级", - effect: "晃动地面,攻击自己周围所\n有的宝可梦。招式的威力会\n有各种变化", + effect: "晃动地面,攻击自己周围所有的宝可梦。\n招式的威力会有各种变化", }, "dynamicPunch": { name: "爆裂拳", @@ -895,75 +895,75 @@ export const move: MoveTranslationEntries = { }, "megahorn": { name: "超级角击", - effect: "用坚硬且华丽的角狠狠地刺\n入对手进行攻击", + effect: "用坚硬且华丽的角狠狠地刺入对手\n进行攻击", }, "dragonBreath": { name: "龙息", - effect: "将强烈的气息吹向对手进行\n攻击。有时会让对手陷入麻\n痹状态", + effect: "将强烈的气息吹向对手进行攻击。\n有时会让对手陷入麻痹状态", }, "batonPass": { name: "接棒", - effect: "和后备宝可梦进行替换。换\n上的宝可梦能直接继承其能\n力的变化", + effect: "和后备宝可梦进行替换。\n换上的宝可梦能直接继承其能力的变化", }, "encore": { name: "再来一次", - effect: "让对手接受再来一次,连续\n3次使出最后使用的招式", + effect: "让对手接受再来一次,\n连续3次使出最后使用的招式", }, "pursuit": { name: "追打", - effect: "当对手替换宝可梦上场时使\n出此招式的话,能够以2倍\n的威力进行攻击", + effect: "当对手替换宝可梦上场时使出此招式的话,\n能够以2倍的威力进行攻击", }, "rapidSpin": { name: "高速旋转", - effect: "通过旋转来攻击对手。可以\n摆脱绑紧、紧束、寄生种子\n等招式。还能提高自己的速\n度", + effect: "通过旋转来攻击对手。\n可以摆脱绑紧、紧束、寄生种子等招式。\n还能提高自己的速度", }, "sweetScent": { name: "甜甜香气", - effect: "用香气大幅降低对手的闪避\n率", + effect: "用香气大幅降低对手的闪避率", }, "ironTail": { name: "铁尾", - effect: "使用坚硬的尾巴摔打对手进\n行攻击。有时会降低对手的\n防御", + effect: "使用坚硬的尾巴摔打对手进行攻击。\n有时会降低对手的防御", }, "metalClaw": { name: "金属爪", - effect: "用钢铁之爪劈开对手进行攻\n击。有时会提高自己的攻击", + effect: "用钢铁之爪劈开对手进行攻击。\n有时会提高自己的攻击", }, "vitalThrow": { name: "借力摔", - effect: "会在对手之后进行攻击。但\n是自己的攻击必定会命中", + effect: "会在对手之后进行攻击。\n但是自己的攻击必定会命中", }, "morningSun": { name: "晨光", - effect: "回复自己的HP。根据天气\n的不同,回复量也会有所变\n化", + effect: "回复自己的HP。根据天气的不同,\n回复量也会有所变化", }, "synthesis": { name: "光合作用", - effect: "回复自己的HP。根据天气\n的不同,回复量也会有所变\n化", + effect: "回复自己的HP。根据天气的不同,\n回复量也会有所变化", }, "moonlight": { name: "月光", - effect: "回复自己的HP。根据天气\n的不同,回复量也会有所变\n化", + effect: "回复自己的HP。根据天气的不同,\n回复量也会有所变化", }, "hiddenPower": { name: "觉醒力量", - effect: "招式的属性会随着使用此招\n式的宝可梦而改变", + effect: "招式的属性会随着使用此招式的宝\n可梦而改变", }, "crossChop": { name: "十字劈", - effect: "用两手呈十字劈打对手进行\n攻击。容易击中要害", + effect: "用两手呈十字劈打对手进行攻击。\n容易击中要害", }, "twister": { name: "龙卷风", - effect: "兴起龙卷风,将对手卷入进\n行攻击。有时会使对手畏缩", + effect: "兴起龙卷风,将对手卷入进行攻击。\n有时会使对手畏缩", }, "rainDance": { name: "求雨", - effect: "在5回合内一直降雨,从而\n提高水属性的招式威力。火\n属性的招式威力则降低", + effect: "在5回合内一直降雨,\n从而提高水属性的招式威力。火属性的招式威\n力则降低", }, "sunnyDay": { name: "大晴天", - effect: "在5回合内让日照变得强烈,\n从而提高火属性的招式威\n力。水属性的招式威力则降\n低", + effect: "在5回合内让日照变得强烈,\n从而提高火属性的招式威力。\n水属性的招式威力则降低", }, "crunch": { name: "咬碎", @@ -971,111 +971,111 @@ export const move: MoveTranslationEntries = { }, "mirrorCoat": { name: "镜面反射", - effect: "从对手那里受到特殊攻击的\n伤害将以2倍返还给同一个\n对手", + effect: "从对手那里受到特殊攻击的伤害将\n以2倍返还给同一个对手", }, "psychUp": { name: "自我暗示", - effect: "向自己施以自我暗示,将能\n力变化的状态变得和对手一\n样", + effect: "向自己施以自我暗示,\n将能力变化的状态变得和对手一样", }, "extremeSpeed": { name: "神速", - effect: "以迅雷不及掩耳之势猛撞向\n对手进行攻击。必定能够先\n制攻击", + effect: "以迅雷不及掩耳之势猛撞向对手进行攻击。\n必定能够先制攻击", }, "ancientPower": { name: "原始之力", - effect: "用原始之力进行攻击。有时\n会提高自己所有的能力", + effect: "用原始之力进行攻击。\n有时会提高自己所有的能力", }, "shadowBall": { name: "暗影球", - effect: "投掷一团黑影进行攻击。有\n时会降低对手的特防", + effect: "投掷一团黑影进行攻击。\n有时会降低对手的特防", }, "futureSight": { name: "预知未来", - effect: "在使用招式2回合后,向对\n手发送一团念力进行攻击", + effect: "在使用招式2回合后,\n向对手发送一团念力进行攻击", }, "rockSmash": { name: "碎岩", - effect: "用拳头进行攻击。有时会降\n低对手的防御", + effect: "用拳头进行攻击。有时会降低对手的防御", }, "whirlpool": { name: "潮旋", - effect: "将对手困在激烈的水流旋涡\n中,在4~5回合内进行攻\n击", + effect: "将对手困在激烈的水流旋涡中,\n在4~5回合内进行攻击", }, "beatUp": { name: "围攻", - effect: "我方全员进行攻击。同行的\n宝可梦越多,招式的攻击次\n数越多", + effect: "我方全员进行攻击。同行的宝可梦越多,\n招式的攻击次数越多", }, "fakeOut": { name: "击掌奇袭", - effect: "进行先制攻击,使对手畏缩。\n要在出场后立刻使出才能\n成功", + effect: "进行先制攻击,使对手畏缩。\n要在出场后立刻使出才能成功", }, "uproar": { name: "吵闹", - effect: "在3回合内大吵大闹攻击对\n手。在此期间谁都不能入眠", + effect: "在3回合内大吵大闹攻击对手。\n在此期间谁都不能入眠", }, "stockpile": { name: "蓄力", - effect: "积蓄力量,提高自己的防御\n和特防。最多积蓄3次", + effect: "积蓄力量,提高自己的防御和特防。\n最多积蓄3次", }, "spitUp": { name: "喷出", - effect: "将积蓄的力量撞向对手进行\n攻击。积蓄得越多,威力越\n大", + effect: "将积蓄的力量撞向对手进行攻击。\n积蓄得越多,威力越大", }, "swallow": { name: "吞下", - effect: "将积蓄的力量吞下,从而回\n复自己的HP。积蓄得越多,\n回复越大", + effect: "将积蓄的力量吞下,从而回复自己的HP。\n积蓄得越多,回复越大", }, "heatWave": { name: "热风", - effect: "将炎热的气息吹向对手进行\n攻击。有时会让对手陷入灼\n伤状态", + effect: "将炎热的气息吹向对手进行攻击。\n有时会让对手陷入灼伤状态", }, "hail": { name: "冰雹", - effect: "在5回合内一直降冰雹,除\n冰属性的宝可梦以外,给予\n全体宝可梦伤害", + effect: "在5回合内一直降冰雹,\n除冰属性的宝可梦以外,给予全体宝可梦伤害", }, "torment": { name: "无理取闹", - effect: "向对手无理取闹,令其不能\n连续2次使出相同招式", + effect: "向对手无理取闹,令其不能连续2\n次使出相同招式", }, "flatter": { name: "吹捧", - effect: "吹捧对手,使其混乱。同时\n还会提高对手的特攻", + effect: "吹捧对手,使其混乱。\n同时还会提高对手的特攻", }, "willOWisp": { name: "磷火", - effect: "放出怪异的火焰,从而让对\n手陷入灼伤状态", + effect: "放出怪异的火焰,从而让对手陷入\n灼伤状态", }, "memento": { name: "临别礼物", - effect: "虽然会使自己陷入昏厥,但\n是能够大幅降低对手的攻击\n和特攻", + effect: "虽然会使自己陷入昏厥,\n但是能够大幅降低对手的攻击和特攻", }, "facade": { name: "硬撑", - effect: "当自己处于中毒、麻痹、灼\n伤状态时,向对手使出此招\n式的话,威力会变成2倍", + effect: "当自己处于中毒、麻痹、灼伤状态时,\n向对手使出此招式的话,\n威力会变成2倍", }, "focusPunch": { name: "真气拳", - effect: "集中精神出拳。在招式使出\n前若受到攻击则会失败", + effect: "集中精神出拳。在招式使出前若受\n到攻击则会失败", }, "smellingSalts": { name: "清醒", - effect: "对于麻痹状态下的对手,威\n力会变成2倍。但相反对手\n的麻痹也会被治愈", + effect: "对于麻痹状态下的对手,\n威力会变成2倍。但相反对手的麻痹也会被治愈", }, "followMe": { name: "看我嘛", - effect: "引起对手的注意,将对手的\n攻击全部转移到自己身上", + effect: "引起对手的注意,将对手的攻击全\n部转移到自己身上", }, "naturePower": { name: "自然之力", - effect: "用自然之力进行攻击。根据\n所使用场所的不同,使出的\n招式也会有所变化", + effect: "用自然之力进行攻击。\n根据所使用场所的不同,使出的招式也会有所变化", }, "charge": { name: "充电", - effect: "变为充电状态,提高下次使\n出的电属性的招式威力。自\n己的特防也会提高", + effect: "变为充电状态,提高下次使出的电\n属性的招式威力。自己的特防也会提高", }, "taunt": { name: "挑衅", - effect: "使对手愤怒。在3回合内让\n对手只能使出给予伤害的招\n式", + effect: "使对手愤怒。在3回合内让对手只\n能使出给予伤害的招式", }, "helpingHand": { name: "帮助", @@ -1083,23 +1083,23 @@ export const move: MoveTranslationEntries = { }, "trick": { name: "戏法", - effect: "抓住对手的空隙,交换自己\n和对手的持有物", + effect: "抓住对手的空隙,交换自己和对手\n的持有物", }, "rolePlay": { name: "扮演", - effect: "扮演对手,让自己的特性变\n得和对手相同", + effect: "扮演对手,让自己的特性变得和对手相同", }, "wish": { name: "祈愿", - effect: "在下一回合回复自己或是替\n换出场的宝可梦最大HP的\n一半", + effect: "在下一回合回复自己或是替换出场\n的宝可梦最大HP的一半", }, "assist": { name: "借助", - effect: "向同伴紧急求助,从我方宝\n可梦已学会的招式中随机使\n用1个", + effect: "向同伴紧急求助,从我方宝可梦已\n学会的招式中随机使用1个", }, "ingrain": { name: "扎根", - effect: "在大地上扎根,每回合回复\n自己的HP。因为扎根了,\n所以不能替换宝可梦", + effect: "在大地上扎根,每回合回复自己的HP。\n因为扎根了,所以不能替换宝可梦", }, "superpower": { name: "蛮力", @@ -1107,11 +1107,11 @@ export const move: MoveTranslationEntries = { }, "magicCoat": { name: "魔法反射", - effect: "当对手使出会变成异常状态\n的招式或寄生种子等时,会\n将对手的招式反射回去", + effect: "当对手使出会变成异常状态的招式\n或寄生种子等时,会将对手的招式\n反射回去", }, "recycle": { name: "回收利用", - effect: "使战斗中已经消耗掉的自己\n的持有物再生,并可以再次\n使用", + effect: "使战斗中已经消耗掉的自己的持有物再生,\n并可以再次使用", }, "revenge": { name: "报复", @@ -1119,63 +1119,63 @@ export const move: MoveTranslationEntries = { }, "brickBreak": { name: "劈瓦", - effect: "将手刀猛烈地挥下攻击对手。\n还可以破坏光墙和反射壁\n等", + effect: "将手刀猛烈地挥下攻击对手。\n还可以破坏光墙和反射壁等", }, "yawn": { name: "哈欠", - effect: "打个大哈欠引起睡意。在下\n一回合让对手陷入睡眠状态", + effect: "打个大哈欠引起睡意。\n在下一回合让对手陷入睡眠状态", }, "knockOff": { name: "拍落", - effect: "拍落对手的持有物,直到战\n斗结束都不能使用。对手携\n带道具时会增加伤害", + effect: "拍落对手的持有物,直到战斗结束\n都不能使用。对手携带道具时会增加伤害", }, "endeavor": { name: "蛮干", - effect: "给予伤害,使对手的HP变\n得和自己的HP一样", + effect: "给予伤害,使对手的HP变得和自\n己的HP一样", }, "eruption": { name: "喷火", - effect: "爆发怒火攻击对手。自己的\nHP越少,招式的威力越小", + effect: "爆发怒火攻击对手。自己的HP越少,\n招式的威力越小", }, "skillSwap": { name: "特性互换", - effect: "利用超能力互换自己和对手\n的特性", + effect: "利用超能力互换自己和对手的特性", }, "imprison": { name: "封印", - effect: "如果对手有和自己相同的招\n式,那么只有对手无法使用\n该招式", + effect: "如果对手有和自己相同的招式,\n那么只有对手无法使用该招式", }, "refresh": { name: "焕然一新", - effect: "让身体休息,治愈自己身上\n所中的毒、麻痹、灼伤的异\n常状态", + effect: "让身体休息,治愈自己身上所中的\n毒、麻痹、灼伤的异常状态", }, "grudge": { name: "怨念", - effect: "因对手的招式而陷入昏厥时\n给对手施加怨念,让该招式\n的PP变成0", + effect: "因对手的招式而陷入昏厥时给对手\n施加怨念,让该招式的PP变成0", }, "snatch": { name: "抢夺", - effect: "将对手打算使用的回复招式\n或能力变化招式夺为己用", + effect: "将对手打算使用的回复招式或能力\n变化招式夺为己用", }, "secretPower": { name: "秘密之力", - effect: "根据使用场所不同,该招式\n的追加效果也会有所变化", + effect: "根据使用场所不同,该招式的追加\n效果也会有所变化", }, "dive": { name: "潜水", - effect: "第1回合潜入水中,第2回\n合浮上来进行攻击", + effect: "第1回合潜入水中,第2回合浮上\n来进行攻击", }, "armThrust": { name: "猛推", - effect: "用张开着的双手猛推对手进\n行攻击。连续攻击2~5次", + effect: "用张开着的双手猛推对手进行攻击。\n连续攻击2~5次", }, "camouflage": { name: "保护色", - effect: "根据所在场所不同,如水边\n、草丛和洞窟等,可以改变\n自己的属性", + effect: "根据所在场所不同,如水边、草丛\n和洞窟等,可以改变自己的属性", }, "tailGlow": { name: "萤火", - effect: "凝视闪烁的光芒,集中自己\n的精神,从而巨幅提高特攻", + effect: "凝视闪烁的光芒,集中自己的精神,\n从而巨幅提高特攻", }, "lusterPurge": { name: "洁净光芒", @@ -1183,51 +1183,51 @@ export const move: MoveTranslationEntries = { }, "mistBall": { name: "薄雾球", - effect: "用围绕着雾状羽毛的球进行\n攻击。有时会降低对手的特\n攻", + effect: "用围绕着雾状羽毛的球进行攻击。\n有时会降低对手的特攻", }, "featherDance": { name: "羽毛舞", - effect: "撒出羽毛,笼罩在对手的周\n围。大幅降低对手的攻击", + effect: "撒出羽毛,笼罩在对手的周围。\n大幅降低对手的攻击", }, "teeterDance": { name: "摇晃舞", - effect: "摇摇晃晃地跳起舞蹈,让自\n己周围的宝可梦陷入混乱状\n态", + effect: "摇摇晃晃地跳起舞蹈,\n让自己周围的宝可梦陷入混乱状态", }, "blazeKick": { name: "火焰踢", - effect: "攻击对手后,有时会使其陷\n入灼伤状态。也容易击中要\n害", + effect: "攻击对手后,有时会使其陷入灼伤状态。\n也容易击中要害", }, "mudSport": { name: "玩泥巴", - effect: "一旦使用此招式,周围就会\n弄得到处是泥。在5回合内\n减弱电属性的招式", + effect: "一旦使用此招式,周围就会弄得到处是泥。\n在5回合内减弱电属性的招式", }, "iceBall": { name: "冰球", - effect: "在5回合内攻击对手。招式\n每次击中,威力就会提高", + effect: "在5回合内攻击对手。\n招式每次击中,威力就会提高", }, "needleArm": { name: "尖刺臂", - effect: "用带刺的手臂猛烈地挥舞进\n行攻击。有时会使对手畏缩", + effect: "用带刺的手臂猛烈地挥舞进行攻击。\n有时会使对手畏缩", }, "slackOff": { name: "偷懒", - effect: "偷懒休息。回复自己最大\nHP的一半", + effect: "偷懒休息。回复自己最大HP的一半", }, "hyperVoice": { name: "巨声", - effect: "给予对手又吵又响的巨大震\n动进行攻击", + effect: "给予对手又吵又响的巨大震动进行攻击", }, "poisonFang": { name: "剧毒牙", - effect: "用有毒的牙齿咬住对手进行\n攻击。有时会使对手中剧毒", + effect: "用有毒的牙齿咬住对手进行攻击。\n有时会使对手中剧毒", }, "crushClaw": { name: "撕裂爪", - effect: "用坚硬的锐爪劈开对手进行\n攻击。有时会降低对手的防\n御", + effect: "用坚硬的锐爪劈开对手进行攻击。\n有时会降低对手的防御", }, "blastBurn": { name: "爆炸烈焰", - effect: "用爆炸的火焰烧尽对手进行\n攻击。下一回合自己将无法\n动弹", + effect: "用爆炸的火焰烧尽对手进行攻击。\n下一回合自己将无法动弹", }, "hydroCannon": { name: "加农水炮", @@ -1239,15 +1239,15 @@ export const move: MoveTranslationEntries = { }, "astonish": { name: "惊吓", - effect: "用尖叫声等突然惊吓对手进\n行攻击。有时会使对手畏缩", + effect: "用尖叫声等突然惊吓对手进行攻击。\n有时会使对手畏缩", }, "weatherBall": { name: "气象球", - effect: "根据使用时的天气,招式属\n性和威力会改变", + effect: "根据使用时的天气,招式属性和威\n力会改变", }, "aromatherapy": { name: "芳香治疗", - effect: "让同伴闻沁人心脾的香气,\n从而治愈我方全员的异常状\n态", + effect: "让同伴闻沁人心脾的香气,\n从而治愈我方全员的异常状态", }, "fakeTears": { name: "假哭", @@ -1255,19 +1255,19 @@ export const move: MoveTranslationEntries = { }, "airCutter": { name: "空气利刃", - effect: "用锐利的风切斩对手进行攻\n击。容易击中要害", + effect: "用锐利的风切斩对手进行攻击。\n容易击中要害", }, "overheat": { name: "过热", - effect: "使出全部力量攻击对手。使\n用之后会因为反作用力,自\n己的特攻大幅降低", + effect: "使出全部力量攻击对手。\n使用之后会因为反作用力,自己的特攻大幅降低", }, "odorSleuth": { name: "气味侦测", - effect: "使出后对幽灵属性宝可梦没\n有效果的招式以及闪避率高\n的对手,变得能够打中", + effect: "使出后对幽灵属性宝可梦没有效果\n的招式以及闪避率高的对手,\n变得能够打中", }, "rockTomb": { name: "岩石封锁", - effect: "投掷岩石进行攻击。封住对\n手的行动,从而降低速度", + effect: "投掷岩石进行攻击。封住对手的行动,\n从而降低速度", }, "silverWind": { name: "银色旋风", @@ -1275,23 +1275,23 @@ export const move: MoveTranslationEntries = { }, "metalSound": { name: "金属音", - effect: "让对手听摩擦金属般讨厌的\n声音。大幅降低对手的特防", + effect: "让对手听摩擦金属般讨厌的声音。\n大幅降低对手的特防", }, "grassWhistle": { name: "草笛", - effect: "让对手听舒适的笛声,从而\n陷入睡眠状态", + effect: "让对手听舒适的笛声,\n从而陷入睡眠状态", }, "tickle": { name: "挠痒", - effect: "给对手挠痒,使其发笑,从\n而降低对手的攻击和防御", + effect: "给对手挠痒,使其发笑,\n从而降低对手的攻击和防御", }, "cosmicPower": { name: "宇宙力量", - effect: "汲取宇宙中神秘的力量,从\n而提高自己的防御和特防", + effect: "汲取宇宙中神秘的力量,\n从而提高自己的防御和特防", }, "waterSpout": { name: "喷水", - effect: "掀起潮水进行攻击。自己的\nHP越少,招式的威力越小", + effect: "掀起潮水进行攻击。自己的HP越少,\n招式的威力越小", }, "signalBeam": { name: "信号光束", @@ -1299,55 +1299,55 @@ export const move: MoveTranslationEntries = { }, "shadowPunch": { name: "暗影拳", - effect: "使出混影之拳。攻击必定会\n命中", + effect: "使出混影之拳。攻击必定会命中", }, "extrasensory": { name: "神通力", - effect: "发出看不见的神奇力量进行\n攻击。有时会使对手畏缩", + effect: "发出看不见的神奇力量进行攻击。\n有时会使对手畏缩", }, "skyUppercut": { name: "冲天拳", - effect: "用冲向天空般高高的上勾拳\n顶起对手进行攻击", + effect: "用冲向天空般高高的上勾拳顶起对\n手进行攻击", }, "sandTomb": { name: "流沙深渊", - effect: "将对手困在铺天盖地的沙暴\n中,在4~5回合内进行攻\n击", + effect: "将对手困在铺天盖地的沙暴中,\n在4~5回合内进行攻击", }, "sheerCold": { name: "绝对零度", - effect: "给对手一击昏厥。如果是冰\n属性以外的宝可梦使用,就\n会难以打中", + effect: "给对手一击昏厥。如果是冰属性以\n外的宝可梦使用,就会难以打中", }, "muddyWater": { name: "浊流", - effect: "向对手喷射浑浊的水进行攻\n击。有时会降低对手的命中\n率", + effect: "向对手喷射浑浊的水进行攻击。\n有时会降低对手的命中率", }, "bulletSeed": { name: "种子机关枪", - effect: "向对手猛烈地发射种子进行\n攻击。连续攻击2~5次", + effect: "向对手猛烈地发射种子进行攻击。\n连续攻击2~5次", }, "aerialAce": { name: "燕返", - effect: "以敏捷的动作戏弄对手后进\n行切斩。攻击必定会命中", + effect: "以敏捷的动作戏弄对手后进行切斩。\n攻击必定会命中", }, "icicleSpear": { name: "冰锥", - effect: "向对手发射锋利的冰柱进行\n攻击。连续攻击2~5次", + effect: "向对手发射锋利的冰柱进行攻击。\n连续攻击2~5次", }, "ironDefense": { name: "铁壁", - effect: "将皮肤变得坚硬如铁,从而\n大幅提高自己的防御", + effect: "将皮肤变得坚硬如铁,\n从而大幅提高自己的防御", }, "block": { name: "挡路", - effect: "张开双手进行阻挡,封住对\n手的退路,使其不能逃走", + effect: "张开双手进行阻挡,封住对手的退路,\n使其不能逃走", }, "howl": { name: "长嚎", - effect: "大声吼叫提高气势,从而提\n高自己和同伴的攻击", + effect: "大声吼叫提高气势,从而提高自己\n和同伴的攻击", }, "dragonClaw": { name: "龙爪", - effect: "用尖锐的巨爪劈开对手进行\n攻击", + effect: "用尖锐的巨爪劈开对手进行攻击", }, "frenzyPlant": { name: "疯狂植物", @@ -1355,11 +1355,11 @@ export const move: MoveTranslationEntries = { }, "bulkUp": { name: "健美", - effect: "使出全身力气绷紧肌肉,从\n而提高自己的攻击和防御", + effect: "使出全身力气绷紧肌肉,\n从而提高自己的攻击和防御", }, "bounce": { name: "弹跳", - effect: "弹跳到高高的空中,第2回\n合攻击对手。有时会让对手\n陷入麻痹状态", + effect: "弹跳到高高的空中,第2回合攻击对手。\n有时会让对手陷入麻痹状态", }, "mudShot": { name: "泥巴射击", @@ -1367,103 +1367,103 @@ export const move: MoveTranslationEntries = { }, "poisonTail": { name: "毒尾", - effect: "用尾巴拍打。有时会让对手\n陷入中毒状态,也容易击中\n要害", + effect: "用尾巴拍打。有时会让对手陷入中毒状态,\n也容易击中要害", }, "covet": { name: "渴望", - effect: "一边可爱地撒娇,一边靠近\n对手进行攻击,还能夺取对\n手携带的道具", + effect: "一边可爱地撒娇,一边靠近对手进行攻击,\n还能夺取对手携带的道具", }, "voltTackle": { name: "伏特攻击", - effect: "让电流覆盖全身猛撞向对手。\n自己也会受到不小的伤害。\n有时会让对手陷入麻痹状\n态", + effect: "让电流覆盖全身猛撞向对手。\n自己也会受到不小的伤害。\n有时会让对手陷入麻痹状态", }, "magicalLeaf": { name: "魔法叶", - effect: "散落可以追踪对手的神奇叶\n片。攻击必定会命中", + effect: "散落可以追踪对手的神奇叶片。\n攻击必定会命中", }, "waterSport": { name: "玩水", - effect: "用水湿透周围。在5回合内\n减弱火属性的招式", + effect: "用水湿透周围。在5回合内减弱火\n属性的招式", }, "calmMind": { name: "冥想", - effect: "静心凝神,从而提高自己的\n特攻和特防", + effect: "静心凝神,从而提高自己的特攻和特防", }, "leafBlade": { name: "叶刃", - effect: "像用剑一般操纵叶片切斩对\n手进行攻击。容易击中要害", + effect: "像用剑一般操纵叶片切斩对手进行攻击。\n容易击中要害", }, "dragonDance": { name: "龙之舞", - effect: "激烈地跳起神秘且强有力的\n舞蹈。从而提高自己的攻击\n和速度", + effect: "激烈地跳起神秘且强有力的舞蹈。\n从而提高自己的攻击和速度", }, "rockBlast": { name: "岩石爆击", - effect: "向对手发射坚硬的岩石进行\n攻击。连续攻击2~5次", + effect: "向对手发射坚硬的岩石进行攻击。\n连续攻击2~5次", }, "shockWave": { name: "电击波", - effect: "向对手快速发出电击。攻击\n必定会命中", + effect: "向对手快速发出电击。\n攻击必定会命中", }, "waterPulse": { name: "水之波动", - effect: "用水的震动攻击对手。有时\n会使对手混乱", + effect: "用水的震动攻击对手。\n有时会使对手混乱", }, "doomDesire": { name: "破灭之愿", - effect: "使用招式2回合后,会用无\n数道光束攻击对手", + effect: "使用招式2回合后,会用无数道光\n束攻击对手", }, "psychoBoost": { name: "精神突进", - effect: "使出全部力量攻击对手。使\n用之后会因为反作用力,自\n己的特攻大幅降低", + effect: "使出全部力量攻击对手。\n使用之后会因为反作用力,自己的特攻大幅降低", }, "roost": { name: "羽栖", - effect: "降到地面,使身体休息。回\n复自己最大HP的一半", + effect: "降到地面,使身体休息。\n回复自己最大HP的一半", }, "gravity": { name: "重力", - effect: "在5回合内,飘浮特性和飞\n行属性的宝可梦会被地面属\n性的招式击中。飞向空中的\n招式也将无法使用", + effect: "在5回合内,飘浮特性和飞行属性\n的宝可梦会被地面属性的招式击中。\n飞向空中的招式也将无法使用", }, "miracleEye": { name: "奇迹之眼", - effect: "使出后对恶属性宝可梦没有\n效果的招式以及闪避率高的\n对手,变得能够打中", + effect: "使出后对恶属性宝可梦没有效果的\n招式以及闪避率高的对手,\n变得能够打中", }, "wakeUpSlap": { name: "唤醒巴掌", - effect: "给予睡眠状态下的对手较大\n的伤害。但相反对手会从睡\n眠中醒过来", + effect: "给予睡眠状态下的对手较大的伤害。\n但相反对手会从睡眠中醒过来", }, "hammerArm": { name: "臂锤", - effect: "挥舞强力而沉重的拳头,给\n予对手伤害。自己的速度会\n降低", + effect: "挥舞强力而沉重的拳头,\n给予对手伤害。自己的速度会降低", }, "gyroBall": { name: "陀螺球", - effect: "让身体高速旋转并撞击对手。\n速度比对手越慢,威力越\n大", + effect: "让身体高速旋转并撞击对手。\n速度比对手越慢,威力越大", }, "healingWish": { name: "治愈之愿", - effect: "虽然自己陷入昏厥,但可以\n治愈后备上场的宝可梦的异\n常状态以及回复HP", + effect: "虽然自己陷入昏厥,但可以治愈后\n备上场的宝可梦的异常状态以及回复HP", }, "brine": { name: "盐水", - effect: "当对手的HP负伤到一半左\n右时,招式威力会变成2倍", + effect: "当对手的HP负伤到一半左右时,\n招式威力会变成2倍", }, "naturalGift": { name: "自然之恩", - effect: "从树果上获得力量进行攻击。\n根据携带的树果,招式属\n性和威力会改变", + effect: "从树果上获得力量进行攻击。\n根据携带的树果,招式属性和威力会改变", }, "feint": { name: "佯攻", - effect: "能够攻击正在使用守住或看\n穿等招式的对手。解除其守\n护效果", + effect: "能够攻击正在使用守住或看穿等招\n式的对手。解除其守护效果", }, "pluck": { name: "啄食", - effect: "用喙进行攻击。当对手携带\n树果时,可以食用并获得其\n效果", + effect: "用喙进行攻击。当对手携带树果时,\n可以食用并获得其效果", }, "tailwind": { name: "顺风", - effect: "刮起猛烈的旋风,在4回合\n内提高我方全员的速度", + effect: "刮起猛烈的旋风,在4回合内提高\n我方全员的速度", }, "acupressure": { name: "点穴", @@ -1471,35 +1471,35 @@ export const move: MoveTranslationEntries = { }, "metalBurst": { name: "金属爆炸", - effect: "使出招式前,将最后受到的\n招式的伤害大力返还给对手", + effect: "使出招式前,将最后受到的招式的\n伤害大力返还给对手", }, "uTurn": { name: "急速折返", - effect: "在攻击之后急速返回,和后\n备宝可梦进行替换", + effect: "在攻击之后急速返回,\n和后备宝可梦进行替换", }, "closeCombat": { name: "近身战", - effect: "放弃守护,向对手的怀里突\n击。自己的防御和特防会降\n低", + effect: "放弃守护,向对手的怀里突击。\n自己的防御和特防会降低", }, "payback": { name: "以牙还牙", - effect: "蓄力攻击。如果能在对手之\n后攻击,招式的威力会变成\n2倍", + effect: "蓄力攻击。如果能在对手之后攻击,\n招式的威力会变成2倍", }, "assurance": { name: "恶意追击", - effect: "如果此回合内对手已经受到\n伤害的话,招式威力会变成\n2倍", + effect: "如果此回合内对手已经受到伤害的话,\n招式威力会变成2倍", }, "embargo": { name: "查封", - effect: "让对手在5回合内不能使用\n宝可梦携带的道具。训练家\n也不能给那只宝可梦使用道\n具", + effect: "让对手在5回合内不能使用宝可梦\n携带的道具。训练家也不能给那只\n宝可梦使用道具", }, "fling": { name: "投掷", - effect: "快速投掷携带的道具进行攻\n击。根据道具不同,威力和\n效果会改变", + effect: "快速投掷携带的道具进行攻击。\n根据道具不同,威力和效果会改变", }, "psychoShift": { name: "精神转移", - effect: "利用超能力施以暗示,从而\n将自己受到的异常状态转移\n给对手", + effect: "利用超能力施以暗示,\n从而将自己受到的异常状态转移给对手", }, "trumpCard": { name: "王牌", @@ -1507,95 +1507,95 @@ export const move: MoveTranslationEntries = { }, "healBlock": { name: "回复封锁", - effect: "在5回合内无法通过招式、\n特性或携带的道具来回复H\nP", + effect: "在5回合内无法通过招式、特性或\n携带的道具来回复HP", }, "wringOut": { name: "绞紧", - effect: "用力勒紧对手进行攻击。对\n手的HP越多,威力越大", + effect: "用力勒紧对手进行攻击。\n对手的HP越多,威力越大", }, "powerTrick": { name: "力量戏法", - effect: "利用超能力交换自己的攻击\n和防御的力量", + effect: "利用超能力交换自己的攻击和防御的力量", }, "gastroAcid": { name: "胃液", - effect: "将胃液吐向对手的身体。沾\n上的胃液会消除对手的特性\n效果", + effect: "将胃液吐向对手的身体。\n沾上的胃液会消除对手的特性效果", }, "luckyChant": { name: "幸运咒语", - effect: "向天许愿,从而在5回合内\n不会被对手的攻击打中要害", + effect: "向天许愿,从而在5回合内不会被\n对手的攻击打中要害", }, "meFirst": { name: "抢先一步", - effect: "提高威力,抢先使出对手想\n要使出的招式。如果不先使\n出则会失败", + effect: "提高威力,抢先使出对手想要使出的招式。\n如果不先使出则会失败", }, "copycat": { name: "仿效", - effect: "模仿对手刚才使出的招式,\n并使出相同招式。如果对手\n还没出招则会失败", + effect: "模仿对手刚才使出的招式,\n并使出相同招式。如果对手还没出招则会失败", }, "powerSwap": { name: "力量互换", - effect: "利用超能力互换自己和对手\n的攻击以及特攻的能力变化", + effect: "利用超能力互换自己和对手的攻击\n以及特攻的能力变化", }, "guardSwap": { name: "防守互换", - effect: "利用超能力互换自己和对手\n的防御以及特防的能力变化", + effect: "利用超能力互换自己和对手的防御\n以及特防的能力变化", }, "punishment": { name: "惩罚", - effect: "根据能力变化,对手提高的\n力量越大,招式的威力越大", + effect: "根据能力变化,对手提高的力量越大,\n招式的威力越大", }, "lastResort": { name: "珍藏", - effect: "当战斗中已学会的招式全部\n使用过后,才能开始使出珍\n藏的招式", + effect: "当战斗中已学会的招式全部使用过后,\n才能开始使出珍藏的招式", }, "worrySeed": { name: "烦恼种子", - effect: "种植心神不宁的种子。使对\n手不能入眠,并将特性变成\n不眠", + effect: "种植心神不宁的种子。\n使对手不能入眠,并将特性变成不眠", }, "suckerPunch": { name: "突袭", - effect: "可以比对手先攻击。对手使\n出的招式如果不是攻击招式\n则会失败", + effect: "可以比对手先攻击。对手使出的招\n式如果不是攻击招式则会失败", }, "toxicSpikes": { name: "毒菱", - effect: "在对手的脚下撒毒菱。使对\n手替换出场的宝可梦中毒", + effect: "在对手的脚下撒毒菱。\n使对手替换出场的宝可梦中毒", }, "heartSwap": { name: "心灵互换", - effect: "利用超能力互换自己和对手\n之间的能力变化", + effect: "利用超能力互换自己和对手之间的\n能力变化", }, "aquaRing": { name: "水流环", - effect: "在自己身体的周围覆盖用水\n制造的幕。每回合回复HP", + effect: "在自己身体的周围覆盖用水制造的幕。\n每回合回复HP", }, "magnetRise": { name: "电磁飘浮", - effect: "利用电气产生的磁力浮在空\n中。在5回合内可以飘浮", + effect: "利用电气产生的磁力浮在空中。\n在5回合内可以飘浮", }, "flareBlitz": { name: "闪焰冲锋", - effect: "让火焰覆盖全身猛撞向对手。\n自己也会受到不小的伤害。\n有时会让对手陷入灼伤状\n态", + effect: "让火焰覆盖全身猛撞向对手。\n自己也会受到不小的伤害。\n有时会让对手陷入灼伤状态", }, "forcePalm": { name: "发劲", - effect: "向对手的身体发出冲击波进\n行攻击。有时会让对手陷入\n麻痹状态", + effect: "向对手的身体发出冲击波进行攻击。\n有时会让对手陷入麻痹状态", }, "auraSphere": { name: "波导弹", - effect: "从体内产生出波导之力,然\n后向对手发出。攻击必定会\n命中", + effect: "从体内产生出波导之力,\n然后向对手发出。攻击必定会命中", }, "rockPolish": { name: "岩石打磨", - effect: "打磨自己的身体,减少空气\n阻力。可以大幅提高自己的\n速度", + effect: "打磨自己的身体,减少空气阻力。\n可以大幅提高自己的速度", }, "poisonJab": { name: "毒击", - effect: "用带毒的触手或手臂刺入对\n手。有时会让对手陷入中毒\n状态", + effect: "用带毒的触手或手臂刺入对手。\n有时会让对手陷入中毒状态", }, "darkPulse": { name: "恶之波动", - effect: "从体内发出充满恶意的恐怖\n气场。有时会使对手畏缩", + effect: "从体内发出充满恶意的恐怖气场。\n有时会使对手畏缩", }, "nightSlash": { name: "暗袭要害", @@ -1603,19 +1603,19 @@ export const move: MoveTranslationEntries = { }, "aquaTail": { name: "水流尾", - effect: "如惊涛骇浪般挥动大尾巴攻\n击对手", + effect: "如惊涛骇浪般挥动大尾巴攻击对手", }, "seedBomb": { name: "种子炸弹", - effect: "将外壳坚硬的大种子,从上\n方砸下攻击对手", + effect: "将外壳坚硬的大种子,\n从上方砸下攻击对手", }, "airSlash": { name: "空气之刃", - effect: "用连天空也能劈开的空气之\n刃进行攻击。有时会使对手\n畏缩", + effect: "用连天空也能劈开的空气之刃进行攻击。\n有时会使对手畏缩", }, "xScissor": { name: "十字剪", - effect: "将镰刀或爪子像剪刀般地交\n叉,顺势劈开对手", + effect: "将镰刀或爪子像剪刀般地交叉,\n顺势劈开对手", }, "bugBuzz": { name: "虫鸣", @@ -1623,23 +1623,23 @@ export const move: MoveTranslationEntries = { }, "dragonPulse": { name: "龙之波动", - effect: "从大大的口中掀起冲击波攻\n击对手", + effect: "从大大的口中掀起冲击波攻击对手", }, "dragonRush": { name: "龙之俯冲", - effect: "释放出骇人的杀气,一边威\n慑一边撞击对手。有时会使\n对手畏缩", + effect: "释放出骇人的杀气,一边威慑一边\n撞击对手。有时会使对手畏缩", }, "powerGem": { name: "力量宝石", - effect: "发射如宝石般闪耀的光芒攻\n击对手", + effect: "发射如宝石般闪耀的光芒攻击对手", }, "drainPunch": { name: "吸取拳", - effect: "用拳头吸取对手的力量。可\n以回复给予对手伤害的一半\nHP", + effect: "用拳头吸取对手的力量。\n可以回复给予对手伤害的一半HP", }, "vacuumWave": { name: "真空波", - effect: "挥动拳头,掀起真空波。必\n定能够先制攻击", + effect: "挥动拳头,掀起真空波。\n必定能够先制攻击", }, "focusBlast": { name: "真气弹", @@ -1651,7 +1651,7 @@ export const move: MoveTranslationEntries = { }, "braveBird": { name: "勇鸟猛攻", - effect: "收拢翅膀,通过低空飞行突\n击对手。自己也会受到不小\n的伤害", + effect: "收拢翅膀,通过低空飞行突击对手。\n自己也会受到不小的伤害", }, "earthPower": { name: "大地之力", @@ -1659,7 +1659,7 @@ export const move: MoveTranslationEntries = { }, "switcheroo": { name: "掉包", - effect: "用一闪而过的速度交换自己\n和对手的持有物", + effect: "用一闪而过的速度交换自己和对手\n的持有物", }, "gigaImpact": { name: "终极冲击", @@ -1667,107 +1667,107 @@ export const move: MoveTranslationEntries = { }, "nastyPlot": { name: "诡计", - effect: "谋划诡计,激活头脑。大幅\n提高自己的特攻", + effect: "谋划诡计,激活头脑。\n大幅提高自己的特攻", }, "bulletPunch": { name: "子弹拳", - effect: "向对手使出如子弹般快速而\n坚硬的拳头。必定能够先制\n攻击", + effect: "向对手使出如子弹般快速而坚硬的拳头。\n必定能够先制攻击", }, "avalanche": { name: "雪崩", - effect: "如果受到对手的招式攻击,\n就能给予该对手2倍威力的\n攻击", + effect: "如果受到对手的招式攻击,\n就能给予该对手2倍威力的攻击", }, "iceShard": { name: "冰砾", - effect: "瞬间制作冰块,快速地扔向\n对手。必定能够先制攻击", + effect: "瞬间制作冰块,快速地扔向对手。\n必定能够先制攻击", }, "shadowClaw": { name: "暗影爪", - effect: "以影子做成的锐爪,劈开对\n手。容易击中要害", + effect: "以影子做成的锐爪,劈开对手。\n容易击中要害", }, "thunderFang": { name: "雷电牙", - effect: "用蓄满电流的牙齿咬住对手。\n有时会使对手畏缩或陷入\n麻痹状态", + effect: "用蓄满电流的牙齿咬住对手。\n有时会使对手畏缩或陷入麻痹状态", }, "iceFang": { name: "冰冻牙", - effect: "用藏有冷气的牙齿咬住对手。\n有时会使对手畏缩或陷入\n冰冻状态", + effect: "用藏有冷气的牙齿咬住对手。\n有时会使对手畏缩或陷入冰冻状态", }, "fireFang": { name: "火焰牙", - effect: "用覆盖着火焰的牙齿咬住对\n手。有时会使对手畏缩或陷\n入灼伤状态", + effect: "用覆盖着火焰的牙齿咬住对手。\n有时会使对手畏缩或陷入灼伤状态", }, "shadowSneak": { name: "影子偷袭", - effect: "伸长影子,从对手的背后进\n行攻击。必定能够先制攻击", + effect: "伸长影子,从对手的背后进行攻击。\n必定能够先制攻击", }, "mudBomb": { name: "泥巴炸弹", - effect: "向对手发射坚硬的泥弹进行\n攻击。有时会降低对手的命\n中率", + effect: "向对手发射坚硬的泥弹进行攻击。\n有时会降低对手的命中率", }, "psychoCut": { name: "精神利刃", - effect: "用实体化的心之利刃劈开对\n手。容易击中要害", + effect: "用实体化的心之利刃劈开对手。\n容易击中要害", }, "zenHeadbutt": { name: "意念头锤", - effect: "将思念的力量集中在前额进\n行攻击。有时会使对手畏缩", + effect: "将思念的力量集中在前额进行攻击。\n有时会使对手畏缩", }, "mirrorShot": { name: "镜光射击", - effect: "抛光自己的身体,向对手释\n放出闪光之力。有时会降低\n对手的命中率", + effect: "抛光自己的身体,向对手释放出闪光之力。\n有时会降低对手的命中率", }, "flashCannon": { name: "加农光炮", - effect: "将身体的光芒聚集在一点释\n放出去。有时会降低对手的\n特防", + effect: "将身体的光芒聚集在一点释放出去。\n有时会降低对手的特防", }, "rockClimb": { name: "攀岩", - effect: "发动猛撞攻击,有时会使对\n手混乱。是宝可表的秘传招\n式之一", + effect: "发动猛撞攻击,有时会使对手混乱。\n是宝可表的秘传招式之一", }, "defog": { name: "清除浓雾", - effect: "用强风吹开对手的反射壁或\n光墙等。也会降低对手的闪\n避率", + effect: "用强风吹开对手的反射壁或光墙等。\n也会降低对手的闪避率", }, "trickRoom": { name: "戏法空间", - effect: "制造出离奇的空间。在5回\n合内速度慢的宝可梦可以先\n行动", + effect: "制造出离奇的空间。在5回合内速\n度慢的宝可梦可以先行动", }, "dracoMeteor": { name: "流星群", - effect: "从天空中向对手落下陨石。\n使用之后因为反作用力,自\n己的特攻会大幅降低", + effect: "从天空中向对手落下陨石。\n使用之后因为反作用力,自己的特攻会大幅降低", }, "discharge": { name: "放电", - effect: "用耀眼的电击攻击自己周围\n所有的宝可梦。有时会陷入\n麻痹状态", + effect: "用耀眼的电击攻击自己周围所有的宝可梦。\n有时会陷入麻痹状态", }, "lavaPlume": { name: "喷烟", - effect: "用熊熊烈火攻击自己周围所\n有的宝可梦。有时会陷入灼\n伤状态", + effect: "用熊熊烈火攻击自己周围所有的宝可梦。\n有时会陷入灼伤状态", }, "leafStorm": { name: "飞叶风暴", - effect: "用尖尖的叶片向对手卷起风\n暴。使用之后因为反作用力\n自己的特攻会大幅降低", + effect: "用尖尖的叶片向对手卷起风暴。\n使用之后因为反作用力自己的特攻会\n大幅降低", }, "powerWhip": { name: "强力鞭打", - effect: "激烈地挥舞青藤或触手摔打\n对手进行攻击", + effect: "激烈地挥舞青藤或触手摔打对手进行攻击", }, "rockWrecker": { name: "岩石炮", - effect: "向对手发射巨大的岩石进行\n攻击。下一回合自己将无法\n动弹", + effect: "向对手发射巨大的岩石进行攻击。\n下一回合自己将无法动弹", }, "crossPoison": { name: "十字毒刃", - effect: "用毒刃劈开对手。有时会让\n对手陷入中毒状态,也容易\n击中要害", + effect: "用毒刃劈开对手。有时会让对手陷\n入中毒状态,也容易击中要害", }, "gunkShot": { name: "垃圾射击", - effect: "用肮脏的垃圾撞向对手进行\n攻击。有时会让对手陷入中\n毒状态", + effect: "用肮脏的垃圾撞向对手进行攻击。\n有时会让对手陷入中毒状态", }, "ironHead": { name: "铁头", - effect: "用钢铁般坚硬的头部进行攻\n击。有时会使对手畏缩", + effect: "用钢铁般坚硬的头部进行攻击。\n有时会使对手畏缩", }, "magnetBomb": { name: "磁铁炸弹", @@ -1775,83 +1775,83 @@ export const move: MoveTranslationEntries = { }, "stoneEdge": { name: "尖石攻击", - effect: "用尖尖的岩石刺入对手进行\n攻击。容易击中要害", + effect: "用尖尖的岩石刺入对手进行攻击。\n容易击中要害", }, "captivate": { name: "诱惑", - effect: "♂诱惑♀或♀诱惑♂,从而\n大幅降低对手的特攻", + effect: "♂诱惑♀或♀诱惑♂,\n从而大幅降低对手的特攻", }, "stealthRock": { name: "隐形岩", - effect: "将无数岩石悬浮在对手的周\n围,从而对替换出场的对手\n的宝可梦给予伤害", + effect: "将无数岩石悬浮在对手的周围,\n从而对替换出场的对手的宝可梦给予伤害", }, "grassKnot": { name: "打草结", - effect: "用草缠住并绊倒对手。对手\n越重,威力越大", + effect: "用草缠住并绊倒对手。\n对手越重,威力越大", }, "chatter": { name: "喋喋不休", - effect: "用非常烦人的,喋喋不休的\n音波攻击对手。使对手混乱", + effect: "用非常烦人的,喋喋不休的音波攻击对手。\n使对手混乱", }, "judgment": { name: "制裁光砾", - effect: "向对手放出无数的光弹。属\n性会根据自己携带的石板不\n同而改变", + effect: "向对手放出无数的光弹。\n属性会根据自己携带的石板不同而改变", }, "bugBite": { name: "虫咬", - effect: "咬住进行攻击。当对手携带\n树果时,可以食用并获得其\n效果", + effect: "咬住进行攻击。当对手携带树果时,\n可以食用并获得其效果", }, "chargeBeam": { name: "充电光束", - effect: "向对手发射电击光束。由于\n蓄满电流,有时会提高自己\n的特攻", + effect: "向对手发射电击光束。\n由于蓄满电流,有时会提高自己的特攻", }, "woodHammer": { name: "木槌", - effect: "用坚硬的躯体撞击对手进行\n攻击。自己也会受到不小的\n伤害", + effect: "用坚硬的躯体撞击对手进行攻击。\n自己也会受到不小的伤害", }, "aquaJet": { name: "水流喷射", - effect: "以迅雷不及掩耳之势扑向对\n手。必定能够先制攻击", + effect: "以迅雷不及掩耳之势扑向对手。\n必定能够先制攻击", }, "attackOrder": { name: "攻击指令", - effect: "召唤手下,让其朝对手发起\n攻击。容易击中要害", + effect: "召唤手下,让其朝对手发起攻击。\n容易击中要害", }, "defendOrder": { name: "防御指令", - effect: "召唤手下,让其附在自己的\n身体上。可以提高自己的防\n御和特防", + effect: "召唤手下,让其附在自己的身体上。\n可以提高自己的防御和特防", }, "healOrder": { name: "回复指令", - effect: "召唤手下疗伤。回复自己最\n大HP的一半", + effect: "召唤手下疗伤。回复自己最大HP的一半", }, "headSmash": { name: "双刃头锤", - effect: "拼命使出浑身力气,向对手\n进行头锤攻击。自己也会受\n到非常大的伤害", + effect: "拼命使出浑身力气,向对手进行头锤攻击。\n自己也会受到非常大的伤害", }, "doubleHit": { name: "二连击", - effect: "使用尾巴等拍打对手进行攻\n击。连续2次给予伤害", + effect: "使用尾巴等拍打对手进行攻击。\n连续2次给予伤害", }, "roarOfTime": { name: "时光咆哮", - effect: "释放出扭曲时间般的强大力\n量攻击对手。下一回合自己\n将无法动弹", + effect: "释放出扭曲时间般的强大力量攻击对手。\n下一回合自己将无法动弹", }, "spacialRend": { name: "亚空裂斩", - effect: "将对手连同周围的空间一起\n撕裂并给予伤害。容易击中\n要害", + effect: "将对手连同周围的空间一起撕裂并\n给予伤害。容易击中要害", }, "lunarDance": { name: "新月舞", - effect: "虽然自己陷入昏厥,但可以\n治愈后备上场的宝可梦的全\n部状态", + effect: "虽然自己陷入昏厥,但可以治愈后\n备上场的宝可梦的全部状态", }, "crushGrip": { name: "捏碎", - effect: "用骇人的力量捏碎对手。对\n手剩余的HP越多,威力越\n大", + effect: "用骇人的力量捏碎对手。\n对手剩余的HP越多,威力越大", }, "magmaStorm": { name: "熔岩风暴", - effect: "将对手困在熊熊燃烧的火焰\n中,在4~5回合内进行攻\n击", + effect: "将对手困在熊熊燃烧的火焰中,\n在4~5回合内进行攻击", }, "darkVoid": { name: "暗黑洞", @@ -1859,211 +1859,211 @@ export const move: MoveTranslationEntries = { }, "seedFlare": { name: "种子闪光", - effect: "从身体里产生冲击波。有时\n会大幅降低对手的特防", + effect: "从身体里产生冲击波。\n有时会大幅降低对手的特防", }, "ominousWind": { name: "奇异之风", - effect: "突然刮起毛骨悚然的暴风攻\n击对手。有时会提高自己的\n全部能力", + effect: "突然刮起毛骨悚然的暴风攻击对手。\n有时会提高自己的全部能力", }, "shadowForce": { name: "暗影潜袭", - effect: "第1回合消失踪影,第2回\n合攻击对手。即使对手正受\n保护,也能击中", + effect: "第1回合消失踪影,第2回合攻击对手。\n即使对手正受保护,\n也能击中", }, "honeClaws": { name: "磨爪", - effect: "将爪子磨得更加锋利。提高\n自己的攻击和命中率", + effect: "将爪子磨得更加锋利。\n提高自己的攻击和命中率", }, "wideGuard": { name: "广域防守", - effect: "在1回合内防住击打我方全\n员的攻击", + effect: "在1回合内防住击打我方全员的攻击", }, "guardSplit": { name: "防守平分", - effect: "利用超能力将自己和对手的\n防御和特防相加,再进行平\n分", + effect: "利用超能力将自己和对手的防御和\n特防相加,再进行平分", }, "powerSplit": { name: "力量平分", - effect: "利用超能力将自己和对手的\n攻击和特攻相加,再进行平\n分", + effect: "利用超能力将自己和对手的攻击和\n特攻相加,再进行平分", }, "wonderRoom": { name: "奇妙空间", - effect: "制造出离奇的空间。在5回\n合内互换所有宝可梦的防御\n和特防", + effect: "制造出离奇的空间。在5回合内互\n换所有宝可梦的防御和特防", }, "psyshock": { name: "精神冲击", - effect: "将神奇的念波实体化攻击对\n手。给予物理伤害", + effect: "将神奇的念波实体化攻击对手。\n给予物理伤害", }, "venoshock": { name: "毒液冲击", - effect: "将特殊的毒液泼向对手。对\n处于中毒状态的对手,威力\n会变成2倍", + effect: "将特殊的毒液泼向对手。\n对处于中毒状态的对手,威力会变成2倍", }, "autotomize": { name: "身体轻量化", - effect: "削掉身体上没用的部分。大\n幅提高自己的速度,同时体\n重也会变轻", + effect: "削掉身体上没用的部分。\n大幅提高自己的速度,同时体重也会变轻", }, "ragePowder": { name: "愤怒粉", - effect: "将令人烦躁的粉末撒在自己\n身上,用以吸引对手的注意。\n使对手的攻击全部指向自\n己", + effect: "将令人烦躁的粉末撒在自己身上,\n用以吸引对手的注意。\n使对手的攻击全部指向自己", }, "telekinesis": { name: "意念移物", - effect: "利用超能力使对手浮起来。\n在3回合内攻击会变得容易\n打中对手", + effect: "利用超能力使对手浮起来。\n在3回合内攻击会变得容易打中对手", }, "magicRoom": { name: "魔法空间", - effect: "制造出离奇的空间。在5回\n合内所有宝可梦携带道具的\n效果都会消失", + effect: "制造出离奇的空间。在5回合内所\n有宝可梦携带道具的效果都会消失", }, "smackDown": { name: "击落", - effect: "扔石头或炮弹,攻击飞行的\n对手。对手会被击落,掉到\n地面", + effect: "扔石头或炮弹,攻击飞行的对手。\n对手会被击落,掉到地面", }, "stormThrow": { name: "山岚摔", - effect: "向对手使出强烈的一击。攻\n击必定会击中要害", + effect: "向对手使出强烈的一击。\n攻击必定会击中要害", }, "flameBurst": { name: "烈焰溅射", - effect: "如果击中,爆裂的火焰会攻\n击到对手。爆裂出的火焰还\n会飞溅到旁边的对手", + effect: "如果击中,爆裂的火焰会攻击到对手。\n爆裂出的火焰还会飞溅到旁边的对手", }, "sludgeWave": { name: "污泥波", - effect: "用污泥波攻击自己周围所有\n的宝可梦。有时会陷入中毒\n状态", + effect: "用污泥波攻击自己周围所有的宝可梦。\n有时会陷入中毒状态", }, "quiverDance": { name: "蝶舞", - effect: "轻巧地跳起神秘而又美丽的\n舞蹈。提高自己的特攻、特\n防和速度", + effect: "轻巧地跳起神秘而又美丽的舞蹈。\n提高自己的特攻、特防和速度", }, "heavySlam": { name: "重磅冲撞", - effect: "用沉重的身体撞向对手进行\n攻击。自己比对手越重,威\n力越大", + effect: "用沉重的身体撞向对手进行攻击。\n自己比对手越重,威力越大", }, "synchronoise": { name: "同步干扰", - effect: "用神奇电波对周围所有和自\n己属性相同的宝可梦给予伤\n害", + effect: "用神奇电波对周围所有和自己属性\n相同的宝可梦给予伤害", }, "electroBall": { name: "电球", - effect: "用电气团撞向对手。自己比\n对手速度越快,威力越大", + effect: "用电气团撞向对手。自己比对手速度越快,\n威力越大", }, "soak": { name: "浸水", - effect: "将大量的水泼向对手,从而\n使其变成水属性", + effect: "将大量的水泼向对手,\n从而使其变成水属性", }, "flameCharge": { name: "蓄能焰袭", - effect: "让火焰覆盖全身,攻击对手。\n积蓄力量来提高自己的速\n度", + effect: "让火焰覆盖全身,攻击对手。\n积蓄力量来提高自己的速度", }, "coil": { name: "盘蜷", - effect: "盘蜷着集中精神。提高自己\n的攻击、防御和命中率", + effect: "盘蜷着集中精神。提高自己的攻击\n、防御和命中率", }, "lowSweep": { name: "下盘踢", - effect: "以敏捷的动作瞄准对手的脚\n进行攻击。会降低对手的速\n度", + effect: "以敏捷的动作瞄准对手的脚进行攻击。\n会降低对手的速度", }, "acidSpray": { name: "酸液炸弹", - effect: "喷出能溶化对手的液体进行\n攻击。会大幅降低对手的特\n防", + effect: "喷出能溶化对手的液体进行攻击。\n会大幅降低对手的特防", }, "foulPlay": { name: "欺诈", - effect: "利用对手的力量进行攻击。\n正和自己战斗的对手,其攻\n击越高,伤害越大", + effect: "利用对手的力量进行攻击。\n正和自己战斗的对手,其攻击越高,\n伤害越大", }, "simpleBeam": { name: "单纯光束", - effect: "向对手发送谜之念波。接收\n到念波的对手,其特性会变\n为单纯", + effect: "向对手发送谜之念波。\n接收到念波的对手,其特性会变为单纯", }, "entrainment": { name: "找伙伴", - effect: "用神奇的节奏跳舞。使对手\n模仿自己的动作,从而将特\n性变成一样", + effect: "用神奇的节奏跳舞。使对手模仿自\n己的动作,从而将特性变成一样", }, "afterYou": { name: "您先请", - effect: "支援我方或对手的行动,使\n其紧接着此招式之后行动", + effect: "支援我方或对手的行动,\n使其紧接着此招式之后行动", }, "round": { name: "轮唱", - effect: "用歌声攻击对手。大家一起\n轮唱便可以接连使出,威力\n也会提高", + effect: "用歌声攻击对手。大家一起轮唱便\n可以接连使出,威力也会提高", }, "echoedVoice": { name: "回声", - effect: "用回声攻击对手。如果每回\n合都有宝可梦接着使用该招\n式,威力就会提高", + effect: "用回声攻击对手。如果每回合都有\n宝可梦接着使用该招式,\n威力就会提高", }, "chipAway": { name: "逐步击破", - effect: "看准机会稳步攻击。无视对\n手的能力变化,直接给予伤\n害", + effect: "看准机会稳步攻击。无视对手的能力变化,\n直接给予伤害", }, "clearSmog": { name: "清除之烟", - effect: "向对手投掷特殊的泥块进行\n攻击。使其能力变回原点", + effect: "向对手投掷特殊的泥块进行攻击。\n使其能力变回原点", }, "storedPower": { name: "辅助力量", - effect: "用蓄积起来的力量攻击对手。\n自己的能力提高得越多,\n威力就越大", + effect: "用蓄积起来的力量攻击对手。\n自己的能力提高得越多,威力就越大", }, "quickGuard": { name: "快速防守", - effect: "守护自己和同伴,以防对手\n的先制攻击", + effect: "守护自己和同伴,以防对手的先制攻击", }, "allySwitch": { name: "交换场地", - effect: "用神奇的力量瞬间移动,互\n换自己和同伴所在的位置。\n连续使出则容易失败", + effect: "用神奇的力量瞬间移动,\n互换自己和同伴所在的位置。连续使出则容易失败", }, "scald": { name: "热水", - effect: "向对手喷射煮得翻滚的开水\n进行攻击。有时会让对手陷\n入灼伤状态", + effect: "向对手喷射煮得翻滚的开水进行攻击。\n有时会让对手陷入灼伤状态", }, "shellSmash": { name: "破壳", - effect: "打破外壳,降低自己的防御\n和特防,但大幅提高攻击、\n特攻和速度", + effect: "打破外壳,降低自己的防御和特防,\n但大幅提高攻击、特攻和速度", }, "healPulse": { name: "治愈波动", - effect: "放出治愈波动,从而回复对\n手最大HP的一半", + effect: "放出治愈波动,从而回复对手最大\nHP的一半", }, "hex": { name: "祸不单行", - effect: "接二连三地进行攻击。对处\n于异常状态的对手给予较大\n的伤害", + effect: "接二连三地进行攻击。\n对处于异常状态的对手给予较大的伤害", }, "skyDrop": { name: "自由落体", - effect: "第1回合将对手带到空中,\n第2回合将其摔下进行攻击。\n被带到空中的对手不能动\n弹", + effect: "第1回合将对手带到空中,\n第2回合将其摔下进行攻击。\n被带到空中的对手不能动弹", }, "shiftGear": { name: "换档", - effect: "转动齿轮,不仅提高自己的\n攻击,还会大幅提高速度", + effect: "转动齿轮,不仅提高自己的攻击,\n还会大幅提高速度", }, "circleThrow": { name: "巴投", - effect: "扔飞对手,强制拉后备宝可\n梦上场。如果对手为野生宝\n可梦,战斗将直接结束", + effect: "扔飞对手,强制拉后备宝可梦上场。\n如果对手为野生宝可梦,\n战斗将直接结束", }, "incinerate": { name: "烧净", - effect: "用火焰攻击对手。对手携带\n树果等时,会烧掉,使其不\n能使用", + effect: "用火焰攻击对手。对手携带树果等时,\n会烧掉,使其不能使用", }, "quash": { name: "延后", - effect: "压制对手,从而将其行动顺\n序放到最后", + effect: "压制对手,从而将其行动顺序放到最后", }, "acrobatics": { name: "杂技", - effect: "轻巧地攻击对手。自己没有\n携带道具时,会给予较大的\n伤害", + effect: "轻巧地攻击对手。自己没有携带道具时,\n会给予较大的伤害", }, "reflectType": { name: "镜面属性", - effect: "反射对手的属性,让自己也\n变成一样的属性", + effect: "反射对手的属性,让自己也变成一\n样的属性", }, "retaliate": { name: "报仇", - effect: "为倒下的同伴报仇。如果上\n一回合有同伴倒下,威力就\n会提高", + effect: "为倒下的同伴报仇。如果上一回合\n有同伴倒下,威力就会提高", }, "finalGambit": { name: "搏命", - effect: "拼命攻击对手。虽然自己陷\n入昏厥,但会给予对手和自\n己目前HP等量的伤害", + effect: "拼命攻击对手。虽然自己陷入昏厥,\n但会给予对手和自己目前HP等\n量的伤害", }, "bestow": { name: "传递礼物", - effect: "当对手未携带道具时,能够\n将自己携带的道具交给对手", + effect: "当对手未携带道具时,\n能够将自己携带的道具交给对手", }, "inferno": { name: "烈火深渊", @@ -2071,39 +2071,39 @@ export const move: MoveTranslationEntries = { }, "waterPledge": { name: "水之誓约", - effect: "用水柱进行攻击。如果和火\n组合,威力就会提高,天空\n中会挂上彩虹", + effect: "用水柱进行攻击。如果和火组合,\n威力就会提高,天空中会挂上彩虹", }, "firePledge": { name: "火之誓约", - effect: "用火柱进行攻击。如果和草\n组合,威力就会提高,周围\n会变成火海", + effect: "用火柱进行攻击。如果和草组合,\n威力就会提高,周围会变成火海", }, "grassPledge": { name: "草之誓约", - effect: "用草柱进行攻击。如果和水\n组合,威力就会提高,周围\n会变成湿地", + effect: "用草柱进行攻击。如果和水组合,\n威力就会提高,周围会变成湿地", }, "voltSwitch": { name: "伏特替换", - effect: "在攻击之后急速返回,和后\n备宝可梦进行替换", + effect: "在攻击之后急速返回,\n和后备宝可梦进行替换", }, "struggleBug": { name: "虫之抵抗", - effect: "抵抗并攻击对手。会降低对\n手的特攻", + effect: "抵抗并攻击对手。会降低对手的特攻", }, "bulldoze": { name: "重踏", - effect: "用力踩踏地面并攻击自己周\n围所有的宝可梦。会降低对\n方的速度", + effect: "用力踩踏地面并攻击自己周围所有\n的宝可梦。会降低对方的速度", }, "frostBreath": { name: "冰息", - effect: "将冰冷的气息吹向对手进行\n攻击。必定会击中要害", + effect: "将冰冷的气息吹向对手进行攻击。\n必定会击中要害", }, "dragonTail": { name: "龙尾", - effect: "弹飞对手,强制拉后备宝可\n梦上场。如果对手为野生宝\n可梦,战斗将直接结束", + effect: "弹飞对手,强制拉后备宝可梦上场。\n如果对手为野生宝可梦,\n战斗将直接结束", }, "workUp": { name: "自我激励", - effect: "激励自己,从而提高攻击和\n特攻", + effect: "激励自己,从而提高攻击和特攻", }, "electroweb": { name: "电网", @@ -2111,39 +2111,39 @@ export const move: MoveTranslationEntries = { }, "wildCharge": { name: "疯狂伏特", - effect: "让电流覆盖全身,撞向对手\n进行攻击。自己也会受到少\n许伤害", + effect: "让电流覆盖全身,撞向对手进行攻击。\n自己也会受到少许伤害", }, "drillRun": { name: "直冲钻", - effect: "像钢钻一样,一边旋转身体\n一边撞击对手。容易击中要\n害", + effect: "像钢钻一样,一边旋转身体一边撞击对手。\n容易击中要害", }, "dualChop": { name: "二连劈", - effect: "用身体坚硬的部分拍打对手\n进行攻击。连续2次给予伤\n害", + effect: "用身体坚硬的部分拍打对手进行攻击。\n连续2次给予伤害", }, "heartStamp": { name: "爱心印章", - effect: "以可爱的动作使对手疏忽,\n乘机给出强烈的一击。有时\n会使对手畏缩", + effect: "以可爱的动作使对手疏忽,\n乘机给出强烈的一击。有时会使对手畏缩", }, "hornLeech": { name: "木角", - effect: "将角刺入,吸取对手的养分。\n可以回复给予对手伤害的\n一半HP", + effect: "将角刺入,吸取对手的养分。\n可以回复给予对手伤害的一半HP", }, "sacredSword": { name: "圣剑", - effect: "用剑切斩对手进行攻击。无\n视对手的能力变化,直接给\n予伤害", + effect: "用剑切斩对手进行攻击。\n无视对手的能力变化,直接给予伤害", }, "razorShell": { name: "贝壳刃", - effect: "用锋利的贝壳切斩对手进行\n攻击。有时会降低对手的防\n御", + effect: "用锋利的贝壳切斩对手进行攻击。\n有时会降低对手的防御", }, "heatCrash": { name: "高温重压", - effect: "用燃烧的身体撞向对手进行\n攻击。自己比对手越重,威\n力越大", + effect: "用燃烧的身体撞向对手进行攻击。\n自己比对手越重,威力越大", }, "leafTornado": { name: "青草搅拌器", - effect: "用锋利的叶片包裹住对手进\n行攻击。有时会降低对手的\n命中率", + effect: "用锋利的叶片包裹住对手进行攻击。\n有时会降低对手的命中率", }, "steamroller": { name: "疯狂滚压", @@ -2151,7 +2151,7 @@ export const move: MoveTranslationEntries = { }, "cottonGuard": { name: "棉花防守", - effect: "用软绵绵的绒毛包裹住自己\n的身体进行守护。巨幅提高\n自己的防御", + effect: "用软绵绵的绒毛包裹住自己的身体\n进行守护。巨幅提高自己的防御", }, "nightDaze": { name: "暗黑爆破", @@ -2159,91 +2159,91 @@ export const move: MoveTranslationEntries = { }, "psystrike": { name: "精神击破", - effect: "将神奇的念波实体化攻击对\n手。给予物理伤害", + effect: "将神奇的念波实体化攻击对手。\n给予物理伤害", }, "tailSlap": { name: "扫尾拍打", - effect: "用坚硬的尾巴拍打对手进行\n攻击。连续攻击2~5次", + effect: "用坚硬的尾巴拍打对手进行攻击。\n连续攻击2~5次", }, "hurricane": { name: "暴风", - effect: "用强烈的风席卷对手进行攻\n击。有时会使对手混乱", + effect: "用强烈的风席卷对手进行攻击。\n有时会使对手混乱", }, "headCharge": { name: "爆炸头突击", - effect: "用厉害的爆炸头猛撞向对手\n进行攻击。自己也会受到少\n许伤害", + effect: "用厉害的爆炸头猛撞向对手进行攻击。\n自己也会受到少许伤害", }, "gearGrind": { name: "齿轮飞盘", - effect: "向对手投掷钢铁齿轮进行攻\n击。连续2次给予伤害", + effect: "向对手投掷钢铁齿轮进行攻击。\n连续2次给予伤害", }, "searingShot": { name: "火焰弹", - effect: "用熊熊烈火攻击自己周围所\n有的宝可梦。有时会陷入灼\n伤状态", + effect: "用熊熊烈火攻击自己周围所有的宝可梦。\n有时会陷入灼伤状态", }, "technoBlast": { name: "高科技光炮", - effect: "向对手放出光弹。属性会根\n据自己携带的卡带不同而改\n变", + effect: "向对手放出光弹。属性会根据自己\n携带的卡带不同而改变", }, "relicSong": { name: "古老之歌", - effect: "让对手听古老之歌,打动对\n手的内心进行攻击。有时会\n让对手陷入睡眠状态", + effect: "让对手听古老之歌,打动对手的内\n心进行攻击。有时会让对手陷入睡眠状态", }, "secretSword": { name: "神秘之剑", - effect: "用长角切斩对手进行攻击。\n角上拥有的神奇力量将给予\n物理伤害", + effect: "用长角切斩对手进行攻击。\n角上拥有的神奇力量将给予物理伤害", }, "glaciate": { name: "冰封世界", - effect: "将冰冻的冷气吹向对手进行\n攻击。会降低对手的速度", + effect: "将冰冻的冷气吹向对手进行攻击。\n会降低对手的速度", }, "boltStrike": { name: "雷击", - effect: "让强大的电流覆盖全身,猛\n撞向对手进行攻击。有时会\n让对手陷入麻痹状态", + effect: "让强大的电流覆盖全身,\n猛撞向对手进行攻击。有时会让对手陷入麻痹状态", }, "blueFlare": { name: "青焰", - effect: "用美丽而激烈的青焰包裹住\n对手进行攻击。有时会让对\n手陷入灼伤状态", + effect: "用美丽而激烈的青焰包裹住对手进行攻击。\n有时会让对手陷入灼伤状态", }, "fieryDance": { name: "火之舞", - effect: "让火焰覆盖全身,振翅攻击\n对手。有时会提高自己的特\n攻", + effect: "让火焰覆盖全身,振翅攻击对手。\n有时会提高自己的特攻", }, "freezeShock": { name: "冰冻伏特", - effect: "用覆盖着电流的冰块,在第\n2回合撞向对手。有时会让\n对手陷入麻痹状态", + effect: "用覆盖着电流的冰块,\n在第2回合撞向对手。有时会让对手陷入麻痹状态", }, "iceBurn": { name: "极寒冷焰", - effect: "用能够冻结一切的强烈冷气,\n在第2回合包裹住对手。\n有时会让对手陷入灼伤状态", + effect: "用能够冻结一切的强烈冷气,\n在第2回合包裹住对手。有时会让对手\n陷入灼伤状态", }, "snarl": { name: "大声咆哮", - effect: "没完没了地大声斥责,从而\n降低对手的特攻", + effect: "没完没了地大声斥责,\n从而降低对手的特攻", }, "icicleCrash": { name: "冰柱坠击", - effect: "用大冰柱激烈地撞向对手进\n行攻击。有时会使对手畏缩", + effect: "用大冰柱激烈地撞向对手进行攻击。\n有时会使对手畏缩", }, "vCreate": { name: "V热焰", - effect: "从前额产生灼热的火焰,舍\n身撞击对手。防御、特防和\n速度会降低", + effect: "从前额产生灼热的火焰,\n舍身撞击对手。防御、特防和速度会降低", }, "fusionFlare": { name: "交错火焰", - effect: "释放出巨大的火焰。受到巨\n大的闪电影响时,招式威力\n会提高", + effect: "释放出巨大的火焰。受到巨大的闪\n电影响时,招式威力会提高", }, "fusionBolt": { name: "交错闪电", - effect: "释放出巨大的闪电。受到巨\n大的火焰影响时,招式威力\n会提高", + effect: "释放出巨大的闪电。受到巨大的火\n焰影响时,招式威力会提高", }, "flyingPress": { name: "飞身重压", - effect: "从空中俯冲向对手。此招式\n同时带有格斗属性和飞行属\n性", + effect: "从空中俯冲向对手。此招式同时带\n有格斗属性和飞行属性", }, "matBlock": { name: "掀榻榻米", - effect: "将掀起来的榻榻米当作盾牌,\n防住自己和同伴免受招式\n伤害。变化招式无法防住", + effect: "将掀起来的榻榻米当作盾牌,\n防住自己和同伴免受招式伤害。\n变化招式无法防住", }, "belch": { name: "打嗝", @@ -2251,7 +2251,7 @@ export const move: MoveTranslationEntries = { }, "rototiller": { name: "耕地", - effect: "翻耕土地,使草木更容易成\n长。会提高草属性宝可梦的\n攻击和特攻", + effect: "翻耕土地,使草木更容易成长。\n会提高草属性宝可梦的攻击和特攻", }, "stickyWeb": { name: "黏黏网", @@ -2263,79 +2263,79 @@ export const move: MoveTranslationEntries = { }, "phantomForce": { name: "潜灵奇袭", - effect: "第1回合消失在某处,第2\n回合攻击对手。可以无视守\n护进行攻击", + effect: "第1回合消失在某处,\n第2回合攻击对手。可以无视守护进行攻击", }, "trickOrTreat": { name: "万圣夜", - effect: "邀请对手参加万圣夜。使对\n手被追加幽灵属性", + effect: "邀请对手参加万圣夜。\n使对手被追加幽灵属性", }, "nobleRoar": { name: "战吼", - effect: "发出战吼威吓对手,从而降\n低对手的攻击和特攻", + effect: "发出战吼威吓对手,从而降低对手\n的攻击和特攻", }, "ionDeluge": { name: "等离子浴", - effect: "将带电粒子扩散开来,使一\n般属性的招式变成电属性", + effect: "将带电粒子扩散开来,\n使一般属性的招式变成电属性", }, "parabolicCharge": { name: "抛物面充电", - effect: "给周围全体宝可梦造成伤害。\n可以回复给予伤害的一半\nHP", + effect: "给周围全体宝可梦造成伤害。\n可以回复给予伤害的一半HP", }, "forestsCurse": { name: "森林咒术", - effect: "向对手施加森林咒术。中了\n咒术的对手会被追加草属性", + effect: "向对手施加森林咒术。\n中了咒术的对手会被追加草属性", }, "petalBlizzard": { name: "落英缤纷", - effect: "猛烈地刮起飞雪般的落花,\n攻击周围所有的宝可梦,并\n给予伤害", + effect: "猛烈地刮起飞雪般的落花,\n攻击周围所有的宝可梦,并给予伤害", }, "freezeDry": { name: "冷冻干燥", - effect: "急剧冷冻对手,有时会让对\n手陷入冰冻状态。对于水属\n性宝可梦也是效果绝佳", + effect: "急剧冷冻对手,有时会让对手陷入\n冰冻状态。对于水属性宝可梦也是\n效果绝佳", }, "disarmingVoice": { name: "魅惑之声", - effect: "发出魅惑的叫声,给予对手\n精神上的伤害。攻击必定会\n命中", + effect: "发出魅惑的叫声,给予对手精神上的伤害。\n攻击必定会命中", }, "partingShot": { name: "抛下狠话", - effect: "抛下狠话威吓对手,降低攻\n击和特攻后,和后备宝可梦\n进行替换", + effect: "抛下狠话威吓对手,降低攻击和特攻后,\n和后备宝可梦进行替换", }, "topsyTurvy": { name: "颠倒", - effect: "颠倒对手身上的所有能力变\n化,变成和原来相反的状态", + effect: "颠倒对手身上的所有能力变化,\n变成和原来相反的状态", }, "drainingKiss": { name: "吸取之吻", - effect: "用一个吻吸取对手的HP。\n回复给予对手伤害的一半以\n上的HP", + effect: "用一个吻吸取对手的HP。\n回复给予对手伤害的一半以上的HP", }, "craftyShield": { name: "戏法防守", - effect: "使用神奇的力量防住攻击我\n方的变化招式。但无法防住\n伤害招式的攻击", + effect: "使用神奇的力量防住攻击我方的变化招式。\n但无法防住伤害招式的攻击", }, "flowerShield": { name: "鲜花防守", - effect: "使用神奇的力量提高在场的\n所有草属性宝可梦的防御", + effect: "使用神奇的力量提高在场的所有草\n属性宝可梦的防御", }, "grassyTerrain": { name: "青草场地", - effect: "在5回合内变成青草场地。\n地面上的宝可梦每回合都能\n回复。草属性的招式威力还\n会提高", + effect: "在5回合内变成青草场地。\n地面上的宝可梦每回合都能回复。\n草属性的招式威力还会提高", }, "mistyTerrain": { name: "薄雾场地", - effect: "在5回合内,地面上的宝可\n梦不会陷入异常状态。龙属\n性招式的伤害也会减半", + effect: "在5回合内,地面上的宝可梦不会\n陷入异常状态。龙属性招式的伤害\n也会减半", }, "electrify": { name: "输电", - effect: "对手使出招式前,如果输电,\n则该回合对手的招式变成\n电属性", + effect: "对手使出招式前,如果输电,\n则该回合对手的招式变成电属性", }, "playRough": { name: "嬉闹", - effect: "与对手嬉闹并攻击。有时会\n降低对手的攻击", + effect: "与对手嬉闹并攻击。有时会降低对\n手的攻击", }, "fairyWind": { name: "妖精之风", - effect: "刮起妖精之风,吹向对手进\n行攻击", + effect: "刮起妖精之风,吹向对手进行攻击", }, "moonblast": { name: "月亮之力", @@ -2343,83 +2343,83 @@ export const move: MoveTranslationEntries = { }, "boomburst": { name: "爆音波", - effect: "通过震耳欲聋的爆炸声产生\n的破坏力,攻击自己周围所\n有的宝可梦", + effect: "通过震耳欲聋的爆炸声产生的破坏力,\n攻击自己周围所有的宝可梦", }, "fairyLock": { name: "妖精之锁", - effect: "通过封锁,下一回合所有的\n宝可梦都无法逃走", + effect: "通过封锁,下一回合所有的宝可梦\n都无法逃走", }, "kingsShield": { name: "王者盾牌", - effect: "防住对手攻击的同时,自己\n变为防御姿态。能够降低所\n接触到的对手的攻击", + effect: "防住对手攻击的同时,\n自己变为防御姿态。能够降低所接触到的对手的攻击", }, "playNice": { name: "和睦相处", - effect: "和对手和睦相处,使其失去\n战斗的气力,从而降低对手\n的攻击", + effect: "和对手和睦相处,使其失去战斗的气力,\n从而降低对手的攻击", }, "confide": { name: "密语", - effect: "和对手进行密语,使其失去\n集中力,从而降低对手的特\n攻", + effect: "和对手进行密语,使其失去集中力,\n从而降低对手的特攻", }, "diamondStorm": { name: "钻石风暴", - effect: "掀起钻石风暴给予伤害。有\n时会大幅提高自己的防御", + effect: "掀起钻石风暴给予伤害。\n有时会大幅提高自己的防御", }, "steamEruption": { name: "蒸汽爆炸", - effect: "将滚烫的蒸汽喷向对手。有\n时会让对手灼伤", + effect: "将滚烫的蒸汽喷向对手。\n有时会让对手灼伤", }, "hyperspaceHole": { name: "异次元洞", - effect: "通过异次元洞,突然出现在\n对手的侧面进行攻击。还可\n以无视守住和看穿等招式", + effect: "通过异次元洞,突然出现在对手的\n侧面进行攻击。还可以无视守住和\n看穿等招式", }, "waterShuriken": { name: "飞水手里剑", - effect: "用粘液制成的手里剑,连续\n攻击2~5次。必定能够先\n制攻击", + effect: "用粘液制成的手里剑,\n连续攻击2~5次。必定能够先制攻击", }, "mysticalFire": { name: "魔法火焰", - effect: "从口中喷出特别灼热的火焰\n进行攻击。降低对手的特攻", + effect: "从口中喷出特别灼热的火焰进行攻击。\n降低对手的特攻", }, "spikyShield": { name: "尖刺防守", - effect: "防住对手攻击的同时,削减\n接触到自己的对手的体力", + effect: "防住对手攻击的同时,\n削减接触到自己的对手的体力", }, "aromaticMist": { name: "芳香薄雾", - effect: "通过神奇的芳香,提高我方\n宝可梦的特防", + effect: "通过神奇的芳香,提高我方宝可梦的特防", }, "eerieImpulse": { name: "怪异电波", - effect: "从身体放射出怪异电波,让\n对手沐浴其中,从而大幅降\n低其特攻", + effect: "从身体放射出怪异电波,\n让对手沐浴其中,从而大幅降低其特攻", }, "venomDrench": { name: "毒液陷阱", - effect: "将特殊的毒液泼向对手。对\n处于中毒状态的对手,其攻\n击、特攻和速度都会降低", + effect: "将特殊的毒液泼向对手。\n对处于中毒状态的对手,其攻击、特攻和速\n度都会降低", }, "powder": { name: "粉尘", - effect: "如果被撒到粉尘的对手使用\n火招式,则会爆炸并给予伤\n害", + effect: "如果被撒到粉尘的对手使用火招式,\n则会爆炸并给予伤害", }, "geomancy": { name: "大地掌控", - effect: "第1回合吸收能量,第2回\n合大幅提高特攻、特防和速\n度", + effect: "第1回合吸收能量,第2回合大幅\n提高特攻、特防和速度", }, "magneticFlux": { name: "磁场操控", - effect: "通过操控磁场,会提高特性\n为正电和负电的宝可梦的防\n御和特防", + effect: "通过操控磁场,会提高特性为正电\n和负电的宝可梦的防御和特防", }, "happyHour": { name: "欢乐时光", - effect: "如果使用欢乐时光,战斗后\n得到的钱会翻倍", + effect: "如果使用欢乐时光,战斗后得到的\n钱会翻倍", }, "electricTerrain": { name: "电气场地", - effect: "在5回合内变成电气场地。\n地面上的宝可梦将无法入眠。\n电属性的招式威力还会提\n高", + effect: "在5回合内变成电气场地。\n地面上的宝可梦将无法入眠。\n电属性的招式威力还会提高", }, "dazzlingGleam": { name: "魔法闪耀", - effect: "向对手发射强光,并给予伤\n害", + effect: "向对手发射强光,并给予伤害", }, "celebrate": { name: "庆祝", @@ -2427,55 +2427,55 @@ export const move: MoveTranslationEntries = { }, "holdHands": { name: "牵手", - effect: "我方宝可梦之间牵手。能带\n来非常幸福的心情", + effect: "我方宝可梦之间牵手。\n能带来非常幸福的心情", }, "babyDollEyes": { name: "圆瞳", - effect: "用圆瞳凝视对手,从而降低\n其攻击。必定能够先制攻击", + effect: "用圆瞳凝视对手,从而降低其攻击。\n必定能够先制攻击", }, "nuzzle": { name: "蹭蹭脸颊", - effect: "将带电的脸颊蹭蹭对手进行\n攻击。让对手陷入麻痹状态", + effect: "将带电的脸颊蹭蹭对手进行攻击。\n让对手陷入麻痹状态", }, "holdBack": { name: "手下留情", - effect: "在攻击的时候手下留情,从\n而使对手的HP至少会留下\n1HP", + effect: "在攻击的时候手下留情,\n从而使对手的HP至少会留下1HP", }, "infestation": { name: "纠缠不休", - effect: "在4~5回合内死缠烂打地\n进行攻击。在此期间对手将\n无法逃走", + effect: "在4~5回合内死缠烂打地进行攻击。\n在此期间对手将无法逃走", }, "powerUpPunch": { name: "增强拳", - effect: "通过反复击打对手,使自己\n的拳头慢慢变硬。打中对手\n攻击就会提高", + effect: "通过反复击打对手,使自己的拳头\n慢慢变硬。打中对手攻击就会提高", }, "oblivionWing": { name: "归天之翼", - effect: "从锁定的对手身上吸取HP。\n回复给予对手伤害的一半\n以上的HP", + effect: "从锁定的对手身上吸取HP。\n回复给予对手伤害的一半以上的HP", }, "thousandArrows": { name: "千箭齐发", - effect: "可以击中浮在空中的宝可梦。\n空中的对手被击落后,会\n掉到地面", + effect: "可以击中浮在空中的宝可梦。\n空中的对手被击落后,会掉到地面", }, "thousandWaves": { name: "千波激荡", - effect: "从地面掀起波浪进行攻击。\n被掀入波浪中的对手,将无\n法从战斗中逃走", + effect: "从地面掀起波浪进行攻击。\n被掀入波浪中的对手,将无法从战斗中逃走", }, "landsWrath": { name: "大地神力", - effect: "聚集大地的力量,将此力量\n集中攻击对手,并给予伤害", + effect: "聚集大地的力量,将此力量集中攻击对手,\n并给予伤害", }, "lightOfRuin": { name: "破灭之光", - effect: "借用永恒之花的力量,发射\n出强力光线。自己也会受到\n非常大的伤害", + effect: "借用永恒之花的力量,\n发射出强力光线。自己也会受到非常大的伤害", }, "originPulse": { name: "根源波动", - effect: "用无数青白色且闪耀的光线\n攻击对手", + effect: "用无数青白色且闪耀的光线攻击对手", }, "precipiceBlades": { name: "断崖之剑", - effect: "将大地的力量变化为利刃攻\n击对手", + effect: "将大地的力量变化为利刃攻击对手", }, "dragonAscent": { name: "画龙点睛", @@ -2483,155 +2483,155 @@ export const move: MoveTranslationEntries = { }, "hyperspaceFury": { name: "异次元猛攻", - effect: "用许多手臂,无视对手的守\n住或看穿等招式进行连续攻\n击,自己的防御会降低", + effect: "用许多手臂,无视对手的守住或看\n穿等招式进行连续攻击,\n自己的防御会降低", }, "breakneckBlitzPhysical": { name: "一般Z究极无敌大冲撞", - effect: "通过Z力量气势猛烈地全力\n撞上对手。威力会根据原来\n的招式而改变", + effect: "通过Z力量气势猛烈地全力撞上对手。\n威力会根据原来的招式而改变", }, "breakneckBlitzSpecial": { name: "一般Z究极无敌大冲撞", - effect: "通过Z力量气势猛烈地全力\n撞上对手。威力会根据原来\n的招式而改变", + effect: "通过Z力量气势猛烈地全力撞上对手。\n威力会根据原来的招式而改变", }, "allOutPummelingPhysical": { name: "格斗Z全力无双激烈拳", - effect: "通过Z力量制造出能量弹,\n全力撞向对手。威力会根据\n原来的招式而改变", + effect: "通过Z力量制造出能量弹,\n全力撞向对手。威力会根据原来的招式而改变", }, "allOutPummelingSpecial": { name: "格斗Z全力无双激烈拳", - effect: "通过Z力量制造出能量弹,\n全力撞向对手。威力会根据\n原来的招式而改变", + effect: "通过Z力量制造出能量弹,\n全力撞向对手。威力会根据原来的招式而改变", }, "supersonicSkystrikePhysical": { name: "飞行Z极速俯冲轰烈撞", - effect: "通过Z力量猛烈地飞向天空,\n朝对手全力落下。威力会\n根据原来的招式而改变", + effect: "通过Z力量猛烈地飞向天空,\n朝对手全力落下。威力会根据原来的招\n式而改变", }, "supersonicSkystrikeSpecial": { name: "飞行Z极速俯冲轰烈撞", - effect: "通过Z力量猛烈地飞向天空,\n朝对手全力落下。威力会\n根据原来的招式而改变", + effect: "通过Z力量猛烈地飞向天空,\n朝对手全力落下。威力会根据原来的招\n式而改变", }, "acidDownpourPhysical": { name: "毒Z强酸剧毒灭绝雨", - effect: "通过Z力量使毒沼涌起,全\n力让对手沉下去。威力会根\n据原来的招式而改变", + effect: "通过Z力量使毒沼涌起,\n全力让对手沉下去。威力会根据原来的招式而改变", }, "acidDownpourSpecial": { name: "毒Z强酸剧毒灭绝雨", - effect: "通过Z力量使毒沼涌起,全\n力让对手沉下去。威力会根\n据原来的招式而改变", + effect: "通过Z力量使毒沼涌起,\n全力让对手沉下去。威力会根据原来的招式而改变", }, "tectonicRagePhysical": { name: "地面Z地隆啸天大终结", - effect: "通过Z力量潜入地里最深处,\n全力撞上对手。威力会根\n据原来的招式而改变", + effect: "通过Z力量潜入地里最深处,\n全力撞上对手。威力会根据原来的招式而改变", }, "tectonicRageSpecial": { name: "地面Z地隆啸天大终结", - effect: "通过Z力量潜入地里最深处,\n全力撞上对手。威力会根\n据原来的招式而改变", + effect: "通过Z力量潜入地里最深处,\n全力撞上对手。威力会根据原来的招式而改变", }, "continentalCrushPhysical": { name: "岩石Z毁天灭地巨岩坠", - effect: "通过Z力量召唤大大的岩山,\n全力撞向对手。威力会根\n据原来的招式而改变", + effect: "通过Z力量召唤大大的岩山,\n全力撞向对手。威力会根据原来的招式而改变", }, "continentalCrushSpecial": { name: "岩石Z毁天灭地巨岩坠", - effect: "通过Z力量召唤大大的岩山,\n全力撞向对手。威力会根\n据原来的招式而改变", + effect: "通过Z力量召唤大大的岩山,\n全力撞向对手。威力会根据原来的招式而改变", }, "savageSpinOutPhysical": { name: "虫Z绝对捕食回旋斩", - effect: "通过Z力量将吐出的丝线全\n力束缚对手。威力会根据原\n来的招式而改变", + effect: "通过Z力量将吐出的丝线全力束缚对手。\n威力会根据原来的招式而改变", }, "savageSpinOutSpecial": { name: "虫Z绝对捕食回旋斩", - effect: "通过Z力量将吐出的丝线全\n力束缚对手。威力会根据原\n来的招式而改变", + effect: "通过Z力量将吐出的丝线全力束缚对手。\n威力会根据原来的招式而改变", }, "neverEndingNightmarePhysical": { name: "幽灵Z无尽暗夜之诱惑", - effect: "通过Z力量召唤强烈的怨念,\n全力降临到对手身上。威\n力会根据原来的招式而改变", + effect: "通过Z力量召唤强烈的怨念,\n全力降临到对手身上。威力会根据原来\n的招式而改变", }, "neverEndingNightmareSpecial": { name: "幽灵Z无尽暗夜之诱惑", - effect: "通过Z力量召唤强烈的怨念,\n全力降临到对手身上。威\n力会根据原来的招式而改变", + effect: "通过Z力量召唤强烈的怨念,\n全力降临到对手身上。威力会根据原来\n的招式而改变", }, "corkscrewCrashPhysical": { name: "钢Z超绝螺旋连击", - effect: "通过Z力量进行高速旋转,\n全力撞上对手。威力会根据\n原来的招式而改变", + effect: "通过Z力量进行高速旋转,\n全力撞上对手。威力会根据原来的招式而改变", }, "corkscrewCrashSpecial": { name: "钢Z超绝螺旋连击", - effect: "通过Z力量进行高速旋转,\n全力撞上对手。威力会根据\n原来的招式而改变", + effect: "通过Z力量进行高速旋转,\n全力撞上对手。威力会根据原来的招式而改变", }, "infernoOverdrivePhysical": { name: "火Z超强极限爆焰弹", - effect: "通过Z力量喷出熊熊烈火,\n全力撞向对手。威力会根据\n原来的招式而改变", + effect: "通过Z力量喷出熊熊烈火,\n全力撞向对手。威力会根据原来的招式而改变", }, "infernoOverdriveSpecial": { name: "火Z超强极限爆焰弹", - effect: "通过Z力量喷出熊熊烈火,\n全力撞向对手。威力会根据\n原来的招式而改变", + effect: "通过Z力量喷出熊熊烈火,\n全力撞向对手。威力会根据原来的招式而改变", }, "hydroVortexPhysical": { name: "水Z超级水流大漩涡", - effect: "通过Z力量制造大大的潮旋,\n全力吞没对手。威力会根\n据原来的招式而改变", + effect: "通过Z力量制造大大的潮旋,\n全力吞没对手。威力会根据原来的招式而改变", }, "hydroVortexSpecial": { name: "水Z超级水流大漩涡", - effect: "通过Z力量制造大大的潮旋,\n全力吞没对手。威力会根\n据原来的招式而改变", + effect: "通过Z力量制造大大的潮旋,\n全力吞没对手。威力会根据原来的招式而改变", }, "bloomDoomPhysical": { name: "草Z绚烂缤纷花怒放", - effect: "通过Z力量借助花草的能量,\n全力攻击对手。威力会根\n据原来的招式而改变", + effect: "通过Z力量借助花草的能量,\n全力攻击对手。威力会根据原来的招式而改变", }, "bloomDoomSpecial": { name: "草Z绚烂缤纷花怒放", - effect: "通过Z力量借助花草的能量,\n全力攻击对手。威力会根\n据原来的招式而改变", + effect: "通过Z力量借助花草的能量,\n全力攻击对手。威力会根据原来的招式而改变", }, "gigavoltHavocPhysical": { name: "电Z终极伏特狂雷闪", - effect: "通过Z力量将蓄积的强大电\n流全力撞向对手。威力会根\n据原来的招式而改变", + effect: "通过Z力量将蓄积的强大电流全力\n撞向对手。威力会根据原来的招式而改变", }, "gigavoltHavocSpecial": { name: "电Z终极伏特狂雷闪", - effect: "通过Z力量将蓄积的强大电\n流全力撞向对手。威力会根\n据原来的招式而改变", + effect: "通过Z力量将蓄积的强大电流全力\n撞向对手。威力会根据原来的招式而改变", }, "shatteredPsychePhysical": { name: "超能力Z至高精神破坏波", - effect: "通过Z力量操纵对手,全力\n使其感受到痛苦。威力会根\n据原来的招式而改变", + effect: "通过Z力量操纵对手,\n全力使其感受到痛苦。威力会根据原来的招式而改变", }, "shatteredPsycheSpecial": { name: "超能力Z至高精神破坏波", - effect: "通过Z力量操纵对手,全力\n使其感受到痛苦。威力会根\n据原来的招式而改变", + effect: "通过Z力量操纵对手,\n全力使其感受到痛苦。威力会根据原来的招式而改变", }, "subzeroSlammerPhysical": { name: "冰Z激狂大地万里冰", - effect: "通过Z力量急剧降低气温,\n全力冰冻对手。威力会根据\n原来的招式而改变", + effect: "通过Z力量急剧降低气温,\n全力冰冻对手。威力会根据原来的招式而改变", }, "subzeroSlammerSpecial": { name: "冰Z激狂大地万里冰", - effect: "通过Z力量急剧降低气温,\n全力冰冻对手。威力会根据\n原来的招式而改变", + effect: "通过Z力量急剧降低气温,\n全力冰冻对手。威力会根据原来的招式而改变", }, "devastatingDrakePhysical": { name: "龙Z究极巨龙震天地", - effect: "通过Z力量将气场实体化,\n向对手全力发动袭击。威力\n会根据原来的招式而改变", + effect: "通过Z力量将气场实体化,\n向对手全力发动袭击。威力会根据原来的\n招式而改变", }, "devastatingDrakeSpecial": { name: "龙Z究极巨龙震天地", - effect: "通过Z力量将气场实体化,\n向对手全力发动袭击。威力\n会根据原来的招式而改变", + effect: "通过Z力量将气场实体化,\n向对手全力发动袭击。威力会根据原来的\n招式而改变", }, "blackHoleEclipsePhysical": { name: "恶Z黑洞吞噬万物灭", - effect: "通过Z力量收集恶能量,全\n力将对手吸入。威力会根据\n原来的招式而改变", + effect: "通过Z力量收集恶能量,\n全力将对手吸入。威力会根据原来的招式而改变", }, "blackHoleEclipseSpecial": { name: "恶Z黑洞吞噬万物灭", - effect: "通过Z力量收集恶能量,全\n力将对手吸入。威力会根据\n原来的招式而改变", + effect: "通过Z力量收集恶能量,\n全力将对手吸入。威力会根据原来的招式而改变", }, "twinkleTacklePhysical": { name: "妖精Z可爱星星飞天撞", - effect: "通过Z力量制造魅惑空间,\n全力捉弄对手。威力会根据\n原来的招式而改变", + effect: "通过Z力量制造魅惑空间,\n全力捉弄对手。威力会根据原来的招式而改变", }, "twinkleTackleSpecial": { name: "妖精Z可爱星星飞天撞", - effect: "通过Z力量制造魅惑空间,\n全力捉弄对手。威力会根据\n原来的招式而改变", + effect: "通过Z力量制造魅惑空间,\n全力捉弄对手。威力会根据原来的招式而改变", }, "catastropika": { name: "皮卡丘Z皮卡皮卡必杀击", - effect: "通过Z力量,皮卡丘全身覆\n盖最强电力,全力猛扑对手", + effect: "通过Z力量,皮卡丘全身覆盖最强电力,\n全力猛扑对手", }, "shoreUp": { name: "集沙", @@ -2639,27 +2639,27 @@ export const move: MoveTranslationEntries = { }, "firstImpression": { name: "迎头一击", - effect: "威力很高的招式,但只有在\n出场战斗时,立刻使出才能\n成功", + effect: "威力很高的招式,但只有在出场战斗时,\n立刻使出才能成功", }, "banefulBunker": { name: "碉堡", - effect: "防住对手攻击的同时,让接\n触到自己的对手中毒", + effect: "防住对手攻击的同时,\n让接触到自己的对手中毒", }, "spiritShackle": { name: "缝影", - effect: "攻击的同时,缝住对手的影\n子,使其无法逃走", + effect: "攻击的同时,缝住对手的影子,\n使其无法逃走", }, "darkestLariat": { name: "DD金勾臂", - effect: "旋转双臂打向对手。无视对\n手的能力变化,直接给予伤\n害", + effect: "旋转双臂打向对手。无视对手的能力变化,\n直接给予伤害", }, "sparklingAria": { name: "泡影的咏叹调", - effect: "随着唱歌会放出很多气球。\n受到此招式攻击时,灼伤会\n被治愈", + effect: "随着唱歌会放出很多气球。\n受到此招式攻击时,灼伤会被治愈", }, "iceHammer": { name: "冰锤", - effect: "挥舞强力而沉重的拳头,给\n予对手伤害。自己的速度会\n降低", + effect: "挥舞强力而沉重的拳头,\n给予对手伤害。自己的速度会降低", }, "floralHealing": { name: "花疗", @@ -2671,11 +2671,11 @@ export const move: MoveTranslationEntries = { }, "strengthSap": { name: "吸取力量", - effect: "给自己回复和对手攻击力相\n同数值的HP,然后降低对\n手的攻击", + effect: "给自己回复和对手攻击力相同数值的HP,\n然后降低对手的攻击", }, "solarBlade": { name: "日光刃", - effect: "第1回合收集满满的日光,\n第2回合将此力量集中在剑\n上进行攻击", + effect: "第1回合收集满满的日光,\n第2回合将此力量集中在剑上进行攻击", }, "leafage": { name: "树叶", @@ -2683,79 +2683,79 @@ export const move: MoveTranslationEntries = { }, "spotlight": { name: "聚光灯", - effect: "给宝可梦打上聚光灯,该回\n合只能瞄准该宝可梦", + effect: "给宝可梦打上聚光灯,\n该回合只能瞄准该宝可梦", }, "toxicThread": { name: "毒丝", - effect: "将混有毒的丝吐向对手。使\n其中毒,从而降低对手的速\n度", + effect: "将混有毒的丝吐向对手。\n使其中毒,从而降低对手的速度", }, "laserFocus": { name: "磨砺", - effect: "集中精神,下次攻击必定会\n击中要害", + effect: "集中精神,下次攻击必定会击中要害", }, "gearUp": { name: "辅助齿轮", - effect: "启动齿轮,提高特性为正电\n和负电的宝可梦的攻击和特\n攻", + effect: "启动齿轮,提高特性为正电和负电\n的宝可梦的攻击和特攻", }, "throatChop": { name: "深渊突刺", - effect: "受到此招式攻击的对手,会\n因为地狱般的痛苦,在2回\n合内,变得无法使出声音类\n招式", + effect: "受到此招式攻击的对手,\n会因为地狱般的痛苦,在2回合内,\n变得无法使出声音类招式", }, "pollenPuff": { name: "花粉团", - effect: "对敌人使用是会爆炸的团子。\n对我方使用则是给予回复\n的团子", + effect: "对敌人使用是会爆炸的团子。\n对我方使用则是给予回复的团子", }, "anchorShot": { name: "掷锚", - effect: "将锚缠住对手进行攻击。使\n对手无法逃走", + effect: "将锚缠住对手进行攻击。\n使对手无法逃走", }, "psychicTerrain": { name: "精神场地", - effect: "在5回合内,地面上的宝可\n梦不会受到先制招式的攻击。\n超能力属性的招式威力会\n提高", + effect: "在5回合内,地面上的宝可梦不会\n受到先制招式的攻击。\n超能力属性的招式威力会提高", }, "lunge": { name: "猛扑", - effect: "全力猛扑对手进行攻击。从\n而降低对手的攻击", + effect: "全力猛扑对手进行攻击。\n从而降低对手的攻击", }, "fireLash": { name: "火焰鞭", - effect: "用燃烧的鞭子抽打对手。受\n到攻击的对手防御会降低", + effect: "用燃烧的鞭子抽打对手。\n受到攻击的对手防御会降低", }, "powerTrip": { name: "嚣张", - effect: "耀武扬威地攻击对手,自己\n的能力提高得越多,威力就\n越大", + effect: "耀武扬威地攻击对手,\n自己的能力提高得越多,威力就越大", }, "burnUp": { name: "燃尽", - effect: "将自己全身燃烧起火焰来,\n给予对手大大的伤害。自己\n的火属性将会消失", + effect: "将自己全身燃烧起火焰来,\n给予对手大大的伤害。自己的火属性将会消失", }, "speedSwap": { name: "速度互换", - effect: "将对手和自己的速度进行互\n换", + effect: "将对手和自己的速度进行互换", }, "smartStrike": { name: "修长之角", - effect: "用尖尖的角刺入对手进行攻\n击。攻击必定会命中", + effect: "用尖尖的角刺入对手进行攻击。\n攻击必定会命中", }, "purify": { name: "净化", - effect: "治愈对手的异常状态。治愈\n后可以回复自己的HP", + effect: "治愈对手的异常状态。\n治愈后可以回复自己的HP", }, "revelationDance": { name: "觉醒之舞", - effect: "全力跳舞进行攻击。此招式\n的属性将变得和自己的属性\n相同", + effect: "全力跳舞进行攻击。此招式的属性\n将变得和自己的属性相同", }, "coreEnforcer": { name: "核心惩罚者", - effect: "如果给予过伤害的对手已经\n结束行动,其特性就会被消\n除", + effect: "如果给予过伤害的对手已经结束行动,\n其特性就会被消除", }, "tropKick": { name: "热带踢", - effect: "向对手使出来自南国的火热\n脚踢。从而降低对手的攻击", + effect: "向对手使出来自南国的火热脚踢。\n从而降低对手的攻击", }, "instruct": { name: "号令", - effect: "向对手下达指示,让其再次\n使出刚才的招式", + effect: "向对手下达指示,让其再次使出刚\n才的招式", }, "beakBlast": { name: "鸟嘴加农炮", @@ -2763,83 +2763,83 @@ export const move: MoveTranslationEntries = { }, "clangingScales": { name: "鳞片噪音", - effect: "摩擦全身鳞片,发出响亮的\n声音进行攻击。攻击后自己\n的防御会降低", + effect: "摩擦全身鳞片,发出响亮的声音进行攻击。\n攻击后自己的防御会降低", }, "dragonHammer": { name: "龙锤", - effect: "将身体当作锤子,向对手发\n动袭击,给予伤害", + effect: "将身体当作锤子,向对手发动袭击,\n给予伤害", }, "brutalSwing": { name: "狂舞挥打", - effect: "用自己的身体狂舞挥打,给\n予对手伤害", + effect: "用自己的身体狂舞挥打,\n给予对手伤害", }, "auroraVeil": { name: "极光幕", - effect: "在5回合内减弱物理和特殊\n的伤害。只有下雪时才能使\n出", + effect: "在5回合内减弱物理和特殊的伤害。\n只有下雪时才能使出", }, "sinisterArrowRaid": { name: "狙射树枭Z遮天蔽日暗影箭", - effect: "通过Z力量制造出无数箭的\n狙射树枭将全力射穿对手进\n行攻击", + effect: "通过Z力量制造出无数箭的狙射树\n枭将全力射穿对手进行攻击", }, "maliciousMoonsault": { name: "炽焰咆哮虎Z极恶飞跃粉碎击", - effect: "通过Z力量得到强壮肉体的\n炽焰咆哮虎将全力撞向对手\n进行攻击", + effect: "通过Z力量得到强壮肉体的炽焰咆\n哮虎将全力撞向对手进行攻击", }, "oceanicOperetta": { name: "西狮海壬Z海神庄严交响乐", - effect: "通过Z力量召唤大量水的西\n狮海壬将全力攻击对手", + effect: "通过Z力量召唤大量水的西狮海壬\n将全力攻击对手", }, "guardianOfAlola": { name: "卡璞Z巨人卫士・阿罗拉", - effect: "通过Z力量得到阿罗拉之力\n的土地神宝可梦将全力进行\n攻击。对手的剩余HP会减\n少很多", + effect: "通过Z力量得到阿罗拉之力的土地\n神宝可梦将全力进行攻击。\n对手的剩余HP会减少很多", }, "soulStealing7StarStrike": { name: "玛夏多Z七星夺魂腿", - effect: "得到Z力量的玛夏多将全力\n使出拳头和脚踢的连续招式\n叩打对手", + effect: "得到Z力量的玛夏多将全力使出拳\n头和脚踢的连续招式叩打对手", }, "stokedSparksurfer": { name: "阿罗雷Z驾雷驭电戏冲浪", - effect: "得到Z力量的阿罗拉地区的\n雷丘将全力进行攻击。从而\n让对手陷入麻痹状态", + effect: "得到Z力量的阿罗拉地区的雷丘将\n全力进行攻击。从而让对手陷入麻痹状态", }, "pulverizingPancake": { name: "卡比兽Z认真起来大爆击", - effect: "通过Z力量使得认真起来的\n卡比兽跃动巨大身躯,全力\n向对手发动袭击", + effect: "通过Z力量使得认真起来的卡比兽\n跃动巨大身躯,全力向对手发动袭击", }, "extremeEvoboost": { name: "伊布Z九彩昇华齐聚顶", - effect: "得到Z力量的伊布将借助进\n化后伙伴们的力量,大幅提\n高能力", + effect: "得到Z力量的伊布将借助进化后伙\n伴们的力量,大幅提高能力", }, "genesisSupernova": { name: "梦幻Z起源超新星大爆炸", - effect: "得到Z力量的梦幻将全力攻\n击对手。脚下会变成精神场\n地", + effect: "得到Z力量的梦幻将全力攻击对手。\n脚下会变成精神场地", }, "shellTrap": { name: "陷阱甲壳", - effect: "设下甲壳陷阱。如果对手使\n出物理招式,陷阱就会爆炸\n并给予对手伤害", + effect: "设下甲壳陷阱。如果对手使出物理招式,\n陷阱就会爆炸并给予对手伤害", }, "fleurCannon": { name: "花朵加农炮", - effect: "放出强力光束后,自己的特\n攻会大幅降低", + effect: "放出强力光束后,自己的特攻会大幅降低", }, "psychicFangs": { name: "精神之牙", - effect: "利用精神力量咬住对手进行\n攻击。还可以破坏光墙和反\n射壁等", + effect: "利用精神力量咬住对手进行攻击。\n还可以破坏光墙和反射壁等", }, "stompingTantrum": { name: "跺脚", - effect: "化悔恨为力量进行攻击。如\n果上一回合招式没有打中,\n威力就会翻倍", + effect: "化悔恨为力量进行攻击。\n如果上一回合招式没有打中,威力就会翻倍", }, "shadowBone": { name: "暗影之骨", - effect: "用附有灵魂的骨头殴打对手\n进行攻击。有时会降低对手\n的防御", + effect: "用附有灵魂的骨头殴打对手进行攻击。\n有时会降低对手的防御", }, "accelerock": { name: "冲岩", - effect: "迅速撞向对手进行攻击。必\n定能够先制攻击", + effect: "迅速撞向对手进行攻击。\n必定能够先制攻击", }, "liquidation": { name: "水流裂破", - effect: "用水之力量撞向对手进行攻\n击。有时会降低对手的防御", + effect: "用水之力量撞向对手进行攻击。\n有时会降低对手的防御", }, "prismaticLaser": { name: "棱镜镭射", @@ -2851,275 +2851,275 @@ export const move: MoveTranslationEntries = { }, "sunsteelStrike": { name: "流星闪冲", - effect: "以流星般的气势猛撞对手。\n可以无视对手的特性进行攻\n击", + effect: "以流星般的气势猛撞对手。\n可以无视对手的特性进行攻击", }, "moongeistBeam": { name: "暗影之光", - effect: "放出奇怪的光线攻击对手。\n可以无视对手的特性进行攻\n击", + effect: "放出奇怪的光线攻击对手。\n可以无视对手的特性进行攻击", }, "tearfulLook": { name: "泪眼汪汪", - effect: "变得泪眼汪汪,让对手丧失\n斗志。从而降低对手的攻击\n和特攻", + effect: "变得泪眼汪汪,让对手丧失斗志。\n从而降低对手的攻击和特攻", }, "zingZap": { name: "麻麻刺刺", - effect: "撞向对手,并发出强电,使\n其感到麻麻刺刺的。有时会\n使对手畏缩", + effect: "撞向对手,并发出强电,\n使其感到麻麻刺刺的。有时会使对手畏缩", }, "naturesMadness": { name: "自然之怒", - effect: "向对手释放自然之怒。对手\n的HP会减半", + effect: "向对手释放自然之怒。\n对手的HP会减半", }, "multiAttack": { name: "多属性攻击", - effect: "一边覆盖高能量,一边撞向\n对手进行攻击。根据存储碟\n不同,属性会改变", + effect: "一边覆盖高能量,一边撞向对手进行攻击。\n根据存储碟不同,\n属性会改变", }, "tenMillionVoltThunderbolt": { name: "智皮卡Z千万伏特", - effect: "戴着帽子的皮卡丘将通过Z\n力量增强的电击全力释放给\n对手。容易击中要害", + effect: "戴着帽子的皮卡丘将通过Z力量增\n强的电击全力释放给对手。\n容易击中要害", }, "mindBlown": { name: "惊爆大头", - effect: "让自己的头爆炸,来攻击周\n围的一切。自己也会受到伤\n害", + effect: "让自己的头爆炸,来攻击周围的一切。\n自己也会受到伤害", }, "plasmaFists": { name: "等离子闪电拳", - effect: "用覆盖着电流的拳头进行攻\n击。使一般属性的招式变成\n电属性", + effect: "用覆盖着电流的拳头进行攻击。\n使一般属性的招式变成电属性", }, "photonGeyser": { name: "光子喷涌", - effect: "用光柱来进行攻击。比较自\n己的攻击和特攻,用数值相\n对较高的一项给予对方伤害", + effect: "用光柱来进行攻击。比较自己的攻\n击和特攻,用数值相对较高的一项\n给予对方伤害", }, "lightThatBurnsTheSky": { name: "究极奈克洛Z焚天灭世炽光爆", - effect: "奈克洛兹玛会无视对手的特\n性效果,在攻击和特攻之间,\n用数值相对较高的一项给\n予对方伤害", + effect: "奈克洛兹玛会无视对手的特性效果,\n在攻击和特攻之间,\n用数值相对较高的一项给予对方伤害", }, "searingSunrazeSmash": { name: "索尔迦雷欧Z日光回旋下苍穹", - effect: "得到Z力量的索尔迦雷欧将\n全力进行攻击。可以无视对\n手的特性效果", + effect: "得到Z力量的索尔迦雷欧将全力进行攻击。\n可以无视对手的特性效果", }, "menacingMoonrazeMaelstrom": { name: "露奈雅拉Z月华飞溅落灵霄", - effect: "得到Z力量的露奈雅拉将全\n力进行攻击。可以无视对手\n的特性效果", + effect: "得到Z力量的露奈雅拉将全力进行攻击。\n可以无视对手的特性效果", }, "letsSnuggleForever": { name: "谜拟丘Z亲密无间大乱揍", - effect: "得到Z力量的谜拟Q将全力\n进行乱揍攻击", + effect: "得到Z力量的谜拟Q将全力进行乱揍攻击", }, "splinteredStormshards": { name: "鬃岩狼人Z狼啸石牙飓风暴", - effect: "得到Z力量的鬃岩狼人将全\n力进行攻击。而且会消除场\n地状态", + effect: "得到Z力量的鬃岩狼人将全力进行攻击。\n而且会消除场地状态", }, "clangorousSoulblaze": { name: "杖尾鳞甲龙Z炽魂热舞烈音爆", - effect: "得到Z力量的杖尾鳞甲龙将\n全力攻击对手。并且自己的\n能力会提高", + effect: "得到Z力量的杖尾鳞甲龙将全力攻击对手。\n并且自己的能力会提高", }, "zippyZap": { name: "电电加速", - effect: "迅猛无比的电击。必定能够\n先制攻击,并且提高自己的\n闪避率。", + effect: "迅猛无比的电击。必定能够先制攻击,\n并且提高自己的闪避率。", }, "splishySplash": { name: "滔滔冲浪", - effect: "往巨浪中注入电能后冲撞对\n手进行攻击。有时会让对手\n陷入麻痹状态", + effect: "往巨浪中注入电能后冲撞对手进行攻击。\n有时会让对手陷入麻痹状态", }, "floatyFall": { name: "飘飘坠落", - effect: "轻飘飘地浮起来后,再猛地\n俯冲下去进行攻击。有时会\n使对手畏缩", + effect: "轻飘飘地浮起来后,再猛地俯冲下\n去进行攻击。有时会使对手畏缩", }, "pikaPapow": { name: "闪闪雷光", - effect: "皮卡丘越喜欢训练家,电击\n的威力就越强。攻击必定会\n命中", + effect: "皮卡丘越喜欢训练家,\n电击的威力就越强。攻击必定会命中", }, "bouncyBubble": { name: "活活气泡", - effect: "投掷水球进行攻击。吸水后\n能回复等同于造成的伤害\n的HP", + effect: "投掷水球进行攻击。吸水后能回复\n等同于造成的伤害的HP", }, "buzzyBuzz": { name: "麻麻电击", - effect: "放出电击攻击对手。让对手\n陷入麻痹状态", + effect: "放出电击攻击对手。让对手陷入麻痹状态", }, "sizzlySlide": { name: "熊熊火爆", - effect: "用燃起大火的身体猛烈地冲\n撞对手。让对手陷入灼伤状\n态", + effect: "用燃起大火的身体猛烈地冲撞对手。\n让对手陷入灼伤状态", }, "glitzyGlow": { name: "哗哗气场", - effect: "利用念力强攻,粉碎对方信\n心。制造一道能减弱对手特\n殊攻击的神奇墙壁", + effect: "利用念力强攻,粉碎对方信心。\n制造一道能减弱对手特殊攻击的神奇墙壁", }, "baddyBad": { name: "坏坏领域", - effect: "恶行恶相地进行攻击。制造\n一道能减弱对手物理攻击的\n神奇墙壁", + effect: "恶行恶相地进行攻击。\n制造一道能减弱对手物理攻击的神奇墙壁", }, "sappySeed": { name: "茁茁炸弹", - effect: "长出巨大的藤蔓,播撒种子\n进行攻击。种子每回合都会\n吸取对手的HP", + effect: "长出巨大的藤蔓,播撒种子进行攻击。\n种子每回合都会吸取对手的HP", }, "freezyFrost": { name: "冰冰霜冻", - effect: "利用冰冷的黑雾结晶进行攻\n击。使全体宝可梦的能力变\n回原点", + effect: "利用冰冷的黑雾结晶进行攻击。\n使全体宝可梦的能力变回原点", }, "sparklySwirl": { name: "亮亮风暴", - effect: "利用芬芳刺鼻的龙卷风吞噬\n对方。能治愈我方宝可梦的\n异常状态", + effect: "利用芬芳刺鼻的龙卷风吞噬对方。\n能治愈我方宝可梦的异常状态", }, "veeveeVolley": { name: "砰砰击破", - effect: "伊布越喜欢训练家,冲撞的\n威力就越强。攻击必定会命\n中", + effect: "伊布越喜欢训练家,冲撞的威力就越强。\n攻击必定会命中", }, "doubleIronBash": { name: "钢拳双击", - effect: "以胸口的螺帽为中心旋转,\n并连续2次挥动手臂打击对\n手。有时会使对手畏缩", + effect: "以胸口的螺帽为中心旋转,\n并连续2次挥动手臂打击对手。\n有时会使对手畏缩", }, "maxGuard": { name: "极巨防壁", - effect: "完全抵挡对手的攻击。连续\n使出则容易失败", + effect: "完全抵挡对手的攻击。\n连续使出则容易失败", }, "dynamaxCannon": { name: "极巨炮", - effect: "将凝缩在体内的能量从核心\n放出进行攻击", + effect: "将凝缩在体内的能量从核心放出进行攻击", }, "snipeShot": { name: "狙击", - effect: "能无视具有吸引对手招式效\n果的特性或招式的影响。可\n以向选定的对手进行攻击", + effect: "能无视具有吸引对手招式效果的特\n性或招式的影响。可以向选定的对\n手进行攻击", }, "jawLock": { name: "紧咬不放", - effect: "使双方直到一方昏厥为止无\n法替换宝可梦。其中一方退\n场则可以解除效果", + effect: "使双方直到一方昏厥为止无法替换宝可梦。\n其中一方退场则可以解除效果", }, "stuffCheeks": { name: "大快朵颐", - effect: "吃掉携带的树果,大幅提高\n防御", + effect: "吃掉携带的树果,大幅提高防御", }, "noRetreat": { name: "背水一战", - effect: "提高自己的所有能力,但无\n法替换或逃走", + effect: "提高自己的所有能力,\n但无法替换或逃走", }, "tarShot": { name: "沥青射击", - effect: "泼洒黏糊糊的沥青,降低对\n手的速度。火属性会变成对\n手的弱点", + effect: "泼洒黏糊糊的沥青,降低对手的速度。\n火属性会变成对手的弱点", }, "magicPowder": { name: "魔法粉", - effect: "向对手喷洒魔法粉,使对手\n变为超能力属性", + effect: "向对手喷洒魔法粉,使对手变为超\n能力属性", }, "dragonDarts": { name: "龙箭", - effect: "让多龙梅西亚进行2次攻击。\n如果对手有2只宝可梦,\n则对它们各进行1次攻击", + effect: "让多龙梅西亚进行2次攻击。\n如果对手有2只宝可梦,则对它们各进\n行1次攻击", }, "teatime": { name: "茶会", - effect: "举办一场茶会,场上的所有\n宝可梦都会吃掉自己携带的\n树果", + effect: "举办一场茶会,场上的所有宝可梦\n都会吃掉自己携带的树果", }, "octolock": { name: "蛸固", - effect: "让对手无法逃走。对手被固\n定后,每回合都会降低防御\n和特防", + effect: "让对手无法逃走。对手被固定后,\n每回合都会降低防御和特防", }, "boltBeak": { name: "电喙", - effect: "用带电的喙啄刺对手。如果\n比对手先出手攻击,招式的\n威力会变成2倍", + effect: "用带电的喙啄刺对手。\n如果比对手先出手攻击,招式的威力会变成2倍", }, "fishiousRend": { name: "鳃咬", - effect: "用坚硬的腮咬住对手。如果\n比对手先出手攻击,招式的\n威力会变成2倍", + effect: "用坚硬的腮咬住对手。\n如果比对手先出手攻击,招式的威力会变成2倍", }, "courtChange": { name: "换场", - effect: "用神奇的力量交换双方的场\n地效果", + effect: "用神奇的力量交换双方的场地效果", }, "maxFlare": { name: "极巨火爆", - effect: "极巨化宝可梦使出的火属性\n攻击。可在5回合内让日照\n变得强烈", + effect: "极巨化宝可梦使出的火属性攻击。\n可在5回合内让日照变得强烈", }, "maxFlutterby": { name: "极巨虫蛊", - effect: "极巨化宝可梦使出的虫属性\n攻击。会降低对手的特攻", + effect: "极巨化宝可梦使出的虫属性攻击。\n会降低对手的特攻", }, "maxLightning": { name: "极巨闪电", - effect: "极巨化宝可梦使出的电属性\n攻击。可在5回合内将脚下\n变成电气场地", + effect: "极巨化宝可梦使出的电属性攻击。\n可在5回合内将脚下变成电气场地", }, "maxStrike": { name: "极巨攻击", - effect: "极巨化宝可梦使出的一般属\n性攻击。会降低对手的速度", + effect: "极巨化宝可梦使出的一般属性攻击。\n会降低对手的速度", }, "maxKnuckle": { name: "极巨拳斗", - effect: "极巨化宝可梦使出的格斗属\n性攻击。会提高我方的攻击", + effect: "极巨化宝可梦使出的格斗属性攻击。\n会提高我方的攻击", }, "maxPhantasm": { name: "极巨幽魂", - effect: "极巨化宝可梦使出的幽灵属\n性攻击。会降低对手的防御", + effect: "极巨化宝可梦使出的幽灵属性攻击。\n会降低对手的防御", }, "maxHailstorm": { name: "极巨寒冰", - effect: "极巨化宝可梦使出的冰属性\n攻击。在5回合内会下雪", + effect: "极巨化宝可梦使出的冰属性攻击。\n在5回合内会下雪", }, "maxOoze": { name: "极巨酸毒", - effect: "极巨化宝可梦使出的毒属性\n攻击。会提高我方的特攻", + effect: "极巨化宝可梦使出的毒属性攻击。\n会提高我方的特攻", }, "maxGeyser": { name: "极巨水流", - effect: "极巨化宝可梦使出的水属性\n攻击。可在5回合内降下大\n雨", + effect: "极巨化宝可梦使出的水属性攻击。\n可在5回合内降下大雨", }, "maxAirstream": { name: "极巨飞冲", - effect: "极巨化宝可梦使出的飞行属\n性攻击。会提高我方的速度", + effect: "极巨化宝可梦使出的飞行属性攻击。\n会提高我方的速度", }, "maxStarfall": { name: "极巨妖精", - effect: "极巨化宝可梦使出的妖精属\n性攻击。可在5回合内将脚\n下变成薄雾场地", + effect: "极巨化宝可梦使出的妖精属性攻击。\n可在5回合内将脚下变成薄雾场地", }, "maxWyrmwind": { name: "极巨龙骑", - effect: "极巨化宝可梦使出的龙属性\n攻击。会降低对手的攻击", + effect: "极巨化宝可梦使出的龙属性攻击。\n会降低对手的攻击", }, "maxMindstorm": { name: "极巨超能", - effect: "极巨化宝可梦使出的超能力\n属性攻击。可在5回合内将\n脚下变成精神场地", + effect: "极巨化宝可梦使出的超能力属性攻击。\n可在5回合内将脚下变成精神场地", }, "maxRockfall": { name: "极巨岩石", - effect: "极巨化宝可梦使出的岩石属\n性攻击。可在5回合内卷起\n沙暴", + effect: "极巨化宝可梦使出的岩石属性攻击。\n可在5回合内卷起沙暴", }, "maxQuake": { name: "极巨大地", - effect: "极巨化宝可梦使出的地面属\n性攻击。会提高我方的特防", + effect: "极巨化宝可梦使出的地面属性攻击。\n会提高我方的特防", }, "maxDarkness": { name: "极巨恶霸", - effect: "极巨化宝可梦使出的恶属性\n攻击。会降低对手的特防", + effect: "极巨化宝可梦使出的恶属性攻击。\n会降低对手的特防", }, "maxOvergrowth": { name: "极巨草原", - effect: "极巨化宝可梦使出的草属性\n攻击。可在5回合内将脚下\n变成青草场地", + effect: "极巨化宝可梦使出的草属性攻击。\n可在5回合内将脚下变成青草场地", }, "maxSteelspike": { name: "极巨钢铁", - effect: "极巨化宝可梦使出的钢属性\n攻击。会提高我方的防御", + effect: "极巨化宝可梦使出的钢属性攻击。\n会提高我方的防御", }, "clangorousSoul": { name: "魂舞烈音爆", - effect: "削减少许自己的HP,使所\n有能力都提高", + effect: "削减少许自己的HP,\n使所有能力都提高", }, "bodyPress": { name: "扑击", - effect: "用身体撞向对手进行攻击。\n防御越高,给予的伤害就越\n高", + effect: "用身体撞向对手进行攻击。\n防御越高,给予的伤害就越高", }, "decorate": { name: "装饰", - effect: "通过装饰,大幅提高对方的\n攻击和特攻", + effect: "通过装饰,大幅提高对方的攻击和特攻", }, "drumBeating": { name: "鼓击", - effect: "用鼓点来控制鼓的根部进行\n攻击,从而降低对手的速度", + effect: "用鼓点来控制鼓的根部进行攻击,\n从而降低对手的速度", }, "snapTrap": { name: "捕兽夹", - effect: "使用捕兽夹,在4~5回合\n内,夹住对手进行攻击", + effect: "使用捕兽夹,在4~5回合内,\n夹住对手进行攻击", }, "pyroBall": { name: "火焰球", - effect: "点燃小石子,形成火球攻击\n对手。有时会使对手陷入灼\n伤状态", + effect: "点燃小石子,形成火球攻击对手。\n有时会使对手陷入灼伤状态", }, "behemothBlade": { name: "巨兽斩", @@ -3127,99 +3127,99 @@ export const move: MoveTranslationEntries = { }, "behemothBash": { name: "巨兽弹", - effect: "将全身变化为坚固的盾,猛\n烈地撞向对手进行攻击", + effect: "将全身变化为坚固的盾,\n猛烈地撞向对手进行攻击", }, "auraWheel": { name: "气场轮", - effect: "用储存在颊囊里的能量进行\n攻击,并提高自己的速度。\n其属性会随着莫鲁贝可的样\n子而改变", + effect: "用储存在颊囊里的能量进行攻击,\n并提高自己的速度。其属性会随着\n莫鲁贝可的样子而改变", }, "breakingSwipe": { name: "广域破坏", - effect: "用坚韧的尾巴猛扫对手进行\n攻击,从而降低对手的攻击", + effect: "用坚韧的尾巴猛扫对手进行攻击,\n从而降低对手的攻击", }, "branchPoke": { name: "木枝突刺", - effect: "使用尖锐的树枝刺向对手进\n行攻击", + effect: "使用尖锐的树枝刺向对手进行攻击", }, "overdrive": { name: "破音", - effect: "奏响吉他和贝斯,释放出发\n出巨响的剧烈震动攻击对手", + effect: "奏响吉他和贝斯,释放出发出巨响\n的剧烈震动攻击对手", }, "appleAcid": { name: "苹果酸", - effect: "使用从酸苹果中提取出来的\n酸性液体进行攻击。降低对\n手的特防", + effect: "使用从酸苹果中提取出来的酸性液\n体进行攻击。降低对手的特防", }, "gravApple": { name: "万有引力", - effect: "从高处落下苹果,给予对手\n伤害。可降低对手的防御", + effect: "从高处落下苹果,给予对手伤害。\n可降低对手的防御", }, "spiritBreak": { name: "灵魂冲击", - effect: "用足以让对手一蹶不振的气\n势进行攻击。会降低对手的\n特攻", + effect: "用足以让对手一蹶不振的气势进行攻击。\n会降低对手的特攻", }, "strangeSteam": { name: "神奇蒸汽", - effect: "喷出烟雾攻击对手。有时会\n使对手混乱", + effect: "喷出烟雾攻击对手。有时会使对手混乱", }, "lifeDew": { name: "生命水滴", - effect: "喷洒出神奇的水,回复自己\n和场上同伴的HP", + effect: "喷洒出神奇的水,回复自己和场上\n同伴的HP", }, "obstruct": { name: "拦堵", - effect: "完全抵挡对手的攻击。连续\n使出则容易失败。一旦触碰,\n防御就会大幅降低", + effect: "完全抵挡对手的攻击。\n连续使出则容易失败。一旦触碰,\n防御就会大幅降低", }, "falseSurrender": { name: "假跪真撞", - effect: "装作低头认错的样子,用凌\n乱的头发进行突刺。攻击必\n定会命中", + effect: "装作低头认错的样子,\n用凌乱的头发进行突刺。攻击必定会命中", }, "meteorAssault": { name: "流星突击", - effect: "大力挥舞粗壮的茎进行攻击。\n但同时自己也会被晃晕,\n下一回合自己将无法动弹", + effect: "大力挥舞粗壮的茎进行攻击。\n但同时自己也会被晃晕,下一回合自己\n将无法动弹", }, "eternabeam": { name: "无极光束", - effect: "无极汰那变回原来的样子后,\n发动的最强攻击。下一回\n合自己将无法动弹", + effect: "无极汰那变回原来的样子后,\n发动的最强攻击。下一回合自己将无法动弹", }, "steelBeam": { name: "铁蹄光线", - effect: "将从全身聚集的钢铁化为光\n束,激烈地发射出去。自己\n也会受到伤害", + effect: "将从全身聚集的钢铁化为光束,\n激烈地发射出去。自己也会受到伤害", }, "expandingForce": { name: "广域战力", - effect: "利用精神力量攻击对手。在\n精神场地上威力会有所提高,\n能对所有对手造成伤害", + effect: "利用精神力量攻击对手。\n在精神场地上威力会有所提高,\n能对所有对手造成伤害", }, "steelRoller": { name: "铁滚轮", - effect: "在破坏场地的同时攻击对手。\n如果脚下没有任何场地状\n态存在,使出此招式时便会\n失败", + effect: "在破坏场地的同时攻击对手。\n如果脚下没有任何场地状态存在,\n使出此招式时便会失败", }, "scaleShot": { name: "鳞射", - effect: "发射鳞片进行攻击。连续攻\n击2~5次。速度会提高但\n防御会降低", + effect: "发射鳞片进行攻击。连续攻击2~5次。\n速度会提高但防御会降低", }, "meteorBeam": { name: "流星光束", - effect: "第1回合聚集宇宙之力提高\n特攻,第2回合攻击对手", + effect: "第1回合聚集宇宙之力提高特攻,\n第2回合攻击对手", }, "shellSideArm": { name: "臂贝武器", - effect: "从物理攻击和特殊攻击中选\n择可造成较多伤害的方式进\n行攻击。有时会让对手陷入\n中毒状态", + effect: "从物理攻击和特殊攻击中选择可造\n成较多伤害的方式进行攻击。\n有时会让对手陷入中毒状态", }, "mistyExplosion": { name: "薄雾炸裂", - effect: "对自己周围的所有宝可梦进\n行攻击,但使出后,自己会\n陷入昏厥。在薄雾场地上,\n招式威力会提高", + effect: "对自己周围的所有宝可梦进行攻击,\n但使出后,自己会陷入昏厥。\n在薄雾场地上,招式威力会提高", }, "grassyGlide": { name: "青草滑梯", - effect: "仿佛在地面上滑行般地攻击\n对手。在青草场地上,必定\n能够先制攻击", + effect: "仿佛在地面上滑行般地攻击对手。\n在青草场地上,必定能够先制攻击", }, "risingVoltage": { name: "电力上升", - effect: "用从地面升腾而起的电击进\n行攻击。当对手处于电气场\n地上时,招式威力会变成2\n倍", + effect: "用从地面升腾而起的电击进行攻击。\n当对手处于电气场地上时,\n招式威力会变成2倍", }, "terrainPulse": { name: "大地波动", - effect: "借助场地的力量进行攻击。\n视使出招式时场地状态不同,\n招式的属性和威力会有所\n变化", + effect: "借助场地的力量进行攻击。\n视使出招式时场地状态不同,\n招式的属性和威力会有所变化", }, "skitterSmack": { name: "爬击", @@ -3227,19 +3227,19 @@ export const move: MoveTranslationEntries = { }, "burningJealousy": { name: "妒火", - effect: "用嫉妒的能量攻击对手。会\n让在该回合内能力有所提高\n的宝可梦陷入灼伤状态", + effect: "用嫉妒的能量攻击对手。\n会让在该回合内能力有所提高的宝可梦陷入\n灼伤状态", }, "lashOut": { name: "泄愤", - effect: "攻击对手以发泄对其感到的\n恼怒情绪。如果在该回合内\n自身能力遭到降低,招式的\n威力会变成2倍", + effect: "攻击对手以发泄对其感到的恼怒情绪。\n如果在该回合内自身能力遭到降低,\n招式的威力会变成2倍", }, "poltergeist": { name: "灵骚", - effect: "操纵对手的持有物进行攻击。\n当对手没有携带道具时,\n使出此招式时便会失败", + effect: "操纵对手的持有物进行攻击。\n当对手没有携带道具时,使出此招式时\n便会失败", }, "corrosiveGas": { name: "腐蚀气体", - effect: "用具有强酸性的气体包裹住\n自己周围所有的宝可梦,并\n融化其所携带的道具", + effect: "用具有强酸性的气体包裹住自己周\n围所有的宝可梦,并融化其所携带的道具", }, "coaching": { name: "指导", @@ -3247,7 +3247,7 @@ export const move: MoveTranslationEntries = { }, "flipTurn": { name: "快速折返", - effect: "在攻击之后急速返回,和后\n备宝可梦进行替换", + effect: "在攻击之后急速返回,\n和后备宝可梦进行替换", }, "tripleAxel": { name: "三旋击", @@ -3259,71 +3259,71 @@ export const move: MoveTranslationEntries = { }, "scorchingSands": { name: "热沙大地", - effect: "将滚烫的沙子砸向对手进行\n攻击。有时会让对手陷入灼\n伤状态", + effect: "将滚烫的沙子砸向对手进行攻击。\n有时会让对手陷入灼伤状态", }, "jungleHealing": { name: "丛林治疗", - effect: "与丛林融为一体,回复自己\n和场上同伴的HP和状态", + effect: "与丛林融为一体,回复自己和场上\n同伴的HP和状态", }, "wickedBlow": { name: "暗冥强击", - effect: "将恶之流派修炼至大成的猛\n烈一击。必定会击中要害", + effect: "将恶之流派修炼至大成的猛烈一击。\n必定会击中要害", }, "surgingStrikes": { name: "水流连打", - effect: "将水之流派修炼至大成的仿\n若行云流水般的3次连击。\n必定会击中要害", + effect: "将水之流派修炼至大成的仿若行云\n流水般的3次连击。必定会击中要害", }, "thunderCage": { name: "雷电囚笼", - effect: "将对手困在电流四溅的囚笼\n中,在4~5回合内进行攻\n击", + effect: "将对手困在电流四溅的囚笼中,\n在4~5回合内进行攻击", }, "dragonEnergy": { name: "巨龙威能", - effect: "把生命力转换为力量攻击对\n手。自己的HP越少,招式\n的威力越小", + effect: "把生命力转换为力量攻击对手。\n自己的HP越少,招式的威力越小", }, "freezingGlare": { name: "冰冷视线", - effect: "从双眼发射精神力量进行攻\n击。有时会让对手陷入冰冻\n状态", + effect: "从双眼发射精神力量进行攻击。\n有时会让对手陷入冰冻状态", }, "fieryWrath": { name: "怒火中烧", - effect: "将愤怒转化为火焰般的气场\n进行攻击。有时会使对手畏\n缩", + effect: "将愤怒转化为火焰般的气场进行攻击。\n有时会使对手畏缩", }, "thunderousKick": { name: "雷鸣蹴击", - effect: "以雷电般的动作戏耍对手的\n同时使出脚踢。可降低对手\n的防御", + effect: "以雷电般的动作戏耍对手的同时使出脚踢。\n可降低对手的防御", }, "glacialLance": { name: "雪矛", - effect: "向对手投掷掀起暴风雪的冰\n矛进行攻击", + effect: "向对手投掷掀起暴风雪的冰矛进行攻击", }, "astralBarrage": { name: "星碎", - effect: "用大量的小灵体向对手发起\n攻击", + effect: "用大量的小灵体向对手发起攻击", }, "eerieSpell": { name: "诡异咒语", - effect: "用强大的精神力量攻击。让\n对手最后使用的招式减少3\nPP", + effect: "用强大的精神力量攻击。\n让对手最后使用的招式减少3PP", }, "direClaw": { name: "克命爪", - effect: "以破灭之爪进行攻击。有时\n还会让对手陷入中毒、麻痹\n、睡眠之中的一种状态", + effect: "以破灭之爪进行攻击。\n有时还会让对手陷入中毒、麻痹、睡眠之中的\n一种状态", }, "psyshieldBash": { name: "屏障猛攻", - effect: "让意念的能量覆盖全身,撞\n向对手进行攻击。会提高自\n己的防御", + effect: "让意念的能量覆盖全身,\n撞向对手进行攻击。会提高自己的防御", }, "powerShift": { name: "力量转换", - effect: "将自己的攻击与防御互相交\n换", + effect: "将自己的攻击与防御互相交换", }, "stoneAxe": { name: "岩斧", - effect: "用岩石之斧进行攻击。散落\n的岩石碎片会飘浮在对手周\n围", + effect: "用岩石之斧进行攻击。\n散落的岩石碎片会飘浮在对手周围", }, "springtideStorm": { name: "阳春风暴", - effect: "用交织着爱与恨的烈风席卷\n对手进行攻击。有时会降低\n对手的攻击", + effect: "用交织着爱与恨的烈风席卷对手进行攻击。\n有时会降低对手的攻击", }, "mysticalPower": { name: "神秘之力", @@ -3331,7 +3331,7 @@ export const move: MoveTranslationEntries = { }, "ragingFury": { name: "大愤慨", - effect: "在2~3回合内,一边放出\n火焰,一边疯狂乱打。大闹\n一番后自己会陷入混乱", + effect: "在2~3回合内,一边放出火焰,\n一边疯狂乱打。大闹一番后自己会\n陷入混乱", }, "waveCrash": { name: "波动冲", @@ -3339,474 +3339,474 @@ export const move: MoveTranslationEntries = { }, "chloroblast": { name: "叶绿爆震", - effect: "将自己的叶绿素凝聚起来后\n放出去进行攻击。自己也会\n受到伤害", + effect: "将自己的叶绿素凝聚起来后放出去\n进行攻击。自己也会受到伤害", }, "mountainGale": { name: "冰山风", - effect: "将冰山般巨大的冰块砸向对\n手进行攻击。有时会使对手\n畏缩", + effect: "将冰山般巨大的冰块砸向对手进行攻击。\n有时会使对手畏缩", }, "victoryDance": { name: "胜利之舞", - effect: "激烈地跳起唤来胜利的舞蹈,\n提高自己的攻击、防御和\n速度", + effect: "激烈地跳起唤来胜利的舞蹈,\n提高自己的攻击、防御和速度", }, "headlongRush": { name: "突飞猛扑", - effect: "向对手使出灌注了全心全力\n的撞击。自己的防御和特防\n会降低", + effect: "向对手使出灌注了全心全力的撞击。\n自己的防御和特防会降低", }, "barbBarrage": { name: "毒千针", - effect: "用无数的毒针进行攻击。有\n时还会让对手陷入中毒状态。\n攻击处于中毒状态的对手\n时,威力会变成2倍", + effect: "用无数的毒针进行攻击。\n有时还会让对手陷入中毒状态。\n攻击处于中毒状态的对手时,威力会变成2倍", }, "esperWing": { name: "气场之翼", - effect: "用经过气场强化的翅膀撕裂\n对手。容易击中要害。会提\n高自己的速度", + effect: "用经过气场强化的翅膀撕裂对手。\n容易击中要害。会提高自己的速度", }, "bitterMalice": { name: "冤冤相报", - effect: "用令人毛骨悚然的怨念进行\n攻击。会降低对手的攻击", + effect: "用令人毛骨悚然的怨念进行攻击。\n会降低对手的攻击", }, "shelter": { name: "闭关", - effect: "将皮肤变得坚硬如铁盾,从\n而大幅提高自己的防御", + effect: "将皮肤变得坚硬如铁盾,\n从而大幅提高自己的防御", }, "tripleArrows": { name: "三连箭", - effect: "使出一记腿技后同时发射3\n箭。有时会降低对手的防御\n或使对手畏缩。容易击中要\n害", + effect: "使出一记腿技后同时发射3箭。\n有时会降低对手的防御或使对手畏缩。\n容易击中要害", }, "infernalParade": { name: "群魔乱舞", - effect: "用无数的火球进行攻击。有\n时会让对手陷入灼伤状态。\n攻击处于异常状态的对手时,\n威力会变成2倍", + effect: "用无数的火球进行攻击。\n有时会让对手陷入灼伤状态。攻击处于异常\n状态的对手时,威力会变成2倍", }, "ceaselessEdge": { name: "秘剑・千重涛", - effect: "用贝壳之剑进行攻击。散落\n的贝壳碎片会散落在对手脚\n下成为撒菱", + effect: "用贝壳之剑进行攻击。\n散落的贝壳碎片会散落在对手脚下成为撒菱", }, "bleakwindStorm": { name: "枯叶风暴", - effect: "用足以让身心都止不住颤抖\n的冰冷狂风进行攻击。有时\n会降低对手的速度", + effect: "用足以让身心都止不住颤抖的冰冷\n狂风进行攻击。有时会降低对手的速度", }, "wildboltStorm": { name: "鸣雷风暴", - effect: "呼唤雷云引起风暴,用雷与\n风进行激烈的攻击。有时会\n让对手陷入麻痹状态", + effect: "呼唤雷云引起风暴,用雷与风进行\n激烈的攻击。有时会让对手陷入麻痹状态", }, "sandsearStorm": { name: "热沙风暴", - effect: "用灼热的沙子和强烈的风席\n卷对手进行攻击。有时会让\n对手陷入灼伤状态", + effect: "用灼热的沙子和强烈的风席卷对手\n进行攻击。有时会让对手陷入灼伤状态", }, "lunarBlessing": { name: "新月祈祷", - effect: "向新月献上祈祷,回复自己\n和场上同伴的HP和状态", + effect: "向新月献上祈祷,回复自己和场上\n同伴的HP和状态", }, "takeHeart": { name: "勇气填充", - effect: "鼓起冲劲,治愈自己的异常\n状态,同时提高自己的特攻\n和特防", + effect: "鼓起冲劲,治愈自己的异常状态,\n同时提高自己的特攻和特防", }, "gMaxWildfire": { name: "超极巨深渊灭焰", - effect: "超极巨化的喷火龙使出的火\n属性攻击。可在4回合内给\n予对手伤害", + effect: "超极巨化的喷火龙使出的火属性攻击。\n可在4回合内给予对手伤害", }, "gMaxBefuddle": { name: "超极巨蝶影蛊惑", - effect: "超极巨化的巴大蝶使出的虫\n属性攻击。会让对手陷入中\n毒、麻痹或睡眠状态", + effect: "超极巨化的巴大蝶使出的虫属性攻击。\n会让对手陷入中毒、麻痹或睡眠状态", }, "gMaxVoltCrash": { name: "超极巨万雷轰顶", - effect: "超极巨化的皮卡丘使出的电\n属性攻击。会让对手陷入麻\n痹状态", + effect: "超极巨化的皮卡丘使出的电属性攻击。\n会让对手陷入麻痹状态", }, "gMaxGoldRush": { name: "超极巨特大金币", - effect: "超极巨化的喵喵使出的一般\n属性攻击。会让对手陷入混\n乱状态,并可获得金钱", + effect: "超极巨化的喵喵使出的一般属性攻击。\n会让对手陷入混乱状态,\n并可获得金钱", }, "gMaxChiStrike": { name: "超极巨会心一击", - effect: "超极巨化的怪力使出的格斗\n属性攻击。会变得容易击中\n要害", + effect: "超极巨化的怪力使出的格斗属性攻击。\n会变得容易击中要害", }, "gMaxTerror": { name: "超极巨幻影幽魂", - effect: "超极巨化的耿鬼使出的幽灵\n属性攻击。会踩住对手的影\n子,让其无法被替换", + effect: "超极巨化的耿鬼使出的幽灵属性攻击。\n会踩住对手的影子,\n让其无法被替换", }, "gMaxResonance": { name: "超极巨极光旋律", - effect: "超极巨化的拉普拉斯使出的\n冰属性攻击。可在5回合内\n减弱受到的伤害", + effect: "超极巨化的拉普拉斯使出的冰属性攻击。\n可在5回合内减弱受到的伤害", }, "gMaxCuddle": { name: "超极巨热情拥抱", - effect: "超极巨化的伊布使出的一般\n属性攻击。会让对手陷入着\n迷状态", + effect: "超极巨化的伊布使出的一般属性攻击。\n会让对手陷入着迷状态", }, "gMaxReplenish": { name: "超极巨资源再生", - effect: "超极巨化的卡比兽使出的一\n般属性攻击。会让吃掉的树\n果再生", + effect: "超极巨化的卡比兽使出的一般属性攻击。\n会让吃掉的树果再生", }, "gMaxMalodor": { name: "超极巨臭气冲天", - effect: "超极巨化的灰尘山使出的毒\n属性攻击。会让对手陷入中\n毒状态", + effect: "超极巨化的灰尘山使出的毒属性攻击。\n会让对手陷入中毒状态", }, "gMaxStonesurge": { name: "超极巨岩阵以待", - effect: "超极巨化的暴噬龟使出的水\n属性攻击。会发射无数锐利\n的岩石", + effect: "超极巨化的暴噬龟使出的水属性攻击。\n会发射无数锐利的岩石", }, "gMaxWindRage": { name: "超极巨旋风袭卷", - effect: "超极巨化的钢铠鸦使出的飞\n行属性攻击。可消除反射壁\n和光墙", + effect: "超极巨化的钢铠鸦使出的飞行属性攻击。\n可消除反射壁和光墙", }, "gMaxStunShock": { name: "超极巨异毒电场", - effect: "超极巨化的颤弦蝾螈使出的\n电属性攻击。会让对手陷入\n中毒或麻痹状态", + effect: "超极巨化的颤弦蝾螈使出的电属性攻击。\n会让对手陷入中毒或麻痹状态", }, "gMaxFinale": { name: "超极巨幸福圆满", - effect: "超极巨化的霜奶仙使出的妖\n精属性攻击。可回复我方的\nHP", + effect: "超极巨化的霜奶仙使出的妖精属性攻击。\n可回复我方的HP", }, "gMaxDepletion": { name: "超极巨劣化衰变", - effect: "超极巨化的铝钢龙使出的龙\n属性攻击。可减少对手最后\n使用的招式的PP", + effect: "超极巨化的铝钢龙使出的龙属性攻击。\n可减少对手最后使用的招式的PP", }, "gMaxGravitas": { name: "超极巨天道七星", - effect: "超极巨化的以欧路普使出的\n超能力属性攻击。在5回合\n内重力会产生变化", + effect: "超极巨化的以欧路普使出的超能力\n属性攻击。在5回合内重力会产生变化", }, "gMaxVolcalith": { name: "超极巨炎石喷发", - effect: "超极巨化的巨炭山使出的岩\n石属性攻击。可在4回合内\n给予对手伤害", + effect: "超极巨化的巨炭山使出的岩石属性攻击。\n可在4回合内给予对手伤害", }, "gMaxSandblast": { name: "超极巨沙尘漫天", - effect: "超极巨化的沙螺蟒使出的地\n面属性攻击。在4~5回合\n内会狂刮沙暴", + effect: "超极巨化的沙螺蟒使出的地面属性攻击。\n在4~5回合内会狂刮沙暴", }, "gMaxSnooze": { name: "超极巨睡魔降临", - effect: "超极巨化的长毛巨魔使出的\n恶属性攻击。会通过打大哈\n欠让对手产生睡意", + effect: "超极巨化的长毛巨魔使出的恶属性攻击。\n会通过打大哈欠让对手产生睡意", }, "gMaxTartness": { name: "超极巨酸不溜丢", - effect: "超极巨化的苹裹龙使出的草\n属性攻击。会降低对手的闪\n避率", + effect: "超极巨化的苹裹龙使出的草属性攻击。\n会降低对手的闪避率", }, "gMaxSweetness": { name: "超极巨琼浆玉液", - effect: "超极巨化的丰蜜龙使出的草\n属性攻击。会治愈我方的异\n常状态", + effect: "超极巨化的丰蜜龙使出的草属性攻击。\n会治愈我方的异常状态", }, "gMaxSmite": { name: "超极巨天谴雷诛", - effect: "超极巨化的布莉姆温使出的\n妖精属性攻击。会让对手陷\n入混乱状态", + effect: "超极巨化的布莉姆温使出的妖精属性攻击。\n会让对手陷入混乱状态", }, "gMaxSteelsurge": { name: "超极巨钢铁阵法", - effect: "超极巨化的大王铜象使出的\n钢属性攻击。会发射无数锐\n利的刺", + effect: "超极巨化的大王铜象使出的钢属性攻击。\n会发射无数锐利的刺", }, "gMaxMeltdown": { name: "超极巨液金熔击", - effect: "超极巨化的美录梅塔使出的\n钢属性攻击。会让对手无法\n连续使出相同的招式", + effect: "超极巨化的美录梅塔使出的钢属性攻击。\n会让对手无法连续使出相同的招式", }, "gMaxFoamBurst": { name: "超极巨激漩泡涡", - effect: "超极巨化的巨钳蟹使出的水\n属性攻击。会大幅降低对手\n的速度", + effect: "超极巨化的巨钳蟹使出的水属性攻击。\n会大幅降低对手的速度", }, "gMaxCentiferno": { name: "超极巨百火焚野", - effect: "超极巨化的焚焰蚣使出的火\n属性攻击。可在4~5回合\n内将对手困在火焰中", + effect: "超极巨化的焚焰蚣使出的火属性攻击。\n可在4~5回合内将对手困在火焰中", }, "gMaxVineLash": { name: "超极巨灰飞鞭灭", - effect: "超极巨化的妙蛙花使出的草\n属性攻击。可在4回合内给\n予对手伤害", + effect: "超极巨化的妙蛙花使出的草属性攻击。\n可在4回合内给予对手伤害", }, "gMaxCannonade": { name: "超极巨水炮轰灭", - effect: "超极巨化的水箭龟使出的水\n属性攻击。可在4回合内给\n予对手伤害", + effect: "超极巨化的水箭龟使出的水属性攻击。\n可在4回合内给予对手伤害", }, "gMaxDrumSolo": { name: "超极巨狂擂乱打", - effect: "超极巨化的轰擂金刚猩使出\n的草属性攻击。不会受到对\n手特性的干扰", + effect: "超极巨化的轰擂金刚猩使出的草属性攻击。\n不会受到对手特性的干扰", }, "gMaxFireball": { name: "超极巨破阵火球", - effect: "超极巨化的闪焰王牌使出的\n火属性攻击。不会受到对手\n特性的干扰", + effect: "超极巨化的闪焰王牌使出的火属性攻击。\n不会受到对手特性的干扰", }, "gMaxHydrosnipe": { name: "超极巨狙击神射", - effect: "超极巨化的千面避役使出的\n水属性攻击。不会受到对手\n特性的干扰", + effect: "超极巨化的千面避役使出的水属性攻击。\n不会受到对手特性的干扰", }, "gMaxOneBlow": { name: "超极巨夺命一击", - effect: "超极巨化的武道熊师使出的\n恶属性攻击。是可以无视极\n巨防壁的一击", + effect: "超极巨化的武道熊师使出的恶属性攻击。\n是可以无视极巨防壁的一击", }, "gMaxRapidFlow": { name: "超极巨流水连击", - effect: "超极巨化的武道熊师使出的\n水属性攻击。是可以无视极\n巨防壁的连击", + effect: "超极巨化的武道熊师使出的水属性攻击。\n是可以无视极巨防壁的连击", }, "teraBlast": { name: "太晶爆发", - effect: "太晶化时,会放出太晶属性\n的能量攻击。比较自己的攻\n击和特攻,用数值相对较高\n的一项给予对方伤害。(其\n他属性)/用攻击和特攻数\n值较高的一项给予伤害。对\n正处于太晶化的对手效果绝\n佳。自己的攻击和特攻会降\n低。(星晶", + effect: "太晶化时,会放出太晶属性的能量攻击。\n比较自己的攻击和特攻,\n用数值相对较高的一项给予对方伤害。\n(其他属性)/用攻击和特攻数\n值较高的一项给予伤害。\n对正处于太晶化的对手效果绝佳。\n自己的攻击和特攻会降低。(星晶", }, "silkTrap": { name: "线阱", - effect: "用丝设置陷阱。防住对方攻\n击的同时,能够降低所接触\n到的对手的速度", + effect: "用丝设置陷阱。防住对方攻击的同时,\n能够降低所接触到的对手的速度", }, "axeKick": { name: "下压踢", - effect: "将踢起的脚跟往下劈向对手\n进行攻击。有时会使对手混\n乱。如果劈偏则自己会受到\n伤害", + effect: "将踢起的脚跟往下劈向对手进行攻击。\n有时会使对手混乱。\n如果劈偏则自己会受到伤害", }, "lastRespects": { name: "扫墓", - effect: "为了化解伙伴的悔恨而进行\n攻击。被打倒的我方宝可梦\n越多,招式的威力越高", + effect: "为了化解伙伴的悔恨而进行攻击。\n被打倒的我方宝可梦越多,\n招式的威力越高", }, "luminaCrash": { name: "琉光冲激", - effect: "放出连精神都能影响到的奇\n妙怪光进行攻击。会大幅降\n低对方的特防", + effect: "放出连精神都能影响到的奇妙怪光\n进行攻击。会大幅降低对方的特防", }, "orderUp": { name: "上菜", - effect: "以潇洒的身手进行攻击。若\n口中有米立龙,会按其样子\n提高能力", + effect: "以潇洒的身手进行攻击。\n若口中有米立龙,会按其样子提高能力", }, "jetPunch": { name: "喷射拳", - effect: "将激流覆盖于拳头,以肉眼\n无法辨识的速度打出拳击。\n必定能够先制攻击", + effect: "将激流覆盖于拳头,以肉眼无法辨\n识的速度打出拳击。必定能够先制攻击", }, "spicyExtract": { name: "辣椒精华", - effect: "放出极为辛辣的精华。对手\n的攻击会大幅提高,防御会\n大幅降低", + effect: "放出极为辛辣的精华。\n对手的攻击会大幅提高,防御会大幅降低", }, "spinOut": { name: "疾速转轮", - effect: "通过往腿上增加负荷,以激\n烈的旋转给予对手伤害。自\n己的速度会大幅降低", + effect: "通过往腿上增加负荷,\n以激烈的旋转给予对手伤害。自己的速度会大幅降低", }, "populationBomb": { name: "鼠数儿", - effect: "伙伴们会纷纷赶来集合,以\n群体行动给予对手攻击。连\n续命中1~10次", + effect: "伙伴们会纷纷赶来集合,\n以群体行动给予对手攻击。连续命中1~10次", }, "iceSpinner": { name: "冰旋", - effect: "脚上覆盖薄冰,旋转着撞击\n对手。通过旋转的动作破坏\n场地", + effect: "脚上覆盖薄冰,旋转着撞击对手。\n通过旋转的动作破坏场地", }, "glaiveRush": { name: "巨剑突击", - effect: "有勇无谋的舍身突击。使出\n招式后,对手的攻击必定会\n命中,且伤害会变成2倍", + effect: "有勇无谋的舍身突击。使出招式后,\n对手的攻击必定会命中,\n且伤害会变成2倍", }, "revivalBlessing": { name: "复生祈祷", - effect: "通过以慈爱之心祈祷,让陷\n入昏厥的后备宝可梦以回复\n一半HP的状态复活", + effect: "通过以慈爱之心祈祷,\n让陷入昏厥的后备宝可梦以回复一半HP的状态复活", }, "saltCure": { name: "盐腌", - effect: "使对手陷入盐腌状态,每回\n合给予对手伤害。对手为钢\n或水属性时会更痛苦", + effect: "使对手陷入盐腌状态,\n每回合给予对手伤害。对手为钢或水属性时会更痛苦", }, "tripleDive": { name: "三连钻", - effect: "以默契的跳跃溅起水花击向\n对手。连续3次给予伤害", + effect: "以默契的跳跃溅起水花击向对手。\n连续3次给予伤害", }, "mortalSpin": { name: "晶光转转", - effect: "通过旋转来攻击对手。可以\n摆脱绑紧、紧束、寄生种子\n等招式。还能让对手陷入中\n毒状态", + effect: "通过旋转来攻击对手。\n可以摆脱绑紧、紧束、寄生种子等招式。\n还能让对手陷入中毒状态", }, "doodle": { name: "描绘", - effect: "把握并映射出对手的本质,\n让自己和同伴宝可梦的特性\n变得和对手相同", + effect: "把握并映射出对手的本质,\n让自己和同伴宝可梦的特性变得和对手相同", }, "filletAway": { name: "甩肉", - effect: "削减自己的HP,大幅提高\n攻击和特攻以及速度", + effect: "削减自己的HP,大幅提高攻击和\n特攻以及速度", }, "kowtowCleave": { name: "仆刀", - effect: "下跪让对手大意后发起袭击\n劈向对手。攻击必定会命中", + effect: "下跪让对手大意后发起袭击劈向对手。\n攻击必定会命中", }, "flowerTrick": { name: "千变万花", - effect: "将做了手脚的花束扔向对手\n进行攻击。必定会命中,且\n会击中要害", + effect: "将做了手脚的花束扔向对手进行攻击。\n必定会命中,且会击中要害", }, "torchSong": { name: "闪焰高歌", - effect: "如唱歌一样喷出熊熊燃烧的\n火焰烧焦对手。会提高自己\n的特攻", + effect: "如唱歌一样喷出熊熊燃烧的火焰烧焦对手。\n会提高自己的特攻", }, "aquaStep": { name: "流水旋舞", - effect: "以盈盈欲滴的轻快步伐戏耍\n对手并给予其伤害。会提高\n自己的速度", + effect: "以盈盈欲滴的轻快步伐戏耍对手并\n给予其伤害。会提高自己的速度", }, "ragingBull": { name: "怒牛", - effect: "狂怒暴牛的猛烈冲撞。招式\n的属性随形态改变,光墙和\n反射壁等招式也能破坏", + effect: "狂怒暴牛的猛烈冲撞。\n招式的属性随形态改变,光墙和反射壁等招式\n也能破坏", }, "makeItRain": { name: "淘金潮", - effect: "扔出大量硬币攻击。自己的\n特攻会降低,战斗后还可以\n拿到钱", + effect: "扔出大量硬币攻击。自己的特攻会降低,\n战斗后还可以拿到钱", }, "psyblade": { name: "精神剑", - effect: "用无形的利刃劈开对手。处\n于电气场地时,招式威力会\n变成1.5倍", + effect: "用无形的利刃劈开对手。\n处于电气场地时,招式威力会变成1.5倍", }, "hydroSteam": { name: "水蒸气", - effect: "将煮得翻滚的开水猛烈地喷\n向对手。日照强烈时,招式\n威力不但不会降低,还会变\n成1.5倍", + effect: "将煮得翻滚的开水猛烈地喷向对手。\n日照强烈时,招式威力不但不会降低,\n还会变成1.5倍", }, "ruination": { name: "大灾难", - effect: "引发毁灭性的灾厄,使对手\n的HP减半", + effect: "引发毁灭性的灾厄,使对手的HP减半", }, "collisionCourse": { name: "全开猛撞", - effect: "边变形边凶暴地落下,并引\n发起古老的大爆炸。若针对\n到弱点,威力会进一步", + effect: "边变形边凶暴地落下,\n并引发起古老的大爆炸。若针对到弱点,\n威力会进一步", }, "electroDrift": { name: "闪电猛冲", - effect: "边变形边高速奔走,并以未\n知的电击贯穿对手。若针对\n到弱点,威力会进一步", + effect: "边变形边高速奔走,并以未知的电\n击贯穿对手。若针对到弱点,\n威力会进一步", }, "shedTail": { name: "断尾", - effect: "削减自己的HP,制造分身\n后会返回,并和后备宝可梦\n进行替换", + effect: "削减自己的HP,制造分身后会返回,\n并和后备宝可梦进行替换", }, "chillyReception": { name: "冷笑话", - effect: "留下冷场的冷笑话后,和后\n备宝可梦进行替换。在5回\n合内会下雪", + effect: "留下冷场的冷笑话后,\n和后备宝可梦进行替换。在5回合内会下雪", }, "tidyUp": { name: "大扫除", - effect: "将撒菱、隐形岩、黏黏网、\n毒菱、替身全部扫除掉。自\n己的攻击和速度会提高", + effect: "将撒菱、隐形岩、黏黏网、毒菱、\n替身全部扫除掉。自己的攻击和速\n度会提高", }, "snowscape": { name: "雪景", - effect: "在5回合内会下雪。冰属性\n的防御会提高", + effect: "在5回合内会下雪。冰属性的防御会提高", }, "pounce": { name: "虫扑", - effect: "飞扑向对手攻击。会降低对\n手的速度", + effect: "飞扑向对手攻击。会降低对手的速度", }, "trailblaze": { name: "起草", - effect: "跳出草丛进行攻击。通过轻\n快的步伐会提高自己的速度", + effect: "跳出草丛进行攻击。通过轻快的步\n伐会提高自己的速度", }, "chillingWater": { name: "泼冷水", - effect: "泼洒冰冷得足以让对手失去\n活力的水进行攻击。会降低\n对手的攻击", + effect: "泼洒冰冷得足以让对手失去活力的\n水进行攻击。会降低对手的攻击", }, "hyperDrill": { name: "强力钻", - effect: "急速旋转尖锐的身体部位贯\n穿对手。可以无视守住和看\n穿等招式", + effect: "急速旋转尖锐的身体部位贯穿对手。\n可以无视守住和看穿等招式", }, "twinBeam": { name: "双光束", - effect: "从两眼发射出神奇的光线攻\n击。连续2次给予伤害", + effect: "从两眼发射出神奇的光线攻击。\n连续2次给予伤害", }, "rageFist": { name: "愤怒之拳", - effect: "将愤怒化为力量攻击。受到\n攻击的次数越多,招式的威\n力越高", + effect: "将愤怒化为力量攻击。\n受到攻击的次数越多,招式的威力越高", }, "armorCannon": { name: "铠农炮", - effect: "熊熊燃烧自己的铠甲,将其\n做成炮弹射出攻击。自己的\n防御和特防会降低", + effect: "熊熊燃烧自己的铠甲,\n将其做成炮弹射出攻击。自己的防御和特防会降低", }, "bitterBlade": { name: "悔念剑", - effect: "将对世间的留恋聚集于剑尖,\n并斩击对手。可以回复给\n予对手伤害的一半HP", + effect: "将对世间的留恋聚集于剑尖,\n并斩击对手。可以回复给予对手伤害的\n一半HP", }, "doubleShock": { name: "电光双击", - effect: "将全身所有的电力放出,给\n予对手大大的伤害。自己的\n电属性将会消失", + effect: "将全身所有的电力放出,\n给予对手大大的伤害。自己的电属性将会消失", }, "gigatonHammer": { name: "巨力锤", - effect: "连同身体转起巨大的锤子进\n行攻击。这个招式无法连续\n使出2次", + effect: "连同身体转起巨大的锤子进行攻击。\n这个招式无法连续使出2次", }, "comeuppance": { name: "复仇", - effect: "使出招式前,将最后受到的\n招式的伤害大力返还给对手", + effect: "使出招式前,将最后受到的招式的\n伤害大力返还给对手", }, "aquaCutter": { name: "水波刀", - effect: "如刀刃般喷射出加压的水切\n开对手。容易击中要害", + effect: "如刀刃般喷射出加压的水切开对手。\n容易击中要害", }, "blazingTorque": { name: "灼热暴冲", - effect: "攻击目标造成伤害,\n有30%的几率使目标陷入\n灼伤状态。", + effect: "攻击目标造成伤害,有30%的几\n率使目标陷入灼伤状态。", }, "wickedTorque": { name: "黑暗暴冲", - effect: "攻击目标造成伤害,\n有30%的几率使目标陷入\n睡眠状态。", + effect: "攻击目标造成伤害,有30%的几\n率使目标陷入睡眠状态。", }, "noxiousTorque": { name: "剧毒暴冲", - effect: "攻击目标造成伤害,\n有30%的几率使目标陷入\n中毒状态。", + effect: "攻击目标造成伤害,有30%的几\n率使目标陷入中毒状态。", }, "combatTorque": { name: "格斗暴冲", - effect: "攻击目标造成伤害,\n有30%的几率使目标陷入\n麻痹状态。此招式可以命中\n幽灵属性的宝可梦。", + effect: "攻击目标造成伤害,有30%的几\n率使目标陷入麻痹状态。\n此招式可以命中幽灵属性的宝可梦。", }, "magicalTorque": { name: "魔法暴冲", - effect: "攻击目标造成伤害,\n有30%的几率使目标陷入\n混乱状态。", + effect: "攻击目标造成伤害,有30%的几\n率使目标陷入混乱状态。", }, "bloodMoon": { name: "血月", - effect: "从赤红如血的满月发射出全\n部的气势。这个招式无法连\n续使出2次", + effect: "从赤红如血的满月发射出全部的气势。\n这个招式无法连续使出2次", }, "matchaGotcha": { name: "刷刷茶炮", - effect: "发射经搅拌的茶的大炮,可\n以回复给予对手伤害的一半\nHP,有时会让对手陷入灼\n伤状态", + effect: "发射经搅拌的茶的大炮,\n可以回复给予对手伤害的一半HP,\n有时会让对手陷入灼伤状态", }, "syrupBomb": { name: "糖浆炸弹", - effect: "使粘稠的麦芽糖浆爆炸,让\n对手陷入满身糖状态,在3\n回合内持续降低其速度", + effect: "使粘稠的麦芽糖浆爆炸,\n让对手陷入满身糖状态,在3回合内持续降\n低其速度", }, "ivyCudgel": { name: "棘藤棒", - effect: "用缠有藤蔓的棍棒殴打。属\n性会随所戴的面具而改变。\n容易击中要害", + effect: "用缠有藤蔓的棍棒殴打。\n属性会随所戴的面具而改变。容易击中要害", }, "electroShot": { name: "电光束", - effect: "第1回合收集电力提高特攻,\n第2回合将高压的电力发\n射出去。下雨天气时能立刻\n发射", + effect: "第1回合收集电力提高特攻,\n第2回合将高压的电力发射出去。\n下雨天气时能立刻发射", }, "teraStarstorm": { name: "晶光星群", - effect: "照射出结晶的力量来驱逐敌\n人。太乐巴戈斯在星晶形态\n下使出时,能对所有对手造\n成伤害", + effect: "照射出结晶的力量来驱逐敌人。\n太乐巴戈斯在星晶形态下使出时,\n能对所有对手造成伤害", }, "fickleBeam": { name: "随机光", - effect: "发射光线进行攻击。有时其\n他的头也会合力发射镭射,\n让招式威力变成2倍", + effect: "发射光线进行攻击。有时其他的头\n也会合力发射镭射,让招式威力变成2倍", }, "burningBulwark": { name: "火焰守护", - effect: "用超高温的体毛防住对手攻\n击的同时,让接触到自己的\n对手灼伤", + effect: "用超高温的体毛防住对手攻击的同时,\n让接触到自己的对手灼伤", }, "thunderclap": { name: "迅雷", - effect: "可以比对手先使出电击进行\n攻击。对手使出的招式如果\n不是攻击招式则会失败", + effect: "可以比对手先使出电击进行攻击。\n对手使出的招式如果不是攻击招式\n则会失败", }, "mightyCleave": { name: "强刃攻击", - effect: "用积蓄在头部的光来斩切对\n手。可以无视守护进行攻击", + effect: "用积蓄在头部的光来斩切对手。\n可以无视守护进行攻击", }, "tachyonCutter": { name: "迅子利刃", - effect: "接连发射出粒子的利刃,连\n续2次给予伤害。攻击必定\n会命中", + effect: "接连发射出粒子的利刃,\n连续2次给予伤害。攻击必定会命中", }, "hardPress": { name: "硬压", - effect: "用手臂或钳子压迫对手。对\n手剩余的HP越多,威力越\n大", + effect: "用手臂或钳子压迫对手。\n对手剩余的HP越多,威力越大", }, "dragonCheer": { name: "龙声鼓舞", - effect: "以龙之鼓舞提高士气,让我\n方的招式变得容易击中要害。\n对龙属性的鼓舞效果会更\n强", + effect: "以龙之鼓舞提高士气,\n让我方的招式变得容易击中要害。\n对龙属性的鼓舞效果会更强", }, "alluringVoice": { name: "魅诱之声", - effect: "用天使般的歌声攻击对手。\n会让此回合内能力有提高的\n宝可梦陷入混乱状态", + effect: "用天使般的歌声攻击对手。\n会让此回合内能力有提高的宝可梦陷入混乱状态", }, "temperFlare": { name: "豁出去", - effect: "以自暴自弃的气势进行攻击。\n如果上一回合招式没有命\n中,威力就会翻倍", + effect: "以自暴自弃的气势进行攻击。\n如果上一回合招式没有命中,\n威力就会翻倍", }, "supercellSlam": { name: "闪电强袭", - effect: "让身体带电后压向对手。如\n果没有命中则自己会受到伤\n害", + effect: "让身体带电后压向对手。\n如果没有命中则自己会受到伤害", }, "psychicNoise": { name: "精神噪音", - effect: "用令对手不舒服的音波进行\n攻击。让对手在2回合内无\n法通过招式、特性或携带的\n道具回复HP", + effect: "用令对手不舒服的音波进行攻击。\n让对手在2回合内无法通过招式、\n特性或携带的道具回复HP", }, "upperHand": { name: "快手还击", - effect: "察觉到对手的动作后用掌根\n攻击,让对手畏缩。如果对\n手使出的招式不是先制攻击,\n则会失败", + effect: "察觉到对手的动作后用掌根攻击,\n让对手畏缩。如果对手使出的招式\n不是先制攻击,则会失败", }, "malignantChain": { name: "邪毒锁链", - effect: "用由毒形成的锁链缠住对手\n注入毒素加以侵蚀。有时会\n让对手陷入剧毒状态", + effect: "用由毒形成的锁链缠住对手注入毒\n素加以侵蚀。有时会让对手陷入剧毒状态", } } as const; From 38ed57f06372cfb01b064db8c907eb9d0513553f Mon Sep 17 00:00:00 2001 From: chaosgrimmon <31082757+chaosgrimmon@users.noreply.github.com> Date: Thu, 4 Jul 2024 01:24:29 -0400 Subject: [PATCH 07/37] [Sprite] Shiny Spritzee colour correction (#2781) * [Sprite] Exp shiny Spritzee * [Sprite] Exp non-shiny Spritzee --- public/images/pokemon/exp/682.png | Bin 1757 -> 1797 bytes public/images/pokemon/exp/shiny/682.png | Bin 1757 -> 1797 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/public/images/pokemon/exp/682.png b/public/images/pokemon/exp/682.png index 68cbd66436457d433350846cfed60ef91af657ac..35ab3a5c315786a8621f199f1136730d40579d9d 100644 GIT binary patch delta 1781 zcmV`5VwV00wkP zL_t(|ob8;8ZreB%L_<^D+UYv^|G!=FB~cQ|dnjMQ>7o}Ykbf4F@ld8E`Ha(#k3V;e z(Gm>_k=e~EiH3wd50e*YJ8p}rC&F$p+3j|l#7AW+t|Mb_Vf<3Qj0O7@ zC)*io-O)=|Hh&b%&pj{oVi`-eIz1kb)y-Zh8&3B5>+_M#yq&#Db|TsD&(DYRXGb@i z-HI!VuIxm#-_DzbnZ24v<7L@+ve_q_8Gjmg7s=S%|Mip1++sFA3!B%wu8d~8XFqTD zh-Sv`TX&rdj-8^Ne+o*kX?yB^`7dh&F|V=2_0(!D(8fHDrYjy1{71 zWVdK{UmtQgCPWr=(2ZyF=NxZ&_p>v~w^?1;s)KF=+2(Cv%v5{0#j7RT>7W}Nm)(rn z`*=Qx(>S0vEk?3&Tak|Ta!sT=*GsyJ+QdBv{GA>t&izG zsygTfqq*djzS4HydnH*uBKehjSOIez4EXe4>59_6rhLtsIbM88wshDH&e!wn`E=rT zowGfkPCOAnw}EI+(JRSNv~Qhcv)lLAw`|5#Tz`k=2S*F9KP?s4{hb$w5qwP*Rx*OG zr1F;nQMrf&oNh=Vz*LDdOG-%ab!&qH&bNh-;49V!;i^6*rW@V{_M=GzU#m7S5r7+8 z+=f@(3?%qWC#wzsJn-D+0z`t(bVRiW;33#iMhQOC5mg0%=X=lY0;(dc1FAXzKVD5K z!GC8uqG|!~mepnfonT!ZQZ)g%ZOVECpXrdQ1HjAo2bAD5-3iqOfR}8Z5`3mRq1pj( zw18Xtpfz<&)dS!wo2LYy>8M)=fUhb_@R<(x0SJIog3okB#W{I*0mTLZI>{~hV4U7r zz`~-1g{}m==e9V}F}lDFlwXy_>D&+Q>Zt516@)$qRyC=j4?_ zplP?diA{wJtv3X}J7pmN+~O&%X9oy4CHSlmz=T^S?bZ;FNn z5`10RpEIhToL3ot@{8Xnd~$yA)PK++0zNu)m0cYo-~*Y`Q_#0so~WiST*n9j=gF2z z;FWs8Py#+MD#ZaM;HRR!R2)D8J~nxKEUqU+lzd4F_^1KdI^gTZP)o!=k*;sCc0 z+h{M-%kZeEIFMV2BAX&u1;qhxA+)1?f#QJw9)TkB&AkDL_VV@~oPW2#c{bNX^RKM* z&FN&9^agh2%=Y$U@O(Jy-4ee1&?Mlmjma!`#mqk=T7~6?o3D50s$wStxJA*>mBUvO2jf{v6J?)^381uXZHWEw2@nrIp<_nKrHELU%|S*~g}U6!jl zsw`JMnjXv5j;6_SwQlALma8+Duw12RSFl{QY^p3*Ia;%$#S(vljW*s z(_^_;q|;)#`m=tV`DK=S(FDl+D$BiQ=7aYZ+QmlqKlIR@cYruJKRDX|?*qJl=j8kc Xq6em%8*e5p00000NkvXXu0mjfxUq8; delta 1741 zcmV;;1~U1D4&4oqB!5UyOjJbx000aO3}7EGU?4CM5D>U%Z@6e~?~kAFzrRmRPcIA% zFc1)kM0dYmpWja(+}z*aPaQ7|FE9`=`T6<&{{C!iZ=al>Yin-IVkw;f0004WQchC< zK<3zH000I)j~OpoWnmtT#dm29FV}FPfml4+RJ%N^UE{EL{?0*&ukHg}5Rkh#my^RNA{mY&npY~Q}b^Nv1re(jMp7x}lj#SImmA@3* zH0?KO**Ud~c@);aY)`kcq95Zl0E=h$kLFTFx3aPd{4>#un=ELTg)l_i*vEI{t#Wd>X#L>cQsheWtnrmZT$m}`eki3_rT}M z5GiF`ux(qOkI%6YRkF!)1{4P1chAd7R@ z;DoCWl!4Gqo!UDY1P`AOy9Hy`UC!$V+k2y@m1bC;x#~h}j zI-PqBKISkL)alIJZSXONDJ;O<&0~Y#!(j>waOPfvk2y?*1o%q51|M^n3JGxPH29dq zRDZVs#|9sBF{)pufBpdO0}zMX`gQsz4`41DKB#f9tzW0#eE?;YLJz7OZqsSqI{kwO zaHx@6oqqoT47yS=?heJ8x;iGno%-+rZWMUXNSlWm z0S+{Ig@C~465!glhNiFpH>x%GEv6LY+J83ZFJzwp=SK85m^}jI+BWA6?Gxa1=`U>` zI1q5IZEL3y(K`X|23)_{n;bHXT=cVH=s=+5+BR-?wFcZY^F0CX2H$NuI1p&Lw$0zD zn6!ol-vSQ=Vr_g5G~n9|K0Xk@ZCEqomlkvVZFm}n#$(uk&!6VO`v+j(&AZPJHh*;k1HS#f0o<0A%04Y>z{lS=5To>klVy>(0Uv+g zK(18I^;^OQeDsBboU^=wM8XDq(1iovrI6ep$ti5WM_xF{`5h#_3>)x~7Y_bfd{#{g z8}I=a4t&@Jx{k{tDa8%=m~J{vHVOVh`G^Y#?Xri*hl4{R z5;ovpec_;8_UGZ@ko2=QogoPu@Grh_&`$f4blN!;5(yjdFTQZlE<2>#w5(9_GGM?5 zTsUw@r={Dpye#iNJ%I8ZapAxrop!KkS)ugy)+|uIoxukOIscLiq;IG%tAELLn~2%; z8lZgpf)5U)4iJTGn#SHwnK9oyp|<=Yo{a3Hl@ZqVWFG7*K6J8PhP`|fC?g9Fi4 zG06TgNV|OfxV^orTr61m;((tIuM^!N_aXc5hY3TZe4}A&fCmSX>o~as<(lMH6)E4Y zyAb%`Kyr=b7Sdfd%|a$Cfq(LiP756zB-^Irnq9uk%`jHJILswmr9V8Qma}XVtN6wNI5GUn8xo0lpj~7x+w36L3v;HwX?s8X)Yv$>3m+P8&!ZhUSJQJoNSLX_RLV&B& zZ{``xu&Xo0IV0HB(Y$5Y<<1OtxzmDO?yO*!J1yAd&I)$9(}G>yv|yJzE!gEw3wF7a z5_P#V5_P!~5_P!~5=M2o6B2c~vw~gjq+pjjC)nlAkN-L|aJe&IJm7L?zIZNk=V!aj joiD|HreRVwV00wkP zL_t(|ob8;8ZreB%L_<^D+UYv^|G!=FB~cQ|dnjMQ>7o}Ykbf4F@ld8E`Ha(#k3V;e z(Gm>_k=e~EiH3wd50e*YJ8p}rC&F$p+3j|l#7AW+t|Mb_Vf<3Qj0O7@ zC)*io-O)=|Hh&b%&pj{oVi`-eIz1kb)y-Zh8&3B5>+_M#yq&#Db|TsD&(DYRXGb@i z-HI!VuIxm#-_DzbnZ24v<7L@+ve_q_8Gjmg7s=S%|Mip1++sFA3!B%wu8d~8XFqTD zh-Sv`TX&rdj-8^Ne+o*kX?yB^`7dh&F|V=2_0(!D(8fHDrYjy1{71 zWVdK{UmtQgCPWr=(2ZyF=NxZ&_p>v~w^?1;s)KF=+2(Cv%v5{0#j7RT>7W}Nm)(rn z`*=Qx(>S0vEk?3&Tak|Ta!sT=*GsyJ+QdBv{GA>t&izG zsygTfqq*djzS4HydnH*uBKehjSOIez4EXe4>59_6rhLtsIbM88wshDH&e!wn`E=rT zowGfkPCOAnw}EI+(JRSNv~Qhcv)lLAw`|5#Tz`k=2S*F9KP?s4{hb$w5qwP*Rx*OG zr1F;nQMrf&oNh=Vz*LDdOG-%ab!&qH&bNh-;49V!;i^6*rW@V{_M=GzU#m7S5r7+8 z+=f@(3?%qWC#wzsJn-D+0z`t(bVRiW;33#iMhQOC5mg0%=X=lY0;(dc1FAXzKVD5K z!GC8uqG|!~mepnfonT!ZQZ)g%ZOVECpXrdQ1HjAo2bAD5-3iqOfR}8Z5`3mRq1pj( zw18Xtpfz<&)dS!wo2LYy>8M)=fUhb_@R<(x0SJIog3okB#W{I*0mTLZI>{~hV4U7r zz`~-1g{}m==e9V}F}lDFlwXy_>D&+Q>Zt516@)$qRyC=j4?_ zplP?diA{wJtv3X}J7pmN+~O&%X9oy4CHSlmz=T^S?bZ;FNn z5`10RpEIhToL3ot@{8Xnd~$yA)PK++0zNu)m0cYo-~*Y`Q_#0so~WiST*n9j=gF2z z;FWs8Py#+MD#ZaM;HRR!R2)D8J~nxKEUqU+lzd4F_^1KdI^gTZP)o!=k*;sCc0 z+h{M-%kZeEIFMV2BAX&u1;qhxA+)1?f#QJw9)TkB&AkDL_VV@~oPW2#c{bNX^RKM* z&FN&9^agh2%=Y$U@O(Jy-4ee1&?Mlmjma!`#mqk=T7~6?o3D50s$wStxJA*>mBUvO2jf{v6J?)^381uXZHWEw2@nrIp<_nKrHELU%|S*~g}U6!jl zsw`JMnjXv5j;6_SwQlALma8+Duw12RSFl{QY^p3*Ia;%$#S(vljW*s z(_^_;q|;)#`m=tV`DK=S(FDl+D$BiQ=7aYZ+QmlqKlIR@cYruJKRDX|?*qJl=j8kc Xq6em%8*e5p00000NkvXXu0mjf0#I|~ delta 1741 zcmV;;1~U1D4&4oqB!5UyOjJbx000aO3`H?nU>`3K5DYin-9UJ)_?0004WQchC< zK<3zH000I)kC`l5Wf2*T#dm3qEZ0b(fml4+RJ%N)UE{EL{9Df&!jKku2Rkh#my-fyU{mY)8p7&N}b@H{?re(jMpZBDnj#SImRlXG4 zH0?KO**UdKWE9rFY)`kcq95Zl0E_4NkLFTFx3aPd{4>#u#j9zTg)l_i*vEI{t#Wd>X#LZcQsheWtnrmZT$mx`eki3_rS-> z5GiF`ux(o&caOVTND!ln73yr;K5a)qEHv!|sQ9+i6YRkF!)1{4P1chAd7R@ z;DoCWl!4Gqo!UDY1P`AOy9Hy`UC!$V+k2y@m1bC;x#~h}j zI$e4VKISkL)afG9ZSXONDJ;O<&0~Y#!(j>waFJevk2y?*1o%q51|M^n3JGxPH29dq zRDZVs#|9sBF{)pufBpdO0}zMX`gQsz4`41DKB#f9tzW0#eE?;YLJz7OZqsSqI{kwO zaHxx%GEv6LY+J83ZFJzwpmqzqAm^}jI+BWA6?Gxa1=`U>` zI1q5IZEL3y(K`X|23)_zn;bHXT=a`!=s=+5+BRu-wFcZY^F0CX2H$NuI1p&Lw$0zD zn6!ol-vSQ=Vr_B`G~n9|K0Xk@ZCEqomlkvVZFm}n#$(uk&!6VO`v+j(&AZPJHhz{lS=V59Vf<7MHv0Uv+g zfUi`}^_#;6eDsBboHM_In8OBq(1iovr4ZjB&M9obM_xF{`5nZ*3>)x~7Y_bfd{#{g z8}I=a4t&@Jx{k}tDa8%=m~J{vHV*zm`G^Y#?Xribhl4}R z95&!zec_;8_UGZ@ko2=Qogoez@Grh_&`$f4blN!;Vh$VdFTQZlE<2>#w5(9_GGM?5 zTsUw@r={Dpye#iNJ%I8ZapAxrop!KkS)ugy)+|uIoxukOIsf7dq;IG%tAELL8?)K; z8lZgpf)5V34q%0Bn#SHwo5rlKo!H|b<=Yo{aKN>kZ_wfGGG>L6J8PhP`|fC?g9Fx9 zHpu=lNXLBrxV^orQY={c;((tIuVdZ8_aXc5hY3TZe4`O-fCmSh>o~px<(lMH6)E4Y zyAb%`fO8G!7Sdfd%|a$Cfq(LiP756zB-^Irnq9uk%`jHJI3gumr9V8QmNRb?tN6wNI5GUn8xo0lpj~7x+v{KwNi~cb^?s8X)Yv$>3m+P8&!ZhUSJQJoNSLX_RLV&B& zZ;=_xu&Xo0IV0HB(Y$5Y<<1OtxzmDO?yO*!J1yAd&I)$9(}G>yv|yJzE!gEw3wF7a z5_P#V5_P!~5_P!~5=M2o6B2c~vw~gjq+pjjC)nlAkN-L|aJe&IJm7L?zIZNk=V!aj joiD|HreR Date: Fri, 5 Jul 2024 03:03:01 +0900 Subject: [PATCH 08/37] [Localization] punctuation fix in descriptions in korean modifier-type.ts (#2789) --- src/locales/ko/modifier-type.ts | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/src/locales/ko/modifier-type.ts b/src/locales/ko/modifier-type.ts index 7a8f1bef8e9..e0a4007455d 100644 --- a/src/locales/ko/modifier-type.ts +++ b/src/locales/ko/modifier-type.ts @@ -42,7 +42,7 @@ export const modifierType: ModifierTypeTranslationEntries = { } }, "PokemonPpUpModifierType": { - description: "포켓몬이 기억하고 있는 기술 중 1개의 PP 최대치를 5마다 {{upPoints}}씩 상승시킨다 (최대 3).", + description: "포켓몬이 기억하고 있는 기술 중 1개의 PP 최대치를 5마다 {{upPoints}}씩 상승시킨다. (최대 3)", }, "PokemonNatureChangeModifierType": { name: "{{natureName}}민트", @@ -73,7 +73,7 @@ export const modifierType: ModifierTypeTranslationEntries = { description: "기절해 버린 포켓몬 전원의 HP를 완전히 회복한다.", }, "MoneyRewardModifierType": { - description: "{{moneyMultiplier}} 양의 돈을 획득한다 (₽{{moneyAmount}}).", + description: "{{moneyMultiplier}} 양의 돈을 획득한다. (₽{{moneyAmount}})", extra: { "small": "적은", "moderate": "적당한", @@ -90,7 +90,7 @@ export const modifierType: ModifierTypeTranslationEntries = { description: "배틀 승리로 얻는 친밀도가 50% 증가한다.", }, "PokemonMoveAccuracyBoosterModifierType": { - description: "기술의 명중률이 {{accuracyAmount}} 증가한다 (최대 100).", + description: "기술의 명중률이 {{accuracyAmount}} 증가한다. (최대 100)", }, "PokemonMultiHitModifierType": { description: "지닌 개수(최대 3개)마다 추가 공격을 하는 대신, 공격력이 60%(1개)/75%(2개)/82.5%(3개)만큼 감소합니다.", @@ -101,7 +101,7 @@ export const modifierType: ModifierTypeTranslationEntries = { }, "TmModifierTypeWithInfo": { name: "No.{{moveId}} {{moveName}}", - description: "포켓몬에게 {{moveName}}를(을) 가르침\n(C 또는 Shift를 꾹 눌러 정보 확인).", + description: "포켓몬에게 {{moveName}}를(을) 가르침.\n(C 또는 Shift를 꾹 눌러 정보 확인)", }, "EvolutionItemModifierType": { description: "어느 특정 포켓몬을 진화시킨다.", @@ -110,7 +110,7 @@ export const modifierType: ModifierTypeTranslationEntries = { description: "어느 특정 포켓몬을 폼 체인지시킨다.", }, "FusePokemonModifierType": { - description: "두 포켓몬을 결합시킨다 (특성 변환, 종족값과 타입 분배, 기술폭 공유).", + description: "두 포켓몬을 결합시킨다. (특성 변환, 종족값과 타입 분배, 기술폭 공유)", }, "TerastallizeModifierType": { name: "테라피스 {{teraType}}", @@ -184,7 +184,7 @@ export const modifierType: ModifierTypeTranslationEntries = { "EVIOLITE": { name: "진화의휘석", description: "진화의 이상한 덩어리. 지니게 하면 진화 전 포켓몬의 방어와 특수방어가 올라간다." }, - "SOUL_DEW": { name: "마음의물방울", description: "지닌 포켓몬의 성격의 효과가 10% 증가한다 (합연산)." }, + "SOUL_DEW": { name: "마음의물방울", description: "지닌 포켓몬의 성격의 효과가 10% 증가한다. (합연산)" }, "NUGGET": { name: "금구슬" }, "BIG_NUGGET": { name: "큰금구슬" }, @@ -201,14 +201,14 @@ export const modifierType: ModifierTypeTranslationEntries = { "MULTI_LENS": { name: "멀티렌즈" }, - "HEALING_CHARM": { name: "치유의부적", description: "HP를 회복하는 기술이나 도구를 썼을 때 효율이 10% 증가한다 (부활 제외)." }, + "HEALING_CHARM": { name: "치유의부적", description: "HP를 회복하는 기술이나 도구를 썼을 때 효율이 10% 증가한다. (부활 제외)" }, "CANDY_JAR": { name: "사탕단지", description: "이상한사탕 종류의 아이템이 올려주는 레벨이 1 증가한다." }, "BERRY_POUCH": { name: "열매주머니", description: "사용한 나무열매가 소모되지 않을 확률이 30% 추가된다." }, "FOCUS_BAND": { name: "기합의머리띠", description: "기절할 듯한 데미지를 받아도 HP를 1 남겨서 견딜 확률이 10% 추가된다." }, - "QUICK_CLAW": { name: "선제공격손톱", description: "상대보다 먼저 행동할 수 있게 될 확률이 10% 추가된다 (우선도 처리 이후)." }, + "QUICK_CLAW": { name: "선제공격손톱", description: "상대보다 먼저 행동할 수 있게 될 확률이 10% 추가된다. (우선도 처리 이후)" }, "KINGS_ROCK": { name: "왕의징표석", description: "공격해서 데미지를 줄 때 상대를 풀죽일 확률이 10% 추가된다." }, From 538cb3eb5cd5441773d8d35281339c1d77651ffa Mon Sep 17 00:00:00 2001 From: flx-sta <50131232+flx-sta@users.noreply.github.com> Date: Thu, 4 Jul 2024 11:31:43 -0700 Subject: [PATCH 09/37] [QoL][Refactor] replace `-1` with `RELEARN_MOVE` and `0` with `EVOLVE_MOVE` (#2779) * replace `-1` and with `RELEARN_MOVE` and `0` with `EVOLVE_MOVE` * add documentation for RELEARN_MOVE & EVOLVE_MOVE * Update src/data/pokemon-level-moves.ts --- src/data/pokemon-level-moves.ts | 677 ++++++++++++++++---------------- 1 file changed, 341 insertions(+), 336 deletions(-) diff --git a/src/data/pokemon-level-moves.ts b/src/data/pokemon-level-moves.ts index 9f1f95e42ff..53272ed5beb 100644 --- a/src/data/pokemon-level-moves.ts +++ b/src/data/pokemon-level-moves.ts @@ -15,6 +15,11 @@ interface PokemonSpeciesFormLevelMoves { [key: integer]: PokemonFormLevelMoves } +/** Moves that can only be learned with a memory-mushroom */ +const RELEARN_MOVE = -1; +/** Moves that can only be learned with an evolve */ +const EVOLVE_MOVE = 0; + export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [Species.BULBASAUR]: [ [ 1, Moves.TACKLE ], @@ -51,7 +56,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 50, Moves.SOLAR_BEAM ], ], [Species.VENUSAUR]: [ - [ 0, Moves.PETAL_BLIZZARD ], + [ EVOLVE_MOVE, Moves.PETAL_BLIZZARD ], [ 1, Moves.GROWTH ], [ 1, Moves.PETAL_DANCE ], [ 1, Moves.VINE_WHIP ], @@ -97,7 +102,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 54, Moves.FLARE_BLITZ ], ], [Species.CHARIZARD]: [ - [ 0, Moves.AIR_SLASH ], + [ EVOLVE_MOVE, Moves.AIR_SLASH ], [ 1, Moves.SCRATCH ], [ 1, Moves.GROWL ], [ 1, Moves.EMBER ], @@ -146,7 +151,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 50, Moves.WAVE_CRASH ], ], [Species.BLASTOISE]: [ - [ 0, Moves.FLASH_CANNON ], + [ EVOLVE_MOVE, Moves.FLASH_CANNON ], [ 1, Moves.TACKLE ], [ 1, Moves.TAIL_WHIP ], [ 1, Moves.WATER_GUN ], @@ -168,11 +173,11 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 9, Moves.BUG_BITE ], ], [Species.METAPOD]: [ - [ 0, Moves.HARDEN ], + [ EVOLVE_MOVE, Moves.HARDEN ], [ 1, Moves.HARDEN ], ], [Species.BUTTERFREE]: [ - [ 0, Moves.GUST ], + [ EVOLVE_MOVE, Moves.GUST ], [ 1, Moves.TACKLE ], [ 1, Moves.STRING_SHOT ], [ 1, Moves.HARDEN ], @@ -197,11 +202,11 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 9, Moves.BUG_BITE ], ], [Species.KAKUNA]: [ - [ 0, Moves.HARDEN ], + [ EVOLVE_MOVE, Moves.HARDEN ], [ 1, Moves.HARDEN ], ], [Species.BEEDRILL]: [ - [ 0, Moves.TWINEEDLE ], + [ EVOLVE_MOVE, Moves.TWINEEDLE ], [ 1, Moves.FURY_ATTACK ], [ 11, Moves.FURY_CUTTER ], [ 14, Moves.RAGE ], @@ -285,7 +290,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 34, Moves.ENDEAVOR ], ], [Species.RATICATE]: [ - [ 0, Moves.SCARY_FACE ], + [ EVOLVE_MOVE, Moves.SCARY_FACE ], [ 1, Moves.SWORDS_DANCE ], [ 1, Moves.TACKLE ], [ 1, Moves.TAIL_WHIP ], @@ -354,7 +359,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 49, Moves.GUNK_SHOT ], ], [Species.ARBOK]: [ - [ 0, Moves.CRUNCH ], + [ EVOLVE_MOVE, Moves.CRUNCH ], [ 1, Moves.WRAP ], [ 1, Moves.POISON_STING ], [ 1, Moves.LEER ], @@ -400,7 +405,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 48, Moves.PIKA_PAPOW ], ], [Species.RAICHU]: [ - [ 0, Moves.ZIPPY_ZAP ], + [ EVOLVE_MOVE, Moves.ZIPPY_ZAP ], [ 1, Moves.TAIL_WHIP ], [ 1, Moves.GROWL ], [ 1, Moves.THUNDER_SHOCK ], @@ -494,7 +499,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 71, Moves.EARTH_POWER ], ], [Species.NIDOQUEEN]: [ - [ 0, Moves.SUPERPOWER ], + [ EVOLVE_MOVE, Moves.SUPERPOWER ], [ 1, Moves.SLUDGE_WAVE ], [ 1, Moves.SCRATCH ], [ 1, Moves.DOUBLE_KICK ], @@ -541,7 +546,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 71, Moves.EARTH_POWER ], ], [Species.NIDOKING]: [ - [ 0, Moves.MEGAHORN ], + [ EVOLVE_MOVE, Moves.MEGAHORN ], [ 1, Moves.SLUDGE_WAVE ], [ 1, Moves.DOUBLE_KICK ], [ 1, Moves.HORN_ATTACK ], @@ -749,7 +754,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 50, Moves.PETAL_DANCE ], ], [Species.VILEPLUME]: [ - [ 0, Moves.PETAL_BLIZZARD ], + [ EVOLVE_MOVE, Moves.PETAL_BLIZZARD ], [ 1, Moves.ACID ], [ 1, Moves.ABSORB ], [ 1, Moves.MEGA_DRAIN ], @@ -814,7 +819,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 47, Moves.PSYCHIC ], ], [Species.VENOMOTH]: [ - [ 0, Moves.AIR_SLASH ], + [ EVOLVE_MOVE, Moves.AIR_SLASH ], [ 1, Moves.TACKLE ], [ 1, Moves.SUPERSONIC ], [ 1, Moves.DISABLE ], @@ -847,7 +852,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 44, Moves.FISSURE ], ], [Species.DUGTRIO]: [ - [ 0, Moves.SAND_TOMB ], + [ EVOLVE_MOVE, Moves.SAND_TOMB ], [ 1, Moves.SCRATCH ], [ 1, Moves.SAND_ATTACK ], [ 1, Moves.GROWL ], @@ -881,7 +886,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 44, Moves.PLAY_ROUGH ], ], [Species.PERSIAN]: [ - [ 0, Moves.POWER_GEM ], + [ EVOLVE_MOVE, Moves.POWER_GEM ], [ 1, Moves.SCRATCH ], [ 1, Moves.GROWL ], [ 1, Moves.FAKE_OUT ], @@ -990,7 +995,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 56, Moves.FLARE_BLITZ ], ], [Species.ARCANINE]: [ - [ 0, Moves.EXTREME_SPEED ], + [ EVOLVE_MOVE, Moves.EXTREME_SPEED ], [ 1, Moves.TAKE_DOWN ], [ 1, Moves.LEER ], [ 1, Moves.BITE ], @@ -1038,7 +1043,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 66, Moves.DOUBLE_EDGE ], ], [Species.POLIWRATH]: [ - [ 0, Moves.DYNAMIC_PUNCH ], + [ EVOLVE_MOVE, Moves.DYNAMIC_PUNCH ], [ 1, Moves.BUBBLE_BEAM ], [ 1, Moves.BODY_SLAM ], [ 1, Moves.HYPNOSIS ], @@ -1058,7 +1063,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.CONFUSION ], //Custom ], [Species.KADABRA]: [ - [ 0, Moves.PSYBEAM ], //Custom + [ EVOLVE_MOVE, Moves.PSYBEAM ], //Custom [ 1, Moves.DISABLE ], [ 1, Moves.TELEPORT ], [ 1, Moves.KINESIS ], @@ -1175,7 +1180,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 58, Moves.POWER_WHIP ], ], [Species.VICTREEBEL]: [ - [ 0, Moves.LEAF_STORM ], + [ EVOLVE_MOVE, Moves.LEAF_STORM ], [ 1, Moves.VINE_WHIP ], [ 1, Moves.SLEEP_POWDER ], [ 1, Moves.SWEET_SCENT ], @@ -1285,7 +1290,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 55, Moves.FLARE_BLITZ ], ], [Species.RAPIDASH]: [ - [ 0, Moves.SMART_STRIKE ], + [ EVOLVE_MOVE, Moves.SMART_STRIKE ], [ 1, Moves.TACKLE ], [ 1, Moves.TAIL_WHIP ], [ 1, Moves.GROWL ], @@ -1360,7 +1365,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 52, Moves.ZAP_CANNON ], ], [Species.MAGNETON]: [ - [ 0, Moves.TRI_ATTACK ], + [ EVOLVE_MOVE, Moves.TRI_ATTACK ], [ 1, Moves.TACKLE ], [ 1, Moves.SUPERSONIC ], [ 1, Moves.THUNDER_SHOCK ], @@ -1411,7 +1416,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 43, Moves.THRASH ], ], [Species.DODRIO]: [ - [ 0, Moves.TRI_ATTACK ], + [ EVOLVE_MOVE, Moves.TRI_ATTACK ], [ 1, Moves.TRI_ATTACK ], [ 1, Moves.GROWL ], [ 1, Moves.PECK ], @@ -1447,7 +1452,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 53, Moves.SNOWSCAPE ], ], [Species.DEWGONG]: [ - [ 0, Moves.SHEER_COLD ], + [ EVOLVE_MOVE, Moves.SHEER_COLD ], [ 1, Moves.HEADBUTT ], [ 1, Moves.GROWL ], [ 1, Moves.ICY_WIND ], @@ -1520,7 +1525,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 48, Moves.HYDRO_PUMP ], ], [Species.CLOYSTER]: [ - [ 0, Moves.ICICLE_SPEAR ], + [ EVOLVE_MOVE, Moves.ICICLE_SPEAR ], [ 1, Moves.TACKLE ], [ 1, Moves.LEER ], [ 1, Moves.SUPERSONIC ], @@ -1557,7 +1562,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 48, Moves.DREAM_EATER ], ], [Species.HAUNTER]: [ - [ 0, Moves.SHADOW_PUNCH ], + [ EVOLVE_MOVE, Moves.SHADOW_PUNCH ], [ 1, Moves.HYPNOSIS ], [ 1, Moves.CONFUSE_RAY ], [ 1, Moves.LICK ], @@ -1739,7 +1744,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 55, Moves.SOLAR_BEAM ], ], [Species.EXEGGUTOR]: [ - [ 0, Moves.STOMP ], + [ EVOLVE_MOVE, Moves.STOMP ], [ 1, Moves.BARRAGE ], [ 1, Moves.SEED_BOMB ], [ 1, Moves.PSYSHOCK ], @@ -1794,7 +1799,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 60, Moves.DOUBLE_EDGE ], ], [Species.HITMONLEE]: [ - [ 0, Moves.BRICK_BREAK ], + [ EVOLVE_MOVE, Moves.BRICK_BREAK ], [ 1, Moves.TACKLE ], [ 1, Moves.FOCUS_ENERGY ], [ 1, Moves.FAKE_OUT ], @@ -1817,7 +1822,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 50, Moves.AXE_KICK ], ], [Species.HITMONCHAN]: [ - [ 0, Moves.DRAIN_PUNCH ], + [ EVOLVE_MOVE, Moves.DRAIN_PUNCH ], [ 1, Moves.TACKLE ], [ 1, Moves.FOCUS_ENERGY ], [ 1, Moves.FAKE_OUT ], @@ -1873,7 +1878,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 52, Moves.DESTINY_BOND ], ], [Species.WEEZING]: [ - [ 0, Moves.DOUBLE_HIT ], + [ EVOLVE_MOVE, Moves.DOUBLE_HIT ], [ 1, Moves.TACKLE ], [ 1, Moves.SMOKESCREEN ], [ 1, Moves.SMOG ], @@ -1908,7 +1913,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 60, Moves.HORN_DRILL ], ], [Species.RHYDON]: [ - [ 0, Moves.HAMMER_ARM ], + [ EVOLVE_MOVE, Moves.HAMMER_ARM ], [ 1, Moves.TACKLE ], [ 1, Moves.TAIL_WHIP ], [ 1, Moves.SMACK_DOWN ], @@ -2211,7 +2216,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 25, Moves.FLAIL ], ], [Species.GYARADOS]: [ - [ 0, Moves.BITE ], + [ EVOLVE_MOVE, Moves.BITE ], [ 1, Moves.TACKLE ], [ 1, Moves.LEER ], [ 1, Moves.SPLASH ], @@ -2271,7 +2276,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 60, Moves.VEEVEE_VOLLEY ], ], [Species.VAPOREON]: [ - [ 0, Moves.BOUNCY_BUBBLE ], + [ EVOLVE_MOVE, Moves.BOUNCY_BUBBLE ], [ 1, Moves.TACKLE ], [ 1, Moves.TAKE_DOWN ], [ 1, Moves.DOUBLE_EDGE ], @@ -2298,7 +2303,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 60, Moves.LAST_RESORT ], ], [Species.JOLTEON]: [ - [ 0, Moves.BUZZY_BUZZ ], + [ EVOLVE_MOVE, Moves.BUZZY_BUZZ ], [ 1, Moves.TACKLE ], [ 1, Moves.TAKE_DOWN ], [ 1, Moves.DOUBLE_EDGE ], @@ -2325,7 +2330,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 60, Moves.LAST_RESORT ], ], [Species.FLAREON]: [ - [ 0, Moves.SIZZLY_SLIDE ], + [ EVOLVE_MOVE, Moves.SIZZLY_SLIDE ], [ 1, Moves.TACKLE ], [ 1, Moves.TAKE_DOWN ], [ 1, Moves.DOUBLE_EDGE ], @@ -2384,7 +2389,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 60, Moves.HYDRO_PUMP ], ], [Species.OMASTAR]: [ - [ 0, Moves.CRUNCH ], + [ EVOLVE_MOVE, Moves.CRUNCH ], [ 1, Moves.BIND ], [ 1, Moves.SAND_ATTACK ], [ 1, Moves.CONSTRICT ], @@ -2419,7 +2424,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 60, Moves.STONE_EDGE ], ], [Species.KABUTOPS]: [ - [ 0, Moves.SLASH ], + [ EVOLVE_MOVE, Moves.SLASH ], [ 1, Moves.SCRATCH ], [ 1, Moves.SAND_ATTACK ], [ 1, Moves.ABSORB ], @@ -2569,7 +2574,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 74, Moves.HYPER_BEAM ], ], [Species.DRAGONITE]: [ - [ 0, Moves.HURRICANE ], + [ EVOLVE_MOVE, Moves.HURRICANE ], [ 1, Moves.FIRE_PUNCH ], [ 1, Moves.THUNDER_PUNCH ], [ 1, Moves.WING_ATTACK ], @@ -2655,7 +2660,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 54, Moves.SOLAR_BEAM ], ], [Species.MEGANIUM]: [ - [ 0, Moves.PETAL_DANCE ], + [ EVOLVE_MOVE, Moves.PETAL_DANCE ], [ 1, Moves.TACKLE ], [ 1, Moves.GROWL ], [ 1, Moves.RAZOR_LEAF ], @@ -2792,7 +2797,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 47, Moves.HYPER_VOICE ], ], [Species.FURRET]: [ - [ 0, Moves.AGILITY ], + [ EVOLVE_MOVE, Moves.AGILITY ], [ 1, Moves.SCRATCH ], [ 1, Moves.QUICK_ATTACK ], [ 1, Moves.DEFENSE_CURL ], @@ -2896,7 +2901,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 51, Moves.TOXIC_THREAD ], ], [Species.ARIADOS]: [ - [ 0, Moves.SWORDS_DANCE ], + [ EVOLVE_MOVE, Moves.SWORDS_DANCE ], [ 1, Moves.POISON_STING ], [ 1, Moves.ABSORB ], [ 1, Moves.STRING_SHOT ], @@ -2919,7 +2924,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 59, Moves.TOXIC_THREAD ], ], [Species.CROBAT]: [ - [ 0, Moves.CROSS_POISON ], + [ EVOLVE_MOVE, Moves.CROSS_POISON ], [ 1, Moves.SUPERSONIC ], [ 1, Moves.ABSORB ], [ 1, Moves.TOXIC ], @@ -2953,9 +2958,9 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 44, Moves.HYDRO_PUMP ], ], [Species.LANTURN]: [ - [ 0, Moves.STOCKPILE ], - [ 0, Moves.SPIT_UP ], - [ 0, Moves.SWALLOW ], + [ EVOLVE_MOVE, Moves.STOCKPILE ], + [ EVOLVE_MOVE, Moves.SPIT_UP ], + [ EVOLVE_MOVE, Moves.SWALLOW ], [ 1, Moves.SUPERSONIC ], [ 1, Moves.WATER_GUN ], [ 1, Moves.SPOTLIGHT ], @@ -3019,7 +3024,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 52, Moves.WISH ], ], [Species.TOGETIC]: [ - [ 0, Moves.FAIRY_WIND ], + [ EVOLVE_MOVE, Moves.FAIRY_WIND ], [ 1, Moves.POUND ], [ 1, Moves.GROWL ], [ 1, Moves.SWEET_KISS ], @@ -3051,7 +3056,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 45, Moves.FUTURE_SIGHT ], ], [Species.XATU]: [ - [ 0, Moves.AIR_SLASH ], + [ EVOLVE_MOVE, Moves.AIR_SLASH ], [ 1, Moves.LEER ], [ 1, Moves.PECK ], [ 1, Moves.TELEPORT ], @@ -3101,7 +3106,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 56, Moves.THUNDER ], ], [Species.AMPHAROS]: [ - [ 0, Moves.THUNDER_PUNCH ], + [ EVOLVE_MOVE, Moves.THUNDER_PUNCH ], [ 1, Moves.FIRE_PUNCH ], [ 1, Moves.TACKLE ], [ 1, Moves.GROWL ], @@ -3124,7 +3129,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 62, Moves.THUNDER ], ], [Species.BELLOSSOM]: [ - [ 0, Moves.PETAL_BLIZZARD ], + [ EVOLVE_MOVE, Moves.PETAL_BLIZZARD ], [ 1, Moves.ACID ], [ 1, Moves.ABSORB ], [ 1, Moves.MEGA_DRAIN ], @@ -3180,7 +3185,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 50, Moves.SUPERPOWER ], ], [Species.SUDOWOODO]: [ - [ 0, Moves.SLAM ], + [ EVOLVE_MOVE, Moves.SLAM ], [ 1, Moves.ROCK_THROW ], [ 1, Moves.FLAIL ], [ 1, Moves.FAKE_TEARS ], @@ -3200,7 +3205,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 48, Moves.HEAD_SMASH ], ], [Species.POLITOED]: [ - [ 0, Moves.BOUNCE ], + [ EVOLVE_MOVE, Moves.BOUNCE ], [ 1, Moves.RAIN_DANCE ], [ 1, Moves.HYDRO_PUMP ], [ 1, Moves.BELLY_DRUM ], @@ -3374,7 +3379,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 52, Moves.EARTHQUAKE ], ], [Species.ESPEON]: [ - [ 0, Moves.GLITZY_GLOW ], + [ EVOLVE_MOVE, Moves.GLITZY_GLOW ], [ 1, Moves.TACKLE ], [ 1, Moves.TAKE_DOWN ], [ 1, Moves.DOUBLE_EDGE ], @@ -3400,7 +3405,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 60, Moves.LAST_RESORT ], ], [Species.UMBREON]: [ - [ 0, Moves.BADDY_BAD ], + [ EVOLVE_MOVE, Moves.BADDY_BAD ], [ 1, Moves.TACKLE ], [ 1, Moves.TAKE_DOWN ], [ 1, Moves.DOUBLE_EDGE ], @@ -3484,10 +3489,10 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.HIDDEN_POWER ], ], [Species.WOBBUFFET]: [ - [ 0, Moves.COUNTER ], - [ 0, Moves.DESTINY_BOND ], - [ 0, Moves.SAFEGUARD ], - [ 0, Moves.MIRROR_COAT ], + [ EVOLVE_MOVE, Moves.COUNTER ], + [ EVOLVE_MOVE, Moves.DESTINY_BOND ], + [ EVOLVE_MOVE, Moves.SAFEGUARD ], + [ EVOLVE_MOVE, Moves.MIRROR_COAT ], [ 1, Moves.COUNTER ], [ 1, Moves.DESTINY_BOND ], [ 1, Moves.SAFEGUARD ], @@ -3532,7 +3537,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 45, Moves.DOUBLE_EDGE ], ], [Species.FORRETRESS]: [ - [ 0, Moves.HEAVY_SLAM ], + [ EVOLVE_MOVE, Moves.HEAVY_SLAM ], [ 1, Moves.TACKLE ], [ 1, Moves.SELF_DESTRUCT ], [ 1, Moves.PROTECT ], @@ -3668,7 +3673,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 56, Moves.DESTINY_BOND ], ], [Species.SCIZOR]: [ - [ 0, Moves.BULLET_PUNCH ], + [ EVOLVE_MOVE, Moves.BULLET_PUNCH ], [ 1, Moves.WING_ATTACK ], [ 1, Moves.LEER ], [ 1, Moves.AGILITY ], @@ -3791,7 +3796,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 50, Moves.EARTH_POWER ], ], [Species.MAGCARGO]: [ - [ 0, Moves.SHELL_SMASH ], + [ EVOLVE_MOVE, Moves.SHELL_SMASH ], [ 1, Moves.EMBER ], [ 1, Moves.ROCK_THROW ], [ 1, Moves.SMOG ], @@ -3824,7 +3829,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 50, Moves.BLIZZARD ], ], [Species.PILOSWINE]: [ - [ 0, Moves.ICE_FANG ], + [ EVOLVE_MOVE, Moves.ICE_FANG ], [ 1, Moves.TACKLE ], [ 1, Moves.FLAIL ], [ 1, Moves.POWDER_SNOW ], @@ -3872,7 +3877,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 44, Moves.HYPER_BEAM ], ], [Species.OCTILLERY]: [ - [ 0, Moves.OCTAZOOKA ], + [ EVOLVE_MOVE, Moves.OCTAZOOKA ], [ 1, Moves.WRAP ], [ 1, Moves.CONSTRICT ], [ 1, Moves.WATER_GUN ], @@ -4017,7 +4022,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 42, Moves.DOUBLE_EDGE ], ], [Species.DONPHAN]: [ - [ 0, Moves.FURY_ATTACK ], + [ EVOLVE_MOVE, Moves.FURY_ATTACK ], [ 1, Moves.HORN_ATTACK ], [ 1, Moves.GROWL ], [ 1, Moves.DEFENSE_CURL ], @@ -4081,7 +4086,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.HELPING_HAND ], ], [Species.HITMONTOP]: [ - [ 0, Moves.TRIPLE_KICK ], + [ EVOLVE_MOVE, Moves.TRIPLE_KICK ], [ 1, Moves.TACKLE ], [ 1, Moves.FOCUS_ENERGY ], [ 1, Moves.RAPID_SPIN ], @@ -4269,7 +4274,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 42, Moves.HYPER_BEAM ], ], [Species.PUPITAR]: [ - [ 0, Moves.IRON_DEFENSE ], + [ EVOLVE_MOVE, Moves.IRON_DEFENSE ], [ 1, Moves.TACKLE ], [ 1, Moves.LEER ], [ 1, Moves.ROCK_THROW ], @@ -4399,7 +4404,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 55, Moves.LEAF_STORM ], ], [Species.SCEPTILE]: [ - [ 0, Moves.LEAF_BLADE ], + [ EVOLVE_MOVE, Moves.LEAF_BLADE ], [ 1, Moves.POUND ], [ 1, Moves.LEER ], [ 1, Moves.LEAFAGE ], @@ -4439,7 +4444,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 39, Moves.FLARE_BLITZ ], ], [Species.COMBUSKEN]: [ - [ 0, Moves.DOUBLE_KICK ], + [ EVOLVE_MOVE, Moves.DOUBLE_KICK ], [ 1, Moves.SCRATCH ], [ 1, Moves.GROWL ], [ 1, Moves.EMBER ], @@ -4459,7 +4464,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 55, Moves.FLARE_BLITZ ], ], [Species.BLAZIKEN]: [ - [ 0, Moves.BLAZE_KICK ], + [ EVOLVE_MOVE, Moves.BLAZE_KICK ], [ 1, Moves.DOUBLE_KICK ], [ 1, Moves.SCRATCH ], [ 1, Moves.GROWL ], @@ -4498,7 +4503,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 39, Moves.HYDRO_PUMP ], ], [Species.MARSHTOMP]: [ - [ 0, Moves.MUD_SHOT ], + [ EVOLVE_MOVE, Moves.MUD_SHOT ], [ 1, Moves.TACKLE ], [ 1, Moves.GROWL ], [ 1, Moves.WATER_GUN ], @@ -4554,7 +4559,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 44, Moves.PLAY_ROUGH ], ], [Species.MIGHTYENA]: [ - [ 0, Moves.SNARL ], + [ EVOLVE_MOVE, Moves.SNARL ], [ 1, Moves.SAND_ATTACK ], [ 1, Moves.TACKLE ], [ 1, Moves.BITE ], @@ -4592,7 +4597,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 36, Moves.DOUBLE_EDGE ], ], [Species.LINOONE]: [ - [ 0, Moves.SLASH ], + [ EVOLVE_MOVE, Moves.SLASH ], [ 1, Moves.SAND_ATTACK ], [ 1, Moves.TACKLE ], [ 1, Moves.TAIL_WHIP ], @@ -4619,11 +4624,11 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 15, Moves.BUG_BITE ], ], [Species.SILCOON]: [ - [ 0, Moves.HARDEN ], + [ EVOLVE_MOVE, Moves.HARDEN ], [ 1, Moves.HARDEN ], ], [Species.BEAUTIFLY]: [ - [ 0, Moves.GUST ], + [ EVOLVE_MOVE, Moves.GUST ], [ 1, Moves.BUG_BITE ], [ 1, Moves.GUST ], [ 1, Moves.HARDEN ], @@ -4643,11 +4648,11 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 40, Moves.QUIVER_DANCE ], ], [Species.CASCOON]: [ - [ 0, Moves.HARDEN ], + [ EVOLVE_MOVE, Moves.HARDEN ], [ 1, Moves.HARDEN ], ], [Species.DUSTOX]: [ - [ 0, Moves.GUST ], + [ EVOLVE_MOVE, Moves.GUST ], [ 1, Moves.BUG_BITE ], [ 1, Moves.GUST ], [ 1, Moves.HARDEN ], @@ -4735,7 +4740,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 33, Moves.EXPLOSION ], ], [Species.NUZLEAF]: [ - [ 0, Moves.RAZOR_LEAF ], + [ EVOLVE_MOVE, Moves.RAZOR_LEAF ], [ 1, Moves.AIR_CUTTER ], [ 1, Moves.TORMENT ], [ 1, Moves.FAKE_OUT ], @@ -4756,7 +4761,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 57, Moves.LEAF_BLADE ], ], [Species.SHIFTRY]: [ - [ 0, Moves.LEAF_BLADE ], + [ EVOLVE_MOVE, Moves.LEAF_BLADE ], [ 1, Moves.AIR_CUTTER ], [ 1, Moves.HURRICANE ], [ 1, Moves.PAYBACK ], @@ -4881,7 +4886,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 53, Moves.FUTURE_SIGHT ], ], [Species.GARDEVOIR]: [ - [ 0, Moves.DAZZLING_GLEAM ], + [ EVOLVE_MOVE, Moves.DAZZLING_GLEAM ], [ 1, Moves.MISTY_TERRAIN ], [ 1, Moves.HEALING_WISH ], [ 1, Moves.CHARM ], @@ -4946,7 +4951,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 40, Moves.SPORE ], ], [Species.BRELOOM]: [ - [ 0, Moves.MACH_PUNCH ], + [ EVOLVE_MOVE, Moves.MACH_PUNCH ], [ 1, Moves.POISON_POWDER ], [ 1, Moves.GROWTH ], [ 1, Moves.TOXIC ], @@ -4992,7 +4997,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 43, Moves.REVERSAL ], ], [Species.SLAKING]: [ - [ 0, Moves.SWAGGER ], + [ EVOLVE_MOVE, Moves.SWAGGER ], [ 1, Moves.SUCKER_PUNCH ], [ 1, Moves.SCRATCH ], [ 1, Moves.YAWN ], @@ -5020,9 +5025,9 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 40, Moves.DIG ], ], [Species.NINJASK]: [ - [ 0, Moves.DOUBLE_TEAM ], - [ 0, Moves.SCREECH ], - [ 0, Moves.FURY_CUTTER ], + [ EVOLVE_MOVE, Moves.DOUBLE_TEAM ], + [ EVOLVE_MOVE, Moves.SCREECH ], + [ EVOLVE_MOVE, Moves.FURY_CUTTER ], [ 1, Moves.BATON_PASS ], [ 1, Moves.AERIAL_ACE ], [ 1, Moves.MUD_SLAP ], @@ -5075,7 +5080,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 45, Moves.HYPER_VOICE ], ], [Species.LOUDRED]: [ - [ 0, Moves.BITE ], + [ EVOLVE_MOVE, Moves.BITE ], [ 1, Moves.ASTONISH ], [ 1, Moves.POUND ], [ 1, Moves.ECHOED_VOICE ], @@ -5090,7 +5095,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 57, Moves.HYPER_VOICE ], ], [Species.EXPLOUD]: [ - [ 0, Moves.CRUNCH ], + [ EVOLVE_MOVE, Moves.CRUNCH ], [ 1, Moves.BITE ], [ 1, Moves.ICE_FANG ], [ 1, Moves.FIRE_FANG ], @@ -5461,7 +5466,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 47, Moves.INFESTATION ], ], [Species.ROSELIA]: [ - [ 0, Moves.POISON_STING ], + [ EVOLVE_MOVE, Moves.POISON_STING ], [ 1, Moves.ABSORB ], [ 1, Moves.GROWTH ], [ 1, Moves.STUN_SPORE ], @@ -5498,7 +5503,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 49, Moves.GUNK_SHOT ], ], [Species.SWALOT]: [ - [ 0, Moves.BODY_SLAM ], + [ EVOLVE_MOVE, Moves.BODY_SLAM ], [ 1, Moves.GUNK_SHOT ], [ 1, Moves.POUND ], [ 1, Moves.YAWN ], @@ -5532,7 +5537,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 44, Moves.TAKE_DOWN ], ], [Species.SHARPEDO]: [ - [ 0, Moves.SLASH ], + [ EVOLVE_MOVE, Moves.SLASH ], [ 1, Moves.NIGHT_SLASH ], [ 1, Moves.AQUA_JET ], [ 1, Moves.LEER ], @@ -5604,7 +5609,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 47, Moves.DOUBLE_EDGE ], ], [Species.CAMERUPT]: [ - [ 0, Moves.ROCK_SLIDE ], + [ EVOLVE_MOVE, Moves.ROCK_SLIDE ], [ 1, Moves.FISSURE ], [ 1, Moves.ERUPTION ], [ 1, Moves.GROWL ], @@ -5657,7 +5662,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 50, Moves.BOUNCE ], ], [Species.GRUMPIG]: [ - [ 0, Moves.TEETER_DANCE ], + [ EVOLVE_MOVE, Moves.TEETER_DANCE ], [ 1, Moves.BELCH ], [ 1, Moves.SPLASH ], [ 1, Moves.CONFUSION ], @@ -5706,7 +5711,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 48, Moves.FISSURE ], ], [Species.VIBRAVA]: [ - [ 0, Moves.DRAGON_BREATH ], + [ EVOLVE_MOVE, Moves.DRAGON_BREATH ], [ 1, Moves.DIG ], [ 1, Moves.SAND_ATTACK ], [ 1, Moves.BITE ], @@ -5731,7 +5736,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 62, Moves.BOOMBURST ], ], [Species.FLYGON]: [ - [ 0, Moves.DRAGON_CLAW ], + [ EVOLVE_MOVE, Moves.DRAGON_CLAW ], [ 1, Moves.DRAGON_BREATH ], [ 1, Moves.BULLDOZE ], [ 1, Moves.SAND_ATTACK ], @@ -5778,7 +5783,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 54, Moves.DESTINY_BOND ], ], [Species.CACTURNE]: [ - [ 0, Moves.SPIKY_SHIELD ], + [ EVOLVE_MOVE, Moves.SPIKY_SHIELD ], [ 1, Moves.DESTINY_BOND ], [ 1, Moves.POISON_STING ], [ 1, Moves.LEER ], @@ -5813,7 +5818,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 44, Moves.PERISH_SONG ], ], [Species.ALTARIA]: [ - [ 0, Moves.DRAGON_PULSE ], + [ EVOLVE_MOVE, Moves.DRAGON_PULSE ], [ 1, Moves.PLUCK ], [ 1, Moves.PECK ], [ 1, Moves.GROWL ], @@ -5831,18 +5836,18 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 56, Moves.SKY_ATTACK ], ], [Species.ZANGOOSE]: [ - [ -1, Moves.DOUBLE_KICK ], - [ -1, Moves.DISABLE ], - [ -1, Moves.COUNTER ], - [ -1, Moves.FURY_SWIPES ], - [ -1, Moves.CURSE ], - [ -1, Moves.FLAIL ], - [ -1, Moves.BELLY_DRUM ], - [ -1, Moves.FEINT ], - [ -1, Moves.NIGHT_SLASH ], - [ -1, Moves.DOUBLE_HIT ], - [ -1, Moves.QUICK_GUARD ], - [ -1, Moves.FINAL_GAMBIT ], + [ RELEARN_MOVE, Moves.DOUBLE_KICK ], + [ RELEARN_MOVE, Moves.DISABLE ], + [ RELEARN_MOVE, Moves.COUNTER ], + [ RELEARN_MOVE, Moves.FURY_SWIPES ], + [ RELEARN_MOVE, Moves.CURSE ], + [ RELEARN_MOVE, Moves.FLAIL ], + [ RELEARN_MOVE, Moves.BELLY_DRUM ], + [ RELEARN_MOVE, Moves.FEINT ], + [ RELEARN_MOVE, Moves.NIGHT_SLASH ], + [ RELEARN_MOVE, Moves.DOUBLE_HIT ], + [ RELEARN_MOVE, Moves.QUICK_GUARD ], + [ RELEARN_MOVE, Moves.FINAL_GAMBIT ], [ 1, Moves.SCRATCH ], [ 1, Moves.LEER ], [ 5, Moves.QUICK_ATTACK ], @@ -5929,7 +5934,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 48, Moves.FISSURE ], ], [Species.WHISCASH]: [ - [ 0, Moves.THRASH ], + [ EVOLVE_MOVE, Moves.THRASH ], [ 1, Moves.BELCH ], [ 1, Moves.ZEN_HEADBUTT ], [ 1, Moves.TICKLE ], @@ -5963,7 +5968,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 52, Moves.GUILLOTINE ], ], [Species.CRAWDAUNT]: [ - [ 0, Moves.SWIFT ], + [ EVOLVE_MOVE, Moves.SWIFT ], [ 1, Moves.WATER_GUN ], [ 1, Moves.HARDEN ], [ 1, Moves.LEER ], @@ -6000,7 +6005,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 42, Moves.EXPLOSION ], ], [Species.CLAYDOL]: [ - [ 0, Moves.HYPER_BEAM ], + [ EVOLVE_MOVE, Moves.HYPER_BEAM ], [ 1, Moves.TELEPORT ], [ 1, Moves.HARDEN ], [ 1, Moves.MUD_SLAP ], @@ -6093,7 +6098,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 25, Moves.FLAIL ], ], [Species.MILOTIC]: [ - [ 0, Moves.WATER_PULSE ], + [ EVOLVE_MOVE, Moves.WATER_PULSE ], [ 1, Moves.FLAIL ], [ 1, Moves.SPLASH ], [ 1, Moves.TACKLE ], @@ -6167,7 +6172,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 48, Moves.PHANTOM_FORCE ], ], [Species.BANETTE]: [ - [ 0, Moves.KNOCK_OFF ], + [ EVOLVE_MOVE, Moves.KNOCK_OFF ], [ 1, Moves.SCREECH ], [ 1, Moves.NIGHT_SHADE ], [ 1, Moves.SPITE ], @@ -6198,7 +6203,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 44, Moves.FUTURE_SIGHT ], ], [Species.DUSCLOPS]: [ - [ 0, Moves.SHADOW_PUNCH ], + [ EVOLVE_MOVE, Moves.SHADOW_PUNCH ], [ 1, Moves.FIRE_PUNCH ], [ 1, Moves.ICE_PUNCH ], [ 1, Moves.THUNDER_PUNCH ], @@ -6295,7 +6300,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 60, Moves.BLIZZARD ], ], [Species.GLALIE]: [ - [ 0, Moves.FREEZE_DRY ], + [ EVOLVE_MOVE, Moves.FREEZE_DRY ], [ 1, Moves.SHEER_COLD ], [ 1, Moves.POWDER_SNOW ], [ 1, Moves.HEADBUTT ], @@ -6332,7 +6337,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 52, Moves.SHEER_COLD ], ], [Species.SEALEO]: [ - [ 0, Moves.SWAGGER ], + [ EVOLVE_MOVE, Moves.SWAGGER ], [ 1, Moves.ROLLOUT ], [ 1, Moves.DEFENSE_CURL ], [ 1, Moves.GROWL ], @@ -6465,7 +6470,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 55, Moves.DOUBLE_EDGE ], ], [Species.SHELGON]: [ - [ 0, Moves.PROTECT ], + [ EVOLVE_MOVE, Moves.PROTECT ], [ 1, Moves.EMBER ], [ 1, Moves.LEER ], [ 1, Moves.BITE ], @@ -6481,7 +6486,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 67, Moves.DOUBLE_EDGE ], ], [Species.SALAMENCE]: [ - [ 0, Moves.FLY ], + [ EVOLVE_MOVE, Moves.FLY ], [ 1, Moves.PROTECT ], [ 1, Moves.DRAGON_TAIL ], [ 1, Moves.DUAL_WINGBEAT ], @@ -6503,8 +6508,8 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.TACKLE ], ], [Species.METANG]: [ - [ 0, Moves.CONFUSION ], - [ 0, Moves.METAL_CLAW ], + [ EVOLVE_MOVE, Moves.CONFUSION ], + [ EVOLVE_MOVE, Moves.METAL_CLAW ], [ 1, Moves.TACKLE ], [ 1, Moves.BULLET_PUNCH ], [ 1, Moves.HONE_CLAWS ], @@ -6520,7 +6525,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 74, Moves.HYPER_BEAM ], ], [Species.METAGROSS]: [ - [ 0, Moves.HAMMER_ARM ], + [ EVOLVE_MOVE, Moves.HAMMER_ARM ], [ 1, Moves.CONFUSION ], [ 1, Moves.METAL_CLAW ], [ 1, Moves.BULLET_PUNCH ], @@ -6742,7 +6747,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 52, Moves.LEAF_STORM ], ], [Species.TORTERRA]: [ - [ 0, Moves.EARTHQUAKE ], + [ EVOLVE_MOVE, Moves.EARTHQUAKE ], [ 1, Moves.TACKLE ], [ 1, Moves.ABSORB ], [ 1, Moves.RAZOR_LEAF ], @@ -6774,7 +6779,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 47, Moves.FLAMETHROWER ], ], [Species.MONFERNO]: [ - [ 0, Moves.MACH_PUNCH ], + [ EVOLVE_MOVE, Moves.MACH_PUNCH ], [ 1, Moves.SCRATCH ], [ 1, Moves.LEER ], [ 1, Moves.EMBER ], @@ -6790,7 +6795,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 56, Moves.FLARE_BLITZ ], ], [Species.INFERNAPE]: [ - [ 0, Moves.CLOSE_COMBAT ], + [ EVOLVE_MOVE, Moves.CLOSE_COMBAT ], [ 1, Moves.SCRATCH ], [ 1, Moves.LEER ], [ 1, Moves.EMBER ], @@ -6821,7 +6826,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 43, Moves.HYDRO_PUMP ], ], [Species.PRINPLUP]: [ - [ 0, Moves.METAL_CLAW ], + [ EVOLVE_MOVE, Moves.METAL_CLAW ], [ 1, Moves.TACKLE ], [ 1, Moves.GROWL ], [ 1, Moves.WATER_GUN ], @@ -6836,7 +6841,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 50, Moves.HYDRO_PUMP ], ], [Species.EMPOLEON]: [ - [ 0, Moves.AQUA_JET ], + [ EVOLVE_MOVE, Moves.AQUA_JET ], [ 1, Moves.TACKLE ], [ 1, Moves.GROWL ], [ 1, Moves.WATER_GUN ], @@ -6882,7 +6887,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 48, Moves.FINAL_GAMBIT ], ], [Species.STARAPTOR]: [ - [ 0, Moves.CLOSE_COMBAT ], + [ EVOLVE_MOVE, Moves.CLOSE_COMBAT ], [ 1, Moves.WING_ATTACK ], [ 1, Moves.TACKLE ], [ 1, Moves.GROWL ], @@ -6913,7 +6918,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 49, Moves.CURSE ], ], [Species.BIBAREL]: [ - [ 0, Moves.WATER_GUN ], + [ EVOLVE_MOVE, Moves.WATER_GUN ], [ 1, Moves.TACKLE ], [ 1, Moves.GROWL ], [ 1, Moves.AQUA_JET ], @@ -6939,7 +6944,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 16, Moves.BUG_BITE ], ], [Species.KRICKETUNE]: [ - [ 0, Moves.FURY_CUTTER ], + [ EVOLVE_MOVE, Moves.FURY_CUTTER ], [ 1, Moves.TACKLE ], [ 1, Moves.GROWL ], [ 1, Moves.BIDE ], @@ -7047,7 +7052,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 46, Moves.HEAD_SMASH ], ], [Species.RAMPARDOS]: [ - [ 0, Moves.ENDEAVOR ], + [ EVOLVE_MOVE, Moves.ENDEAVOR ], [ 1, Moves.HEADBUTT ], [ 1, Moves.LEER ], [ 1, Moves.FOCUS_ENERGY ], @@ -7076,7 +7081,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 46, Moves.HEAVY_SLAM ], ], [Species.BASTIODON]: [ - [ 0, Moves.BLOCK ], + [ EVOLVE_MOVE, Moves.BLOCK ], [ 1, Moves.TACKLE ], [ 1, Moves.PROTECT ], [ 1, Moves.TAUNT ], @@ -7098,7 +7103,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 20, Moves.STRING_SHOT ], ], [Species.WORMADAM]: [ - [ 0, Moves.QUIVER_DANCE ], + [ EVOLVE_MOVE, Moves.QUIVER_DANCE ], [ 1, Moves.TACKLE ], [ 1, Moves.PROTECT ], [ 1, Moves.SUCKER_PUNCH ], @@ -7118,7 +7123,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 50, Moves.BUG_BUZZ ], ], [Species.MOTHIM]: [ - [ 0, Moves.QUIVER_DANCE ], + [ EVOLVE_MOVE, Moves.QUIVER_DANCE ], [ 1, Moves.TACKLE ], [ 1, Moves.PROTECT ], [ 1, Moves.BUG_BITE ], @@ -7143,7 +7148,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.STRUGGLE_BUG ], ], [Species.VESPIQUEN]: [ - [ 0, Moves.SLASH ], + [ EVOLVE_MOVE, Moves.SLASH ], [ 1, Moves.GUST ], [ 1, Moves.POISON_STING ], [ 1, Moves.CONFUSE_RAY ], @@ -7231,7 +7236,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 45, Moves.SOLAR_BEAM ], ], [Species.CHERRIM]: [ - [ 0, Moves.SUNNY_DAY ], + [ EVOLVE_MOVE, Moves.SUNNY_DAY ], [ 1, Moves.TACKLE ], [ 1, Moves.GROWTH ], [ 1, Moves.MORNING_SUN ], @@ -7308,7 +7313,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 44, Moves.EXPLOSION ], ], [Species.DRIFBLIM]: [ - [ 0, Moves.PHANTOM_FORCE ], + [ EVOLVE_MOVE, Moves.PHANTOM_FORCE ], [ 1, Moves.GUST ], [ 1, Moves.MINIMIZE ], [ 1, Moves.FOCUS_ENERGY ], @@ -7346,7 +7351,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 52, Moves.HEALING_WISH ], ], [Species.LOPUNNY]: [ - [ 0, Moves.RETURN ], + [ EVOLVE_MOVE, Moves.RETURN ], [ 1, Moves.POUND ], [ 1, Moves.DEFENSE_CURL ], [ 1, Moves.SPLASH ], @@ -7409,7 +7414,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 50, Moves.PLAY_ROUGH ], ], [Species.PURUGLY]: [ - [ 0, Moves.SWAGGER ], + [ EVOLVE_MOVE, Moves.SWAGGER ], [ 1, Moves.SCRATCH ], [ 1, Moves.PLAY_ROUGH ], [ 1, Moves.SUCKER_PUNCH ], @@ -7456,7 +7461,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 42, Moves.EXPLOSION ], ], [Species.SKUNTANK]: [ - [ 0, Moves.FLAMETHROWER ], + [ EVOLVE_MOVE, Moves.FLAMETHROWER ], [ 1, Moves.SCRATCH ], [ 1, Moves.SMOKESCREEN ], [ 1, Moves.POISON_GAS ], @@ -7490,7 +7495,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 45, Moves.HEAL_BLOCK ], ], [Species.BRONZONG]: [ - [ 0, Moves.BLOCK ], + [ EVOLVE_MOVE, Moves.BLOCK ], [ 1, Moves.TACKLE ], [ 1, Moves.CONFUSION ], [ 1, Moves.CONFUSE_RAY ], @@ -7619,7 +7624,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 74, Moves.DRAGON_RUSH ], ], [Species.GARCHOMP]: [ - [ 0, Moves.CRUNCH ], + [ EVOLVE_MOVE, Moves.CRUNCH ], [ 1, Moves.SAND_ATTACK ], [ 1, Moves.TACKLE ], [ 1, Moves.DRAGON_BREATH ], @@ -7672,7 +7677,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 56, Moves.REVERSAL ], ], [Species.LUCARIO]: [ - [ 0, Moves.AURA_SPHERE ], + [ EVOLVE_MOVE, Moves.AURA_SPHERE ], [ 1, Moves.QUICK_ATTACK ], [ 1, Moves.SCREECH ], [ 1, Moves.REVERSAL ], @@ -7889,7 +7894,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 50, Moves.SHEER_COLD ], ], [Species.ABOMASNOW]: [ - [ 0, Moves.ICE_PUNCH ], + [ EVOLVE_MOVE, Moves.ICE_PUNCH ], [ 1, Moves.LEER ], [ 1, Moves.MIST ], [ 1, Moves.POWDER_SNOW ], @@ -8038,7 +8043,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 64, Moves.HYPER_BEAM ], ], [Species.TOGEKISS]: [ - [ 0, Moves.AIR_SLASH ], + [ EVOLVE_MOVE, Moves.AIR_SLASH ], [ 1, Moves.POUND ], [ 1, Moves.DOUBLE_EDGE ], [ 1, Moves.GROWL ], @@ -8078,7 +8083,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 49, Moves.U_TURN ], ], [Species.LEAFEON]: [ - [ 0, Moves.SAPPY_SEED ], + [ EVOLVE_MOVE, Moves.SAPPY_SEED ], [ 1, Moves.TACKLE ], [ 1, Moves.TAKE_DOWN ], [ 1, Moves.DOUBLE_EDGE ], @@ -8105,7 +8110,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 60, Moves.LAST_RESORT ], ], [Species.GLACEON]: [ - [ 0, Moves.FREEZY_FROST ], + [ EVOLVE_MOVE, Moves.FREEZY_FROST ], [ 1, Moves.TACKLE ], [ 1, Moves.TAKE_DOWN ], [ 1, Moves.DOUBLE_EDGE ], @@ -8149,7 +8154,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 50, Moves.SWORDS_DANCE ], ], [Species.MAMOSWINE]: [ - [ 0, Moves.DOUBLE_HIT ], + [ EVOLVE_MOVE, Moves.DOUBLE_HIT ], [ 1, Moves.TACKLE ], [ 1, Moves.FLAIL ], [ 1, Moves.POWDER_SNOW ], @@ -8188,7 +8193,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 65, Moves.HYPER_BEAM ], ], [Species.GALLADE]: [ - [ 0, Moves.SLASH ], + [ EVOLVE_MOVE, Moves.SLASH ], [ 1, Moves.LEER ], [ 1, Moves.GROWL ], [ 1, Moves.PSYBEAM ], @@ -8223,7 +8228,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 63, Moves.CLOSE_COMBAT ], ], [Species.PROBOPASS]: [ - [ 0, Moves.TRI_ATTACK ], + [ EVOLVE_MOVE, Moves.TRI_ATTACK ], [ 1, Moves.TACKLE ], [ 1, Moves.IRON_DEFENSE ], [ 1, Moves.BLOCK ], @@ -8267,7 +8272,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 54, Moves.DESTINY_BOND ], ], [Species.FROSLASS]: [ - [ 0, Moves.HEX ], + [ EVOLVE_MOVE, Moves.HEX ], [ 1, Moves.HEADBUTT ], [ 1, Moves.LEER ], [ 1, Moves.BITE ], @@ -8610,7 +8615,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 43, Moves.FLARE_BLITZ ], ], [Species.PIGNITE]: [ - [ 0, Moves.ARM_THRUST ], + [ EVOLVE_MOVE, Moves.ARM_THRUST ], [ 1, Moves.TACKLE ], [ 1, Moves.TAIL_WHIP ], [ 1, Moves.EMBER ], @@ -8681,7 +8686,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 53, Moves.HYDRO_PUMP ], ], [Species.SAMUROTT]: [ - [ 0, Moves.SLASH ], + [ EVOLVE_MOVE, Moves.SLASH ], [ 1, Moves.TACKLE ], [ 1, Moves.TAIL_WHIP ], [ 1, Moves.WATER_GUN ], @@ -8719,7 +8724,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 41, Moves.SLAM ], ], [Species.WATCHOG]: [ - [ 0, Moves.CONFUSE_RAY ], + [ EVOLVE_MOVE, Moves.CONFUSE_RAY ], [ 1, Moves.TACKLE ], [ 1, Moves.LEER ], [ 1, Moves.BITE ], @@ -9019,7 +9024,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 44, Moves.EXPLOSION ], ], [Species.BOLDORE]: [ - [ 0, Moves.POWER_GEM ], + [ EVOLVE_MOVE, Moves.POWER_GEM ], [ 1, Moves.SAND_ATTACK ], [ 1, Moves.TACKLE ], [ 1, Moves.HARDEN ], @@ -9098,7 +9103,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 48, Moves.FISSURE ], ], [Species.EXCADRILL]: [ - [ 0, Moves.HORN_DRILL ], + [ EVOLVE_MOVE, Moves.HORN_DRILL ], [ 1, Moves.SCRATCH ], [ 1, Moves.MUD_SLAP ], [ 1, Moves.RAPID_SPIN ], @@ -9218,7 +9223,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 60, Moves.HYDRO_PUMP ], ], [Species.SEISMITOAD]: [ - [ 0, Moves.DRAIN_PUNCH ], + [ EVOLVE_MOVE, Moves.DRAIN_PUNCH ], [ 1, Moves.GROWL ], [ 1, Moves.SUPERSONIC ], [ 1, Moves.ACID ], @@ -9281,7 +9286,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 43, Moves.FLAIL ], ], [Species.SWADLOON]: [ - [ 0, Moves.PROTECT ], + [ EVOLVE_MOVE, Moves.PROTECT ], [ 1, Moves.TACKLE ], [ 1, Moves.RAZOR_LEAF ], [ 1, Moves.STRING_SHOT ], @@ -9294,7 +9299,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 43, Moves.FLAIL ], ], [Species.LEAVANNY]: [ - [ 0, Moves.SLASH ], + [ EVOLVE_MOVE, Moves.SLASH ], [ 1, Moves.TACKLE ], [ 1, Moves.RAZOR_LEAF ], [ 1, Moves.STRING_SHOT ], @@ -9324,7 +9329,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 44, Moves.DOUBLE_EDGE ], ], [Species.WHIRLIPEDE]: [ - [ 0, Moves.IRON_DEFENSE ], + [ EVOLVE_MOVE, Moves.IRON_DEFENSE ], [ 1, Moves.POISON_STING ], [ 1, Moves.DEFENSE_CURL ], [ 1, Moves.PROTECT ], @@ -9419,7 +9424,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 42, Moves.LEAF_STORM ], ], [Species.LILLIGANT]: [ - [ 0, Moves.PETAL_DANCE ], + [ EVOLVE_MOVE, Moves.PETAL_DANCE ], [ 1, Moves.ABSORB ], [ 1, Moves.MEGA_DRAIN ], [ 1, Moves.LEECH_SEED ], @@ -9527,7 +9532,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 48, Moves.SUPERPOWER ], ], [Species.DARMANITAN]: [ - [ 0, Moves.HAMMER_ARM ], + [ EVOLVE_MOVE, Moves.HAMMER_ARM ], [ 1, Moves.TACKLE ], [ 1, Moves.BITE ], [ 1, Moves.EMBER ], @@ -9669,7 +9674,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 52, Moves.DESTINY_BOND ], ], [Species.COFAGRIGUS]: [ - [ 0, Moves.SHADOW_CLAW ], + [ EVOLVE_MOVE, Moves.SHADOW_CLAW ], [ 1, Moves.NIGHT_SHADE ], [ 1, Moves.HAZE ], [ 1, Moves.PROTECT ], @@ -9824,7 +9829,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 48, Moves.FOUL_PLAY ], ], [Species.ZOROARK]: [ - [ 0, Moves.NIGHT_SLASH ], + [ EVOLVE_MOVE, Moves.NIGHT_SLASH ], [ 1, Moves.SCRATCH ], [ 1, Moves.LEER ], [ 1, Moves.TORMENT ], @@ -9858,7 +9863,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 48, Moves.LAST_RESORT ], ], [Species.CINCCINO]: [ - [ 0, Moves.TAIL_SLAP ], + [ EVOLVE_MOVE, Moves.TAIL_SLAP ], [ 1, Moves.BULLET_SEED ], [ 1, Moves.SING ], [ 1, Moves.CHARM ], @@ -9965,7 +9970,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 58, Moves.WONDER_ROOM ], ], [Species.REUNICLUS]: [ - [ 0, Moves.HAMMER_ARM ], + [ EVOLVE_MOVE, Moves.HAMMER_ARM ], [ 1, Moves.CONFUSION ], [ 1, Moves.RECOVER ], [ 1, Moves.PROTECT ], @@ -10086,7 +10091,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 42, Moves.SOLAR_BEAM ], ], [Species.SAWSBUCK]: [ - [ 0, Moves.HORN_LEECH ], + [ EVOLVE_MOVE, Moves.HORN_LEECH ], [ 1, Moves.SAND_ATTACK ], [ 1, Moves.TACKLE ], [ 1, Moves.GROWL ], @@ -10262,7 +10267,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 48, Moves.BUG_BUZZ ], ], [Species.GALVANTULA]: [ - [ 0, Moves.STICKY_WEB ], + [ EVOLVE_MOVE, Moves.STICKY_WEB ], [ 1, Moves.ABSORB ], [ 1, Moves.FURY_CUTTER ], [ 1, Moves.BUG_BITE ], @@ -10294,7 +10299,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 50, Moves.EXPLOSION ], ], [Species.FERROTHORN]: [ - [ 0, Moves.POWER_WHIP ], + [ EVOLVE_MOVE, Moves.POWER_WHIP ], [ 1, Moves.TACKLE ], [ 1, Moves.PIN_MISSILE ], [ 1, Moves.HARDEN ], @@ -10367,7 +10372,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.CHARGE_BEAM ], ], [Species.EELEKTRIK]: [ - [ 0, Moves.CRUNCH ], + [ EVOLVE_MOVE, Moves.CRUNCH ], [ 1, Moves.HEADBUTT ], [ 1, Moves.THUNDER_WAVE ], [ 1, Moves.SPARK ], @@ -10565,7 +10570,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 42, Moves.SHEER_COLD ], ], [Species.BEARTIC]: [ - [ 0, Moves.ICICLE_CRASH ], + [ EVOLVE_MOVE, Moves.ICICLE_CRASH ], [ 1, Moves.GROWL ], [ 1, Moves.FURY_SWIPES ], [ 1, Moves.POWDER_SNOW ], @@ -10820,7 +10825,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 72, Moves.BRAVE_BIRD ], ], [Species.BRAVIARY]: [ - [ 0, Moves.SUPERPOWER ], + [ EVOLVE_MOVE, Moves.SUPERPOWER ], [ 1, Moves.WING_ATTACK ], [ 1, Moves.LEER ], [ 1, Moves.PECK ], @@ -10853,7 +10858,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 72, Moves.BRAVE_BIRD ], ], [Species.MANDIBUZZ]: [ - [ 0, Moves.BONE_RUSH ], + [ EVOLVE_MOVE, Moves.BONE_RUSH ], [ 1, Moves.GUST ], [ 1, Moves.LEER ], [ 1, Moves.TOXIC ], @@ -10984,7 +10989,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 66, Moves.FLARE_BLITZ ], ], [Species.VOLCARONA]: [ - [ 0, Moves.QUIVER_DANCE ], + [ EVOLVE_MOVE, Moves.QUIVER_DANCE ], [ 1, Moves.GUST ], [ 1, Moves.WHIRLWIND ], [ 1, Moves.TAKE_DOWN ], @@ -11231,7 +11236,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 48, Moves.WOOD_HAMMER ], ], [Species.QUILLADIN]: [ - [ 0, Moves.NEEDLE_ARM ], + [ EVOLVE_MOVE, Moves.NEEDLE_ARM ], [ 1, Moves.TACKLE ], [ 1, Moves.GROWL ], [ 1, Moves.VINE_WHIP ], @@ -11248,7 +11253,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 53, Moves.WOOD_HAMMER ], ], [Species.CHESNAUGHT]: [ - [ 0, Moves.SPIKY_SHIELD ], + [ EVOLVE_MOVE, Moves.SPIKY_SHIELD ], [ 1, Moves.VINE_WHIP ], [ 1, Moves.TACKLE ], [ 1, Moves.GROWL ], @@ -11302,7 +11307,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 59, Moves.FIRE_BLAST ], ], [Species.DELPHOX]: [ - [ 0, Moves.MYSTICAL_FIRE ], + [ EVOLVE_MOVE, Moves.MYSTICAL_FIRE ], [ 1, Moves.SCRATCH ], [ 1, Moves.TAIL_WHIP ], [ 1, Moves.EMBER ], @@ -11356,7 +11361,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 56, Moves.HYDRO_PUMP ], ], [Species.GRENINJA]: [ - [ 0, Moves.WATER_SHURIKEN ], + [ EVOLVE_MOVE, Moves.WATER_SHURIKEN ], [ 1, Moves.POUND ], [ 1, Moves.GROWL ], [ 1, Moves.WATER_GUN ], @@ -11427,7 +11432,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 50, Moves.FLY ], ], [Species.FLETCHINDER]: [ - [ 0, Moves.FLAME_CHARGE ], + [ EVOLVE_MOVE, Moves.FLAME_CHARGE ], [ 1, Moves.GROWL ], [ 1, Moves.EMBER ], [ 1, Moves.PECK ], @@ -11467,11 +11472,11 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 15, Moves.BUG_BITE ], ], [Species.SPEWPA]: [ - [ 0, Moves.PROTECT ], + [ EVOLVE_MOVE, Moves.PROTECT ], [ 1, Moves.HARDEN ], ], [Species.VIVILLON]: [ - [ 0, Moves.GUST ], + [ EVOLVE_MOVE, Moves.GUST ], [ 1, Moves.POISON_POWDER ], [ 1, Moves.STUN_SPORE ], [ 1, Moves.SLEEP_POWDER ], @@ -11586,7 +11591,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 45, Moves.LEAF_BLADE ], ], [Species.GOGOAT]: [ - [ 0, Moves.AERIAL_ACE ], + [ EVOLVE_MOVE, Moves.AERIAL_ACE ], [ 1, Moves.VINE_WHIP ], [ 1, Moves.TACKLE ], [ 1, Moves.TAIL_WHIP ], @@ -11621,7 +11626,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 44, Moves.ENTRAINMENT ], ], [Species.PANGORO]: [ - [ 0, Moves.NIGHT_SLASH ], + [ EVOLVE_MOVE, Moves.NIGHT_SLASH ], [ 1, Moves.TACKLE ], [ 1, Moves.LEER ], [ 1, Moves.TAUNT ], @@ -11719,7 +11724,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 56, Moves.SACRED_SWORD ], ], [Species.AEGISLASH]: [ - [ 0, Moves.KINGS_SHIELD ], + [ EVOLVE_MOVE, Moves.KINGS_SHIELD ], [ 1, Moves.SWORDS_DANCE ], [ 1, Moves.PURSUIT ], [ 1, Moves.TACKLE ], @@ -12044,7 +12049,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 66, Moves.HYPER_BEAM ], ], [Species.SYLVEON]: [ - [ 0, Moves.SPARKLY_SWIRL ], + [ EVOLVE_MOVE, Moves.SPARKLY_SWIRL ], [ 1, Moves.TACKLE ], [ 1, Moves.TAKE_DOWN ], [ 1, Moves.DOUBLE_EDGE ], @@ -12135,7 +12140,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 50, Moves.MUDDY_WATER ], ], [Species.SLIGGOO]: [ - [ 0, Moves.ACID_SPRAY ], + [ EVOLVE_MOVE, Moves.ACID_SPRAY ], [ 1, Moves.TACKLE ], [ 1, Moves.WATER_GUN ], [ 1, Moves.ABSORB ], @@ -12151,7 +12156,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 56, Moves.MUDDY_WATER ], ], [Species.GOODRA]: [ - [ 0, Moves.AQUA_TAIL ], + [ EVOLVE_MOVE, Moves.AQUA_TAIL ], [ 1, Moves.TACKLE ], [ 1, Moves.WATER_GUN ], [ 1, Moves.ABSORB ], @@ -12204,7 +12209,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 52, Moves.FORESTS_CURSE ], ], [Species.TREVENANT]: [ - [ 0, Moves.SHADOW_CLAW ], + [ EVOLVE_MOVE, Moves.SHADOW_CLAW ], [ 1, Moves.TACKLE ], [ 1, Moves.LEECH_SEED ], [ 1, Moves.ASTONISH ], @@ -12274,7 +12279,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 42, Moves.DOUBLE_EDGE ], ], [Species.AVALUGG]: [ - [ 0, Moves.BODY_SLAM ], + [ EVOLVE_MOVE, Moves.BODY_SLAM ], [ 1, Moves.TACKLE ], [ 1, Moves.HARDEN ], [ 1, Moves.POWDER_SNOW ], @@ -12312,7 +12317,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 52, Moves.HURRICANE ], ], [Species.NOIVERN]: [ - [ 0, Moves.DRAGON_PULSE ], + [ EVOLVE_MOVE, Moves.DRAGON_PULSE ], [ 1, Moves.GUST ], [ 1, Moves.TACKLE ], [ 1, Moves.SUPERSONIC ], @@ -12484,7 +12489,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 50, Moves.BRAVE_BIRD ], ], [Species.DECIDUEYE]: [ - [ 0, Moves.SPIRIT_SHACKLE ], + [ EVOLVE_MOVE, Moves.SPIRIT_SHACKLE ], [ 1, Moves.TACKLE ], [ 1, Moves.GROWL ], [ 1, Moves.SPITE ], @@ -12537,7 +12542,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 50, Moves.FLARE_BLITZ ], ], [Species.INCINEROAR]: [ - [ 0, Moves.DARKEST_LARIAT ], + [ EVOLVE_MOVE, Moves.DARKEST_LARIAT ], [ 1, Moves.SCRATCH ], [ 1, Moves.GROWL ], [ 1, Moves.EMBER ], @@ -12589,7 +12594,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 50, Moves.HYDRO_PUMP ], ], [Species.PRIMARINA]: [ - [ 0, Moves.SPARKLING_ARIA ], + [ EVOLVE_MOVE, Moves.SPARKLING_ARIA ], [ 1, Moves.POUND ], [ 1, Moves.GROWL ], [ 1, Moves.WATER_GUN ], @@ -12637,7 +12642,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 45, Moves.HYPER_VOICE ], ], [Species.TOUCANNON]: [ - [ 0, Moves.BEAK_BLAST ], + [ EVOLVE_MOVE, Moves.BEAK_BLAST ], [ 1, Moves.GROWL ], [ 1, Moves.PECK ], [ 1, Moves.ROCK_SMASH ], @@ -12699,7 +12704,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 40, Moves.DIG ], ], [Species.CHARJABUG]: [ - [ 0, Moves.CHARGE ], + [ EVOLVE_MOVE, Moves.CHARGE ], [ 1, Moves.VISE_GRIP ], [ 1, Moves.STRING_SHOT ], [ 1, Moves.MUD_SLAP ], @@ -12714,7 +12719,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 64, Moves.DISCHARGE ], ], [Species.VIKAVOLT]: [ - [ 0, Moves.THUNDERBOLT ], + [ EVOLVE_MOVE, Moves.THUNDERBOLT ], [ 1, Moves.CHARGE ], [ 1, Moves.CRUNCH ], [ 1, Moves.DISCHARGE ], @@ -12751,7 +12756,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 49, Moves.CLOSE_COMBAT ], ], [Species.CRABOMINABLE]: [ - [ 0, Moves.ICE_PUNCH ], + [ EVOLVE_MOVE, Moves.ICE_PUNCH ], [ 1, Moves.LEER ], [ 1, Moves.PROTECT ], [ 1, Moves.ROCK_SMASH ], @@ -12798,7 +12803,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 54, Moves.QUIVER_DANCE ], ], [Species.RIBOMBEE]: [ - [ 0, Moves.POLLEN_PUFF ], + [ EVOLVE_MOVE, Moves.POLLEN_PUFF ], [ 1, Moves.ABSORB ], [ 1, Moves.STUN_SPORE ], [ 1, Moves.SWEET_SCENT ], @@ -12828,7 +12833,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 48, Moves.STONE_EDGE ], ], [Species.LYCANROC]: [ - [ 0, Moves.SUCKER_PUNCH ], + [ EVOLVE_MOVE, Moves.SUCKER_PUNCH ], [ 1, Moves.SAND_ATTACK ], [ 1, Moves.TACKLE ], [ 1, Moves.LEER ], @@ -12878,7 +12883,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 50, Moves.TOXIC ], ], [Species.TOXAPEX]: [ - [ 0, Moves.BANEFUL_BUNKER ], + [ EVOLVE_MOVE, Moves.BANEFUL_BUNKER ], [ 1, Moves.POISON_STING ], [ 1, Moves.BITE ], [ 1, Moves.PECK ], @@ -12972,7 +12977,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 50, Moves.SOLAR_BEAM ], ], [Species.LURANTIS]: [ - [ 0, Moves.PETAL_BLIZZARD ], + [ EVOLVE_MOVE, Moves.PETAL_BLIZZARD ], [ 1, Moves.GROWTH ], [ 1, Moves.SOLAR_BEAM ], [ 1, Moves.FURY_CUTTER ], @@ -13036,7 +13041,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 55, Moves.ENDEAVOR ], ], [Species.SALAZZLE]: [ - [ 0, Moves.FIRE_LASH ], + [ EVOLVE_MOVE, Moves.FIRE_LASH ], [ 1, Moves.POUND ], [ 1, Moves.SCRATCH ], [ 1, Moves.DISABLE ], @@ -13075,7 +13080,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 48, Moves.SUPERPOWER ], ], [Species.BEWEAR]: [ - [ 0, Moves.BIND ], + [ EVOLVE_MOVE, Moves.BIND ], [ 1, Moves.TACKLE ], [ 1, Moves.LEER ], [ 1, Moves.PAYBACK ], @@ -13117,7 +13122,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 46, Moves.LEAF_STORM ], ], [Species.TSAREENA]: [ - [ 0, Moves.TROP_KICK ], + [ EVOLVE_MOVE, Moves.TROP_KICK ], [ 1, Moves.RAZOR_LEAF ], [ 1, Moves.SPLASH ], [ 1, Moves.FLAIL ], @@ -13192,7 +13197,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.STRUGGLE_BUG ], ], [Species.GOLISOPOD]: [ - [ 0, Moves.FIRST_IMPRESSION ], + [ EVOLVE_MOVE, Moves.FIRST_IMPRESSION ], [ 1, Moves.SAND_ATTACK ], [ 1, Moves.DEFENSE_CURL ], [ 1, Moves.SPITE ], @@ -13278,7 +13283,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 60, Moves.HEAL_BLOCK ], ], [Species.SILVALLY]: [ - [ 0, Moves.MULTI_ATTACK ], + [ EVOLVE_MOVE, Moves.MULTI_ATTACK ], [ 1, Moves.TACKLE ], [ 1, Moves.BITE ], [ 1, Moves.EXPLOSION ], @@ -13449,7 +13454,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 44, Moves.OUTRAGE ], ], [Species.HAKAMO_O]: [ - [ 0, Moves.SKY_UPPERCUT ], + [ EVOLVE_MOVE, Moves.SKY_UPPERCUT ], [ 1, Moves.TACKLE ], [ 1, Moves.LEER ], [ 1, Moves.PROTECT ], @@ -13467,7 +13472,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 56, Moves.CLOSE_COMBAT ], ], [Species.KOMMO_O]: [ - [ 0, Moves.CLANGING_SCALES ], + [ EVOLVE_MOVE, Moves.CLANGING_SCALES ], [ 1, Moves.TACKLE ], [ 1, Moves.LEER ], [ 1, Moves.PROTECT ], @@ -13570,11 +13575,11 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.STORED_POWER ], //Custom ], [Species.COSMOEM]: [ - [ 0, Moves.COSMIC_POWER ], + [ EVOLVE_MOVE, Moves.COSMIC_POWER ], [ 1, Moves.TELEPORT ], ], [Species.SOLGALEO]: [ - [ 0, Moves.SUNSTEEL_STRIKE ], + [ EVOLVE_MOVE, Moves.SUNSTEEL_STRIKE ], [ 1, Moves.TELEPORT ], [ 1, Moves.METAL_CLAW ], [ 1, Moves.COSMIC_POWER ], @@ -13594,7 +13599,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 84, Moves.GIGA_IMPACT ], ], [Species.LUNALA]: [ - [ 0, Moves.MOONGEIST_BEAM ], + [ EVOLVE_MOVE, Moves.MOONGEIST_BEAM ], [ 1, Moves.CONFUSION ], [ 1, Moves.HYPNOSIS ], [ 1, Moves.TELEPORT ], @@ -13819,7 +13824,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 63, Moves.TOXIC ], ], [Species.NAGANADEL]: [ - [ 0, Moves.AIR_CUTTER ], + [ EVOLVE_MOVE, Moves.AIR_CUTTER ], [ 1, Moves.GROWL ], [ 1, Moves.ACID ], [ 1, Moves.PECK ], @@ -13903,7 +13908,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 40, Moves.FLASH_CANNON ], ], [Species.MELMETAL]: [ - [ 0, Moves.THUNDER_PUNCH ], + [ EVOLVE_MOVE, Moves.THUNDER_PUNCH ], [ 1, Moves.HEADBUTT ], [ 1, Moves.TAIL_WHIP ], [ 1, Moves.THUNDER_SHOCK ], @@ -13933,7 +13938,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 36, Moves.ENDEAVOR ], ], [Species.THWACKEY]: [ - [ 0, Moves.DOUBLE_HIT ], + [ EVOLVE_MOVE, Moves.DOUBLE_HIT ], [ 1, Moves.SCRATCH ], [ 1, Moves.GROWL ], [ 1, Moves.TAUNT ], @@ -13947,7 +13952,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 48, Moves.ENDEAVOR ], ], [Species.RILLABOOM]: [ - [ 0, Moves.DRUM_BEATING ], + [ EVOLVE_MOVE, Moves.DRUM_BEATING ], [ 1, Moves.SCRATCH ], [ 1, Moves.GROWL ], [ 1, Moves.TAUNT ], @@ -13991,7 +13996,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 48, Moves.DOUBLE_EDGE ], ], [Species.CINDERACE]: [ - [ 0, Moves.PYRO_BALL ], + [ EVOLVE_MOVE, Moves.PYRO_BALL ], [ 1, Moves.TACKLE ], [ 1, Moves.GROWL ], [ 1, Moves.EMBER ], @@ -14033,7 +14038,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 48, Moves.RAIN_DANCE ], ], [Species.INTELEON]: [ - [ 0, Moves.SNIPE_SHOT ], + [ EVOLVE_MOVE, Moves.SNIPE_SHOT ], [ 1, Moves.POUND ], [ 1, Moves.BIND ], [ 1, Moves.GROWL ], @@ -14064,7 +14069,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 45, Moves.BELCH ], ], [Species.GREEDENT]: [ - [ 0, Moves.COVET ], + [ EVOLVE_MOVE, Moves.COVET ], [ 1, Moves.TACKLE ], [ 1, Moves.TAIL_WHIP ], [ 1, Moves.BITE ], @@ -14106,7 +14111,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 46, Moves.BRAVE_BIRD ], ], [Species.CORVIKNIGHT]: [ - [ 0, Moves.STEEL_WING ], + [ EVOLVE_MOVE, Moves.STEEL_WING ], [ 1, Moves.LEER ], [ 1, Moves.PECK ], [ 1, Moves.SCREECH ], @@ -14126,9 +14131,9 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.STRUGGLE_BUG ], ], [Species.DOTTLER]: [ - [ 0, Moves.CONFUSION ], - [ 0, Moves.LIGHT_SCREEN ], - [ 0, Moves.REFLECT ], + [ EVOLVE_MOVE, Moves.CONFUSION ], + [ EVOLVE_MOVE, Moves.LIGHT_SCREEN ], + [ EVOLVE_MOVE, Moves.REFLECT ], [ 1, Moves.CONFUSION ], [ 1, Moves.LIGHT_SCREEN ], [ 1, Moves.REFLECT ], @@ -14166,7 +14171,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 36, Moves.FOUL_PLAY ], ], [Species.THIEVUL]: [ - [ 0, Moves.THIEF ], + [ EVOLVE_MOVE, Moves.THIEF ], [ 1, Moves.TAIL_WHIP ], [ 1, Moves.QUICK_ATTACK ], [ 1, Moves.BEAT_UP ], @@ -14194,7 +14199,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 36, Moves.LEAF_STORM ], ], [Species.ELDEGOSS]: [ - [ 0, Moves.COTTON_SPORE ], + [ EVOLVE_MOVE, Moves.COTTON_SPORE ], [ 1, Moves.SING ], [ 1, Moves.RAPID_SPIN ], [ 1, Moves.SWEET_SCENT ], @@ -14249,7 +14254,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 49, Moves.BODY_SLAM ], ], [Species.DREDNAW]: [ - [ 0, Moves.ROCK_TOMB ], + [ EVOLVE_MOVE, Moves.ROCK_TOMB ], [ 1, Moves.TACKLE ], [ 1, Moves.BITE ], [ 1, Moves.WATER_GUN ], @@ -14305,7 +14310,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 40, Moves.ROCK_BLAST ], ], [Species.CARKOL]: [ - [ 0, Moves.FLAME_CHARGE ], + [ EVOLVE_MOVE, Moves.FLAME_CHARGE ], [ 1, Moves.TACKLE ], [ 1, Moves.SMOKESCREEN ], [ 1, Moves.RAPID_SPIN ], @@ -14319,7 +14324,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 55, Moves.STONE_EDGE ], ], [Species.COALOSSAL]: [ - [ 0, Moves.TAR_SHOT ], + [ EVOLVE_MOVE, Moves.TAR_SHOT ], [ 1, Moves.TACKLE ], [ 1, Moves.SMOKESCREEN ], [ 1, Moves.RAPID_SPIN ], @@ -14339,7 +14344,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.LEAFAGE ], //Custom ], [Species.FLAPPLE]: [ - [ 0, Moves.WING_ATTACK ], + [ EVOLVE_MOVE, Moves.WING_ATTACK ], [ 1, Moves.GROWTH ], [ 1, Moves.WITHDRAW ], [ 1, Moves.TWISTER ], @@ -14358,7 +14363,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 44, Moves.DRAGON_RUSH ], ], [Species.APPLETUN]: [ - [ 0, Moves.HEADBUTT ], + [ EVOLVE_MOVE, Moves.HEADBUTT ], [ 1, Moves.GROWTH ], [ 1, Moves.WITHDRAW ], [ 1, Moves.SWEET_SCENT ], @@ -14453,7 +14458,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.TEARFUL_LOOK ], ], [Species.TOXTRICITY]: [ - [ 0, Moves.SPARK ], + [ EVOLVE_MOVE, Moves.SPARK ], [ 1, Moves.LEER ], [ 1, Moves.GROWL ], [ 1, Moves.ACID ], @@ -14522,7 +14527,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 45, Moves.SUPERPOWER ], ], [Species.GRAPPLOCT]: [ - [ 0, Moves.OCTOLOCK ], + [ EVOLVE_MOVE, Moves.OCTOLOCK ], [ 1, Moves.BIND ], [ 1, Moves.LEER ], [ 1, Moves.OCTAZOOKA ], @@ -14552,7 +14557,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 60, Moves.SHELL_SMASH ], ], [Species.POLTEAGEIST]: [ - [ 0, Moves.TEATIME ], + [ EVOLVE_MOVE, Moves.TEATIME ], [ 1, Moves.MEGA_DRAIN ], [ 1, Moves.WITHDRAW ], [ 1, Moves.ASTONISH ], @@ -14582,7 +14587,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 45, Moves.HEALING_WISH ], ], [Species.HATTREM]: [ - [ 0, Moves.BRUTAL_SWING ], + [ EVOLVE_MOVE, Moves.BRUTAL_SWING ], [ 1, Moves.CONFUSION ], [ 1, Moves.DISARMING_VOICE ], [ 1, Moves.PLAY_NICE ], @@ -14596,7 +14601,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 51, Moves.HEALING_WISH ], ], [Species.HATTERENE]: [ - [ 0, Moves.PSYCHO_CUT ], + [ EVOLVE_MOVE, Moves.PSYCHO_CUT ], [ 1, Moves.CONFUSION ], [ 1, Moves.DISARMING_VOICE ], [ 1, Moves.PLAY_NICE ], @@ -14627,7 +14632,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 44, Moves.FOUL_PLAY ], ], [Species.MORGREM]: [ - [ 0, Moves.FALSE_SURRENDER ], + [ EVOLVE_MOVE, Moves.FALSE_SURRENDER ], [ 1, Moves.BITE ], [ 1, Moves.FAKE_OUT ], [ 1, Moves.FLATTER ], @@ -14643,7 +14648,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 52, Moves.FOUL_PLAY ], ], [Species.GRIMMSNARL]: [ - [ 0, Moves.SPIRIT_BREAK ], + [ EVOLVE_MOVE, Moves.SPIRIT_BREAK ], [ 1, Moves.BITE ], [ 1, Moves.FAKE_OUT ], [ 1, Moves.FLATTER ], @@ -14662,7 +14667,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 64, Moves.HAMMER_ARM ], ], [Species.OBSTAGOON]: [ - [ 0, Moves.OBSTRUCT ], + [ EVOLVE_MOVE, Moves.OBSTRUCT ], [ 1, Moves.SAND_ATTACK ], [ 1, Moves.TACKLE ], [ 1, Moves.PIN_MISSILE ], @@ -14685,7 +14690,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 56, Moves.DOUBLE_EDGE ], ], [Species.PERRSERKER]: [ - [ 0, Moves.IRON_HEAD ], + [ EVOLVE_MOVE, Moves.IRON_HEAD ], [ 1, Moves.SCRATCH ], [ 1, Moves.GROWL ], [ 1, Moves.FAKE_OUT ], @@ -14719,7 +14724,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 55, Moves.MIRROR_COAT ], ], [Species.SIRFETCHD]: [ - [ 0, Moves.IRON_DEFENSE ], + [ EVOLVE_MOVE, Moves.IRON_DEFENSE ], [ 1, Moves.SAND_ATTACK ], [ 1, Moves.LEER ], [ 1, Moves.PECK ], @@ -14771,7 +14776,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 52, Moves.TEETER_DANCE ], ], [Species.RUNERIGUS]: [ - [ 0, Moves.SHADOW_CLAW ], + [ EVOLVE_MOVE, Moves.SHADOW_CLAW ], [ 1, Moves.NIGHT_SHADE ], [ 1, Moves.HAZE ], [ 1, Moves.PROTECT ], @@ -14805,7 +14810,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 50, Moves.ENTRAINMENT ], ], [Species.ALCREMIE]: [ - [ 0, Moves.DECORATE ], + [ EVOLVE_MOVE, Moves.DECORATE ], [ 1, Moves.TACKLE ], [ 1, Moves.SWEET_KISS ], [ 1, Moves.SWEET_SCENT ], @@ -14856,7 +14861,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.STRUGGLE_BUG ], ], [Species.FROSMOTH]: [ - [ 0, Moves.ICY_WIND ], + [ EVOLVE_MOVE, Moves.ICY_WIND ], [ 1, Moves.POWDER_SNOW ], [ 1, Moves.ATTRACT ], [ 1, Moves.HELPING_HAND ], @@ -14951,7 +14956,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 55, Moves.SUPERPOWER ], ], [Species.COPPERAJAH]: [ - [ 0, Moves.HEAVY_SLAM ], + [ EVOLVE_MOVE, Moves.HEAVY_SLAM ], [ 1, Moves.TACKLE ], [ 1, Moves.GROWL ], [ 1, Moves.ROLLOUT ], @@ -15048,7 +15053,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.INFESTATION ], ], [Species.DRAKLOAK]: [ - [ 0, Moves.DRAGON_PULSE ], + [ EVOLVE_MOVE, Moves.DRAGON_PULSE ], [ 1, Moves.BITE ], [ 1, Moves.QUICK_ATTACK ], [ 1, Moves.ASTONISH ], @@ -15067,7 +15072,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 72, Moves.LAST_RESORT ], ], [Species.DRAGAPULT]: [ - [ 0, Moves.DRAGON_DARTS ], + [ EVOLVE_MOVE, Moves.DRAGON_DARTS ], [ 1, Moves.BITE ], [ 1, Moves.QUICK_ATTACK ], [ 1, Moves.DRAGON_BREATH ], @@ -15152,7 +15157,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 52, Moves.FOCUS_PUNCH ], ], [Species.URSHIFU]: [ - [ 0, Moves.WICKED_BLOW ], + [ EVOLVE_MOVE, Moves.WICKED_BLOW ], [ 1, Moves.LEER ], [ 1, Moves.FOCUS_ENERGY ], [ 1, Moves.ENDURE ], @@ -15272,7 +15277,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 88, Moves.FUTURE_SIGHT ], ], [Species.WYRDEER]: [ - [ 0, Moves.PSYSHIELD_BASH ], + [ EVOLVE_MOVE, Moves.PSYSHIELD_BASH ], [ 1, Moves.TACKLE ], [ 3, Moves.LEER ], [ 7, Moves.ASTONISH ], @@ -15289,7 +15294,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 62, Moves.MEGAHORN ], ], [Species.KLEAVOR]: [ - [ 0, Moves.STONE_AXE ], + [ EVOLVE_MOVE, Moves.STONE_AXE ], [ 1, Moves.LEER ], [ 1, Moves.QUICK_ATTACK ], [ 4, Moves.FURY_CUTTER ], @@ -15305,7 +15310,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 44, Moves.SWORDS_DANCE ], ], [Species.URSALUNA]: [ - [ 0, Moves.HEADLONG_RUSH ], + [ EVOLVE_MOVE, Moves.HEADLONG_RUSH ], [ 1, Moves.SCRATCH ], [ 1, Moves.LEER ], [ 1, Moves.LICK ], @@ -15345,7 +15350,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 56, Moves.HEAD_SMASH ], ], [Species.SNEASLER]: [ - [ 0, Moves.DIRE_CLAW ], + [ EVOLVE_MOVE, Moves.DIRE_CLAW ], [ 1, Moves.SCRATCH ], [ 1, Moves.LEER ], [ 1, Moves.ROCK_SMASH ], @@ -15431,7 +15436,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 46, Moves.LEAF_STORM ], ], [Species.MEOWSCARADA]: [ - [ 0, Moves.FLOWER_TRICK ], + [ EVOLVE_MOVE, Moves.FLOWER_TRICK ], [ 1, Moves.SCRATCH ], [ 1, Moves.TAIL_WHIP ], [ 1, Moves.LEAFAGE ], @@ -15481,7 +15486,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 47, Moves.FIRE_BLAST ], ], [Species.SKELEDIRGE]: [ - [ 0, Moves.TORCH_SONG ], + [ EVOLVE_MOVE, Moves.TORCH_SONG ], [ 1, Moves.TACKLE ], [ 1, Moves.LEER ], [ 1, Moves.EMBER ], @@ -15532,7 +15537,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 48, Moves.FEATHER_DANCE ], ], [Species.QUAQUAVAL]: [ - [ 0, Moves.AQUA_STEP ], + [ EVOLVE_MOVE, Moves.AQUA_STEP ], [ 1, Moves.POUND ], [ 1, Moves.GROWL ], [ 1, Moves.WATER_GUN ], @@ -15601,7 +15606,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 44, Moves.SKITTER_SMACK ], ], [Species.SPIDOPS]: [ - [ 0, Moves.SILK_TRAP ], + [ EVOLVE_MOVE, Moves.SILK_TRAP ], [ 1, Moves.TACKLE ], [ 1, Moves.STRING_SHOT ], [ 5, Moves.STRUGGLE_BUG ], @@ -15633,7 +15638,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 41, Moves.FIRST_IMPRESSION ], ], [Species.LOKIX]: [ - [ 0, Moves.LUNGE ], + [ EVOLVE_MOVE, Moves.LUNGE ], [ 1, Moves.TACKLE ], [ 1, Moves.LEER ], [ 1, Moves.LOW_KICK ], @@ -15671,7 +15676,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 44, Moves.WILD_CHARGE ], ], [Species.PAWMO]: [ - [ 0, Moves.ARM_THRUST ], + [ EVOLVE_MOVE, Moves.ARM_THRUST ], [ 1, Moves.SCRATCH ], [ 1, Moves.GROWL ], [ 3, Moves.THUNDER_SHOCK ], @@ -15689,7 +15694,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 52, Moves.WILD_CHARGE ], ], [Species.PAWMOT]: [ - [ 0, Moves.REVIVAL_BLESSING ], + [ EVOLVE_MOVE, Moves.REVIVAL_BLESSING ], [ 1, Moves.SCRATCH ], [ 1, Moves.GROWL ], [ 1, Moves.WILD_CHARGE ], @@ -15861,7 +15866,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 45, Moves.STONE_EDGE ], ], [Species.NACLSTACK]: [ - [ 0, Moves.SALT_CURE ], + [ EVOLVE_MOVE, Moves.SALT_CURE ], [ 1, Moves.TACKLE ], [ 1, Moves.HARDEN ], [ 5, Moves.ROCK_THROW ], @@ -15878,7 +15883,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 51, Moves.STONE_EDGE ], ], [Species.GARGANACL]: [ - [ 0, Moves.HAMMER_ARM ], + [ EVOLVE_MOVE, Moves.HAMMER_ARM ], [ 1, Moves.TACKLE ], [ 1, Moves.HARDEN ], [ 1, Moves.BLOCK ], @@ -15911,7 +15916,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 32, Moves.LAVA_PLUME ], ], [Species.ARMAROUGE]: [ - [ 0, Moves.PSYSHOCK ], + [ EVOLVE_MOVE, Moves.PSYSHOCK ], [ 1, Moves.LEER ], [ 1, Moves.EMBER ], [ 1, Moves.ASTONISH ], @@ -15931,7 +15936,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 62, Moves.ARMOR_CANNON ], ], [Species.CERULEDGE]: [ - [ 0, Moves.SHADOW_CLAW ], + [ EVOLVE_MOVE, Moves.SHADOW_CLAW ], [ 1, Moves.EMBER ], [ 1, Moves.LEER ], [ 1, Moves.ASTONISH ], @@ -15998,7 +16003,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 43, Moves.DISCHARGE ], ], [Species.KILOWATTREL]: [ - [ 0, Moves.ELECTRO_BALL ], + [ EVOLVE_MOVE, Moves.ELECTRO_BALL ], [ 1, Moves.GROWL ], [ 1, Moves.PECK ], [ 4, Moves.THUNDER_SHOCK ], @@ -16031,7 +16036,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 49, Moves.DOUBLE_EDGE ], ], [Species.MABOSSTIFF]: [ - [ 0, Moves.COMEUPPANCE ], + [ EVOLVE_MOVE, Moves.COMEUPPANCE ], [ 1, Moves.TACKLE ], [ 1, Moves.LEER ], [ 1, Moves.SCARY_FACE ], @@ -16067,7 +16072,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 45, Moves.GUNK_SHOT ], ], [Species.GRAFAIAI]: [ - [ 0, Moves.DOODLE ], + [ EVOLVE_MOVE, Moves.DOODLE ], [ 1, Moves.SCRATCH ], [ 1, Moves.LEER ], [ 5, Moves.ACID_SPRAY ], @@ -16187,8 +16192,8 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 48, Moves.SOLAR_BEAM ], ], [Species.SCOVILLAIN]: [ - [ 0, Moves.FLAMETHROWER ], - [ 0, Moves.SPICY_EXTRACT ], + [ EVOLVE_MOVE, Moves.FLAMETHROWER ], + [ EVOLVE_MOVE, Moves.SPICY_EXTRACT ], [ 1, Moves.LEER ], [ 1, Moves.FIRE_FANG ], [ 1, Moves.LEAFAGE ], @@ -16218,7 +16223,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 35, Moves.LUNGE ], ], [Species.RABSCA]: [ - [ 0, Moves.REVIVAL_BLESSING ], + [ EVOLVE_MOVE, Moves.REVIVAL_BLESSING ], [ 1, Moves.TACKLE ], [ 1, Moves.CONFUSION ], [ 1, Moves.DEFENSE_CURL ], @@ -16249,7 +16254,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 34, Moves.UPROAR ], ], [Species.ESPATHRA]: [ - [ 0, Moves.LUMINA_CRASH ], + [ EVOLVE_MOVE, Moves.LUMINA_CRASH ], [ 1, Moves.GROWL ], [ 1, Moves.PECK ], [ 1, Moves.DRILL_PECK ], @@ -16303,7 +16308,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 52, Moves.KNOCK_OFF ], ], [Species.TINKATON]: [ - [ 0, Moves.GIGATON_HAMMER ], + [ EVOLVE_MOVE, Moves.GIGATON_HAMMER ], [ 1, Moves.ASTONISH ], [ 1, Moves.FAIRY_WIND ], [ 5, Moves.BABY_DOLL_EYES ], @@ -16384,7 +16389,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 50, Moves.HYDRO_PUMP ], ], [Species.PALAFIN]: [ - [ 0, Moves.FLIP_TURN ], + [ EVOLVE_MOVE, Moves.FLIP_TURN ], [ 1, Moves.SUPERSONIC ], [ 1, Moves.WATER_GUN ], [ 1, Moves.JET_PUNCH ], @@ -16420,7 +16425,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 50, Moves.GUNK_SHOT ], ], [Species.REVAVROOM]: [ - [ 0, Moves.SHIFT_GEAR ], + [ EVOLVE_MOVE, Moves.SHIFT_GEAR ], [ 1, Moves.LICK ], [ 1, Moves.POISON_GAS ], [ 1, Moves.MAGNET_RISE ], @@ -16487,7 +16492,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 46, Moves.SLUDGE_WAVE ], ], [Species.GLIMMORA]: [ - [ 0, Moves.MORTAL_SPIN ], + [ EVOLVE_MOVE, Moves.MORTAL_SPIN ], [ 1, Moves.ROCK_THROW ], [ 1, Moves.HARDEN ], [ 1, Moves.TOXIC_SPIKES ], @@ -16523,7 +16528,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 52, Moves.DOUBLE_EDGE ], ], [Species.HOUNDSTONE]: [ - [ 0, Moves.LAST_RESPECTS ], + [ EVOLVE_MOVE, Moves.LAST_RESPECTS ], [ 1, Moves.TACKLE ], [ 1, Moves.GROWL ], [ 3, Moves.LICK ], @@ -16640,7 +16645,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 52, Moves.DRAGON_PULSE ], ], [Species.ANNIHILAPE]: [ - [ 0, Moves.SHADOW_PUNCH ], + [ EVOLVE_MOVE, Moves.SHADOW_PUNCH ], [ 1, Moves.SCRATCH ], [ 1, Moves.LEER ], [ 1, Moves.COUNTER ], @@ -16661,7 +16666,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 57, Moves.FINAL_GAMBIT ], ], [Species.CLODSIRE]: [ - [ 0, Moves.AMNESIA ], + [ EVOLVE_MOVE, Moves.AMNESIA ], [ 1, Moves.TAIL_WHIP ], [ 1, Moves.POISON_STING ], [ 4, Moves.TOXIC_SPIKES ], @@ -16713,7 +16718,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 62, Moves.BOOMBURST ], ], [Species.KINGAMBIT]: [ - [ 0, Moves.KOWTOW_CLEAVE ], + [ EVOLVE_MOVE, Moves.KOWTOW_CLEAVE ], [ 1, Moves.SCRATCH ], [ 1, Moves.LEER ], [ 1, Moves.FURY_CUTTER ], @@ -16982,7 +16987,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 55, Moves.ICICLE_CRASH ], ], [Species.BAXCALIBUR]: [ - [ 0, Moves.GLAIVE_RUSH ], + [ EVOLVE_MOVE, Moves.GLAIVE_RUSH ], [ 1, Moves.TACKLE ], [ 1, Moves.LEER ], [ 1, Moves.ICE_SHARD ], @@ -17176,8 +17181,8 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 98, Moves.HYPER_BEAM ], ], [Species.WALKING_WAKE]: [ - [ -1, Moves.SUNNY_DAY ], - [ -1, Moves.HONE_CLAWS ], + [ RELEARN_MOVE, Moves.SUNNY_DAY ], + [ RELEARN_MOVE, Moves.HONE_CLAWS ], [ 1, Moves.LEER ], [ 1, Moves.ROAR ], [ 1, Moves.TWISTER ], @@ -17195,8 +17200,8 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 84, Moves.HYDRO_PUMP ], ], [Species.IRON_LEAVES]: [ - [ -1, Moves.ELECTRIC_TERRAIN ], - [ -1, Moves.QUASH ], + [ RELEARN_MOVE, Moves.ELECTRIC_TERRAIN ], + [ RELEARN_MOVE, Moves.QUASH ], [ 1, Moves.LEER ], [ 1, Moves.QUICK_ATTACK ], [ 1, Moves.HELPING_HAND ], @@ -17216,7 +17221,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 91, Moves.SOLAR_BLADE ], ], [Species.DIPPLIN]: [ - [ 0, Moves.DOUBLE_HIT ], + [ EVOLVE_MOVE, Moves.DOUBLE_HIT ], [ 1, Moves.WITHDRAW ], [ 1, Moves.SWEET_SCENT ], [ 1, Moves.RECYCLE ], @@ -17249,7 +17254,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 60, Moves.LEAF_STORM ], ], [Species.SINISTCHA]: [ - [ 0, Moves.MATCHA_GOTCHA ], + [ EVOLVE_MOVE, Moves.MATCHA_GOTCHA ], [ 1, Moves.STUN_SPORE ], [ 1, Moves.WITHDRAW ], [ 1, Moves.ASTONISH ], @@ -17327,7 +17332,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 66, Moves.WOOD_HAMMER ], ], [Species.ARCHALUDON]: [ - [ 0, Moves.ELECTRO_SHOT ], + [ EVOLVE_MOVE, Moves.ELECTRO_SHOT ], [ 1, Moves.LEER ], [ 1, Moves.METAL_CLAW ], [ 6, Moves.ROCK_SMASH ], @@ -17343,7 +17348,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 66, Moves.HYPER_BEAM ], ], [Species.HYDRAPPLE]: [ - [ 0, Moves.FICKLE_BEAM ], + [ EVOLVE_MOVE, Moves.FICKLE_BEAM ], [ 1, Moves.WITHDRAW ], [ 1, Moves.SWEET_SCENT ], [ 1, Moves.RECYCLE ], @@ -17364,9 +17369,9 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 54, Moves.POWER_WHIP ], ], [Species.GOUGING_FIRE]: [ - [ -1, Moves.DOUBLE_KICK ], - [ -1, Moves.ANCIENT_POWER ], - [ -1, Moves.NOBLE_ROAR ], + [ RELEARN_MOVE, Moves.DOUBLE_KICK ], + [ RELEARN_MOVE, Moves.ANCIENT_POWER ], + [ RELEARN_MOVE, Moves.NOBLE_ROAR ], [ 1, Moves.STOMP ], [ 1, Moves.LEER ], [ 1, Moves.INCINERATE ], @@ -17386,7 +17391,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 91, Moves.RAGING_FURY ], ], [Species.RAGING_BOLT]: [ - [ -1, Moves.ANCIENT_POWER ], + [ RELEARN_MOVE, Moves.ANCIENT_POWER ], [ 1, Moves.TWISTER ], [ 1, Moves.SUNNY_DAY ], [ 1, Moves.SHOCK_WAVE ], @@ -17488,7 +17493,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 34, Moves.ENDEAVOR ], ], [Species.ALOLA_RATICATE]: [ - [ 0, Moves.SCARY_FACE ], + [ EVOLVE_MOVE, Moves.SCARY_FACE ], [ 1, Moves.SWORDS_DANCE ], [ 1, Moves.TACKLE ], [ 1, Moves.TAIL_WHIP ], @@ -17505,8 +17510,8 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 44, Moves.ENDEAVOR ], ], [Species.ALOLA_RAICHU]: [ - [ 0, Moves.PSYCHIC ], - [ 0, Moves.ZIPPY_ZAP ], + [ EVOLVE_MOVE, Moves.PSYCHIC ], + [ EVOLVE_MOVE, Moves.ZIPPY_ZAP ], [ 1, Moves.TAIL_WHIP ], [ 1, Moves.GROWL ], [ 1, Moves.THUNDER_SHOCK ], @@ -17549,7 +17554,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 45, Moves.BLIZZARD ], ], [Species.ALOLA_SANDSLASH]: [ - [ 0, Moves.ICICLE_SPEAR ], + [ EVOLVE_MOVE, Moves.ICICLE_SPEAR ], [ 1, Moves.ICICLE_CRASH ], [ 1, Moves.METAL_CLAW ], [ 1, Moves.SLASH ], @@ -17589,7 +17594,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 52, Moves.BLIZZARD ], ], [Species.ALOLA_NINETALES]: [ - [ 0, Moves.DAZZLING_GLEAM ], + [ EVOLVE_MOVE, Moves.DAZZLING_GLEAM ], [ 1, Moves.ICY_WIND ], [ 1, Moves.IMPRISON ], [ 1, Moves.BLIZZARD ], @@ -17623,7 +17628,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 44, Moves.FISSURE ], ], [Species.ALOLA_DUGTRIO]: [ - [ 0, Moves.SAND_TOMB ], + [ EVOLVE_MOVE, Moves.SAND_TOMB ], [ 1, Moves.SAND_ATTACK ], [ 1, Moves.GROWL ], [ 1, Moves.TRI_ATTACK ], @@ -17657,7 +17662,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 44, Moves.PLAY_ROUGH ], ], [Species.ALOLA_PERSIAN]: [ - [ 0, Moves.POWER_GEM ], + [ EVOLVE_MOVE, Moves.POWER_GEM ], [ 1, Moves.SCRATCH ], [ 1, Moves.GROWL ], [ 1, Moves.FAKE_OUT ], @@ -17765,7 +17770,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 57, Moves.MEMENTO ], ], [Species.ALOLA_EXEGGUTOR]: [ - [ 0, Moves.DRAGON_HAMMER ], + [ EVOLVE_MOVE, Moves.DRAGON_HAMMER ], [ 1, Moves.BARRAGE ], [ 1, Moves.SEED_BOMB ], [ 1, Moves.PSYSHOCK ], @@ -17787,7 +17792,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 1, Moves.GROWTH ], ], [Species.ALOLA_MAROWAK]: [ - [ 0, Moves.SHADOW_BONE ], + [ EVOLVE_MOVE, Moves.SHADOW_BONE ], [ 1, Moves.BONE_CLUB ], [ 1, Moves.HEADBUTT ], [ 1, Moves.DOUBLE_EDGE ], @@ -17857,7 +17862,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 55, Moves.HEALING_WISH ], ], [Species.GALAR_RAPIDASH]: [ - [ 0, Moves.PSYCHO_CUT ], + [ EVOLVE_MOVE, Moves.PSYCHO_CUT ], [ 1, Moves.TACKLE ], [ 1, Moves.TAIL_WHIP ], [ 1, Moves.GROWL ], @@ -17894,7 +17899,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 45, Moves.HEAL_PULSE ], ], [Species.GALAR_SLOWBRO]: [ - [ 0, Moves.SHELL_SIDE_ARM ], + [ EVOLVE_MOVE, Moves.SHELL_SIDE_ARM ], [ 1, Moves.TACKLE ], [ 1, Moves.GROWL ], [ 1, Moves.ACID ], @@ -17932,7 +17937,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 65, Moves.BRAVE_BIRD ], ], [Species.GALAR_WEEZING]: [ - [ 0, Moves.DOUBLE_HIT ], + [ EVOLVE_MOVE, Moves.DOUBLE_HIT ], [ 1, Moves.TACKLE ], [ 1, Moves.SMOKESCREEN ], [ 1, Moves.HAZE ], @@ -18037,7 +18042,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 70, Moves.SKY_ATTACK ], ], [Species.GALAR_SLOWKING]: [ - [ 0, Moves.EERIE_SPELL ], + [ EVOLVE_MOVE, Moves.EERIE_SPELL ], [ 1, Moves.POWER_GEM ], [ 1, Moves.NASTY_PLOT ], [ 1, Moves.SWAGGER ], @@ -18094,7 +18099,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 36, Moves.DOUBLE_EDGE ], ], [Species.GALAR_LINOONE]: [ - [ 0, Moves.NIGHT_SLASH ], + [ EVOLVE_MOVE, Moves.NIGHT_SLASH ], [ 1, Moves.SAND_ATTACK ], [ 1, Moves.TACKLE ], [ 1, Moves.PIN_MISSILE ], @@ -18130,7 +18135,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 48, Moves.SUPERPOWER ], ], [Species.GALAR_DARMANITAN]: [ - [ 0, Moves.ICICLE_CRASH ], + [ EVOLVE_MOVE, Moves.ICICLE_CRASH ], [ 1, Moves.TACKLE ], [ 1, Moves.BITE ], [ 1, Moves.POWDER_SNOW ], @@ -18199,7 +18204,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 56, Moves.FLARE_BLITZ ], ], [Species.HISUI_ARCANINE]: [ - [ 0, Moves.EXTREME_SPEED ], + [ EVOLVE_MOVE, Moves.EXTREME_SPEED ], [ 1, Moves.TAKE_DOWN ], [ 1, Moves.LEER ], [ 1, Moves.BITE ], @@ -18239,7 +18244,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 50, Moves.GRASSY_TERRAIN ], ], [Species.HISUI_ELECTRODE]: [ - [ 0, Moves.CHLOROBLAST ], + [ EVOLVE_MOVE, Moves.CHLOROBLAST ], [ 1, Moves.TACKLE ], [ 1, Moves.CHARGE ], [ 4, Moves.THUNDER_SHOCK ], @@ -18259,7 +18264,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 50, Moves.GRASSY_TERRAIN ], ], [Species.HISUI_TYPHLOSION]: [ - [ 0, Moves.INFERNAL_PARADE ], + [ EVOLVE_MOVE, Moves.INFERNAL_PARADE ], [ 1, Moves.TACKLE ], [ 1, Moves.DOUBLE_EDGE ], [ 1, Moves.LEER ], @@ -18313,7 +18318,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 60, Moves.CLOSE_COMBAT ], ], [Species.HISUI_SAMUROTT]: [ - [ 0, Moves.CEASELESS_EDGE ], + [ EVOLVE_MOVE, Moves.CEASELESS_EDGE ], [ 1, Moves.TACKLE ], [ 1, Moves.TAIL_WHIP ], [ 1, Moves.WATER_GUN ], @@ -18333,7 +18338,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 63, Moves.HYDRO_PUMP ], ], [Species.HISUI_LILLIGANT]: [ - [ 0, Moves.VICTORY_DANCE ], + [ EVOLVE_MOVE, Moves.VICTORY_DANCE ], [ 1, Moves.MEGA_KICK ], [ 1, Moves.ABSORB ], [ 1, Moves.MEGA_DRAIN ], @@ -18374,7 +18379,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 48, Moves.FOUL_PLAY ], ], [Species.HISUI_ZOROARK]: [ - [ 0, Moves.SHADOW_CLAW ], + [ EVOLVE_MOVE, Moves.SHADOW_CLAW ], [ 1, Moves.SCRATCH ], [ 1, Moves.LEER ], [ 1, Moves.TORMENT ], @@ -18392,7 +18397,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 58, Moves.FOUL_PLAY ], ], [Species.HISUI_BRAVIARY]: [ - [ 0, Moves.ESPER_WING ], + [ EVOLVE_MOVE, Moves.ESPER_WING ], [ 1, Moves.WING_ATTACK ], [ 1, Moves.LEER ], [ 1, Moves.PECK ], @@ -18411,7 +18416,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 80, Moves.HURRICANE ], ], [Species.HISUI_SLIGGOO]: [ - [ 0, Moves.SHELTER ], + [ EVOLVE_MOVE, Moves.SHELTER ], [ 1, Moves.TACKLE ], [ 1, Moves.WATER_GUN ], [ 1, Moves.ABSORB ], @@ -18427,7 +18432,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 56, Moves.MUDDY_WATER ], ], [Species.HISUI_GOODRA]: [ - [ 0, Moves.IRON_TAIL ], + [ EVOLVE_MOVE, Moves.IRON_TAIL ], [ 1, Moves.TACKLE ], [ 1, Moves.WATER_GUN ], [ 1, Moves.ABSORB ], @@ -18448,7 +18453,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 67, Moves.HEAVY_SLAM ], ], [Species.HISUI_AVALUGG]: [ - [ 0, Moves.ROCK_SLIDE ], + [ EVOLVE_MOVE, Moves.ROCK_SLIDE ], [ 1, Moves.TACKLE ], [ 1, Moves.HARDEN ], [ 1, Moves.POWDER_SNOW ], @@ -18470,7 +18475,7 @@ export const pokemonSpeciesLevelMoves: PokemonSpeciesLevelMoves = { [ 61, Moves.MOUNTAIN_GALE ], ], [Species.HISUI_DECIDUEYE]: [ - [ 0, Moves.TRIPLE_ARROWS ], + [ EVOLVE_MOVE, Moves.TRIPLE_ARROWS ], [ 1, Moves.TACKLE ], [ 1, Moves.GROWL ], [ 1, Moves.U_TURN ], @@ -18589,7 +18594,7 @@ export const pokemonFormLevelMoves: PokemonSpeciesFormLevelMoves = { [ 48, Moves.PIKA_PAPOW ], ], 3: [ - [ 0, Moves.METEOR_MASH ], + [ EVOLVE_MOVE, Moves.METEOR_MASH ], [ 1, Moves.TAIL_WHIP ], [ 1, Moves.GROWL ], [ 1, Moves.THUNDER_SHOCK ], @@ -18613,7 +18618,7 @@ export const pokemonFormLevelMoves: PokemonSpeciesFormLevelMoves = { [ 48, Moves.PIKA_PAPOW ], ], 4: [ - [ 0, Moves.ICICLE_CRASH ], + [ EVOLVE_MOVE, Moves.ICICLE_CRASH ], [ 1, Moves.TAIL_WHIP ], [ 1, Moves.GROWL ], [ 1, Moves.THUNDER_SHOCK ], @@ -18637,7 +18642,7 @@ export const pokemonFormLevelMoves: PokemonSpeciesFormLevelMoves = { [ 48, Moves.PIKA_PAPOW ], ], 5: [ - [ 0, Moves.DRAINING_KISS ], + [ EVOLVE_MOVE, Moves.DRAINING_KISS ], [ 1, Moves.TAIL_WHIP ], [ 1, Moves.GROWL ], [ 1, Moves.THUNDER_SHOCK ], @@ -18661,7 +18666,7 @@ export const pokemonFormLevelMoves: PokemonSpeciesFormLevelMoves = { [ 48, Moves.PIKA_PAPOW ], ], 6: [ - [ 0, Moves.ELECTRIC_TERRAIN ], + [ EVOLVE_MOVE, Moves.ELECTRIC_TERRAIN ], [ 1, Moves.TAIL_WHIP ], [ 1, Moves.GROWL ], [ 1, Moves.THUNDER_SHOCK ], @@ -18685,7 +18690,7 @@ export const pokemonFormLevelMoves: PokemonSpeciesFormLevelMoves = { [ 48, Moves.PIKA_PAPOW ], ], 7: [ - [ 0, Moves.FLYING_PRESS ], + [ EVOLVE_MOVE, Moves.FLYING_PRESS ], [ 1, Moves.TAIL_WHIP ], [ 1, Moves.GROWL ], [ 1, Moves.THUNDER_SHOCK ], @@ -18766,7 +18771,7 @@ export const pokemonFormLevelMoves: PokemonSpeciesFormLevelMoves = { }, [Species.WORMADAM]: { 1: [ - [ 0, Moves.QUIVER_DANCE ], + [ EVOLVE_MOVE, Moves.QUIVER_DANCE ], [ 1, Moves.TACKLE ], [ 1, Moves.PROTECT ], [ 1, Moves.SUCKER_PUNCH ], @@ -18786,7 +18791,7 @@ export const pokemonFormLevelMoves: PokemonSpeciesFormLevelMoves = { [ 50, Moves.BUG_BUZZ ], ], 2: [ - [ 0, Moves.QUIVER_DANCE ], + [ EVOLVE_MOVE, Moves.QUIVER_DANCE ], [ 1, Moves.METAL_BURST ], [ 1, Moves.TACKLE ], [ 1, Moves.PROTECT ], @@ -18809,7 +18814,7 @@ export const pokemonFormLevelMoves: PokemonSpeciesFormLevelMoves = { }, [Species.ROTOM]: { 1: [ - [ 0, Moves.OVERHEAT ], + [ EVOLVE_MOVE, Moves.OVERHEAT ], [ 1, Moves.DOUBLE_TEAM ], [ 1, Moves.ASTONISH ], [ 5, Moves.THUNDER_SHOCK ], @@ -18825,7 +18830,7 @@ export const pokemonFormLevelMoves: PokemonSpeciesFormLevelMoves = { [ 55, Moves.UPROAR ], ], 2: [ - [ 0, Moves.HYDRO_PUMP ], + [ EVOLVE_MOVE, Moves.HYDRO_PUMP ], [ 1, Moves.DOUBLE_TEAM ], [ 1, Moves.ASTONISH ], [ 5, Moves.THUNDER_SHOCK ], @@ -18841,7 +18846,7 @@ export const pokemonFormLevelMoves: PokemonSpeciesFormLevelMoves = { [ 55, Moves.UPROAR ], ], 3: [ - [ 0, Moves.BLIZZARD ], + [ EVOLVE_MOVE, Moves.BLIZZARD ], [ 1, Moves.DOUBLE_TEAM ], [ 1, Moves.ASTONISH ], [ 5, Moves.THUNDER_SHOCK ], @@ -18857,7 +18862,7 @@ export const pokemonFormLevelMoves: PokemonSpeciesFormLevelMoves = { [ 55, Moves.UPROAR ], ], 4: [ - [ 0, Moves.AIR_SLASH ], + [ EVOLVE_MOVE, Moves.AIR_SLASH ], [ 1, Moves.DOUBLE_TEAM ], [ 1, Moves.ASTONISH ], [ 5, Moves.THUNDER_SHOCK ], @@ -18873,7 +18878,7 @@ export const pokemonFormLevelMoves: PokemonSpeciesFormLevelMoves = { [ 55, Moves.UPROAR ], ], 5: [ - [ 0, Moves.LEAF_STORM ], + [ EVOLVE_MOVE, Moves.LEAF_STORM ], [ 1, Moves.DOUBLE_TEAM ], [ 1, Moves.ASTONISH ], [ 5, Moves.THUNDER_SHOCK ], @@ -18987,8 +18992,8 @@ export const pokemonFormLevelMoves: PokemonSpeciesFormLevelMoves = { }, [Species.GRENINJA]: { 1: [ - [ 0, Moves.WATER_SHURIKEN ], - [ 0, Moves.WATER_SHURIKEN ], + [ EVOLVE_MOVE, Moves.WATER_SHURIKEN ], + [ EVOLVE_MOVE, Moves.WATER_SHURIKEN ], [ 1, Moves.POUND ], [ 1, Moves.GROWL ], [ 1, Moves.WATER_GUN ], @@ -19010,7 +19015,7 @@ export const pokemonFormLevelMoves: PokemonSpeciesFormLevelMoves = { }, [Species.LYCANROC]: { 1: [ - [ 0, Moves.COUNTER ], + [ EVOLVE_MOVE, Moves.COUNTER ], [ 1, Moves.SAND_ATTACK ], [ 1, Moves.TACKLE ], [ 1, Moves.LEER ], @@ -19030,7 +19035,7 @@ export const pokemonFormLevelMoves: PokemonSpeciesFormLevelMoves = { [ 60, Moves.STONE_EDGE ], ], 2: [ - [ 0, Moves.CRUSH_CLAW ], + [ EVOLVE_MOVE, Moves.CRUSH_CLAW ], [ 1, Moves.SAND_ATTACK ], [ 1, Moves.TACKLE ], [ 1, Moves.LEER ], @@ -19057,7 +19062,7 @@ export const pokemonFormLevelMoves: PokemonSpeciesFormLevelMoves = { }, [Species.NECROZMA]: { 1: [ - [ 0, Moves.SUNSTEEL_STRIKE ], + [ EVOLVE_MOVE, Moves.SUNSTEEL_STRIKE ], [ 1, Moves.CONFUSION ], [ 1, Moves.METAL_CLAW ], [ 1, Moves.MORNING_SUN ], @@ -19077,7 +19082,7 @@ export const pokemonFormLevelMoves: PokemonSpeciesFormLevelMoves = { [ 88, Moves.PRISMATIC_LASER ], ], 2: [ - [ 0, Moves.MOONGEIST_BEAM ], + [ EVOLVE_MOVE, Moves.MOONGEIST_BEAM ], [ 1, Moves.CONFUSION ], [ 1, Moves.METAL_CLAW ], [ 1, Moves.MORNING_SUN ], @@ -19097,8 +19102,8 @@ export const pokemonFormLevelMoves: PokemonSpeciesFormLevelMoves = { [ 88, Moves.PRISMATIC_LASER ], ], 3: [ - [ 0, Moves.SUNSTEEL_STRIKE ], - [ 0, Moves.MOONGEIST_BEAM ], + [ EVOLVE_MOVE, Moves.SUNSTEEL_STRIKE ], + [ EVOLVE_MOVE, Moves.MOONGEIST_BEAM ], [ 1, Moves.CONFUSION ], [ 1, Moves.METAL_CLAW ], [ 1, Moves.MORNING_SUN ], @@ -19120,7 +19125,7 @@ export const pokemonFormLevelMoves: PokemonSpeciesFormLevelMoves = { }, [Species.TOXTRICITY]: { 1: [ - [ 0, Moves.SPARK ], + [ EVOLVE_MOVE, Moves.SPARK ], [ 1, Moves.LEER ], [ 1, Moves.GROWL ], [ 1, Moves.ACID ], @@ -19163,7 +19168,7 @@ export const pokemonFormLevelMoves: PokemonSpeciesFormLevelMoves = { }, [Species.ZACIAN]: { 1: [ - [ 0, Moves.BEHEMOTH_BLADE ], + [ EVOLVE_MOVE, Moves.BEHEMOTH_BLADE ], [ 1, Moves.BITE ], [ 1, Moves.QUICK_ATTACK ], [ 1, Moves.METAL_CLAW ], @@ -19182,7 +19187,7 @@ export const pokemonFormLevelMoves: PokemonSpeciesFormLevelMoves = { }, [Species.ZAMAZENTA]: { 1: [ - [ 0, Moves.BEHEMOTH_BASH ], + [ EVOLVE_MOVE, Moves.BEHEMOTH_BASH ], [ 1, Moves.BITE ], [ 1, Moves.QUICK_ATTACK ], [ 1, Moves.METAL_CLAW ], @@ -19219,7 +19224,7 @@ export const pokemonFormLevelMoves: PokemonSpeciesFormLevelMoves = { }, [Species.URSHIFU]: { 1: [ - [ 0, Moves.SURGING_STRIKES ], + [ EVOLVE_MOVE, Moves.SURGING_STRIKES ], [ 1, Moves.LEER ], [ 1, Moves.FOCUS_ENERGY ], [ 1, Moves.ENDURE ], From aeb0e0470aded95e91d70e1e25df460f4c0e3379 Mon Sep 17 00:00:00 2001 From: Lugiad Date: Thu, 4 Jul 2024 22:38:19 +0200 Subject: [PATCH 10/37] [Localization] Update French dialogues + typos in general (#2724) * Update dialogue.ts * Update dialogue.ts * Update dialogue.ts * Update dialogue.ts * Update dialogue.ts * Update dialogue.ts * Update dialogue.ts * Update dialogue.ts * Update dialogue.ts * Update dialogue.ts * Update src/locales/fr/dialogue.ts Co-authored-by: Dakurei * Update src/locales/fr/dialogue.ts Co-authored-by: Dakurei * Update src/locales/fr/dialogue.ts Co-authored-by: Dakurei * Update src/locales/fr/dialogue.ts Co-authored-by: Dakurei * Update src/locales/fr/dialogue.ts Co-authored-by: Dakurei * Update src/locales/fr/dialogue.ts Co-authored-by: Dakurei * Update src/locales/fr/dialogue.ts Co-authored-by: Dakurei * Update src/locales/fr/dialogue.ts Co-authored-by: Dakurei * Update src/locales/fr/dialogue.ts Co-authored-by: Dakurei * Update src/locales/fr/dialogue.ts Co-authored-by: Dakurei * Update dialogue.ts * Update modifier-type.ts * Update starter-select-ui-handler.ts * Update pokemon-info.ts * Update menu-ui-handler.ts * Update berry.ts * Update status-effect.ts --------- Co-authored-by: Dakurei --- src/locales/fr/berry.ts | 22 +- src/locales/fr/dialogue.ts | 592 ++++++++++---------- src/locales/fr/menu-ui-handler.ts | 2 +- src/locales/fr/modifier-type.ts | 4 +- src/locales/fr/pokemon-info.ts | 4 +- src/locales/fr/starter-select-ui-handler.ts | 2 +- src/locales/fr/status-effect.ts | 2 +- 7 files changed, 314 insertions(+), 314 deletions(-) diff --git a/src/locales/fr/berry.ts b/src/locales/fr/berry.ts index b5048eb02c0..e08afb8bc55 100644 --- a/src/locales/fr/berry.ts +++ b/src/locales/fr/berry.ts @@ -3,46 +3,46 @@ import { BerryTranslationEntries } from "#app/interfaces/locales"; export const berry: BerryTranslationEntries = { "SITRUS": { name: "Baie Sitrus", - effect: "Restaure 25% des PV s’ils sont inférieurs à 50%", + effect: "Restaure 25% des PV s’ils sont inférieurs à 50%.", }, "LUM": { name: "Baie Prine", - effect: "Soigne tout problème de statut permanant et la confusion", + effect: "Soigne tout problème de statut permanant et la confusion.", }, "ENIGMA": { name: "Baie Enigma", - effect: "Restaure 25% des PV si touché par une capacité super efficace", + effect: "Restaure 25% des PV si touché par une capacité super efficace.", }, "LIECHI": { name: "Baie Lichii", - effect: "Augmente l’Attaque si les PV sont inférieurs à 25%", + effect: "Augmente l’Attaque si les PV sont inférieurs à 25%.", }, "GANLON": { name: "Baie Lingan", - effect: "Augmente la Défense si les PV sont inférieurs à 25%", + effect: "Augmente la Défense si les PV sont inférieurs à 25%.", }, "PETAYA": { name: "Baie Pitaye", - effect: "Augmente l’Atq. Spé. si les PV sont inférieurs à 25%", + effect: "Augmente l’Atq. Spé. si les PV sont inférieurs à 25%.", }, "APICOT": { name: "Baie Abriko", - effect: "Augmente la Déf. Spé. si les PV sont inférieurs à 25%", + effect: "Augmente la Déf. Spé. si les PV sont inférieurs à 25%.", }, "SALAC": { name: "Baie Sailak", - effect: "Augmente la Vitesse si les PV sont inférieurs à 25%", + effect: "Augmente la Vitesse si les PV sont inférieurs à 25%.", }, "LANSAT": { name: "Baie Lansat", - effect: "Augmente le taux de coups critiques si les PV sont inférieurs à 25%", + effect: "Augmente le taux de coups critiques si les PV sont inférieurs à 25%.", }, "STARF": { name: "Baie Frista", - effect: "Augmente énormément une statistique au hasard si les PV sont inférieurs à 25%", + effect: "Augmente énormément une statistique au hasard si les PV sont inférieurs à 25%.", }, "LEPPA": { name: "Baie Mepo", - effect: "Restaure 10 PP à une capacité dès que ses PP tombent à 0", + effect: "Restaure 10 PP à une capacité dès que ses PP tombent à 0.", }, } as const; diff --git a/src/locales/fr/dialogue.ts b/src/locales/fr/dialogue.ts index ab192963cad..d3ec5f85d5d 100644 --- a/src/locales/fr/dialogue.ts +++ b/src/locales/fr/dialogue.ts @@ -7,14 +7,14 @@ export const PGMdialogue: DialogueTranslationEntries = { 1: "Hé ! Combat ?", 2: "Toi aussi tu débutes ?", 3: "Hé, j’me souviens pas de ta tête. Combat !", - 4: "J’ai perdu, alors j’essaye de capturer d’autres Pokémon.\nHé, t’as l'air faible toi ! Allez, combat !", + 4: "J’ai perdu, alors j’essaye de capturer d’autres Pokémon.\nHé, t’as l’air faible toi ! Allez, combat !", 5: "On s’connait ? J’ai comme un doute. Dans tous les cas, sympa de te rencontrer !", 6: "Allez, c’est parti !", 7: "Attention, me voilà !\nTu vas voir comment j’suis fort !", 8: "Coucou… Tu veux voir mes bô Pokémon ?", 9: "Trève de mondanités. Ramène-toi quand tu le sens !", 10: "Baisse pas ta garde si tu veux pas pleurer d’avoir perdu face à un gamin.", - 11: "J'ai tout donné pour élever mes Pokémon. Attention à toi si tu leur fait du mal !", + 11: "J’ai tout donné pour élever mes Pokémon. Attention à toi si tu leur fait du mal !", 12: "Incroyable que t’y sois parvenu ! Mais la suite va pas être une partie de plaisir.", 13: "Les combats sont éternels ! Bienvenue dans un monde sans fin !" }, @@ -28,146 +28,146 @@ export const PGMdialogue: DialogueTranslationEntries = { 7: "Waah ! T’es trop incroyable ! J’suis bouche bée !", 8: "Pourquoi… Comment… Pourtant on est les plus forts, mes Pokémon et moi…", 9: "J’perdrai pas la prochaine fois ! Remettons ça un jour !", - 10: "Weeeesh ! Tu vois que j’suis qu’un gamin ? C'est pas juste de me bully comme ça !", + 10: "Weeeesh ! Tu vois que j’suis qu’un gamin ? C’est pas juste de me bully comme ça !", 11: "Tes Pokémon sont trop incroyables !\n… P’tit échange ?", 12: "Je me suis fait un peu aider plus tôt, mais de quel taf je parlais ?", - 13: "Ahaha ! Et voilà, ça y est !\nT'es déjà comme chez toi dans ce monde !" + 13: "Ahaha ! Et voilà, ça y est !\nT’es déjà comme chez toi dans ce monde !" } }, "lass": { "encounter": { - 1: "Affrontons-nous, d'accord ?", - 2: "Tu as l'air d'un nouveau dresseur. Battons nous !", - 3: "Je ne te reconnais pas. Que dirais-tu de te battre ?", - 4: "Amusons-nous pendant ce combat Pokémon !", - 5: "Je vais t'apprendre à te battre avec des Pokémon !", - 6: "Un combat doit être pris au sérieux. Es-tu prêt à te battre ?", - 7: "Tu ne seras pas jeune éternellement. Tu n'auras qu'une chance pendant un combat. Bientôt, tu ne seras plus qu'un souvenir.", - 8: "Tu ferais mieux d'y aller doucement avec moi. Mais je vais me battre sérieusement !", - 9: "Je m'ennuie à l'école. Je n'ai rien à faire. *Baille*. Je me bats juste pour passer le temps." + 1: "Affrontons-nous, d’accord ?", + 2: "T’as l’air d’un nouveau Dresseur. Battons nous !", + 3: "Je te connais pas. Ça te dis de te battre ?", + 4: "Prenons du bon temps avec ce combat Pokémon !", + 5: "Je vais t’apprendre à te battre avec tes Pokémon !", + 6: "Un combat doit être pris au sérieux. T’es prêt à te battre ?", + 7: "Tu seras pas jeune éternellement. T’as qu’une chance pendant un combat. Bientôt, tu seras plus qu’un souvenir.", + 8: "Tu ferais mieux d’y aller doucement avec moi. Mais je vais me battre sérieusement !", + 9: "Je m’ennuie à l’école. Y’a rien à y faire. *Baille*\nJe me bats juste pour passer le temps." }, "victory": { - 1: "Wow, c'était impressionnant. J'ai beaucoup à apprendre.", + 1: "Wah, c’était impressionnant ! J’ai encore beaucoup à apprendre.", 2: "Je ne pensais pas que je perdrais comme ça…", - 3: "J'espère que j'aurai ma revanche un jour.", - 4: "C'était super amusant ! Ce combat m'a épuisé…", - 5: "Tu m'as appris une belle leçon ! Tu es vraiment incroyable !", - 6: "Vraiment ? J'ai perdu… C'est des choses qui arrivent, ça me déprime mais tu es vraiment très cool.", - 7: "Je n'ai pas besoin de souvenirs comme ça. *Suppression de la mémoire…*", - 8: "Hé ! Je t'avais dit d'y aller doucement avec moi ! Mais tu es vraiment trop cool quand tu te bats sérieusement.", - 9: "J'en ai marre des combats Pokémon… Il doit y avoir de nouvelles choses à faire…" + 3: "J’espère que j’aurai ma revanche un jour.", + 4: "C’était super amusant ! Mais ce combat m’a épuisée…", + 5: "Tu m’as appris une belle leçon ! T’es vraiment incroyable !", + 6: "Vraiment ? J’ai perdu… ? C’est des choses qui arrivent, ça me déprime mais tu es vraiment très cool.", + 7: "J’ai pas besoin de ce genre de souvenirs.\n*Suppression de mémoire en cours…*", + 8: "Hé ! Je t’avais dit d’y aller doucement avec moi ! Mais t’es vraiment si cool quand tu te bats sérieusement…", + 9: "J’en ai marre des combats Pokémon…\nJe vais chercher d’autres trucs à faire…" } }, "breeder": { "encounter": { - 1: "Obedient Pokémon, selfish Pokémon… Pokémon have unique characteristics.", - 2: "Even though my upbringing and behavior are poor, I've raised my Pokémon well.", - 3: "Hmm, do you discipline your Pokémon? Pampering them too much is no good.", + 1: "Qu’ils soient obéissants ou égoïstes… Les Pokémon ont des caractéristiques uniques.", + 2: "Même si mes choix et ma personnalité ne sont pas fous, je pense quand même bien avoir élevé mes Pokémon.", + 3: "Hum, t’es pas trop laxiste avec tes Pokémon ?\nTrop les chouchouter n’est pas bon.", }, "victory": { - 1: "It is important to nurture and train each Pokémon's characteristics.", - 2: "Unlike my diabolical self, these are some good Pokémon.", - 3: "Too much praise can spoil both Pokémon and people.", + 1: "Il est primordial de nourir et développer toutes les caractéristiques de chaque Pokémon.", + 2: "Contrairement à moi, ces Pokémon ont un bon fond.", + 3: "Trop d’éloges peut ruiner les Pokémon et les gens.", }, "defeat": { - 1: "You should not get angry at your Pokémon, even if you lose a battle.", - 2: "Right? Pretty good Pokémon, huh? I'm suited to raising things.", - 3: "No matter how much you love your Pokémon, you still have to discipline them when they misbehave." + 1: "Tu ne devrais pas t’énerver sur tes Pokémon, même après une défaite.", + 2: "Alors ? Pas mal mes Pokémon, hein ? Je suis fait pour ça.", + 3: "Peut importe à quel point t’aimes tes Pokémon, il faut toujours de la discipline s’ils se comportent mal." } }, "breeder_female": { "encounter": { - 1: "Pokémon never betray you. They return all the love you give them.", - 2: "Shall I give you a tip for training good Pokémon?", - 3: "I have raised these very special Pokémon using a special method." + 1: "Les Pokémon ne trahissent jamais. Ils te rendront toujours l’amour que tu leur donne.", + 2: "Puis-je te donner une astuce pour mieux élever tes Pokémon ?", + 3: "J’ai élevé mes Pokémon en utilisant une méthode très spéciale." }, "victory": { - 1: "Ugh… It wasn't supposed to be like this. Did I administer the wrong blend?", - 2: "How could that happen to my Pokémon… What are you feeding your Pokémon?", - 3: "If I lose, that tells you I was just killing time. It doesn't damage my ego at all." + 1: "Arg… C’était pas supposé se passer comme ça. Leur ai-je administré la mauvaise préparation ?", + 2: "Comment ça a pu arriver…\nAvec quoi nourris-tu tes Pokémon ?", + 3: "Si je perds, c’est juste pour te dire que je tuais le temps. Mon ego n’est absolument pas touché…" }, "defeat": { - 1: "This proves my Pokémon have accepted my love.", - 2: "The real trick behind training good Pokémon is catching good Pokémon.", - 3: "Pokémon will be strong or weak depending on how you raise them." + 1: "C’est la preuve que mes Pokémon reconnaissent tout mon amour.", + 2: "Le seul secret derrière des Pokémon bien entrainés, c’est surtout d’en capturer des bons.", + 3: "La force des Pokémon dépend de ta capacité à savoir les élever correctement." } }, "fisherman": { "encounter": { - 1: "Aack! You made me lose a bite!\nWhat are you going to do about it?", - 2: "Go away! You're scaring the Pokémon!", - 3: "Let's see if you can reel in a victory!", + 1: "Aaah non ! J’avais une touche !\nTu comptes faire quoi pour arranger ça ?", + 2: "Bouge de là ! Tu fais peur aux Pokémon !", + 3: "Voyons si t'arrives à ferrer une victoire !", }, "victory": { - 1: "Just forget about it.", - 2: "Next time, I'll be reelin' in the triumph!", - 3: "Guess I underestimated the currents this time.", + 1: "Vas-y là, oublie.", + 2: "La prochaine fois, je vais me repêcher !", + 3: "Je présume que j’ai sous-estimé les courants…", }, }, "fisherman_female": { "encounter": { - 1: "Woah! I've hooked a big one!", - 2: "Line's in, ready to reel in success!", - 3: "Ready to make waves!" + 1: "Oh la belle prise !", + 2: "Ma ligne est en place, prête à ferrer le succès !", + 3: "Prête à faire des vagues !" }, "victory": { - 1: "I'll be back with a stronger hook.", - 2: "I'll reel in victory next time.", - 3: "I'm just sharpening my hooks for the comeback!" + 1: "Je suppose que je vais avoir besoin d’un plus gros hameçon.", + 2: "La ligne s’est brisée, j’ai pas pu la ferrer…", + 3: "Attends que j’aiguise mes hameçons pour la revanche !" }, }, "swimmer": { "encounter": { - 1: "C'est l'heure de plonger dans le combat !", - 2: "Je vais surfer sur les vagues de la victoire !", - 3: "Je vais t'éclabousser de mon talent !", + 1: "C’est l’heure de plonger dans le vif !", + 2: "C’est le moment de surfer sur les vagues de la victoire !", + 3: "Je vais t’éclabousser de mon talent !", }, "victory": { - 1: "Tu m'as complètement séché", - 2: "Il semblerait que j'ai surfé sur les vagues de la défaite...", + 1: "Tu m’as complètement séché", + 2: "Il semblerait que ce soit celles de la défaite…", 3: "Retour sur la terre ferme je suppose", }, }, "backpacker": { "encounter": { - 1: "Pack up, game on!", - 2: "Let's see if you can keep pace!", - 3: "Gear up, challenger!", - 4: "I've spent 20 years trying to find myself… But where am I?" + 1: "Fais ton sac, on y va !", + 2: "Voyons si t’arrives à garder le rythme !", + 3: "Accélère le pas, camarade !", + 4: "J’ai passé 20 ans à la recherche de moi-même…\nMais où suis-je ?" }, "victory": { - 1: "Tripped up this time!", - 2: "Oh, I think I'm lost.", - 3: "Dead end!", - 4: "Wait up a second! Hey! Don't you know who I am?" + 1: "J’ai trébuché !", + 2: "Ah, je crois que je me suis paumé.", + 3: "Ah, une impasse !", + 4: "Hé ! Attends une seconde…\nTu saurais pas qui je suis ?" }, }, "ace_trainer": { "encounter": { - 1: "You seem quite confident.", - 2: "Your Pokémon… Show them to me…", - 3: "Because I'm an Ace Trainer, people think I'm strong.", - 4: "Are you aware of what it takes to be an Ace Trainer?" + 1: "T’as l’air plutôt confiant.", + 2: "Tes Pokémon… Montre-les-moi…", + 3: "Les gens pensent que je suis fort par que je suis un Topdresseur.", + 4: "T’es au courant de ce que ça signifie d’être un Topdresseur ?" }, "victory": { - 1: "Yes… You have good Pokémon…", - 2: "What?! But I'm a battling genius!", - 3: "Of course, you are the main character!", - 4: "OK! OK! You could be an Ace Trainer!" + 1: "Très bien… T’as de bons Pokémon…", + 2: "Quoi ?! Mais c'est moi le génie des combats !", + 3: "Évidemment que t’es le personnage principal !", + 4: "OK ! OK ! Tu pourrais être un Topdresseur !" }, "defeat": { - 1: "I am devoting my body and soul to Pokémon battles!", - 2: "All within my expectations… Nothing to be surprised about…", - 3: "I thought I'd grow up to be a frail person who looked like they would break if you squeezed them too hard.", - 4: "Of course I'm strong and don't lose. It's important that I win gracefully." + 1: "Je me dévoue corps et âme aux combats Pokémon !", + 2: "Comme prévu… Vraiment aucune surprise…", + 3: "Et moi qui pensais qu’en grandissant, j’allais rester frêle et fragile, à me briser à la moindre étreinte.", + 4: "Évidemment que je suis fort et encore moins un perdant. C’est important de gagner avec grâce." } }, "parasol_lady": { "encounter": { - 1: "Time to grace the battlefield with elegance and poise!", + 1: "Honorons ce terrain de combat avec élégance et équilibre !", }, "victory": { - 2: "My elegance remains unbroken!", + 2: "Mon élégance demeure inébranlable !", } }, "twins": { @@ -439,7 +439,7 @@ export const PGMdialogue: DialogueTranslationEntries = { 1: "QUOI ? IMPOSSIBLE !" }, "defeat": { - 1: "Retiens bien. Ton incapacité à évaluer ta propre force est\nla démonstration claire que tu n'es encore qu’un gamin." + 1: "Retiens bien. Ton incapacité à évaluer ta propre force est\nla démonstration claire que tu n’es encore qu’un gamin." } }, "rocket_boss_giovanni_2": { @@ -447,7 +447,7 @@ export const PGMdialogue: DialogueTranslationEntries = { 1: "Mes anciens collaborateurs m’attendent.\nComptes-tu m’en empêcher ?" }, "victory": { - 1: "Comment c'est possible… ? Le grand dessein de la Team Rocket n’est plus qu’une illusion…" + 1: "Comment c’est possible… ? Le grand dessein de la Team Rocket n’est plus qu’une illusion…" }, "defeat": { 1: "La Team Rocket renaitra, et je dominerai le monde !" @@ -466,13 +466,13 @@ export const PGMdialogue: DialogueTranslationEntries = { }, "magma_boss_maxie_2": { "encounter": { - 1: "T’es le dernier rempart entravant mes objectifs.\nPrépare-toi à mon ultime riposte ! Hahahaha !" + 1: "T’es le dernier rempart entravant mes objectifs. Prépare-toi à mon ultime riposte ! Hahahaha !" }, "victory": { - 1: "Ce… Ce n'est pas… Gnn…" + 1: "Ce… Ce n’est pas… Gnn…" }, "defeat": { - 1: "L'heure est venue…\nJe vais transformer cette planète en paradis pour l’humanité." + 1: "L’heure est venue…\nJe vais transformer cette planète en paradis pour l’humanité." } }, "aqua_boss_archie_1": { @@ -554,7 +554,7 @@ export const PGMdialogue: DialogueTranslationEntries = { }, "flare_boss_lysandre_2": { "encounter": { - 1: "Ton future ou le mien… Voyons lequel mérite plus." + 1: "Ton futur ou le mien…\nVoyons lequel mérite plus d’aboutir." }, "victory": { 1: "Ohhhh… !" @@ -2289,13 +2289,13 @@ export const PGMdialogue: DialogueTranslationEntries = { }, "alder": { "encounter": { - 1: "Prépare-toi pour un combat contre le meilleur Dresseur d'Unys !", + 1: "Prépare-toi pour un combat contre le meilleur Dresseur d’Unys !", }, "victory": { 1: "Bien joué ! Tu as sans aucun doute un talent inégalé.", }, "defeat": { - 1: `Une brise fraîche traverse mon cœur… + 1: `Une brise fraiche traverse mon cœur… $Quel effort extraordinaire !`, } }, @@ -2305,25 +2305,25 @@ export const PGMdialogue: DialogueTranslationEntries = { $Je ne perdrai pas.`, }, "victory": { - 1: `Je n'y crois pas… + 1: `Je n’y crois pas… $Quel combat amusant et palpitant !` }, "defeat": { 1: `Eh beh, quel combat ! - $Il est temps pour toi de t'entraîner encore plus dur.`, + $Il est temps pour toi de t’entrainer encore plus dur.`, } }, "rival": { "encounter": { - 1: `@c{smile}Ah, je te cherchais ! Je savais que t’étais pressée de partir, mais je m’attendais quand même à un au revoir… + 1: `@c{smile}Ah, je te cherchais ! Je savais que t’étais pressé de partir, mais je m’attendais quand même à un au revoir… $@c{smile_eclosed}T’as finalement décidé de réaliser ton rêve ?\nJ’ai peine à y croire. - $@c{serious_smile_fists}Vu que t’es là, ça te dis un petit combat ?\nJe voudrais quand même m’assurer que t'es prête. + $@c{serious_smile_fists}Vu que t’es là, ça te dis un petit combat ?\nJe voudrais quand même m’assurer que t’es prêt. $@c{serious_mopen_fists}Surtout ne te retiens pas et donne-moi tout ce que t’as !` }, "victory": { - 1: `@c{shock}Wah… Tu m’as vraiment lavé.\nT’es vraiment une débutante ? - $@c{smile}T'as peut-être eu de la chance, mais…\nPeut-être que t’arriveras jusqu’au bout du chemin. - $D'ailleurs, le prof m’a demandé de te filer ces objets.\nIls ont l’air sympas. + 1: `@c{shock}Wah… Tu m’as vraiment lavé.\nT’es vraiment un débutant ? + $@c{smile}T’as peut-être eu de la chance, mais…\nPeut-être que t’arriveras jusqu’au bout du chemin. + $D’ailleurs, le prof m’a demandé de te filer ces objets.\nIls ont l’air sympas. $@c{serious_smile_fists}Bonne chance à toi !` }, }, @@ -2331,27 +2331,27 @@ export const PGMdialogue: DialogueTranslationEntries = { "encounter": { 1: `@c{smile_wave}Ah, je te cherchais ! Je t’ai cherché partout !\n@c{angry_mopen}On oublie de dire au revoir à sa meilleure amie ? $@c{smile_ehalf}T’as décidé de réaliser ton rêve, hein ?\nCe jour est donc vraiment arrivé… - $@c{smile}Je veux bien te pardonner de m’avoir oubliée, à une conditon. @c{smile_wave_wink}Que tu m’affronte ! + $@c{smile}Je veux bien te pardonner de m’avoir oubliée,\nà une conditon. @c{smile_wave_wink}Que tu m’affronte ! $@c{angry_mopen}Donne tout ! Ce serait dommage que ton aventure finisse avant d’avoir commencé, hein ?` }, "victory": { - 1: `@c{shock}Tu viens de commencer et t’es déjà si fort ?!@d{96}\n@c{angry}T'as triché non ? Avoue ! - $@c{smile_wave_wink}J'déconne !@d{64} @c{smile_eclosed}J'ai perdu dans les règles… J’ai le sentiment que tu vas très bien t’en sortir. + 1: `@c{shock}Tu viens de commencer et t’es déjà si fort ?!@d{96}\n@c{angry}T’as triché non ? Avoue ! + $@c{smile_wave_wink}J’déconne !@d{64} @c{smile_eclosed}J’ai perdu dans les règles…\nJ’ai le sentiment que tu vas très bien t’en sortir. $@c{smile}D’ailleurs, le prof veut que je te donne ces quelques objets. Ils te seront utiles, pour sûr ! $@c{smile_wave}Fais de ton mieux, comme toujours !\nJe crois fort en toi !` }, }, "rival_2": { "encounter": { - 1: `@c{smile}Hé, toi aussi t’es là ?\n@c{smile_eclosed}Toujours invaincue, hein… ? - $@c{serious_mopen_fists}Je sais que j’ai l’air de t’avoir suivie ici, mais c'est pas complètement vrai. - $@c{serious_smile_fists}Pour être honnête, ça me démangeait d’avoir une revanche depuis que tu m'as battu. + 1: `@c{smile}Hé, toi aussi t’es là ?\n@c{smile_eclosed}Toujours invaincu, hein… ? + $@c{serious_mopen_fists}Je sais que j’ai l’air de t’avoir suivi ici, mais c’est pas complètement vrai. + $@c{serious_smile_fists}Pour être honnête, ça me démangeait d’avoir une revanche depuis que tu m’as battu. $Je me suis beaucoup entrainé, alors sois sure que je vais pas retenir mes coups cette fois. $@c{serious_mopen_fists}Et comme la dernière fois, ne te retiens pas !\nC’est parti !` }, "victory": { 1: `@c{neutral_eclosed}Oh. Je crois que j’ai trop pris la confiance. - $@c{smile}Pas grave, c'est OK. Je me doutais que ça arriverait.\n@c{serious_mopen_fists}Je vais juste devoir encore plus m’entrainer !\n + $@c{smile}Pas grave, c’est OK. Je me doutais que ça arriverait.\n@c{serious_mopen_fists}Je vais juste devoir encore plus m’entrainer !\n $@c{smile}Ah, et pas que t’aies réellement besoin d’aide, mais j’ai ça en trop sur moi qui pourrait t’intéresser.\n $@c{serious_smile_fists}Mais n’espère plus en avoir d’autres !\nJe peux pas passer mon temps à aider mon adversaire. $@c{smile}Bref, prends soin de toi !` @@ -2360,10 +2360,10 @@ export const PGMdialogue: DialogueTranslationEntries = { "rival_2_female": { "encounter": { 1: `@c{smile_wave}Hé, sympa de te croiser ici. T’as toujours l’air invaincu. @c{angry_mopen}Eh… Pas mal ! - $@c{angry_mopen}Je sais à quoi tu penses et non, je t’espionne pas. @c{smile_eclosed}C’est juste que j’étais aussi dans le coin. + $@c{angry_mopen}Je sais à quoi tu penses et non, je t’espionne pas.\n@c{smile_eclosed}C’est juste que j’étais aussi dans le coin. $@c{smile_ehalf}Heureuse pour toi, mais je veux juste te rappeler que c’est pas grave de perdre parfois. $@c{smile}On apprend de nos erreurs, souvent plus que si on ne connaissait que le succès. - $@c{angry_mopen}Dans tous les cas je me suis bien entrainée pour cette revanche, t'as intérêt à tout donner !` + $@c{angry_mopen}Dans tous les cas je me suis bien entrainée pour cette revanche, t’as intérêt à tout donner !` }, "victory": { 1: `@c{neutral}Je… J’étais pas encore supposée perdre… @@ -2378,11 +2378,11 @@ export const PGMdialogue: DialogueTranslationEntries = { }, "rival_3": { "encounter": { - 1: `@c{smile}Hé, mais qui voilà ! Ça fait un bail.\n@c{neutral}T’es… toujours invaincue ? Incroyable. + 1: `@c{smile}Hé, mais qui voilà ! Ça fait un bail.\n@c{neutral}T’es… toujours invaincu ? Incroyable. $@c{neutral_eclosed}Tout est devenu un peu… étrange.\nC’est plus pareil sans toi au village. $@c{serious}Je sais que c’est égoïste, mais j’ai besoin d’expier ça.\n@c{neutral_eclosed}Je crois que tout ça te dépasse. $@c{serious}Ne jamais perdre, c’est juste irréaliste.\nGrandir, c’est parfois aussi savoir perdre. - $@c{neutral_eclosed}T’as un beau parcours, mais il y a encore tellement à venir et ça va pas s’arranger. @c{neutral}T’es prête pour ça ? + $@c{neutral_eclosed}T’as un beau parcours, mais il y a encore tellement à venir et ça va pas s’arranger. @c{neutral}T’es prêt pour ça ? $@c{serious_mopen_fists}Si tu l’es, alors prouve-le.` }, "victory": { @@ -2411,9 +2411,9 @@ export const PGMdialogue: DialogueTranslationEntries = { $@c{serious_mhalf_fists}J’ai appris à maximiser tout mon potentiel en m’entrainant d’arrachepied. $@c{smile}C’est fou tout le temps que tu peux te dégager si tu dors pas en sacrifiant ta vie sociale. $@c{serious_mopen_fists}Plus rien n’a d’importance désormais, pas tant que j’aurai pas gagné. - $@c{neutral_eclosed}J'ai atteint un stade où je ne peux plus perdre.\n@c{smile_eclosed}Je présume que ta philosophie était pas si fausse finalement. - $@c{angry_mhalf}La défaite, c'est pour les faibles, et je ne suis plus un faible. - $@c{serious_mopen_fists}Tiens-toi prête.` + $@c{neutral_eclosed}J’ai atteint un stade où je ne peux plus perdre.\n@c{smile_eclosed}Je présume que ta philosophie était pas si fausse finalement. + $@c{angry_mhalf}La défaite, c’est pour les faibles, et je ne suis plus un faible. + $@c{serious_mopen_fists}Tiens-toi prêt.` }, "victory": { 1: "@c{neutral}Que…@d{64} Qui es-tu ?" @@ -2423,7 +2423,7 @@ export const PGMdialogue: DialogueTranslationEntries = { "encounter": { 1: `@c{neutral}C’est moi ! Tu m’as pas encore oubliée… n’est-ce pas ? $@c{smile}Tu devrais être fier d’être arrivé aussi loin. GG !\nMais c’est certainement pas la fin de ton aventure. - $@c{smile_eclosed}T’as éveillé en moi quelque chose que j’ignorais.\nTout mon temps passe dans l'entrainement. + $@c{smile_eclosed}T’as éveillé en moi quelque chose que j’ignorais.\nTout mon temps passe dans l’entrainement. $@c{smile_ehalf}Je dors et je mange à peine, je m’entraine juste tous les jours, et deviens de plus en plus forte. $@c{neutral}En vrai, Je… J’ai de la peine à me reconnaitre. $Mais maintenant, je suis au top de mes capacités.\nJe doute que tu sois de nouveau capable de me battre. @@ -2467,16 +2467,16 @@ export const PGMdialogue: DialogueTranslationEntries = { $@c{neutral_eclosed}J’ignore si je serai capable de l’accomplir, mais je ferai tout ce qui est en mon pouvoir. $@c{neutral}Cet endroit est terrifiant… Et pourtant il m’a l’air familier, comme si j’y avais déjà mis les pieds. $@c{serious_mhalf_fists}Tu ressens la même chose, pas vrai ? - $@c{serious}…et c’est comme si quelque chose ici me parlait. + $@c{serious}… et c’est comme si quelque chose ici me parlait. $Comme si c’était tout ce que ce monde avait toujours connu. $Ces précieux moments ensemble semblent si proches ne sont rien de plus qu’un lointain souvenir. $@c{neutral_eclosed}D’ailleurs, qui peut dire aujourd’hui qu’ils ont pu être réels ? - $@c{serious_mopen_fists}Il faut que tu persévères. Si tu t’arrêtes, ça n'aura jamais de fin et t’es la seule à en être capable. + $@c{serious_mopen_fists}Il faut que tu persévères. Si tu t’arrêtes, ça n’aura jamais de fin et t’es le seul à en être capable. $@c{serious_smile_fists}Difficile de comprendre le sens de tout ça, je sais juste que c’est la réalité. $@c{serious_mopen_fists}Si tu ne parviens pas à me battre ici et maintenant, tu n’as aucune chance.` }, "victory": { - 1: `@c{smile_eclosed}J'ai fait ce que je j'avais à faire. + 1: `@c{smile_eclosed}J’ai fait ce que j’avais à faire. $Promets-moi juste une chose.\n@c{smile}Après avoir réparé ce monde… Rentre à la maison.` }, }, @@ -2493,12 +2493,12 @@ export const PGMdialogue: DialogueTranslationEntries = { $Comme… si c’était tout ce que ce monde avait toujours connu. $@c{smile_eclosed}J’ai le sentiment que nos précieux moments ensemble sont devenus si flous. $@c{smile_ehalf}Ont-ils au moins été réels ? Tout semble si loin maintenant… - $@c{angry_mopen}Il faut que tu persévères. Si tu t’arrêtes, ça n'aura jamais de fin et t’es le seul à en être capable. + $@c{angry_mopen}Il faut que tu persévères. Si tu t’arrêtes, ça n’aura jamais de fin et t’es le seul à en être capable. $@c{smile_ehalf}Je… j’ignore le sens de tout ça… Mais je sais que c’est la réalité. $@c{neutral}Si tu ne parviens pas à me battre ici et maintenant, tu n’as aucune chance.` }, "victory": { - 1: `@c{smile_ehalf}Je… Je crois que j'ai rempli ma mission… + 1: `@c{smile_ehalf}Je… Je crois que j’ai rempli ma mission… $@c{smile_eclosed}Promets-moi… Après avoir réparé ce monde… Reviens à la maison sain et sauf. $@c{smile_ehalf}… Merci.` @@ -2514,14 +2514,14 @@ export const PGFdialogue: DialogueTranslationEntries = { 1: "Hé ! Combat ?", 2: "Toi aussi tu débutes ?", 3: "Hé, j’me souviens pas de ta tête. Combat !", - 4: "J’ai perdu, alors j’essaye de capturer d’autres Pokémon.\nHé, t’as l'air faible toi ! Allez, combat !", + 4: "J’ai perdu, alors j’essaye de capturer d’autres Pokémon.\nHé, t’as l’air faible toi ! Allez, combat !", 5: "On s’connait ? J’ai comme un doute. Dans tous les cas, sympa de te rencontrer !", 6: "Allez, c’est parti !", 7: "Attention, me voilà !\nTu vas voir comment j’suis fort !", 8: "Coucou… Tu veux voir mes bô Pokémon ?", 9: "Trève de mondanités. Ramène-toi quand tu le sens !", 10: "Baisse pas ta garde si tu veux pas pleurer d’avoir perdu face à un gamin.", - 11: "J'ai tout donné pour élever mes Pokémon. Attention à toi si tu leur fait du mal !", + 11: "J’ai tout donné pour élever mes Pokémon. Attention à toi si tu leur fait du mal !", 12: "Incroyable que t’y sois parvenue ! Mais la suite va pas être une partie de plaisir.", 13: "Les combats sont éternels ! Bienvenue dans un monde sans fin !" }, @@ -2535,146 +2535,146 @@ export const PGFdialogue: DialogueTranslationEntries = { 7: "Waah ! T’es trop incroyable ! J’suis bouche bée !", 8: "Pourquoi… Comment… Pourtant on est les plus forts, mes Pokémon et moi…", 9: "J’perdrai pas la prochaine fois ! Remettons ça un jour !", - 10: "Weeeesh ! Tu vois que j’suis qu’un gamin ? C'est pas juste de me bully comme ça !", + 10: "Weeeesh ! Tu vois que j’suis qu’un gamin ? C’est pas juste de me bully comme ça !", 11: "Tes Pokémon sont trop incroyables !\n… P’tit échange ?", 12: "Je me suis fait un peu aider plus tôt, mais de quel taf je parlais ?", - 13: "Ahaha ! Et voilà, ça y est !\nT'es déjà comme chez toi dans ce monde !" + 13: "Ahaha ! Et voilà, ça y est !\nT’es déjà comme chez toi dans ce monde !" } }, "lass": { "encounter": { - 1: "Let's have a battle, shall we?", - 2: "You look like a new trainer. Let's have a battle!", - 3: "I don't recognize you. How about a battle?", - 4: "Let's have a fun Pokémon battle!", - 5: "I'll show you the ropes of how to really use Pokémon!", - 6: "A serious battle starts from a serious beginning! Are you sure you're ready?", - 7: "You're only young once. And you only get one shot at a given battle. Soon, you'll be nothing but a memory.", - 8: "You'd better go easy on me, OK? Though I'll be seriously fighting!", - 9: "School is boring. I've got nothing to do. Yawn. I'm only battling to kill the time." + 1: "Affrontons-nous, d’accord ?", + 2: "T’as l’air d’une nouvelle Dresseuse. Battons nous !", + 3: "Je te connais pas. Ça te dis de te battre ?", + 4: "Prenons du bon temps avec ce combat Pokémon !", + 5: "Je vais t’apprendre à te battre avec tes Pokémon !", + 6: "Un combat doit être pris au sérieux. T’es prête à te battre ?", + 7: "Tu seras pas jeune éternellement. T’as qu’une chance pendant un combat. Bientôt, tu seras plus qu’un souvenir.", + 8: "Tu ferais mieux d’y aller doucement avec moi. Mais je vais me battre sérieusement !", + 9: "Je m’ennuie à l’école. Y’a rien à y faire. *Baille*\nJe me bats juste pour passer le temps." }, "victory": { - 1: "That was impressive! I've got a lot to learn.", - 2: "I didn't think you'd beat me that bad…", - 3: "I hope we get to have a rematch some day.", - 4: "That was pretty amazingly fun! You've totally exhausted me…", - 5: "You actually taught me a lesson! You're pretty amazing!", - 6: "Seriously, I lost. That is, like, seriously depressing, but you were seriously cool.", - 7: "I don't need memories like this. Deleting memory…", - 8: "Hey! I told you to go easy on me! Still, you're pretty cool when you're serious.", - 9: "I'm actually getting tired of battling… There's gotta be something new to do…" + 1: "Wah, c’était impressionnant ! J’ai encore beaucoup à apprendre.", + 2: "Je pensais pas que je perdrais comme ça…", + 3: "J’espère que j’aurai ma revanche un jour.", + 4: "C’était super amusant ! Mais ce combat m’a épuisée…", + 5: "Tu m’as appris une belle leçon ! T’es vraiment incroyable !", + 6: "Vraiment ? J’ai perdu… ? C’est des choses qui arrivent, ça me déprime mais t’es vraiment très cool.", + 7: "J’ai pas besoin de ce genre de souvenirs.\n*Suppression de mémoire en cours…*", + 8: "Hé ! Je t’avais dit d’y aller doucement avec moi ! Mais t’es vraiment si cool quand tu te bats sérieusement…", + 9: "J’en ai marre des combats Pokémon…\nJe vais chercher d’autres trucs à faire…" } }, "breeder": { "encounter": { - 1: "Obedient Pokémon, selfish Pokémon… Pokémon have unique characteristics.", - 2: "Even though my upbringing and behavior are poor, I've raised my Pokémon well.", - 3: "Hmm, do you discipline your Pokémon? Pampering them too much is no good.", + 1: "Qu’ils soient obéissants ou égoïstes… Les Pokémon ont des caractéristiques uniques.", + 2: "Même si mes choix et ma personnalité ne sont pas fous, je pense quand même bien avoir élevé mes Pokémon.", + 3: "Hum, t’es pas trop laxiste avec tes Pokémon ?\nTrop les chouchouter n’est pas bon.", }, "victory": { - 1: "It is important to nurture and train each Pokémon's characteristics.", - 2: "Unlike my diabolical self, these are some good Pokémon.", - 3: "Too much praise can spoil both Pokémon and people.", + 1: "Il est primordial de nourir et développer toutes les caractéristiques de chaque Pokémon.", + 2: "Contrairement à moi, ces Pokémon ont un bon fond.", + 3: "Trop d’éloges peut ruiner les Pokémon et les gens.", }, "defeat": { - 1: "You should not get angry at your Pokémon, even if you lose a battle.", - 2: "Right? Pretty good Pokémon, huh? I'm suited to raising things.", - 3: "No matter how much you love your Pokémon, you still have to discipline them when they misbehave." + 1: "Tu ne devrais pas t’énerver sur tes Pokémon, même après une défaite.", + 2: "Alors ? Pas mal mes Pokémon, hein ? Je suis fait pour ça.", + 3: "Peut importe à quel point t’aimes tes Pokémon, il faut toujours de la discipline s’ils se comportent mal." } }, "breeder_female": { "encounter": { - 1: "Pokémon never betray you. They return all the love you give them.", - 2: "Shall I give you a tip for training good Pokémon?", - 3: "I have raised these very special Pokémon using a special method." + 1: "Les Pokémon ne trahissent jamais. Ils te rendront toujours l’amour que tu leur donne.", + 2: "Puis-je te donner une astuce pour mieux élever tes Pokémon ?", + 3: "J’ai élevé mes Pokémon en utilisant une méthode très spéciale." }, "victory": { - 1: "Ugh… It wasn't supposed to be like this. Did I administer the wrong blend?", - 2: "How could that happen to my Pokémon… What are you feeding your Pokémon?", - 3: "If I lose, that tells you I was just killing time. It doesn't damage my ego at all." + 1: "Arg… C’était pas supposé se passer comme ça. Leur ai-je administré la mauvaise préparation ?", + 2: "Comment ça a pu arriver…\nAvec quoi nourris-tu tes Pokémon ?", + 3: "Si je perds, c’est juste pour te dire que je tuais le temps. Mon ego n’est absolument pas touché…" }, "defeat": { - 1: "This proves my Pokémon have accepted my love.", - 2: "The real trick behind training good Pokémon is catching good Pokémon.", - 3: "Pokémon will be strong or weak depending on how you raise them." + 1: "C’est la preuve que mes Pokémon reconnaissent tout mon amour.", + 2: "Le seul secret derrière des Pokémon bien entrainés, c’est surtout d’en capturer des bons.", + 3: "La force des Pokémon dépend de ta capacité à savoir les élever correctement." } }, "fisherman": { "encounter": { - 1: "Aack! You made me lose a bite!\nWhat are you going to do about it?", - 2: "Go away! You're scaring the Pokémon!", - 3: "Let's see if you can reel in a victory!", + 1: "Aaah non ! J’avais une touche !\nTu comptes faire quoi pour arranger ça ?", + 2: "Bouge de là ! Tu fais peur aux Pokémon !", + 3: "Voyons si t’arrives à ferrer une victoire !", }, "victory": { - 1: "Just forget about it.", - 2: "Next time, I'll be reelin' in the triumph!", - 3: "Guess I underestimated the currents this time.", + 1: "Vas-y là, oublie.", + 2: "La prochaine fois, je vais me repêcher !", + 3: "Je présume que j’ai sous-estimé les courants…", }, }, "fisherman_female": { "encounter": { - 1: "Woah! I've hooked a big one!", - 2: "Line's in, ready to reel in success!", - 3: "Ready to make waves!" + 1: "Oh la belle prise !", + 2: "Ma ligne est en place, prête à ferrer le succès !", + 3: "Prête à faire des vagues !" }, "victory": { - 1: "I'll be back with a stronger hook.", - 2: "I'll reel in victory next time.", - 3: "I'm just sharpening my hooks for the comeback!" + 1: "Je suppose que je vais avoir besoin d’un plus gros hameçon.", + 2: "La ligne s’est brisée, j’ai pas pu la ferrer…", + 3: "Attends que j’aiguise mes hameçons pour la revanche !" }, }, "swimmer": { "encounter": { - 1: "Time to dive in!", - 2: "Let's ride the waves of victory!", - 3: "Ready to make a splash!", + 1: "C’est l’heure de plonger dans le vif !", + 2: "C’est le moment de surfer sur les vagues de la victoire !", + 3: "Je vais t’éclabousser de mon talent !", }, "victory": { - 1: "Drenched in defeat!", - 2: "A wave of defeat!", - 3: "Back to shore, I guess.", + 1: "Tu m’as complètement séché", + 2: "Il semblerait que ce soit celles de la défaite…", + 3: "Retour sur la terre ferme je suppose", }, }, "backpacker": { "encounter": { - 1: "Pack up, game on!", - 2: "Let's see if you can keep pace!", - 3: "Gear up, challenger!", - 4: "I've spent 20 years trying to find myself… But where am I?" + 1: "Fais ton sac, on y va !", + 2: "Voyons si t’arrives à garder le rythme !", + 3: "Accélère le pas, camarade !", + 4: "J’ai passé 20 ans à la recherche de moi-même…\nMais où suis-je ?" }, "victory": { - 1: "Tripped up this time!", - 2: "Oh, I think I'm lost.", - 3: "Dead end!", - 4: "Wait up a second! Hey! Don't you know who I am?" + 1: "J’ai trébuché !", + 2: "Ah, je crois que je me suis paumé.", + 3: "Ah, une impasse !", + 4: "Hé ! Attends une seconde…\nTu saurais pas qui je suis ?" }, }, "ace_trainer": { "encounter": { - 1: "You seem quite confident.", - 2: "Your Pokémon… Show them to me…", - 3: "Because I'm an Ace Trainer, people think I'm strong.", - 4: "Are you aware of what it takes to be an Ace Trainer?" + 1: "T’as l’air plutôt confiante.", + 2: "Tes Pokémon… Montre-les-moi…", + 3: "Les gens pensent que je suis fort par que je suis un Topdresseur.", + 4: "T’es au courant de ce que ça signifie d’être un Topdresseur ?" }, "victory": { - 1: "Yes… You have good Pokémon…", - 2: "What?! But I'm a battling genius!", - 3: "Of course, you are the main character!", - 4: "OK! OK! You could be an Ace Trainer!" + 1: "Très bien… T’as de bons Pokémon…", + 2: "Quoi ?! Mais c'est moi le génie des combats !", + 3: "Évidemment que t’es le personnage principal !", + 4: "OK ! OK ! Tu pourrais être une Topdresseuse !" }, "defeat": { - 1: "I am devoting my body and soul to Pokémon battles!", - 2: "All within my expectations… Nothing to be surprised about…", - 3: "I thought I'd grow up to be a frail person who looked like they would break if you squeezed them too hard.", - 4: "Of course I'm strong and don't lose. It's important that I win gracefully." + 1: "Je me dévoue corps et âme aux combats Pokémon !", + 2: "Comme prévu… Vraiment aucune surprise…", + 3: "Et moi qui pensais qu’en grandissant, j’allais rester frêle et fragile, à me briser à la moindre étreinte.", + 4: "Évidemment que je suis fort et encore moins un perdant. C’est important de gagner avec grâce." } }, "parasol_lady": { "encounter": { - 1: "Time to grace the battlefield with elegance and poise!", + 1: "Honorons ce terrain de combat avec élégance et équilibre !", }, "victory": { - 1: "My elegance remains unbroken!", + 2: "Mon élégance demeure inébranlable !", } }, "twins": { @@ -2954,7 +2954,7 @@ export const PGFdialogue: DialogueTranslationEntries = { 1: "Mes anciens collaborateurs m’attendent.\nComptes-tu m’en empêcher ?" }, "victory": { - 1: "Comment c'est possible… ? Le grand dessein de la Team Rocket n’est plus qu’une illusion…" + 1: "Comment c’est possible… ? Le grand dessein de la Team Rocket n’est plus qu’une illusion…" }, "defeat": { 1: "La Team Rocket renaitra, et je dominerai le monde !" @@ -2976,10 +2976,10 @@ export const PGFdialogue: DialogueTranslationEntries = { 1: "T’es le dernier rempart entravant mes objectifs.\nPrépare-toi à mon ultime riposte ! Hahahaha !" }, "victory": { - 1: "Ce… Ce n'est pas… Gnn…" + 1: "Ce… Ce n’est pas… Gnn…" }, "defeat": { - 1: "L'heure est venue…\nJe vais transformer cette planète en paradis pour l’humanité." + 1: "L’heure est venue…\nJe vais transformer cette planète en paradis pour l’humanité." } }, "aqua_boss_archie_1": { @@ -3061,7 +3061,7 @@ export const PGFdialogue: DialogueTranslationEntries = { }, "flare_boss_lysandre_2": { "encounter": { - 1: "Ton future ou le mien… Voyons lequel mérite plus." + 1: "Ton futur ou le mien…\nVoyons lequel mérite plus d’aboutir." }, "victory": { 1: "Ohhhh… !" @@ -4799,26 +4799,26 @@ export const PGFdialogue: DialogueTranslationEntries = { "encounter": { 1: `@c{smile}Ah, je te cherchais ! Je savais que t’étais pressée de partir, mais je m’attendais quand même à un au revoir… $@c{smile_eclosed}T’as finalement décidé de réaliser ton rêve ?\nJ’ai peine à y croire. - $@c{serious_smile_fists}Vu que t’es là, ça te dis un petit combat ?\nJe voudrais quand même m’assurer que t'es prête. + $@c{serious_smile_fists}Vu que t’es là, ça te dis un petit combat ?\nJe voudrais quand même m’assurer que t’es prête. $@c{serious_mopen_fists}Surtout ne te retiens pas et donne-moi tout ce que t’as !` }, "victory": { 1: `@c{shock}Wah… Tu m’as vraiment lavé.\nT’es vraiment une débutante ? - $@c{smile}T'as peut-être eu de la chance, mais…\nPeut-être que t’arriveras jusqu’au bout du chemin. - $D'ailleurs, le prof m’a demandé de te filer ces objets.\nIls ont l’air sympas. + $@c{smile}T’as peut-être eu de la chance, mais…\nPeut-être que t’arriveras jusqu’au bout du chemin. + $D’ailleurs, le prof m’a demandé de te filer ces objets.\nIls ont l’air sympas. $@c{serious_smile_fists}Bonne chance à toi !` }, }, "rival_female": { "encounter": { - 1: `@c{smile_wave}Ah, je te cherchais ! Je t’ai cherché partout !\n@c{angry_mopen}On oublie de dire au revoir à sa meilleure amie ? + 1: `@c{smile_wave}Ah, je te cherchais ! Je t’ai cherchée partout !\n@c{angry_mopen}On oublie de dire au revoir à sa meilleure amie ? $@c{smile_ehalf}T’as décidé de réaliser ton rêve, hein ?\nCe jour est donc vraiment arrivé… - $@c{smile}Je veux bien te pardonner de m’avoir oubliée, à une conditon. @c{smile_wave_wink}Que tu m’affronte ! + $@c{smile}Je veux bien te pardonner de m’avoir oubliée,\nà une conditon. @c{smile_wave_wink}Que tu m’affronte ! $@c{angry_mopen}Donne tout ! Ce serait dommage que ton aventure finisse avant d’avoir commencé, hein ?` }, "victory": { - 1: `@c{shock}Tu viens de commencer et t’es déjà si fort ?!@d{96}\n@c{angry}T'as triché non ? Avoue ! - $@c{smile_wave_wink}J'déconne !@d{64} @c{smile_eclosed}J'ai perdu dans les règles… J’ai le sentiment que tu vas très bien t’en sortir. + 1: `@c{shock}Tu viens de commencer et t’es déjà si forte ?!@d{96}\n@c{angry}T’as triché non ? Avoue ! + $@c{smile_wave_wink}J’déconne !@d{64} @c{smile_eclosed}J’ai perdu dans les règles…\nJ’ai le sentiment que tu vas très bien t’en sortir. $@c{smile}D’ailleurs, le prof veut que je te donne ces quelques objets. Ils te seront utiles, pour sûr ! $@c{smile_wave}Fais de ton mieux, comme toujours !\nJe crois fort en toi !` }, @@ -4826,14 +4826,14 @@ export const PGFdialogue: DialogueTranslationEntries = { "rival_2": { "encounter": { 1: `@c{smile}Hé, toi aussi t’es là ?\n@c{smile_eclosed}Toujours invaincue, hein… ? - $@c{serious_mopen_fists}Je sais que j’ai l’air de t’avoir suivie ici, mais c'est pas complètement vrai. - $@c{serious_smile_fists}Pour être honnête, ça me démangeait d’avoir une revanche depuis que tu m'as battu. + $@c{serious_mopen_fists}Je sais que j’ai l’air de t’avoir suivie ici, mais c’est pas complètement vrai. + $@c{serious_smile_fists}Pour être honnête, ça me démangeait d’avoir une revanche depuis que tu m’as battu. $Je me suis beaucoup entrainé, alors sois sure que je vais pas retenir mes coups cette fois. $@c{serious_mopen_fists}Et comme la dernière fois, ne te retiens pas !\nC’est parti !` }, "victory": { 1: `@c{neutral_eclosed}Oh. Je crois que j’ai trop pris la confiance. - $@c{smile}Pas grave, c'est OK. Je me doutais que ça arriverait.\n@c{serious_mopen_fists}Je vais juste devoir encore plus m’entrainer !\n + $@c{smile}Pas grave, c’est OK. Je me doutais que ça arriverait.\n@c{serious_mopen_fists}Je vais juste devoir encore plus m’entrainer !\n $@c{smile}Ah, et pas que t’aies réellement besoin d’aide, mais j’ai ça en trop sur moi qui pourrait t’intéresser.\n $@c{serious_smile_fists}Mais n’espère plus en avoir d’autres !\nJe peux pas passer mon temps à aider mon adversaire. $@c{smile}Bref, prends soin de toi !` @@ -4841,11 +4841,11 @@ export const PGFdialogue: DialogueTranslationEntries = { }, "rival_2_female": { "encounter": { - 1: `@c{smile_wave}Hé, sympa de te croiser ici. T’as toujours l’air invaincu. @c{angry_mopen}Eh… Pas mal ! - $@c{angry_mopen}Je sais à quoi tu penses et non, je t’espionne pas. @c{smile_eclosed}C’est juste que j’étais aussi dans le coin. + 1: `@c{smile_wave}Hé, sympa de te croiser ici. T’as toujours l’air invaincue. @c{angry_mopen}Eh… Pas mal ! + $@c{angry_mopen}Je sais à quoi tu penses et non, je t’espionne pas.\n@c{smile_eclosed}C’est juste que j’étais aussi dans le coin. $@c{smile_ehalf}Heureuse pour toi, mais je veux juste te rappeler que c’est pas grave de perdre parfois. $@c{smile}On apprend de nos erreurs, souvent plus que si on ne connaissait que le succès. - $@c{angry_mopen}Dans tous les cas je me suis bien entrainée pour cette revanche, t'as intérêt à tout donner !` + $@c{angry_mopen}Dans tous les cas je me suis bien entrainée pour cette revanche, t’as intérêt à tout donner !` }, "victory": { 1: `@c{neutral}Je… J’étais pas encore supposée perdre… @@ -4876,7 +4876,7 @@ export const PGFdialogue: DialogueTranslationEntries = { 1: `@c{smile_wave}Ça fait une éternité ! Toujours debout hein ?\n@c{angry}Tu commences à me pousser à bout là. @c{smile_wave_wink}T’inquiètes j’déconne ! $@c{smile_ehalf}Mais en vrai, ta maison te manque pas ? Ou… Moi ?\nJ… Je veux dire… Tu me manques vraiment beaucoup. $@c{smile_eclosed}Je te soutiendrai toujours dans tes ambitions, mais la vérité est que tu finiras par perdre un jour ou l’autre. - $@c{smile}Quand ça arrivera, je serai là pour toi, comme toujours.\n@c{angry_mopen}Maintenant, montre-moi à quel point t’es devenu fort !` + $@c{smile}Quand ça arrivera, je serai là pour toi, comme toujours.\n@c{angry_mopen}Maintenant, montre-moi à quel point t’es devenue forte !` }, "victory": { 1: "@c{shock}Après tout ça… Ça te suffit toujours pas… ?\nTu reviendras jamais à ce rythme…" @@ -4893,8 +4893,8 @@ export const PGFdialogue: DialogueTranslationEntries = { $@c{serious_mhalf_fists}J’ai appris à maximiser tout mon potentiel en m’entrainant d’arrachepied. $@c{smile}C’est fou tout le temps que tu peux te dégager si tu dors pas en sacrifiant ta vie sociale. $@c{serious_mopen_fists}Plus rien n’a d’importance désormais, pas tant que j’aurai pas gagné. - $@c{neutral_eclosed}J'ai atteint un stade où je ne peux plus perdre.\n@c{smile_eclosed}Je présume que ta philosophie était pas si fausse finalement. - $@c{angry_mhalf}La défaite, c'est pour les faibles, et je ne suis plus un faible. + $@c{neutral_eclosed}J’ai atteint un stade où je ne peux plus perdre.\n@c{smile_eclosed}Je présume que ta philosophie était pas si fausse finalement. + $@c{angry_mhalf}La défaite, c’est pour les faibles, et je ne suis plus un faible. $@c{serious_mopen_fists}Tiens-toi prête.` }, "victory": { @@ -4904,20 +4904,20 @@ export const PGFdialogue: DialogueTranslationEntries = { "rival_4_female": { "encounter": { 1: `@c{neutral}C’est moi ! Tu m’as pas encore oubliée… n’est-ce pas ? - $@c{smile}Tu devrais être fier d’être arrivé aussi loin. GG !\nMais c’est certainement pas la fin de ton aventure. - $@c{smile_eclosed}T’as éveillé en moi quelque chose que j’ignorais.\nTout mon temps passe dans l'entrainement. + $@c{smile}Tu devrais être fière d’être arrivée aussi loin. GG !\nMais c’est certainement pas la fin de ton aventure. + $@c{smile_eclosed}T’as éveillé en moi quelque chose que j’ignorais.\nTout mon temps passe dans l’entrainement. $@c{smile_ehalf}Je dors et je mange à peine, je m’entraine juste tous les jours, et deviens de plus en plus forte. $@c{neutral}En vrai, Je… J’ai de la peine à me reconnaitre. $Mais maintenant, je suis au top de mes capacités.\nJe doute que tu sois de nouveau capable de me battre. $Et tu sais quoi ? Tout ça, c’est de ta faute.\n@c{smile_ehalf}Et j’ignore si je dois te remercier ou te haïr. - $@c{angry_mopen}Tiens-toi prêt.` + $@c{angry_mopen}Tiens-toi prête.` }, "victory": { 1: "@c{neutral}Que…@d{64} Qui es-tu ?" }, "defeat": { - 1: "$@c{smile}Tu devrais être fier d’être arrivé jusque là." + 1: "$@c{smile}Tu devrais être fière d’être arrivé jusque là." } }, "rival_5": { @@ -4949,7 +4949,7 @@ export const PGFdialogue: DialogueTranslationEntries = { $@c{neutral_eclosed}J’ignore si je serai capable de l’accomplir, mais je ferai tout ce qui est en mon pouvoir. $@c{neutral}Cet endroit est terrifiant… Et pourtant il m’a l’air familier, comme si j’y avais déjà mis les pieds. $@c{serious_mhalf_fists}Tu ressens la même chose, pas vrai ? - $@c{serious}…et c’est comme si quelque chose ici me parlait. + $@c{serious}… et c’est comme si quelque chose ici me parlait. $Comme si c’était tout ce que ce monde avait toujours connu. $Ces précieux moments ensemble semblent si proches ne sont rien de plus qu’un lointain souvenir. $@c{neutral_eclosed}D’ailleurs, qui peut dire aujourd’hui qu’ils ont pu être réels ? @@ -4958,7 +4958,7 @@ export const PGFdialogue: DialogueTranslationEntries = { $@c{serious_mopen_fists}Si tu ne parviens à pas me battre ici et maintenant, tu n’as aucune chance.` }, "victory": { - 1: `@c{smile_eclosed}J'ai fait ce que je j'avais à faire. + 1: `@c{smile_eclosed}J’ai fait ce que j’avais à faire. $Promets-moi juste une chose.\n@c{smile}Après avoir réparé ce monde… Rentre à la maison.` }, }, @@ -4975,13 +4975,13 @@ export const PGFdialogue: DialogueTranslationEntries = { $Comme… si c’était tout ce que ce monde avait toujours connu. $@c{smile_eclosed}J’ai le sentiment que nos précieux moments ensemble sont devenus si flous. $@c{smile_ehalf}Ont-ils au moins été réels ? Tout semble si loin maintenant… - $@c{angry_mopen}Il faut que tu persévères. Si tu t’arrêtes, ça n'aura jamais de fin et t’es le seul à en être capable. + $@c{angry_mopen}Il faut que tu persévères. Si tu t’arrêtes, ça n’aura jamais de fin et t’es le seul à en être capable. $@c{smile_ehalf}Je… j’ignore le sens de tout ça… Mais je sais que c’est la réalité. $@c{neutral}Si tu ne parviens pas à me battre ici et maintenant, tu n’as aucune chance.` }, "victory": { - 1: `@c{smile_ehalf}Je… Je crois que j'ai rempli ma mission… - $@c{smile_eclosed}Promets-moi… Après avoir réparé ce monde… Reviens à la maison sain et sauf. + 1: `@c{smile_ehalf}Je… Je crois que j’ai rempli ma mission… + $@c{smile_eclosed}Promets-moi… Après avoir réparé ce monde… Reviens à la maison saine et sauve. $@c{smile_ehalf}… Merci.` }, @@ -5021,7 +5021,7 @@ export const PGFbattleSpecDialogue: SimpleTranslationEntries = { // Dialogue that does not fit into any other category (e.g. tutorial messages, or the end of the game). For when the player character is male export const PGMmiscDialogue: SimpleTranslationEntries = { "ending": - `@c{smile}Oh ? T’as gagné ?@d{96} @c{smile_eclosed}J'aurais dû le savoir.\nMais de voilà de retour. + `@c{smile}Oh ? T’as gagné ?@d{96} @c{smile_eclosed}J’aurais dû le savoir.\nMais de voilà de retour. $@c{smile}C’est terminé.@d{64} T’as brisé ce cycle infernal. $@c{serious_smile_fists}T’as aussi accompli ton rêve non ?\nTu n’as pas connu la moindre défaite. $@c{neutral}Je suis le seul à me souvenir de ce que t’as fait.@d{96}\nJe pense que ça ira, non ? @@ -5029,7 +5029,7 @@ export const PGMmiscDialogue: SimpleTranslationEntries = { $@c{smile_eclosed}Bref, j’en ai un peu marre de ce endroit, pas toi ? Rentrons à la maison. $@c{serious_smile_fists}On se fera un p’tit combat une fois rentrés ?\nSi t’es d’accord.`, "ending_female": - `@c{shock}T’es revenu ?@d{32} Ça veut dire…@d{96} que t’as gagné ?!\n@c{smile_ehalf}J'aurais dû le savoir. + `@c{shock}T’es revenu ?@d{32} Ça veut dire…@d{96} que t’as gagné ?!\n@c{smile_ehalf}J’aurais dû le savoir. $@c{smile_eclosed}Bien sûr… J’ai toujours eu ce sentiment.\n@c{smile}C’est fini maitenant hein ? T’as brisé ce cycle. $@c{smile_ehalf}T’as aussi accompli ton rêve non ?\nTu n’as pas connu la moindre défaite. $Je serai la seule à me souvenir de ce que t’as fait.\n@c{angry_mopen}Je tâcherai de ne pas oublier ! @@ -5067,76 +5067,76 @@ export const PGMdoubleBattleDialogue: DialogueTranslationEntries = { }, "tate_liza_double": { "encounter": { - 1: `Lévy : Are you suprised? - $Tatia : We are two gym leaders at once! - $Lévy : We are twins! - $Tatia : We dont need to talk to understand each other! - $Lévy : Twice the power... - $Tatia : Can you handle it?`, + 1: `Lévy : Héhéhé… Tu en fais une drôle de tête. + $Tatia : Tu ne t’attendais pas à rencontrer deux Champions, n’est-ce pas ? + $Lévy : Nous sommes des jumeaux ! + $Tatia : Nous n’avons pas besoin de parler entre nous ! + $Lévy : Tu crois pouvoir briser… + $Tatia : … Notre duo parfait ?`, }, "victory": { - 1: `Lévy : What? Our combination was perfect! - $Tatia : Looks like we need to train more...`, + 1: `Lévy : Quoi ? Notre combinaison était parfaite ! + $Tatia : Nous avons encore besoin d’entrainement…`, }, }, "liza_tate_double": { "encounter": { - 1: `Tatia : Hihihi... Are you suprised? - $Lévy : Yes, we are really two gym leaders at once! - $Tatia : This is my twin brother Tate! - $Lévy : And this is my twin sister Liza! - $Tatia : Don't you think we are a perfect combination?` + 1: `Tatia : Hihih… Si tu voyais ta tête ! + $Lévy : Oui, nous sommes deux Champions en un ! + $Tatia : Voici mon frère, Lévy… + $Lévy : … Et ma sœur, Tatia ! + $Tatia : Tu ne penses pas que notre combinaison est parfaite ?` }, "victory": { - 1: `Tatia : Are we... - $Lévy : ...not as strong as we thought?`, + 1: `Tatia : Quoi ? Notre combinaison… + $Lévy : … a échoué !`, }, }, "wallace_steven_double": { "encounter": { - 1: `Pierre R. : Marc, let's show them the power of the champions! - $Marc : We will show you the power of Hoenn! - $Pierre R. : Let's go!`, + 1: `Pierre R. : Marc, montrons-lui la puissance des Maitres ! + $Marc : Tu vas gouter au pouvoir de Hoenn ! + $Pierre R. : C’est parti !`, }, "victory": { - 1: `Pierre R. : That was a great battle! - $Marc : We will win next time!`, + 1: `Pierre R. : C’était un beau combat ! + $Marc : Ce sera notre tour la prochaine fois !`, }, }, "steven_wallace_double": { "encounter": { - 1: `Pierre R. : Do you have any rare Pokémon? - $Marc : Pierre... We are here for a battle, not to show off our pokémon. - $Pierre R. : Oh... I see... Let's go then!`, + 1: `Pierre R. : Excuse-moi, aurais-tu des Pokémon rares ? + $Marc : Pierre… Nous sommes là pour nous battre, pas pour frimer avec nos Pokémon. + $Pierre R. : Oh… Je vois… Commençons alors !`, }, "victory": { - 1: `Pierre R. : Now that we are done with the battle, let's show off our pokémon! - $Marc : Pierre...`, + 1: `Pierre R. : Bien, maintenant que ce combat est clos, montrons-nous nos Pokémon ! + $Marc : Pierre…`, }, }, "alder_iris_double": { "encounter": { - 1: `Goyah : We are the strongest trainers in Unova! - $Iris : Fights against strong trainers are the best!`, + 1: `Goyah : Nous sommes l’élite des Dresseurs d’Unys ! + $Iris : Rien de mieux que des combats contre des prodiges !`, }, "victory": { - 1: `Goyah : Wow! You are super strong! - $Iris : We will win next time!`, + 1: `Goyah : INCROYABLE ! T’es trop doué ! + $Iris : On gagnera la prochaine fois !`, }, }, "iris_alder_double": { "encounter": { - 1: `Iris : Welcome Challenger! I am THE Unova Champion! - $Goyah : Iris, aren't you a bit too excited?`, + 1: `Iris : Bienvenue, Dresseur ! Je suis LA Maitresse d’Unys ! + $Goyah : Iris, concentre-toi s’il te plait…`, }, "victory": { - 1: `Iris : A loss like this is not easy to take... - $Goyah : But we will only get stronger with every loss!`, + 1: `Iris : On a tout donné et pourtant… + $Goyah : Cette défaite ne pourra que nous être bénéfique !`, }, }, "piers_marnie_double": { "encounter": { - 1: `Rosemary : Frérot, montrons-leur la puissance de Smashings ! + 1: `Rosemary : Frérot, montrons-lui la puissance de Smashings ! $Peterson : Nous sommes les ténèbres !`, }, "victory": { @@ -5147,10 +5147,10 @@ export const PGMdoubleBattleDialogue: DialogueTranslationEntries = { "marnie_piers_double": { "encounter": { 1: `Peterson : Chauds pour un concert ? - $Rosemary : Frérot… Ils sont pas là pour chanter, mais se battre…`, + $Rosemary : Frérot… Il est pas là pour chanter, mais se battre…`, }, "victory": { - 1: `Peterson : Ça c'est du rock ! + 1: `Peterson : Ça c’est du rock ! $Rosemary : Frérot…`, }, }, @@ -5182,76 +5182,76 @@ export const PGFdoubleBattleDialogue: DialogueTranslationEntries = { }, "tate_liza_double": { "encounter": { - 1: `Lévy : Are you suprised? - $Tatia : We are two gym leaders at once! - $Lévy : We are twins! - $Tatia : We dont need to talk to understand each other! - $Lévy : Twice the power... - $Tatia : Can you handle it?`, + 1: `Lévy : Héhéhé… Tu en fais une drôle de tête. + $Tatia : Tu ne t’attendais pas à rencontrer deux Champions, n’est-ce pas ? + $Lévy : Nous sommes des jumeaux ! + $Tatia : Nous n’avons pas besoin de parler entre nous ! + $Lévy : Tu crois pouvoir briser… + $Tatia : … Notre duo parfait ?`, }, "victory": { - 1: `Lévy : What? Our combination was perfect! - $Tatia : Looks like we need to train more...`, + 1: `Lévy : Quoi ? Notre combinaison était parfaite ! + $Tatia : Nous avons encore besoin d’entrainement…`, }, }, "liza_tate_double": { "encounter": { - 1: `Tatia : Hihihi... Are you suprised? - $Lévy : Yes, we are really two gym leaders at once! - $Tatia : This is my twin brother Tate! - $Lévy : And this is my twin sister Liza! - $Tatia : Don't you think we are a perfect combination?` + 1: `Tatia : Hihih… Si tu voyais ta tête ! + $Lévy : Oui, nous sommes deux Champions en un ! + $Tatia : Voici mon frère, Lévy… + $Lévy : … Et ma sœur, Tatia ! + $Tatia : Tu ne penses pas que notre combinaison est parfaite ?` }, "victory": { - 1: `Tatia : Are we... - $Lévy : ...not as strong as we thought?`, + 1: `Tatia : Quoi ? Notre combinaison… + $Lévy : … a échoué !`, }, }, "wallace_steven_double": { "encounter": { - 1: `Pierre R. : Marc, let's show them the power of the champions! - $Marc : We will show you the power of Hoenn! - $Pierre R. : Let's go!`, + 1: `Pierre R. : Marc, montrons-lui la puissance des Maitres ! + $Marc : Tu vas gouter au pouvoir de Hoenn ! + $Pierre R. : C’est parti !`, }, "victory": { - 1: `Pierre R. : That was a great battle! - $Marc : We will win next time!`, + 1: `Pierre R. : C’était un beau combat ! + $Marc : Ce sera notre tour la prochaine fois !`, }, }, "steven_wallace_double": { "encounter": { - 1: `Pierre R. : Do you have any rare Pokémon? - $Marc : Pierre... We are here for a battle, not to show off our pokémon. - $Pierre R. : Oh... I see... Let's go then!`, + 1: `Pierre R. : Excuse-moi, aurais-tu des Pokémon rares ? + $Marc : Pierre… Nous sommes là pour nous battre, pas pour frimer avec nos Pokémon. + $Pierre R. : Oh… Je vois… Commençons alors !`, }, "victory": { - 1: `Pierre R. : Now that we are done with the battle, let's show off our pokémon! - $Marc : Pierre...`, + 1: `Pierre R. : Bien, maintenant que ce combat est clos, montrons-nous nos Pokémon ! + $Marc : Pierre…`, }, }, "alder_iris_double": { "encounter": { - 1: `Goyah : We are the strongest trainers in Unova! - $Iris : Fights against strong trainers are the best!`, + 1: `Goyah : Nous sommes l’élite des Dresseurs d’Unys ! + $Iris : Rien de mieux que des combats contre des prodiges !`, }, "victory": { - 1: `Goyah : Wow! You are super strong! - $Iris : We will win next time!`, + 1: `Goyah : INCROYABLE ! T’es trop doué ! + $Iris : On gagnera la prochaine fois !`, }, }, "iris_alder_double": { "encounter": { - 1: `Iris : Welcome Challenger! I am THE Unova Champion! - $Goyah : Iris, aren't you a bit too excited?`, + 1: `Iris : Bienvenue, Dresseur ! Je suis LA Maitresse d’Unys ! + $Goyah : Iris, concentre-toi s’il te plait…`, }, "victory": { - 1: `Iris : A loss like this is not easy to take... - $Goyah : But we will only get stronger with every loss!`, + 1: `Iris : On a tout donné et pourtant… + $Goyah : Cette défaite ne pourra que nous être bénéfique !`, }, }, "piers_marnie_double": { "encounter": { - 1: `Rosemary : Frérot, montrons-leur la puissance de Smashings ! + 1: `Rosemary : Frérot, montrons-lui la puissance de Smashings ! $Peterson : Nous sommes les ténèbres !`, }, "victory": { @@ -5262,10 +5262,10 @@ export const PGFdoubleBattleDialogue: DialogueTranslationEntries = { "marnie_piers_double": { "encounter": { 1: `Peterson : Chauds pour un concert ? - $Rosemary : Frérot… Ils sont pas là pour chanter, mais se battre…`, + $Rosemary : Frérot… Elle est pas là pour chanter, mais se battre…`, }, "victory": { - 1: `Peterson : Ça c'est du rock ! + 1: `Peterson : Ça c’est du rock ! $Rosemary : Frérot…`, }, }, diff --git a/src/locales/fr/menu-ui-handler.ts b/src/locales/fr/menu-ui-handler.ts index b8446b1aa68..3eabc132f6b 100644 --- a/src/locales/fr/menu-ui-handler.ts +++ b/src/locales/fr/menu-ui-handler.ts @@ -20,5 +20,5 @@ export const menuUiHandler: SimpleTranslationEntries = { "exportData": "Exporter données", "cancel": "Retour", "losingProgressionWarning": "Vous allez perdre votre progression depuis le début du combat. Continuer ?", - "noEggs": "You are not hatching\nany eggs at the moment!" + "noEggs": "Vous ne faites actuellement\néclore aucun Œuf !" } as const; diff --git a/src/locales/fr/modifier-type.ts b/src/locales/fr/modifier-type.ts index 0423751e937..2f834dfc740 100644 --- a/src/locales/fr/modifier-type.ts +++ b/src/locales/fr/modifier-type.ts @@ -4,7 +4,7 @@ export const modifierType: ModifierTypeTranslationEntries = { ModifierType: { "AddPokeballModifierType": { name: "{{pokeballName}} x{{modifierCount}}", - description: "Recevez {{modifierCount}} {{pokeballName}}·s (Inventaire : {{pokeballAmount}})\nTaux de capture : {{catchRate}}.", + description: "Recevez {{modifierCount}} {{pokeballName}}·s. (Inventaire : {{pokeballAmount}})\nTaux de capture : {{catchRate}}", }, "AddVoucherModifierType": { name: "{{voucherTypeName}} x{{modifierCount}}", @@ -101,7 +101,7 @@ export const modifierType: ModifierTypeTranslationEntries = { }, "TmModifierTypeWithInfo": { name: "CT{{moveId}} - {{moveName}}", - description: "Apprend la capacité {{moveName}} à un Pokémon\n(Maintenez C ou Maj pour plus d’infos).", + description: "Apprend la capacité {{moveName}} à un Pokémon.\n(Maintenez C ou Maj pour plus d’infos)", }, "EvolutionItemModifierType": { description: "Permet à certains Pokémon d’évoluer.", diff --git a/src/locales/fr/pokemon-info.ts b/src/locales/fr/pokemon-info.ts index 641b372f3d3..a10944173e5 100644 --- a/src/locales/fr/pokemon-info.ts +++ b/src/locales/fr/pokemon-info.ts @@ -14,8 +14,8 @@ export const pokemonInfo: PokemonInfoTranslationEntries = { "SPDEFshortened": "DéfSp", "SPD": "Vitesse", "SPDshortened": "Vit", - "ACC": "Accuracy", - "EVA": "Evasiveness" + "ACC": "Précison", + "EVA": "Esquive" }, Type: { diff --git a/src/locales/fr/starter-select-ui-handler.ts b/src/locales/fr/starter-select-ui-handler.ts index 84fb56c9ccc..bddc740681e 100644 --- a/src/locales/fr/starter-select-ui-handler.ts +++ b/src/locales/fr/starter-select-ui-handler.ts @@ -31,7 +31,7 @@ export const starterSelectUiHandler: SimpleTranslationEntries = { "selectMoveSwapWith": "Sélectionnez laquelle échanger avec", "unlockPassive": "Débloquer Passif", "reduceCost": "Diminuer le cout", - "sameSpeciesEgg": "Buy an Egg", + "sameSpeciesEgg": "Acheter un Œuf", "cycleShiny": ": » Chromatiques", "cycleForm": ": » Formes", "cycleGender": ": » Sexes", diff --git a/src/locales/fr/status-effect.ts b/src/locales/fr/status-effect.ts index f4f210406c6..ca8c46043e7 100644 --- a/src/locales/fr/status-effect.ts +++ b/src/locales/fr/status-effect.ts @@ -51,7 +51,7 @@ export const statusEffect: StatusEffectTranslationEntries = { description: "gelé", obtain: "{{pokemonNameWithAffix}} est\ngelé !", obtainSource: "{{pokemonNameWithAffix}} est\ngelé par {{sourceText}} !", - activation: "{{pokemonNameWithAffix}}est gelé !\nIl ne peut plus attaquer !", + activation: "{{pokemonNameWithAffix}} est gelé !\nIl ne peut plus attaquer !", overlap: "{{pokemonNameWithAffix}} est\ndéjà gelé.", heal: "{{pokemonNameWithAffix}} n’est\nplus gelé !" }, From 696d8f27f5fa3fbb1ac031c987282652b7ef5cb8 Mon Sep 17 00:00:00 2001 From: Lugiad Date: Thu, 4 Jul 2024 22:40:54 +0200 Subject: [PATCH 11/37] [Localization] modifier-select-ui-handler Locales (#2527) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Update modifier-select-ui-handler.ts * Update i18next.d.ts * Add files via upload * Add files via upload * Add files via upload * Add files via upload * Add files via upload * Add files via upload * Add files via upload * Add files via upload * Add files via upload * Add files via upload * Update modifier-select-ui-handler.ts * Update modifier-select-ui-handler.ts * Update modifier-select-ui-handler.ts * Update modifier-select-ui-handler.ts * Update modifier-select-ui-handler.ts * Update modifier-select-ui-handler.ts * Update modifier-select-ui-handler.ts * Update modifier-select-ui-handler.ts * Update modifier-select-ui-handler.ts * Update modifier-select-ui-handler.ts * Update src/locales/ko/modifier-select-ui-handler.ts Co-authored-by: yun <97648143+ddullgi@users.noreply.github.com> * Update src/locales/zh_CN/modifier-select-ui-handler.ts Co-authored-by: Yonmaru40 <47717431+40chyan@users.noreply.github.com> * Update src/locales/de/modifier-select-ui-handler.ts Co-authored-by: Jannik Tappert <38758606+CodeTappert@users.noreply.github.com> * Update config.ts * Update modifier-select-ui-handler.ts * Update src/locales/pt_BR/modifier-select-ui-handler.ts Co-authored-by: José Ricardo Fleury Oliveira * Update src/locales/es/modifier-select-ui-handler.ts Co-authored-by: GoldTra <162721984+GoldTra@users.noreply.github.com> * Update modifier-select-ui-handler.ts [Localization(it)] * Update src/locales/es/modifier-select-ui-handler.ts Co-authored-by: InnocentGameDev * Adaptive buttons and cursors * Update modifier-select-ui-handler.ts * Update modifier-select-ui-handler.ts --------- Co-authored-by: yun <97648143+ddullgi@users.noreply.github.com> Co-authored-by: Yonmaru40 <47717431+40chyan@users.noreply.github.com> Co-authored-by: Jannik Tappert <38758606+CodeTappert@users.noreply.github.com> Co-authored-by: José Ricardo Fleury Oliveira Co-authored-by: GoldTra <162721984+GoldTra@users.noreply.github.com> Co-authored-by: Niccolò <123510358+NicusPulcis@users.noreply.github.com> Co-authored-by: InnocentGameDev Co-authored-by: hjh --- src/locales/de/config.ts | 4 +- src/locales/de/modifier-select-ui-handler.ts | 14 +++++++ src/locales/en/config.ts | 2 + src/locales/en/modifier-select-ui-handler.ts | 14 +++++++ src/locales/es/config.ts | 4 +- src/locales/es/modifier-select-ui-handler.ts | 15 +++++++ src/locales/fr/config.ts | 4 +- src/locales/fr/modifier-select-ui-handler.ts | 14 +++++++ src/locales/it/config.ts | 4 +- src/locales/it/modifier-select-ui-handler.ts | 14 +++++++ src/locales/ko/config.ts | 4 +- src/locales/ko/modifier-select-ui-handler.ts | 14 +++++++ src/locales/pt_BR/config.ts | 4 +- .../pt_BR/modifier-select-ui-handler.ts | 14 +++++++ src/locales/zh_CN/config.ts | 4 +- .../zh_CN/modifier-select-ui-handler.ts | 14 +++++++ src/locales/zh_TW/config.ts | 4 +- .../zh_TW/modifier-select-ui-handler.ts | 14 +++++++ src/ui/modifier-select-ui-handler.ts | 40 ++++++++++++------- src/ui/text.ts | 2 +- 20 files changed, 179 insertions(+), 24 deletions(-) create mode 100644 src/locales/de/modifier-select-ui-handler.ts create mode 100644 src/locales/en/modifier-select-ui-handler.ts create mode 100644 src/locales/es/modifier-select-ui-handler.ts create mode 100644 src/locales/fr/modifier-select-ui-handler.ts create mode 100644 src/locales/it/modifier-select-ui-handler.ts create mode 100644 src/locales/ko/modifier-select-ui-handler.ts create mode 100644 src/locales/pt_BR/modifier-select-ui-handler.ts create mode 100644 src/locales/zh_CN/modifier-select-ui-handler.ts create mode 100644 src/locales/zh_TW/modifier-select-ui-handler.ts diff --git a/src/locales/de/config.ts b/src/locales/de/config.ts index 77834849d2f..92544d87ea3 100644 --- a/src/locales/de/config.ts +++ b/src/locales/de/config.ts @@ -43,6 +43,7 @@ import { weather } from "./weather"; import { partyUiHandler } from "./party-ui-handler"; import { settings } from "./settings.js"; import { common } from "./common.js"; +import { modifierSelectUiHandler } from "./modifier-select-ui-handler"; export const deConfig = { ability: ability, @@ -90,5 +91,6 @@ export const deConfig = { tutorial: tutorial, voucher: voucher, weather: weather, - partyUiHandler: partyUiHandler + partyUiHandler: partyUiHandler, + modifierSelectUiHandler: modifierSelectUiHandler }; diff --git a/src/locales/de/modifier-select-ui-handler.ts b/src/locales/de/modifier-select-ui-handler.ts new file mode 100644 index 00000000000..78248f82da1 --- /dev/null +++ b/src/locales/de/modifier-select-ui-handler.ts @@ -0,0 +1,14 @@ +import { SimpleTranslationEntries } from "#app/interfaces/locales"; + +export const modifierSelectUiHandler: SimpleTranslationEntries = { + "transfer": "Übertragen", + "reroll": "Neu rollen", + "lockRarities": "Seltenheit festsetzen", + "checkTeam": "Team überprüfen", + "transferDesc": "Übertrage ein gehaltenes Item zu einem anderen Pokémon.", + "rerollDesc": "Nutze Geld um die Items neu zu rollen.", + "lockRaritiesDesc": "Setze die Seltenheit der Items fest. (Beeinflusst die Rollkosten).", + "checkTeamDesc": "Überprüfe dein Team or nutze Formänderungsitems.", + "rerollCost": "{{formattedMoney}}₽", + "itemCost": "{{formattedMoney}}₽" +} as const; diff --git a/src/locales/en/config.ts b/src/locales/en/config.ts index 1d40e61bbad..a318bbe0128 100644 --- a/src/locales/en/config.ts +++ b/src/locales/en/config.ts @@ -43,6 +43,7 @@ import { titles, trainerClasses, trainerNames } from "./trainers"; import { tutorial } from "./tutorial"; import { voucher } from "./voucher"; import { weather } from "./weather"; +import { modifierSelectUiHandler } from "./modifier-select-ui-handler"; export const enConfig = { ability: ability, @@ -91,4 +92,5 @@ export const enConfig = { tutorial: tutorial, voucher: voucher, weather: weather, + modifierSelectUiHandler: modifierSelectUiHandler }; diff --git a/src/locales/en/modifier-select-ui-handler.ts b/src/locales/en/modifier-select-ui-handler.ts new file mode 100644 index 00000000000..64cf3aa2ba3 --- /dev/null +++ b/src/locales/en/modifier-select-ui-handler.ts @@ -0,0 +1,14 @@ +import { SimpleTranslationEntries } from "#app/interfaces/locales"; + +export const modifierSelectUiHandler: SimpleTranslationEntries = { + "transfer": "Transfer", + "reroll": "Reroll", + "lockRarities": "Lock Rarities", + "checkTeam": "Check Team", + "transferDesc": "Transfer a held item from one Pokémon to another.", + "rerollDesc": "Spend money to reroll your item options.", + "lockRaritiesDesc": "Lock item rarities on reroll (affects reroll cost).", + "checkTeamDesc": "Check your team or use a form changing item.", + "rerollCost": "₽{{formattedMoney}}", + "itemCost": "₽{{formattedMoney}}" +} as const; diff --git a/src/locales/es/config.ts b/src/locales/es/config.ts index 551c7a2f6dc..bedd53dcc29 100644 --- a/src/locales/es/config.ts +++ b/src/locales/es/config.ts @@ -43,6 +43,7 @@ import { weather } from "./weather"; import { partyUiHandler } from "./party-ui-handler"; import { settings } from "./settings.js"; import { common } from "./common.js"; +import { modifierSelectUiHandler } from "./modifier-select-ui-handler"; export const esConfig = { ability: ability, @@ -90,5 +91,6 @@ export const esConfig = { tutorial: tutorial, voucher: voucher, weather: weather, - partyUiHandler: partyUiHandler + partyUiHandler: partyUiHandler, + modifierSelectUiHandler: modifierSelectUiHandler }; diff --git a/src/locales/es/modifier-select-ui-handler.ts b/src/locales/es/modifier-select-ui-handler.ts new file mode 100644 index 00000000000..e78be5d4ea5 --- /dev/null +++ b/src/locales/es/modifier-select-ui-handler.ts @@ -0,0 +1,15 @@ +import { SimpleTranslationEntries } from "#app/interfaces/locales"; + +export const modifierSelectUiHandler: SimpleTranslationEntries = { + "transfer": "Transferir", + "reroll": "Actualizar", + "lockRarities": "Bloquear rarezas", + "checkTeam": "Ver Equipo", + "transferDesc": "Transfiere un objeto que lleva un Pokémon a otro.", + "rerollDesc": "Gasta dinero para actualizar las opciones de objetos.", + "lockRaritiesDesc": "Bloquea las rarezas de los objetos al actualizar (afecta el costo de actualización).", + "checkTeamDesc": "Revisa tu equipo o usa un objeto que cambia de forma.", + "rerollCost": "{{formattedMoney}} ₽", + "itemCost": "{{formattedMoney}} ₽" + +} as const; diff --git a/src/locales/fr/config.ts b/src/locales/fr/config.ts index 04af81adf52..55eae8c1dd5 100644 --- a/src/locales/fr/config.ts +++ b/src/locales/fr/config.ts @@ -43,6 +43,7 @@ import { weather } from "./weather"; import { partyUiHandler } from "./party-ui-handler"; import { settings } from "./settings.js"; import { common } from "./common.js"; +import { modifierSelectUiHandler } from "./modifier-select-ui-handler"; export const frConfig = { ability: ability, @@ -90,5 +91,6 @@ export const frConfig = { tutorial: tutorial, voucher: voucher, weather: weather, - partyUiHandler: partyUiHandler + partyUiHandler: partyUiHandler, + modifierSelectUiHandler: modifierSelectUiHandler }; diff --git a/src/locales/fr/modifier-select-ui-handler.ts b/src/locales/fr/modifier-select-ui-handler.ts new file mode 100644 index 00000000000..7e3d4837e54 --- /dev/null +++ b/src/locales/fr/modifier-select-ui-handler.ts @@ -0,0 +1,14 @@ +import { SimpleTranslationEntries } from "#app/interfaces/locales"; + +export const modifierSelectUiHandler: SimpleTranslationEntries = { + "transfer": "Transférer", + "reroll": "Relancer", + "lockRarities": "Bloquer la rareté", + "checkTeam": "Consulter Équipe", + "transferDesc": "Transférer un objet tenu par un Pokémon vers un autre.", + "rerollDesc": "Payer pour relancer les objets gratuits proposés.", + "lockRaritiesDesc": "Assure la relance de proposer des objets gratuits de rareté égale ou supérieure. Affecte le cout de relance.", + "checkTeamDesc": "Consulter votre équipe ou utiliser un objet\nde changement de forme.", + "rerollCost": "{{formattedMoney}} ₽", + "itemCost": "{{formattedMoney}} ₽" +} as const; diff --git a/src/locales/it/config.ts b/src/locales/it/config.ts index ac2e37c2df5..9175d40b97f 100644 --- a/src/locales/it/config.ts +++ b/src/locales/it/config.ts @@ -43,6 +43,7 @@ import { weather } from "./weather"; import { partyUiHandler } from "./party-ui-handler"; import { settings } from "./settings.js"; import { common } from "./common.js"; +import { modifierSelectUiHandler } from "./modifier-select-ui-handler"; export const itConfig = { ability: ability, @@ -90,5 +91,6 @@ export const itConfig = { tutorial: tutorial, voucher: voucher, weather: weather, - partyUiHandler: partyUiHandler + partyUiHandler: partyUiHandler, + modifierSelectUiHandler: modifierSelectUiHandler }; diff --git a/src/locales/it/modifier-select-ui-handler.ts b/src/locales/it/modifier-select-ui-handler.ts new file mode 100644 index 00000000000..f0852a7d87c --- /dev/null +++ b/src/locales/it/modifier-select-ui-handler.ts @@ -0,0 +1,14 @@ +import { SimpleTranslationEntries } from "#app/interfaces/locales"; + +export const modifierSelectUiHandler: SimpleTranslationEntries = { + "transfer": "Trasferisci", + "reroll": "Rerolla", + "lockRarities": "Blocca le rarità", + "checkTeam": "Stato squadra", + "transferDesc": "Trasferisci un oggetto da un Pokémon ad un altro.", + "rerollDesc": "Spendi soldi per rerollare le ricompense.", + "lockRaritiesDesc": "Blocca le rarità al reroll (influisce sui costi).", + "checkTeamDesc": "Controlla la squadra Pokémon.", + "rerollCost": "{{formattedMoney}}₽", + "itemCost": "{{formattedMoney}}₽" +} as const; diff --git a/src/locales/ko/config.ts b/src/locales/ko/config.ts index 59603c8519d..dc64e12356a 100644 --- a/src/locales/ko/config.ts +++ b/src/locales/ko/config.ts @@ -43,6 +43,7 @@ import { weather } from "./weather"; import { partyUiHandler } from "./party-ui-handler"; import { settings } from "./settings.js"; import { common } from "./common.js"; +import { modifierSelectUiHandler } from "./modifier-select-ui-handler"; export const koConfig = { ability: ability, @@ -90,5 +91,6 @@ export const koConfig = { tutorial: tutorial, voucher: voucher, weather: weather, - partyUiHandler: partyUiHandler + partyUiHandler: partyUiHandler, + modifierSelectUiHandler: modifierSelectUiHandler }; diff --git a/src/locales/ko/modifier-select-ui-handler.ts b/src/locales/ko/modifier-select-ui-handler.ts new file mode 100644 index 00000000000..c25b6d57af2 --- /dev/null +++ b/src/locales/ko/modifier-select-ui-handler.ts @@ -0,0 +1,14 @@ +import { SimpleTranslationEntries } from "#app/interfaces/locales"; + +export const modifierSelectUiHandler: SimpleTranslationEntries = { + "transfer": "건네주기", + "reroll": "갱신", + "lockRarities": "희귀도 고정", + "checkTeam": "파티 확인", + "transferDesc": "지닌 물건을 다른 포켓몬에게 건네줍니다.", + "rerollDesc": "돈을 소모하여 아이템 목록을 새로 고칩니다.", + "lockRaritiesDesc": "갱신되는 아이템의 희귀도가 고정됩니다(갱신 비용 증가).", + "checkTeamDesc": "파티를 확인하거나 폼 변경 아이템을 사용합니다.", + "rerollCost": "₽{{formattedMoney}}", + "itemCost": "₽{{formattedMoney}}" +} as const; diff --git a/src/locales/pt_BR/config.ts b/src/locales/pt_BR/config.ts index ac4176144c6..5a571815c97 100644 --- a/src/locales/pt_BR/config.ts +++ b/src/locales/pt_BR/config.ts @@ -43,6 +43,7 @@ import { weather } from "./weather"; import { partyUiHandler } from "./party-ui-handler"; import { settings } from "./settings.js"; import { common } from "./common.js"; +import { modifierSelectUiHandler } from "./modifier-select-ui-handler"; export const ptBrConfig = { ability: ability, @@ -90,5 +91,6 @@ export const ptBrConfig = { trainerNames: trainerNames, tutorial: tutorial, voucher: voucher, - weather: weather + weather: weather, + modifierSelectUiHandler: modifierSelectUiHandler }; diff --git a/src/locales/pt_BR/modifier-select-ui-handler.ts b/src/locales/pt_BR/modifier-select-ui-handler.ts new file mode 100644 index 00000000000..fd9dfcf4c30 --- /dev/null +++ b/src/locales/pt_BR/modifier-select-ui-handler.ts @@ -0,0 +1,14 @@ +import { SimpleTranslationEntries } from "#app/interfaces/locales"; + +export const modifierSelectUiHandler: SimpleTranslationEntries = { + "transfer": "Alterar", + "reroll": "Atualizar", + "lockRarities": "Travar Raridades", + "checkTeam": "Checar Time", + "transferDesc": "Transfira um item segurado de um Pokémon para outro.", + "rerollDesc": "Gaste dinheiro para atualizar as suas opções de itens.", + "lockRaritiesDesc": "Trava a raridade dos itens na atualização (afeta o custo da atualização).", + "checkTeamDesc": "Cheque seu time ou use um item de mudança de forma.", + "rerollCost": "₽{{formattedMoney}}", + "itemCost": "₽{{formattedMoney}}" +} as const; diff --git a/src/locales/zh_CN/config.ts b/src/locales/zh_CN/config.ts index 1d987eaec16..8f654b56d9a 100644 --- a/src/locales/zh_CN/config.ts +++ b/src/locales/zh_CN/config.ts @@ -43,6 +43,7 @@ import { weather } from "./weather"; import { partyUiHandler } from "./party-ui-handler"; import { settings } from "./settings.js"; import { common } from "./common.js"; +import { modifierSelectUiHandler } from "./modifier-select-ui-handler"; export const zhCnConfig = { ability: ability, @@ -90,5 +91,6 @@ export const zhCnConfig = { tutorial: tutorial, voucher: voucher, weather: weather, - partyUiHandler: partyUiHandler + partyUiHandler: partyUiHandler, + modifierSelectUiHandler: modifierSelectUiHandler }; diff --git a/src/locales/zh_CN/modifier-select-ui-handler.ts b/src/locales/zh_CN/modifier-select-ui-handler.ts new file mode 100644 index 00000000000..a836f07e910 --- /dev/null +++ b/src/locales/zh_CN/modifier-select-ui-handler.ts @@ -0,0 +1,14 @@ +import { SimpleTranslationEntries } from "#app/interfaces/locales"; + +export const modifierSelectUiHandler: SimpleTranslationEntries = { + "transfer": "交换道具", + "reroll": "刷新商店", + "lockRarities": "锁定稀有度", + "checkTeam": "查看队伍", + "transferDesc": "将宝可梦携带的道具交换给其他宝可梦", + "rerollDesc": "花钱刷新道具", + "lockRaritiesDesc": "在刷新时锁定道具稀有度(影响刷新费用)", + "checkTeamDesc": "检查队伍或使用形态改变道具", + "rerollCost": "₽{{formattedMoney}}", + "itemCost": "₽{{formattedMoney}}" +} as const; diff --git a/src/locales/zh_TW/config.ts b/src/locales/zh_TW/config.ts index 688f3b47033..e4dfafdd43e 100644 --- a/src/locales/zh_TW/config.ts +++ b/src/locales/zh_TW/config.ts @@ -43,6 +43,7 @@ import { weather } from "./weather"; import { partyUiHandler } from "./party-ui-handler"; import { settings } from "./settings.js"; import { common } from "./common.js"; +import { modifierSelectUiHandler } from "./modifier-select-ui-handler"; export const zhTwConfig = { ability: ability, @@ -90,5 +91,6 @@ export const zhTwConfig = { tutorial: tutorial, voucher: voucher, weather: weather, - partyUiHandler: partyUiHandler + partyUiHandler: partyUiHandler, + modifierSelectUiHandler: modifierSelectUiHandler }; diff --git a/src/locales/zh_TW/modifier-select-ui-handler.ts b/src/locales/zh_TW/modifier-select-ui-handler.ts new file mode 100644 index 00000000000..64cf3aa2ba3 --- /dev/null +++ b/src/locales/zh_TW/modifier-select-ui-handler.ts @@ -0,0 +1,14 @@ +import { SimpleTranslationEntries } from "#app/interfaces/locales"; + +export const modifierSelectUiHandler: SimpleTranslationEntries = { + "transfer": "Transfer", + "reroll": "Reroll", + "lockRarities": "Lock Rarities", + "checkTeam": "Check Team", + "transferDesc": "Transfer a held item from one Pokémon to another.", + "rerollDesc": "Spend money to reroll your item options.", + "lockRaritiesDesc": "Lock item rarities on reroll (affects reroll cost).", + "checkTeamDesc": "Check your team or use a form changing item.", + "rerollCost": "₽{{formattedMoney}}", + "itemCost": "₽{{formattedMoney}}" +} as const; diff --git a/src/ui/modifier-select-ui-handler.ts b/src/ui/modifier-select-ui-handler.ts index c403dc28abb..3cfd103b4e2 100644 --- a/src/ui/modifier-select-ui-handler.ts +++ b/src/ui/modifier-select-ui-handler.ts @@ -1,7 +1,7 @@ import BattleScene from "../battle-scene"; import { getPlayerShopModifierTypeOptionsForWave, ModifierTypeOption, TmModifierType } from "../modifier/modifier-type"; import { getPokeballAtlasKey, PokeballType } from "../data/pokeball"; -import { addTextObject, getModifierTierTextTint, getTextColor, TextStyle } from "./text"; +import { addTextObject, getTextStyleOptions, getModifierTierTextTint, getTextColor, TextStyle } from "./text"; import AwaitableUiHandler from "./awaitable-ui-handler"; import { Mode } from "./ui"; import { LockModifierTiersModifier, PokemonHeldItemModifier } from "../modifier/modifier"; @@ -10,6 +10,7 @@ import {Button} from "#enums/buttons"; import MoveInfoOverlay from "./move-info-overlay"; import { allMoves } from "../data/move"; import * as Utils from "./../utils"; +import i18next from "i18next"; export const SHOP_OPTIONS_ROW_LIMIT = 6; @@ -27,6 +28,8 @@ export default class ModifierSelectUiHandler extends AwaitableUiHandler { private rowCursor: integer = 0; private player: boolean; private rerollCost: integer; + private transferButtonWidth: integer; + private checkButtonWidth: integer; public options: ModifierOption[]; public shopOptionsRows: ModifierOption[][]; @@ -46,22 +49,29 @@ export default class ModifierSelectUiHandler extends AwaitableUiHandler { this.modifierContainer = this.scene.add.container(0, 0); ui.add(this.modifierContainer); - this.transferButtonContainer = this.scene.add.container((this.scene.game.canvas.width / 6) - 71, -64); + const canvas = document.createElement("canvas"); + const context = canvas.getContext("2d"); + const [ , styleOptions, , , ] = getTextStyleOptions(TextStyle.PARTY, (this.scene as BattleScene).uiTheme); + context.font = styleOptions.fontSize + "px " + styleOptions.fontFamily; + this.transferButtonWidth = context.measureText(i18next.t("modifierSelectUiHandler:transfer")).width; + this.checkButtonWidth = context.measureText(i18next.t("modifierSelectUiHandler:checkTeam")).width; + + this.transferButtonContainer = this.scene.add.container((this.scene.game.canvas.width - this.checkButtonWidth) / 6 - 21, -64); this.transferButtonContainer.setName("transfer-btn"); this.transferButtonContainer.setVisible(false); ui.add(this.transferButtonContainer); - const transferButtonText = addTextObject(this.scene, -4, -2, "Transfer", TextStyle.PARTY); + const transferButtonText = addTextObject(this.scene, -4, -2, i18next.t("modifierSelectUiHandler:transfer"), TextStyle.PARTY); transferButtonText.setName("text-transfer-btn"); transferButtonText.setOrigin(1, 0); this.transferButtonContainer.add(transferButtonText); - this.checkButtonContainer = this.scene.add.container((this.scene.game.canvas.width / 6) - 1, -64); + this.checkButtonContainer = this.scene.add.container((this.scene.game.canvas.width) / 6 - 1, -64); this.checkButtonContainer.setName("use-btn"); this.checkButtonContainer.setVisible(false); ui.add(this.checkButtonContainer); - const checkButtonText = addTextObject(this.scene, -4, -2, "Check Team", TextStyle.PARTY); + const checkButtonText = addTextObject(this.scene, -4, -2, i18next.t("modifierSelectUiHandler:checkTeam"), TextStyle.PARTY); checkButtonText.setName("text-use-btn"); checkButtonText.setOrigin(1, 0); this.checkButtonContainer.add(checkButtonText); @@ -71,7 +81,7 @@ export default class ModifierSelectUiHandler extends AwaitableUiHandler { this.rerollButtonContainer.setVisible(false); ui.add(this.rerollButtonContainer); - const rerollButtonText = addTextObject(this.scene, -4, -2, "Reroll", TextStyle.PARTY); + const rerollButtonText = addTextObject(this.scene, -4, -2, i18next.t("modifierSelectUiHandler:reroll"), TextStyle.PARTY); rerollButtonText.setName("text-reroll-btn"); rerollButtonText.setOrigin(0, 0); this.rerollButtonContainer.add(rerollButtonText); @@ -86,7 +96,7 @@ export default class ModifierSelectUiHandler extends AwaitableUiHandler { this.lockRarityButtonContainer.setVisible(false); ui.add(this.lockRarityButtonContainer); - this.lockRarityButtonText = addTextObject(this.scene, -4, -2, "Lock Rarities", TextStyle.PARTY); + this.lockRarityButtonText = addTextObject(this.scene, -4, -2, i18next.t("modifierSelectUiHandler:lockRarities"), TextStyle.PARTY); this.lockRarityButtonText.setOrigin(0, 0); this.lockRarityButtonContainer.add(this.lockRarityButtonText); @@ -390,16 +400,16 @@ export default class ModifierSelectUiHandler extends AwaitableUiHandler { } } else if (cursor === 0) { this.cursorObj.setPosition(6, this.lockRarityButtonContainer.visible ? -72 : -60); - ui.showText("Spend money to reroll your item options."); + ui.showText(i18next.t("modifierSelectUiHandler:rerollDesc")); } else if (cursor === 1) { - this.cursorObj.setPosition((this.scene.game.canvas.width / 6) - 120, -60); - ui.showText("Transfer a held item from one Pokémon to another."); + this.cursorObj.setPosition((this.scene.game.canvas.width - this.transferButtonWidth - this.checkButtonWidth)/6 - 30, -60); + ui.showText(i18next.t("modifierSelectUiHandler:transferDesc")); } else if (cursor === 2) { - this.cursorObj.setPosition((this.scene.game.canvas.width / 6) - 60, -60); - ui.showText("Check your team or use a form changing item."); + this.cursorObj.setPosition((this.scene.game.canvas.width - this.checkButtonWidth)/6 - 10, -60); + ui.showText(i18next.t("modifierSelectUiHandler:checkTeamDesc")); } else { this.cursorObj.setPosition(6, -60); - ui.showText("Lock item rarities on reroll (affects reroll cost)."); + ui.showText(i18next.t("modifierSelectUiHandler:lockRaritiesDesc")); } return ret; @@ -456,7 +466,7 @@ export default class ModifierSelectUiHandler extends AwaitableUiHandler { const formattedMoney = Utils.formatMoney(this.scene.moneyFormat, this.rerollCost); - this.rerollCostText.setText(`₽${formattedMoney}`); + this.rerollCostText.setText(i18next.t("modifierSelectUiHandler:rerollCost", { formattedMoney })); this.rerollCostText.setColor(this.getTextColor(canReroll ? TextStyle.MONEY : TextStyle.PARTY_RED)); this.rerollCostText.setShadowColor(this.getTextColor(canReroll ? TextStyle.MONEY : TextStyle.PARTY_RED, true)); } @@ -720,7 +730,7 @@ class ModifierOption extends Phaser.GameObjects.Container { const formattedMoney = Utils.formatMoney(scene.moneyFormat, this.modifierTypeOption.cost); - this.itemCostText.setText(`₽${formattedMoney}`); + this.itemCostText.setText(i18next.t("modifierSelectUiHandler:itemCost", { formattedMoney })); this.itemCostText.setColor(getTextColor(textStyle, false, scene.uiTheme)); this.itemCostText.setShadowColor(getTextColor(textStyle, true, scene.uiTheme)); } diff --git a/src/ui/text.ts b/src/ui/text.ts index dd1ac57523a..d192ae076a7 100644 --- a/src/ui/text.ts +++ b/src/ui/text.ts @@ -82,7 +82,7 @@ export function addTextInputObject(scene: Phaser.Scene, x: number, y: number, wi return ret; } -function getTextStyleOptions(style: TextStyle, uiTheme: UiTheme, extraStyleOptions?: Phaser.Types.GameObjects.Text.TextStyle): [ number, Phaser.Types.GameObjects.Text.TextStyle | InputText.IConfig, string, number, number ] { +export function getTextStyleOptions(style: TextStyle, uiTheme: UiTheme, extraStyleOptions?: Phaser.Types.GameObjects.Text.TextStyle): [ number, Phaser.Types.GameObjects.Text.TextStyle | InputText.IConfig, string, number, number ] { let shadowXpos = 4; let shadowYpos = 5; const scale = 0.1666666667; From 2bfefa630b6ca7d3828cc6f4edcbb1ef937178dc Mon Sep 17 00:00:00 2001 From: Mumble Date: Thu, 4 Jul 2024 15:18:09 -0700 Subject: [PATCH 12/37] [Bug] Added new condition for PostDefendContactAbAttr for Magic Guard and Iron Barbs/Rough Skin (#2793) Co-authored-by: Frutescens --- src/data/ability.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/data/ability.ts b/src/data/ability.ts index 4f4807ed614..d3f871c9c19 100644 --- a/src/data/ability.ts +++ b/src/data/ability.ts @@ -879,7 +879,7 @@ export class PostDefendContactDamageAbAttr extends PostDefendAbAttr { } applyPostDefend(pokemon: Pokemon, passive: boolean, attacker: Pokemon, move: Move, hitResult: HitResult, args: any[]): boolean { - if (move.checkFlag(MoveFlags.MAKES_CONTACT, attacker, pokemon)) { + if (move.checkFlag(MoveFlags.MAKES_CONTACT, attacker, pokemon) && !attacker.hasAbilityWithAttr(BlockNonDirectDamageAbAttr)) { attacker.damageAndUpdate(Math.ceil(attacker.getMaxHp() * (1 / this.damageRatio)), HitResult.OTHER); attacker.turnData.damageTaken += Math.ceil(attacker.getMaxHp() * (1 / this.damageRatio)); return true; From 04d456a60e19cab606357831883f2b5a54f8df6c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Ricardo=20Fleury=20Oliveira?= Date: Thu, 4 Jul 2024 22:26:56 -0300 Subject: [PATCH 13/37] Localization: Localized Gacha Machine Names (#2645) * Localization: Localized Gacha Machine Names * Update src/locales/zh_TW/egg.ts Co-authored-by: Yonmaru40 <47717431+40chyan@users.noreply.github.com> * Update src/locales/zh_TW/egg.ts Co-authored-by: Enoch * Update src/locales/de/egg.ts Co-authored-by: Jannik Tappert <38758606+CodeTappert@users.noreply.github.com> * Update src/locales/fr/egg.ts Co-authored-by: Lugiad' * Update src/locales/ko/egg.ts Co-authored-by: sodam <66295123+sodaMelon@users.noreply.github.com> * Update src/locales/zh_TW/egg.ts Co-authored-by: Yonmaru40 <47717431+40chyan@users.noreply.github.com> * Update src/locales/zh_CN/egg.ts Co-authored-by: Yonmaru40 <47717431+40chyan@users.noreply.github.com> * Update src/locales/es/egg.ts Co-authored-by: InnocentGameDev * Update Brazilian Portuguese translation for egg.ts * added smaller text size option * update egg.ts translations for German and Brazilian Portuguese * some updates * update egg.ts translations for Spanish and Brazilian Portuguese * Update EggGachaUiHandler to use array.includes for language check * update German translation for legendary egg gatcha * Update src/locales/es/egg.ts Co-authored-by: InnocentGameDev * update translations for egg.ts in Spanish and Brazilian Portuguese --------- Co-authored-by: Yonmaru40 <47717431+40chyan@users.noreply.github.com> Co-authored-by: Enoch Co-authored-by: Jannik Tappert <38758606+CodeTappert@users.noreply.github.com> Co-authored-by: Lugiad' Co-authored-by: sodam <66295123+sodaMelon@users.noreply.github.com> Co-authored-by: InnocentGameDev --- src/locales/de/egg.ts | 3 ++ src/locales/en/egg.ts | 3 ++ src/locales/es/egg.ts | 3 ++ src/locales/fr/egg.ts | 3 ++ src/locales/it/egg.ts | 3 ++ src/locales/ko/egg.ts | 3 ++ src/locales/pt_BR/egg.ts | 3 ++ src/locales/zh_CN/egg.ts | 3 ++ src/locales/zh_TW/egg.ts | 3 ++ src/ui/egg-gacha-ui-handler.ts | 54 +++++++++++++++++++++++++++++++--- src/ui/text.ts | 16 +++++++--- 11 files changed, 89 insertions(+), 8 deletions(-) diff --git a/src/locales/de/egg.ts b/src/locales/de/egg.ts index 61a2f627aa4..9dc7b10f174 100644 --- a/src/locales/de/egg.ts +++ b/src/locales/de/egg.ts @@ -22,4 +22,7 @@ export const egg: SimpleTranslationEntries = { "hatchFromTheEgg": "Ein {{pokemonName}} ist aus dem Ei geschlüpft!", "eggMoveUnlock": "Ei-Attacke freigeschaltet: {{moveName}}", "rareEggMoveUnlock": "Seltene Ei-Attacke freigeschaltet: {{moveName}}", + "moveUPGacha": "Mehr\nEi-Attacken!", + "shinyUPGacha": "Mehr\nSchillernde!", + "legendaryUPGacha": "erscheint\nöfter!", } as const; diff --git a/src/locales/en/egg.ts b/src/locales/en/egg.ts index b6e13d26213..9f699ce0fdc 100644 --- a/src/locales/en/egg.ts +++ b/src/locales/en/egg.ts @@ -22,4 +22,7 @@ export const egg: SimpleTranslationEntries = { "hatchFromTheEgg": "{{pokemonName}} hatched from the egg!", "eggMoveUnlock": "Egg Move unlocked: {{moveName}}", "rareEggMoveUnlock": "Rare Egg Move unlocked: {{moveName}}", + "moveUPGacha": "Move UP!", + "shinyUPGacha": "Shiny UP!", + "legendaryUPGacha": "UP!", } as const; diff --git a/src/locales/es/egg.ts b/src/locales/es/egg.ts index dea466066f1..ab2c3aab903 100644 --- a/src/locales/es/egg.ts +++ b/src/locales/es/egg.ts @@ -22,4 +22,7 @@ export const egg: SimpleTranslationEntries = { "hatchFromTheEgg": "¡Ha salido un {{pokemonName}} del Huevo!", "eggMoveUnlock": "Mov. Huevo desbloqueado:\n{{moveName}}", "rareEggMoveUnlock": "Mov. Huevo Raro desbloqueado:\n{{moveName}}", + "moveUPGacha": "¡Más Mov.\nHuevo Raro!", + "shinyUPGacha": "¡Más Shiny!", + "legendaryUPGacha": ", ¡mayor\nprob.!", } as const; diff --git a/src/locales/fr/egg.ts b/src/locales/fr/egg.ts index 96fbc4dce15..f63ac3abb0d 100644 --- a/src/locales/fr/egg.ts +++ b/src/locales/fr/egg.ts @@ -22,4 +22,7 @@ export const egg: SimpleTranslationEntries = { "hatchFromTheEgg": "{{pokemonName}} sort de l’Œuf !", "eggMoveUnlock": "Capacité Œuf débloquée :\n{{moveName}}", "rareEggMoveUnlock": "Capacité Œuf Rare débloquée :\n{{moveName}}", + "moveUPGacha": "Bonus Capacité\nŒuf Rare !", + "shinyUPGacha": "Bonus\nChromatique !", + "legendaryUPGacha": "Bonus !", } as const; diff --git a/src/locales/it/egg.ts b/src/locales/it/egg.ts index 9b60b2f1835..feb148ab990 100644 --- a/src/locales/it/egg.ts +++ b/src/locales/it/egg.ts @@ -22,4 +22,7 @@ export const egg: SimpleTranslationEntries = { "hatchFromTheEgg": "Dall’Uovo è nato {{pokemonName}}!", "eggMoveUnlock": "Egg Move unlocked: {{moveName}}", "rareEggMoveUnlock": "Rare Egg Move unlocked: {{moveName}}", + "moveUPGacha": "Move UP!", + "shinyUPGacha": "Shiny UP!", + "legendaryUPGacha": "UP!", } as const; diff --git a/src/locales/ko/egg.ts b/src/locales/ko/egg.ts index 88a845c6424..412d97bb7f3 100644 --- a/src/locales/ko/egg.ts +++ b/src/locales/ko/egg.ts @@ -22,4 +22,7 @@ export const egg: SimpleTranslationEntries = { "hatchFromTheEgg": "알이 부화해서\n{{pokemonName}}[[가]] 태어났다!", "eggMoveUnlock": "알 기술 {{moveName}}[[를]]\n사용할 수 있게 되었다!", "rareEggMoveUnlock": "레어 알 기술 {{moveName}}[[를]]\n사용할 수 있게 되었다!", + "moveUPGacha": "기술 UP!", + "shinyUPGacha": "특별색 UP!", + "legendaryUPGacha": "UP!", } as const; diff --git a/src/locales/pt_BR/egg.ts b/src/locales/pt_BR/egg.ts index 6690c293aaf..fbd13bed4e3 100644 --- a/src/locales/pt_BR/egg.ts +++ b/src/locales/pt_BR/egg.ts @@ -22,4 +22,7 @@ export const egg: SimpleTranslationEntries = { "hatchFromTheEgg": "{{pokemonName}} nasceu do ovo!", "eggMoveUnlock": "Movimento de Ovo desbloqueado: {{moveName}}", "rareEggMoveUnlock": "Movimento Raro de Ovo desbloqueado: {{moveName}}", + "moveUPGacha": "Movimento\nde Ovo Bônus!", + "shinyUPGacha": "Shiny Bônus!", + "legendaryUPGacha": "Bônus!", } as const; diff --git a/src/locales/zh_CN/egg.ts b/src/locales/zh_CN/egg.ts index 35334d75bdd..454cdb0af52 100644 --- a/src/locales/zh_CN/egg.ts +++ b/src/locales/zh_CN/egg.ts @@ -22,4 +22,7 @@ export const egg: SimpleTranslationEntries = { "hatchFromTheEgg": "{{pokemonName}} 从蛋中孵化了!", "eggMoveUnlock": "蛋招式已解锁: {{moveName}}", "rareEggMoveUnlock": "稀有蛋招式已解锁: {{moveName}}", + "moveUPGacha": "蛋招式UP!", + "shinyUPGacha": "闪光UP!", + "legendaryUPGacha": "UP!", } as const; diff --git a/src/locales/zh_TW/egg.ts b/src/locales/zh_TW/egg.ts index eecfcf0b735..666f6758d11 100644 --- a/src/locales/zh_TW/egg.ts +++ b/src/locales/zh_TW/egg.ts @@ -22,4 +22,7 @@ export const egg: SimpleTranslationEntries = { "hatchFromTheEgg": "{{pokemonName}} 從蛋中孵化了!", "eggMoveUnlock": "蛋招式已解鎖: {{moveName}}", "rareEggMoveUnlock": "稀有蛋招式已解鎖: {{moveName}}", + "moveUPGacha": "蛋招式UP!", + "shinyUPGacha": "闪光UP!", + "legendaryUPGacha": "UP!", } as const; diff --git a/src/ui/egg-gacha-ui-handler.ts b/src/ui/egg-gacha-ui-handler.ts index 0081b589288..1a9320ac9e9 100644 --- a/src/ui/egg-gacha-ui-handler.ts +++ b/src/ui/egg-gacha-ui-handler.ts @@ -96,25 +96,71 @@ export default class EggGachaUiHandler extends MessageUiHandler { const gachaInfoContainer = this.scene.add.container(160, 46); - const gachaUpLabel = addTextObject(this.scene, 4, 0, "UP!", TextStyle.WINDOW_ALT); + const currentLanguage = i18next.resolvedLanguage; + let gachaTextStyle = TextStyle.WINDOW_ALT; + let gachaX = 4; + let gachaY = 0; + let pokemonIconX = -20; + let pokemonIconY = 6; + + if (["de", "es", "fr", "pt-BR"].includes(currentLanguage)) { + gachaTextStyle = TextStyle.SMALLER_WINDOW_ALT; + gachaX = 2; + gachaY = 2; + } + + let legendaryLabelX = gachaX; + let legendaryLabelY = gachaY; + if (["de", "es"].includes(currentLanguage)) { + pokemonIconX = -25; + pokemonIconY = 10; + legendaryLabelX = -6; + legendaryLabelY = 0; + } + + const gachaUpLabel = addTextObject(this.scene, gachaX, gachaY, i18next.t("egg:legendaryUPGacha"), gachaTextStyle); gachaUpLabel.setOrigin(0, 0); gachaInfoContainer.add(gachaUpLabel); switch (gachaType as GachaType) { case GachaType.LEGENDARY: - const pokemonIcon = this.scene.add.sprite(-20, 6, "pokemon_icons_0"); + if (["de", "es"].includes(currentLanguage)) { + gachaUpLabel.setAlign("center"); + gachaUpLabel.setY(0); + } + if (["pt-BR"].includes(currentLanguage)) { + gachaUpLabel.setX(legendaryLabelX - 2); + } else { + gachaUpLabel.setX(legendaryLabelX); + } + gachaUpLabel.setY(legendaryLabelY); + + const pokemonIcon = this.scene.add.sprite(pokemonIconX, pokemonIconY, "pokemon_icons_0"); + if (["pt-BR"].includes(currentLanguage)) { + pokemonIcon.setX(pokemonIconX - 2); + } pokemonIcon.setScale(0.5); pokemonIcon.setOrigin(0, 0.5); gachaInfoContainer.add(pokemonIcon); break; case GachaType.MOVE: - gachaUpLabel.setText("Move UP!"); + if (["de", "es", "fr", "pt-BR"].includes(currentLanguage)) { + gachaUpLabel.setAlign("center"); + gachaUpLabel.setY(0); + } + + gachaUpLabel.setText(i18next.t("egg:moveUPGacha")); gachaUpLabel.setX(0); gachaUpLabel.setOrigin(0.5, 0); break; case GachaType.SHINY: - gachaUpLabel.setText("Shiny UP!"); + if (["de", "fr"].includes(currentLanguage)) { + gachaUpLabel.setAlign("center"); + gachaUpLabel.setY(0); + } + + gachaUpLabel.setText(i18next.t("egg:shinyUPGacha")); gachaUpLabel.setX(0); gachaUpLabel.setOrigin(0.5, 0); break; diff --git a/src/ui/text.ts b/src/ui/text.ts index d192ae076a7..91ada7f12ad 100644 --- a/src/ui/text.ts +++ b/src/ui/text.ts @@ -1,10 +1,10 @@ +import { EggTier } from "#enums/egg-type"; +import { UiTheme } from "#enums/ui-theme"; +import Phaser from "phaser"; import BBCodeText from "phaser3-rex-plugins/plugins/gameobjects/tagtext/bbcodetext/BBCodeText"; import InputText from "phaser3-rex-plugins/plugins/inputtext"; import BattleScene from "../battle-scene"; import { ModifierTier } from "../modifier/modifier-tier"; -import Phaser from "phaser"; -import { EggTier } from "#enums/egg-type"; -import { UiTheme } from "#enums/ui-theme"; export enum TextStyle { MESSAGE, @@ -33,7 +33,8 @@ export enum TextStyle { MOVE_PP_FULL, MOVE_PP_HALF_FULL, MOVE_PP_NEAR_EMPTY, - MOVE_PP_EMPTY + MOVE_PP_EMPTY, + SMALLER_WINDOW_ALT } export function addTextObject(scene: Phaser.Scene, x: number, y: number, content: string, style: TextStyle, extraStyleOptions?: Phaser.Types.GameObjects.Text.TextStyle): Phaser.GameObjects.Text { @@ -140,6 +141,11 @@ export function getTextStyleOptions(style: TextStyle, uiTheme: UiTheme, extraSty shadowXpos = 3; shadowYpos = 3; break; + case TextStyle.SMALLER_WINDOW_ALT: + styleOptions.fontSize = defaultFontSize - 36; + shadowXpos = 3; + shadowYpos = 3; + break; } const shadowColor = getTextColor(style, true, uiTheme); @@ -227,6 +233,8 @@ export function getTextColor(textStyle: TextStyle, shadow?: boolean, uiTheme: Ui return !shadow ? "#f8b050" : "#c07800"; case TextStyle.SETTINGS_SELECTED: return !shadow ? "#f88880" : "#f83018"; + case TextStyle.SMALLER_WINDOW_ALT: + return !shadow ? "#484848" : "#d0d0c8"; } } From 5ac5850082a56d4de56021a5c81c52fa3da19029 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Ricardo=20Fleury=20Oliveira?= Date: Thu, 4 Jul 2024 22:34:18 -0300 Subject: [PATCH 14/37] Localization: Localize luck indicator text and shiny labels (#2644) * feat: localize luck indicator text * Localization: Localize luck indicator text and shiny labels * Update src/locales/zh_CN/common.ts Co-authored-by: Yonmaru40 <47717431+40chyan@users.noreply.github.com> * Update src/locales/ko/common.ts Co-authored-by: Enoch * Update src/locales/de/common.ts Co-authored-by: Jannik Tappert <38758606+CodeTappert@users.noreply.github.com> * Update src/locales/es/common.ts Co-authored-by: InnocentGameDev * Update src/locales/fr/common.ts Co-authored-by: Lugiad' --------- Co-authored-by: Yonmaru40 <47717431+40chyan@users.noreply.github.com> Co-authored-by: Enoch Co-authored-by: Jannik Tappert <38758606+CodeTappert@users.noreply.github.com> Co-authored-by: InnocentGameDev Co-authored-by: Lugiad' --- src/battle-scene.ts | 3 ++- src/locales/de/common.ts | 5 +++++ src/locales/de/pokemon-info-container.ts | 3 --- src/locales/en/common.ts | 5 +++++ src/locales/en/pokemon-info-container.ts | 3 --- src/locales/es/common.ts | 5 +++++ src/locales/es/pokemon-info-container.ts | 3 --- src/locales/fr/common.ts | 5 +++++ src/locales/fr/pokemon-info-container.ts | 3 --- src/locales/it/common.ts | 5 +++++ src/locales/it/pokemon-info-container.ts | 3 --- src/locales/ko/common.ts | 5 +++++ src/locales/ko/pokemon-info-container.ts | 3 --- src/locales/pt_BR/common.ts | 5 +++++ src/locales/pt_BR/pokemon-info-container.ts | 4 +--- src/locales/zh_CN/common.ts | 5 +++++ src/locales/zh_CN/pokemon-info-container.ts | 3 --- src/locales/zh_TW/common.ts | 5 +++++ src/locales/zh_TW/pokemon-info-container.ts | 3 --- src/ui/battle-info.ts | 5 +++-- src/ui/pokemon-info-container.ts | 4 ++-- src/ui/starter-select-ui-handler.ts | 2 +- src/ui/summary-ui-handler.ts | 6 +++--- 23 files changed, 57 insertions(+), 36 deletions(-) diff --git a/src/battle-scene.ts b/src/battle-scene.ts index 1b1d1fde83f..ba0720baab2 100644 --- a/src/battle-scene.ts +++ b/src/battle-scene.ts @@ -66,6 +66,7 @@ import { PlayerGender } from "#enums/player-gender"; import { Species } from "#enums/species"; import { UiTheme } from "#enums/ui-theme"; import { TimedEventManager } from "#app/timed-event-manager.js"; +import i18next from "i18next"; export const bypassLogin = import.meta.env.VITE_BYPASS_LOGIN === "1"; @@ -463,7 +464,7 @@ export default class BattleScene extends SceneBase { this.luckText.setVisible(false); this.fieldUI.add(this.luckText); - this.luckLabelText = addTextObject(this, (this.game.canvas.width / 6) - 2, 0, "Luck:", TextStyle.PARTY, { fontSize: "54px" }); + this.luckLabelText = addTextObject(this, (this.game.canvas.width / 6) - 2, 0, i18next.t("common:luckIndicator"), TextStyle.PARTY, { fontSize: "54px" }); this.luckLabelText.setName("text-luck-label"); this.luckLabelText.setOrigin(1, 0.5); this.luckLabelText.setVisible(false); diff --git a/src/locales/de/common.ts b/src/locales/de/common.ts index 82966b4ffeb..07f920aaf30 100644 --- a/src/locales/de/common.ts +++ b/src/locales/de/common.ts @@ -2,4 +2,9 @@ import { SimpleTranslationEntries } from "#app/interfaces/locales"; export const common: SimpleTranslationEntries = { "start": "Start", + "luckIndicator": "Glück:", + "shinyOnHover": "Schillernd", + "commonShiny": "Gewöhnlich", + "rareShiny": "Selten", + "epicShiny": "Episch", } as const; diff --git a/src/locales/de/pokemon-info-container.ts b/src/locales/de/pokemon-info-container.ts index f408dbcff9c..1f82cf2cd83 100644 --- a/src/locales/de/pokemon-info-container.ts +++ b/src/locales/de/pokemon-info-container.ts @@ -5,7 +5,4 @@ export const pokemonInfoContainer: SimpleTranslationEntries = { "gender": "Geschlecht:", "ability": "Fähigkeit:", "nature": "Wesen:", - "epic": "Episch", - "rare": "Selten", - "common": "Gewöhnlich" } as const; diff --git a/src/locales/en/common.ts b/src/locales/en/common.ts index 82966b4ffeb..750322e1f09 100644 --- a/src/locales/en/common.ts +++ b/src/locales/en/common.ts @@ -2,4 +2,9 @@ import { SimpleTranslationEntries } from "#app/interfaces/locales"; export const common: SimpleTranslationEntries = { "start": "Start", + "luckIndicator": "Luck:", + "shinyOnHover": "Shiny", + "commonShiny": "Common", + "rareShiny": "Rare", + "epicShiny": "Epic", } as const; diff --git a/src/locales/en/pokemon-info-container.ts b/src/locales/en/pokemon-info-container.ts index 0d37b2ead62..64e5bd3cfcc 100644 --- a/src/locales/en/pokemon-info-container.ts +++ b/src/locales/en/pokemon-info-container.ts @@ -5,8 +5,5 @@ export const pokemonInfoContainer: SimpleTranslationEntries = { "gender": "Gender:", "ability": "Ability:", "nature": "Nature:", - "epic": "Epic", - "rare": "Rare", - "common": "Common", "form": "Form:" } as const; diff --git a/src/locales/es/common.ts b/src/locales/es/common.ts index 82966b4ffeb..347b39c973c 100644 --- a/src/locales/es/common.ts +++ b/src/locales/es/common.ts @@ -2,4 +2,9 @@ import { SimpleTranslationEntries } from "#app/interfaces/locales"; export const common: SimpleTranslationEntries = { "start": "Start", + "luckIndicator": "Suerte:", + "shinyOnHover": "Shiny", + "commonShiny": "Común", + "rareShiny": "Raro", + "epicShiny": "Épico", } as const; diff --git a/src/locales/es/pokemon-info-container.ts b/src/locales/es/pokemon-info-container.ts index ad0f951b984..6f97f29ee39 100644 --- a/src/locales/es/pokemon-info-container.ts +++ b/src/locales/es/pokemon-info-container.ts @@ -5,7 +5,4 @@ export const pokemonInfoContainer: SimpleTranslationEntries = { "gender": "Género:", "ability": "Habilid:", "nature": "Natur:", - "epic": "Épico", - "rare": "Raro", - "common": "Común" } as const; diff --git a/src/locales/fr/common.ts b/src/locales/fr/common.ts index e4ccc627f5e..c8e3d58dd3e 100644 --- a/src/locales/fr/common.ts +++ b/src/locales/fr/common.ts @@ -2,4 +2,9 @@ import { SimpleTranslationEntries } from "#app/interfaces/locales"; export const common: SimpleTranslationEntries = { "start": "Lancer", + "luckIndicator": "Chance :", + "shinyOnHover": "Chromatique", + "commonShiny": "Commun", + "rareShiny": "Rare", + "epicShiny": "Épique", } as const; diff --git a/src/locales/fr/pokemon-info-container.ts b/src/locales/fr/pokemon-info-container.ts index c61c23b0970..4e09e8915ad 100644 --- a/src/locales/fr/pokemon-info-container.ts +++ b/src/locales/fr/pokemon-info-container.ts @@ -5,8 +5,5 @@ export const pokemonInfoContainer: SimpleTranslationEntries = { "gender": "Sexe :", "ability": "Talent :", "nature": "Nature :", - "epic": "Épique", - "rare": "Rare", - "common": "Commun", "form": "Forme :" } as const; diff --git a/src/locales/it/common.ts b/src/locales/it/common.ts index f42fa311472..de5197cbeeb 100644 --- a/src/locales/it/common.ts +++ b/src/locales/it/common.ts @@ -2,4 +2,9 @@ import { SimpleTranslationEntries } from "#app/interfaces/locales"; export const common: SimpleTranslationEntries = { "start": "Inizia", + "luckIndicator": "Luck:", + "shinyOnHover": "Shiny", + "commonShiny": "Comune", + "rareShiny": "Raro", + "epicShiny": "Epico", } as const; diff --git a/src/locales/it/pokemon-info-container.ts b/src/locales/it/pokemon-info-container.ts index 2d80763abc3..03d83a1e6d7 100644 --- a/src/locales/it/pokemon-info-container.ts +++ b/src/locales/it/pokemon-info-container.ts @@ -5,7 +5,4 @@ export const pokemonInfoContainer: SimpleTranslationEntries = { "gender": "Genere:", "ability": "Abilità:", "nature": "Natura:", - "epic": "Epico", - "rare": "Raro", - "common": "Comune" } as const; diff --git a/src/locales/ko/common.ts b/src/locales/ko/common.ts index d87be482f99..30df85cb3a6 100644 --- a/src/locales/ko/common.ts +++ b/src/locales/ko/common.ts @@ -2,4 +2,9 @@ import { SimpleTranslationEntries } from "#app/interfaces/locales"; export const common: SimpleTranslationEntries = { "start": "시작", + "luckIndicator": "행운:", + "shinyOnHover": "색이 다른", + "commonShiny": "커먼", + "rareShiny": "레어", + "epicShiny": "에픽", } as const; diff --git a/src/locales/ko/pokemon-info-container.ts b/src/locales/ko/pokemon-info-container.ts index 31048dee3ef..80a0d59addd 100644 --- a/src/locales/ko/pokemon-info-container.ts +++ b/src/locales/ko/pokemon-info-container.ts @@ -5,8 +5,5 @@ export const pokemonInfoContainer: SimpleTranslationEntries = { "gender": "성별:", "ability": "특성:", "nature": "성격:", - "epic": "에픽", - "rare": "레어", - "common": "커먼", "form": "폼:" } as const; diff --git a/src/locales/pt_BR/common.ts b/src/locales/pt_BR/common.ts index d7cbfd5d052..7161f5c9966 100644 --- a/src/locales/pt_BR/common.ts +++ b/src/locales/pt_BR/common.ts @@ -2,4 +2,9 @@ import { SimpleTranslationEntries } from "#app/interfaces/locales"; export const common: SimpleTranslationEntries = { "start": "Iniciar", + "luckIndicator": "Sorte:", + "shinyOnHover": "Shiny", + "commonShiny": "Comum", + "rareShiny": "Raro", + "epicShiny": "Épico", } as const; diff --git a/src/locales/pt_BR/pokemon-info-container.ts b/src/locales/pt_BR/pokemon-info-container.ts index 31b93d90daf..5789e60b274 100644 --- a/src/locales/pt_BR/pokemon-info-container.ts +++ b/src/locales/pt_BR/pokemon-info-container.ts @@ -5,7 +5,5 @@ export const pokemonInfoContainer: SimpleTranslationEntries = { "gender": "Gênero:", "ability": "Habilidade:", "nature": "Natureza:", - "epic": "Épico", - "rare": "Raro", - "common": "Comum", + "form": "Forma:", } as const; diff --git a/src/locales/zh_CN/common.ts b/src/locales/zh_CN/common.ts index 29f54ff0dc9..7c2c73eb3c0 100644 --- a/src/locales/zh_CN/common.ts +++ b/src/locales/zh_CN/common.ts @@ -2,4 +2,9 @@ import { SimpleTranslationEntries } from "#app/interfaces/locales"; export const common: SimpleTranslationEntries = { "start": "开始", + "luckIndicator": "幸运:", + "shinyOnHover": "闪光", + "commonShiny": "常见", + "rareShiny": "稀有", + "epicShiny": "史诗", } as const; diff --git a/src/locales/zh_CN/pokemon-info-container.ts b/src/locales/zh_CN/pokemon-info-container.ts index f7072276e65..eca518c3806 100644 --- a/src/locales/zh_CN/pokemon-info-container.ts +++ b/src/locales/zh_CN/pokemon-info-container.ts @@ -5,7 +5,4 @@ export const pokemonInfoContainer: SimpleTranslationEntries = { "gender": "性别:", "ability": "特性:", "nature": "性格:", - "epic": "史诗", - "rare": "稀有", - "common": "常见" } as const; diff --git a/src/locales/zh_TW/common.ts b/src/locales/zh_TW/common.ts index c3dc42785ee..a2112cc594e 100644 --- a/src/locales/zh_TW/common.ts +++ b/src/locales/zh_TW/common.ts @@ -2,4 +2,9 @@ import { SimpleTranslationEntries } from "#app/interfaces/locales"; export const common: SimpleTranslationEntries = { "start": "開始", + "luckIndicator": "Luck:", + "shinyOnHover": "Shiny", + "commonShiny": "常見", + "rareShiny": "稀有", + "epicShiny": "史詩", } as const; diff --git a/src/locales/zh_TW/pokemon-info-container.ts b/src/locales/zh_TW/pokemon-info-container.ts index 19cb5219465..eca518c3806 100644 --- a/src/locales/zh_TW/pokemon-info-container.ts +++ b/src/locales/zh_TW/pokemon-info-container.ts @@ -5,7 +5,4 @@ export const pokemonInfoContainer: SimpleTranslationEntries = { "gender": "性别:", "ability": "特性:", "nature": "性格:", - "epic": "史詩", - "rare": "稀有", - "common": "常見" } as const; diff --git a/src/ui/battle-info.ts b/src/ui/battle-info.ts index c246af73d07..3b889228e27 100644 --- a/src/ui/battle-info.ts +++ b/src/ui/battle-info.ts @@ -10,6 +10,7 @@ import { getVariantTint } from "#app/data/variant"; import { BattleStat } from "#app/data/battle-stat"; import BattleFlyout from "./battle-flyout"; import { WindowVariant, addWindow } from "./ui-theme"; +import i18next from "i18next"; const battleStatOrder = [ BattleStat.ATK, BattleStat.DEF, BattleStat.SPATK, BattleStat.SPDEF, BattleStat.ACC, BattleStat.EVA, BattleStat.SPD ]; @@ -315,9 +316,9 @@ export default class BattleInfo extends Phaser.GameObjects.Container { this.shinyIcon.setTint(getVariantTint(baseVariant)); if (this.shinyIcon.visible) { const shinyDescriptor = doubleShiny || baseVariant ? - `${baseVariant === 2 ? "Epic" : baseVariant === 1 ? "Rare" : "Common"}${doubleShiny ? `/${pokemon.fusionVariant === 2 ? "Epic" : pokemon.fusionVariant === 1 ? "Rare" : "Common"}` : ""}` + `${baseVariant === 2 ? i18next.t("common:epicShiny") : baseVariant === 1 ? i18next.t("common:rareShiny") : i18next.t("common:commonShiny")}${doubleShiny ? `/${pokemon.fusionVariant === 2 ? i18next.t("common:epicShiny") : pokemon.fusionVariant === 1 ? i18next.t("common:rareShiny") : i18next.t("common:commonShiny")}` : ""}` : ""; - this.shinyIcon.on("pointerover", () => (this.scene as BattleScene).ui.showTooltip(null, `Shiny${shinyDescriptor ? ` (${shinyDescriptor})` : ""}`)); + this.shinyIcon.on("pointerover", () => (this.scene as BattleScene).ui.showTooltip(null, `${i18next.t("common:shinyOnHover")}${shinyDescriptor ? ` (${shinyDescriptor})` : ""}`)); this.shinyIcon.on("pointerout", () => (this.scene as BattleScene).ui.hideTooltip()); } diff --git a/src/ui/pokemon-info-container.ts b/src/ui/pokemon-info-container.ts index 9ab3028b564..9f4df2b20b4 100644 --- a/src/ui/pokemon-info-container.ts +++ b/src/ui/pokemon-info-container.ts @@ -300,9 +300,9 @@ export default class PokemonInfoContainer extends Phaser.GameObjects.Container { this.pokemonShinyIcon.setTint(getVariantTint(baseVariant)); if (this.pokemonShinyIcon.visible) { const shinyDescriptor = doubleShiny || baseVariant ? - `${baseVariant === 2 ? i18next.t("pokemonInfoContainer:epic") : baseVariant === 1 ? i18next.t("pokemonInfoContainer:rare") : i18next.t("pokemonInfoContainer:common")}${doubleShiny ? `/${pokemon.fusionVariant === 2 ? i18next.t("pokemonInfoContainer:epic") : pokemon.fusionVariant === 1 ? i18next.t("pokemonInfoContainer:rare") : i18next.t("pokemonInfoContainer:common")}` : ""}` + `${baseVariant === 2 ? i18next.t("common:epicShiny") : baseVariant === 1 ? i18next.t("common:rareShiny") : i18next.t("common:commonShiny")}${doubleShiny ? `/${pokemon.fusionVariant === 2 ? i18next.t("common:epicShiny") : pokemon.fusionVariant === 1 ? i18next.t("common:rareShiny") : i18next.t("common:commonShiny")}` : ""}` : ""; - this.pokemonShinyIcon.on("pointerover", () => (this.scene as BattleScene).ui.showTooltip(null, `Shiny${shinyDescriptor ? ` (${shinyDescriptor})` : ""}`, true)); + this.pokemonShinyIcon.on("pointerover", () => (this.scene as BattleScene).ui.showTooltip(null, `${i18next.t("common:shinyOnHover")}${shinyDescriptor ? ` (${shinyDescriptor})` : ""}`, true)); this.pokemonShinyIcon.on("pointerout", () => (this.scene as BattleScene).ui.hideTooltip()); const newShiny = BigInt(Math.pow(2, (pokemon.shiny ? 1 : 0))); diff --git a/src/ui/starter-select-ui-handler.ts b/src/ui/starter-select-ui-handler.ts index d0e644870a1..25d1060f23e 100644 --- a/src/ui/starter-select-ui-handler.ts +++ b/src/ui/starter-select-ui-handler.ts @@ -565,7 +565,7 @@ export default class StarterSelectUiHandler extends MessageUiHandler { this.type2Icon.setOrigin(0, 0); this.starterSelectContainer.add(this.type2Icon); - this.pokemonLuckLabelText = addTextObject(this.scene, 8, 89, "Luck:", TextStyle.WINDOW_ALT, { fontSize: "56px" }); + this.pokemonLuckLabelText = addTextObject(this.scene, 8, 89, i18next.t("common:luckIndicator"), TextStyle.WINDOW_ALT, { fontSize: "56px" }); this.pokemonLuckLabelText.setOrigin(0, 0); this.starterSelectContainer.add(this.pokemonLuckLabelText); diff --git a/src/ui/summary-ui-handler.ts b/src/ui/summary-ui-handler.ts index 73edda0ba44..ae94951bc4c 100644 --- a/src/ui/summary-ui-handler.ts +++ b/src/ui/summary-ui-handler.ts @@ -345,9 +345,9 @@ export default class SummaryUiHandler extends UiHandler { this.shinyIcon.setTint(getVariantTint(baseVariant)); if (this.shinyIcon.visible) { const shinyDescriptor = doubleShiny || baseVariant ? - `${baseVariant === 2 ? "Epic" : baseVariant === 1 ? "Rare" : "Common"}${doubleShiny ? `/${this.pokemon.fusionVariant === 2 ? "Epic" : this.pokemon.fusionVariant === 1 ? "Rare" : "Common"}` : ""}` + `${baseVariant === 2 ? i18next.t("common:epicShiny") : baseVariant === 1 ? i18next.t("common:rareShiny") : i18next.t("common:commonShiny")}${doubleShiny ? `/${this.pokemon.fusionVariant === 2 ? i18next.t("common:epicShiny") : this.pokemon.fusionVariant === 1 ? i18next.t("common:rareShiny") : i18next.t("common:commonShiny")}` : ""}` : ""; - this.shinyIcon.on("pointerover", () => (this.scene as BattleScene).ui.showTooltip(null, `Shiny${shinyDescriptor ? ` (${shinyDescriptor})` : ""}`, true)); + this.shinyIcon.on("pointerover", () => (this.scene as BattleScene).ui.showTooltip(null, `${i18next.t("common:shinyOnHover")}${shinyDescriptor ? ` (${shinyDescriptor})` : ""}`, true)); this.shinyIcon.on("pointerout", () => (this.scene as BattleScene).ui.hideTooltip()); } @@ -717,7 +717,7 @@ export default class SummaryUiHandler extends UiHandler { } if (this.pokemon.getLuck()) { - const luckLabelText = addTextObject(this.scene, 141, 28, "Luck:", TextStyle.SUMMARY_ALT); + const luckLabelText = addTextObject(this.scene, 141, 28, i18next.t("common:luckIndicator"), TextStyle.SUMMARY_ALT); luckLabelText.setOrigin(0, 0); profileContainer.add(luckLabelText); From fead078bc567959851640a1a57bf03cc15d5e1af Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jos=C3=A9=20Ricardo=20Fleury=20Oliveira?= Date: Thu, 4 Jul 2024 22:40:11 -0300 Subject: [PATCH 15/37] Localization: Add new translations for party UI handler (#2566) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Localization: Add new translations for party UI handler * fixes * Update src/locales/fr/party-ui-handler.ts Co-authored-by: Lugiad' * Update src/locales/de/party-ui-handler.ts Co-authored-by: Jannik Tappert <38758606+CodeTappert@users.noreply.github.com> * minor fix * Update src/locales/fr/party-ui-handler.ts Co-authored-by: Lugiad' * Update src/locales/ko/party-ui-handler.ts Co-authored-by: sodam <66295123+sodaMelon@users.noreply.github.com> * change order and name of "Do what with this Pokémon?" message * reverted imports * update party-ui-handler translations for multiple languages * Update src/locales/fr/party-ui-handler.ts Co-authored-by: Lugiad' * Update src/locales/de/party-ui-handler.ts Co-authored-by: Jannik Tappert <38758606+CodeTappert@users.noreply.github.com> * Update src/locales/de/party-ui-handler.ts Co-authored-by: Jannik Tappert <38758606+CodeTappert@users.noreply.github.com> * Update src/locales/zh_CN/party-ui-handler.ts Co-authored-by: Yonmaru40 <47717431+40chyan@users.noreply.github.com> * Update src/locales/ko/party-ui-handler.ts Co-authored-by: Enoch * Update src/locales/ko/party-ui-handler.ts Co-authored-by: Enoch * Update src/locales/ko/party-ui-handler.ts Co-authored-by: Enoch * minor fix * pt tweak * Update src/locales/ko/party-ui-handler.ts Co-authored-by: Enoch * Update src/locales/ko/party-ui-handler.ts Co-authored-by: returntoice * Update src/locales/ko/party-ui-handler.ts Co-authored-by: returntoice * Update src/locales/ko/party-ui-handler.ts Co-authored-by: returntoice * Update src/locales/ko/party-ui-handler.ts Co-authored-by: Enoch * Update src/locales/es/party-ui-handler.ts Co-authored-by: GoldTra <162721984+GoldTra@users.noreply.github.com> --------- Co-authored-by: Lugiad' Co-authored-by: Jannik Tappert <38758606+CodeTappert@users.noreply.github.com> Co-authored-by: sodam <66295123+sodaMelon@users.noreply.github.com> Co-authored-by: Yonmaru40 <47717431+40chyan@users.noreply.github.com> Co-authored-by: Enoch Co-authored-by: returntoice Co-authored-by: GoldTra <162721984+GoldTra@users.noreply.github.com> --- src/locales/de/menu.ts | 1 - src/locales/de/party-ui-handler.ts | 45 ++++++++++++++++++- src/locales/en/menu.ts | 1 - src/locales/en/party-ui-handler.ts | 46 +++++++++++++++++++- src/locales/es/menu.ts | 1 - src/locales/es/party-ui-handler.ts | 45 ++++++++++++++++++- src/locales/fr/menu.ts | 1 - src/locales/fr/party-ui-handler.ts | 46 +++++++++++++++++++- src/locales/it/menu.ts | 1 - src/locales/it/party-ui-handler.ts | 45 ++++++++++++++++++- src/locales/ko/menu.ts | 1 - src/locales/ko/party-ui-handler.ts | 45 ++++++++++++++++++- src/locales/pt_BR/menu.ts | 1 - src/locales/pt_BR/party-ui-handler.ts | 43 +++++++++++++++++++ src/locales/zh_CN/menu.ts | 1 - src/locales/zh_CN/party-ui-handler.ts | 45 ++++++++++++++++++- src/locales/zh_TW/menu.ts | 1 - src/locales/zh_TW/party-ui-handler.ts | 45 ++++++++++++++++++- src/ui/party-ui-handler.ts | 62 +++++++++++++-------------- 19 files changed, 426 insertions(+), 50 deletions(-) diff --git a/src/locales/de/menu.ts b/src/locales/de/menu.ts index bffcdeb1c3e..cb8cf9a318a 100644 --- a/src/locales/de/menu.ts +++ b/src/locales/de/menu.ts @@ -53,6 +53,5 @@ export const menu: SimpleTranslationEntries = { "no":"Nein", "disclaimer": "HAFTUNGSAUSSCHLUSS", "disclaimerDescription": "Dieses Spiel ist ein unfertiges Produkt. Es kann spielbeinträchtigende Fehler (bis hin zum Verlust des Speicherstandes)\n aufweisen, sich ohne Vorankündigung ändern und es gibt keine Garantie dass es weiterentwickelt oder fertiggestellt wird.", - "choosePokemon": "Wähle ein Pokémon.", "errorServerDown": "Ups! Es gab einen Fehler beim Versuch\nden Server zu kontaktieren\nLasse dieses Fenster offen\nDu wirst automatisch neu verbunden.", } as const; diff --git a/src/locales/de/party-ui-handler.ts b/src/locales/de/party-ui-handler.ts index da83d2370c3..604efb83628 100644 --- a/src/locales/de/party-ui-handler.ts +++ b/src/locales/de/party-ui-handler.ts @@ -6,5 +6,48 @@ export const partyUiHandler: SimpleTranslationEntries = { "CANCEL": "Abbrechen", "RELEASE": "Freilassen", "APPLY": "Anwenden", - "TEACH": "Erlernen" + "TEACH": "Erlernen", + "SPLICE": "Fusionieren", + "UNSPLICE": "Defusionieren", + "ACTIVATE": "Aktivieren", + "DEACTIVATE": "Deaktivieren", + "TRANSFER": "Übertragen", + "ALL": "Alle", + "PASS_BATON": "Stafette nutzen", + "UNPAUSE_EVOLUTION": "Entwicklung fortsetzen", + "REVIVE": "Wiederbeleben", + + "choosePokemon": "Wähle ein Pokémon.", + "doWhatWithThisPokemon": "Was soll mit diesem Pokémon geschehen?", + "noEnergy": "{{pokemonName}} ist nicht fit genug, um zu kämpfen!", + "hasEnergy": "{{pokemonName}} steckt noch voller Energie", + "cantBeUsed": "{{pokemonName}} kann in dieser Herausforderung nicht verwendet werden!", + "tooManyItems": "{{pokemonName}} trägt bereits zu viele dieser Items!", + "anyEffect": "Das würde keine Wirkung zeigen.", + "unpausedEvolutions": "Entwicklungen für {{pokemonName}} wurden wieder aktiviert.", + "unspliceConfirmation": "Willst du wirklich {{fusionName}} von {{pokemonName}} defusionieren? {{fusionName}} wird freigelassen.", + "wasReverted": "{{fusionName}} verwandelt sich in {{pokemonName}} zurück.", + "releaseConfirmation": "Möchtest du {{pokemonName}} wirklich freilassen?", + "releaseInBattle": "Pokémon, die aktuell im Kampf sind, können nicht freigelassen werden.", + "selectAMove": "Wähle eine Attacke.", + "changeQuantity": "Wähle ein getragenes Item aus, das übertragen werden soll. Nutze < und > um die Anzahl zu ändern.", + "selectAnotherPokemonToSplice": "Wähle ein anderes Pokémon mit dem fusioniert werden soll aus.", + "cancel": "Abbrechen", + + // Slot TM text + "able": "Erlernbar!", + "notAble": "Nicht erlernbar", + "learned": "Bereits erlernt!", + + // Releasing messages + "goodbye": "Auf wiedersehen, {{pokemonName}}!", + "byebye": "Byebye, {{pokemonName}}!", + "farewell": "Mach’s gut, {{pokemonName}}!", + "soLong": "Bis dann, {{pokemonName}}!", + "thisIsWhereWePart": "Nun heißt es Abschied nehmen, {{pokemonName}}!", + "illMissYou": "Ich werde dich vermissen, {{pokemonName}}!", + "illNeverForgetYou": "Ich werde dich niemals vergessen, {{pokemonName}}!", + "untilWeMeetAgain": "Bis wir uns wiedersehen, {{pokemonName}}!", + "sayonara": "Sayonara, {{pokemonName}}!", + "smellYaLater": "Also dann, man riecht sich! Ciao!, {{pokemonName}}!", } as const; diff --git a/src/locales/en/menu.ts b/src/locales/en/menu.ts index 47d19bd56b6..542399fee51 100644 --- a/src/locales/en/menu.ts +++ b/src/locales/en/menu.ts @@ -53,6 +53,5 @@ export const menu: SimpleTranslationEntries = { "no":"No", "disclaimer": "DISCLAIMER", "disclaimerDescription": "This game is an unfinished product; it might have playability issues (including the potential loss of save data),\n change without notice, and may or may not be updated further or completed.", - "choosePokemon": "Choose a Pokémon.", "errorServerDown": "Oops! There was an issue contacting the server.\n\nYou may leave this window open,\nthe game will automatically reconnect.", } as const; diff --git a/src/locales/en/party-ui-handler.ts b/src/locales/en/party-ui-handler.ts index b7eac04b4c8..78fdcc14dbe 100644 --- a/src/locales/en/party-ui-handler.ts +++ b/src/locales/en/party-ui-handler.ts @@ -1,11 +1,53 @@ import { SimpleTranslationEntries } from "#app/interfaces/locales"; export const partyUiHandler: SimpleTranslationEntries = { - "ALL": "All", "SEND_OUT": "Send Out", "SUMMARY": "Summary", "CANCEL": "Cancel", "RELEASE": "Release", "APPLY": "Apply", - "TEACH": "Teach" + "TEACH": "Teach", + "SPLICE": "Splice", + "UNSPLICE": "Unsplice", + "ACTIVATE": "Activate", + "DEACTIVATE": "Deactivate", + "TRANSFER": "Transfer", + "ALL": "All", + "PASS_BATON": "Pass Baton", + "UNPAUSE_EVOLUTION": "Unpause Evolution", + "REVIVE": "Revive", + + "choosePokemon": "Choose a Pokémon.", + "doWhatWithThisPokemon": "Do what with this Pokémon?", + "noEnergy": "{{pokemonName}} has no energy\nleft to battle!", + "hasEnergy": "{{pokemonName}} still has energy\nto battle!", + "cantBeUsed": "{{pokemonName}} can't be used in\nthis challenge!", + "tooManyItems": "{{pokemonName}} has too many\nof this item!", + "anyEffect": "It won't have any effect.", + "unpausedEvolutions": "Evolutions have been unpaused for {{pokemonName}}.", + "unspliceConfirmation": "Do you really want to unsplice {{fusionName}}\nfrom {{pokemonName}}? {{fusionName}} will be lost.", + "wasReverted": "{{fusionName}} was reverted to {{pokemonName}}.", + "releaseConfirmation": "Do you really want to release {{pokemonName}}?", + "releaseInBattle": "You can't release a Pokémon that's in battle!", + "selectAMove": "Select a move.", + "changeQuantity": "Select a held item to transfer.\nUse < and > to change the quantity.", + "selectAnotherPokemonToSplice": "Select another Pokémon to splice.", + "cancel": "Cancel", + + // Slot TM text + "able": "Able", + "notAble": "Not able", + "learned": "Learned", + + // Releasing messages + "goodbye": "Goodbye, {{pokemonName}}!", + "byebye": "Byebye, {{pokemonName}}!", + "farewell": "Farewell, {{pokemonName}}!", + "soLong": "So long, {{pokemonName}}!", + "thisIsWhereWePart": "This is where we part, {{pokemonName}}!", + "illMissYou": "I'll miss you, {{pokemonName}}!", + "illNeverForgetYou": "I'll never forget you, {{pokemonName}}!", + "untilWeMeetAgain": "Until we meet again, {{pokemonName}}!", + "sayonara": "Sayonara, {{pokemonName}}!", + "smellYaLater": "Smell ya later, {{pokemonName}}!", } as const; diff --git a/src/locales/es/menu.ts b/src/locales/es/menu.ts index 8176af456e1..85d9d50f015 100644 --- a/src/locales/es/menu.ts +++ b/src/locales/es/menu.ts @@ -53,6 +53,5 @@ export const menu: SimpleTranslationEntries = { "no":"No", "disclaimer": "AVISO", "disclaimerDescription": "Este juego es un producto inacabado; puede tener problemas de jugabilidad (incluyendo la posible pérdida\n de datos de guardado),cambiar sin avisar, y puede o no puede ser actualizado hasta ser completado.", - "choosePokemon": "Choose a Pokémon.", "errorServerDown": "¡Ups! Ha habido un problema al contactar con el servidor.\n\nPuedes mantener esta ventana abierta,\nel juego se reconectará automáticamente.", } as const; diff --git a/src/locales/es/party-ui-handler.ts b/src/locales/es/party-ui-handler.ts index 894ea14bb12..b310a98840d 100644 --- a/src/locales/es/party-ui-handler.ts +++ b/src/locales/es/party-ui-handler.ts @@ -6,5 +6,48 @@ export const partyUiHandler: SimpleTranslationEntries = { "CANCEL": "Cancel", "RELEASE": "Release", "APPLY": "Apply", - "TEACH": "Teach" + "TEACH": "Enseñar", + "SPLICE": "Fusionar", + "UNSPLICE": "Separar", + "ACTIVATE": "Activar", + "DEACTIVATE": "Desactivar", + "TRANSFER": "Transferir", + "ALL": "Todo", + "PASS_BATON": "Relevo", + "UNPAUSE_EVOLUTION": "Reanudar Evolución", + "REVIVE": "Revivir", + + "choosePokemon": "Elige a un Pokémon.", + "doWhatWithThisPokemon": "¿Que quieres hacer con este Pokémon?", + "noEnergy": "¡A {{pokemonName}} no le quedan\nfuerzas para luchar!", + "hasEnergy": "¡A {{pokemonName}} le quedan\nfuerzas para luchar!", + "cantBeUsed": "¡{{pokemonName}} no puede usarse\nen este desafío!", + "tooManyItems": "¡{{pokemonName}} tiene demasiados\nde este objeto!", + "anyEffect": "No tendría ningún efecto.", + "unpausedEvolutions": "Se reanudó las evoluciones de {{pokemonName}}.", + "unspliceConfirmation": "¿Seguro que quiere separar a {{fusionName}}\nde {{pokemonName}}? {{fusionName}} se perderá.", + "wasReverted": "{{fusionName}} se revirtió a {{pokemonName}}.", + "releaseConfirmation": "¿Quieres liberar a {{pokemonName}}?", + "releaseInBattle": "¡No puedes liberar un Pokémon que está en batalla!", + "selectAMove": "Selecciona un movimiento.", + "changeQuantity": "Selecciona un objeto equipado para transferir.\nUsa < y > para cambiar la cantidad.", + "selectAnotherPokemonToSplice": "Selecciona otro Pokémon para fusionar.", + "cancel": "Salir", + + // Slot TM text + "able": "Apto", + "notAble": "No apto", + "learned": "Aprendido", + + // Releasing messages + "goodbye": "¡Adiós, {{pokemonName}}!", + "byebye": "¡Chao, {{pokemonName}}!", + "farewell": "¡Hasta luego, {{pokemonName}}!", + "soLong": "¡Nos vemos, {{pokemonName}}!", + "thisIsWhereWePart": "¡Aquí es donde nos despedimos, {{pokemonName}}!", + "illMissYou": "¡Te echaré de menos, {{pokemonName}}!", + "illNeverForgetYou": "¡Nunca te olvidaré, {{pokemonName}}!", + "untilWeMeetAgain": "¡Hasta que nos volvamos a encontrar, {{pokemonName}}!", + "sayonara": "¡Sayonara, {{pokemonName}}!", + "smellYaLater": "¡Nos vemos luego, {{pokemonName}}!", } as const; diff --git a/src/locales/fr/menu.ts b/src/locales/fr/menu.ts index 0402bd4bfda..3aee5c42103 100644 --- a/src/locales/fr/menu.ts +++ b/src/locales/fr/menu.ts @@ -48,6 +48,5 @@ export const menu: SimpleTranslationEntries = { "no":"Non", "disclaimer": "AVERTISSEMENT", "disclaimerDescription": "Ce jeu n’est pas un produit fini et peut contenir des problèmes de jouabilité, dont de possibles pertes de sauvegardes,\ndes modifications sans avertissement et pourrait ou non encore être mis à jour ou terminé.", - "choosePokemon": "Sélectionnez un Pokémon.", "errorServerDown": "Oupsi ! Un problème de connexion au serveur est survenu.\n\nVous pouvez garder cette fenêtre ouverte,\nle jeu se reconnectera automatiquement.", } as const; diff --git a/src/locales/fr/party-ui-handler.ts b/src/locales/fr/party-ui-handler.ts index 369f7b65bb9..f64859a3a14 100644 --- a/src/locales/fr/party-ui-handler.ts +++ b/src/locales/fr/party-ui-handler.ts @@ -1,11 +1,53 @@ import { SimpleTranslationEntries } from "#app/interfaces/locales"; export const partyUiHandler: SimpleTranslationEntries = { - "ALL": "Tout", "SEND_OUT": "Envoyer", "SUMMARY": "Résumé", "CANCEL": "Annuler", "RELEASE": "Relâcher", "APPLY": "Appliquer", - "TEACH": "Apprendre" + "TEACH": "Apprendre", + "SPLICE": "Fusionner", + "UNSPLICE": "Séparer", + "ACTIVATE": "Activer", + "DEACTIVATE": "Désactiver", + "TRANSFER": "Transférer", + "ALL": "Tout", + "PASS_BATON": "Relais", + "UNPAUSE_EVOLUTION": "Réactiver Évolution", + "REVIVE": "Ranimer", + + "choosePokemon": "Sélectionnez un Pokémon.", + "doWhatWithThisPokemon": "Que faire avec ce Pokémon ?", + "noEnergy": "{{pokemonName}} n’a plus l’énergie\nde se battre !", + "hasEnergy": "{{pokemonName}} peut toujours\nse battre !", + "cantBeUsed": "{{pokemonName}} ne peut pas\nse battre pour ce challenge !", + "tooManyItems": "{{pokemonName}} porte trop\nd’exemplaires de cet objet !", + "anyEffect": "Cela n’aura aucun effet.", + "unpausedEvolutions": "{{pokemonName}} peut de nouveau évoluer.", + "unspliceConfirmation": "Voulez-vous vraiment séparer {{fusionName}}\nde {{pokemonName}} ? {{fusionName}} sera perdu.", + "wasReverted": "{{fusionName}} est redevenu {{pokemonName}}.", + "releaseConfirmation": "Voulez-vous relâcher {{pokemonName}} ?", + "releaseInBattle": "Vous ne pouvez pas relâcher Pokémon en combat !", + "selectAMove": "Sélectionnez une capacité.", + "changeQuantity": "Sélect. un objet à transférer.\nChangez la quantité avec < et >.", + "selectAnotherPokemonToSplice": "Sélectionnez un autre Pokémon à séparer.", + "cancel": "Sortir", + + // Slot TM text + "able": "Apte", + "notAble": "Pas Apte", + "learned": "Appris", + + // Releasing messages + "goodbye": "Au revoir, {{pokemonName}} !", + "byebye": "Bye-bye, {{pokemonName}} !", + "farewell": "Adieu, {{pokemonName}} !", + "soLong": "Salut, {{pokemonName}} !", + "thisIsWhereWePart": "C’est là qu’on se sépare, {{pokemonName}}!", + "illMissYou": "Tu vas me manquer, {{pokemonName}} !", + "illNeverForgetYou": "Je ne t’oublierai pas, {{pokemonName}} !", + "untilWeMeetAgain": "À la prochaine, {{pokemonName}} !", + "sayonara": "Sayonara, {{pokemonName}} !", + "smellYaLater": "À la revoyure, {{pokemonName}} !", } as const; diff --git a/src/locales/it/menu.ts b/src/locales/it/menu.ts index 3336373a6c3..3e083d3d374 100644 --- a/src/locales/it/menu.ts +++ b/src/locales/it/menu.ts @@ -53,6 +53,5 @@ export const menu: SimpleTranslationEntries = { "no":"No", "disclaimer": "DISCLAIMER", "disclaimerDescription": "Questo gioco è un prodotto incompleto; si potrebbero riscontrare errori (inclusa la perdita dei dati di salvataggio),\ncambiamenti impercettibili, e non è detto che venga aggiornato nel tempo o mai completato del tutto.", - "choosePokemon": "Choose a Pokémon.", "errorServerDown": "Oops! There was an issue contacting the server.\n\nYou may leave this window open,\nthe game will automatically reconnect.", } as const; diff --git a/src/locales/it/party-ui-handler.ts b/src/locales/it/party-ui-handler.ts index c174df03d1f..86966a6e7f9 100644 --- a/src/locales/it/party-ui-handler.ts +++ b/src/locales/it/party-ui-handler.ts @@ -6,5 +6,48 @@ export const partyUiHandler: SimpleTranslationEntries = { "CANCEL": "Annulla", "RELEASE": "Rilascia", "APPLY": "Applica", - "TEACH": "Insegna" + "TEACH": "Insegna", + "SPLICE": "Splice", + "UNSPLICE": "Unsplice", + "ACTIVATE": "Activate", + "DEACTIVATE": "Deactivate", + "TRANSFER": "Transfer", + "ALL": "All", + "PASS_BATON": "Pass Baton", + "UNPAUSE_EVOLUTION": "Unpause Evolution", + "REVIVE": "Revive", + + "choosePokemon": "Choose a Pokémon.", + "doWhatWithThisPokemon": "Do what with this Pokémon?", + "noEnergy": "{{pokemonName}} has no energy\nleft to battle!", + "hasEnergy": "{{pokemonName}} still has energy\nto battle!", + "cantBeUsed": "{{pokemonName}} can't be used in\nthis challenge!", + "tooManyItems": "{{pokemonName}} has too many\nof this item!", + "anyEffect": "It won't have any effect.", + "unpausedEvolutions": "Evolutions have been unpaused for {{pokemonName}}.", + "unspliceConfirmation": "Do you really want to unsplice {{fusionName}}\nfrom {{pokemonName}}? {{fusionName}} will be lost.", + "wasReverted": "{{fusionName}} was reverted to {{pokemonName}}.", + "releaseConfirmation": "Do you really want to release {{pokemonName}}?", + "releaseInBattle": "You can't release a Pokémon that's in battle!", + "selectAMove": "Select a move.", + "changeQuantity": "Select a held item to transfer.\nUse < and > to change the quantity.", + "selectAnotherPokemonToSplice": "Select another Pokémon to splice.", + "cancel": "Cancel", + + // Slot TM text + "able": "Able", + "notAble": "Not able", + "learned": "Learned", + + // Releasing messages + "goodbye": "Goodbye, {{pokemonName}}!", + "byebye": "Byebye, {{pokemonName}}!", + "farewell": "Farewell, {{pokemonName}}!", + "soLong": "So long, {{pokemonName}}!", + "thisIsWhereWePart": "This is where we part, {{pokemonName}}!", + "illMissYou": "I'll miss you, {{pokemonName}}!", + "illNeverForgetYou": "I'll never forget you, {{pokemonName}}!", + "untilWeMeetAgain": "Until we meet again, {{pokemonName}}!", + "sayonara": "Sayonara, {{pokemonName}}!", + "smellYaLater": "Smell ya later, {{pokemonName}}!", } as const; diff --git a/src/locales/ko/menu.ts b/src/locales/ko/menu.ts index cf72dab8a37..0e12b3bd15e 100644 --- a/src/locales/ko/menu.ts +++ b/src/locales/ko/menu.ts @@ -53,6 +53,5 @@ export const menu: SimpleTranslationEntries = { "no":"아니오", "disclaimer": "면책 조항", "disclaimerDescription": "이 게임은 완전히 개발되지 않았습니다- (세이브 데이터 소실을 포함) 플레이에 지장을 주는 문제가 생길 수 있으며,\n공지 없이 업데이트가 진행 혹은 중지될 수 있습니다.", - "choosePokemon": "포켓몬을 선택하세요.", "errorServerDown": "서버 연결 중 문제가 발생했습니다.\n\n이 창을 종료하지 않고 두면,\n게임은 자동으로 재접속됩니다.", } as const; diff --git a/src/locales/ko/party-ui-handler.ts b/src/locales/ko/party-ui-handler.ts index 15a42ae0521..842f10209a9 100644 --- a/src/locales/ko/party-ui-handler.ts +++ b/src/locales/ko/party-ui-handler.ts @@ -6,5 +6,48 @@ export const partyUiHandler: SimpleTranslationEntries = { "CANCEL": "그만둔다", "RELEASE": "놓아준다", "APPLY": "사용한다", - "TEACH": "가르친다" + "TEACH": "가르친다", + "SPLICE": "융합", + "UNSPLICE": "융합 해제", + "ACTIVATE": "발동", + "DEACTIVATE": "해제", + "TRANSFER": "건넨다", + "ALL": "전부", + "PASS_BATON": "배턴터치한다", + "UNPAUSE_EVOLUTION": "진화 재개", + "REVIVE": "되살린다", + + "choosePokemon": "포켓몬을 선택하세요.", + "doWhatWithThisPokemon": "포켓몬을 어떻게 하겠습니까?", + "noEnergy": "{{pokemonName}}[[는]] 싸울 수 있는\n기력이 남아 있지 않습니다!", + "hasEnergy": "{{pokemonName}}[[는]]\n아직도 힘이 넘친다!", + "cantBeUsed": "{{pokemonName}}[[는]] 이 챌린지에서는\n쓸 수 없습니다.", + "tooManyItems": "{{pokemonName}}[[는]] 지닌 도구의 수가\n너무 많습니다", + "anyEffect": "써도 효과가 없다.", + "unpausedEvolutions": "{{pokemonName}}의 진화가 재개되었다.", + "unspliceConfirmation": "{{pokemonName}}로부터 {{fusionName}}의 융합을 해제하시겠습니까?\n{{fusionName}}는 사라지게 됩니다.", + "wasReverted": "{{fusionName}}은 {{pokemonName}}의 모습으로 돌아갔습니다!", + "releaseConfirmation": "{{pokemonName}}[[를]]\n정말 놓아주겠습니까?", + "releaseInBattle": "전투 중인 포켓몬은\n놓아줄 수 없습니다.", + "selectAMove": "기술을 선택해 주십시오", + "changeQuantity": "건네줄 지닌 도구를 선택해 주십시오.\n< 와 > 로 수량을 변경할 수 있습니다.", + "selectAnotherPokemonToSplice": "융합할 포켓몬을 선택해 주십시오.", + "cancel": "그만둔다", + + // Slot TM text + "able": "배울 수 있다", + "notAble": "배울 수 없다", + "learned": "알고 있다", + + // Releasing messages + "goodbye": "잘 가, {{pokemonName}}!", + "byebye": "바이바이, {{pokemonName}}!", + "farewell": "작별이야, {{pokemonName}}!", + "soLong": "안녕, {{pokemonName}}!", + "thisIsWhereWePart": "여기서 헤어지자, {{pokemonName}}!", + "illMissYou": "보고 싶을거야, {{pokemonName}}!", + "illNeverForgetYou": "잊지 못할거야, {{pokemonName}}!", + "untilWeMeetAgain": "다시 만날 때까지, {{pokemonName}}!", + "sayonara": "사요나라, {{pokemonName}}!", + "smellYaLater": "또 보자, {{pokemonName}}!", } as const; diff --git a/src/locales/pt_BR/menu.ts b/src/locales/pt_BR/menu.ts index a200f2c9abe..1e097737b69 100644 --- a/src/locales/pt_BR/menu.ts +++ b/src/locales/pt_BR/menu.ts @@ -53,6 +53,5 @@ export const menu: SimpleTranslationEntries = { "no": "Não", "disclaimer": "AVISO", "disclaimerDescription": "Este jogo é um produto inacabado; ele pode ter problemas de jogabilidade (incluindo possíveis\n perdas de dados salvos), sofrer alterações sem aviso prévio e pode ou não ser atualizado ou concluído.", - "choosePokemon": "Escolha um Pokémon.", "errorServerDown": "Opa! Não foi possível conectar-se ao servidor.\n\nVocê pode deixar essa janela aberta,\npois o jogo irá se reconectar automaticamente.", } as const; diff --git a/src/locales/pt_BR/party-ui-handler.ts b/src/locales/pt_BR/party-ui-handler.ts index 683dc4b368a..aac9e56aefa 100644 --- a/src/locales/pt_BR/party-ui-handler.ts +++ b/src/locales/pt_BR/party-ui-handler.ts @@ -7,4 +7,47 @@ export const partyUiHandler: SimpleTranslationEntries = { "RELEASE": "Soltar", "APPLY": "Aplicar", "TEACH": "Ensinar", + "SPLICE": "Fundir", + "UNSPLICE": "Separar", + "ACTIVATE": "Ativar", + "DEACTIVATE": "Desativar", + "TRANSFER": "Transferir", + "ALL": "Tudo", + "PASS_BATON": "Passar Bastão", + "UNPAUSE_EVOLUTION": "Ativar Evolução", + "REVIVE": "Reviver", + + "choosePokemon": "Escolha um Pokémon.", + "doWhatWithThisPokemon": "O que você deseja fazer?", + "noEnergy": "{{pokemonName}} não pode\nmais batalhar!", + "hasEnergy": "{{pokemonName}} ainda\npode batalhar!", + "cantBeUsed": "{{pokemonName}} não pode\nser usado neste desafio!", + "tooManyItems": "{{pokemonName}} já tem\nmuitos desse item!", + "anyEffect": "Isso não terá nenhum efeito.", + "unpausedEvolutions": "Evoluções foram despausadas para {{pokemonName}}.", + "unspliceConfirmation": "Você realmente deseja desfazer a fusão de {{fusionName}}\ncom {{pokemonName}}? {{fusionName}} será perdido.", + "wasReverted": "{{fusionName}} foi revertido para {{pokemonName}}.", + "releaseConfirmation": "Você realmente deseja soltar {{pokemonName}}?", + "releaseInBattle": "Você não pode soltar um Pokémon que está em batalha!", + "selectAMove": "Selecione um movimento.", + "changeQuantity": "Selecione um item para transferir.\nUse < e > para mudar a quantidade.", + "selectAnotherPokemonToSplice": "Selecione outro Pokémon para fundir.", + "cancel": "Voltar", + + // Slot TM text + "able": "Capaz", + "notAble": "Incapaz", + "learned": "Aprendido", + + // Releasing messages + "goodbye": "Adeus, {{pokemonName}}!", + "byebye": "Tchau, {{pokemonName}}!", + "farewell": "Até mais, {{pokemonName}}!", + "soLong": "Até logo, {{pokemonName}}!", + "thisIsWhereWePart": "Aqui é onde nos separamos, {{pokemonName}}!", + "illMissYou": "Vou sentir saudades, {{pokemonName}}!", + "illNeverForgetYou": "Nunca vou esquecer de você, {{pokemonName}}!", + "untilWeMeetAgain": "Até nos encontrarmos novamente, {{pokemonName}}!", + "sayonara": "Sayonara, {{pokemonName}}!", + "smellYaLater": "Te vejo depois, {{pokemonName}}!", } as const; diff --git a/src/locales/zh_CN/menu.ts b/src/locales/zh_CN/menu.ts index c19c41333e8..92a9d1bfbf4 100644 --- a/src/locales/zh_CN/menu.ts +++ b/src/locales/zh_CN/menu.ts @@ -53,6 +53,5 @@ export const menu: SimpleTranslationEntries = { "no": "否", "disclaimer": "免责声明", "disclaimerDescription": "这个游戏尚未完成; 可能存在游戏性问题(包括潜在的丢档风险)、\n 不经通知的调整、 未来可能会更新或完成更多内容", - "choosePokemon": "选择一只宝可梦。", "errorServerDown": "糟糕!访问服务器时发生了错误。\n\n你可以保持页面开启,\n游戏会自动重新连接。", } as const; diff --git a/src/locales/zh_CN/party-ui-handler.ts b/src/locales/zh_CN/party-ui-handler.ts index 52529bf8fa9..0348da87b17 100644 --- a/src/locales/zh_CN/party-ui-handler.ts +++ b/src/locales/zh_CN/party-ui-handler.ts @@ -6,5 +6,48 @@ export const partyUiHandler: SimpleTranslationEntries = { "CANCEL": "取消", "RELEASE": "放生", "APPLY": "应用", - "TEACH": "教授" + "TEACH": "教授", + "SPLICE": "融合", + "UNSPLICE": "分离", + "ACTIVATE": "激活", + "DEACTIVATE": "解除", + "TRANSFER": "交换", + "ALL": "全部道具", + "PASS_BATON": "接棒", + "UNPAUSE_EVOLUTION": "接触进化暂停", + "REVIVE": "复活", + + "choosePokemon": "选择一只宝可梦。", + "doWhatWithThisPokemon": "要对宝可梦做什么?", + "noEnergy": "{{pokemonName}}没有力气战斗了!", + "hasEnergy": "{{pokemonName}}仍然精神十足!", + "cantBeUsed": "{{pokemonName}}无法在此挑战中使用!", + "tooManyItems": "{{pokemonName}}拥有\n太多这个道具了!", + "anyEffect": "即便使用也无效果哦。", + "unpausedEvolutions": "{{pokemonName}}的进化停止了。", + "unspliceConfirmation": "真的要把{{fusionName}}\n从{{pokemonName}}身上分离吗? {{fusionName}}会就此消失。", + "wasReverted": "{{fusionName}}恢复成了{{pokemonName}}。", + "releaseConfirmation": "你真要放生{{pokemonName}}吗?", + "releaseInBattle": "你无法放生正在战斗中的宝可梦!", + "selectAMove": "选择一个招式。", + "changeQuantity": "选择一件道具来交换。\n使用 ← 和 → 来指定数量。", + "selectAnotherPokemonToSplice": "选择另一只宝可梦来融合。", + "cancel": "取消", + + // Slot TM text + "able": "能学会!", + "notAble": "无法学习", + "learned": "已习得", + + // Releasing messages + "goodbye": "再见,{{pokemonName}}!", + "byebye": "拜拜,{{pokemonName}}!", + "farewell": "再会了,{{pokemonName}}!", + "soLong": "告辞了,{{pokemonName}}!", + "thisIsWhereWePart": "就此分别吧,{{pokemonName}}!", + "illMissYou": "我会想你的,{{pokemonName}}!", + "illNeverForgetYou": "我不会忘记你的,{{pokemonName}}!", + "untilWeMeetAgain": "下次再见了,{{pokemonName}}!", + "sayonara": "撒由那拉,{{pokemonName}}!", + "smellYaLater": "拜拜了您嘞,{{pokemonName}}!", } as const; diff --git a/src/locales/zh_TW/menu.ts b/src/locales/zh_TW/menu.ts index 6d89bc256c6..564c20d5791 100644 --- a/src/locales/zh_TW/menu.ts +++ b/src/locales/zh_TW/menu.ts @@ -53,6 +53,5 @@ export const menu: SimpleTranslationEntries = { "no":"否", "disclaimer": "DISCLAIMER", "disclaimerDescription": "This game is an unfinished product; it might have playability issues (including the potential loss of save data),\n change without notice, and may or may not be updated further or completed.", - "choosePokemon": "Choose a Pokémon.", "errorServerDown": "Oops! There was an issue contacting the server.\n\nYou may leave this window open,\nthe game will automatically reconnect.", } as const; diff --git a/src/locales/zh_TW/party-ui-handler.ts b/src/locales/zh_TW/party-ui-handler.ts index dfe1a3629b6..efa9b2c8dab 100644 --- a/src/locales/zh_TW/party-ui-handler.ts +++ b/src/locales/zh_TW/party-ui-handler.ts @@ -6,5 +6,48 @@ export const partyUiHandler: SimpleTranslationEntries = { "CANCEL": "取消", "RELEASE": "放生", "APPLY": "應用", - "TEACH": "教授" + "TEACH": "教授", + "SPLICE": "Splice", + "UNSPLICE": "Unsplice", + "ACTIVATE": "Activate", + "DEACTIVATE": "Deactivate", + "TRANSFER": "Transfer", + "ALL": "All", + "PASS_BATON": "Pass Baton", + "UNPAUSE_EVOLUTION": "Unpause Evolution", + "REVIVE": "Revive", + + "choosePokemon": "Choose a Pokémon.", + "doWhatWithThisPokemon": "Do what with this Pokémon?", + "noEnergy": "{{pokemonName}} has no energy\nleft to battle!", + "hasEnergy": "{{pokemonName}} still has energy\nto battle!", + "cantBeUsed": "{{pokemonName}} can't be used in\nthis challenge!", + "tooManyItems": "{{pokemonName}} has too many\nof this item!", + "anyEffect": "It won't have any effect.", + "unpausedEvolutions": "Evolutions have been unpaused for {{pokemonName}}.", + "unspliceConfirmation": "Do you really want to unsplice {{fusionName}}\nfrom {{pokemonName}}? {{fusionName}} will be lost.", + "wasReverted": "{{fusionName}} was reverted to {{pokemonName}}.", + "releaseConfirmation": "Do you really want to release {{pokemonName}}?", + "releaseInBattle": "You can't release a Pokémon that's in battle!", + "selectAMove": "Select a move.", + "changeQuantity": "Select a held item to transfer.\nUse < and > to change the quantity.", + "selectAnotherPokemonToSplice": "Select another Pokémon to splice.", + "cancel": "Cancel", + + // Slot TM text + "able": "Able", + "notAble": "Not able", + "learned": "Learned", + + // Releasing messages + "goodbye": "Goodbye, {{pokemonName}}!", + "byebye": "Byebye, {{pokemonName}}!", + "farewell": "Farewell, {{pokemonName}}!", + "soLong": "So long, {{pokemonName}}!", + "thisIsWhereWePart": "This is where we part, {{pokemonName}}!", + "illMissYou": "I'll miss you, {{pokemonName}}!", + "illNeverForgetYou": "I'll never forget you, {{pokemonName}}!", + "untilWeMeetAgain": "Until we meet again, {{pokemonName}}!", + "sayonara": "Sayonara, {{pokemonName}}!", + "smellYaLater": "Smell ya later, {{pokemonName}}!", } as const; diff --git a/src/ui/party-ui-handler.ts b/src/ui/party-ui-handler.ts index 93dc052b09d..7ddadf99a3d 100644 --- a/src/ui/party-ui-handler.ts +++ b/src/ui/party-ui-handler.ts @@ -21,7 +21,7 @@ import MoveInfoOverlay from "./move-info-overlay"; import i18next from "i18next"; import { Moves } from "#enums/moves"; -const defaultMessage = i18next.t("menu:choosePokemon"); +const defaultMessage = i18next.t("partyUiHandler:choosePokemon"); export enum PartyUiMode { SWITCH, @@ -113,14 +113,14 @@ export default class PartyUiHandler extends MessageUiHandler { public static FilterNonFainted = (pokemon: PlayerPokemon) => { if (pokemon.isFainted()) { - return `${pokemon.name} has no energy\nleft to battle!`; + return i18next.t("partyUiHandler:noEnergy", { pokemonName: pokemon.name }); } return null; }; public static FilterFainted = (pokemon: PlayerPokemon) => { if (!pokemon.isFainted()) { - return `${pokemon.name} still has energy\nto battle!`; + return i18next.t("partyUiHandler:hasEnergy", { pokemonName: pokemon.name }); } return null; }; @@ -134,7 +134,7 @@ export default class PartyUiHandler extends MessageUiHandler { const challengeAllowed = new Utils.BooleanHolder(true); applyChallenges(this.scene.gameMode, ChallengeType.POKEMON_IN_BATTLE, pokemon, challengeAllowed); if (!challengeAllowed.value) { - return `${pokemon.name} can't be used in\nthis challenge!`; + return i18next.t("partyUiHandler:cantBeUsed", { pokemonName: pokemon.name }); } return null; }; @@ -144,14 +144,14 @@ export default class PartyUiHandler extends MessageUiHandler { public static FilterItemMaxStacks = (pokemon: PlayerPokemon, modifier: PokemonHeldItemModifier) => { const matchingModifier = pokemon.scene.findModifier(m => m instanceof PokemonHeldItemModifier && m.pokemonId === pokemon.id && m.matchType(modifier)) as PokemonHeldItemModifier; if (matchingModifier && matchingModifier.stackCount === matchingModifier.getMaxStackCount(pokemon.scene)) { - return `${pokemon.name} has too many\nof this item!`; + return i18next.t("partyUiHandler:tooManyItems", { pokemonName: pokemon.name }); } return null; }; - public static NoEffectMessage = "It won't have any effect."; + public static NoEffectMessage = i18next.t("partyUiHandler:anyEffect"); - private localizedOptions = [PartyOption.SEND_OUT, PartyOption.SUMMARY, PartyOption.CANCEL, PartyOption.APPLY, PartyOption.RELEASE, PartyOption.TEACH]; + private localizedOptions = [PartyOption.SEND_OUT, PartyOption.SUMMARY, PartyOption.CANCEL, PartyOption.APPLY, PartyOption.RELEASE, PartyOption.TEACH, PartyOption.SPLICE, PartyOption.UNSPLICE, PartyOption.REVIVE, PartyOption.TRANSFER, PartyOption.UNPAUSE_EVOLUTION, PartyOption.PASS_BATON]; constructor(scene: BattleScene) { super(scene, Mode.PARTY); @@ -376,18 +376,18 @@ export default class PartyUiHandler extends MessageUiHandler { this.clearOptions(); ui.playSelect(); pokemon.pauseEvolutions = false; - this.showText(`Evolutions have been unpaused for ${pokemon.name}.`, null, () => this.showText(null, 0), null, true); + this.showText(i18next.t("partyUiHandler:unpausedEvolutions", { pokemonName: pokemon.name }), null, () => this.showText(null, 0), null, true); } else if (option === PartyOption.UNSPLICE) { this.clearOptions(); ui.playSelect(); - this.showText(`Do you really want to unsplice ${pokemon.fusionSpecies.name}\nfrom ${pokemon.name}? ${pokemon.fusionSpecies.name} will be lost.`, null, () => { + this.showText(i18next.t("partyUiHandler:unspliceConfirmation", { fusionName: pokemon.fusionSpecies.name, pokemonName: pokemon.name }), null, () => { ui.setModeWithoutClear(Mode.CONFIRM, () => { const fusionName = pokemon.name; pokemon.unfuse().then(() => { this.clearPartySlots(); this.populatePartySlots(); ui.setMode(Mode.PARTY); - this.showText(`${fusionName} was reverted to ${pokemon.name}.`, null, () => { + this.showText(i18next.t("partyUiHandler:wasReverted", { fusionName: fusionName, pokemonName: pokemon.name }), null, () => { ui.setMode(Mode.PARTY); this.showText(null, 0); }, null, true); @@ -401,7 +401,7 @@ export default class PartyUiHandler extends MessageUiHandler { this.clearOptions(); ui.playSelect(); if (this.cursor >= this.scene.currentBattle.getBattlerCount() || !pokemon.isAllowedInBattle()) { - this.showText(`Do you really want to release ${pokemon.name}?`, null, () => { + this.showText(i18next.t("partyUiHandler:releaseConfirmation", { pokemonName: pokemon.name }), null, () => { ui.setModeWithoutClear(Mode.CONFIRM, () => { ui.setMode(Mode.PARTY); this.doRelease(this.cursor); @@ -411,7 +411,7 @@ export default class PartyUiHandler extends MessageUiHandler { }); }); } else { - this.showText("You can't release a Pokémon that's in battle!", null, () => this.showText(null, 0), null, true); + this.showText(i18next.t("partyUiHandler:releaseInBattle"), null, () => this.showText(null, 0), null, true); } return true; } else if (option === PartyOption.CANCEL) { @@ -651,20 +651,20 @@ export default class PartyUiHandler extends MessageUiHandler { this.optionsMode = true; - let optionsMessage = "Do what with this Pokémon?"; + let optionsMessage = i18next.t("partyUiHandler:doWhatWithThisPokemon"); switch (this.partyUiMode) { case PartyUiMode.MOVE_MODIFIER: - optionsMessage = "Select a move."; + optionsMessage = i18next.t("partyUiHandler:selectAMove"); break; case PartyUiMode.MODIFIER_TRANSFER: if (!this.transferMode) { - optionsMessage = "Select a held item to transfer.\nUse < and > to change the quantity."; + optionsMessage = i18next.t("partyUiHandler:changeQuantity"); } break; case PartyUiMode.SPLICE: if (!this.transferMode) { - optionsMessage = "Select another Pokémon to splice."; + optionsMessage = i18next.t("partyUiHandler:selectAnotherPokemonToSplice"); } break; } @@ -847,7 +847,7 @@ export default class PartyUiHandler extends MessageUiHandler { default: if (formChangeItemModifiers && option >= PartyOption.FORM_CHANGE_ITEM) { const modifier = formChangeItemModifiers[option - PartyOption.FORM_CHANGE_ITEM]; - optionName = `${modifier.active ? "Deactivate" : "Activate"} ${modifier.type.name}`; + optionName = `${modifier.active ? i18next.t("partyUiHandler:DEACTIVATE") : i18next.t("partyUiHandler:ACTIVATE")} ${modifier.type.name}`; } else { if (this.localizedOptions.includes(option)) { optionName = i18next.t(`partyUiHandler:${PartyOption[option]}`); @@ -932,25 +932,25 @@ export default class PartyUiHandler extends MessageUiHandler { getReleaseMessage(pokemonName: string): string { const rand = Utils.randInt(128); if (rand < 20) { - return `Goodbye, ${pokemonName}!`; + return i18next.t("partyUiHandler:goodbye", { pokemonName: pokemonName }); } else if (rand < 40) { - return `Byebye, ${pokemonName}!`; + return i18next.t("partyUiHandler:byebye", { pokemonName: pokemonName }); } else if (rand < 60) { - return `Farewell, ${pokemonName}!`; + return i18next.t("partyUiHandler:farewell", { pokemonName: pokemonName }); } else if (rand < 80) { - return `So long, ${pokemonName}!`; + return i18next.t("partyUiHandler:soLong", { pokemonName: pokemonName }); } else if (rand < 100) { - return `This is where we part, ${pokemonName}!`; + return i18next.t("partyUiHandler:thisIsWhereWePart", { pokemonName: pokemonName }); } else if (rand < 108) { - return `I'll miss you, ${pokemonName}!`; + return i18next.t("partyUiHandler:illMissYou", { pokemonName: pokemonName }); } else if (rand < 116) { - return `I'll never forget you, ${pokemonName}!`; + return i18next.t("partyUiHandler:illNeverForgetYou", { pokemonName: pokemonName }); } else if (rand < 124) { - return `Until we meet again, ${pokemonName}!`; + return i18next.t("partyUiHandler:untilWeMeetAgain", { pokemonName: pokemonName }); } else if (rand < 127) { - return `Sayonara, ${pokemonName}!`; + return i18next.t("partyUiHandler:sayonara", { pokemonName: pokemonName }); } else { - return `Smell ya later, ${pokemonName}!`; + return i18next.t("partyUiHandler:smellYaLater", { pokemonName: pokemonName }); } } @@ -1149,13 +1149,13 @@ class PartySlot extends Phaser.GameObjects.Container { let slotTmText: string; switch (true) { case (this.pokemon.compatibleTms.indexOf(tmMoveId) === -1): - slotTmText = "Not Able"; + slotTmText = i18next.t("partyUiHandler:notAble"); break; case (this.pokemon.getMoveset().filter(m => m?.moveId === tmMoveId).length > 0): - slotTmText = "Learned"; + slotTmText = i18next.t("partyUiHandler:learned"); break; default: - slotTmText = "Able"; + slotTmText = i18next.t("partyUiHandler:able"); break; } @@ -1230,7 +1230,7 @@ class PartyCancelButton extends Phaser.GameObjects.Container { this.partyCancelPb = partyCancelPb; - const partyCancelText = addTextObject(this.scene, -8, -7, "Cancel", TextStyle.PARTY); + const partyCancelText = addTextObject(this.scene, -8, -7, i18next.t("partyUiHandler:cancel"), TextStyle.PARTY); this.add(partyCancelText); } From 4c34858e89a756fe1f7725c9e65ebdef899a7a6c Mon Sep 17 00:00:00 2001 From: chaosgrimmon <31082757+chaosgrimmon@users.noreply.github.com> Date: Thu, 4 Jul 2024 21:43:42 -0400 Subject: [PATCH 16/37] [Sprite] Fix Espeon's tail partially missing (#2795) * [Sprite] Fixes Espeon tail Taken from initial commit, pre-Texture Packer compression * [Sprite] Fixes (replaced) shiny Espeon tail Taken from initial commit, pre-Texture Packer compression * [Sprite] Fix variant Espeon tails --- public/images/pokemon/196.json | 3771 ++++++------------------ public/images/pokemon/196.png | Bin 9343 -> 9174 bytes public/images/pokemon/shiny/196.json | 3771 ++++++------------------ public/images/pokemon/shiny/196.png | Bin 9333 -> 9174 bytes public/images/pokemon/variant/196.json | 20 +- 5 files changed, 1954 insertions(+), 5608 deletions(-) diff --git a/public/images/pokemon/196.json b/public/images/pokemon/196.json index 855bc9b1dc2..5059f85e2d0 100644 --- a/public/images/pokemon/196.json +++ b/public/images/pokemon/196.json @@ -4,122 +4,206 @@ "image": "196.png", "format": "RGBA8888", "size": { - "w": 376, - "h": 376 + "w": 386, + "h": 386 }, "scale": 1, "frames": [ { - "filename": "0010.png", + "filename": "0007.png", "rotated": false, "trimmed": true, "sourceSize": { - "w": 62, + "w": 63, "h": 58 }, "spriteSourceSize": { "x": 0, - "y": 5, - "w": 59, - "h": 53 + "y": 10, + "w": 63, + "h": 48 }, "frame": { - "x": 0, - "y": 0, - "w": 59, - "h": 53 + "x": 1, + "y": 1, + "w": 63, + "h": 48 } }, { - "filename": "0031.png", + "filename": "0018.png", "rotated": false, "trimmed": true, "sourceSize": { - "w": 62, + "w": 63, "h": 58 }, "spriteSourceSize": { "x": 0, - "y": 5, - "w": 59, - "h": 53 + "y": 10, + "w": 63, + "h": 48 }, "frame": { - "x": 0, - "y": 0, - "w": 59, - "h": 53 + "x": 1, + "y": 1, + "w": 63, + "h": 48 } }, { - "filename": "0032.png", + "filename": "0039.png", "rotated": false, "trimmed": true, "sourceSize": { - "w": 62, + "w": 63, "h": 58 }, "spriteSourceSize": { "x": 0, - "y": 5, - "w": 59, - "h": 53 + "y": 10, + "w": 63, + "h": 48 }, "frame": { - "x": 0, - "y": 0, - "w": 59, - "h": 53 + "x": 66, + "y": 1, + "w": 63, + "h": 48 } }, { - "filename": "0053.png", + "filename": "0061.png", "rotated": false, "trimmed": true, "sourceSize": { - "w": 62, + "w": 63, "h": 58 }, "spriteSourceSize": { "x": 0, - "y": 5, - "w": 59, - "h": 53 + "y": 10, + "w": 63, + "h": 48 }, "frame": { - "x": 0, - "y": 0, - "w": 59, - "h": 53 + "x": 131, + "y": 1, + "w": 63, + "h": 48 } }, { - "filename": "0054.png", + "filename": "0006.png", "rotated": false, "trimmed": true, "sourceSize": { - "w": 62, + "w": 63, "h": 58 }, "spriteSourceSize": { "x": 0, - "y": 5, - "w": 59, - "h": 53 + "y": 8, + "w": 62, + "h": 50 }, "frame": { - "x": 0, - "y": 0, - "w": 59, - "h": 53 + "x": 196, + "y": 1, + "w": 62, + "h": 50 } }, { - "filename": "0140.png", + "filename": "0017.png", "rotated": false, "trimmed": true, "sourceSize": { + "w": 63, + "h": 58 + }, + "spriteSourceSize": { + "x": 0, + "y": 8, "w": 62, + "h": 50 + }, + "frame": { + "x": 196, + "y": 1, + "w": 62, + "h": 50 + } + }, + { + "filename": "0028.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 63, + "h": 58 + }, + "spriteSourceSize": { + "x": 0, + "y": 8, + "w": 62, + "h": 50 + }, + "frame": { + "x": 196, + "y": 1, + "w": 62, + "h": 50 + } + }, + { + "filename": "0008.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 63, + "h": 58 + }, + "spriteSourceSize": { + "x": 0, + "y": 8, + "w": 62, + "h": 50 + }, + "frame": { + "x": 260, + "y": 1, + "w": 62, + "h": 50 + } + }, + { + "filename": "0029.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 63, + "h": 58 + }, + "spriteSourceSize": { + "x": 0, + "y": 8, + "w": 62, + "h": 50 + }, + "frame": { + "x": 260, + "y": 1, + "w": 62, + "h": 50 + } + }, + { + "filename": "0005.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 63, "h": 58 }, "spriteSourceSize": { @@ -129,8 +213,8 @@ "h": 53 }, "frame": { - "x": 0, - "y": 0, + "x": 324, + "y": 1, "w": 59, "h": 53 } @@ -140,7 +224,7 @@ "rotated": false, "trimmed": true, "sourceSize": { - "w": 62, + "w": 63, "h": 58 }, "spriteSourceSize": { @@ -150,18 +234,123 @@ "h": 53 }, "frame": { + "x": 324, + "y": 1, + "w": 59, + "h": 53 + } + }, + { + "filename": "0027.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 63, + "h": 58 + }, + "spriteSourceSize": { "x": 0, + "y": 5, + "w": 59, + "h": 53 + }, + "frame": { + "x": 324, + "y": 1, + "w": 59, + "h": 53 + } + }, + { + "filename": "0040.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 63, + "h": 58 + }, + "spriteSourceSize": { + "x": 0, + "y": 8, + "w": 62, + "h": 50 + }, + "frame": { + "x": 1, + "y": 51, + "w": 62, + "h": 50 + } + }, + { + "filename": "0060.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 63, + "h": 58 + }, + "spriteSourceSize": { + "x": 0, + "y": 8, + "w": 62, + "h": 50 + }, + "frame": { + "x": 65, + "y": 51, + "w": 62, + "h": 50 + } + }, + { + "filename": "0062.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 63, + "h": 58 + }, + "spriteSourceSize": { + "x": 0, + "y": 8, + "w": 62, + "h": 50 + }, + "frame": { + "x": 129, + "y": 51, + "w": 62, + "h": 50 + } + }, + { + "filename": "0019.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 63, + "h": 58 + }, + "spriteSourceSize": { + "x": 0, + "y": 5, + "w": 59, + "h": 53 + }, + "frame": { + "x": 193, "y": 53, "w": 59, "h": 53 } }, { - "filename": "0017.png", + "filename": "0030.png", "rotated": false, "trimmed": true, "sourceSize": { - "w": 62, + "w": 63, "h": 58 }, "spriteSourceSize": { @@ -171,7 +360,7 @@ "h": 53 }, "frame": { - "x": 0, + "x": 193, "y": 53, "w": 59, "h": 53 @@ -182,7 +371,7 @@ "rotated": false, "trimmed": true, "sourceSize": { - "w": 62, + "w": 63, "h": 58 }, "spriteSourceSize": { @@ -192,1774 +381,52 @@ "h": 53 }, "frame": { - "x": 0, + "x": 254, "y": 53, "w": 59, "h": 53 } }, - { - "filename": "0039.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 59, - "h": 53 - }, - "frame": { - "x": 0, - "y": 53, - "w": 59, - "h": 53 - } - }, - { - "filename": "0060.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 59, - "h": 53 - }, - "frame": { - "x": 0, - "y": 53, - "w": 59, - "h": 53 - } - }, - { - "filename": "0146.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 59, - "h": 53 - }, - "frame": { - "x": 0, - "y": 53, - "w": 59, - "h": 53 - } - }, - { - "filename": "0147.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 59, - "h": 53 - }, - "frame": { - "x": 0, - "y": 53, - "w": 59, - "h": 53 - } - }, - { - "filename": "0075.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 59, - "h": 53 - }, - "frame": { - "x": 59, - "y": 0, - "w": 59, - "h": 53 - } - }, - { - "filename": "0081.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 59, - "h": 53 - }, - "frame": { - "x": 0, - "y": 106, - "w": 59, - "h": 53 - } - }, - { - "filename": "0082.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 59, - "h": 53 - }, - "frame": { - "x": 0, - "y": 106, - "w": 59, - "h": 53 - } - }, - { - "filename": "0118.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 59, - "h": 53 - }, - "frame": { - "x": 59, - "y": 53, - "w": 59, - "h": 53 - } - }, - { - "filename": "0119.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 59, - "h": 53 - }, - "frame": { - "x": 59, - "y": 53, - "w": 59, - "h": 53 - } - }, - { - "filename": "0125.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 5, - "w": 59, - "h": 53 - }, - "frame": { - "x": 118, - "y": 0, - "w": 59, - "h": 53 - } - }, - { - "filename": "0011.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 9, - "w": 62, - "h": 49 - }, - "frame": { - "x": 177, - "y": 0, - "w": 62, - "h": 49 - } - }, - { - "filename": "0012.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 9, - "w": 62, - "h": 49 - }, - "frame": { - "x": 177, - "y": 0, - "w": 62, - "h": 49 - } - }, - { - "filename": "0033.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 9, - "w": 62, - "h": 49 - }, - "frame": { - "x": 177, - "y": 0, - "w": 62, - "h": 49 - } - }, - { - "filename": "0034.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 9, - "w": 62, - "h": 49 - }, - "frame": { - "x": 177, - "y": 0, - "w": 62, - "h": 49 - } - }, - { - "filename": "0055.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 9, - "w": 62, - "h": 49 - }, - "frame": { - "x": 177, - "y": 0, - "w": 62, - "h": 49 - } - }, - { - "filename": "0141.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 9, - "w": 62, - "h": 49 - }, - "frame": { - "x": 177, - "y": 0, - "w": 62, - "h": 49 - } - }, - { - "filename": "0142.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 9, - "w": 62, - "h": 49 - }, - "frame": { - "x": 177, - "y": 0, - "w": 62, - "h": 49 - } - }, - { - "filename": "0015.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 9, - "w": 62, - "h": 49 - }, - "frame": { - "x": 239, - "y": 0, - "w": 62, - "h": 49 - } - }, - { - "filename": "0036.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 9, - "w": 62, - "h": 49 - }, - "frame": { - "x": 239, - "y": 0, - "w": 62, - "h": 49 - } - }, - { - "filename": "0037.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 9, - "w": 62, - "h": 49 - }, - "frame": { - "x": 239, - "y": 0, - "w": 62, - "h": 49 - } - }, - { - "filename": "0058.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 9, - "w": 62, - "h": 49 - }, - "frame": { - "x": 239, - "y": 0, - "w": 62, - "h": 49 - } - }, - { - "filename": "0059.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 9, - "w": 62, - "h": 49 - }, - "frame": { - "x": 239, - "y": 0, - "w": 62, - "h": 49 - } - }, - { - "filename": "0145.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 9, - "w": 62, - "h": 49 - }, - "frame": { - "x": 239, - "y": 0, - "w": 62, - "h": 49 - } - }, - { - "filename": "0076.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 9, - "w": 62, - "h": 49 - }, - "frame": { - "x": 301, - "y": 0, - "w": 62, - "h": 49 - } - }, - { - "filename": "0077.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 9, - "w": 62, - "h": 49 - }, - "frame": { - "x": 301, - "y": 0, - "w": 62, - "h": 49 - } - }, - { - "filename": "0120.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 9, - "w": 62, - "h": 49 - }, - "frame": { - "x": 301, - "y": 0, - "w": 62, - "h": 49 - } - }, - { - "filename": "0008.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 53, - "h": 56 - }, - "frame": { - "x": 0, - "y": 159, - "w": 53, - "h": 56 - } - }, - { - "filename": "0009.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 53, - "h": 56 - }, - "frame": { - "x": 0, - "y": 159, - "w": 53, - "h": 56 - } - }, - { - "filename": "0030.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 53, - "h": 56 - }, - "frame": { - "x": 0, - "y": 159, - "w": 53, - "h": 56 - } - }, - { - "filename": "0051.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 53, - "h": 56 - }, - "frame": { - "x": 0, - "y": 159, - "w": 53, - "h": 56 - } - }, - { - "filename": "0052.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 53, - "h": 56 - }, - "frame": { - "x": 0, - "y": 159, - "w": 53, - "h": 56 - } - }, - { - "filename": "0138.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 53, - "h": 56 - }, - "frame": { - "x": 0, - "y": 159, - "w": 53, - "h": 56 - } - }, - { - "filename": "0139.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 53, - "h": 56 - }, - "frame": { - "x": 0, - "y": 159, - "w": 53, - "h": 56 - } - }, - { - "filename": "0018.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 53, - "h": 56 - }, - "frame": { - "x": 0, - "y": 215, - "w": 53, - "h": 56 - } - }, - { - "filename": "0019.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 53, - "h": 56 - }, - "frame": { - "x": 0, - "y": 215, - "w": 53, - "h": 56 - } - }, - { - "filename": "0040.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 53, - "h": 56 - }, - "frame": { - "x": 0, - "y": 215, - "w": 53, - "h": 56 - } - }, - { - "filename": "0061.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 53, - "h": 56 - }, - "frame": { - "x": 0, - "y": 215, - "w": 53, - "h": 56 - } - }, - { - "filename": "0062.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 53, - "h": 56 - }, - "frame": { - "x": 0, - "y": 215, - "w": 53, - "h": 56 - } - }, - { - "filename": "0148.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 53, - "h": 56 - }, - "frame": { - "x": 0, - "y": 215, - "w": 53, - "h": 56 - } - }, - { - "filename": "0149.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 53, - "h": 56 - }, - "frame": { - "x": 0, - "y": 215, - "w": 53, - "h": 56 - } - }, - { - "filename": "0073.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 53, - "h": 56 - }, - "frame": { - "x": 0, - "y": 271, - "w": 53, - "h": 56 - } - }, - { - "filename": "0074.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 53, - "h": 56 - }, - "frame": { - "x": 0, - "y": 271, - "w": 53, - "h": 56 - } - }, - { - "filename": "0080.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 9, - "w": 62, - "h": 49 - }, - "frame": { - "x": 59, - "y": 106, - "w": 62, - "h": 49 - } - }, - { - "filename": "0123.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 9, - "w": 62, - "h": 49 - }, - "frame": { - "x": 118, - "y": 53, - "w": 62, - "h": 49 - } - }, - { - "filename": "0124.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 9, - "w": 62, - "h": 49 - }, - "frame": { - "x": 118, - "y": 53, - "w": 62, - "h": 49 - } - }, - { - "filename": "0013.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 11, - "w": 62, - "h": 47 - }, - "frame": { - "x": 180, - "y": 49, - "w": 62, - "h": 47 - } - }, - { - "filename": "0014.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 11, - "w": 62, - "h": 47 - }, - "frame": { - "x": 180, - "y": 49, - "w": 62, - "h": 47 - } - }, - { - "filename": "0035.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 11, - "w": 62, - "h": 47 - }, - "frame": { - "x": 180, - "y": 49, - "w": 62, - "h": 47 - } - }, - { - "filename": "0056.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 11, - "w": 62, - "h": 47 - }, - "frame": { - "x": 180, - "y": 49, - "w": 62, - "h": 47 - } - }, - { - "filename": "0057.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 11, - "w": 62, - "h": 47 - }, - "frame": { - "x": 180, - "y": 49, - "w": 62, - "h": 47 - } - }, - { - "filename": "0143.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 11, - "w": 62, - "h": 47 - }, - "frame": { - "x": 180, - "y": 49, - "w": 62, - "h": 47 - } - }, - { - "filename": "0144.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 11, - "w": 62, - "h": 47 - }, - "frame": { - "x": 180, - "y": 49, - "w": 62, - "h": 47 - } - }, - { - "filename": "0078.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 11, - "w": 62, - "h": 47 - }, - "frame": { - "x": 242, - "y": 49, - "w": 62, - "h": 47 - } - }, - { - "filename": "0079.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 11, - "w": 62, - "h": 47 - }, - "frame": { - "x": 242, - "y": 49, - "w": 62, - "h": 47 - } - }, - { - "filename": "0121.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 11, - "w": 62, - "h": 47 - }, - "frame": { - "x": 304, - "y": 49, - "w": 62, - "h": 47 - } - }, - { - "filename": "0122.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 11, - "w": 62, - "h": 47 - }, - "frame": { - "x": 304, - "y": 49, - "w": 62, - "h": 47 - } - }, - { - "filename": "0083.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 53, - "h": 56 - }, - "frame": { - "x": 121, - "y": 102, - "w": 53, - "h": 56 - } - }, - { - "filename": "0084.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 53, - "h": 56 - }, - "frame": { - "x": 121, - "y": 102, - "w": 53, - "h": 56 - } - }, - { - "filename": "0091.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 43, - "h": 58 - }, - "frame": { - "x": 53, - "y": 159, - "w": 43, - "h": 58 - } - }, - { - "filename": "0092.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 43, - "h": 58 - }, - "frame": { - "x": 53, - "y": 159, - "w": 43, - "h": 58 - } - }, - { - "filename": "0093.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 44, - "h": 58 - }, - "frame": { - "x": 53, - "y": 217, - "w": 44, - "h": 58 - } - }, - { - "filename": "0094.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 44, - "h": 58 - }, - "frame": { - "x": 53, - "y": 217, - "w": 44, - "h": 58 - } - }, - { - "filename": "0005.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 45, - "h": 55 - }, - "frame": { - "x": 53, - "y": 275, - "w": 45, - "h": 55 - } - }, - { - "filename": "0026.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 45, - "h": 55 - }, - "frame": { - "x": 53, - "y": 275, - "w": 45, - "h": 55 - } - }, - { - "filename": "0027.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 45, - "h": 55 - }, - "frame": { - "x": 53, - "y": 275, - "w": 45, - "h": 55 - } - }, - { - "filename": "0048.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 45, - "h": 55 - }, - "frame": { - "x": 53, - "y": 275, - "w": 45, - "h": 55 - } - }, - { - "filename": "0049.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 45, - "h": 55 - }, - "frame": { - "x": 53, - "y": 275, - "w": 45, - "h": 55 - } - }, - { - "filename": "0135.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 45, - "h": 55 - }, - "frame": { - "x": 53, - "y": 275, - "w": 45, - "h": 55 - } - }, - { - "filename": "0116.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 53, - "h": 56 - }, - "frame": { - "x": 96, - "y": 158, - "w": 53, - "h": 56 - } - }, - { - "filename": "0117.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 53, - "h": 56 - }, - "frame": { - "x": 96, - "y": 158, - "w": 53, - "h": 56 - } - }, - { - "filename": "0126.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 53, - "h": 56 - }, - "frame": { - "x": 97, - "y": 214, - "w": 53, - "h": 56 - } - }, - { - "filename": "0127.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 53, - "h": 56 - }, - "frame": { - "x": 97, - "y": 214, - "w": 53, - "h": 56 - } - }, - { - "filename": "0006.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 49, - "h": 55 - }, - "frame": { - "x": 98, - "y": 270, - "w": 49, - "h": 55 - } - }, - { - "filename": "0007.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 49, - "h": 55 - }, - "frame": { - "x": 98, - "y": 270, - "w": 49, - "h": 55 - } - }, - { - "filename": "0028.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 49, - "h": 55 - }, - "frame": { - "x": 98, - "y": 270, - "w": 49, - "h": 55 - } - }, - { - "filename": "0029.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 49, - "h": 55 - }, - "frame": { - "x": 98, - "y": 270, - "w": 49, - "h": 55 - } - }, - { - "filename": "0050.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 49, - "h": 55 - }, - "frame": { - "x": 98, - "y": 270, - "w": 49, - "h": 55 - } - }, - { - "filename": "0136.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 49, - "h": 55 - }, - "frame": { - "x": 98, - "y": 270, - "w": 49, - "h": 55 - } - }, - { - "filename": "0137.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 49, - "h": 55 - }, - "frame": { - "x": 98, - "y": 270, - "w": 49, - "h": 55 - } - }, - { - "filename": "0090.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 43, - "h": 56 - }, - "frame": { - "x": 149, - "y": 158, - "w": 43, - "h": 56 - } - }, - { - "filename": "0095.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 45, - "h": 58 - }, - "frame": { - "x": 150, - "y": 214, - "w": 45, - "h": 58 - } - }, - { - "filename": "0020.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 49, - "h": 55 - }, - "frame": { - "x": 147, - "y": 272, - "w": 49, - "h": 55 - } - }, { "filename": "0041.png", "rotated": false, "trimmed": true, "sourceSize": { - "w": 62, + "w": 63, "h": 58 }, "spriteSourceSize": { "x": 0, - "y": 3, - "w": 49, - "h": 55 + "y": 5, + "w": 59, + "h": 53 }, "frame": { - "x": 147, - "y": 272, - "w": 49, - "h": 55 + "x": 315, + "y": 56, + "w": 59, + "h": 53 } }, { - "filename": "0042.png", + "filename": "0059.png", "rotated": false, "trimmed": true, "sourceSize": { - "w": 62, + "w": 63, "h": 58 }, "spriteSourceSize": { "x": 0, - "y": 3, - "w": 49, - "h": 55 + "y": 5, + "w": 59, + "h": 53 }, "frame": { - "x": 147, - "y": 272, - "w": 49, - "h": 55 + "x": 1, + "y": 103, + "w": 59, + "h": 53 } }, { @@ -1967,713 +434,20 @@ "rotated": false, "trimmed": true, "sourceSize": { - "w": 62, + "w": 63, "h": 58 }, "spriteSourceSize": { "x": 0, - "y": 3, - "w": 49, - "h": 55 + "y": 5, + "w": 59, + "h": 53 }, "frame": { - "x": 147, - "y": 272, - "w": 49, - "h": 55 - } - }, - { - "filename": "0064.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 49, - "h": 55 - }, - "frame": { - "x": 147, - "y": 272, - "w": 49, - "h": 55 - } - }, - { - "filename": "0128.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 49, - "h": 55 - }, - "frame": { - "x": 147, - "y": 272, - "w": 49, - "h": 55 - } - }, - { - "filename": "0129.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 49, - "h": 55 - }, - "frame": { - "x": 147, - "y": 272, - "w": 49, - "h": 55 - } - }, - { - "filename": "0150.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 49, - "h": 55 - }, - "frame": { - "x": 147, - "y": 272, - "w": 49, - "h": 55 - } - }, - { - "filename": "0106.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 43, - "h": 56 - }, - "frame": { - "x": 174, - "y": 102, - "w": 43, - "h": 56 - } - }, - { - "filename": "0107.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 2, - "w": 43, - "h": 56 - }, - "frame": { - "x": 174, - "y": 102, - "w": 43, - "h": 56 - } - }, - { - "filename": "0071.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 49, - "h": 55 - }, - "frame": { - "x": 217, - "y": 96, - "w": 49, - "h": 55 - } - }, - { - "filename": "0072.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 49, - "h": 55 - }, - "frame": { - "x": 217, - "y": 96, - "w": 49, - "h": 55 - } - }, - { - "filename": "0085.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 49, - "h": 55 - }, - "frame": { - "x": 266, - "y": 96, - "w": 49, - "h": 55 - } - }, - { - "filename": "0115.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 49, - "h": 55 - }, - "frame": { - "x": 315, - "y": 96, - "w": 49, - "h": 55 - } - }, - { - "filename": "0021.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 45, - "h": 55 - }, - "frame": { - "x": 192, - "y": 158, - "w": 45, - "h": 55 - } - }, - { - "filename": "0022.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 45, - "h": 55 - }, - "frame": { - "x": 192, - "y": 158, - "w": 45, - "h": 55 - } - }, - { - "filename": "0043.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 45, - "h": 55 - }, - "frame": { - "x": 192, - "y": 158, - "w": 45, - "h": 55 - } - }, - { - "filename": "0044.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 45, - "h": 55 - }, - "frame": { - "x": 192, - "y": 158, - "w": 45, - "h": 55 - } - }, - { - "filename": "0065.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 45, - "h": 55 - }, - "frame": { - "x": 192, - "y": 158, - "w": 45, - "h": 55 - } - }, - { - "filename": "0130.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 45, - "h": 55 - }, - "frame": { - "x": 192, - "y": 158, - "w": 45, - "h": 55 - } - }, - { - "filename": "0151.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 45, - "h": 55 - }, - "frame": { - "x": 192, - "y": 158, - "w": 45, - "h": 55 - } - }, - { - "filename": "0152.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 45, - "h": 55 - }, - "frame": { - "x": 192, - "y": 158, - "w": 45, - "h": 55 - } - }, - { - "filename": "0096.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 45, - "h": 58 - }, - "frame": { - "x": 195, - "y": 213, - "w": 45, - "h": 58 - } - }, - { - "filename": "0097.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 45, - "h": 58 - }, - "frame": { - "x": 195, - "y": 213, - "w": 45, - "h": 58 - } - }, - { - "filename": "0098.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 45, - "h": 58 - }, - "frame": { - "x": 196, - "y": 271, - "w": 45, - "h": 58 - } - }, - { - "filename": "0099.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 45, - "h": 58 - }, - "frame": { - "x": 196, - "y": 271, - "w": 45, - "h": 58 - } - }, - { - "filename": "0100.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 45, - "h": 58 - }, - "frame": { - "x": 237, - "y": 151, - "w": 45, - "h": 58 - } - }, - { - "filename": "0101.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 45, - "h": 58 - }, - "frame": { - "x": 282, - "y": 151, - "w": 45, - "h": 58 - } - }, - { - "filename": "0102.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 45, - "h": 58 - }, - "frame": { - "x": 282, - "y": 151, - "w": 45, - "h": 58 - } - }, - { - "filename": "0103.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 44, - "h": 58 - }, - "frame": { - "x": 240, - "y": 209, - "w": 44, - "h": 58 - } - }, - { - "filename": "0104.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 44, - "h": 58 - }, - "frame": { - "x": 240, - "y": 209, - "w": 44, - "h": 58 - } - }, - { - "filename": "0105.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 43, - "h": 58 - }, - "frame": { - "x": 284, - "y": 209, - "w": 43, - "h": 58 - } - }, - { - "filename": "0070.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 45, - "h": 55 - }, - "frame": { - "x": 241, - "y": 267, - "w": 45, - "h": 55 - } - }, - { - "filename": "0086.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 45, - "h": 55 - }, - "frame": { - "x": 286, - "y": 267, - "w": 45, - "h": 55 - } - }, - { - "filename": "0087.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 45, - "h": 55 - }, - "frame": { - "x": 286, - "y": 267, - "w": 45, - "h": 55 - } - }, - { - "filename": "0113.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 45, - "h": 55 - }, - "frame": { - "x": 327, - "y": 151, - "w": 45, - "h": 55 - } - }, - { - "filename": "0114.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 3, - "w": 45, - "h": 55 - }, - "frame": { - "x": 327, - "y": 151, - "w": 45, - "h": 55 + "x": 62, + "y": 103, + "w": 59, + "h": 53 } }, { @@ -2681,7 +455,7 @@ "rotated": false, "trimmed": true, "sourceSize": { - "w": 62, + "w": 63, "h": 58 }, "spriteSourceSize": { @@ -2691,18 +465,18 @@ "h": 54 }, "frame": { - "x": 327, - "y": 206, + "x": 123, + "y": 103, "w": 42, "h": 54 } }, { - "filename": "0002.png", + "filename": "0012.png", "rotated": false, "trimmed": true, "sourceSize": { - "w": 62, + "w": 63, "h": 58 }, "spriteSourceSize": { @@ -2712,8 +486,8 @@ "h": 54 }, "frame": { - "x": 327, - "y": 206, + "x": 123, + "y": 103, "w": 42, "h": 54 } @@ -2723,7 +497,7 @@ "rotated": false, "trimmed": true, "sourceSize": { - "w": 62, + "w": 63, "h": 58 }, "spriteSourceSize": { @@ -2733,18 +507,18 @@ "h": 54 }, "frame": { - "x": 327, - "y": 206, + "x": 123, + "y": 103, "w": 42, "h": 54 } }, { - "filename": "0024.png", + "filename": "0002.png", "rotated": false, "trimmed": true, "sourceSize": { - "w": 62, + "w": 63, "h": 58 }, "spriteSourceSize": { @@ -2754,8 +528,134 @@ "h": 54 }, "frame": { - "x": 327, - "y": 206, + "x": 167, + "y": 108, + "w": 42, + "h": 54 + } + }, + { + "filename": "0013.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 63, + "h": 58 + }, + "spriteSourceSize": { + "x": 0, + "y": 4, + "w": 42, + "h": 54 + }, + "frame": { + "x": 167, + "y": 108, + "w": 42, + "h": 54 + } + }, + { + "filename": "0034.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 63, + "h": 58 + }, + "spriteSourceSize": { + "x": 0, + "y": 4, + "w": 42, + "h": 54 + }, + "frame": { + "x": 211, + "y": 108, + "w": 42, + "h": 54 + } + }, + { + "filename": "0044.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 63, + "h": 58 + }, + "spriteSourceSize": { + "x": 0, + "y": 4, + "w": 42, + "h": 54 + }, + "frame": { + "x": 255, + "y": 108, + "w": 42, + "h": 54 + } + }, + { + "filename": "0054.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 63, + "h": 58 + }, + "spriteSourceSize": { + "x": 0, + "y": 4, + "w": 42, + "h": 54 + }, + "frame": { + "x": 255, + "y": 108, + "w": 42, + "h": 54 + } + }, + { + "filename": "0055.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 63, + "h": 58 + }, + "spriteSourceSize": { + "x": 0, + "y": 4, + "w": 42, + "h": 54 + }, + "frame": { + "x": 255, + "y": 108, + "w": 42, + "h": 54 + } + }, + { + "filename": "0056.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 63, + "h": 58 + }, + "spriteSourceSize": { + "x": 0, + "y": 4, + "w": 42, + "h": 54 + }, + "frame": { + "x": 299, + "y": 111, "w": 42, "h": 54 } @@ -2765,104 +665,20 @@ "rotated": false, "trimmed": true, "sourceSize": { - "w": 62, + "w": 63, "h": 58 }, "spriteSourceSize": { "x": 0, - "y": 4, + "y": 1, "w": 42, - "h": 54 + "h": 57 }, "frame": { - "x": 327, - "y": 206, + "x": 343, + "y": 111, "w": 42, - "h": 54 - } - }, - { - "filename": "0066.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 42, - "h": 54 - }, - "frame": { - "x": 327, - "y": 206, - "w": 42, - "h": 54 - } - }, - { - "filename": "0067.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 42, - "h": 54 - }, - "frame": { - "x": 327, - "y": 206, - "w": 42, - "h": 54 - } - }, - { - "filename": "0131.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 42, - "h": 54 - }, - "frame": { - "x": 327, - "y": 206, - "w": 42, - "h": 54 - } - }, - { - "filename": "0132.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 42, - "h": 54 - }, - "frame": { - "x": 327, - "y": 206, - "w": 42, - "h": 54 + "h": 57 } }, { @@ -2870,41 +686,209 @@ "rotated": false, "trimmed": true, "sourceSize": { - "w": 62, + "w": 63, "h": 58 }, "spriteSourceSize": { "x": 0, - "y": 4, - "w": 42, - "h": 54 + "y": 3, + "w": 45, + "h": 55 }, "frame": { - "x": 331, - "y": 260, - "w": 42, - "h": 54 + "x": 1, + "y": 158, + "w": 45, + "h": 55 } }, { - "filename": "0004.png", + "filename": "0024.png", "rotated": false, "trimmed": true, "sourceSize": { - "w": 62, + "w": 63, "h": 58 }, "spriteSourceSize": { "x": 0, - "y": 4, - "w": 42, - "h": 54 + "y": 3, + "w": 45, + "h": 55 }, "frame": { - "x": 331, - "y": 260, - "w": 42, - "h": 54 + "x": 1, + "y": 158, + "w": 45, + "h": 55 + } + }, + { + "filename": "0010.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 63, + "h": 58 + }, + "spriteSourceSize": { + "x": 0, + "y": 3, + "w": 49, + "h": 55 + }, + "frame": { + "x": 48, + "y": 158, + "w": 49, + "h": 55 + } + }, + { + "filename": "0021.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 63, + "h": 58 + }, + "spriteSourceSize": { + "x": 0, + "y": 3, + "w": 49, + "h": 55 + }, + "frame": { + "x": 48, + "y": 158, + "w": 49, + "h": 55 + } + }, + { + "filename": "0032.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 63, + "h": 58 + }, + "spriteSourceSize": { + "x": 0, + "y": 3, + "w": 49, + "h": 55 + }, + "frame": { + "x": 48, + "y": 158, + "w": 49, + "h": 55 + } + }, + { + "filename": "0011.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 63, + "h": 58 + }, + "spriteSourceSize": { + "x": 0, + "y": 3, + "w": 45, + "h": 55 + }, + "frame": { + "x": 99, + "y": 159, + "w": 45, + "h": 55 + } + }, + { + "filename": "0022.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 63, + "h": 58 + }, + "spriteSourceSize": { + "x": 0, + "y": 3, + "w": 45, + "h": 55 + }, + "frame": { + "x": 99, + "y": 159, + "w": 45, + "h": 55 + } + }, + { + "filename": "0033.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 63, + "h": 58 + }, + "spriteSourceSize": { + "x": 0, + "y": 3, + "w": 45, + "h": 55 + }, + "frame": { + "x": 99, + "y": 159, + "w": 45, + "h": 55 + } + }, + { + "filename": "0065.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 63, + "h": 58 + }, + "spriteSourceSize": { + "x": 0, + "y": 3, + "w": 45, + "h": 55 + }, + "frame": { + "x": 99, + "y": 159, + "w": 45, + "h": 55 + } + }, + { + "filename": "0014.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 63, + "h": 58 + }, + "spriteSourceSize": { + "x": 0, + "y": 3, + "w": 49, + "h": 55 + }, + "frame": { + "x": 146, + "y": 164, + "w": 49, + "h": 55 } }, { @@ -2912,20 +896,83 @@ "rotated": false, "trimmed": true, "sourceSize": { - "w": 62, + "w": 63, "h": 58 }, "spriteSourceSize": { "x": 0, - "y": 4, - "w": 42, - "h": 54 + "y": 3, + "w": 49, + "h": 55 }, "frame": { - "x": 331, - "y": 260, - "w": 42, - "h": 54 + "x": 146, + "y": 164, + "w": 49, + "h": 55 + } + }, + { + "filename": "0035.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 63, + "h": 58 + }, + "spriteSourceSize": { + "x": 0, + "y": 3, + "w": 45, + "h": 55 + }, + "frame": { + "x": 197, + "y": 164, + "w": 45, + "h": 55 + } + }, + { + "filename": "0036.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 63, + "h": 58 + }, + "spriteSourceSize": { + "x": 0, + "y": 3, + "w": 49, + "h": 55 + }, + "frame": { + "x": 244, + "y": 164, + "w": 49, + "h": 55 + } + }, + { + "filename": "0057.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 63, + "h": 58 + }, + "spriteSourceSize": { + "x": 0, + "y": 3, + "w": 45, + "h": 55 + }, + "frame": { + "x": 295, + "y": 167, + "w": 45, + "h": 55 } }, { @@ -2933,20 +980,251 @@ "rotated": false, "trimmed": true, "sourceSize": { - "w": 62, + "w": 63, "h": 58 }, "spriteSourceSize": { "x": 0, - "y": 4, - "w": 42, - "h": 54 + "y": 0, + "w": 43, + "h": 58 }, "frame": { - "x": 331, - "y": 260, - "w": 42, - "h": 54 + "x": 342, + "y": 170, + "w": 43, + "h": 58 + } + }, + { + "filename": "0043.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 63, + "h": 58 + }, + "spriteSourceSize": { + "x": 0, + "y": 3, + "w": 49, + "h": 55 + }, + "frame": { + "x": 1, + "y": 215, + "w": 49, + "h": 55 + } + }, + { + "filename": "0058.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 63, + "h": 58 + }, + "spriteSourceSize": { + "x": 0, + "y": 3, + "w": 49, + "h": 55 + }, + "frame": { + "x": 52, + "y": 216, + "w": 49, + "h": 55 + } + }, + { + "filename": "0064.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 63, + "h": 58 + }, + "spriteSourceSize": { + "x": 0, + "y": 3, + "w": 49, + "h": 55 + }, + "frame": { + "x": 103, + "y": 221, + "w": 49, + "h": 55 + } + }, + { + "filename": "0004.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 63, + "h": 58 + }, + "spriteSourceSize": { + "x": 0, + "y": 2, + "w": 53, + "h": 56 + }, + "frame": { + "x": 154, + "y": 221, + "w": 53, + "h": 56 + } + }, + { + "filename": "0015.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 63, + "h": 58 + }, + "spriteSourceSize": { + "x": 0, + "y": 2, + "w": 53, + "h": 56 + }, + "frame": { + "x": 154, + "y": 221, + "w": 53, + "h": 56 + } + }, + { + "filename": "0026.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 63, + "h": 58 + }, + "spriteSourceSize": { + "x": 0, + "y": 2, + "w": 53, + "h": 56 + }, + "frame": { + "x": 154, + "y": 221, + "w": 53, + "h": 56 + } + }, + { + "filename": "0009.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 63, + "h": 58 + }, + "spriteSourceSize": { + "x": 0, + "y": 2, + "w": 53, + "h": 56 + }, + "frame": { + "x": 209, + "y": 221, + "w": 53, + "h": 56 + } + }, + { + "filename": "0020.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 63, + "h": 58 + }, + "spriteSourceSize": { + "x": 0, + "y": 2, + "w": 53, + "h": 56 + }, + "frame": { + "x": 209, + "y": 221, + "w": 53, + "h": 56 + } + }, + { + "filename": "0031.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 63, + "h": 58 + }, + "spriteSourceSize": { + "x": 0, + "y": 2, + "w": 53, + "h": 56 + }, + "frame": { + "x": 209, + "y": 221, + "w": 53, + "h": 56 + } + }, + { + "filename": "0037.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 63, + "h": 58 + }, + "spriteSourceSize": { + "x": 0, + "y": 2, + "w": 53, + "h": 56 + }, + "frame": { + "x": 264, + "y": 224, + "w": 53, + "h": 56 + } + }, + { + "filename": "0042.png", + "rotated": false, + "trimmed": true, + "sourceSize": { + "w": 63, + "h": 58 + }, + "spriteSourceSize": { + "x": 0, + "y": 2, + "w": 53, + "h": 56 + }, + "frame": { + "x": 319, + "y": 230, + "w": 53, + "h": 56 } }, { @@ -2954,251 +1232,146 @@ "rotated": false, "trimmed": true, "sourceSize": { - "w": 62, + "w": 63, "h": 58 }, "spriteSourceSize": { "x": 0, - "y": 4, - "w": 42, - "h": 54 + "y": 0, + "w": 44, + "h": 58 }, "frame": { - "x": 331, - "y": 260, - "w": 42, - "h": 54 + "x": 1, + "y": 272, + "w": 44, + "h": 58 } }, { - "filename": "0133.png", + "filename": "0048.png", "rotated": false, "trimmed": true, "sourceSize": { - "w": 62, + "w": 63, "h": 58 }, "spriteSourceSize": { "x": 0, - "y": 4, - "w": 42, - "h": 54 + "y": 0, + "w": 45, + "h": 58 }, "frame": { - "x": 331, - "y": 260, - "w": 42, - "h": 54 + "x": 47, + "y": 273, + "w": 45, + "h": 58 } }, { - "filename": "0134.png", + "filename": "0049.png", "rotated": false, "trimmed": true, "sourceSize": { - "w": 62, + "w": 63, "h": 58 }, "spriteSourceSize": { "x": 0, - "y": 4, - "w": 42, - "h": 54 + "y": 0, + "w": 45, + "h": 58 }, "frame": { - "x": 331, - "y": 260, - "w": 42, - "h": 54 + "x": 94, + "y": 278, + "w": 45, + "h": 58 } }, { - "filename": "0068.png", + "filename": "0050.png", "rotated": false, "trimmed": true, "sourceSize": { - "w": 62, + "w": 63, "h": 58 }, "spriteSourceSize": { "x": 0, - "y": 4, - "w": 42, - "h": 54 + "y": 0, + "w": 46, + "h": 58 }, "frame": { - "x": 331, - "y": 314, - "w": 42, - "h": 54 + "x": 141, + "y": 279, + "w": 46, + "h": 58 } }, { - "filename": "0069.png", + "filename": "0051.png", "rotated": false, "trimmed": true, "sourceSize": { - "w": 62, + "w": 63, "h": 58 }, "spriteSourceSize": { "x": 0, - "y": 4, - "w": 42, - "h": 54 + "y": 0, + "w": 45, + "h": 58 }, "frame": { - "x": 331, - "y": 314, - "w": 42, - "h": 54 + "x": 189, + "y": 279, + "w": 45, + "h": 58 } }, { - "filename": "0088.png", + "filename": "0052.png", "rotated": false, "trimmed": true, "sourceSize": { - "w": 62, + "w": 63, "h": 58 }, "spriteSourceSize": { "x": 0, - "y": 4, - "w": 42, - "h": 54 + "y": 0, + "w": 44, + "h": 58 }, "frame": { - "x": 241, - "y": 322, - "w": 42, - "h": 54 + "x": 236, + "y": 282, + "w": 44, + "h": 58 } }, { - "filename": "0089.png", + "filename": "0053.png", "rotated": false, "trimmed": true, "sourceSize": { - "w": 62, + "w": 63, "h": 58 }, "spriteSourceSize": { "x": 0, - "y": 4, - "w": 42, - "h": 54 - }, - "frame": { - "x": 241, - "y": 322, - "w": 42, - "h": 54 - } - }, - { - "filename": "0108.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, + "y": 0, + "w": 43, "h": 58 }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 42, - "h": 54 - }, "frame": { - "x": 241, - "y": 322, - "w": 42, - "h": 54 - } - }, - { - "filename": "0109.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, + "x": 282, + "y": 288, + "w": 43, "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 42, - "h": 54 - }, - "frame": { - "x": 241, - "y": 322, - "w": 42, - "h": 54 - } - }, - { - "filename": "0110.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 42, - "h": 54 - }, - "frame": { - "x": 241, - "y": 322, - "w": 42, - "h": 54 - } - }, - { - "filename": "0111.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 42, - "h": 54 - }, - "frame": { - "x": 283, - "y": 322, - "w": 42, - "h": 54 - } - }, - { - "filename": "0112.png", - "rotated": false, - "trimmed": true, - "sourceSize": { - "w": 62, - "h": 58 - }, - "spriteSourceSize": { - "x": 0, - "y": 4, - "w": 42, - "h": 54 - }, - "frame": { - "x": 283, - "y": 322, - "w": 42, - "h": 54 } } ] @@ -3207,6 +1380,6 @@ "meta": { "app": "https://www.codeandweb.com/texturepacker", "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:8035313afb7abed8b9f404fc150b5ea6:228857b9794392478592ec3b8c178953:fb684cbb576f205e45dc62e63d92a744$" + "smartupdate": "$TexturePacker:SmartUpdate:b40733fff3c9e56156288de85200b9b2:255376a3a047a525a42dff59155c43ba:fb684cbb576f205e45dc62e63d92a744$" } } diff --git a/public/images/pokemon/196.png b/public/images/pokemon/196.png index 435f9e9a73bf56e4a3b92c9a1ee263c243794e4c..7b1890777bd80fa8e4e9f0b23c833db0bcdbec6e 100644 GIT binary patch literal 9174 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 S_NCDVAp1c{vO?U*|9=3MbBS~S literal 9343 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 Ry)@bYWIrfLR*D-1{SOjMg;f9m literal 9333 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 diff --git a/public/images/pokemon/variant/196.json b/public/images/pokemon/variant/196.json index 02084307b2e..ce41a030de1 100644 --- a/public/images/pokemon/variant/196.json +++ b/public/images/pokemon/variant/196.json @@ -3,42 +3,42 @@ "7b4a7b": "204024", "101010": "101010", "efbdef": "bddd9e", - "e6a5d6": "6c9e63", + "e7a5d6": "6c9e63", "b57bb5": "416240", "314273": "a86a2c", "4a73b5": "ffb554", - "c52152": "ffa80e", + "c62152": "ffa80e", "ffffff": "ffffff", "8c2152": "c54200", "8463b5": "ffa72a", - "c5c5c5": "c5c5c5" + "c6c6c6": "c5c5c5" }, "1": { "7b4a7b": "581747", "101010": "101010", "efbdef": "e99eae", - "e6a5d6": "d1759c", + "e7a5d6": "d1759c", "b57bb5": "953b6c", "314273": "537fde", "4a73b5": "90b7f9", - "c52152": "31d9ff", + "c62152": "31d9ff", "ffffff": "ffffff", "8c2152": "15a7d2", "8463b5": "1662bf", - "c5c5c5": "c5c5c5" + "c6c6c6": "c5c5c5" }, "2": { "7b4a7b": "9b5250", "101010": "101010", "efbdef": "f5f3e1", - "e6a5d6": "ded0af", + "e7a5d6": "ded0af", "b57bb5": "ce987a", "314273": "194540", "4a73b5": "39816d", - "c52152": "00de92", + "c62152": "00de92", "ffffff": "ffffff", "8c2152": "00ad7f", "8463b5": "006b5b", - "c5c5c5": "c5c5c5" + "c6c6c6": "c5c5c5" } -} \ No newline at end of file +} From 359644ee81a63c48c26925856fe47324db497ed6 Mon Sep 17 00:00:00 2001 From: san98215 <98116601+san98215@users.noreply.github.com> Date: Thu, 4 Jul 2024 21:51:51 -0400 Subject: [PATCH 17/37] [Bug] Updated SacrificialAttrOnHit to account for the move failing (#2792) --- src/data/move.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/data/move.ts b/src/data/move.ts index 9964665c12a..7fba094e656 100644 --- a/src/data/move.ts +++ b/src/data/move.ts @@ -1155,7 +1155,7 @@ export class SacrificialAttr extends MoveEffectAttr { **/ export class SacrificialAttrOnHit extends MoveEffectAttr { constructor() { - super(true, MoveEffectTrigger.POST_TARGET); + super(true, MoveEffectTrigger.HIT); } /** From 09ab89a2c3f8f5d92db3736eae2e8a81754b6209 Mon Sep 17 00:00:00 2001 From: Enoch Date: Fri, 5 Jul 2024 12:12:57 +0900 Subject: [PATCH 18/37] [Localization(ko)] Translate missed thigs (#2797) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: 송지원 --- src/locales/ko/battle.ts | 2 +- src/locales/ko/bgm-name.ts | 20 ++++++++++---------- src/locales/ko/challenges.ts | 2 +- src/locales/ko/menu-ui-handler.ts | 2 +- 4 files changed, 13 insertions(+), 13 deletions(-) diff --git a/src/locales/ko/battle.ts b/src/locales/ko/battle.ts index e9bfb7cb307..c4a0f0bbee4 100644 --- a/src/locales/ko/battle.ts +++ b/src/locales/ko/battle.ts @@ -24,7 +24,7 @@ export const battle: SimpleTranslationEntries = { "hitResultNotVeryEffective": "효과가 별로인 듯하다…", "hitResultNoEffect": "{{pokemonName}}에게는\n효과가 없는 것 같다…", "hitResultOneHitKO": "일격필살!", - "attackFailed": "하지만 실패했다!", + "attackFailed": "그러나 실패하고 말았다!!", "attackHitsCount": "{{count}}번 맞았다!", "rewardGain": "{{modifierName}}[[를]] 받았다!", "expGain": "{{pokemonName}}[[는]]\n{{exp}} 경험치를 얻었다!", diff --git a/src/locales/ko/bgm-name.ts b/src/locales/ko/bgm-name.ts index c133a93450e..620deca21f5 100644 --- a/src/locales/ko/bgm-name.ts +++ b/src/locales/ko/bgm-name.ts @@ -62,7 +62,7 @@ export const bgmName: SimpleTranslationEntries = { "battle_legendary_calyrex": "SWSH 버드렉스 배틀", "battle_legendary_birds_galar": "SWSH 가라르 전설의 새 배틀", "battle_legendary_ruinous": "SV 재앙의 보물 배틀", - "battle_legendary_kor_mir": "SV Depths of Area Zero Battle", + "battle_legendary_kor_mir": "SV 에리어 제로 배틀", "battle_legendary_loyal_three": "SV 세벗들 배틀", "battle_legendary_ogerpon": "SV 오거폰 배틀", "battle_legendary_terapagos": "SV 테라파고스 배틀", @@ -74,16 +74,16 @@ export const bgmName: SimpleTranslationEntries = { "battle_wild": "BW 야생 포켓몬 배틀", "battle_wild_strong": "BW 강한 야생 포켓몬 조우 배틀", "end_summit": "불가사의 던전 구조대 DX 천공의 탑 꼭대기", - "battle_rocket_grunt": "HGSS Team Rocket Battle", - "battle_aqua_magma_grunt": "ORAS Team Aqua & Magma Battle", - "battle_galactic_grunt": "BDSP Team Galactic Battle", + "battle_rocket_grunt": "HGSS 로켓단 배틀", + "battle_aqua_magma_grunt": "ORAS 아쿠아단 & 마그마단 배틀", + "battle_galactic_grunt": "BDSP 갤럭시단 배틀", "battle_plasma_grunt": "BW 플라스마단 배틀", - "battle_flare_grunt": "XY Team Flare Battle", - "battle_rocket_boss": "USUM Giovanni Battle", - "battle_aqua_magma_boss": "ORAS Archie & Maxie Battle", - "battle_galactic_boss": "BDSP Cyrus Battle", - "battle_plasma_boss": "B2W2 Ghetsis Battle", - "battle_flare_boss": "XY Lysandre Battle", + "battle_flare_grunt": "XY 플레어단 배틀", + "battle_rocket_boss": "USUM 비주기 배틀", + "battle_aqua_magma_boss": "ORAS 아강 & 정주 배틀", + "battle_galactic_boss": "BDSP 얀커 배틀", + "battle_plasma_boss": "B2W2 게치스 배틀", + "battle_flare_boss": "XY 플라드리 배틀", // Biome Music "abyss": "불가사의 던전 하늘의 탐험대 어둠의 화구", diff --git a/src/locales/ko/challenges.ts b/src/locales/ko/challenges.ts index 1f10c4f215a..136417f597b 100644 --- a/src/locales/ko/challenges.ts +++ b/src/locales/ko/challenges.ts @@ -2,7 +2,7 @@ import { TranslationEntries } from "#app/interfaces/locales"; export const challenges: TranslationEntries = { "title": "챌린지 조건 설정", - "illegalEvolution": "{{pokemon}} changed into an ineligble pokémon\nfor this challenge!", + "illegalEvolution": "{{pokemon}}[[는]] 현재의 챌린지에\n부적합한 포켓몬이 되었습니다!", "singleGeneration": { "name": "단일 세대", "desc": "{{gen}}의 포켓몬만 사용할 수 있습니다.", diff --git a/src/locales/ko/menu-ui-handler.ts b/src/locales/ko/menu-ui-handler.ts index 94c3cb2df0c..3bd412bc5ea 100644 --- a/src/locales/ko/menu-ui-handler.ts +++ b/src/locales/ko/menu-ui-handler.ts @@ -20,5 +20,5 @@ export const menuUiHandler: SimpleTranslationEntries = { "exportData": "데이터 내보내기", "cancel": "취소", "losingProgressionWarning": "전투 시작으로부터의 진행 상황을 잃게 됩니다. 계속하시겠습니까?", - "noEggs": "You are not hatching\nany eggs at the moment!" + "noEggs": "부화중인 알이 없습니다!" } as const; From ed80ad4befcc8523114dc7fb66cfe26ae0784546 Mon Sep 17 00:00:00 2001 From: sodam <66295123+sodaMelon@users.noreply.github.com> Date: Fri, 5 Jul 2024 13:41:03 +0900 Subject: [PATCH 19/37] [Localization(ko)] fixed Magma/Galactic name mixup in bgm title (#2800) --- src/locales/ko/bgm-name.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/locales/ko/bgm-name.ts b/src/locales/ko/bgm-name.ts index 620deca21f5..032db1717e1 100644 --- a/src/locales/ko/bgm-name.ts +++ b/src/locales/ko/bgm-name.ts @@ -80,8 +80,8 @@ export const bgmName: SimpleTranslationEntries = { "battle_plasma_grunt": "BW 플라스마단 배틀", "battle_flare_grunt": "XY 플레어단 배틀", "battle_rocket_boss": "USUM 비주기 배틀", - "battle_aqua_magma_boss": "ORAS 아강 & 정주 배틀", - "battle_galactic_boss": "BDSP 얀커 배틀", + "battle_aqua_magma_boss": "ORAS 아강 & 마적 배틀", + "battle_galactic_boss": "BDSP 태홍 배틀", "battle_plasma_boss": "B2W2 게치스 배틀", "battle_flare_boss": "XY 플라드리 배틀", From 25a619708a28d7ddbfb7af82ae83eb85921a6711 Mon Sep 17 00:00:00 2001 From: Mumble Date: Thu, 4 Jul 2024 22:06:36 -0700 Subject: [PATCH 20/37] [BUG] Magic Guard-Spiky Shield Fix (#2803) * Added new condition for PostDefendContactAbAttr * Magic Guard-Spiky Shield interaction fix --------- Co-authored-by: Frutescens --- src/data/battler-tags.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/data/battler-tags.ts b/src/data/battler-tags.ts index 015b8b44984..41b6f73ec28 100644 --- a/src/data/battler-tags.ts +++ b/src/data/battler-tags.ts @@ -934,7 +934,9 @@ export class ContactDamageProtectedTag extends ProtectedTag { const effectPhase = pokemon.scene.getCurrentPhase(); if (effectPhase instanceof MoveEffectPhase && effectPhase.move.getMove().hasFlag(MoveFlags.MAKES_CONTACT)) { const attacker = effectPhase.getPokemon(); - attacker.damageAndUpdate(Math.ceil(attacker.getMaxHp() * (1 / this.damageRatio)), HitResult.OTHER); + if (!attacker.hasAbilityWithAttr(BlockNonDirectDamageAbAttr)) { + attacker.damageAndUpdate(Math.ceil(attacker.getMaxHp() * (1 / this.damageRatio)), HitResult.OTHER); + } } } From a37593826b4cfac47a4151c62a867fa8aa6813d9 Mon Sep 17 00:00:00 2001 From: mercurius-00 <80205689+mercurius-00@users.noreply.github.com> Date: Fri, 5 Jul 2024 13:09:48 +0800 Subject: [PATCH 21/37] [Localization] fix zh-cn typo in party-ui-handler (#2802) --- src/locales/zh_CN/party-ui-handler.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/locales/zh_CN/party-ui-handler.ts b/src/locales/zh_CN/party-ui-handler.ts index 0348da87b17..4cb2f816b2e 100644 --- a/src/locales/zh_CN/party-ui-handler.ts +++ b/src/locales/zh_CN/party-ui-handler.ts @@ -14,7 +14,7 @@ export const partyUiHandler: SimpleTranslationEntries = { "TRANSFER": "交换", "ALL": "全部道具", "PASS_BATON": "接棒", - "UNPAUSE_EVOLUTION": "接触进化暂停", + "UNPAUSE_EVOLUTION": "解除进化暂停", "REVIVE": "复活", "choosePokemon": "选择一只宝可梦。", From 42304070a0e59193ebcc4b66c01b5e0e25d209c6 Mon Sep 17 00:00:00 2001 From: Dakurei Date: Fri, 5 Jul 2024 11:06:25 +0200 Subject: [PATCH 22/37] Fix typos (#2805) --- src/locales/fr/party-ui-handler.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/locales/fr/party-ui-handler.ts b/src/locales/fr/party-ui-handler.ts index f64859a3a14..b1324f52398 100644 --- a/src/locales/fr/party-ui-handler.ts +++ b/src/locales/fr/party-ui-handler.ts @@ -28,7 +28,7 @@ export const partyUiHandler: SimpleTranslationEntries = { "unspliceConfirmation": "Voulez-vous vraiment séparer {{fusionName}}\nde {{pokemonName}} ? {{fusionName}} sera perdu.", "wasReverted": "{{fusionName}} est redevenu {{pokemonName}}.", "releaseConfirmation": "Voulez-vous relâcher {{pokemonName}} ?", - "releaseInBattle": "Vous ne pouvez pas relâcher Pokémon en combat !", + "releaseInBattle": "Vous ne pouvez pas relâcher un Pokémon en combat !", "selectAMove": "Sélectionnez une capacité.", "changeQuantity": "Sélect. un objet à transférer.\nChangez la quantité avec < et >.", "selectAnotherPokemonToSplice": "Sélectionnez un autre Pokémon à séparer.", @@ -44,7 +44,7 @@ export const partyUiHandler: SimpleTranslationEntries = { "byebye": "Bye-bye, {{pokemonName}} !", "farewell": "Adieu, {{pokemonName}} !", "soLong": "Salut, {{pokemonName}} !", - "thisIsWhereWePart": "C’est là qu’on se sépare, {{pokemonName}}!", + "thisIsWhereWePart": "C’est là qu’on se sépare, {{pokemonName}} !", "illMissYou": "Tu vas me manquer, {{pokemonName}} !", "illNeverForgetYou": "Je ne t’oublierai pas, {{pokemonName}} !", "untilWeMeetAgain": "À la prochaine, {{pokemonName}} !", From c5886bc2a271713a91130bb4977d455e7ffe39b5 Mon Sep 17 00:00:00 2001 From: flx-sta <50131232+flx-sta@users.noreply.github.com> Date: Fri, 5 Jul 2024 08:30:48 -0700 Subject: [PATCH 23/37] [Tests] add unit-tests for battle-stat.ts (#2752) * add test coverage for battle-stat.getBattleStatName() * add test coverage for battle-stat * apply mockI18next() to status-effect.test.ts * add testUtils jsdocs and optimize imports --- src/test/battle-stat.spec.ts | 149 ++++++++++++++++++++ src/test/lokalisation/status-effect.test.ts | 76 +++++----- src/test/utils/testUtils.ts | 23 +++ 3 files changed, 210 insertions(+), 38 deletions(-) create mode 100644 src/test/battle-stat.spec.ts create mode 100644 src/test/utils/testUtils.ts diff --git a/src/test/battle-stat.spec.ts b/src/test/battle-stat.spec.ts new file mode 100644 index 00000000000..46f25f66bcd --- /dev/null +++ b/src/test/battle-stat.spec.ts @@ -0,0 +1,149 @@ +import { + BattleStat, + getBattleStatLevelChangeDescription, + getBattleStatName, +} from "#app/data/battle-stat.js"; +import { describe, expect, it } from "vitest"; +import { arrayOfRange, mockI18next } from "./utils/testUtils"; + +const TEST_BATTLE_STAT = -99 as unknown as BattleStat; +const TEST_POKEMON = "Testmon"; +const TEST_STAT = "Teststat"; + +describe("battle-stat", () => { + describe("getBattleStatName", () => { + it("should return the correct name for each BattleStat", () => { + mockI18next(); + + expect(getBattleStatName(BattleStat.ATK)).toBe("pokemonInfo:Stat.ATK"); + expect(getBattleStatName(BattleStat.DEF)).toBe("pokemonInfo:Stat.DEF"); + expect(getBattleStatName(BattleStat.SPATK)).toBe( + "pokemonInfo:Stat.SPATK" + ); + expect(getBattleStatName(BattleStat.SPDEF)).toBe( + "pokemonInfo:Stat.SPDEF" + ); + expect(getBattleStatName(BattleStat.SPD)).toBe("pokemonInfo:Stat.SPD"); + expect(getBattleStatName(BattleStat.ACC)).toBe("pokemonInfo:Stat.ACC"); + expect(getBattleStatName(BattleStat.EVA)).toBe("pokemonInfo:Stat.EVA"); + }); + + it("should fall back to ??? for an unknown BattleStat", () => { + expect(getBattleStatName(TEST_BATTLE_STAT)).toBe("???"); + }); + }); + + describe("getBattleStatLevelChangeDescription", () => { + it("should return battle:statRose for +1", () => { + mockI18next(); + + const message = getBattleStatLevelChangeDescription( + TEST_POKEMON, + TEST_STAT, + 1, + true + ); + + expect(message).toBe("battle:statRose"); + }); + + it("should return battle:statSharplyRose for +2", () => { + mockI18next(); + + const message = getBattleStatLevelChangeDescription( + TEST_POKEMON, + TEST_STAT, + 2, + true + ); + + expect(message).toBe("battle:statSharplyRose"); + }); + + it("should return battle:statRoseDrastically for +3 to +6", () => { + mockI18next(); + + arrayOfRange(3, 6).forEach((n) => { + const message = getBattleStatLevelChangeDescription( + TEST_POKEMON, + TEST_STAT, + n, + true + ); + + expect(message).toBe("battle:statRoseDrastically"); + }); + }); + + it("should return battle:statWontGoAnyHigher for 7 or higher", () => { + mockI18next(); + + arrayOfRange(7, 10).forEach((n) => { + const message = getBattleStatLevelChangeDescription( + TEST_POKEMON, + TEST_STAT, + n, + true + ); + + expect(message).toBe("battle:statWontGoAnyHigher"); + }); + }); + + it("should return battle:statFell for -1", () => { + mockI18next(); + + const message = getBattleStatLevelChangeDescription( + TEST_POKEMON, + TEST_STAT, + 1, + false + ); + + expect(message).toBe("battle:statFell"); + }); + + it("should return battle:statHarshlyFell for -2", () => { + mockI18next(); + + const message = getBattleStatLevelChangeDescription( + TEST_POKEMON, + TEST_STAT, + 2, + false + ); + + expect(message).toBe("battle:statHarshlyFell"); + }); + + it("should return battle:statSeverelyFell for -3 to -6", () => { + mockI18next(); + + arrayOfRange(3, 6).forEach((n) => { + const message = getBattleStatLevelChangeDescription( + TEST_POKEMON, + TEST_STAT, + n, + false + ); + + expect(message).toBe("battle:statSeverelyFell"); + }); + }); + + it("should return battle:statWontGoAnyLower for -7 or lower", () => { + mockI18next(); + + arrayOfRange(7, 10).forEach((n) => { + const message = getBattleStatLevelChangeDescription( + TEST_POKEMON, + TEST_STAT, + n, + false + ); + + expect(message).toBe("battle:statWontGoAnyLower"); + }); + }); + }); +}); diff --git a/src/test/lokalisation/status-effect.test.ts b/src/test/lokalisation/status-effect.test.ts index b4267ea7b8b..ad33a59a675 100644 --- a/src/test/lokalisation/status-effect.test.ts +++ b/src/test/lokalisation/status-effect.test.ts @@ -7,9 +7,9 @@ import { getStatusEffectObtainText, getStatusEffectOverlapText, } from "#app/data/status-effect"; -import i18next, { ParseKeys } from "i18next"; +import i18next from "i18next"; +import { mockI18next } from "../utils/testUtils"; -const tMock = (key: ParseKeys) => key; const pokemonName = "PKM"; const sourceText = "SOURCE"; @@ -22,7 +22,7 @@ describe("status-effect", () => { const statusEffect = StatusEffect.NONE; it("should return the obtain text", () => { - vi.spyOn(i18next, "t").mockImplementation(tMock); + mockI18next(); const text = getStatusEffectObtainText(statusEffect, pokemonName); expect(text).toBe("statusEffect:none.obtain"); @@ -32,7 +32,7 @@ describe("status-effect", () => { }); it("should return the source-obtain text", () => { - vi.spyOn(i18next, "t").mockImplementation(tMock); + mockI18next(); const text = getStatusEffectObtainText(statusEffect, pokemonName, sourceText); expect(text).toBe("statusEffect:none.obtainSource"); @@ -42,25 +42,25 @@ describe("status-effect", () => { }); it("should return the activation text", () => { - vi.spyOn(i18next, "t").mockImplementation(tMock); + mockI18next(); const text = getStatusEffectActivationText(statusEffect, pokemonName); expect(text).toBe("statusEffect:none.activation"); }); it("should return the overlap text", () => { - vi.spyOn(i18next, "t").mockImplementation(tMock); + mockI18next(); const text = getStatusEffectOverlapText(statusEffect, pokemonName); expect(text).toBe("statusEffect:none.overlap"); }); it("should return the heal text", () => { - vi.spyOn(i18next, "t").mockImplementation(tMock); + mockI18next(); const text = getStatusEffectHealText(statusEffect, pokemonName); expect(text).toBe("statusEffect:none.heal"); }); it("should return the descriptor", () => { - vi.spyOn(i18next, "t").mockImplementation(tMock); + mockI18next(); const text = getStatusEffectDescriptor(statusEffect); expect(text).toBe("statusEffect:none.description"); }); @@ -70,7 +70,7 @@ describe("status-effect", () => { const statusEffect = StatusEffect.POISON; it("should return the obtain text", () => { - vi.spyOn(i18next, "t").mockImplementation(tMock); + mockI18next(); const text = getStatusEffectObtainText(statusEffect, pokemonName); expect(text).toBe("statusEffect:poison.obtain"); @@ -80,25 +80,25 @@ describe("status-effect", () => { }); it("should return the activation text", () => { - vi.spyOn(i18next, "t").mockImplementation(tMock); + mockI18next(); const text = getStatusEffectActivationText(statusEffect, pokemonName); expect(text).toBe("statusEffect:poison.activation"); }); it("should return the descriptor", () => { - vi.spyOn(i18next, "t").mockImplementation(tMock); + mockI18next(); const text = getStatusEffectDescriptor(statusEffect); expect(text).toBe("statusEffect:poison.description"); }); it("should return the heal text", () => { - vi.spyOn(i18next, "t").mockImplementation(tMock); + mockI18next(); const text = getStatusEffectHealText(statusEffect, pokemonName); expect(text).toBe("statusEffect:poison.heal"); }); it("should return the overlap text", () => { - vi.spyOn(i18next, "t").mockImplementation(tMock); + mockI18next(); const text = getStatusEffectOverlapText(statusEffect, pokemonName); expect(text).toBe("statusEffect:poison.overlap"); }); @@ -108,7 +108,7 @@ describe("status-effect", () => { const statusEffect = StatusEffect.TOXIC; it("should return the obtain text", () => { - vi.spyOn(i18next, "t").mockImplementation(tMock); + mockI18next(); const text = getStatusEffectObtainText(statusEffect, pokemonName); expect(text).toBe("statusEffect:toxic.obtain"); @@ -118,25 +118,25 @@ describe("status-effect", () => { }); it("should return the activation text", () => { - vi.spyOn(i18next, "t").mockImplementation(tMock); + mockI18next(); const text = getStatusEffectActivationText(statusEffect, pokemonName); expect(text).toBe("statusEffect:toxic.activation"); }); it("should return the descriptor", () => { - vi.spyOn(i18next, "t").mockImplementation(tMock); + mockI18next(); const text = getStatusEffectDescriptor(statusEffect); expect(text).toBe("statusEffect:toxic.description"); }); it("should return the heal text", () => { - vi.spyOn(i18next, "t").mockImplementation(tMock); + mockI18next(); const text = getStatusEffectHealText(statusEffect, pokemonName); expect(text).toBe("statusEffect:toxic.heal"); }); it("should return the overlap text", () => { - vi.spyOn(i18next, "t").mockImplementation(tMock); + mockI18next(); const text = getStatusEffectOverlapText(statusEffect, pokemonName); expect(text).toBe("statusEffect:toxic.overlap"); }); @@ -146,7 +146,7 @@ describe("status-effect", () => { const statusEffect = StatusEffect.PARALYSIS; it("should return the obtain text", () => { - vi.spyOn(i18next, "t").mockImplementation(tMock); + mockI18next(); const text = getStatusEffectObtainText(statusEffect, pokemonName); expect(text).toBe("statusEffect:paralysis.obtain"); @@ -156,25 +156,25 @@ describe("status-effect", () => { }); it("should return the activation text", () => { - vi.spyOn(i18next, "t").mockImplementation(tMock); + mockI18next(); const text = getStatusEffectActivationText(statusEffect, pokemonName); expect(text).toBe("statusEffect:paralysis.activation"); }); it("should return the descriptor", () => { - vi.spyOn(i18next, "t").mockImplementation(tMock); + mockI18next(); const text = getStatusEffectDescriptor(statusEffect); expect(text).toBe("statusEffect:paralysis.description"); }); it("should return the heal text", () => { - vi.spyOn(i18next, "t").mockImplementation(tMock); + mockI18next(); const text = getStatusEffectHealText(statusEffect, pokemonName); expect(text).toBe("statusEffect:paralysis.heal"); }); it("should return the overlap text", () => { - vi.spyOn(i18next, "t").mockImplementation(tMock); + mockI18next(); const text = getStatusEffectOverlapText(statusEffect, pokemonName); expect(text).toBe("statusEffect:paralysis.overlap"); }); @@ -184,7 +184,7 @@ describe("status-effect", () => { const statusEffect = StatusEffect.SLEEP; it("should return the obtain text", () => { - vi.spyOn(i18next, "t").mockImplementation(tMock); + mockI18next(); const text = getStatusEffectObtainText(statusEffect, pokemonName); expect(text).toBe("statusEffect:sleep.obtain"); @@ -194,25 +194,25 @@ describe("status-effect", () => { }); it("should return the activation text", () => { - vi.spyOn(i18next, "t").mockImplementation(tMock); + mockI18next(); const text = getStatusEffectActivationText(statusEffect, pokemonName); expect(text).toBe("statusEffect:sleep.activation"); }); it("should return the descriptor", () => { - vi.spyOn(i18next, "t").mockImplementation(tMock); + mockI18next(); const text = getStatusEffectDescriptor(statusEffect); expect(text).toBe("statusEffect:sleep.description"); }); it("should return the heal text", () => { - vi.spyOn(i18next, "t").mockImplementation(tMock); + mockI18next(); const text = getStatusEffectHealText(statusEffect, pokemonName); expect(text).toBe("statusEffect:sleep.heal"); }); it("should return the overlap text", () => { - vi.spyOn(i18next, "t").mockImplementation(tMock); + mockI18next(); const text = getStatusEffectOverlapText(statusEffect, pokemonName); expect(text).toBe("statusEffect:sleep.overlap"); }); @@ -222,7 +222,7 @@ describe("status-effect", () => { const statusEffect = StatusEffect.FREEZE; it("should return the obtain text", () => { - vi.spyOn(i18next, "t").mockImplementation(tMock); + mockI18next(); const text = getStatusEffectObtainText(statusEffect, pokemonName); expect(text).toBe("statusEffect:freeze.obtain"); @@ -232,25 +232,25 @@ describe("status-effect", () => { }); it("should return the activation text", () => { - vi.spyOn(i18next, "t").mockImplementation(tMock); + mockI18next(); const text = getStatusEffectActivationText(statusEffect, pokemonName); expect(text).toBe("statusEffect:freeze.activation"); }); it("should return the descriptor", () => { - vi.spyOn(i18next, "t").mockImplementation(tMock); + mockI18next(); const text = getStatusEffectDescriptor(statusEffect); expect(text).toBe("statusEffect:freeze.description"); }); it("should return the heal text", () => { - vi.spyOn(i18next, "t").mockImplementation(tMock); + mockI18next(); const text = getStatusEffectHealText(statusEffect, pokemonName); expect(text).toBe("statusEffect:freeze.heal"); }); it("should return the overlap text", () => { - vi.spyOn(i18next, "t").mockImplementation(tMock); + mockI18next(); const text = getStatusEffectOverlapText(statusEffect, pokemonName); expect(text).toBe("statusEffect:freeze.overlap"); }); @@ -260,7 +260,7 @@ describe("status-effect", () => { const statusEffect = StatusEffect.BURN; it("should return the obtain text", () => { - vi.spyOn(i18next, "t").mockImplementation(tMock); + mockI18next(); const text = getStatusEffectObtainText(statusEffect, pokemonName); expect(text).toBe("statusEffect:burn.obtain"); @@ -270,25 +270,25 @@ describe("status-effect", () => { }); it("should return the activation text", () => { - vi.spyOn(i18next, "t").mockImplementation(tMock); + mockI18next(); const text = getStatusEffectActivationText(statusEffect, pokemonName); expect(text).toBe("statusEffect:burn.activation"); }); it("should return the descriptor", () => { - vi.spyOn(i18next, "t").mockImplementation(tMock); + mockI18next(); const text = getStatusEffectDescriptor(statusEffect); expect(text).toBe("statusEffect:burn.description"); }); it("should return the heal text", () => { - vi.spyOn(i18next, "t").mockImplementation(tMock); + mockI18next(); const text = getStatusEffectHealText(statusEffect, pokemonName); expect(text).toBe("statusEffect:burn.heal"); }); it("should return the overlap text", () => { - vi.spyOn(i18next, "t").mockImplementation(tMock); + mockI18next(); const text = getStatusEffectOverlapText(statusEffect, pokemonName); expect(text).toBe("statusEffect:burn.overlap"); }); diff --git a/src/test/utils/testUtils.ts b/src/test/utils/testUtils.ts new file mode 100644 index 00000000000..b922fc9c61c --- /dev/null +++ b/src/test/utils/testUtils.ts @@ -0,0 +1,23 @@ +import i18next, { type ParseKeys } from "i18next"; +import { vi } from "vitest"; + +/** + * Sets up the i18next mock. + * Includes a i18next.t mocked implementation only returning the raw key (`(key) => key`) + * + * @returns A spy/mock of i18next + */ +export function mockI18next() { + return vi.spyOn(i18next, "t").mockImplementation((key: ParseKeys) => key); +} + +/** + * Creates an array of range `start - end` + * + * @param start start number e.g. 1 + * @param end end number e.g. 10 + * @returns an array of numbers + */ +export function arrayOfRange(start: integer, end: integer) { + return Array.from({ length: end - start }, (_v, k) => k + start); +} From 732ce1c330bf29ef83f8b9f17d2473b4d3bc8ad0 Mon Sep 17 00:00:00 2001 From: Leo Kim <47556641+KimJeongSun@users.noreply.github.com> Date: Sat, 6 Jul 2024 02:38:27 +0900 Subject: [PATCH 24/37] [Localization] update korean translation on learning move UI (#2810) --- src/locales/ko/party-ui-handler.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/locales/ko/party-ui-handler.ts b/src/locales/ko/party-ui-handler.ts index 842f10209a9..f0075809345 100644 --- a/src/locales/ko/party-ui-handler.ts +++ b/src/locales/ko/party-ui-handler.ts @@ -35,8 +35,8 @@ export const partyUiHandler: SimpleTranslationEntries = { "cancel": "그만둔다", // Slot TM text - "able": "배울 수 있다", - "notAble": "배울 수 없다", + "able": "배운다!", + "notAble": "배우지 못함", "learned": "알고 있다", // Releasing messages From 759e4d0288700445d532d519d3d9f291d867fecb Mon Sep 17 00:00:00 2001 From: Mumble Date: Fri, 5 Jul 2024 10:46:36 -0700 Subject: [PATCH 25/37] [QoL] Summary option when new Pokemon caught and party is full (#2242) * Option to view Summary before adding new Pokemon to party * Fixed issues described by HopsWas * Adjusted makeRoomForConfirmUi to improve window spacing * Fixed ESLint issue + addressed OrangeRed review * Fixed Github pages issue * Removed duplicate unshiftPhase * Fixed phase order --------- Co-authored-by: Frutescens --- src/phases.ts | 17 +++++++++---- src/ui/confirm-ui-handler.ts | 41 ++++++++++++++++++++++++++++++-- src/ui/pokemon-info-container.ts | 5 ++-- src/ui/summary-ui-handler.ts | 11 +++++++-- 4 files changed, 64 insertions(+), 10 deletions(-) diff --git a/src/phases.ts b/src/phases.ts index df7314e6285..40a2683b09d 100644 --- a/src/phases.ts +++ b/src/phases.ts @@ -4890,7 +4890,10 @@ export class AttemptCapturePhase extends PokemonPhase { }); } }, - onComplete: () => this.catch() + onComplete: () => { + this.scene.gameData.setPokemonCaught(pokemon); + this.catch(); + } }); }; @@ -4931,7 +4934,6 @@ export class AttemptCapturePhase extends PokemonPhase { catch() { const pokemon = this.getPokemon() as EnemyPokemon; - this.scene.unshiftPhase(new VictoryPhase(this.scene, this.battlerIndex)); const speciesForm = !pokemon.fusionSpecies ? pokemon.getSpeciesForm() : pokemon.getFusionSpeciesForm(); @@ -4957,6 +4959,7 @@ export class AttemptCapturePhase extends PokemonPhase { this.scene.ui.showText(i18next.t("battle:pokemonCaught", { pokemonName: pokemon.name }), null, () => { const end = () => { + this.scene.unshiftPhase(new VictoryPhase(this.scene, this.battlerIndex)); this.scene.pokemonInfoContainer.hide(); this.removePb(); this.end(); @@ -4985,12 +4988,18 @@ export class AttemptCapturePhase extends PokemonPhase { } }); }; - Promise.all([pokemon.hideInfo(), this.scene.gameData.setPokemonCaught(pokemon)]).then(() => { + Promise.all([pokemon.hideInfo()]).then(() => { if (this.scene.getParty().length === 6) { const promptRelease = () => { this.scene.ui.showText(i18next.t("battle:partyFull", { pokemonName: pokemon.name }), null, () => { - this.scene.pokemonInfoContainer.makeRoomForConfirmUi(); + this.scene.pokemonInfoContainer.makeRoomForConfirmUi(1, true); this.scene.ui.setMode(Mode.CONFIRM, () => { + const newPokemon = this.scene.addPlayerPokemon(pokemon.species, pokemon.level, pokemon.abilityIndex, pokemon.formIndex, pokemon.gender, pokemon.shiny, pokemon.variant, pokemon.ivs, pokemon.nature, pokemon); + this.scene.ui.setMode(Mode.SUMMARY, newPokemon).then(() => { + this.catch(); + return; + }); + }, () => { this.scene.ui.setMode(Mode.PARTY, PartyUiMode.RELEASE, this.fieldIndex, (slotIndex: integer, _option: PartyOption) => { this.scene.ui.setMode(Mode.MESSAGE).then(() => { if (slotIndex < 6) { diff --git a/src/ui/confirm-ui-handler.ts b/src/ui/confirm-ui-handler.ts index 953ed4972ac..49c4782a8a7 100644 --- a/src/ui/confirm-ui-handler.ts +++ b/src/ui/confirm-ui-handler.ts @@ -20,7 +20,45 @@ export default class ConfirmUiHandler extends AbstractOptionSelectUiHandler { } show(args: any[]): boolean { - if (args.length >= 2 && args[0] instanceof Function && args[1] instanceof Function) { + if (args.length === 3 && args[0].toString().includes("newPokemon")) { + const config: OptionSelectConfig = { + options: [ + { + label: i18next.t("partyUiHandler:SUMMARY"), + handler: () => { + args[0](); + return false; + }, + }, { + label: i18next.t("menu:yes"), + handler: () => { + args[1](); + return true; + } + }, { + label: i18next.t("menu:no"), + handler: () => { + args[2](); + return true; + } + } + ], + delay: args.length >= 7 && args[6] !== null ? args[6] as integer : 0 + }; + + super.show([ config ]); + + this.switchCheck = args.length >= 4 && args[3] !== null && args[3] as boolean; + + const xOffset = (args.length >= 5 && args[4] !== null ? args[4] as number : 0); + const yOffset = (args.length >= 6 && args[5] !== null ? args[5] as number : 0); + + this.optionSelectContainer.setPosition((this.scene.game.canvas.width / 6) - 1 + xOffset, -48 + yOffset); + + this.setCursor(this.switchCheck ? this.switchCheckCursor : 0); + + return true; + } else if (args.length >= 2 && args[0] instanceof Function && args[1] instanceof Function) { const config: OptionSelectConfig = { options: [ { @@ -54,7 +92,6 @@ export default class ConfirmUiHandler extends AbstractOptionSelectUiHandler { return true; } - return false; } diff --git a/src/ui/pokemon-info-container.ts b/src/ui/pokemon-info-container.ts index 9f4df2b20b4..1e958ae53b7 100644 --- a/src/ui/pokemon-info-container.ts +++ b/src/ui/pokemon-info-container.ts @@ -364,13 +364,14 @@ export default class PokemonInfoContainer extends Phaser.GameObjects.Container { }); } - makeRoomForConfirmUi(speedMultiplier: number = 1): Promise { + makeRoomForConfirmUi(speedMultiplier: number = 1, fromCatch: boolean = false): Promise { + const xPosition = fromCatch ? this.initialX - this.infoWindowWidth - 65 : this.initialX - this.infoWindowWidth - ConfirmUiHandler.windowWidth; return new Promise(resolve => { this.scene.tweens.add({ targets: this, duration: Utils.fixedInt(Math.floor(150 / speedMultiplier)), ease: "Cubic.easeInOut", - x: this.initialX - this.infoWindowWidth - ConfirmUiHandler.windowWidth, + x: xPosition, onComplete: () => { resolve(); } diff --git a/src/ui/summary-ui-handler.ts b/src/ui/summary-ui-handler.ts index ae94951bc4c..33a74c54938 100644 --- a/src/ui/summary-ui-handler.ts +++ b/src/ui/summary-ui-handler.ts @@ -397,7 +397,7 @@ export default class SummaryUiHandler extends UiHandler { } const ui = this.getUi(); - + const fromPartyMode = ui.handlers[Mode.PARTY].active; let success = false; let error = false; @@ -485,7 +485,12 @@ export default class SummaryUiHandler extends UiHandler { if (this.summaryUiMode === SummaryUiMode.LEARN_MOVE) { this.hideMoveSelect(); } else { - ui.setMode(Mode.PARTY); + + if (!fromPartyMode) { + ui.setMode(Mode.MESSAGE); + } else { + ui.setMode(Mode.PARTY); + } } success = true; } else { @@ -495,6 +500,8 @@ export default class SummaryUiHandler extends UiHandler { case Button.DOWN: if (this.summaryUiMode === SummaryUiMode.LEARN_MOVE) { break; + } else if (!fromPartyMode) { + break; } const isDown = button === Button.DOWN; const party = this.scene.getParty(); From 10dd16fa1e20a9fdd60fb864a22bc4a505d89a25 Mon Sep 17 00:00:00 2001 From: EmberCM Date: Fri, 5 Jul 2024 12:50:19 -0500 Subject: [PATCH 26/37] [QoL] Add red color to the quantity if the item is at it's held limit (#2221) * Add red color to the quantity if the item is at it's held limit * Add shadow back to option text * Attempt to fix transfer item crash and add tests for transferring items * remove .js file extensions from test file imports * Fix import paths for transfer-item.test --- src/test/ui/transfer-item.test.ts | 100 ++++++++++++++++++++++++++++++ src/ui/party-ui-handler.ts | 47 +++++++++----- 2 files changed, 132 insertions(+), 15 deletions(-) create mode 100644 src/test/ui/transfer-item.test.ts diff --git a/src/test/ui/transfer-item.test.ts b/src/test/ui/transfer-item.test.ts new file mode 100644 index 00000000000..336e5bccd26 --- /dev/null +++ b/src/test/ui/transfer-item.test.ts @@ -0,0 +1,100 @@ +import { BerryType } from "#app/enums/berry-type"; +import { Moves } from "#app/enums/moves"; +import { Species } from "#app/enums/species"; +import { Button } from "#app/enums/buttons"; +import * as overrides from "#app/overrides"; +import { + BattleEndPhase, + SelectModifierPhase +} from "#app/phases"; +import GameManager from "#app/test/utils/gameManager"; +import ModifierSelectUiHandler from "#app/ui/modifier-select-ui-handler"; +import PartyUiHandler, { PartyUiMode } from "#app/ui/party-ui-handler"; +import { Mode } from "#app/ui/ui"; +import Phaser from "phaser"; +import BBCodeText from "phaser3-rex-plugins/plugins/bbcodetext"; +import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; +import { getMovePosition } from "../utils/gameManagerUtils"; + + +describe("UI - Transfer Items", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + + beforeAll(() => { + phaserGame = new Phaser.Game({ + type: Phaser.HEADLESS, + }); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); + + beforeEach(async () => { + game = new GameManager(phaserGame); + vi.spyOn(overrides, "SINGLE_BATTLE_OVERRIDE", "get").mockReturnValue(true); + vi.spyOn(overrides, "STARTING_LEVEL_OVERRIDE", "get").mockReturnValue(100); + vi.spyOn(overrides, "STARTING_WAVE_OVERRIDE", "get").mockReturnValue(1); + vi.spyOn(overrides, "STARTING_HELD_ITEMS_OVERRIDE", "get").mockReturnValue([ + { name: "BERRY", count: 1, type: BerryType.SITRUS }, + { name: "BERRY", count: 2, type: BerryType.APICOT }, + { name: "BERRY", count: 2, type: BerryType.LUM }, + ]); + vi.spyOn(overrides, "MOVESET_OVERRIDE", "get").mockReturnValue([Moves.DRAGON_CLAW]); + vi.spyOn(overrides, "OPP_SPECIES_OVERRIDE", "get").mockReturnValue(Species.MAGIKARP); + vi.spyOn(overrides, "OPP_MOVESET_OVERRIDE", "get").mockReturnValue([Moves.SPLASH]); + + await game.startBattle([Species.RAYQUAZA, Species.RAYQUAZA, Species.RAYQUAZA]); + + game.doAttack(getMovePosition(game.scene, 0, Moves.DRAGON_CLAW)); + + game.onNextPrompt("SelectModifierPhase", Mode.MODIFIER_SELECT, () => { + expect(game.scene.ui.getHandler()).toBeInstanceOf(ModifierSelectUiHandler); + + const handler = game.scene.ui.getHandler() as ModifierSelectUiHandler; + handler.setCursor(1); + handler.processInput(Button.ACTION); + + game.scene.ui.setModeWithoutClear(Mode.PARTY, PartyUiMode.MODIFIER_TRANSFER); + }); + + await game.phaseInterceptor.to(BattleEndPhase); + }); + + it("check red tint for held item limit in transfer menu", async () => { + game.onNextPrompt("SelectModifierPhase", Mode.PARTY, () => { + expect(game.scene.ui.getHandler()).toBeInstanceOf(PartyUiHandler); + + const handler = game.scene.ui.getHandler() as PartyUiHandler; + handler.processInput(Button.ACTION); + + expect(handler.optionsContainer.list.some((option) => (option as BBCodeText).text?.includes("Sitrus Berry"))).toBe(true); + expect(handler.optionsContainer.list.some((option) => (option as BBCodeText).text?.includes("Apicot Berry (2)"))).toBe(true); + expect(handler.optionsContainer.list.some((option) => RegExp(/Lum Berry\[color.*(2)/).exec((option as BBCodeText).text))).toBe(true); + + game.phaseInterceptor.unlock(); + }); + + await game.phaseInterceptor.to(SelectModifierPhase); + }, 20000); + + it("check transfer option for pokemon to transfer to", async () => { + game.onNextPrompt("SelectModifierPhase", Mode.PARTY, () => { + expect(game.scene.ui.getHandler()).toBeInstanceOf(PartyUiHandler); + + const handler = game.scene.ui.getHandler() as PartyUiHandler; + handler.processInput(Button.ACTION); // select Pokemon + handler.processInput(Button.ACTION); // select held item (Sitrus Berry) + + handler.setCursor(1); // move to other Pokemon + handler.processInput(Button.ACTION); // select Pokemon + + expect(handler.optionsContainer.list.some((option) => (option as BBCodeText).text?.includes("Transfer"))).toBe(true); + + game.phaseInterceptor.unlock(); + }); + + await game.phaseInterceptor.to(SelectModifierPhase); + }, 20000); +}); diff --git a/src/ui/party-ui-handler.ts b/src/ui/party-ui-handler.ts index 7ddadf99a3d..e820c8cb0d2 100644 --- a/src/ui/party-ui-handler.ts +++ b/src/ui/party-ui-handler.ts @@ -1,12 +1,12 @@ import { CommandPhase, SelectModifierPhase } from "../phases"; import BattleScene from "../battle-scene"; import { PlayerPokemon, PokemonMove } from "../field/pokemon"; -import { addTextObject, TextStyle } from "./text"; +import { addBBCodeTextObject, addTextObject, getTextColor, TextStyle } from "./text"; import { Command } from "./command-ui-handler"; import MessageUiHandler from "./message-ui-handler"; import { Mode } from "./ui"; import * as Utils from "../utils"; -import { PokemonFormChangeItemModifier, PokemonHeldItemModifier, SwitchEffectTransferModifier } from "../modifier/modifier"; +import { PokemonBaseStatModifier, PokemonFormChangeItemModifier, PokemonHeldItemModifier, SwitchEffectTransferModifier } from "../modifier/modifier"; import { allMoves } from "../data/move"; import { getGenderColor, getGenderSymbol } from "../data/gender"; import { StatusEffect } from "../data/status-effect"; @@ -19,6 +19,7 @@ import {Button} from "#enums/buttons"; import { applyChallenges, ChallengeType } from "#app/data/challenge.js"; import MoveInfoOverlay from "./move-info-overlay"; import i18next from "i18next"; +import BBCodeText from "phaser3-rex-plugins/plugins/bbcodetext"; import { Moves } from "#enums/moves"; const defaultMessage = i18next.t("partyUiHandler:choosePokemon"); @@ -85,7 +86,8 @@ export default class PartyUiHandler extends MessageUiHandler { private optionsCursor: integer = 0; private optionsScrollCursor: integer = 0; private optionsScrollTotal: integer = 0; - private optionsContainer: Phaser.GameObjects.Container; + /** This is only public for test/ui/transfer-item.test.ts */ + public optionsContainer: Phaser.GameObjects.Container; private optionsBg: Phaser.GameObjects.NineSlice; private optionsCursorObj: Phaser.GameObjects.Image; private options: integer[]; @@ -819,7 +821,7 @@ export default class PartyUiHandler extends MessageUiHandler { optionEndIndex = this.options.length; let widestOptionWidth = 0; - const optionTexts: Phaser.GameObjects.Text[] = []; + const optionTexts: BBCodeText[] = []; for (let o = optionStartIndex; o < optionEndIndex; o++) { const option = this.options[this.options.length - (o + 1)]; @@ -861,27 +863,42 @@ export default class PartyUiHandler extends MessageUiHandler { const move = learnableLevelMoves[option]; optionName = allMoves[move].name; altText = !pokemon.getSpeciesForm().getLevelMoves().find(plm => plm[1] === move); + } else if (option === PartyOption.ALL) { + optionName = i18next.t("partyUiHandler:ALL"); } else { - if (option === PartyOption.ALL) { - optionName = i18next.t("partyUiHandler:ALL"); - } else { - const itemModifier = itemModifiers[option]; - optionName = itemModifier.type.name; - /** For every item that has stack bigger than 1, display the current quantity selection */ - if (this.transferQuantitiesMax[option] > 1) { - optionName += ` (${this.transferQuantities[option]})`; - } - } + const itemModifier = itemModifiers[option]; + optionName = itemModifier.type.name; } const yCoord = -6 - 16 * o; - const optionText = addTextObject(this.scene, 0, yCoord - 16, optionName, TextStyle.WINDOW); + const optionText = addBBCodeTextObject(this.scene, 0, yCoord - 16, optionName, TextStyle.WINDOW, { maxLines: 1 }); if (altText) { optionText.setColor("#40c8f8"); optionText.setShadowColor("#006090"); } optionText.setOrigin(0, 0); + /** For every item that has stack bigger than 1, display the current quantity selection */ + if (this.partyUiMode === PartyUiMode.MODIFIER_TRANSFER && this.transferQuantitiesMax[option] > 1) { + const itemModifier = itemModifiers[option]; + + /** Not sure why getMaxHeldItemCount had an error, but it only checks the Pokemon parameter if the modifier is PokemonBaseStatModifier */ + if (itemModifier === undefined || itemModifier instanceof PokemonBaseStatModifier) { + continue; + } + + let amountText = ` (${this.transferQuantities[option]})`; + + /** If the amount held is the maximum, display the count in red */ + if (this.transferQuantitiesMax[option] === itemModifier.getMaxHeldItemCount(undefined)) { + amountText = `[color=${getTextColor(TextStyle.SUMMARY_RED)}]${amountText}[/color]`; + } + + optionText.setText(optionName + amountText); + } + + optionText.setText(`[shadow]${optionText.text}[/shadow]`); + optionTexts.push(optionText); widestOptionWidth = Math.max(optionText.displayWidth, widestOptionWidth); From 160a5ce5aad73f399f6aaf5c9b6f47d3012e945e Mon Sep 17 00:00:00 2001 From: flx-sta <50131232+flx-sta@users.noreply.github.com> Date: Fri, 5 Jul 2024 11:01:11 -0700 Subject: [PATCH 27/37] Revert "[QoL] Summary option when new Pokemon caught and party is full (#2242)" (#2816) This reverts commit 759e4d0288700445d532d519d3d9f291d867fecb. --- src/phases.ts | 17 ++++--------- src/ui/confirm-ui-handler.ts | 41 ++------------------------------ src/ui/pokemon-info-container.ts | 5 ++-- src/ui/summary-ui-handler.ts | 11 ++------- 4 files changed, 10 insertions(+), 64 deletions(-) diff --git a/src/phases.ts b/src/phases.ts index 40a2683b09d..df7314e6285 100644 --- a/src/phases.ts +++ b/src/phases.ts @@ -4890,10 +4890,7 @@ export class AttemptCapturePhase extends PokemonPhase { }); } }, - onComplete: () => { - this.scene.gameData.setPokemonCaught(pokemon); - this.catch(); - } + onComplete: () => this.catch() }); }; @@ -4934,6 +4931,7 @@ export class AttemptCapturePhase extends PokemonPhase { catch() { const pokemon = this.getPokemon() as EnemyPokemon; + this.scene.unshiftPhase(new VictoryPhase(this.scene, this.battlerIndex)); const speciesForm = !pokemon.fusionSpecies ? pokemon.getSpeciesForm() : pokemon.getFusionSpeciesForm(); @@ -4959,7 +4957,6 @@ export class AttemptCapturePhase extends PokemonPhase { this.scene.ui.showText(i18next.t("battle:pokemonCaught", { pokemonName: pokemon.name }), null, () => { const end = () => { - this.scene.unshiftPhase(new VictoryPhase(this.scene, this.battlerIndex)); this.scene.pokemonInfoContainer.hide(); this.removePb(); this.end(); @@ -4988,18 +4985,12 @@ export class AttemptCapturePhase extends PokemonPhase { } }); }; - Promise.all([pokemon.hideInfo()]).then(() => { + Promise.all([pokemon.hideInfo(), this.scene.gameData.setPokemonCaught(pokemon)]).then(() => { if (this.scene.getParty().length === 6) { const promptRelease = () => { this.scene.ui.showText(i18next.t("battle:partyFull", { pokemonName: pokemon.name }), null, () => { - this.scene.pokemonInfoContainer.makeRoomForConfirmUi(1, true); + this.scene.pokemonInfoContainer.makeRoomForConfirmUi(); this.scene.ui.setMode(Mode.CONFIRM, () => { - const newPokemon = this.scene.addPlayerPokemon(pokemon.species, pokemon.level, pokemon.abilityIndex, pokemon.formIndex, pokemon.gender, pokemon.shiny, pokemon.variant, pokemon.ivs, pokemon.nature, pokemon); - this.scene.ui.setMode(Mode.SUMMARY, newPokemon).then(() => { - this.catch(); - return; - }); - }, () => { this.scene.ui.setMode(Mode.PARTY, PartyUiMode.RELEASE, this.fieldIndex, (slotIndex: integer, _option: PartyOption) => { this.scene.ui.setMode(Mode.MESSAGE).then(() => { if (slotIndex < 6) { diff --git a/src/ui/confirm-ui-handler.ts b/src/ui/confirm-ui-handler.ts index 49c4782a8a7..953ed4972ac 100644 --- a/src/ui/confirm-ui-handler.ts +++ b/src/ui/confirm-ui-handler.ts @@ -20,45 +20,7 @@ export default class ConfirmUiHandler extends AbstractOptionSelectUiHandler { } show(args: any[]): boolean { - if (args.length === 3 && args[0].toString().includes("newPokemon")) { - const config: OptionSelectConfig = { - options: [ - { - label: i18next.t("partyUiHandler:SUMMARY"), - handler: () => { - args[0](); - return false; - }, - }, { - label: i18next.t("menu:yes"), - handler: () => { - args[1](); - return true; - } - }, { - label: i18next.t("menu:no"), - handler: () => { - args[2](); - return true; - } - } - ], - delay: args.length >= 7 && args[6] !== null ? args[6] as integer : 0 - }; - - super.show([ config ]); - - this.switchCheck = args.length >= 4 && args[3] !== null && args[3] as boolean; - - const xOffset = (args.length >= 5 && args[4] !== null ? args[4] as number : 0); - const yOffset = (args.length >= 6 && args[5] !== null ? args[5] as number : 0); - - this.optionSelectContainer.setPosition((this.scene.game.canvas.width / 6) - 1 + xOffset, -48 + yOffset); - - this.setCursor(this.switchCheck ? this.switchCheckCursor : 0); - - return true; - } else if (args.length >= 2 && args[0] instanceof Function && args[1] instanceof Function) { + if (args.length >= 2 && args[0] instanceof Function && args[1] instanceof Function) { const config: OptionSelectConfig = { options: [ { @@ -92,6 +54,7 @@ export default class ConfirmUiHandler extends AbstractOptionSelectUiHandler { return true; } + return false; } diff --git a/src/ui/pokemon-info-container.ts b/src/ui/pokemon-info-container.ts index 1e958ae53b7..9f4df2b20b4 100644 --- a/src/ui/pokemon-info-container.ts +++ b/src/ui/pokemon-info-container.ts @@ -364,14 +364,13 @@ export default class PokemonInfoContainer extends Phaser.GameObjects.Container { }); } - makeRoomForConfirmUi(speedMultiplier: number = 1, fromCatch: boolean = false): Promise { - const xPosition = fromCatch ? this.initialX - this.infoWindowWidth - 65 : this.initialX - this.infoWindowWidth - ConfirmUiHandler.windowWidth; + makeRoomForConfirmUi(speedMultiplier: number = 1): Promise { return new Promise(resolve => { this.scene.tweens.add({ targets: this, duration: Utils.fixedInt(Math.floor(150 / speedMultiplier)), ease: "Cubic.easeInOut", - x: xPosition, + x: this.initialX - this.infoWindowWidth - ConfirmUiHandler.windowWidth, onComplete: () => { resolve(); } diff --git a/src/ui/summary-ui-handler.ts b/src/ui/summary-ui-handler.ts index 33a74c54938..ae94951bc4c 100644 --- a/src/ui/summary-ui-handler.ts +++ b/src/ui/summary-ui-handler.ts @@ -397,7 +397,7 @@ export default class SummaryUiHandler extends UiHandler { } const ui = this.getUi(); - const fromPartyMode = ui.handlers[Mode.PARTY].active; + let success = false; let error = false; @@ -485,12 +485,7 @@ export default class SummaryUiHandler extends UiHandler { if (this.summaryUiMode === SummaryUiMode.LEARN_MOVE) { this.hideMoveSelect(); } else { - - if (!fromPartyMode) { - ui.setMode(Mode.MESSAGE); - } else { - ui.setMode(Mode.PARTY); - } + ui.setMode(Mode.PARTY); } success = true; } else { @@ -500,8 +495,6 @@ export default class SummaryUiHandler extends UiHandler { case Button.DOWN: if (this.summaryUiMode === SummaryUiMode.LEARN_MOVE) { break; - } else if (!fromPartyMode) { - break; } const isDown = button === Button.DOWN; const party = this.scene.getParty(); From 0f510996f00301555efa6169f5001c89241a445d Mon Sep 17 00:00:00 2001 From: Tempoanon <163687446+Tempo-anon@users.noreply.github.com> Date: Fri, 5 Jul 2024 14:59:53 -0400 Subject: [PATCH 28/37] [Bug] Fix strong winds calculation (#2423) * Fix strong winds calculation * add unit test * Add strong winds effect message * Update src/locales/de/weather.ts Co-authored-by: Jannik Tappert <38758606+CodeTappert@users.noreply.github.com> * Update src/locales/es/weather.ts Co-authored-by: Jannik Tappert <38758606+CodeTappert@users.noreply.github.com> * Update src/locales/fr/weather.ts Co-authored-by: Jannik Tappert <38758606+CodeTappert@users.noreply.github.com> * Update src/locales/it/weather.ts Co-authored-by: Jannik Tappert <38758606+CodeTappert@users.noreply.github.com> * Update src/locales/ko/weather.ts Co-authored-by: Jannik Tappert <38758606+CodeTappert@users.noreply.github.com> --------- Co-authored-by: torranx Co-authored-by: Jannik Tappert <38758606+CodeTappert@users.noreply.github.com> --- src/field/pokemon.ts | 17 ++++- src/locales/de/weather.ts | 1 + src/locales/en/weather.ts | 1 + src/locales/es/weather.ts | 1 + src/locales/fr/weather.ts | 1 + src/locales/it/weather.ts | 1 + src/locales/ko/weather.ts | 1 + src/locales/pt_BR/weather.ts | 1 + src/locales/zh_CN/weather.ts | 1 + src/locales/zh_TW/weather.ts | 1 + src/test/arena/weather_strong_winds.test.ts | 82 +++++++++++++++++++++ 11 files changed, 105 insertions(+), 3 deletions(-) create mode 100644 src/test/arena/weather_strong_winds.test.ts diff --git a/src/field/pokemon.ts b/src/field/pokemon.ts index b76717d7d44..0fb74d51304 100644 --- a/src/field/pokemon.ts +++ b/src/field/pokemon.ts @@ -1162,7 +1162,15 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { return (!cancelled.value ? Number(typeMultiplier.value) : 0) as TypeDamageMultiplier; } - getAttackTypeEffectiveness(moveType: Type, source?: Pokemon, ignoreStrongWinds: boolean = false): TypeDamageMultiplier { + /** + * Calculates the type effectiveness multiplier for an attack type + * @param moveType Type of the move + * @param source the Pokemon using the move + * @param ignoreStrongWinds whether or not this ignores strong winds (anticipation, forewarn, stealth rocks) + * @param simulated tag to only apply the strong winds effect message when the move is used + * @returns a multiplier for the type effectiveness + */ + getAttackTypeEffectiveness(moveType: Type, source?: Pokemon, ignoreStrongWinds: boolean = false, simulated: boolean = true): TypeDamageMultiplier { if (moveType === Type.STELLAR) { return this.isTerastallized() ? 2 : 1; } @@ -1183,8 +1191,11 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { }).reduce((acc, cur) => acc * cur, 1) as TypeDamageMultiplier; // Handle strong winds lowering effectiveness of types super effective against pure flying - if (!ignoreStrongWinds && this.scene.arena.weather?.weatherType === WeatherType.STRONG_WINDS && !this.scene.arena.weather.isEffectSuppressed(this.scene) && multiplier >= 2 && this.isOfType(Type.FLYING) && getTypeDamageMultiplier(moveType, Type.FLYING) === 2) { + if (!ignoreStrongWinds && this.scene.arena.weather?.weatherType === WeatherType.STRONG_WINDS && !this.scene.arena.weather.isEffectSuppressed(this.scene) && this.isOfType(Type.FLYING) && getTypeDamageMultiplier(moveType, Type.FLYING) === 2) { multiplier /= 2; + if (!simulated) { + this.scene.queueMessage(i18next.t("weather:strongWindsEffectMessage")); + } } if (!!this.summonData?.tags.find((tag) => tag instanceof TypeImmuneTag && tag.immuneType === moveType)) { @@ -1739,7 +1750,7 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { const cancelled = new Utils.BooleanHolder(false); const typeless = move.hasAttr(TypelessAttr); const typeMultiplier = new Utils.NumberHolder(!typeless && (moveCategory !== MoveCategory.STATUS || move.getAttrs(StatusMoveTypeImmunityAttr).find(attr => types.includes(attr.immuneType))) - ? this.getAttackTypeEffectiveness(move.type, source) + ? this.getAttackTypeEffectiveness(move.type, source, false, false) : 1); applyMoveAttrs(VariableMoveTypeMultiplierAttr, source, this, move, typeMultiplier); if (typeless) { diff --git a/src/locales/de/weather.ts b/src/locales/de/weather.ts index 1132c35c430..305fd7e7827 100644 --- a/src/locales/de/weather.ts +++ b/src/locales/de/weather.ts @@ -40,5 +40,6 @@ export const weather: SimpleTranslationEntries = { "strongWindsStartMessage": "Alle Flug-Pokémon werden von rätselhaften Luftströmungen geschützt!", "strongWindsLapseMessage": "Die rätselhafte Luftströmung hält an.", + "strongWindsEffectMessage": "Rätselhafte Luftströmungen haben den Angriff abgeschwächt!", "strongWindsClearMessage": "Die rätselhafte Luftströmung hat sich wieder geleget.", }; diff --git a/src/locales/en/weather.ts b/src/locales/en/weather.ts index f50c1ee907e..c7b2963ccd8 100644 --- a/src/locales/en/weather.ts +++ b/src/locales/en/weather.ts @@ -40,5 +40,6 @@ export const weather: SimpleTranslationEntries = { "strongWindsStartMessage": "A heavy wind began!", "strongWindsLapseMessage": "The wind blows intensely.", + "strongWindsEffectMessage": "The mysterious air current weakened the attack!", "strongWindsClearMessage": "The heavy wind stopped." }; diff --git a/src/locales/es/weather.ts b/src/locales/es/weather.ts index 5565779a7bd..37f574878dc 100644 --- a/src/locales/es/weather.ts +++ b/src/locales/es/weather.ts @@ -40,5 +40,6 @@ export const weather: SimpleTranslationEntries = { "strongWindsStartMessage": "¡Comenzó un fuerte viento!", "strongWindsLapseMessage": "El viento sopla intensamente.", + "strongWindsEffectMessage": "¡Las misteriosas turbulencias atenúan el ataque!", "strongWindsClearMessage": "El fuerte viento cesó." }; diff --git a/src/locales/fr/weather.ts b/src/locales/fr/weather.ts index fa6090a3ad5..3df8d0e20c9 100644 --- a/src/locales/fr/weather.ts +++ b/src/locales/fr/weather.ts @@ -40,5 +40,6 @@ export const weather: SimpleTranslationEntries = { "strongWindsStartMessage": "Un vent mystérieux se lève !", "strongWindsLapseMessage": "Le vent mystérieux souffle violemment !", + "strongWindsEffectMessage": "Le courant aérien mystérieux affaiblit l’attaque !", "strongWindsClearMessage": "Le vent mystérieux s’est dissipé…" }; diff --git a/src/locales/it/weather.ts b/src/locales/it/weather.ts index 2d169421a38..f5d8e3b9397 100644 --- a/src/locales/it/weather.ts +++ b/src/locales/it/weather.ts @@ -40,5 +40,6 @@ export const weather: SimpleTranslationEntries = { "strongWindsStartMessage": "È apparsa una corrente d'aria misteriosa!", "strongWindsLapseMessage": "La corrente d'aria soffia intensamente.", + "strongWindsEffectMessage": "La corrente misteriosa indebolisce l’attacco!", "strongWindsClearMessage": "La corrente d'aria è cessata." }; diff --git a/src/locales/ko/weather.ts b/src/locales/ko/weather.ts index 7fbd1eaf20b..9aca57c49d2 100644 --- a/src/locales/ko/weather.ts +++ b/src/locales/ko/weather.ts @@ -41,5 +41,6 @@ export const weather: SimpleTranslationEntries = { "strongWindsStartMessage": "수수께끼의 난기류가\n비행포켓몬을 지킨다!", "strongWindsLapseMessage": "수수께끼의 난기류가 강렬하게 불고 있다", + "strongWindsEffectMessage": "수수께끼의 난기류가 공격을 약하게 만들었다!", "strongWindsClearMessage": "수수께끼의 난기류가 멈췄다!" // 임의번역 }; diff --git a/src/locales/pt_BR/weather.ts b/src/locales/pt_BR/weather.ts index 6aaab6d3cd9..0787b32e416 100644 --- a/src/locales/pt_BR/weather.ts +++ b/src/locales/pt_BR/weather.ts @@ -40,5 +40,6 @@ export const weather: SimpleTranslationEntries = { "strongWindsStartMessage": "Ventos fortes apareceram!", "strongWindsLapseMessage": "Os ventos fortes continuam.", + "strongWindsEffectMessage": "The mysterious air current weakened the attack!", "strongWindsClearMessage": "Os ventos fortes diminuíram.", }; diff --git a/src/locales/zh_CN/weather.ts b/src/locales/zh_CN/weather.ts index ad1ecc65007..d280dfccb95 100644 --- a/src/locales/zh_CN/weather.ts +++ b/src/locales/zh_CN/weather.ts @@ -40,5 +40,6 @@ export const weather: SimpleTranslationEntries = { "strongWindsStartMessage": "吹起了神秘的乱流!", "strongWindsLapseMessage": "神秘的乱流势头不减。", + "strongWindsEffectMessage": "The mysterious air current weakened the attack!", "strongWindsClearMessage": "神秘的乱流停止了。" }; diff --git a/src/locales/zh_TW/weather.ts b/src/locales/zh_TW/weather.ts index 7efdc8af0ad..ae0646ce33d 100644 --- a/src/locales/zh_TW/weather.ts +++ b/src/locales/zh_TW/weather.ts @@ -40,5 +40,6 @@ export const weather: SimpleTranslationEntries = { "strongWindsStartMessage": "吹起了神秘的亂流!", "strongWindsLapseMessage": "神秘的亂流勢頭不減。", + "strongWindsEffectMessage": "The mysterious air current weakened the attack!", "strongWindsClearMessage": "神秘的亂流停止了。" }; diff --git a/src/test/arena/weather_strong_winds.test.ts b/src/test/arena/weather_strong_winds.test.ts new file mode 100644 index 00000000000..d022d69a772 --- /dev/null +++ b/src/test/arena/weather_strong_winds.test.ts @@ -0,0 +1,82 @@ +import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; +import Phaser from "phaser"; +import GameManager from "#app/test/utils/gameManager"; +import * as overrides from "#app/overrides"; +import { Species } from "#enums/species"; +import { + TurnStartPhase, +} from "#app/phases"; +import { Moves } from "#enums/moves"; +import { getMovePosition } from "#app/test/utils/gameManagerUtils"; +import { Abilities } from "#enums/abilities"; +import { allMoves } from "#app/data/move.js"; + +describe("Weather - Strong Winds", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + + beforeAll(() => { + phaserGame = new Phaser.Game({ + type: Phaser.HEADLESS, + }); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); + + beforeEach(() => { + game = new GameManager(phaserGame); + vi.spyOn(overrides, "SINGLE_BATTLE_OVERRIDE", "get").mockReturnValue(true); + vi.spyOn(overrides, "STARTING_LEVEL_OVERRIDE", "get").mockReturnValue(10); + vi.spyOn(overrides, "OPP_SPECIES_OVERRIDE", "get").mockReturnValue(Species.TAILLOW); + vi.spyOn(overrides, "OPP_ABILITY_OVERRIDE", "get").mockReturnValue(Abilities.DELTA_STREAM); + vi.spyOn(overrides, "MOVESET_OVERRIDE", "get").mockReturnValue([Moves.THUNDERBOLT, Moves.ICE_BEAM, Moves.ROCK_SLIDE]); + }); + + it("electric type move is not very effective on Rayquaza", async () => { + vi.spyOn(overrides, "OPP_SPECIES_OVERRIDE", "get").mockReturnValue(Species.RAYQUAZA); + + await game.startBattle([Species.PIKACHU]); + const pikachu = game.scene.getPlayerPokemon(); + const enemy = game.scene.getEnemyPokemon(); + + game.doAttack(getMovePosition(game.scene, 0, Moves.THUNDERBOLT)); + + await game.phaseInterceptor.to(TurnStartPhase); + expect(enemy.getAttackTypeEffectiveness(allMoves[Moves.THUNDERBOLT].type, pikachu)).toBe(0.5); + }); + + it("electric type move is neutral for flying type pokemon", async () => { + await game.startBattle([Species.PIKACHU]); + const pikachu = game.scene.getPlayerPokemon(); + const enemy = game.scene.getEnemyPokemon(); + + game.doAttack(getMovePosition(game.scene, 0, Moves.THUNDERBOLT)); + + await game.phaseInterceptor.to(TurnStartPhase); + expect(enemy.getAttackTypeEffectiveness(allMoves[Moves.THUNDERBOLT].type, pikachu)).toBe(1); + }); + + it("ice type move is neutral for flying type pokemon", async () => { + await game.startBattle([Species.PIKACHU]); + const pikachu = game.scene.getPlayerPokemon(); + const enemy = game.scene.getEnemyPokemon(); + + game.doAttack(getMovePosition(game.scene, 0, Moves.ICE_BEAM)); + + await game.phaseInterceptor.to(TurnStartPhase); + expect(enemy.getAttackTypeEffectiveness(allMoves[Moves.ICE_BEAM].type, pikachu)).toBe(1); + }); + + it("rock type move is neutral for flying type pokemon", async () => { + await game.startBattle([Species.PIKACHU]); + const pikachu = game.scene.getPlayerPokemon(); + const enemy = game.scene.getEnemyPokemon(); + + game.doAttack(getMovePosition(game.scene, 0, Moves.ROCK_SLIDE)); + + await game.phaseInterceptor.to(TurnStartPhase); + expect(enemy.getAttackTypeEffectiveness(allMoves[Moves.ROCK_SLIDE].type, pikachu)).toBe(1); + }); +}); From 7847aa1644a732b7002e10660cd342675136e312 Mon Sep 17 00:00:00 2001 From: Dakurei Date: Fri, 5 Jul 2024 21:50:19 +0200 Subject: [PATCH 29/37] [Enhancement] Fixes sizing and legacy theme problem for bgm-bar (#2603) * Adds TextStyle for bgm-bar ui * Makes the ui bgm-bar truly dynamic + cleans up unused code + Removes all hard-coded characters from the string to allow for different typographical rules in different languages * Applies the necessary modifications to locales following the deletion of the hard-coded character to form strings * Use same style as above + reduce shadow offset * Creates and loads a resource for the bgm-bar ui + Can be redesigned by someone with more talent if needed, since it won't affect the ability bar * Using the new resource in bgm-bar ui * Use of more space by default following deletion of the 'noteText' text zone --- public/images/ui/bgm_bar.png | Bin 0 -> 233 bytes public/images/ui/legacy/bgm_bar.png | Bin 0 -> 1077 bytes src/loading-scene.ts | 1 + src/locales/de/bgm-name.ts | 2 +- src/locales/en/bgm-name.ts | 2 +- src/locales/es/bgm-name.ts | 2 +- src/locales/fr/bgm-name.ts | 2 +- src/locales/it/bgm-name.ts | 2 +- src/locales/ko/bgm-name.ts | 2 +- src/locales/pt_BR/bgm-name.ts | 2 +- src/locales/zh_CN/bgm-name.ts | 2 +- src/locales/zh_TW/bgm-name.ts | 2 +- src/ui/bgm-bar.ts | 25 +++++-------------------- src/ui/text.ts | 10 +++++++++- 14 files changed, 24 insertions(+), 30 deletions(-) create mode 100644 public/images/ui/bgm_bar.png create mode 100644 public/images/ui/legacy/bgm_bar.png diff --git a/public/images/ui/bgm_bar.png b/public/images/ui/bgm_bar.png new file mode 100644 index 0000000000000000000000000000000000000000..54abe4c5a944b55109144a4e254720e7896867f1 GIT binary patch literal 233 zcmeAS@N?(olHy`uVBq!ia0vp^Wk4*?!3HFaVl111)CNx%$B>MBZ*OkoVlotHdD!`b zi=F$B>7mfFY1{0!tzA0zYU9~Pg984Ap$|T>O#1qNmBTLCG({ICpjHNk9~*@P<&RBh zej9YY`q;(gg)>Ta&QtaLe%tx9mHBsTw=2t2=cYzaDzTAO@x1-kdxLDX?S0dL-oq}* z{}*m$nY{&yMGmS}d~1|Bx{%y0j>l{?e(LSh_3&N|9s5@xgPGAIC_~NAa W*?f1|PU{1LAg-sYpUXO@geCyA30!&r literal 0 HcmV?d00001 diff --git a/public/images/ui/legacy/bgm_bar.png b/public/images/ui/legacy/bgm_bar.png new file mode 100644 index 0000000000000000000000000000000000000000..fedeb323fc2d758a76827b9be2daf9dfd439f2d7 GIT binary patch literal 1077 zcmaJ=O=#0l91m`YiUUP=P(-s-P;t#y*KQ4~vrQUTUB>JR7Ev@!-qx@sFD7qmRzXCE z=%(PolMDsHgBO|eprW8CA|ig^K}AtPnL8*B=0QXczI1K%U=1&MANl=$|Ic@#r+Zt& zlGRHHf@nx}N@+X~<9FSnh4{*;hvM8%`2^utM)yL4DX=64)w0C&6sto`{=0Lw;#i-evw<*%lW7Mv&!YZ~1@3f(EMNkplAbwexq=s?O1c7G`^OALmLO;#M$J2wReDGfI)Dt* zp`gZc92tqwTuV3-;hIUF<#>k0BNF6Vgm6UQTgmc6VQY@wC!{60YzyyVR30H)V3$Zbov=C8jboIJRih}pgUqA)eBl~prRlFS91&-8PFnqMKuS9P>jN!&WB*yRawg| zrwJ#F@l>1PXx0y@0#ua$Lrt@ac2OGq@%Nv?Zf3*=Od7aw$kA}&`U1WwTM!+fBIslw z9IRxqCl3*H^Ux;6-UzvImtpC!;BG466-7u{E>bNGq@);y6==iIg|>LSO^<D8wf@ zE-5EOIh1JO<&Z4$yv%YHt^~Cq6IiIi)&FplHMxE(m^QX70mm2yy6ixcEQKr>wS7s{ z)GKrK+P;W2xeRuO@eBJ`p({tYd;Dd!ZSkhs_`t&5?%=lWyl`kYz7m&GQat0m{_^HZ z!(DdS)}3p>@vaY4-N7>}SKSF+pSl&NPH%nIw0>;j-R1?`NA@kAIg;6aWBF6P{w~#w z$NL@McRcyQj%D|5*eMF1X08qGJry`?zFB+z+t0@@&OY3eoqao}ZJJ~dG=GXmu{_jWo bCKfCu4z@NO&evT``WHEs?3OMk_8<8TFd=4z literal 0 HcmV?d00001 diff --git a/src/loading-scene.ts b/src/loading-scene.ts index 0a6648a9c57..15cd295d23c 100644 --- a/src/loading-scene.ts +++ b/src/loading-scene.ts @@ -78,6 +78,7 @@ export class LoadingScene extends SceneBase { this.loadImage("overlay_exp", "ui"); this.loadImage("icon_owned", "ui"); this.loadImage("ability_bar_left", "ui"); + this.loadImage("bgm_bar", "ui"); this.loadImage("party_exp_bar", "ui"); this.loadImage("achv_bar", "ui"); this.loadImage("achv_bar_2", "ui"); diff --git a/src/locales/de/bgm-name.ts b/src/locales/de/bgm-name.ts index 71e775c8846..1a6712b8608 100644 --- a/src/locales/de/bgm-name.ts +++ b/src/locales/de/bgm-name.ts @@ -1,7 +1,7 @@ import { SimpleTranslationEntries } from "#app/interfaces/locales"; export const bgmName: SimpleTranslationEntries = { - "music": "Musik", + "music": "Musik: ", "missing_entries" : "{{name}}", "battle_kanto_champion": "S2W2 Vs. Kanto Champion", "battle_johto_champion": "S2W2 Vs. Johto Champion", diff --git a/src/locales/en/bgm-name.ts b/src/locales/en/bgm-name.ts index ef15c6c6dcb..87d90dabc9d 100644 --- a/src/locales/en/bgm-name.ts +++ b/src/locales/en/bgm-name.ts @@ -1,7 +1,7 @@ import { SimpleTranslationEntries } from "#app/interfaces/locales"; export const bgmName: SimpleTranslationEntries = { - "music": "Music", + "music": "Music: ", "missing_entries" : "{{name}}", "battle_kanto_champion": "B2W2 Kanto Champion Battle", "battle_johto_champion": "B2W2 Johto Champion Battle", diff --git a/src/locales/es/bgm-name.ts b/src/locales/es/bgm-name.ts index cda6fba84f4..a0f7544d608 100644 --- a/src/locales/es/bgm-name.ts +++ b/src/locales/es/bgm-name.ts @@ -1,7 +1,7 @@ import { SimpleTranslationEntries } from "#app/interfaces/locales"; export const bgmName: SimpleTranslationEntries = { - "music": "Música", + "music": "Música: ", "missing_entries" : "{{name}}", "battle_kanto_champion": "B2W2 - ¡Vs Campeón de Kanto!", "battle_johto_champion": "B2W2 - ¡Vs Campeón de Johto!", diff --git a/src/locales/fr/bgm-name.ts b/src/locales/fr/bgm-name.ts index 025f339ee86..15ec145a6ff 100644 --- a/src/locales/fr/bgm-name.ts +++ b/src/locales/fr/bgm-name.ts @@ -1,7 +1,7 @@ import { SimpleTranslationEntries } from "#app/interfaces/locales"; export const bgmName: SimpleTranslationEntries = { - "music": "Musique ", + "music": "Musique : ", "missing_entries" : "{{name}}", "battle_kanto_champion": "N2B2 - Vs. Maitre de Kanto", "battle_johto_champion": "N2B2 - Vs. Maitre de Johto", diff --git a/src/locales/it/bgm-name.ts b/src/locales/it/bgm-name.ts index ef15c6c6dcb..87d90dabc9d 100644 --- a/src/locales/it/bgm-name.ts +++ b/src/locales/it/bgm-name.ts @@ -1,7 +1,7 @@ import { SimpleTranslationEntries } from "#app/interfaces/locales"; export const bgmName: SimpleTranslationEntries = { - "music": "Music", + "music": "Music: ", "missing_entries" : "{{name}}", "battle_kanto_champion": "B2W2 Kanto Champion Battle", "battle_johto_champion": "B2W2 Johto Champion Battle", diff --git a/src/locales/ko/bgm-name.ts b/src/locales/ko/bgm-name.ts index 032db1717e1..235d6a3320e 100644 --- a/src/locales/ko/bgm-name.ts +++ b/src/locales/ko/bgm-name.ts @@ -1,7 +1,7 @@ import { SimpleTranslationEntries } from "#app/interfaces/locales"; export const bgmName: SimpleTranslationEntries = { - "music": "Music", + "music": "Music: ", "missing_entries" : "{{name}}", "battle_kanto_champion": "BW2 관동 챔피언 배틀", "battle_johto_champion": "BW2 성도 챔피언 배틀", diff --git a/src/locales/pt_BR/bgm-name.ts b/src/locales/pt_BR/bgm-name.ts index ef15c6c6dcb..87d90dabc9d 100644 --- a/src/locales/pt_BR/bgm-name.ts +++ b/src/locales/pt_BR/bgm-name.ts @@ -1,7 +1,7 @@ import { SimpleTranslationEntries } from "#app/interfaces/locales"; export const bgmName: SimpleTranslationEntries = { - "music": "Music", + "music": "Music: ", "missing_entries" : "{{name}}", "battle_kanto_champion": "B2W2 Kanto Champion Battle", "battle_johto_champion": "B2W2 Johto Champion Battle", diff --git a/src/locales/zh_CN/bgm-name.ts b/src/locales/zh_CN/bgm-name.ts index 70e969d7b5e..b582bc6a2d0 100644 --- a/src/locales/zh_CN/bgm-name.ts +++ b/src/locales/zh_CN/bgm-name.ts @@ -1,7 +1,7 @@ import { SimpleTranslationEntries } from "#app/interfaces/locales"; export const bgmName: SimpleTranslationEntries = { - "music": "BGM", + "music": "BGM: ", "missing_entries" : "{{name}}", "battle_kanto_champion": "黑2白2「决战!关都冠军」", "battle_johto_champion": "黑2白2「决战!城都冠军」", diff --git a/src/locales/zh_TW/bgm-name.ts b/src/locales/zh_TW/bgm-name.ts index ef15c6c6dcb..87d90dabc9d 100644 --- a/src/locales/zh_TW/bgm-name.ts +++ b/src/locales/zh_TW/bgm-name.ts @@ -1,7 +1,7 @@ import { SimpleTranslationEntries } from "#app/interfaces/locales"; export const bgmName: SimpleTranslationEntries = { - "music": "Music", + "music": "Music: ", "missing_entries" : "{{name}}", "battle_kanto_champion": "B2W2 Kanto Champion Battle", "battle_johto_champion": "B2W2 Johto Champion Battle", diff --git a/src/ui/bgm-bar.ts b/src/ui/bgm-bar.ts index 5bca9632012..f4366ef9c65 100644 --- a/src/ui/bgm-bar.ts +++ b/src/ui/bgm-bar.ts @@ -3,24 +3,16 @@ import {addTextObject, TextStyle} from "./text"; import i18next from "i18next"; import * as Utils from "#app/utils"; - const hiddenX = -150; const shownX = 0; const baseY = 0; - export default class BgmBar extends Phaser.GameObjects.Container { private defaultWidth: number; private defaultHeight: number; private bg: Phaser.GameObjects.NineSlice; private musicText: Phaser.GameObjects.Text; - private noteText: Phaser.GameObjects.Text; - - private tween: Phaser.Tweens.Tween; - private autoHideTimer: NodeJS.Timeout; - private queue: (string)[] = []; - public shown: boolean; @@ -29,19 +21,15 @@ export default class BgmBar extends Phaser.GameObjects.Container { } setup(): void { - this.defaultWidth = 200; + this.defaultWidth = 230; this.defaultHeight = 100; - this.bg = this.scene.add.nineslice(-5, -5, "ability_bar_left", null, this.defaultWidth, this.defaultHeight, 0, 0, 10, 10); + this.bg = this.scene.add.nineslice(-5, -5, "bgm_bar", null, this.defaultWidth, this.defaultHeight, 0, 0, 10, 10); this.bg.setOrigin(0, 0); this.add(this.bg); - this.noteText = addTextObject(this.scene, 5, 5, "", TextStyle.MESSAGE, {fontSize: "72px"}); - this.noteText.setOrigin(0, 0); - this.add(this.noteText); - - this.musicText = addTextObject(this.scene, 30, 5, "", TextStyle.MESSAGE, {fontSize: "72px"}); + this.musicText = addTextObject(this.scene, 5, 5, "", TextStyle.BGM_BAR); this.musicText.setOrigin(0, 0); this.musicText.setWordWrapWidth(650, true); @@ -56,16 +44,15 @@ export default class BgmBar extends Phaser.GameObjects.Container { * @param {string} bgmName The name of the BGM to set. */ setBgmToBgmBar(bgmName: string): void { - this.noteText.setText(`${i18next.t("bgmName:music")}:`); - this.musicText.setText(`${this.getRealBgmName(bgmName)}`); + this.musicText.setText(`${i18next.t("bgmName:music")}${this.getRealBgmName(bgmName)}`); if (!(this.scene as BattleScene).showBgmBar) { return; } this.musicText.width = this.bg.width - 20; this.musicText.setWordWrapWidth(this.defaultWidth * 4); - this.bg.width = Math.min(this.defaultWidth, this.noteText.displayWidth + this.musicText.displayWidth + 30); + this.bg.width = Math.min(this.defaultWidth, this.musicText.displayWidth + 23); this.bg.height = Math.min(this.defaultHeight, this.musicText.displayHeight + 20); (this.scene as BattleScene).fieldUI.bringToTop(this); @@ -97,5 +84,3 @@ export default class BgmBar extends Phaser.GameObjects.Container { return i18next.t([`bgmName:${bgmName}`, "bgmName:missing_entries"], {name: Utils.formatText(bgmName)}); } } - - diff --git a/src/ui/text.ts b/src/ui/text.ts index 91ada7f12ad..2a12e883deb 100644 --- a/src/ui/text.ts +++ b/src/ui/text.ts @@ -34,7 +34,8 @@ export enum TextStyle { MOVE_PP_HALF_FULL, MOVE_PP_NEAR_EMPTY, MOVE_PP_EMPTY, - SMALLER_WINDOW_ALT + SMALLER_WINDOW_ALT, + BGM_BAR } export function addTextObject(scene: Phaser.Scene, x: number, y: number, content: string, style: TextStyle, extraStyleOptions?: Phaser.Types.GameObjects.Text.TextStyle): Phaser.GameObjects.Text { @@ -146,6 +147,11 @@ export function getTextStyleOptions(style: TextStyle, uiTheme: UiTheme, extraSty shadowXpos = 3; shadowYpos = 3; break; + case TextStyle.BGM_BAR: + styleOptions.fontSize = defaultFontSize - 24; + shadowXpos = 3; + shadowYpos = 3; + break; } const shadowColor = getTextColor(style, true, uiTheme); @@ -235,6 +241,8 @@ export function getTextColor(textStyle: TextStyle, shadow?: boolean, uiTheme: Ui return !shadow ? "#f88880" : "#f83018"; case TextStyle.SMALLER_WINDOW_ALT: return !shadow ? "#484848" : "#d0d0c8"; + case TextStyle.BGM_BAR: + return !shadow ? "#f8f8f8" : "#6b5a73"; } } From e8036b237c724086dd0d2b046689458b72e841b8 Mon Sep 17 00:00:00 2001 From: Jannik Tappert <38758606+CodeTappert@users.noreply.github.com> Date: Sat, 6 Jul 2024 00:29:13 +0200 Subject: [PATCH 30/37] [Localization] Attack missed text is now localizable and uses the Gen 9 format instead of Gen 4 like before (#2809) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * localize attack missed message (pokemon's attack missed!) * Update src/locales/de/battle.ts Co-authored-by: Jannik Tappert <38758606+CodeTappert@users.noreply.github.com> * Update src/locales/ko/battle.ts * Update src/locales/pt_BR/battle.ts Co-authored-by: José Ricardo Fleury Oliveira * Update src/locales/fr/battle.ts Co-authored-by: Lugiad' * Localized the attack Missed message so that it now uses the Gen 9 message and no longer the Gen 4 one * Update src/locales/pt_BR/battle.ts Co-authored-by: José Ricardo Fleury Oliveira * Update src/locales/ko/battle.ts Co-authored-by: Enoch * Update src/locales/fr/battle.ts Co-authored-by: Lugiad' * Update src/locales/zh_CN/battle.ts Co-authored-by: Yonmaru40 <47717431+40chyan@users.noreply.github.com> * Update src/locales/zh_TW/battle.ts Co-authored-by: Yonmaru40 <47717431+40chyan@users.noreply.github.com> * Update src/locales/es/battle.ts Co-authored-by: Lugiad' * Update src/locales/it/battle.ts Co-authored-by: Lugiad' * Update src/phases.ts --------- Co-authored-by: EnochG1 Co-authored-by: José Ricardo Fleury Oliveira Co-authored-by: Lugiad' Co-authored-by: Yonmaru40 <47717431+40chyan@users.noreply.github.com> --- src/locales/de/battle.ts | 1 + src/locales/en/battle.ts | 1 + src/locales/es/battle.ts | 1 + src/locales/fr/battle.ts | 1 + src/locales/it/battle.ts | 1 + src/locales/ko/battle.ts | 1 + src/locales/pt_BR/battle.ts | 1 + src/locales/zh_CN/battle.ts | 1 + src/locales/zh_TW/battle.ts | 1 + src/phases.ts | 4 ++-- 10 files changed, 11 insertions(+), 2 deletions(-) diff --git a/src/locales/de/battle.ts b/src/locales/de/battle.ts index 67c2cd9a6b0..099020d46d5 100644 --- a/src/locales/de/battle.ts +++ b/src/locales/de/battle.ts @@ -25,6 +25,7 @@ export const battle: SimpleTranslationEntries = { "hitResultNoEffect": "Es hat keine Wirkung auf {{pokemonName}}…", "hitResultOneHitKO": "Ein K.O.-Treffer!", "attackFailed": "Es ist fehlgeschlagen!", + "attackMissed": "Die Attacke hat {{pokemonNameWithAffix}} verfehlt!", "attackHitsCount": "{{count}}-mal getroffen!", "rewardGain": "Du erhältst\n{{modifierName}}!", "expGain": "{{pokemonName}} erhält\n{{exp}} Erfahrungspunkte!", diff --git a/src/locales/en/battle.ts b/src/locales/en/battle.ts index d41ffc373dc..a42743ef254 100644 --- a/src/locales/en/battle.ts +++ b/src/locales/en/battle.ts @@ -25,6 +25,7 @@ export const battle: SimpleTranslationEntries = { "hitResultNoEffect": "It doesn't affect {{pokemonName}}!", "hitResultOneHitKO": "It's a one-hit KO!", "attackFailed": "But it failed!", + "attackMissed": "{{pokemonNameWithAffix}} avoided the attack!", "attackHitsCount": "Hit {{count}} time(s)!", "rewardGain": "You received\n{{modifierName}}!", "expGain": "{{pokemonName}} gained\n{{exp}} EXP. Points!", diff --git a/src/locales/es/battle.ts b/src/locales/es/battle.ts index 7f5832d069d..ddba5fab9a8 100644 --- a/src/locales/es/battle.ts +++ b/src/locales/es/battle.ts @@ -25,6 +25,7 @@ export const battle: SimpleTranslationEntries = { "hitResultNoEffect": "No afecta a {{pokemonName}}!", "hitResultOneHitKO": "¡KO en 1 golpe!", "attackFailed": "¡Pero ha fallado!", + "attackMissed": "¡{{pokemonNameWithAffix}}\nha evitado el ataque!", "attackHitsCount": "N.º de golpes: {{count}}.", "rewardGain": "¡Has obtenido\n{{modifierName}}!", "expGain": "{{pokemonName}} ha ganado\n{{exp}} puntos de experiencia.", diff --git a/src/locales/fr/battle.ts b/src/locales/fr/battle.ts index 539b7c99094..5bcf0763ef0 100644 --- a/src/locales/fr/battle.ts +++ b/src/locales/fr/battle.ts @@ -25,6 +25,7 @@ export const battle: SimpleTranslationEntries = { "hitResultNoEffect": "Ça n’affecte pas {{pokemonName}}…", "hitResultOneHitKO": "K.O. en un coup !", "attackFailed": "Mais cela échoue !", + "attackMissed": "{{pokemonNameWithAffix}}\névite l’attaque !", "attackHitsCount": "Touché {{count}} fois !", "rewardGain": "Vous recevez\n{{modifierName}} !", "expGain": "{{pokemonName}} gagne\n{{exp}} Points d’Exp !", diff --git a/src/locales/it/battle.ts b/src/locales/it/battle.ts index d9af58893e5..4be40e97d95 100644 --- a/src/locales/it/battle.ts +++ b/src/locales/it/battle.ts @@ -25,6 +25,7 @@ export const battle: SimpleTranslationEntries = { "hitResultNoEffect": "Non ha effetto su {{pokemonName}}!", "hitResultOneHitKO": "KO con un colpo!", "attackFailed": "Ma ha fallito!", + "attackMissed": "{{pokemonNameWithAffix}}\nevita l’attacco!", "attackHitsCount": "Colpito {{count}} volta/e!", "rewardGain": "You received\n{{modifierName}}!", "expGain": "{{pokemonName}} ha guadagnato\n{{exp}} Punti Esperienza!", diff --git a/src/locales/ko/battle.ts b/src/locales/ko/battle.ts index c4a0f0bbee4..25ff106946b 100644 --- a/src/locales/ko/battle.ts +++ b/src/locales/ko/battle.ts @@ -25,6 +25,7 @@ export const battle: SimpleTranslationEntries = { "hitResultNoEffect": "{{pokemonName}}에게는\n효과가 없는 것 같다…", "hitResultOneHitKO": "일격필살!", "attackFailed": "그러나 실패하고 말았다!!", + "attackMissed": "{{pokemonNameWithAffix}}에게는\n맞지 않았다!", "attackHitsCount": "{{count}}번 맞았다!", "rewardGain": "{{modifierName}}[[를]] 받았다!", "expGain": "{{pokemonName}}[[는]]\n{{exp}} 경험치를 얻었다!", diff --git a/src/locales/pt_BR/battle.ts b/src/locales/pt_BR/battle.ts index 15f1d83c3c9..b63a03b25cf 100644 --- a/src/locales/pt_BR/battle.ts +++ b/src/locales/pt_BR/battle.ts @@ -25,6 +25,7 @@ export const battle: SimpleTranslationEntries = { "hitResultNoEffect": "Isso não afeta {{pokemonName}}!", "hitResultOneHitKO": "Foi um nocaute de um golpe!", "attackFailed": "Mas falhou!", + "attackMissed": "{{pokemonNameWithAffix}} desviou do ataque!", "attackHitsCount": "Acertou {{count}} vezes.", "rewardGain": "Você recebeu\n{{modifierName}}!", "expGain": "{{pokemonName}} ganhou\n{{exp}} pontos de experiência.", diff --git a/src/locales/zh_CN/battle.ts b/src/locales/zh_CN/battle.ts index 3fde016d5cc..d8388064bd7 100644 --- a/src/locales/zh_CN/battle.ts +++ b/src/locales/zh_CN/battle.ts @@ -25,6 +25,7 @@ export const battle: SimpleTranslationEntries = { "hitResultNoEffect": "对{{pokemonName}}没有效果!!", "hitResultOneHitKO": "一击必杀!", "attackFailed": "但是失败了!", + "attackMissed": "没有命中{{pokemonNameWithAffix}}!", "attackHitsCount": "击中{{count}}次!", "rewardGain": "你获得了\n{{modifierName}}!", "expGain": "{{pokemonName}}获得了 {{exp}} 点经验值!", diff --git a/src/locales/zh_TW/battle.ts b/src/locales/zh_TW/battle.ts index 077933c46d6..bfd3885ca31 100644 --- a/src/locales/zh_TW/battle.ts +++ b/src/locales/zh_TW/battle.ts @@ -22,6 +22,7 @@ export const battle: SimpleTranslationEntries = { "hitResultNoEffect": "對 {{pokemonName}} 沒有效果!", "hitResultOneHitKO": "一擊切殺!", "attackFailed": "但是失敗了!", + "attackMissed": "沒有命中{{pokemonNameWithAffix}}!", "attackHitsCount": "擊中 {{count}} 次!", "rewardGain": "You received\n{{modifierName}}!", "expGain": "{{pokemonName}} 獲得了 {{exp}} 經驗值!", diff --git a/src/phases.ts b/src/phases.ts index df7314e6285..bc077361f1f 100644 --- a/src/phases.ts +++ b/src/phases.ts @@ -2894,7 +2894,7 @@ export class MoveEffectPhase extends PokemonPhase { if (!activeTargets.length || (!move.hasAttr(VariableTargetAttr) && !move.isMultiTarget() && !targetHitChecks[this.targets[0]])) { this.stopMultiHit(); if (activeTargets.length) { - this.scene.queueMessage(getPokemonMessage(user, "'s\nattack missed!")); + this.scene.queueMessage(i18next.t("battle:attackMissed", { pokemonNameWithAffix: getPokemonNameWithAffix(this.getTarget()) })); moveHistoryEntry.result = MoveResult.MISS; applyMoveAttrs(MissEffectAttr, user, null, move); } else { @@ -2912,7 +2912,7 @@ export class MoveEffectPhase extends PokemonPhase { for (const target of targets) { if (!targetHitChecks[target.getBattlerIndex()]) { this.stopMultiHit(target); - this.scene.queueMessage(getPokemonMessage(user, "'s\nattack missed!")); + this.scene.queueMessage(i18next.t("battle:attackMissed", { pokemonNameWithAffix: getPokemonNameWithAffix(target) })); if (moveHistoryEntry.result === MoveResult.PENDING) { moveHistoryEntry.result = MoveResult.MISS; } From 9d28fc454db4f22f1ffaeae2159f6550b55ea39e Mon Sep 17 00:00:00 2001 From: innerthunder <168692175+innerthunder@users.noreply.github.com> Date: Fri, 5 Jul 2024 15:52:58 -0700 Subject: [PATCH 31/37] [Ability] Add ability bar popup for Parental Bond (#2818) --- src/data/ability.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/src/data/ability.ts b/src/data/ability.ts index d3f871c9c19..f449b33992b 100644 --- a/src/data/ability.ts +++ b/src/data/ability.ts @@ -1296,6 +1296,7 @@ export class AddSecondStrikeAbAttr extends PreAttackAbAttr { const multiplier = args[2] as Utils.NumberHolder; if (this.canApplyPreAttack(move, numTargets)) { + this.showAbility = !!hitCount?.value; if (!!hitCount?.value) { hitCount.value *= 2; } From 2157b48d4154cff348ee0ad790f198c3e19c4cff Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niccol=C3=B2?= <123510358+NicusPulcis@users.noreply.github.com> Date: Sat, 6 Jul 2024 01:30:59 +0200 Subject: [PATCH 32/37] Update modifier-type.ts [Localization(it)] (#2297) * Update modifier-type.ts [Localization(it)] * Update src/locales/it/modifier-type.ts Co-authored-by: Enoch * Update src/locales/it/modifier-type.ts Co-authored-by: Enoch --------- Co-authored-by: Enoch --- src/locales/it/modifier-type.ts | 123 ++++++++++++++++---------------- 1 file changed, 61 insertions(+), 62 deletions(-) diff --git a/src/locales/it/modifier-type.ts b/src/locales/it/modifier-type.ts index 2b7147133e1..53cb02232d9 100644 --- a/src/locales/it/modifier-type.ts +++ b/src/locales/it/modifier-type.ts @@ -13,18 +13,18 @@ export const modifierType: ModifierTypeTranslationEntries = { "PokemonHeldItemModifierType": { extra: { "inoperable": "{{pokemonName}} non può prendere\nquesto oggetto!", - "tooMany": "{{pokemonName}} ne ha troppi\ndi questo oggetto!", + "tooMany": "{{pokemonName}} possiede già\nquesto oggetto in abbondanza.", } }, "PokemonHpRestoreModifierType": { description: "Restituisce {{restorePoints}} PS o {{restorePercent}}% PS ad un Pokémon, a seconda del valore più alto.", extra: { "fully": "Restituisce tutti i PS ad un Pokémon.", - "fullyWithStatus": "Restituisce tutti i PS ad un Pokémon e lo cura da ogni stato.", + "fullyWithStatus": "Restituisce tutti i PS ad un Pokémon e lo cura da ogni problema di stato.", } }, "PokemonReviveModifierType": { - description: "Rianima un Pokémon esausto e gli restituisce il {{restorePercent}}% PS.", + description: "Rianima un Pokémon esausto e gli restituisce il {{restorePercent}}% dei PS totali.", }, "PokemonStatusHealModifierType": { description: "Cura tutti i problemi di stato di un Pokémon.", @@ -46,7 +46,7 @@ export const modifierType: ModifierTypeTranslationEntries = { }, "PokemonNatureChangeModifierType": { name: "Menta {{natureName}}.", - description: "Cambia la natura del Pokémon in {{natureName}} e sblocca la natura per il Pokémon iniziale.", + description: "Cambia la natura del Pokémon in {{natureName}} e sblocca la natura nel menu degli starter.", }, "DoubleBattleChanceBoosterModifierType": { description: "Raddoppia la possibilità di imbattersi in doppie battaglie per {{battleCount}} battaglie.", @@ -67,7 +67,7 @@ export const modifierType: ModifierTypeTranslationEntries = { description: "Aumenta {{statName}} di base del possessore del 10%.", }, "AllPokemonFullHpRestoreModifierType": { - description: "Recupera il 100% dei PS per tutti i Pokémon.", + description: "Restituisce il 100% dei PS a tutti i Pokémon.", }, "AllPokemonFullReviveModifierType": { description: "Rianima tutti i Pokémon esausti restituendogli tutti i PS.", @@ -75,7 +75,7 @@ export const modifierType: ModifierTypeTranslationEntries = { "MoneyRewardModifierType": { description: "Garantisce una {{moneyMultiplier}} quantità di soldi (₽{{moneyAmount}}).", extra: { - "small": "poca", + "small": "contenuta", "moderate": "moderata", "large": "grande", }, @@ -90,7 +90,7 @@ export const modifierType: ModifierTypeTranslationEntries = { description: "Aumenta del 50% il guadagno di amicizia per vittoria.", }, "PokemonMoveAccuracyBoosterModifierType": { - description: "Aumenta l'accuratezza delle mosse di {{accuracyAmount}} (massimo 100).", + description: "Aumenta la precisione delle mosse di {{accuracyAmount}} (massimo 100).", }, "PokemonMultiHitModifierType": { description: "Gli attacchi colpiscono una volta in più al costo di una riduzione di potenza del 60/75/82,5% per mossa.", @@ -117,7 +117,7 @@ export const modifierType: ModifierTypeTranslationEntries = { description: "Teracristallizza in {{teraType}} il possessore per massimo 10 battaglie.", }, "ContactHeldItemTransferChanceModifierType": { - description: "Quando si attacca, c'è una probabilità del {{chancePercent}}% che l'oggetto in possesso del nemico venga rubato.", + description: "Quando il possessore attacca, c'è una probabilità del {{chancePercent}}% che l'oggetto in possesso del nemico gli venga rubato.", }, "TurnHeldItemTransferModifierType": { description: "Ogni turno, il possessore acquisisce un oggetto posseduto dal nemico.", @@ -129,72 +129,71 @@ export const modifierType: ModifierTypeTranslationEntries = { description: "Aggiunge una probabilità del {{probabilitàPercent}}% di resistere ad un colpo.", }, - "RARE_CANDY": { name: "Caramella Rara" }, - "RARER_CANDY": { name: "Caramella Molto Rara" }, + "RARE_CANDY": { name: "Caramella rara" }, + "RARER_CANDY": { name: "Caramella molto rara" }, - "MEGA_BRACELET": { name: "Megapolsiera", description: "Le Megapietre sono disponibili." }, - "DYNAMAX_BAND": { name: "Polsino Dynamax", description: "I Fungomax sono disponibili." }, - "TERA_ORB": { name: "Terasfera", description: "I Teraliti sono disponibili." }, + "MEGA_BRACELET": { name: "Megapolsiera", description: "Le megapietre diventano disponibili." }, + "DYNAMAX_BAND": { name: "Polsino Dynamax", description: "I fungomax diventano disponibili." }, + "TERA_ORB": { name: "Terasfera", description: "I teraliti diventano disponibili." }, "MAP": { name: "Mappa", description: "Permette di scegliere la propria strada a un bivio." }, "POTION": { name: "Pozione" }, "SUPER_POTION": { name: "Superpozione" }, "HYPER_POTION": { name: "Iperpozione" }, - "MAX_POTION": { name: "Pozione Max" }, - "FULL_RESTORE": { name: "Ricarica Totale" }, + "MAX_POTION": { name: "Pozione max" }, + "FULL_RESTORE": { name: "Ricarica totale" }, "REVIVE": { name: "Revitalizzante" }, - "MAX_REVIVE": { name: "Revitalizzante Max" }, + "MAX_REVIVE": { name: "Revitalizzante max" }, - "FULL_HEAL": { name: "Cura Totale" }, + "FULL_HEAL": { name: "Cura totale" }, - "SACRED_ASH": { name: "Cenere Magica" }, + "SACRED_ASH": { name: "Cenere magica" }, - "REVIVER_SEED": { name: "Revitalseme", description: "Il possessore recupera 1/2 di PS in caso di svenimento." }, + "REVIVER_SEED": { name: "Revitalseme", description: "Il possessore recupera 1/2 di PS in caso di KO." }, "ETHER": { name: "Etere" }, - "MAX_ETHER": { name: "Etere Max" }, + "MAX_ETHER": { name: "Etere max" }, "ELIXIR": { name: "Elisir" }, - "MAX_ELIXIR": { name: "Elisir Max" }, + "MAX_ELIXIR": { name: "Elisir max" }, "PP_UP": { name: "PP-su" }, "PP_MAX": { name: "PP-max" }, - "LURE": { name: "Profumo Invito" }, - "SUPER_LURE": { name: "Profumo Invito Super" }, - "MAX_LURE": { name: "Profumo Invito Max" }, + "LURE": { name: "Esca" }, + "SUPER_LURE": { name: "Super esca" }, + "MAX_LURE": { name: "Esca max" }, - "MEMORY_MUSHROOM": { name: "Fungo della Memoria", description: "Ricorda la mossa dimenticata di un Pokémon." }, + "MEMORY_MUSHROOM": { name: "Fungo della memoria", description: "Permette di insegnare nuovamente una mossa dimenticata ad un Pokémon." }, - "EXP_SHARE": { name: "Condividi Esperienza", description: "Tutti i Pokémon della squadra ricevono il 20% dei Punti Esperienza dalla lotta anche se non vi hanno partecipato." }, - "EXP_BALANCE": { name: "Bilancia Esperienza", description: "Bilancia i Punti Esperienza ricevuti verso i Pokémon del gruppo di livello inferiore." }, + "EXP_SHARE": { name: "Condividi esperienza", description: "Tutti i Pokémon della squadra ricevono il 20% dei Punti Esperienza dalla lotta, anche se non vi hanno partecipato." }, + "EXP_BALANCE": { name: "Bilancia esperienza", description: "Bilancia i Punti Esperienza ricevuti verso i Pokémon della squadra di livello inferiore." }, "OVAL_CHARM": { name: "Ovamuleto", description: "Quando più Pokémon partecipano a una battaglia, ognuno di essi riceve il 10% in più dell'esperienza totale." }, "EXP_CHARM": { name: "Esperienzamuleto" }, - "SUPER_EXP_CHARM": { name: "Esperienzamuleto Super" }, - "GOLDEN_EXP_CHARM": { name: "Esperienzamuleto Oro" }, + "SUPER_EXP_CHARM": { name: "Esperienzamuleto super" }, + "GOLDEN_EXP_CHARM": { name: "Esperienzamuleto dorato" }, - "LUCKY_EGG": { name: "Uovo Fortunato" }, - "GOLDEN_EGG": { name: "Uovo d'Oro" }, + "LUCKY_EGG": { name: "Fortunuovo" }, + "GOLDEN_EGG": { name: "Uovo dorato" }, "SOOTHE_BELL": { name: "Calmanella" }, - "EVIOLITE": { name: "Evolcondensa", description: "Misteriosa materia evolutiva. Aumenta la Difesa e la Difesa Speciale di un Pokémon che può ancora evolversi." }, - "SOUL_DEW": { name: "Cuorugiada", description: "Aumenta del 10% l'influenza della natura di un Pokémon sulle sue statistiche (Aggiuntivo)." }, + "SOUL_DEW": { name: "Cuorugiada", description: "Aumenta del 10% l'influenza della natura di un Pokémon sulle sue statistiche (cumulativo)." }, "NUGGET": { name: "Pepita" }, "BIG_NUGGET": { name: "Granpepita" }, - "RELIC_GOLD": { name: " Dobloantico" }, + "RELIC_GOLD": { name: "Dobloantico" }, "AMULET_COIN": { name: "Monetamuleto", description: "Aumenta le ricompense in denaro del 20%." }, - "GOLDEN_PUNCH": { name: "Pugno Dorato", description: "Garantisce il 50% dei danni inflitti come denaro." }, - "COIN_CASE": { name: " Salvadanaio", description: "Dopo ogni 10° battaglia, riceverete il 10% del vostro denaro in interessi." }, + "GOLDEN_PUNCH": { name: "Pugno dorato", description: "Fornisce il 50% dei danni inflitti sottoforma di denaro." }, + "COIN_CASE": { name: "Salvadanaio", description: "Dopo ogni 10° battaglia, fornisce il 10% del proprio denaro in interessi." }, - "LOCK_CAPSULE": { name: "Capsula Scrigno", description: "Permette di bloccare le rarità degli oggetti quando si fa un reroll degli oggetti." }, + "LOCK_CAPSULE": { name: "Capsula scrigno", description: "Permette di bloccare le rarità degli oggetti quando si fa un reroll (i costi variano in base alle rarità)." }, "GRIP_CLAW": { name: "Presartigli" }, "WIDE_LENS": { name: "Grandelente" }, @@ -202,18 +201,18 @@ export const modifierType: ModifierTypeTranslationEntries = { "MULTI_LENS": { name: "Multilente" }, "HEALING_CHARM": { name: "Curamuleto", description: "Aumenta del 10% l'efficacia delle mosse e degli oggetti che ripristinano i PS (escluse le rianimazioni)." }, - "CANDY_JAR": { name: "Barattolo di caramelle", description: "Aumenta di 1 il numero di livelli aggiunti dalle Caramelle Rare." }, + "CANDY_JAR": { name: "Barattolo di caramelle", description: "Aumenta di 1 il numero di livelli aggiunti dalle caramelle rare." }, - "BERRY_POUCH": { name: "Porta Bacche", description: "Aggiunge il 30% di possibilità che una bacca usata non venga consumata." }, + "BERRY_POUCH": { name: "Porta bacche", description: "Aggiunge il 30% di possibilità che una bacca usata non venga consumata." }, - "FOCUS_BAND": { name: "Bandana", description: "Chi ce l'ha ottiene il 10% di possibilità aggiuntivo di evitare un potenziale KO e rimanere con un solo PS." }, + "FOCUS_BAND": { name: "Bandana", description: "Il possessore ottiene il 10% di possibilità aggiuntivo di evitare un potenziale KO e rimanere con un solo PS." }, - "QUICK_CLAW": { name: "Rapidartigli", description: "Aggiunge una probabilità del 10% di muoversi per primi, indipendentemente dalla velocità (dopo la priorità)." }, + "QUICK_CLAW": { name: "Rapidartigli", description: "Aggiunge una probabilità del 10% di muoversi per primi, indipendentemente dalla velocità (priorità escluse)." }, "KINGS_ROCK": { name: "Roccia di re", description: "Aggiunge il 10% di possibilità che una mossa d'attacco faccia tentennare l'avversario." }, "LEFTOVERS": { name: "Avanzi", description: "Ripristina 1/16 dei PS massimi di un Pokémon ogni turno." }, - "SHELL_BELL": { name: "Conchinella", description: "Guarisce 1/8 del danno inflitto a un Pokémon." }, + "SHELL_BELL": { name: "Conchinella", description: "Cura il possessore di 1/8 del danno inflitto ad un Pokémon." }, "TOXIC_ORB": { name: "Tossicsfera", description: "Sfera bizzarra che iperavvelena chi l’ha con sé in una lotta." }, "FLAME_ORB": { name: "Fiammosfera", description: "Sfera bizzarra che procura una scottatura a chi l’ha con sé in una lotta." }, @@ -223,22 +222,22 @@ export const modifierType: ModifierTypeTranslationEntries = { "SHINY_CHARM": { name: "Cromamuleto", description: "Misterioso amuleto luminoso che aumenta la probabilità di incontrare Pokémon cromatici." }, "ABILITY_CHARM": { name: "Abilitamuleto", description: "Aumenta drasticamente la possibilità che un Pokémon selvatico abbia un'abilità nascosta." }, - "IV_SCANNER": { name: "Scanner IV", description: "Permette di scansionare gli IV dei Pokémon selvatici. Vengono rivelati 2 IV per pila. I migliori IV vengono mostrati per primi." }, + "IV_SCANNER": { name: "Scanner IV", description: "Permette di scansionare gli IV dei Pokémon selvatici. Vengono rivelati 2 IV per ogni scanner. I migliori IV vengono mostrati per primi." }, - "DNA_SPLICERS": { name: " Cuneo DNA" }, + "DNA_SPLICERS": { name: "Cuneo DNA" }, - "MINI_BLACK_HOLE": { name: "Piccolo Buco Nero" }, + "MINI_BLACK_HOLE": { name: "Piccolo buco nero" }, - "GOLDEN_POKEBALL": { name: "Poké Ball Oro", description: "Aggiunge 1 opzione di oggetto extra alla fine di ogni battaglia." }, + "GOLDEN_POKEBALL": { name: "Poké Ball dorata", description: "Aggiunge 1 opzione di oggetto extra alla fine di ogni battaglia." }, - "ENEMY_DAMAGE_BOOSTER": { name: "Gettone del Danno", description: "Aumenta il danno del 5%." }, - "ENEMY_DAMAGE_REDUCTION": { name: "Gettone della Protezione", description: "Riduce i danni ricevuti del 2.5%." }, - "ENEMY_HEAL": { name: "Gettone del Recupero", description: "Cura il 2% dei PS massimi ogni turno." }, - "ENEMY_ATTACK_POISON_CHANCE": { name: "Gettone del Veleno" }, - "ENEMY_ATTACK_PARALYZE_CHANCE": { name: "Gettone della Paralisi" }, - "ENEMY_ATTACK_BURN_CHANCE": { name: "Gettone della Bruciatura" }, - "ENEMY_STATUS_EFFECT_HEAL_CHANCE": { name: "Gettone Guarigione Completa", description: "Aggiunge una probabilità del 2.5% a ogni turno di curare una condizione di stato." }, - "ENEMY_ENDURE_CHANCE": { name: "Gettone di Resistenza" }, + "ENEMY_DAMAGE_BOOSTER": { name: "Gettone del danno", description: "Aumenta i danni inflitti del 5%." }, + "ENEMY_DAMAGE_REDUCTION": { name: "Gettone della protezione", description: "Riduce i danni ricevuti del 2.5%." }, + "ENEMY_HEAL": { name: "Gettone del recupero", description: "Cura il 2% dei PS massimi ogni turno." }, + "ENEMY_ATTACK_POISON_CHANCE": { name: "Gettone del veleno" }, + "ENEMY_ATTACK_PARALYZE_CHANCE": { name: "Gettone della paralisi" }, + "ENEMY_ATTACK_BURN_CHANCE": { name: "Gettone della bruciatura" }, + "ENEMY_STATUS_EFFECT_HEAL_CHANCE": { name: "Gettone guarigione completa", description: "Aggiunge una probabilità del 2.5% a ogni turno di guarire da un problema di stato." }, + "ENEMY_ENDURE_CHANCE": { name: "Gettone di resistenza" }, "ENEMY_FUSED_CHANCE": { name: "Gettone della fusione", description: "Aggiunge l'1% di possibilità che un Pokémon selvatico sia una fusione." }, }, SpeciesBoosterItem: { @@ -258,14 +257,14 @@ export const modifierType: ModifierTypeTranslationEntries = { }, TempBattleStatBoosterStatName: { - "ATK": "Attack", - "DEF": "Defense", - "SPATK": "Sp. Atk", - "SPDEF": "Sp. Def", - "SPD": "Speed", - "ACC": "Accuracy", - "CRIT": "Critical Hit Ratio", - "EVA": "Evasiveness", + "ATK": "Attacco", + "DEF": "Difesa", + "SPATK": "Att. Speciale", + "SPDEF": "Dif. Speciale", + "SPD": "Velocità", + "ACC": "Precisione", + "CRIT": "Tasso di brutti colpi", + "EVA": "Elusione", "DEFAULT": "???", }, From dbba0d410f88078ab100ba70a81dfb3901b916f8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niccol=C3=B2?= <123510358+NicusPulcis@users.noreply.github.com> Date: Sat, 6 Jul 2024 01:34:02 +0200 Subject: [PATCH 33/37] Update menu-ui-handler.ts [Localization(it)] (#2298) Co-authored-by: EnochG1 --- src/locales/it/menu-ui-handler.ts | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/locales/it/menu-ui-handler.ts b/src/locales/it/menu-ui-handler.ts index 7aae9e26f6d..5bd845448aa 100644 --- a/src/locales/it/menu-ui-handler.ts +++ b/src/locales/it/menu-ui-handler.ts @@ -2,23 +2,23 @@ import { SimpleTranslationEntries } from "#app/interfaces/locales"; export const menuUiHandler: SimpleTranslationEntries = { "GAME_SETTINGS": "Impostazioni", - "ACHIEVEMENTS": "Trofei", + "ACHIEVEMENTS": "Obiettivi", "STATS": "Statistiche", "VOUCHERS": "Biglietti", - "EGG_LIST": "Lista Uova", - "EGG_GACHA": "Gacha Uova", - "MANAGE_DATA": "Gestisci Dati", + "EGG_LIST": "Lista uova", + "EGG_GACHA": "Macchine uova", + "MANAGE_DATA": "Gestisci dati", "COMMUNITY": "Community", - "SAVE_AND_QUIT": "Salva ed Esci", + "SAVE_AND_QUIT": "Salva ed esci", "LOG_OUT": "Disconnettiti", "slot": "Slot {{slotNumber}}", - "importSession": "Importa Sessione", + "importSession": "Importa sessione", "importSlotSelect": "Seleziona uno slot in cui importare.", - "exportSession": "Esporta Sessione", + "exportSession": "Esporta sessione", "exportSlotSelect": "Seleziona uno slot da cui esportare.", - "importData": "Importa Dati", - "exportData": "Esporta Dati", + "importData": "Importa dati", + "exportData": "Esporta dati", "cancel": "Annulla", - "losingProgressionWarning": "Perderai tutti i progressi dall'inizio della battaglia. Procedere?", + "losingProgressionWarning": "Perderai tutti i progressi dall'inizio della battaglia. Confermi?", "noEggs": "You are not hatching\nany eggs at the moment!" } as const; From 9ce9cb75b91939548bde2672f28ad2b59d273e22 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niccol=C3=B2?= <123510358+NicusPulcis@users.noreply.github.com> Date: Sat, 6 Jul 2024 01:36:59 +0200 Subject: [PATCH 34/37] Update egg.ts [Localization(it)] (#2299) Co-authored-by: EnochG1 --- src/locales/it/egg.ts | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/src/locales/it/egg.ts b/src/locales/it/egg.ts index feb148ab990..c51f12065a1 100644 --- a/src/locales/it/egg.ts +++ b/src/locales/it/egg.ts @@ -6,18 +6,18 @@ export const egg: SimpleTranslationEntries = { "greatTier": "Raro", "ultraTier": "Epico", "masterTier": "Leggendario", - "hatchWavesMessageSoon": "Si sentono dei suoni provenienti dall'interno! Si schiuderà presto!", + "hatchWavesMessageSoon": "Si sentono dei rumori provenienti dall'interno. Si schiuderà presto!", "hatchWavesMessageClose": "Sembra muoversi di tanto in tanto. Potrebbe essere prossimo alla schiusa.", - "hatchWavesMessageNotClose": "Cosa uscirà da qui? Non sembra si schiuderà presto.", - "hatchWavesMessageLongTime": "Sembra che questo uovo impiegherà molto tempo per schiudersi.", - "gachaTypeLegendary": "Tasso dei Leggendari Aumentato", - "gachaTypeMove": "Tasso delle Mosse Rare delle Uova Aumentato", - "gachaTypeShiny": "Tasso degli Shiny Aumentato", - "selectMachine": "Seleziona un distributore.", - "notEnoughVouchers": "Non hai abbastanza Biglietti!", - "tooManyEggs": "Hai troppe Uova!", - "pull": "Tiro", - "pulls": "Tiri", + "hatchWavesMessageNotClose": "Cosa uscirà da qui? Pare che non si schiuderà presto.", + "hatchWavesMessageLongTime": "Sembra che questo uovo impiegherà ancora molto tempo per schiudersi.", + "gachaTypeLegendary": "Tasso dei leggendari aumentato", + "gachaTypeMove": "Tasso delle mosse rare da uova aumentato", + "gachaTypeShiny": "Tasso degli shiny aumentato", + "selectMachine": "Seleziona un macchinario.", + "notEnoughVouchers": "Non hai abbastanza biglietti!", + "tooManyEggs": "Hai troppe uova!", + "pull": "Estrazione", + "pulls": "Estrazioni", "sameSpeciesEgg": "{{species}} will hatch from this egg!", "hatchFromTheEgg": "Dall’Uovo è nato {{pokemonName}}!", "eggMoveUnlock": "Egg Move unlocked: {{moveName}}", From 6316d08d35ad758788872eb976b378701f497b8e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niccol=C3=B2?= <123510358+NicusPulcis@users.noreply.github.com> Date: Sat, 6 Jul 2024 01:38:46 +0200 Subject: [PATCH 35/37] Update battle.ts [Localization(it)] (#2300) Co-authored-by: EnochG1 --- src/locales/it/battle.ts | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/locales/it/battle.ts b/src/locales/it/battle.ts index 4be40e97d95..f44ca8e493c 100644 --- a/src/locales/it/battle.ts +++ b/src/locales/it/battle.ts @@ -5,8 +5,8 @@ export const battle: SimpleTranslationEntries = { "trainerAppeared": "{{trainerName}}\nvuole combattere!", "trainerAppearedDouble": "{{trainerName}}\nvogliono combattere!", "trainerSendOut": "{{trainerName}} manda in campo\n{{pokemonName}}!", - "singleWildAppeared": "Appare {{pokemonName}} selvatico!", - "multiWildAppeared": "Appaiono {{pokemonName1}}\ne {{pokemonName2}} salvatici!", + "singleWildAppeared": "È apparso {{pokemonName}} selvatico!", + "multiWildAppeared": "Sono apparsi {{pokemonName1}}\ne {{pokemonName2}} salvatici!", "playerComeBack": "Rientra, {{pokemonName}}!", "trainerComeBack": "{{trainerName}} ha ritirato {{pokemonName}}!", "playerGo": "Vai! {{pokemonName}}!", @@ -44,10 +44,10 @@ export const battle: SimpleTranslationEntries = { "moveNotImplemented": "{{moveName}} non è ancora implementata e non può essere selezionata.", "moveNoPP": "Non ci sono PP rimanenti\nper questa mossa!", "moveDisabled": "{{moveName}} è disabilitata!", - "noPokeballForce": "Una forza misteriosa\nimpedisce l'uso dell Poké Ball.", + "noPokeballForce": "Una forza misteriosa\nimpedisce l'uso delle Poké Ball.", "noPokeballTrainer": "Non puoi catturare\nPokémon di altri allenatori!", - "noPokeballMulti": "Puoi lanciare una Poké Ball\nquando rimane un solo Pokémon!", - "noPokeballStrong": "Il Pokémon avversario è troppo forte per essere catturato!\nDevi prima indebolirlo!", + "noPokeballMulti": "Puoi lanciare una Poké Ball\nsolo quando rimane un singolo Pokémon!", + "noPokeballStrong": "Il Pokémon avversario è troppo forte per essere catturato!\nDevi prima indebolirlo.", "noEscapeForce": "Una forza misteriosa\nimpedisce la fuga.", "noEscapeTrainer": "Non puoi sottrarti\nalla lotta con un'allenatore!", "noEscapePokemon": "{{moveName}} di {{pokemonName}}\npreviene la {{escapeVerb}}!", @@ -55,11 +55,11 @@ export const battle: SimpleTranslationEntries = { "runAwayCannotEscape": "Non puoi fuggire!", "escapeVerbSwitch": "cambiando", "escapeVerbFlee": "fuggendo", - "notDisabled": "{{pokemonName}}'s {{moveName}} non è più\ndisabilitata!", + "notDisabled": "{{moveName}} di {{pokemonName}} non è più\ndisabilitata!", "turnEndHpRestore": "{{pokemonName}}'s HP was restored.", "hpIsFull": "{{pokemonName}}'s\nHP is full!", "skipItemQuestion": "Sei sicuro di non voler prendere nessun oggetto?", - "eggHatching": "Oh!", + "eggHatching": "Oh?", "ivScannerUseQuestion": "Vuoi usare lo scanner di IV su {{pokemonName}}?", "stealEatBerry": "{{pokemonName}} stole and ate\n{{targetName}}'s {{berryName}}!", "wildPokemonWithAffix": "{{pokemonName}} selvatico", From 6f17301aeb43e891897a6ce4c69e6f66c5d1a887 Mon Sep 17 00:00:00 2001 From: AJ Fontaine <36677462+Fontbane@users.noreply.github.com> Date: Sat, 6 Jul 2024 12:14:22 -0400 Subject: [PATCH 36/37] Update TM compatibility for Knock Off (#2762) --- src/data/tms.ts | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/src/data/tms.ts b/src/data/tms.ts index 4616c177eb6..c51a4ede8b5 100644 --- a/src/data/tms.ts +++ b/src/data/tms.ts @@ -38685,6 +38685,8 @@ export const tmSpecies: TmSpecies = { Species.GOLDEEN, Species.SEAKING, Species.SCYTHER, + Species.ELECTABUZZ, + Species.MAGMAR, Species.PINSIR, Species.OMANYTE, Species.OMASTAR, @@ -38692,6 +38694,8 @@ export const tmSpecies: TmSpecies = { Species.KABUTOPS, Species.MEWTWO, Species.MEW, + Species.BAYLEEF, + Species.MEGANIUM, Species.SENTRET, Species.FURRET, Species.LEDYBA, @@ -38708,8 +38712,10 @@ export const tmSpecies: TmSpecies = { Species.SNEASEL, Species.PHANPY, Species.DONPHAN, + Species.ELEKID, Species.TYRANITAR, Species.BLAZIKEN, + Species.SWAMPERT, Species.LOMBRE, Species.LUDICOLO, Species.NUZLEAF, @@ -38740,12 +38746,7 @@ export const tmSpecies: TmSpecies = { Species.CHIMECHO, Species.ABSOL, Species.METAGROSS, - [ - Species.DEOXYS, - "", - "defense", - "speed", - ], + Species.DEOXYS, Species.CHIMCHAR, Species.MONFERNO, Species.INFERNAPE, @@ -38767,6 +38768,8 @@ export const tmSpecies: TmSpecies = { Species.WEAVILE, Species.LICKILICKY, Species.TANGROWTH, + Species.ELECTIVIRE, + Species.MAGMORTAR, Species.LEAFEON, Species.GLISCOR, Species.MAMOSWINE, @@ -38781,6 +38784,8 @@ export const tmSpecies: TmSpecies = { Species.SNIVY, Species.SERVINE, Species.SERPERIOR, + Species.PIGNITE, + Species.EMBOAR, Species.OSHAWOTT, Species.DEWOTT, Species.SAMUROTT, @@ -38837,6 +38842,8 @@ export const tmSpecies: TmSpecies = { Species.ACCELGOR, Species.MIENFOO, Species.MIENSHAO, + Species.GOLETT, + Species.GOLURK, Species.PAWNIARD, Species.BISHARP, Species.VULLABY, @@ -38873,6 +38880,7 @@ export const tmSpecies: TmSpecies = { Species.SALAZZLE, Species.STEENEE, Species.TSAREENA, + Species.COMFEY, Species.ORANGURU, Species.PASSIMIAN, Species.GOLISOPOD, @@ -38945,6 +38953,7 @@ export const tmSpecies: TmSpecies = { Species.GALAR_FARFETCHD, Species.GALAR_ZAPDOS, Species.GALAR_ZIGZAGOON, + Species.GALAR_LINOONE, Species.HISUI_SAMUROTT, Species.HISUI_ZORUA, Species.HISUI_ZOROARK, @@ -61853,6 +61862,7 @@ export const tmSpecies: TmSpecies = { Species.METANG, Species.METAGROSS, Species.JIRACHI, + Species.DEOXYS, Species.BRONZOR, Species.BRONZONG, Species.GALLADE, From 9e1980bd8ffbe6de29da03d57f6f02fe02a58718 Mon Sep 17 00:00:00 2001 From: Madmadness65 <59298170+Madmadness65@users.noreply.github.com> Date: Sat, 6 Jul 2024 11:16:08 -0500 Subject: [PATCH 37/37] Allow Roaming Form Gimmighoul to be caught (#2760) --- src/battle-scene.ts | 1 + src/data/pokemon-evolutions.ts | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/src/battle-scene.ts b/src/battle-scene.ts index ba0720baab2..f20c6503229 100644 --- a/src/battle-scene.ts +++ b/src/battle-scene.ts @@ -1227,6 +1227,7 @@ export default class BattleScene extends SceneBase { case Species.ZARUDE: case Species.SQUAWKABILLY: case Species.TATSUGIRI: + case Species.GIMMIGHOUL: case Species.PALDEA_TAUROS: return Utils.randSeedInt(species.forms.length); case Species.PIKACHU: diff --git a/src/data/pokemon-evolutions.ts b/src/data/pokemon-evolutions.ts index 1fb1f7db5fd..696cf006ad0 100644 --- a/src/data/pokemon-evolutions.ts +++ b/src/data/pokemon-evolutions.ts @@ -1618,7 +1618,8 @@ export const pokemonEvolutions: PokemonEvolutions = { new SpeciesEvolution(Species.FROSMOTH, 1, null, new SpeciesFriendshipEvolutionCondition(90, p => p.scene.arena.getTimeOfDay() === TimeOfDay.DUSK || p.scene.arena.getTimeOfDay() === TimeOfDay.NIGHT), SpeciesWildEvolutionDelay.MEDIUM) ], [Species.GIMMIGHOUL]: [ - new SpeciesEvolution(Species.GHOLDENGO, 1, null, new SpeciesFriendshipEvolutionCondition(70), SpeciesWildEvolutionDelay.VERY_LONG) + new SpeciesFormEvolution(Species.GHOLDENGO, "chest", "", 1, null, new SpeciesFriendshipEvolutionCondition(70), SpeciesWildEvolutionDelay.VERY_LONG), + new SpeciesFormEvolution(Species.GHOLDENGO, "roaming", "", 1, null, new SpeciesFriendshipEvolutionCondition(70), SpeciesWildEvolutionDelay.VERY_LONG) ] };