From 5234c8e92e1fdbfc5b2d4ea35d133ceae4f33a02 Mon Sep 17 00:00:00 2001 From: Temps Ray Date: Sat, 22 Jun 2024 10:44:26 -0400 Subject: [PATCH 01/24] Remove screen inversion if move animations are off --- src/phases.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/phases.ts b/src/phases.ts index 70a4af03305..7d856da06bd 100644 --- a/src/phases.ts +++ b/src/phases.ts @@ -3580,7 +3580,9 @@ export class DamagePhase extends PokemonPhase { super.start(); if (this.damageResult === HitResult.ONE_HIT_KO) { - this.scene.toggleInvert(true); + if (this.scene.moveAnimations) { + this.scene.toggleInvert(true); + } this.scene.time.delayedCall(Utils.fixedInt(1000), () => { this.scene.toggleInvert(false); this.applyDamage(); From 09ab89a2c3f8f5d92db3736eae2e8a81754b6209 Mon Sep 17 00:00:00 2001 From: Enoch Date: Fri, 5 Jul 2024 12:12:57 +0900 Subject: [PATCH 02/24] [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 03/24] [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 04/24] [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 05/24] [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 06/24] 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 07/24] [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 08/24] [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 09/24] [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 10/24] [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 11/24] 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 12/24] [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 13/24] [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 14/24] [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 15/24] [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 16/24] 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 17/24] 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 18/24] 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 19/24] 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 20/24] 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 21/24] 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) ] }; From 67d5d70a7b44558d5ffb55d5a6371e6fac47ec6e Mon Sep 17 00:00:00 2001 From: chaosgrimmon <31082757+chaosgrimmon@users.noreply.github.com> Date: Sat, 6 Jul 2024 19:47:47 -0400 Subject: [PATCH 22/24] [Sprite] Shiny Minior Fixes (#2876) * [Sprite] Shiny Meteor Minior not in shell Taken from non-shiny sprite and animation. * [Sprite] Back shiny Meteor Minior not in shell Taken from non-shiny sprite and animation. * [Sprite] Shiny exp Minior Cores wrong colours * [Sprite] Shiny exp Minior Core backs wrong colours --- public/images/pokemon/back/shiny/774.json | 82 +++++++++--------- public/images/pokemon/back/shiny/774.png | Bin 337 -> 470 bytes .../pokemon/exp/back/shiny/774-blue.png | Bin 5526 -> 6288 bytes .../pokemon/exp/back/shiny/774-green.png | Bin 5527 -> 6288 bytes .../pokemon/exp/back/shiny/774-indigo.png | Bin 5527 -> 6288 bytes .../pokemon/exp/back/shiny/774-orange.png | Bin 5532 -> 6288 bytes .../images/pokemon/exp/back/shiny/774-red.png | Bin 5530 -> 6288 bytes .../pokemon/exp/back/shiny/774-violet.png | Bin 5527 -> 6288 bytes .../pokemon/exp/back/shiny/774-yellow.png | Bin 5525 -> 6288 bytes public/images/pokemon/exp/shiny/774-blue.png | Bin 6900 -> 7698 bytes public/images/pokemon/exp/shiny/774-green.png | Bin 6202 -> 6999 bytes .../images/pokemon/exp/shiny/774-indigo.png | Bin 6902 -> 7702 bytes .../images/pokemon/exp/shiny/774-orange.png | Bin 6202 -> 6999 bytes public/images/pokemon/exp/shiny/774-red.png | Bin 6203 -> 6999 bytes .../images/pokemon/exp/shiny/774-violet.png | Bin 6897 -> 7696 bytes .../images/pokemon/exp/shiny/774-yellow.png | Bin 6204 -> 6999 bytes public/images/pokemon/shiny/774.json | 82 +++++++++--------- public/images/pokemon/shiny/774.png | Bin 402 -> 472 bytes 18 files changed, 82 insertions(+), 82 deletions(-) diff --git a/public/images/pokemon/back/shiny/774.json b/public/images/pokemon/back/shiny/774.json index cabd0eb027b..7643e0ccc87 100644 --- a/public/images/pokemon/back/shiny/774.json +++ b/public/images/pokemon/back/shiny/774.json @@ -1,41 +1,41 @@ -{ - "textures": [ - { - "image": "774.png", - "format": "RGBA8888", - "size": { - "w": 37, - "h": 37 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 37, - "h": 35 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 37, - "h": 35 - }, - "frame": { - "x": 0, - "y": 0, - "w": 37, - "h": 35 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:fa61a53a0684a1d00e0ed5d6737743af:3e6463caf33bbb58cfba4bd9c20890aa:37281ac0aa1e619ef385b889b64064b7$" - } -} +{ + "textures": [ + { + "image": "774.png", + "format": "RGBA8888", + "size": { + "w": 37, + "h": 37 + }, + "scale": 1, + "frames": [ + { + "filename": "0001.png", + "rotated": false, + "trimmed": false, + "sourceSize": { + "w": 37, + "h": 37 + }, + "spriteSourceSize": { + "x": 0, + "y": 0, + "w": 37, + "h": 37 + }, + "frame": { + "x": 0, + "y": 0, + "w": 37, + "h": 37 + } + } + ] + } + ], + "meta": { + "app": "https://www.codeandweb.com/texturepacker", + "version": "3.0", + "smartupdate": "$TexturePacker:SmartUpdate:241dff4083e172e8503b54a7f0210f8d:982b194223ffeef2ba672b3c5979a426:37281ac0aa1e619ef385b889b64064b7$" + } +} diff --git a/public/images/pokemon/back/shiny/774.png b/public/images/pokemon/back/shiny/774.png index 3f91ba876a4d3a47cda7db2a3bbb86a2dac00e7a..6f93da7a00db3a225c86a464d34e944a8cac63b5 100644 GIT binary patch delta 456 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 BpKbsE literal 5526 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 DP#K;} literal 5527 zcmYjVc|26@`<`K9Y%wMKF6(QOZBodRrR;06E5;Iol6{%6B$~+*5tAj6>=`m-jj|V! zW$a|lnmt*5XL#T5=l92a&N=sU-Pd*9*K^ME$HW-wYcbGr(1Ji9hFdq)jX@x=4*3V6 z1S-X;<;B3|qM@#-25@C!Vv<3%T;UK=EgsP3m%9g7cYH4wbiJhojh`u@-`w1kpl^@| zaNtMA`X(TixgjSI=mP&ObyZV;+m-ZBPdUw5q6&Koersy{#4Om@@7x#X?r~8#1XUKr zD%997^E29SK&T{jqCu?1b-%^+N}mQ+C&U&k6>M`qJWGwg7j?DJ>rbioYVohnhll%d zPme3pT*CjfsSUg!*j|s7nAy<({*6bA#TcKoP4c*265si>Qa791gTQ?_<}ncFpy^?p@nt?V6IHw!gWnCWAhG4;~W^gxvc2Hk1b~Y7!3} zXf^&WwFmx6@zl2()@x;9@qu?X@81nD9{hV)o%{8jTEg2_yibW=zv{=Kei1jn!9JtM zPi8BEn7=RC)(*L`<}0iow;I*Xr-p* zANLDWga=14ows2ut>VsB2|UTl=xdc0rr9AOL&rPi6}P4cMv=wB?#)f3PDZvo$r^us zB{Mqj`Scu#wjLZ<@W3KFHDQ%$?|o=l)84b~TQh#}L|fjh;~E$bwQT5(G=C=G&OB9Q z7FjIt>L?eQ*gMC8(yjyQY45`fk5-r~(+qtJoBZ)IrC!7S-6p|Hh@Wbeu5|e}uER@Z zkF)EHk|oQ~rmtN*HFkc#S9F<(UQUUq%!q|EuNbt>M)=kQ^z!T;m!*tLzIC9}sHwZK z!YhL27jshP{=hryc?qcDqpr;C7L8pm9*gmHeC=Wql5~_zK%hKhdsAInna>VCJBX`D zyWPBRYh<&UTUzii8Sw@nN@eM<-+3|eGU&V5LtQK7JlE9{}>jO z)50>mef)InC&Wtk!rglKn~HDG3#qsAy#w7}KfSCh@z14R-#=ai)GjFI(_-0~nGA(P zLOa;L->1$x=c`PTjhWng;j49Jxu&VI!xcy*F@4arPOG?kgc;{AuO@UK-{(!&uH-jN zpf5i2A@to9k?fDo&_S~&i1x*5A;AZgF@>9LPIx@gZE^FOn=oab>Xpf@{p6yw^KF$;tGqDL6HvzNFXX+`18%Ah^b~}WfT|jK045q6}#8-)b z)7AEnZ_Is%=f-M1WxT(Z+TC_J_bS8co8?CXmqo9}e5>SU6qR}&f7rs70?SlTKTWj4;0+6@7z)FTPs2!HhigFN+JjzR^Ij|Fbv z3nOm$^rHqShi1B&07Py{`8(>G#C_7Yk}!88!+|Z-oTbl5fRqkiLJbeu*L#i1_uH1~ zug_~&JL|7@$Zv%>z>#|*_y_g$aN90GE zuROz}y0i0O<)doTjc$0k$-`rdVTr!>Z{3+Y;+gK4h#UC+Et~*B?>X8>=W6FnXz6n; zbCiK^$I^7dEMiuPZ@EiT=MqH-vXlL3@IOU=uErc(%m6#qP!TKyQQ_x0v-c=^=eSVk z^1bO2wjf>iiCPd zm*D^AwRZt=4M!o)yK+| zv9mKrF}pTLZbM>s8vjWwIQ!9={#|f@U~%c3Nin`zrbpdYXup4o@VQ-y&6Q4SWC(nmCnZ%8CW$Gg;6}xFZC3oerPv~c#^KR86sWj ziuOtb-WS61%~h-_LMMMhOm;#

(orF>gLu;{3x*q}nDjuO~PUhdLKi*0#6}pG_u^ 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 IQL_*KKS*Vlu>b%7 diff --git a/public/images/pokemon/exp/back/shiny/774-indigo.png b/public/images/pokemon/exp/back/shiny/774-indigo.png index 25984abc9c27148de636b838df87664100f2b235..115365f11b8e0619513b3f6e9b92cc91bacd98a7 100644 GIT binary patch literal 6288 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 Dt5l-j literal 5527 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 It6GKr4_rf{z5oCK diff --git a/public/images/pokemon/exp/back/shiny/774-orange.png b/public/images/pokemon/exp/back/shiny/774-orange.png index a6a13f0ab7d154380165f42cb8eeb4b47d9516d7..bf3db830ef89ff26f6de98159d99daeb052acc01 100644 GIT binary patch literal 6288 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

HvV^T2yd@ZV102BX!9)fChRz?*A$o&!p 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 D1%sZk literal 5530 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 F`9BJ6zUBY` diff --git a/public/images/pokemon/exp/back/shiny/774-violet.png b/public/images/pokemon/exp/back/shiny/774-violet.png index 25984abc9c27148de636b838df87664100f2b235..68da27cc96046da6df38d44fb80ffa50a6753f56 100644 GIT binary patch literal 6288 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 E1MFg*jQ{`u literal 5527 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 It6GKr4_rf{z5oCK diff --git a/public/images/pokemon/exp/back/shiny/774-yellow.png b/public/images/pokemon/exp/back/shiny/774-yellow.png index bdeaccaf3d851d96f11c959c7d143821b0f270c7..569b836a2075b95e0781fcbfaba1f300ca4ec8cd 100644 GIT binary patch literal 6288 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 E0eWPfdH?_b literal 5525 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 diff --git a/public/images/pokemon/exp/shiny/774-blue.png b/public/images/pokemon/exp/shiny/774-blue.png index 82b53ea3d81ba98cee8bf342b7ce2457439cd25e..a6d5fd10f1886e5d824987bec82b3133d0b512b4 100644 GIT binary patch literal 7698 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 M07*qoM6N<$f?TEibpQYW literal 6900 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 diff --git a/public/images/pokemon/exp/shiny/774-indigo.png b/public/images/pokemon/exp/shiny/774-indigo.png index f378b8284509b4b9ed12507401f45a3be60ec088..4c2c954f2e7913a1f169bbc13fe1c68b969f2ede 100644 GIT binary patch literal 7702 zcmV+x9_itUP)iE`sO4u-AnSOVYwg*Orj5GM)QoN@PTRJFa8$se555$g;1c>ElR zTna@ZT#-^2|)5*%R)WSJAnCPwolULuZRQ>8nI5~7#4e-?I!gU#5?i|@D zw#}89T)D6pSmmI~`}_CrQ-B5LLT*jSFbmN4?b95|DA(P{y0z*E&8a)6^cp8YG8Ual zftPNNI&rS5mcxFjSgzJS*z_V8S)n&nIQZgQ0w1ia--R<>U+d@VWmnpB(C1!CP zgWy6L??ZD4Qg*d#m;G}3@T@v1B)7W4(j1G9bX$Q|6g=aL*D&j~_2B&BQ4%C8Qr7wa zU3Kb&>{*@FF8ks#(FnXRNZEJ0 zNH$KPidbVsbmEMNW!)asNSX`^Q!%%~D`b+G=E@oo$gU+^Wy2IsU2IR5F5}iMNmcDK zI&O~ZzT70VIgm2X>(zcP8wJN@=TZ-aymUExP(yK5U!l2sNtmVX%D`TQvn3h06}o{; zmV~WMsfx|XBqmM)%-vNsqCaF_7qBgmg?;daH9C`nFVk*e2XXDE8=Y^?B$3EZY#m-R&3i3b+Emdr>_k79wWs-hISkgPSg zhl!4o93=4o3VuI-Z|y4IE9!aGqIr4_B59j>$%;US7K_Y{Ygx3wC9ox=JE+eh#i~+nkc5WLgyj$7OM*x^`g_+x1H0 zXh)o?5?)73LT4dm=f!5*UXv-GQE*%~Y8Tbc<{(RQUT(JSIaE2qttGLI?X~Z1FUgX@ z-N>QVPUoN-Q9pUwu0yCyNtlpsG}~j_wz=%_l57xMWGv2<)lTQ28nMZ*d{s54PfhPw zD$}6`!SOHSOdq{=){*?LL1;>4z7CEpRgt7D^r@CyPL}T1AfUll@ek#6N!j8f+18)q zuRT`tfGf>?25DT34W_-Wbh;dAT*w111}Q&+G~U4Xa@b&+Xk14FE=C&HvufFrtfK)J z^LwAc_tu(QEIU7ONC0=JTjO;t4S1h?9P5bl%jr^lWRhrHMFZx*$F!`!qfhFxyycu| zoC_Tq&>_Mc@Nt~NNVXc^GdcJi`5oK^A06Hv6!Q~a@nd=iq$C^=2Id3|NXNG0na*{{=kXRpE}@cYf8XKlCO<82uMTt!^w z@Lgipou#X)(uk$557|=TRlF8#z+HWDSwsLs8W68E@>R6M7JA_0CDSCGl07k^9oI>F z4Z0Wc)*W@<^*F!RUT&jh{Tg>lG$NPBzKwaR%2DaGJq|2545A0zHL|oj@?{nCs;{&Q zfxXvK5Kzl@36S)lzV3bw0xo2zq6F^PcY)I(ng(R;!k++M5{E&o4nY^)XXWC-fhB5)$f+R~@4t*7o-CZGwF_tNDB~cP~rj3Y3Wo{EHP%00&1H4L% zW#2ip3wghKRl4o4CE43W_Pk4$GN}#AG4v}haoB{5L zd>hNYgR2UvzyEg|8zLihiBy{g8q}R&ZdHYkUK8lIPi?MQgW4zYq-KytfCe;%z}<$` z9m^hks#`iY5>9fnCStOmLG;SSp^;Zete{`XvtLBIXB%;#tk$_3;{nrTX6fc5f z8G%$4w>vYw+HYl86TadCuVACooL4u8|JX(HATY1g$F*N*Pa$%2y`M0HM_ZC(*#%PJ zH-AMwS?Ttjx7FzAcBI{!@EE-{LmHv}PBlOp+1WP&?hc2e^te1ovV}+2!N9A43rT0$ zwu;bK(3z13b9+e^vv!}nIMg0$Cc zsw?@u#l!s4DXbj%w>FFAJ(Eq4bROg9=a7kRNGfWXi?sRBm;?FAOmigYGj!{F9rsJl!Hc3hN6jUY z5J(&GJQ^B&N||_#C@Yfc!-LS+F>senl^`^3%_*>l@42#S?fUm}*4~+ussd8p$Uh(6 z0}eDsi-~c0!XWdigKLM%fwOAT8Vr))<8zEmkW?LM8x0Wb2-;vU80eeg!ZS)|PyAjl9jRgu)dM~$>OBwZugn2IeWo`cbO)<$FX zL?24=FfT;f`lrQqfFP;l+(JoP`Z-|3WGA{?&Y-CrJUr6Tfs=%tme*uO=jxJA25IvK z2$Hq9tw9brX;5{-0q%4T{@T>K(3+bC6h-erdNf?15?#%JrPzs*0PbuKeUc-u$zU>| zNFp4An1aDx7$CUmrRkjx)K|Fa7I^b5tMpb9)6sD5w7ftiaJwxBmPX;ZZhJ|BM%=Py zlWP4l+FJ)=@#bOb>IY$qu4(lW>5>KFe*4v;``cKWuFs zb7g+JfZaE}98M+nYUEc<{A=BJtOdq&u8LIj zyZa<33=vGm-y~v zL>lp9zjLc3QVe32R2*S>^26*Z*e0&RFdn1zYO`7Lavft@04T}TbO1Bv%A>QF*wBNoLv?!jqin|XL2?ms$QL{mqZY`%5p=KU2N~+dr`l#;gO1Y zHJ`vF*}^WnUU0b9G{3de)xzL=_;I@!gXa=gxy8h@0N^9L1{@^=?xa)f7a(ipSFXtb z$EJ`DRSnGQM)rNDF91a4=%q|%_MU00x0w1oLVA5{?WrZ)V$g&fwza=8bA!{eo+?$O z6oO>fN~gEIqH;xgV>OXaAJ5-aHeXD*IQa`}ZBK7vj9Akl&isahwcd-GY*t3E+$e8_ zdDZuZG-dF5O)62UhP1U;xX@p@?#f)_BfZ)=_#Q!RfKzPrtQLb?Ugyvi3Mb@x0jgVQ zmV`0EJ=WLhZ8JcX!v$vTxM&$91AMd&RqlGxtB^Y7^?CjqXCeBbtE`Rni>dd*^?z1Elz3G58*pqyrd5U@eyN z!)0(S6AnJ&_XfEt8P&xr2~g<$DtE1&FLj2|2|+$f;8m~>0JCom^Rmqn*jbyC$A;YE{Qvq81RP6$*eXRj-Ye8@Ov}*Xz8*gtYNi{U8ZT=tL16L zB9_FRtVp}D_66ePiYLx~J>BeFCSz-j1bJ;T@GjjRkREFP=cw=!)~^CzdNo~h5b@jf zIUaj!;5SPlf?C2y3k^EK=canFyEw0$Vbu=k{1&h^^3dj5P~u_J8#741GVXN^dn{F* zGuy1~>{Ex~2tfkwyn&DO7!F~oy$F7!}k)q*ftp}n@f#}K0rIM zoqj#)-yqbpI!RJ8zbZT*K{U3~Gx|!38)`DnTP5*5w_hzhn1|Q1i2Wwn!aS;2f{kK5 znWF7R84UY%BRnZfQGNrYEnpA_5ZZL3SP95E6aRAk%7@owDavn*w7EJDR(rUI#`j#= zbXVt~U+M6eOnVk3@uIV-hN$Awjb_LAUjMIYd@ngdF#eJF8y}&=^7vkUgy09#SbF@| z@V$kqPaSJ>$UTufA-#ohVLcATRf2N zj~>4FC*ymc8NQbf?_P8hRxO$9O7iVSNqTrgR;_)~n~iQCgLL=ty?<@^o(ONe?`;40 z_{P4oZ%|`zY&$zkbUsxvk%d*&Pvo{(l&8ktLfSmpJM>;Mi&yr}y+Mr)k+${*Y!1lL zXTxvwA)N)PZtR`gUisal#$-hr4c0y%o&s{$g(8^ImtJ#0c%EMe-_xJd8Ssr>{Dv}S zO;@BNZ7uNjrYi>INYs*jp$|GdVvQ_bhN|{$pwlyI_2Bpz*TOUWD!; zASdU!Twlh0z_&=w3YJ;440gw_Oaf(xE^kNLs-nJH8_4$d!e7FG4Sj0NSh-$F@A%Hw z1>|-F!GKCKXjf0v`9NB;rR~M5N>)!0L|G8sC2F0}C6TiFM!hI&43L8U0=bybH2DU| zQjOb1%gO7#3~vX-@=UUNpWr5A8;_cKg!o2UAs1S<_u-2ILBlh%)c>(_!rAMVm847- z6Rk_Xa;3`VPOIUxuW@x9P<#iA2kw zsQ2ViyYSQk3nG}^j!H}pzj=ilv zy_mWyeu6n%mMIBd{l_Ko?!u}hJ3hOr%Q|ptoiZ#s*Q1{H#qdB5AXVC_$8Q4~kn6Q$ z8@n1*O%0`!SEtPtF;%f+FzI=!t&`T+a5Nwf)NG22Mb#D2B>_M>ejwZFItRPBoH>)w z#0){em2T%C;!UEHw|bG(xuq!Bd3bUym7Xg-B}G}H}+^lNuy^^>^Hd)ZE@bZhNYcS8P+6pkQwnFgPWPtCbkhXLGS6tjerR!T`rzZ}7%~7^> zsl-{Z%E55oSvb1O81v!}bU9RUz>Hn0+Vmk=b^v>98IGFsh6s9D09_rVV=ulg^D(c= zN6vE1?k5|m?3#mi86Wk*?M2}DnB#jUzJPv8<9oUNWRrj#T#ISehakQJ7 zDOHq3ju{J8FRi&zd@=pz`k%#@QyHdhZYvMSC0ElZzE@;_z?8kvX&$4@^Ly_G_1WXE zPe2}v2iJY(SenFQ^6kcviSH9z=dPY_mvM;}=LSEqb?$QVEx(pB@%>-nd#U&q?>qa4 z<9jKKA0ZlV<9mx(wPZNt7ywmgU>! z4mfm_A>_9?#%9r_`M3nq=FEKCcONgx(U!vjhntWw)vsTGuLpIiEINpy%gX#safh=0 z(#m|$oL@}tfJ3b`ohWsDhpsP+j=iWG;(MXY+Z1;qi=Z*T57<^C^mYKYM5Aa}!Izfm z1(M!lH;7Iq;mb5LMsH`W48(cgp|P;{>`k;SF!LMlC+y@}k=G%Yw=?o>mTNG$PQhRn zqqAG=R?Z9TD}29Qx^lxEfQ>z!#N}5_OWb7^bs-hYs?B6}i(L{GwF4|WQ&8t%Uab!x zGN>>0M7v7St?(OrnzKnrd=m%KsVpeGShhPd1f(ceZcC4Rv)j(vZ5vynnCx!jW?(j z(ZwS=hkzWV+C>JXqOOV)N8KTUHkb^el9=}UNocn*(>9j*NkplhUpOnBuKn0A7y)vk z!ghnw>8j&0aX~b&n#_Xk{MxOOfiG)UdPK(9eZbpf752XIEZ!U4Hh?S~m*h%40cNv_w0tXU~r|)IKx2(+F$kaip9L&%1Mg43awkwRz zo4$wZXc%4&d`rrb6X}v@SznvOKKRl3bfM{33vZl7K%tprJy{l|%AsX-9Ob-SXm8pI zp2Q%$WOPYBE(_)*(Xw2-$lk0KJP8@zIEx(kc3sSGfO!+-s{LopdF9%L_NJ}Kp^Epx zw_Z3a%Y%7Iv@F#ww0CFvUel1*1eh0tZxa?!pXQ#i8)#XkU1q>xsue@G$>LB*C!{Kyo>s$(e6={H}%MR#q?K8>z@ie_@paf*6> z+F;9GvyH94spvC3&nmqGO2qE4t2y#O@Ssj}* z^UeDtikxz&#k*S)F+)(FI=4%5wu=psBV*?~%rA9P zPoc35?*x6Z^zJ*zjV_4;wSmVCRjXz}4*Z200Ek+XJ?)U6#XZi{$i4PJvDb58o?zLJwxXu}cK*+ib5m&0cr> zi&faTb!3A*U@v-*F39dYw|PlipAK8bps{%78@oi{FSZ`_`VeRine$OKBb)32JDca0 zD2eOSW6O?U=9{TWX=`mXeUH!_Vb1tv1kXrT)4+<1=ef;G;`&sH%Hj!+Fr8!QKkvYtmn<^1J%xO@$gCE=W;%91s&tTI|n9h7l za*B-1Va8lit^cOQ=q*Q=0pHRkAxGmuXsMZRNlr1n@oY|J$hSC)#F1vkl6$tk+pgE3 zvwRjykCgSL?fP#VA8Oan@pJqfKgZAUbNn1X$ItO|{2V{W&+&8o9DmR8KWvAO_gc?@ Q4gdfE07*qoM6N<$f<)ma+W-In literal 6902 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 diff --git a/public/images/pokemon/exp/shiny/774-orange.png b/public/images/pokemon/exp/shiny/774-orange.png index 54b6eb8eaeda7b17f122097d5c8ea395882b67ea..4edcc654418e32f118110eb0237e3acebf4717f7 100644 GIT binary patch literal 6999 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 literal 6202 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 diff --git a/public/images/pokemon/exp/shiny/774-red.png b/public/images/pokemon/exp/shiny/774-red.png index 539e8d17913ba5ea4710f64120164969e22973ec..d04e4468df91d040c4f27b2b5af153222f988d50 100644 GIT binary patch literal 6999 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 literal 6203 zcmX9?1yEFN8zoj{MP=!b78WEHLAqm+?rwG|NohoSDd|#>l8`Q81q4>QT}qG+L2`E~ zNkM^s{l7bN=RNbBbI&t#?|J5(`^M>NtK7fKaF>99;J%tFRG)x=km%nHAjVg=VSRS^ zg;`hAP#M48gFry|OIn&*S5NTc5B>OrH!J$b$H#wuC~~bEE8!J{zWUk*1oB&Rjsyg> zXf>#U;Y;i3e61G`)zV{P{aAyk%4HDAZrVx{etj_!GNO4_B?l|>)tt0F7$4FtKP^z) zmy~beH+zmy!=u_7dkOit$mRRO3`zBpxZ#h;BR!5&+NX{t&-SBXpM&kTT&mbsf4WFI zH`VBV`#Np-=_7G?OP;nlKd+%BLu*bIc~3vQ8-uTCf0nj*{7ppWx0i>)#{DXAsFuxk zo`vOd-&IPw1Ddq>k;2BtZc_?O;e+MFb>gH-8d5n95-925uiQI?7u7swjl02#FU>76 zz3|U1igh>0@Fn%wuUDC>3SC+faWmT|(x(GSc%w1BM3!VbhA^74IX@HS?YuZOe>90DURQjoX$Iki%(_+jpoW2D*)dmK)>fCeuUhBmEHs4 zv!T~hZ-E*-i=e-jb>5ithpdRb%MOv#bvgqHoX|ems`llQ4 z{J5Z_AS~;)c}ggD(dviWe7BlE#Q~p5U(Y0yjp=as`4*Kyzc19C2frt^!m7lxEse?Y z(q5l-9S3^YkrHV;8v=Y-q&y`03PYy$PMo2u>wxYo!S1|=Qz585q3%ZqpyCXGwYf(r zJ!ppxupr&u&O$!HHKtYqTnZ&GBUD&7$G+)e5mK097t-m+TK$xjR3vU=H?V(8=x!G&{;6 zj;LWv1&341jYurSh+_GkBa;jOi%{Lh-S*l0V9a~gs3FrKuT)m@`xQB;b~p3wDLKvX zk`XizLHvQ5e|vM3iZwMlJdfj6d!hNVa)@cCW3+sRq(C{z-<*JC!7Jl0v{DF59z*beRE``woqfNS@QyYWX_5V1%mKsOemLzVaQ5a?Cd0c+{ z%8htoqtS_Aok{k9Yjo`S{_cF)=j?*;D$xA2q{Y{(b7dI&fBgn7F0*c&(+ zt@aw%Gh)1&&*E$-*1UpW^tc)^!_ZR%nC%YLeWivi`!BI}XagV5TAU>Z+k`-AGNB|{ zO|i3_+vR0zslWyPQ+c3& z0+b>>W+1^T+aBSHz=TOYk`F5B?rd91e~p&QL29` zlr6}pRl2Q(pE|em5`QrX@aP=JpTQ$GgTJ>=kF(4L#_rS&?V)KdtL!`Dmlv2de3tV-Vk<_Q}ws+^gT~N zIlU|~C_8#~??YKfr`63JnL5@hytG3_a@yBNBV`FP*g12)1Su(C`)666>tT$xo1H6EuUm2vtYg|j=;<=`n+G7C&yM9n z5a=i+r}pl`yYzHezpDBH57!E*v@U*Ce#S3^a}_lzE=?fF$P3`#9R+yX^-s`f)6=v-3yYIKy?eap==` z%jWbF6Hzp91sj!cgq)i!0=e~MQG zkx@r1Xbj1{o}blze+D7npq2FsDcH$PDR`y|w=FO|gJ@y%W0I)@CqlnuLsGzRvcZ&k6GOS$CTBHv z1{biHLz^XO=*SS$6!W~y1tRKa=y%_>#NMWy|`VNY)3xlzmB8o(uy zN7I{ZAYY0-njrW&y0N`?CN%5*6$Oc?RhSrv zlDEq2Y*s-6wdXb1NPY%dD4Ow7ivM_wnLJS)7^d>-vEDlPv;e`la39A=SS(+?$Q(aZ z9mS}LI|$H6wEC8J7IBiCj9zBmL--UoXXRYA&&95w?p>u)hc z9JWl>hTS3Z{VaLP5Ubt0B;wWS_R6C3E5NcpSMmD0 z1${uBRt8`voKyBEk4zl`xOCbnpqoWgBp=F^)-30X zpB{;rvUx&Z?KFlIQ%KJMOwV^9CTe~QR(Y>Z!`0Gzi=IByT9DPNo$l>1J#R%(MV{R& zU&(ARWWyDGGGXfeRWz0Nd(xc$$e>~0=_-%XE1+~T0e*()lmbe&p~3Y5e8CwQN?7eA z%g!NuzSOXj)zr*8fLQFNf*>v$P}r+AVsV;$sKpfme~4)y0y(W@z?N-}^Kd1FlNv0d z33~N;@P>~O0Z}g`Hz}=tJ{s;aC*R96AaXk%HCVAvU^S9%Z^og5Xv1&Wl>iR4%7cGq zvh%R?o4a=mDH{ps^osuA5M;4L%@~>T!&XQm4Vhq`wL+~w0ayKUG z#V;SX$Sb5kJK-8srl>zf0fuYGKtQxk@KHmgVSXw9l}>xb!sVCIAE+OHw4M=7Ki_n+ z!MsID^4wGGiJa_m)e$qOQ0ep(zcd;zV6ow9hl{U*86F%8TloEef@mgGj7FC55 z&v0$IsQNvRFkpRo5U&;URj2Y~!Jf$0!H`k1)vEOW0{`X9wenE zq~bznDtOn}Oc*0on`dqefEGlBCxIacIJwp(H~$X;Io=s-cM>L_)CYt3iV9?Xi{KL{}FO2-8v_Q$X9-L3igFGV9GMK7d+zv@VFR0QiyU$F&1PL-c7 zY$e^*0%|=r_QK{%`y%97px;kr8-}ya9Tr5xhE~X63GJN^L4_#F@|8Fxt{#o4!?^T# z{9g@7c+h>UzgUULH{j=YS7ym3=ihy90=Mo;a1Q0}h9du^@@N8xXk+m1zkU_O4Sc6A zMo)s>pDAA%R^lQFHoITBRl7K_La(N6Bi!)A9`|SXABS&&V4t<@<#IGz6r%7?`SSdW zV#89wza;02`?5RM%!I5_zU}gBZ#q($&C~T;o(e5Sol@?$tQiGx2N#37%r7`s!UC5M z%27ertr_Ml>ID@&Ij8SUdB-Yn-EAovA5hQeWYd7RXLu-=;LD4%J^0;JCw`AKYby0)BQNu|t>(Xn-nJ1gHRXC+#5`%X%wZp?Q;?4U>W+n@ z{0%(NpnH@rbRq>0YZ_E?E?cYVdeUJ+M3Z1S2I|S~@_X z^nqokl*NM!!0q(^M$r|~g3a?8zv<(HG%r1}q%Y5n2ROqDvqD>#SdP55_0hSatQAW% z#WVwE7FSu;5gu3RQ?u%a!gGJ$-`4P&qV&|ZB6a_sGwo5GY)*H>Pu}iCygki7TC9C( zAT{^*qsJWp>V09+N%S2fvdJF{?nZjRb*jK$G49}@3`nkAHeGNbZ9pAly34Bnt2;Fz ztOhB}i~GO}LQn-rVoGvv=6st43`!ZMJX|mDa0cB@%|h`ESQCp$VlD+*gqb-`J~ul~ zd5{vqcI|Xw((5rzL^aezep`x#xpI_C`iN&?uCAh-K_Jioa-Zqcg#P&YSK6h!==T2h zXaTTfm;9=>c0OviG77#On&nr(OL#nOLY^6zyR5D*CPy;yW6;^v7|jfA-H#?Pu`yfo z-<>>hzN&qG`{L1f&uXe1Y!vK322b`QLufN^S43J|ZkpaMQsyKM@h^ekNn?J~Lv+W>S z5be<-4BA+d(Vm;Msbzd$@0hv!c;>2MC%MAYnelTXajd29(Y$u0`T0Y(3acE7E;czh z)P`odEw--KYGHY>scb3dOrRsy(B>jJnHbQdfqE!zpU~A28#Uo~@SR7AZWdA-rxF{? zyWq26KYyMI3S5>VS$~{0!!h|*a^tpS!+vfES>*$E6H>bt;g>bkq+E^&?Wkc%95Y4n zHOj{ZCCt5n?Svu6+GC?CqJKqcxTbbNqEsXgm?_}qbRVs4k-I^vBpP%DFa7~PP15!4 zcYJ@CDSAKyo1fe={AOf0l<4dV3fz&p#n5~&vPznPvtGB1TdtdS;Z5qgH+%Da=}8eVa8tX=NT4QD(gD*A8n&pQpkH0p1eWXvlpq=_b#? z@>Zo-z#sM99hnk3=(-@ykFr;B8r8QhMAFb(+M32}{%;E7x?S_3yr)#-0nSasIdSbH zTiVHUrE{1Awu^}$$?$Itp&c64S~E#0%v;*;jpLa(pMSY4n<6DX?(NJo1Vh>i!1f2= zPEY?fmKwW56>QrYGi6(QN~yuTiyH4xX>(pupo%}-K({QgdIa#52F(YaS0ZNf){Z`0 zG~3gjPu+wRND;*xBmU0ph{yZNp2HM)2~#U$_Jc+n1154CE+b@^0)T zeD}pF?3iq~lr}?zMv9x+)tUFybRsTO<55iLM|RWCX1iQgqH?)>a~k_hnwcrwdWt+S zWMst1Q_F>5ZbY^`#~96mY!h)%`5e zS)R@%q=J`^GyDc*IG|?aRRD)Q2WO9n8ojbnz9aa50ecj*;M%UF+Ga%~aZDDds(9H$U=-;N|aZn)=VQl zUo^t`TAm&M0e2)bjexf^iP9837}o=-o$+lRZu^4gjQNB3vK;&HYWoz-K?WzM88(qM$iB(0)&eq`4Ad$=HDUMfqgOa1sTg{nvpP?3j9o{3FO|8~ z#G4{h{*I5_nlA`KL)zM=R$9i}ryVx$(LEb}*l?JY@K7c(l)cs)IuQ&upI;Kc@T>I#6)zBiJzx+fW+)~~%qGifLrPqd9LZEN# znY*V^yE&a1NUv5f|S>W&^B*{Iv ziNFzb3VpwLASTA<|J~)yy7%z%Ya9Cb++4HWF8l6~ldOk?QOQ7 z-s}BDBG381H4aaDMeMeUM;vGVhYaQMFR?mZCM({2O6y&X`I#lRiiE`UGvxP;)CV}^V;cF6TpjY5f!avH)HLE65j*oi<7mHsSkH_x; z9M46X0oPlTO?X7!-dbh*ln6CA<=3XF2s_>t>w8rNVHmp3x9M-vUl7jNQA7V zl`>q2m2R!ue?dv+I@ntJ(anTK^n6aP*i1H3g0dzYJFPmbBtQ~Bx+A4@%!Ebta}0${ zbqsW%tO=({T)Jtp&xGXgqkA6p7zw-Tpa`GW5vz*D=j$>wwyHxKrgNC48VYp|R}wkv zOPZ8@pJC?wvJ8yv4V~Yw{U}RG3bie%Vo7YV?E6hw6q^Y!(hUm|_v^UM)vupJ2&GA- zVoAsxJXxCgjAUVKTG@0uSy`4+I41`a-BsY`)psjZ-#rN@hb}7to;qE)E~CqxBOArG zxiXV07xn_H98`J#{P}YVsK8vvtqB=rk@S80G}mM;*TcxVwc?1(sXM6j8Yj_YEIN|{ zFWnJ!;#^fVhvQPQT&>qG>sdHCkc{WL$1-x3JQ)uzUQJ3yelOXk-2QQ*>z#OB&n$^w zl~}H6Q(g~#P!_vcBv$sL8_CW9JZq(2T^6h+CF9XWOIYR5-CobNHDnTTner-KQWpC@ z2riWIK2(QE%C2@DvR_Ugo<%2x&8@DmG{>TAx-F+#6guOx*D&j~_Tc>CQ4&p-rL6WL zb=9d8vS)Vs<)rW^Iw9=Qi9Tq1UB(->r4mZj)t^YEB>O`|$IO9AaM>4^iAKO5=oV%%v8*+@S2b$rn$041hQ)h7uhg{Qy1Hlr9<4hB`K;y zM#s%@-Itq$HkYK#^Ln+P%SOR**}2q1AuktQfGKq=Pl+4{#HljadUKg+}kcEBlg(W(ZgD=x=(~-orzuoA3b0!HO*Tdw> zFA@j40lBhq3dSCbPUjHFbP`okTF|br^0|bWyE5!awEL2B%FHGGSekkxYQfr_+oqc8 zy)I0F37fSR-R8+Iw=xOkwzw(l`*8au!=vAAoCo#pwCb8H8K<<6_@h`LE2=1kE^OAS zTbn~ma*)I$wcwBQ_tviRy^^ly;O8oJyZY_0FGfV>1SevO zLsj=GbUKFzS2f+fn_v19Umi1Ang#b09kVw|g3H1reoC_MBnnl++_%Uf`>U?$e$4Mz zrKHa9-L^R;fn-`01jl7@rn+`v65I7k zW3NY?suEsDO+sfOW#`3a+g_6?pHXmJHfmR^oy|d(2x{LxR3{23{rjsX}p2&Vb~x{G_Ioo7bA`9Sv9mI>uA8m z{N88qy|v~R%g#?60N{>vYrL+d0q>KKV_oC?Fdf84f<)sg8V~~?VOf7i59(0fa!xeP zg$@nq5Md7ZI8I?CTaE9T9DI)Q9U9R54(@`F4sQp^o&$VOh6ZAO59PKpnJ-dx9f)vh&DABH(?m!2kTGvrkhY(n{W`sO_9{$*zF#eR)(#6k-j+3hD~rn< zy-V!6vvft3E3wq|AzLcEir0b_xGOI%vj|{F1Jad7zKV9(LJxerWSXQ?vL{7!&^oEF zL60onx|8mw9_RP!%Wbl(U*k@RM&k0=w<%9mxmG%Dj{^%1gXjTwl`QR!d|AP~$}8>M zz}{;q2&iSd1VnnYz8-!K0xo2zq6F^PcN3>WG!4kwML&^vNgM{TI83r|)YjC5o{ZkO z_7rJdCdG|x1pQ`CT-1{2PO#{zSLJr=NJH+6gi4|oCtpES-Sf}>TFOf`XARtK+2!p# zE{{|kkh>ZqD2WDv^aN~4Y$v!|3Ea^)yERi1p6tk6jPDs#(UNZ#LQAgfDyPKvHeM2O zMV8QD$RG;0m$_aNekOj&#fc=F99GS9ik0Nit~r@oOIr5WdXxB>cHU}L4v<@JPMjPA zd@sZ|U6ljeCC;?PvW;W{woQ^OtvU2n)a)J#L5#6Xi7SbcurqB$G%9nOP$i}EfV)Ij ziLvZQS1;uK>Q(4ADckmP!N0DR=Uw{zk*rRBzY`9YSpTU&J<&2#SQ)mkcj5>ILdX-ugC zjWKXX)t$%)8X~iF?r3~(+vz^YE{kT7bdu7zbby3V9j?hAVYjKSk1}*YRIT*jn)%!T$AUK}K zc3&2HQ2=82Lk_<;&tWkRh;ok~;^^K+8kM>K01o(H$bpWv!}nHuU2G4M;luYH~F?Sh0m~stI0R8a;Ukq z(jJ=YQt}Nh32N^8q<5O??Ib4F`tdILhW7zA_oNRa2PV&ni+7WN2Ll#n43b3#sSjb6 z*Wq~ez&C7c;VuY+NT|mv4XiP96_BzRogcdfJ8SW6}8Mo+I(otf&65q7zz3e-TGd~{gQL=qUg?1b3hUT zX=^->h6bNfCSD`Tia>pMG&FV$+@Yy92#s5F3hd!~uB=$Q{=A&kcjir104Z8YIET=NOqFsXEd&8X(vaw83D=!TDg2Hix8po>zE1 zRWCKMi0)7aSyNLG51WPRgEtz^B5mFPL585Iia-M&HPYsgbd_jhDz=n(4o2r$8;#Wy zeaP9vya;LQpBCEzf=wmo7E0RE&w&~yJJH>822JJQ;gOCmIZ4=Qc~zEmt}gjxkT!3C zV6zstHOPS`4XRE!z@5&)Uz=JNT642VS7L zB*HO>5DfOh0KrW!P49GQeN8vrCfl-FvPV06#EX%0R!PC~bsuO628AHI*5*+~CQ4&;HZz*wI%A?7E zZW8AHMZ!$zWPiGn|9~P?#qEkt2N|Aq>!?z_Ob>G?$qu4(lW>5>KFe*4v;``cKdfyX zE!oceGOsLEwZIqv$2p-TWhwi-~K?P z5kK}jw@LzH5K&TbgyqREBh_dzh3F1tLC6*8^-f7vv4t=*i0)#$6yLjpAkMumMG)a# zY}ev@aCqz`Lf8Fohwr)Ikf%DN>b*?i@Pe&)w}B`k2hkaQJ~*U=ARvcl3eN`Qk^u5^ z*h1eJIHT`~!68QH9I|jQz88|7;A}ury*gD7L=d^kazm3{Z13TFQNPgenu>WfpTK}@ zVV7MmI9zL*-#XgW!r*)Kal06U=Mq=gV&Yk(#7A}wI7$ZGNvG7WM68uxxhhLEHl^uE zRl%%ogwY9%7bA!{eo@%Q|&JB`b zE4{t#6_v}<8>@+Y`gr~+viV}7#mQe-YkPVVW5SwtapqSXtoB~iWV5pN%B|(CFt767 zuuU1fUXx0csv>Rm6>jRUTn}Zg@{wNc9DJ`qZHcDX=vgfWx4h1wD-=%1^#T;Psag`o z1ov28r`OE@RSp-Jb;B%&b-Xe@ywql=j)_GUfnnQx6|U__NPNBG|P_ho<-Un~aSYbEIbMiy9$rTl0a zT+4)mkMzAku1ePG;*}(|(EC;HT039r3~MJu^O*y$f_+FymxP3L_h_wVg=4x<8XBx3xCF_?rUJ_`dUXS*+Q;7s0yVIp6(W<-p{N>E(>m}(q%YHoys@ep5_H9U=2 z#FDt<{i1IkeStW+p1N`pTsJr_ld;uCCV6c#@a|5x2cn1S{~Q%v!unOvtxX(|1FH~fg=RtABn&55jqUV_wW&dA4p^A z@n6ID7OFmVtjz(1#um4GCB3&E-&;5@ZG9uaT$gVDyOeyx7ZW%d@SmT(_o3l?V0eoM z(*4!L_x@&l?=!>q@bK&y@xHVD zkhDcj|12zZb z+GoRW^a0L-R5$j{t*`vp~IC=!4f>5T57P!T0p%bOwBDFMdNA zv!*N3k+vFmebW^Ka!pi|eW4FJyv7!hYqqq$cvZ>j34$aGqPs-36S^c)R^F&*WsLz+slPzZCNxdH zC1R<@?P|-(>%9!`NQC8?Wc5D5RmL_RHS-ARjkH28wCw1^7X^YwXJ#({v2()N>z0)y zPZm>Kmwx4PmNV%}WJxA_{_5DyJ*u3BI4HV8jP!+EAQD|U4h)oc_~raEBo)0)&u&R1 zT9&eUPad_4POW4?1hd;Ql}?7ow#4p*t12nCZi9tbviaQFm08=8SakjLayGFgSE)iW^&To^ zt-_g~USD4ZXlx5o+^!YU=I*guusm#2T!X6eS&l7R*$TJ7+UEs7u&YrKmvc=Ih9nhn z>~;O=#nfH#6U^bVOiAeKKQ4)P7gi-X=-E|W))TkZDZ{LCE&Nu&ndMzds@SSc2fqzy zXsp+cZR~1LH8qq@UY#~q#8lai!EDb{b)D44hNA&_pnAX4x=dK#om2}&O>}%L+m3df zONY3exdYf(UlXl#I|q?&5}mx&i=@mgCBebNlWQsWT-!r}zR(f+)?E3<9(8wO_SEW^ zWTz#3U6}gwx5KK@V?xcMtvf?B5`tQm6aA87DxB$eJsw>$#*X%6(-*sC+719|+jjmi z8q3OAnCdy&^YlvM7TILcZiSa$I$eW#ZpBuBdDRs{&n5$W4?^0`{aMJiUVfsQkA9;$+A7M$Clx!Id6!dmqlt<2kF?0 zugiSQtMHMtT+#hxBb8lqsb0oMeQ?gazV``yZ-^J&AsUhRp7c=|3>TvK-rHOr2*|;Ui48a$ z&q1`P;v#(S4wpBT#ds0Cn9u=-UJ}ObtN0$y<=v5)ih%8Mb^!M1!WZzpH)SA7g`s75 zyW9bXjxvP&Hpkd3I+%|GkTz%L+j01K5k^}M2OMrf##GiVl_eo8k^- z{iT)ppc!9G?tnwBG@Zz0e21IIVCV>gISCgIC8GuGbDT3Hh3eTT-v-m^E+w!qA9yq~a>Ye8OzT;9RRw^^>i;5r3^ zS&YtZv0FH=WMAR??b4MS?f`7;=_D?{YFgqUvnUHGTUKo*vs>&oQC2&^vNMHr4(3(+ zkVFRMrJiV4&bk$TV^4E735jpgKsuF03on)(j*I}QmMgcVN50u@XYIC)HPPm?8rGF# zz@1deWyc}EbZEaS3Er`c$y{rS220$Q!1t0*t4M48{1QIBZBdaOfJjRA7#-oAbkm)m%Q zS`l45qH_qywN$&vpj54^;>1yRh@cH7gQz5?{eBYKZOpWdWquM-s^=HZN^jSG>Q@>8 za-za^T-tQiahbRv8dyzc(eC`(t&$~QRX)YI#k9lhAB2?H=eDB;EQSo{K=29j<%F-C3gE-sX>+m{YDuyY!uxs zKCUj6V?2>A(W%OG7LZGQ2xhIYlft9yG6=MyW-*?=hk|dY%-zV;L8%4g5m2s5wc9Fel zD|ixv@WALmJ`M%*K(q{NSF<;31y4eTH_ieB->!@K4KQzlT-CqUoEO$EvNvr7hAQ3% z-+JM!3;MfNsIm{qkf!;^xAw(+ zVmr28O5E>4zHDjFmd<>;(XEdWVe@0@%s0GSPaGUui5DUV=o6dycB5N3I0iXhS`x@7 zIP(n;4cvORy!V^Su=-*L>XWe}@yxdeSQ1Sup}MzsV+9V>r_t3<(M;|br>OU*4Yuqx z+t~V>iaz0aZouL1oohGGg`lw_1={6+SstrK3=j9~B5ivJA>JGMeV?H!?rAaTDB38}qR+Byrm{kwC>`s)J%jmVBM;HE74uBBBij*VS9bge? z%xBfcoZ`<_S%FzDHh5mVEf7X8C^c{Sr)-QW3hXg*v*TpYD7&PHpR_qX88oIbFIKs6 zw=9L!x__``XCbK$E6LSK^i%nPq_VhKklY>Siu{l@MVDDV1GBcPKJa=~shWf4af;M^HCktra1QJKl+GZOO2A5@tU(rN zP1ts)tt5xqX%9oLTDM$K(U}g_B5ygA;@vHYm?5Z7o!ccj+r@^+HDl*H%rA9PPoc4m z?gV|Y^zJ*zjV_4;wIz=mDpt*ItZi_lD2blbh18^m!XC>AEUHmMqMB* zD2aijlBvi;Y!xdj@@h#ExjJfB-5p!)3O1L+4Z5ozpJI@U% zN!=>)AowL6mE|=sAU`GA^=GiH_oyT-*-W#>JXFo%VAZJ|UdBt3`mVSyTuUCbktvN{ zr1Rg!yePi1vK$7@Er}sZd9tM@{-S$43=Y<=-O3zo+DrGYc71=LB5c=Ad0`6RvOczu z){8EQz8pFL>Z8#`g;)+zHHCxq!`lP4=aA|i;jb-{&ReDSnBy^H92z?WNagT*>hZ-s zmxyF9a}hPjaj@AQux0JC99~-_r?KWVwbQ}F_cEQ(gPCva5<&Ym+bd4B*ByVe3LCeM zY_JFHMGv+MvOCXhUJ}=*!Dt z*p@V~d2T>SFrN`MrZ*_XI7LS0Fk^12jo@KUgUapv*tQoxQww|sn|7w@%r}rzWMmFA z=8|gtH!VhQIXVP_&xqT$NvHGWSu#eL2PXR0000< KMNUMnLSTX`Jqh6e literal 6897 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 literal 6204 zcmXX~Wmpv6(t=IJf!No{wrAW+uAhB&`WbOovjgT7O}Gf()6P! z?1Y3crYp0$TGrbvAU2z%gJ|`W!U#I?-Kf<=9ft!IByunV<8#iIn`(GBGw3{zN;?fQ z*!5PfDHbW>FwfTHfGkBNiRu`6Po8Kbs+Z}4i_#XAS38){0{Sk&9Uae@!Z}8=2NLq$ z)KDX`f$svc&rF|*LIR?^slrD4rKQ&Kyo9Vt-BPHK-vQXriDuYYxAFlpP$b--8;8@g zGf?4^!8_^azEr9V%}2@T0J$`df#z6xaYxvufEdjp;IC(@YT43rwHR_ ziNu^D-zc|jhs(cYO?%HkxEPD4nW4zKnp!maX%s+deB+J&+>(S}mpEiBm1DeM++N+y zdkpKd6afH}Ee`SZ(?t#1>E3~BeX6xBF%NEs-3=6cQRZd5$~iQkIqV@*i28n4%Te~+ zZ>uJ;<_~$IG5rm>hn!uu&m#M7LnHafmT{w4h9YE|+DBW>g>NKp#Wy)pw>lC~0oxW_ zIL+LJTPhW{4{mzi16UTE4frJZL?LEGZg;p=NC6AQgfCv zzRW(g^|Z*6F`HMpX|-xET7^p8NW=ngCc#x6a{r3` zZis8_1gPtYq$V*iA)``XU{P}H+W+L&+{+}aHC)#RY)}GA(vv{+*leW$OVj7kX~vli z8$Ln(gN6}k96##n-SR)xz10(iQ)}#a7mWNT-jrA$ zCYsU1-{nQjz^x-hXnpY*EoZ>$^tLxLMVI4XuUyM-a!*GYnaX*Emd{sHQ~|3UX?|Fe zmDI}yV}Xp8e1uCBZM;HGx0$EAsKckG^g$;sQn!-St$HZOjC_qZx$#!!EgAx&))!YF zxrw`_^kNA^&!fT-RUNTu0Fp2ZBm?pXv&;~socEL>1OQ{{041zGoKNDaImC5 zm2+=;i?Kk*v9p#KRT4>n8N?-?xO6jr>+ZBt^r>;*G}N8h=+Fnkfwa=?HN77#a#H!m3e=eHG&-`=e)H!S z!S+m~p=eXeZgjiLJxE%8hkF)3P6te&S!oLyU|MOMCVQmp*pBXALbFoH7bG1OsO-Ld;9f(Yx)jt}uYq7yP6_kuXmYmO{77q4#=F~hmyAB)30zqFB zCl#o&#TUJI;EQz}TL@ZfY~J`yhS9_5(l|3qV><;A&GwNqlTT^N-Ua2KnXB(fE9zM>IzdK3zXHi06wgFPz{jWx@1OWR3EkjGQF%8vi9% z`fe+h;*FB8ciSJrPX^Mrk5r#{_wv2%IGPs2IDd}!ErxR9(*Go3ua+yd2dX)=Q_mav zavWV8^3q+YLZ9FDfxWCD>6fRph2j4-Tg;DK-0sjmc;+@Yh)!jQ@o)^D^)257mgFhc z-WosenqQ=`6-Xh*4Mr1^=3!uu*RYGvYPURd2s#s;x+gEVYQQ1{y$g0^)3%Nh`B0=_ zk5Y~K>EVivtFjy@$oqc;dAza5X(bz zut{Trh%7hFFX?gFb5g)xoqSA;9;152N>GqkX}Tev;6BLNZu*)5Aeh6j&m4rNEFG87 zb7O$=p^bBm`>2@=#`3NFB>C)v-5VZsVY41Is{DH}` zT$NLJ7ARy(Z_LT~AoLSP6=DR?dD_ep_<)8nub8Mxi1p2We@dj0ZPit}@}d8*pw%LG z)b#KPpc13;Q6{u~b0t86|Ha$Di5C`hUunNr2lEyX3mqsvPDCj6qt}Sa8Yqk zJYwMoEccR=Xp>yb#kXLyBT2=y3*q3pnYdUO*%r_9i+$IbNCP!tgsg=V`#&h}c`ee#Sf$`#R$C^U$8VaSBvLZ0r^@Z8p|Xg+@lS?)iL3MvEKS3=2 z2&@ODlyjn0q^QnO9$e%cWBnX>1)OiE&FBg?sk8BzRGovr3S>%RFJ2SA+IH!lRI-f? z18MO2*oV^63n#YWdbdRM3f>xN20?qrXlJh5dgM@hhkmP!{CGt=@4rw1XnX%%v4Nri zNa$$Pa#e})VSb-)*QL)e&3Ipbcu)*)@~Y+7A7u0XShH$9WHtt)w*0@}Clo(^qvR?A=jpER^{Ldo#F%8(^^o@OtJVm^sach6d^cq4-D+j-&&15>WanWcUJSQA zn7{N3@NU)x$5X(Lj3XESohfS)za{Il&90*CPj~%6Zg)j(QdPr_5u}x?fn{8cg!C3Sa|yF!X8?bHlh`$Ef6T*6@!x z)&pF8o^}p@lTO%E=5;&q@gv5@j6Sunqqk5SudMol;oZ!gZ%Dthmd@oHuLJdyna|TS z%c)y+!^g1PPfQWR(xpUiRI?|SZ)Yl2>R!7qiq(-#)UFpEBhTgAL|pc_>}#dgBF-ml z?_`)hRDx=cCk?BU_8Z#-FZR)spNC6Z$7DA87U)%kht?gtd9gk@dJ1djFfWsuleVrA z4%(0|75ZI_(Az9ETOPj^VqQO1C?@Ya#Patdc6Wy>nVjfcL#LU$^@_zOe)iQXmibB6 z)^8p^ar&!@PK*nZ2+vCQ+Nb`R1-tDPm@>zr8~e)K)7rT$^g~{<7%t{OR%jyBXJ(9f z0$g<;W^V0$n-qv(SQIJ+%x`CvejOr{EdTJy@rT!y7#eQB9B3^IcGJrtt05MJSoBGY zE;q^zbL@~elgYQ5q-6k}PL_8qo&)0ljkC*ZKG18zKdBqJ#&Ktu7iL3#G#+JCxuTmu zhqKgrHc6j+>E2-k;^bX#nq!v38z#DM+I*HP5$L`}i1qzzFFQ zDL?x5x#2uAFGC3OJ@ONVzjIT-Ep--NYTgv*SQ1tmLCmKC$M=xX^2nHv^3nKVXv?bMneSvu7M{3HN?71lunFk?{4)eA$?hzOO_HNC zYJK;YdGI5{WJmrx#NGeWTE&F4bY)N4+KRw;>8H8hBE95RbosGzi(462=A^)T4I2d; zg}Ny9lg-Z%z%5-t^;M)&$5*atKbEBByEIydBvc-4 zegUHqmRuXLljDECEO0p{=XzTZc@NcJfqDMJ9!HS0Y*UKyj4Y-l)_QNsZjeT8{gwG= z^4`x79&^MoZr&F_^+8ptcXd%2*>fSm_``a--7rAXzJVF57a>23H5( z(I&`OsI(&prYhN-F6Amj6qqb0hi0%aSD7Y?RF2_^3%&4-@iw}$@-iK@YqGqPc}*aQ z+39K5)iYdgrNV(!21vFKKSP_(E3$;>qz2ee#|E!W)>|cr3ItLMpjYa0cylTRNOzcy z(s|?M*);QwF5ZXo-&G&hfiA;d*4&BwziKldW8`1g)oNIp-Hg-7ugEa2?Jc#dtBSJ; zE4A{UJaIMY*UUY(+w()a$;H6r5q6%>!3Xwc8>vVt@G$5=^{5{*~Bc3re zPp!_&@i}&Gpm?>XewaL;;bM=bDjlnbjO+Sj8&q}p>8YVeofTrK9^QO3#V7a1;9PEp z1#ZWUe!QsE%ppyo&slZt^Sa$0&fk+WgTGe2oU+6lQnxilV(N*Hf%7iF^$7}*<*FaX zJ?B_rCILJZP!H1b*^c$g*Z%7)VsMW`;B^FDPNR?U$SUKuf``ek{$}OiPoto`m*Bd0 z7NM6A!u)TL3`b1eXm0Pg3d(%St8H_#6T!=QgV}!Gb99{$F9O$FX+)RYLV^+8V~hKp z=Q!>M+SwgiL8afeulRJLvT_65_VsKE=PEt*J!ZPEPa<~-1)PnRr`Y$4#1X-x5Bp9M zwFe+d1>+AY7j*Yk%UYzV+^|IQ_w!akulMS2k|V!ie{$K`SHnkXR-&|s!2N8B4fSHJ z81!;3HOa8nn|LMbJ6_Flo+D(5ze>F|+Q*g(vqOI8!sP0QAjJ(yDSvx=fg>as+%NWo zwEv}(&WkQRdKGIj)MwkS=2Q+|0Dg#QO&&+7&cR=9nUxBHgi_qfMidQ)VTzcN zW6SFy9QU)sKSB0ZL%C+lw9&^AIPiX#0YT?MS?0W>lyZ+wqM*fMR&=UU#y97ds#V^* zi;Km}{yKKU9JUYZ-f|bIC%b|YDs7E-fzn9ep|>2+@CsJN8{%>_mHEMa(5pbSR4L7u z5R~|%J(xS!)mDkYutM4?A9B#KaFwu6=ZfGCQw$!^dzcWh*p*4IY&fQ;-|rN;LMR4H zRsVekJwSQOMd(o|H#a^39ZG#DI(x)RLVw?4K}R~mLux~Q-~3B71{%5j;)d!^=;`rH z4a7zSbgh@Ac|&+EZx*1qObRnkuM+G`9mKy2=+!my0cet`q9IfQlSq>y0Dk28zJMAcY9kT3 z7ky59yQIo4oHp)dix_JCJ=udAnpUVQ1jK58+i}6((dAUa5_(5=$n?mF z%L04{pPPEC-Q3u1Vd)KWdqphbgpJ`r%M^GtCBw=s`F_YuL$(I`Vrj(TxOe?4rBj#^ z)J9SzC1in9Nrt4zqCXLxV{ z+9(q!II(mk)Fwm%zeOk8fy=ZWs*pn0 zbRKn3q{ukj2QLPWbzj4vhELvrNInbbjy*mT)PPbuCf2+FNy1J_sU+F|S4R%9ZNYp1>6dP9>IjU~qUh4csLQ6Y5tV?;CRL!AV^ zo+6)Py}JROHz#cEtL6VP(tk@Vw-_%jm~)3fE7C;Cqx7bg(kt~Y4WK1_hK}`i3vL-+qOGq0ZA$czv z0{VEP00001bW%=J06^y0W&i*IWl2OqRCr!(&oOV?Fc1Y`8iw~YP5waI?s91bO4p`) z0Ya+wz>l{V=6M&S9YZKRwLjn5 zZR>Y$X!VQ1?Q82ez{~6L&cg#3+qt{y2tEMePxyx&)Hv~W{o$(AfZXGNr>}QasR0vG z0)B7G548X>le0bi&emlzfP8Q<9y$)rm3IVB*gwP=8(=>uE%cBH+o(ALysymSHn^H6 zJS97*QDv^b?0+8)(`-R)`C}JjH=C%LdWiA9+;{9D=+#!qFp=(M7GyK6&Vu0Lk+}oL zWWDZCBUfjWWcRKHh$a$dJv?O-07?_a9(c~yK$K8I=NF?{0#e8`2Pu{|lrV3tGbznn z49?nY763`ct-bkJdbyN8!}_tb%7 delta 375 zcmV--0f_$C1Cj%fB!3=IOjJbx000mW5Gg4sF|Xe`IyzZdS(M&VnVF*V^Yi=PLUvwX zVE_OC0d!JMQvg8b*k%9#0U}96K~#8NozcH;gFp-haA3&_Qy8mLk=Ua=KqMme3UjbG z?5%qBtqhU<0vYnQ_5D-SBtzA20sZt@*dj}L$sSUyPmIb3Yk&Efef-4=OP}iAGy Date: Sat, 6 Jul 2024 20:32:54 -0400 Subject: [PATCH 23/24] Change some voucher icons in achievements (#2616) --- src/system/achv.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/system/achv.ts b/src/system/achv.ts index 511ddd1eb8e..dda6e5c511b 100644 --- a/src/system/achv.ts +++ b/src/system/achv.ts @@ -316,10 +316,10 @@ export const achvs = { CATCH_LEGENDARY: new Achv("CATCH_LEGENDARY", "", "CATCH_LEGENDARY.description","mb", 100).setSecret(), SEE_SHINY: new Achv("SEE_SHINY", "", "SEE_SHINY.description","pb_gold", 75), SHINY_PARTY: new Achv("SHINY_PARTY", "", "SHINY_PARTY.description","shiny_charm", 100).setSecret(true), - HATCH_MYTHICAL: new Achv("HATCH_MYTHICAL", "", "HATCH_MYTHICAL.description","pair_of_tickets", 75).setSecret(), - HATCH_SUB_LEGENDARY: new Achv("HATCH_SUB_LEGENDARY","", "HATCH_SUB_LEGENDARY.description","mystic_ticket", 100).setSecret(), - HATCH_LEGENDARY: new Achv("HATCH_LEGENDARY","", "HATCH_LEGENDARY.description","mystic_ticket", 125).setSecret(), - HATCH_SHINY: new Achv("HATCH_SHINY","", "HATCH_SHINY.description","golden_mystic_ticket", 100).setSecret(), + HATCH_MYTHICAL: new Achv("HATCH_MYTHICAL", "", "HATCH_MYTHICAL.description","mystery_egg", 75).setSecret(), + HATCH_SUB_LEGENDARY: new Achv("HATCH_SUB_LEGENDARY","", "HATCH_SUB_LEGENDARY.description","oval_stone", 100).setSecret(), + HATCH_LEGENDARY: new Achv("HATCH_LEGENDARY","", "HATCH_LEGENDARY.description","lucky_egg", 125).setSecret(), + HATCH_SHINY: new Achv("HATCH_SHINY","", "HATCH_SHINY.description","golden_egg", 100).setSecret(), HIDDEN_ABILITY: new Achv("HIDDEN_ABILITY","", "HIDDEN_ABILITY.description","ability_charm", 75), PERFECT_IVS: new Achv("PERFECT_IVS","", "PERFECT_IVS.description","blunder_policy", 100), CLASSIC_VICTORY: new Achv("CLASSIC_VICTORY","", "CLASSIC_VICTORY.description","relic_crown", 150), From 694616e1e9dacc51bf48d8dad3d2c8e92deeeb0c Mon Sep 17 00:00:00 2001 From: Tempoanon <163687446+Tempo-anon@users.noreply.github.com> Date: Sat, 6 Jul 2024 20:44:47 -0400 Subject: [PATCH 24/24] [Bug] Fix hard press bp and pp (#2441) * Fix hard press bp and pp * Hard Press should have a max bp of 100 * Fix typo for acc * Add test --- src/data/move.ts | 30 +++++++++-- src/test/moves/hard_press.test.ts | 83 +++++++++++++++++++++++++++++++ 2 files changed, 108 insertions(+), 5 deletions(-) create mode 100644 src/test/moves/hard_press.test.ts diff --git a/src/data/move.ts b/src/data/move.ts index 7fba094e656..d87d7f918bd 100644 --- a/src/data/move.ts +++ b/src/data/move.ts @@ -2961,9 +2961,29 @@ export class HpPowerAttr extends VariablePowerAttr { } } +/** + * Attribute used for moves whose base power scales with the opponent's HP + * Used for Crush Grip, Wring Out, and Hard Press + * maxBasePower 100 for Hard Press, 120 for others + */ export class OpponentHighHpPowerAttr extends VariablePowerAttr { + maxBasePower: number; + + constructor(maxBasePower: number) { + super(); + this.maxBasePower = maxBasePower; + } + + /** + * Changes the base power of the move to be the target's HP ratio times the maxBasePower with a min value of 1 + * @param user n/a + * @param target the Pokemon being attacked + * @param move n/a + * @param args holds the base power of the move at args[0] + * @returns true + */ apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { - (args[0] as Utils.NumberHolder).value = Math.max(Math.floor(120 * target.getHpRatio()), 1); + (args[0] as Utils.NumberHolder).value = Math.max(Math.floor(this.maxBasePower * target.getHpRatio()), 1); return true; } @@ -6685,7 +6705,7 @@ export function initMoves() { .target(MoveTarget.ALL_NEAR_ENEMIES) .unimplemented(), new AttackMove(Moves.WRING_OUT, Type.NORMAL, MoveCategory.SPECIAL, -1, 100, 5, -1, 0, 4) - .attr(OpponentHighHpPowerAttr) + .attr(OpponentHighHpPowerAttr, 120) .makesContact(), new SelfStatusMove(Moves.POWER_TRICK, Type.PSYCHIC, -1, 10, -1, 0, 4) .unimplemented(), @@ -6909,7 +6929,7 @@ export function initMoves() { .triageMove() .unimplemented(), new AttackMove(Moves.CRUSH_GRIP, Type.NORMAL, MoveCategory.PHYSICAL, -1, 100, 5, -1, 0, 4) - .attr(OpponentHighHpPowerAttr), + .attr(OpponentHighHpPowerAttr, 120), new AttackMove(Moves.MAGMA_STORM, Type.FIRE, MoveCategory.SPECIAL, 100, 75, 5, -1, 0, 4) .attr(TrapAttr, BattlerTagType.MAGMA_STORM), new StatusMove(Moves.DARK_VOID, Type.DARK, 50, 10, -1, 0, 4) @@ -8379,8 +8399,8 @@ export function initMoves() { new AttackMove(Moves.TACHYON_CUTTER, Type.STEEL, MoveCategory.SPECIAL, 50, -1, 10, -1, 0, 9) .attr(MultiHitAttr, MultiHitType._2) .slicingMove(), - new AttackMove(Moves.HARD_PRESS, Type.STEEL, MoveCategory.PHYSICAL, 100, 100, 5, -1, 0, 9) - .attr(OpponentHighHpPowerAttr), + new AttackMove(Moves.HARD_PRESS, Type.STEEL, MoveCategory.PHYSICAL, -1, 100, 10, -1, 0, 9) + .attr(OpponentHighHpPowerAttr, 100), new StatusMove(Moves.DRAGON_CHEER, Type.DRAGON, -1, 15, -1, 0, 9) .attr(AddBattlerTagAttr, BattlerTagType.CRIT_BOOST, false, true) .target(MoveTarget.NEAR_ALLY) diff --git a/src/test/moves/hard_press.test.ts b/src/test/moves/hard_press.test.ts new file mode 100644 index 00000000000..c6f071a699f --- /dev/null +++ b/src/test/moves/hard_press.test.ts @@ -0,0 +1,83 @@ +import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; +import Phaser from "phaser"; +import GameManager from "#app/test/utils/gameManager"; +import * as overrides from "#app/overrides"; +import { Species } from "#enums/species"; +import { + MoveEffectPhase, +} from "#app/phases"; +import { Moves } from "#enums/moves"; +import { getMovePosition } from "#app/test/utils/gameManagerUtils"; +import { Abilities } from "#enums/abilities"; +import { NumberHolder } from "#app/utils.js"; +import Move from "#app/data/move.js"; +import Pokemon from "#app/field/pokemon.js"; +import { allMoves, OpponentHighHpPowerAttr } from "#app/data/move.js"; + +describe("Moves - Hard Press", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + + beforeAll(() => { + phaserGame = new Phaser.Game({ + type: Phaser.HEADLESS, + }); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); + + beforeEach(() => { + game = new GameManager(phaserGame); + vi.spyOn(overrides, "SINGLE_BATTLE_OVERRIDE", "get").mockReturnValue(true); + vi.spyOn(overrides, "OPP_SPECIES_OVERRIDE", "get").mockReturnValue(Species.SNORLAX); + vi.spyOn(overrides, "OPP_ABILITY_OVERRIDE", "get").mockReturnValue(Abilities.NONE); + vi.spyOn(overrides, "MOVESET_OVERRIDE", "get").mockReturnValue([Moves.HARD_PRESS]); + }); + + it("power varies between 1 and 100, and is greater the more HP the target has", async () => { + await game.startBattle([Species.GRAVELER]); + const moveToBeUsed = allMoves[Moves.HARD_PRESS]; + + game.doAttack(getMovePosition(game.scene, 0, moveToBeUsed)); + await game.phaseInterceptor.to(MoveEffectPhase); + + const enemy = game.scene.getEnemyPokemon(); + const movePower = getMockedMovePower(enemy, game.scene.getPlayerPokemon(), moveToBeUsed); + const moveMaxBasePower = getMoveMaxBasePower(moveToBeUsed); + + expect(movePower).toBe(moveMaxBasePower * enemy.getHpRatio()); + }); +}); + +/** + * Calculates the mocked move power based on the attributes of the move and the opponent's high HP. + * + * @param defender - The defending Pokémon. + * @param attacker - The attacking Pokémon. + * @param move - The move being used. + * @returns The calculated move power. + */ +const getMockedMovePower = (defender: Pokemon, attacker: Pokemon, move: Move) => { + const powerHolder = new NumberHolder(move.power); + + if (move.hasAttr(OpponentHighHpPowerAttr)) { + const attr = move.getAttrs(OpponentHighHpPowerAttr); + attr[0].apply(attacker, defender, move, [ powerHolder ]); + } + + return powerHolder.value; +}; + +/** + * Retrieves the maximum base power of a move based on its attributes. + * + * @param move - The move which maximum base power is being retrieved. + * @returns The maximum base power of the move. + */ +const getMoveMaxBasePower = (move: Move) => { + const attr = move.getAttrs(OpponentHighHpPowerAttr); + + return (attr[0] as OpponentHighHpPowerAttr)["maxBasePower"]; +};