From 4be0214d5ad335295eacffb3665bc786049125e6 Mon Sep 17 00:00:00 2001 From: pom-eranian Date: Sat, 26 Oct 2024 16:09:19 -0400 Subject: [PATCH 01/25] [fix] added missing rare icons for spinarak, ariados. added to icon sheet (#4729) --- .../images/pokemon/icons/variant/2/167_2.png | Bin 0 -> 575 bytes .../images/pokemon/icons/variant/2/168_2.png | Bin 0 -> 716 bytes public/images/pokemon_icons_2v.json | 250 ++++++++++-------- public/images/pokemon_icons_2v.png | Bin 37175 -> 37450 bytes 4 files changed, 146 insertions(+), 104 deletions(-) create mode 100644 public/images/pokemon/icons/variant/2/167_2.png create mode 100644 public/images/pokemon/icons/variant/2/168_2.png diff --git a/public/images/pokemon/icons/variant/2/167_2.png b/public/images/pokemon/icons/variant/2/167_2.png new file mode 100644 index 0000000000000000000000000000000000000000..a6bd15c0eef64f115de5526af4211aa7fbf525ea GIT binary patch literal 575 zcmV-F0>J%=P)X00001b5ch_0Itp) z=>Px$-$_J4R9Hvtl}$?mK^Vs$SIC6$)TIzxG3XRhhwxTxw*spVVN%!d);Ex@h4~eN z$X+hdLUid=NDvf-TL@jEHzF(0;y>{$%bJJT$?&jqab}lse*FH=GaH}|AAt_%BOg#T zA>W{HP}P9ye!m8NgQ^Bp_xm;2kp^{L|6(x9vXoL%+RPvf!Rvv@oGtF=WmC+(f_egU z8md$(6pzOR1cR0Gr#4_ZHzMW$^#Umk2)N*9it1g*;$Q%prb+Xe44tgST9zC@y+BF< z0uGjN5Wof#30f}}$uJB$pY0cL(Z!)AdocRAeL)jDA!&=!fNU?QX;d1nQTi+_fY{#X z!mT~$cmas#^+uz;fB+E@YnnK$T+o{$g{jHCuz~8YIj($A0MAr{jRDInN7SUWX-7E#j z5#tvSXb3KT#E!v$E6>YxczGm%&{);`JG=AS3dlvrcOk%5i3nC1e7YPWL(d6wd{JX< zT6rmZ_&;fb&aMC?*W||28|_EB#cLRHUP-*>cP%f=UtTByIwN-<4nVKgoSe#lt!%iz z(=yin1<)&ydtciO{uSUiBLwLmbAU740000EWmrjOO-%qQ00008000000002eQfs literal 0 HcmV?d00001 diff --git a/public/images/pokemon/icons/variant/2/168_2.png b/public/images/pokemon/icons/variant/2/168_2.png new file mode 100644 index 0000000000000000000000000000000000000000..cf34c26be21ff24387f93c8c1b814e37fa497acf GIT binary patch literal 716 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 DuuDNg literal 37175 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 Date: Sat, 26 Oct 2024 21:30:05 +0100 Subject: [PATCH 02/25] Updated date --- src/timed-event-manager.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/timed-event-manager.ts b/src/timed-event-manager.ts index 953ac0566f6..4c56ada1c94 100644 --- a/src/timed-event-manager.ts +++ b/src/timed-event-manager.ts @@ -31,7 +31,7 @@ const timedEvents: TimedEvent[] = [ eventType: EventType.SHINY, shinyMultiplier: 2, friendshipMultiplier: 2, - startDate: new Date(Date.UTC(2024, 9, 25, 0)), + startDate: new Date(Date.UTC(2024, 9, 27, 0)), endDate: new Date(Date.UTC(2024, 10, 4, 0)), bannerKey: "halloween2024-event-", scale: 0.21, From 4fb1f37baa22376d6315bdc5cd9e627cf11a6ac2 Mon Sep 17 00:00:00 2001 From: Madmadness65 Date: Sat, 26 Oct 2024 16:13:05 -0500 Subject: [PATCH 03/25] [Sprite] Fix Berry Juice item sprite Sprite will now be centered properly. --- public/images/items.json | 10 +++++----- public/images/items.png | Bin 58657 -> 58629 bytes public/images/items/berry_juice.png | Bin 318 -> 390 bytes 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/public/images/items.json b/public/images/items.json index 3c9cff7a35a..9d84476a8a0 100644 --- a/public/images/items.json +++ b/public/images/items.json @@ -3353,12 +3353,12 @@ "rotated": false, "trimmed": true, "sourceSize": { - "w": 24, - "h": 23 + "w": 32, + "h": 32 }, "spriteSourceSize": { - "x": 1, - "y": 1, + "x": 5, + "y": 5, "w": 22, "h": 21 }, @@ -8436,6 +8436,6 @@ "meta": { "app": "https://www.codeandweb.com/texturepacker", "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:875c6d67e72590dfc6d319101aa31cfa:dd2bb865ecbc5ac7b975ddf70b993334:110e074689c9edd2c54833ce2e4d9270$" + "smartupdate": "$TexturePacker:SmartUpdate:d91a46c431ace3f09f5ca68916a2171e:1e84369d9a13e1416fa58028d629d116:110e074689c9edd2c54833ce2e4d9270$" } } diff --git a/public/images/items.png b/public/images/items.png index 1bd7b3af9c3314850fba4eed749f7e3aaf46d8f0..cb4f8fa7d065f53b4861bc32eb0867b9eda94b5d 100644 GIT binary patch literal 58629 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 literal 58657 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 VnKdzxs!0I6wACM})ufhyx&`VZf{G= z6sxs+lY6S2fSR7i3jP980wqCy!T(VK!vp15NuV5Ofk$L90|U1(2s1Lwnj--eJnZS> z7-Hdn_u^~5W(6MB1ijWSk;?zu@2+%CNZNG&wxQy!&r3NkUeW)VYH;lQfr#t(<~4pi z7ypQJ!TQ)U4JR_UtS`OmaE^_)$~(8M#KFvk_g98`A>$(fbC$o`jvhFz8{@S9eO5tR z3Hy{_hs93kC;aMSix_9XZQh2)x9m(cWuyl@ZfSrOQhI>!_BJ2XAH#ziO`;_L literal 318 zcmeAS@N?(olHy`uVBq!ia0vp^5dmR!KK*shpv+vr1Zd!JR$t)%Tk3Y|hC38E9K7xbKjbyLUv(`U$f`BaU8KWAJ!~ z>XY^@w$fb%7 From 22865c010a5edcd084863d2c777e272bd456c458 Mon Sep 17 00:00:00 2001 From: Moka <54149968+MokaStitcher@users.noreply.github.com> Date: Sat, 26 Oct 2024 23:16:37 +0200 Subject: [PATCH 04/25] fix oversight with save migration (#4731) --- src/system/pokemon-data.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/system/pokemon-data.ts b/src/system/pokemon-data.ts index c8756e4dd7f..485c1d90c1d 100644 --- a/src/system/pokemon-data.ts +++ b/src/system/pokemon-data.ts @@ -118,8 +118,8 @@ export default class PokemonData { // Deprecated, but needed for session data migration this.natureOverride = source.natureOverride; - this.mysteryEncounterPokemonData = new CustomPokemonData(source.mysteryEncounterPokemonData); - this.fusionMysteryEncounterPokemonData = new CustomPokemonData(source.fusionMysteryEncounterPokemonData); + this.mysteryEncounterPokemonData = source.mysteryEncounterPokemonData ? new CustomPokemonData(source.mysteryEncounterPokemonData) : null; + this.fusionMysteryEncounterPokemonData = source.fusionMysteryEncounterPokemonData ? new CustomPokemonData(source.fusionMysteryEncounterPokemonData) : null; if (!forHistory) { this.boss = (source instanceof EnemyPokemon && !!source.bossSegments) || (!this.player && !!source.boss); From a9a73863e89caf979f28c4e97be61ff160a0116a Mon Sep 17 00:00:00 2001 From: Frederico Santos Date: Sat, 26 Oct 2024 22:43:15 +0100 Subject: [PATCH 05/25] Comment out startGame call on manifest fetch failure --- src/main.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main.ts b/src/main.ts index 8a69d3f1b72..d9472fce50c 100644 --- a/src/main.ts +++ b/src/main.ts @@ -103,7 +103,7 @@ fetch("/manifest.json") game["manifest"] = jsonResponse.manifest; }).catch(() => { // Manifest not found (likely local build) - startGame(); + // startGame(); }); export default game; From 9a56f080db2405010240ff0273328973ec3c78b5 Mon Sep 17 00:00:00 2001 From: innerthunder <168692175+innerthunder@users.noreply.github.com> Date: Sat, 26 Oct 2024 19:34:48 -0700 Subject: [PATCH 06/25] [Hotfix] Fix status damage triggering before berry usage (#4732) * Fix status damage triggering before berry usage * Bump version number * Revert "Bump version number" This reverts commit 64b194f5a7c7507b4253c96ed5b9cc028bc80ab6. * Bump version number for real this time --- package-lock.json | 4 ++-- package.json | 2 +- src/phases/turn-start-phase.ts | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/package-lock.json b/package-lock.json index be946306471..bbe52272f92 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "pokemon-rogue-battle", - "version": "1.1.0", + "version": "1.1.1", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "pokemon-rogue-battle", - "version": "1.1.0", + "version": "1.1.1", "hasInstallScript": true, "dependencies": { "@material/material-color-utilities": "^0.2.7", diff --git a/package.json b/package.json index a31296d1644..4666ffb7587 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "pokemon-rogue-battle", "private": true, - "version": "1.1.0", + "version": "1.1.1", "type": "module", "scripts": { "start": "vite", diff --git a/src/phases/turn-start-phase.ts b/src/phases/turn-start-phase.ts index 497d449912f..dc3ee3f660a 100644 --- a/src/phases/turn-start-phase.ts +++ b/src/phases/turn-start-phase.ts @@ -205,11 +205,11 @@ export class TurnStartPhase extends FieldPhase { } this.scene.pushPhase(new WeatherEffectPhase(this.scene)); + this.scene.pushPhase(new BerryPhase(this.scene)); /** Add a new phase to check who should be taking status damage */ this.scene.pushPhase(new CheckStatusEffectPhase(this.scene, moveOrder)); - this.scene.pushPhase(new BerryPhase(this.scene)); this.scene.pushPhase(new TurnEndPhase(this.scene)); /** From dfb42e44a695040c2a7ae9b76e8564572ed89c0d Mon Sep 17 00:00:00 2001 From: PigeonBar <56974298+PigeonBar@users.noreply.github.com> Date: Sun, 27 Oct 2024 00:04:57 -0400 Subject: [PATCH 07/25] [Hotfix] Fix Eternatus egg tier (#4734) --- package-lock.json | 4 ++-- package.json | 2 +- src/data/balance/species-egg-tiers.ts | 2 +- src/data/egg.ts | 10 ++++++--- src/test/eggs/egg.test.ts | 30 ++++++++++++++++++++++++++- 5 files changed, 40 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index bbe52272f92..0c36f9cfee9 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "pokemon-rogue-battle", - "version": "1.1.1", + "version": "1.1.2", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "pokemon-rogue-battle", - "version": "1.1.1", + "version": "1.1.2", "hasInstallScript": true, "dependencies": { "@material/material-color-utilities": "^0.2.7", diff --git a/package.json b/package.json index 4666ffb7587..aef6e7b2ba0 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "pokemon-rogue-battle", "private": true, - "version": "1.1.1", + "version": "1.1.2", "type": "module", "scripts": { "start": "vite", diff --git a/src/data/balance/species-egg-tiers.ts b/src/data/balance/species-egg-tiers.ts index cd266dfcf54..27baa18151a 100644 --- a/src/data/balance/species-egg-tiers.ts +++ b/src/data/balance/species-egg-tiers.ts @@ -497,7 +497,7 @@ export const speciesEggTiers = { [Species.DREEPY]: EggTier.RARE, [Species.ZACIAN]: EggTier.LEGENDARY, [Species.ZAMAZENTA]: EggTier.LEGENDARY, - [Species.ETERNATUS]: EggTier.COMMON, + [Species.ETERNATUS]: EggTier.LEGENDARY, [Species.KUBFU]: EggTier.EPIC, [Species.ZARUDE]: EggTier.EPIC, [Species.REGIELEKI]: EggTier.EPIC, diff --git a/src/data/egg.ts b/src/data/egg.ts index 0f88c53b748..f7d109dfa62 100644 --- a/src/data/egg.ts +++ b/src/data/egg.ts @@ -544,11 +544,15 @@ export class Egg { //// } -export function getLegendaryGachaSpeciesForTimestamp(scene: BattleScene, timestamp: number): Species { - const legendarySpecies = Object.entries(speciesEggTiers) +export function getValidLegendaryGachaSpecies() : Species[] { + return Object.entries(speciesEggTiers) .filter(s => s[1] === EggTier.LEGENDARY) .map(s => parseInt(s[0])) - .filter(s => getPokemonSpecies(s).isObtainable()); + .filter(s => getPokemonSpecies(s).isObtainable() && s !== Species.ETERNATUS); +} + +export function getLegendaryGachaSpeciesForTimestamp(scene: BattleScene, timestamp: number): Species { + const legendarySpecies = getValidLegendaryGachaSpecies(); let ret: Species; diff --git a/src/test/eggs/egg.test.ts b/src/test/eggs/egg.test.ts index 6f57af63e6b..aebb196ff5e 100644 --- a/src/test/eggs/egg.test.ts +++ b/src/test/eggs/egg.test.ts @@ -1,4 +1,7 @@ -import { Egg, getLegendaryGachaSpeciesForTimestamp } from "#app/data/egg"; +import { speciesEggTiers } from "#app/data/balance/species-egg-tiers"; +import { speciesStarterCosts } from "#app/data/balance/starters"; +import { Egg, getLegendaryGachaSpeciesForTimestamp, getValidLegendaryGachaSpecies } from "#app/data/egg"; +import { allSpecies } from "#app/data/pokemon-species"; import { EggSourceType } from "#app/enums/egg-source-types"; import { EggTier } from "#app/enums/egg-type"; import { VariantTier } from "#app/enums/variant-tier"; @@ -64,6 +67,12 @@ describe("Egg Generation Tests", () => { expect(gachaSpeciesCount).toBeGreaterThan(0.4 * EGG_HATCH_COUNT); expect(gachaSpeciesCount).toBeLessThan(0.6 * EGG_HATCH_COUNT); }); + it("should never be allowed to generate Eternatus via the legendary gacha", () => { + const validLegendaryGachaSpecies = getValidLegendaryGachaSpecies(); + expect(validLegendaryGachaSpecies.every(s => speciesEggTiers[s] === EggTier.LEGENDARY)).toBe(true); + expect(validLegendaryGachaSpecies.every(s => allSpecies[s].isObtainable())).toBe(true); + expect(validLegendaryGachaSpecies.includes(Species.ETERNATUS)).toBe(false); + }); it("should hatch an Arceus. Set from species", () => { const scene = game.scene; const expectedSpecies = Species.ARCEUS; @@ -376,4 +385,23 @@ describe("Egg Generation Tests", () => { expect(diffShiny).toBe(true); expect(diffAbility).toBe(true); }); + + // For now, we are using this test to detect oversights in egg tiers. + // Delete this test if the balance team rebalances species costs independently of egg tiers. + it("should have correct egg tiers based on species costs", () => { + const getExpectedEggTier = (starterCost) => + starterCost <= 3 ? EggTier.COMMON + : starterCost <= 5 ? EggTier.RARE + : starterCost <= 7 ? EggTier.EPIC + : EggTier.LEGENDARY; + + allSpecies.forEach(pokemonSpecies => { + const rootSpecies = pokemonSpecies.getRootSpeciesId(); + const speciesCost = speciesStarterCosts[rootSpecies]; + const expectedEggTier = getExpectedEggTier(speciesCost); + const actualEggTier = speciesEggTiers[rootSpecies]; + + expect(actualEggTier).toBe(expectedEggTier); + }); + }); }); From 41380b39b950f9eeb49b31a48c0e7f5a25232de3 Mon Sep 17 00:00:00 2001 From: Moka <54149968+MokaStitcher@users.noreply.github.com> Date: Sun, 27 Oct 2024 21:32:30 +0100 Subject: [PATCH 08/25] [Hotfix] Fix manifest getting loaded before the game is initialized (#4739) * Fix manifest being used before the game is initialized * bump game version * make manifest fix more future proof * Revert "make manifest fix more future proof" This reverts commit 32591b35d0438dac99eb2ea29cd6757e3086008a. * fix locales path for offline builds --- package-lock.json | 4 ++-- package.json | 2 +- src/main.ts | 10 ++++++---- src/plugins/i18n.ts | 2 +- 4 files changed, 10 insertions(+), 8 deletions(-) diff --git a/package-lock.json b/package-lock.json index 0c36f9cfee9..5c134ae70dd 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "pokemon-rogue-battle", - "version": "1.1.2", + "version": "1.1.3", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "pokemon-rogue-battle", - "version": "1.1.2", + "version": "1.1.3", "hasInstallScript": true, "dependencies": { "@material/material-color-utilities": "^0.2.7", diff --git a/package.json b/package.json index aef6e7b2ba0..4a8743745b9 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "pokemon-rogue-battle", "private": true, - "version": "1.1.2", + "version": "1.1.3", "type": "module", "scripts": { "start": "vite", diff --git a/src/main.ts b/src/main.ts index d25ff08222d..993bd1018ae 100644 --- a/src/main.ts +++ b/src/main.ts @@ -44,7 +44,7 @@ document.fonts.load("16px emerald").then(() => document.fonts.load("10px pkmnems let game; -const startGame = async () => { +const startGame = async (manifest?: any) => { await initI18n(); const LoadingScene = (await import("./loading-scene")).LoadingScene; const BattleScene = (await import("./battle-scene")).default; @@ -94,16 +94,18 @@ const startGame = async () => { version: version }); game.sound.pauseOnBlur = false; + if (manifest) { + game["manifest"] = manifest; + } }; fetch("/manifest.json") .then(res => res.json()) .then(jsonResponse => { - startGame(); - game["manifest"] = jsonResponse.manifest; + startGame(jsonResponse.manifest); }).catch(() => { // Manifest not found (likely local build) - // startGame(); + startGame(); }); export default game; diff --git a/src/plugins/i18n.ts b/src/plugins/i18n.ts index d24484bbf9d..91a67b9414c 100644 --- a/src/plugins/i18n.ts +++ b/src/plugins/i18n.ts @@ -164,7 +164,7 @@ export async function initI18n(): Promise { } else { fileName = camelCaseToKebabCase(ns); } - return `/locales/${lng}/${fileName}.json?v=${pkg.version}`; + return `./locales/${lng}/${fileName}.json?v=${pkg.version}`; }, }, defaultNS: "menu", From 33f5f4c33ba82621a5e95dcbf02092b8757569af Mon Sep 17 00:00:00 2001 From: chaosgrimmon <31082757+chaosgrimmon@users.noreply.github.com> Date: Sun, 27 Oct 2024 18:23:09 -0400 Subject: [PATCH 09/25] [Sprite] Hotfix cut off Binacle sprite (#4741) * Trim 688.json duration * Trim 688.json duration * Fix cut off Binacle back * Fix cut off shiny Binacle back * Bump version * Bump version * Revert cutting off hair * Revert cutting off hair * Remove trailing comma * Remove trailing comma --- package-lock.json | 4 +- package.json | 2 +- public/images/pokemon/688.json | 3 +- public/images/pokemon/back/688.json | 58 +++++++---------------- public/images/pokemon/back/shiny/688.json | 58 +++++++---------------- public/images/pokemon/shiny/688.json | 3 +- 6 files changed, 41 insertions(+), 87 deletions(-) diff --git a/package-lock.json b/package-lock.json index 5c134ae70dd..a8b0718bb15 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "pokemon-rogue-battle", - "version": "1.1.3", + "version": "1.1.4", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "pokemon-rogue-battle", - "version": "1.1.3", + "version": "1.1.4", "hasInstallScript": true, "dependencies": { "@material/material-color-utilities": "^0.2.7", diff --git a/package.json b/package.json index 4a8743745b9..17a66e32286 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "pokemon-rogue-battle", "private": true, - "version": "1.1.3", + "version": "1.1.4", "type": "module", "scripts": { "start": "vite", diff --git a/public/images/pokemon/688.json b/public/images/pokemon/688.json index 069d176730e..3d9aa902a54 100644 --- a/public/images/pokemon/688.json +++ b/public/images/pokemon/688.json @@ -5,8 +5,7 @@ "rotated": false, "trimmed": false, "spriteSourceSize": { "x": 0, "y": 0, "w": 64, "h": 63 }, - "sourceSize": { "w": 64, "h": 63 }, - "duration": 100 + "sourceSize": { "w": 64, "h": 63 } } ], "meta": { diff --git a/public/images/pokemon/back/688.json b/public/images/pokemon/back/688.json index 872fbc1f9db..d9f30db34a8 100644 --- a/public/images/pokemon/back/688.json +++ b/public/images/pokemon/back/688.json @@ -1,41 +1,19 @@ -{ - "textures": [ - { - "image": "688.png", - "format": "RGBA8888", - "size": { - "w": 52, - "h": 52 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 41, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 41, - "h": 52 - }, - "frame": { - "x": 0, - "y": 0, - "w": 41, - "h": 52 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:ea462f2b1b46327e3b8fcb7ec5e44f08:2d2598cc03dec73182dbea237ad83b34:176060351d0044923af938ba7932a6ef$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 0, "y": 0, "w": 51, "h": 65 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 51, "h": 65 }, + "sourceSize": { "w": 51, "h": 65 } + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.7-dev", + "image": "688.png", + "format": "I8", + "size": { "w": 51, "h": 65 }, + "scale": "1" + } } diff --git a/public/images/pokemon/back/shiny/688.json b/public/images/pokemon/back/shiny/688.json index 56cf47aab5a..d9f30db34a8 100644 --- a/public/images/pokemon/back/shiny/688.json +++ b/public/images/pokemon/back/shiny/688.json @@ -1,41 +1,19 @@ -{ - "textures": [ - { - "image": "688.png", - "format": "RGBA8888", - "size": { - "w": 52, - "h": 52 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 41, - "h": 52 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 41, - "h": 52 - }, - "frame": { - "x": 0, - "y": 0, - "w": 41, - "h": 52 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:0261b6c9242bba728fcfbfc515875b27:de0d9ddceed9311b33ae50ba86e969d1:176060351d0044923af938ba7932a6ef$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 0, "y": 0, "w": 51, "h": 65 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 51, "h": 65 }, + "sourceSize": { "w": 51, "h": 65 } + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.7-dev", + "image": "688.png", + "format": "I8", + "size": { "w": 51, "h": 65 }, + "scale": "1" + } } diff --git a/public/images/pokemon/shiny/688.json b/public/images/pokemon/shiny/688.json index 069d176730e..3d9aa902a54 100644 --- a/public/images/pokemon/shiny/688.json +++ b/public/images/pokemon/shiny/688.json @@ -5,8 +5,7 @@ "rotated": false, "trimmed": false, "spriteSourceSize": { "x": 0, "y": 0, "w": 64, "h": 63 }, - "sourceSize": { "w": 64, "h": 63 }, - "duration": 100 + "sourceSize": { "w": 64, "h": 63 } } ], "meta": { From 5797f265a415cdaabdc639bdcf9ce949f01c24f7 Mon Sep 17 00:00:00 2001 From: pom-eranian Date: Sun, 27 Oct 2024 22:32:36 -0400 Subject: [PATCH 10/25] [Sprite][hotfix] Fixed cropping on 658 static greninja and ash greninja (#4743) * [Sprite][hotfix] Fixed cropping on static greninja and ash greninja * bump version number --- package-lock.json | 4 +- package.json | 2 +- public/images/pokemon/658-ash.json | 58 ++++++------------- public/images/pokemon/658.json | 58 ++++++------------- public/images/pokemon/back/658-ash.json | 58 ++++++------------- public/images/pokemon/back/658.json | 58 ++++++------------- public/images/pokemon/back/shiny/658-ash.json | 58 ++++++------------- public/images/pokemon/back/shiny/658.json | 58 ++++++------------- public/images/pokemon/shiny/658-ash.json | 58 ++++++------------- public/images/pokemon/shiny/658.json | 58 ++++++------------- 10 files changed, 147 insertions(+), 323 deletions(-) diff --git a/package-lock.json b/package-lock.json index a8b0718bb15..17108c86ba8 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "pokemon-rogue-battle", - "version": "1.1.4", + "version": "1.1.5", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "pokemon-rogue-battle", - "version": "1.1.4", + "version": "1.1.5", "hasInstallScript": true, "dependencies": { "@material/material-color-utilities": "^0.2.7", diff --git a/package.json b/package.json index 17a66e32286..657bf7a5cd4 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "pokemon-rogue-battle", "private": true, - "version": "1.1.4", + "version": "1.1.5", "type": "module", "scripts": { "start": "vite", diff --git a/public/images/pokemon/658-ash.json b/public/images/pokemon/658-ash.json index 8fbe19f5ccb..c2b8eede9ef 100644 --- a/public/images/pokemon/658-ash.json +++ b/public/images/pokemon/658-ash.json @@ -1,41 +1,19 @@ -{ - "textures": [ - { - "image": "658-ash.png", - "format": "RGBA8888", - "size": { - "w": 79, - "h": 79 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 79, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 79, - "h": 74 - }, - "frame": { - "x": 0, - "y": 0, - "w": 79, - "h": 74 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:936f62fa49ba4d6e402bb2e2eaf2afd0:ed00ba047a44b4bf1309bc147dd000e3:bfbf521a5c7bd80bcd95a96d9789c0dd$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 0, "y": 0, "w": 79, "h": 74 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 79, "h": 74 }, + "sourceSize": { "w": 79, "h": 74 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.7-x64", + "format": "I8", + "size": { "w": 79, "h": 74 }, + "scale": "1" + } } diff --git a/public/images/pokemon/658.json b/public/images/pokemon/658.json index 4fd918e0f50..219645ec240 100644 --- a/public/images/pokemon/658.json +++ b/public/images/pokemon/658.json @@ -1,41 +1,19 @@ -{ - "textures": [ - { - "image": "658.png", - "format": "RGBA8888", - "size": { - "w": 75, - "h": 75 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 75, - "h": 65 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 75, - "h": 65 - }, - "frame": { - "x": 0, - "y": 0, - "w": 75, - "h": 65 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:e0b10df331bd4ce6760edab61dee144b:061561c45beff89a92bf0158d065204f:5affcab976148657d36bf4ff3410f92d$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 0, "y": 0, "w": 85, "h": 67 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 85, "h": 67 }, + "sourceSize": { "w": 85, "h": 67 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.7-x64", + "format": "I8", + "size": { "w": 85, "h": 67 }, + "scale": "1" + } } diff --git a/public/images/pokemon/back/658-ash.json b/public/images/pokemon/back/658-ash.json index 4ddab1765b2..51a722070b3 100644 --- a/public/images/pokemon/back/658-ash.json +++ b/public/images/pokemon/back/658-ash.json @@ -1,41 +1,19 @@ -{ - "textures": [ - { - "image": "658-ash.png", - "format": "RGBA8888", - "size": { - "w": 73, - "h": 73 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 73, - "h": 69 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 73, - "h": 69 - }, - "frame": { - "x": 0, - "y": 0, - "w": 73, - "h": 69 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:4f38801bb3afeda5faff04bdcf6a666f:0c78ce2715e7510bf55da0a92b42661c:bfbf521a5c7bd80bcd95a96d9789c0dd$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 0, "y": 0, "w": 73, "h": 73 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 73, "h": 73 }, + "sourceSize": { "w": 73, "h": 73 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.7-x64", + "format": "I8", + "size": { "w": 73, "h": 73 }, + "scale": "1" + } } diff --git a/public/images/pokemon/back/658.json b/public/images/pokemon/back/658.json index 119002876a6..050b63e3592 100644 --- a/public/images/pokemon/back/658.json +++ b/public/images/pokemon/back/658.json @@ -1,41 +1,19 @@ -{ - "textures": [ - { - "image": "658.png", - "format": "RGBA8888", - "size": { - "w": 77, - "h": 77 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 77, - "h": 65 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 77, - "h": 65 - }, - "frame": { - "x": 0, - "y": 0, - "w": 77, - "h": 65 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:acdb9925f3f23b947504eec7cc28c92d:1a13d9d418f6c107bb9e5d621d9154bb:5affcab976148657d36bf4ff3410f92d$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 0, "y": 0, "w": 77, "h": 77 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 77, "h": 77 }, + "sourceSize": { "w": 77, "h": 77 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.7-x64", + "format": "I8", + "size": { "w": 77, "h": 77 }, + "scale": "1" + } } diff --git a/public/images/pokemon/back/shiny/658-ash.json b/public/images/pokemon/back/shiny/658-ash.json index a796ad08246..51a722070b3 100644 --- a/public/images/pokemon/back/shiny/658-ash.json +++ b/public/images/pokemon/back/shiny/658-ash.json @@ -1,41 +1,19 @@ -{ - "textures": [ - { - "image": "658-ash.png", - "format": "RGBA8888", - "size": { - "w": 73, - "h": 73 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 73, - "h": 69 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 73, - "h": 69 - }, - "frame": { - "x": 0, - "y": 0, - "w": 73, - "h": 69 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:d474b821316a87dfe09b397bdc2db5ef:497de0c2ec59ceba163e870b3226c76c:bfbf521a5c7bd80bcd95a96d9789c0dd$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 0, "y": 0, "w": 73, "h": 73 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 73, "h": 73 }, + "sourceSize": { "w": 73, "h": 73 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.7-x64", + "format": "I8", + "size": { "w": 73, "h": 73 }, + "scale": "1" + } } diff --git a/public/images/pokemon/back/shiny/658.json b/public/images/pokemon/back/shiny/658.json index cc5d3c5b9ff..050b63e3592 100644 --- a/public/images/pokemon/back/shiny/658.json +++ b/public/images/pokemon/back/shiny/658.json @@ -1,41 +1,19 @@ -{ - "textures": [ - { - "image": "658.png", - "format": "RGBA8888", - "size": { - "w": 77, - "h": 77 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 77, - "h": 65 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 77, - "h": 65 - }, - "frame": { - "x": 0, - "y": 0, - "w": 77, - "h": 65 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:5891f87a78022cde3402e7d9714cc7bf:756360084290e39c139e3fef91c81759:5affcab976148657d36bf4ff3410f92d$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 0, "y": 0, "w": 77, "h": 77 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 77, "h": 77 }, + "sourceSize": { "w": 77, "h": 77 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.7-x64", + "format": "I8", + "size": { "w": 77, "h": 77 }, + "scale": "1" + } } diff --git a/public/images/pokemon/shiny/658-ash.json b/public/images/pokemon/shiny/658-ash.json index 7ac419b1686..c2b8eede9ef 100644 --- a/public/images/pokemon/shiny/658-ash.json +++ b/public/images/pokemon/shiny/658-ash.json @@ -1,41 +1,19 @@ -{ - "textures": [ - { - "image": "658-ash.png", - "format": "RGBA8888", - "size": { - "w": 79, - "h": 79 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 79, - "h": 74 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 79, - "h": 74 - }, - "frame": { - "x": 0, - "y": 0, - "w": 79, - "h": 74 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:3dd081ba5490f090a73de8423aac2f6b:f088fafaea755476f2abf488e7340cab:bfbf521a5c7bd80bcd95a96d9789c0dd$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 0, "y": 0, "w": 79, "h": 74 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 79, "h": 74 }, + "sourceSize": { "w": 79, "h": 74 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.7-x64", + "format": "I8", + "size": { "w": 79, "h": 74 }, + "scale": "1" + } } diff --git a/public/images/pokemon/shiny/658.json b/public/images/pokemon/shiny/658.json index 92f9b29175c..219645ec240 100644 --- a/public/images/pokemon/shiny/658.json +++ b/public/images/pokemon/shiny/658.json @@ -1,41 +1,19 @@ -{ - "textures": [ - { - "image": "658.png", - "format": "RGBA8888", - "size": { - "w": 75, - "h": 75 - }, - "scale": 1, - "frames": [ - { - "filename": "0001.png", - "rotated": false, - "trimmed": false, - "sourceSize": { - "w": 75, - "h": 65 - }, - "spriteSourceSize": { - "x": 0, - "y": 0, - "w": 75, - "h": 65 - }, - "frame": { - "x": 0, - "y": 0, - "w": 75, - "h": 65 - } - } - ] - } - ], - "meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "3.0", - "smartupdate": "$TexturePacker:SmartUpdate:be07c062265a19e890f1e2d2d1b5527d:ad4583a5a0498c496e9a93574c55ee03:5affcab976148657d36bf4ff3410f92d$" - } +{ "frames": [ + { + "filename": "0001.png", + "frame": { "x": 0, "y": 0, "w": 85, "h": 67 }, + "rotated": false, + "trimmed": false, + "spriteSourceSize": { "x": 0, "y": 0, "w": 85, "h": 67 }, + "sourceSize": { "w": 85, "h": 67 }, + "duration": 100 + } + ], + "meta": { + "app": "https://www.aseprite.org/", + "version": "1.3.7-x64", + "format": "I8", + "size": { "w": 85, "h": 67 }, + "scale": "1" + } } From b4cc9d7892a7d8b548c857f3acca40d5cf5defba Mon Sep 17 00:00:00 2001 From: innerthunder <168692175+innerthunder@users.noreply.github.com> Date: Mon, 28 Oct 2024 06:02:10 -0700 Subject: [PATCH 11/25] [Hotfix] Fix crash when Mist would block a stat drop (#4746) * Fix crash when Mist would block a stat drop * Bump version * Bump version (again) --- package-lock.json | 4 +-- package.json | 2 +- src/data/arena-tag.ts | 1 + src/phases/stat-stage-change-phase.ts | 2 +- src/test/moves/mist.test.ts | 49 +++++++++++++++++++++++++++ 5 files changed, 54 insertions(+), 4 deletions(-) create mode 100644 src/test/moves/mist.test.ts diff --git a/package-lock.json b/package-lock.json index 17108c86ba8..9e512884922 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1,12 +1,12 @@ { "name": "pokemon-rogue-battle", - "version": "1.1.5", + "version": "1.1.6", "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "pokemon-rogue-battle", - "version": "1.1.5", + "version": "1.1.6", "hasInstallScript": true, "dependencies": { "@material/material-color-utilities": "^0.2.7", diff --git a/package.json b/package.json index 657bf7a5cd4..f106fb1a773 100644 --- a/package.json +++ b/package.json @@ -1,7 +1,7 @@ { "name": "pokemon-rogue-battle", "private": true, - "version": "1.1.5", + "version": "1.1.6", "type": "module", "scripts": { "start": "vite", diff --git a/src/data/arena-tag.ts b/src/data/arena-tag.ts index d2c95b7ccdf..43de6e02dcb 100644 --- a/src/data/arena-tag.ts +++ b/src/data/arena-tag.ts @@ -126,6 +126,7 @@ export class MistTag extends ArenaTag { * Cancels the lowering of stats * @param arena the {@linkcode Arena} containing this effect * @param simulated `true` if the effect should be applied quietly + * @param attacker the {@linkcode Pokemon} using a move into this effect. * @param cancelled a {@linkcode BooleanHolder} whose value is set to `true` * to flag the stat reduction as cancelled * @returns `true` if a stat reduction was cancelled; `false` otherwise diff --git a/src/phases/stat-stage-change-phase.ts b/src/phases/stat-stage-change-phase.ts index 2d4b3ce6c6f..ce6ebea2442 100644 --- a/src/phases/stat-stage-change-phase.ts +++ b/src/phases/stat-stage-change-phase.ts @@ -65,7 +65,7 @@ export class StatStageChangePhase extends PokemonPhase { if (!this.selfTarget && stages.value < 0) { // TODO: add a reference to the source of the stat change to fix Infiltrator interaction - this.scene.arena.applyTagsForSide(MistTag, pokemon.isPlayer() ? ArenaTagSide.PLAYER : ArenaTagSide.ENEMY, false, null, false, cancelled); + this.scene.arena.applyTagsForSide(MistTag, pokemon.isPlayer() ? ArenaTagSide.PLAYER : ArenaTagSide.ENEMY, false, null, cancelled); } if (!cancelled.value && !this.selfTarget && stages.value < 0) { diff --git a/src/test/moves/mist.test.ts b/src/test/moves/mist.test.ts new file mode 100644 index 00000000000..cd338f79412 --- /dev/null +++ b/src/test/moves/mist.test.ts @@ -0,0 +1,49 @@ +import { Stat } from "#enums/stat"; +import { Abilities } from "#enums/abilities"; +import { Moves } from "#enums/moves"; +import { Species } from "#enums/species"; +import GameManager from "#test/utils/gameManager"; +import Phaser from "phaser"; +import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; + +describe("Moves - Mist", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + + beforeAll(() => { + phaserGame = new Phaser.Game({ + type: Phaser.HEADLESS, + }); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); + + beforeEach(() => { + game = new GameManager(phaserGame); + game.override + .moveset([ Moves.MIST, Moves.SPLASH ]) + .ability(Abilities.BALL_FETCH) + .battleType("double") + .disableCrits() + .enemySpecies(Species.SNORLAX) + .enemyAbility(Abilities.BALL_FETCH) + .enemyMoveset(Moves.GROWL); + }); + + it("should prevent the user's side from having stats lowered", async () => { + await game.classicMode.startBattle([ Species.MAGIKARP, Species.FEEBAS ]); + + const playerPokemon = game.scene.getPlayerField(); + + game.move.select(Moves.MIST, 0); + game.move.select(Moves.SPLASH, 1); + + await game.phaseInterceptor.to("BerryPhase"); + + playerPokemon.forEach(p => expect(p.getStatStage(Stat.ATK)).toBe(0)); + }); + + it.todo("should be ignored by opponents with Infiltrator"); +}); From 3241332a3ce0e4307e196d29de947dc5a0d6345d Mon Sep 17 00:00:00 2001 From: PrabbyDD <147005742+PrabbyDD@users.noreply.github.com> Date: Mon, 28 Oct 2024 13:49:04 -0700 Subject: [PATCH 12/25] [Ability] Implementing Friend Guard (#4718) * implementing friend guard ability * Update src/data/ability.ts Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> * Update src/data/ability.ts Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> * Update src/data/ability.ts Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> * Update src/test/abilities/friend_guard.test.ts Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> * Update src/field/pokemon.ts Co-authored-by: innerthunder <168692175+innerthunder@users.noreply.github.com> * more tests and fixing other issues * more tests and fixing other issues * Update Friend Guard test with damage mocks --------- Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> Co-authored-by: innerthunder <168692175+innerthunder@users.noreply.github.com> Co-authored-by: innerthunder --- src/data/ability.ts | 28 +++++- src/field/pokemon.ts | 8 +- src/test/abilities/friend_guard.test.ts | 120 ++++++++++++++++++++++++ 3 files changed, 153 insertions(+), 3 deletions(-) create mode 100644 src/test/abilities/friend_guard.test.ts diff --git a/src/data/ability.ts b/src/data/ability.ts index 01e99966ff8..58824603bc3 100644 --- a/src/data/ability.ts +++ b/src/data/ability.ts @@ -330,6 +330,30 @@ export class ReceivedMoveDamageMultiplierAbAttr extends PreDefendAbAttr { } } +/** + * Reduces the damage dealt to an allied Pokemon. Used by Friend Guard. + * @see {@linkcode applyPreDefend} + */ +export class AlliedFieldDamageReductionAbAttr extends PreDefendAbAttr { + private damageMultiplier: number; + + constructor(damageMultiplier: number) { + super(); + this.damageMultiplier = damageMultiplier; + } + + /** + * Handles the damage reduction + * @param args + * - `[0]` {@linkcode Utils.NumberHolder} - The damage being dealt + */ + override applyPreDefend(_pokemon: Pokemon, _passive: boolean, _simulated: boolean, _attacker: Pokemon, _move: Move, _cancelled: Utils.BooleanHolder, args: any[]): boolean { + const damage = args[0] as Utils.NumberHolder; + damage.value = Utils.toDmgValue(damage.value * this.damageMultiplier); + return true; + } +} + export class ReceivedTypeDamageMultiplierAbAttr extends ReceivedMoveDamageMultiplierAbAttr { constructor(moveType: Type, damageMultiplier: number) { super((target, user, move) => user.getMoveType(move) === moveType, damageMultiplier); @@ -5310,8 +5334,8 @@ export function initAbilities() { new Ability(Abilities.HEALER, 5) .conditionalAttr(pokemon => pokemon.getAlly() && Utils.randSeedInt(10) < 3, PostTurnResetStatusAbAttr, true), new Ability(Abilities.FRIEND_GUARD, 5) - .ignorable() - .unimplemented(), + .attr(AlliedFieldDamageReductionAbAttr, 0.75) + .ignorable(), new Ability(Abilities.WEAK_ARMOR, 5) .attr(PostDefendStatStageChangeAbAttr, (target, user, move) => move.category === MoveCategory.PHYSICAL, Stat.DEF, -1) .attr(PostDefendStatStageChangeAbAttr, (target, user, move) => move.category === MoveCategory.PHYSICAL, Stat.SPD, 2), diff --git a/src/field/pokemon.ts b/src/field/pokemon.ts index 4cb8390d4f4..278a28937ef 100644 --- a/src/field/pokemon.ts +++ b/src/field/pokemon.ts @@ -22,7 +22,7 @@ import { reverseCompatibleTms, tmSpecies, tmPoolTiers } from "#app/data/balance/ import { BattlerTag, BattlerTagLapseType, EncoreTag, GroundedTag, HighestStatBoostTag, SubstituteTag, TypeImmuneTag, getBattlerTag, SemiInvulnerableTag, TypeBoostTag, MoveRestrictionBattlerTag, ExposedTag, DragonCheerTag, CritBoostTag, TrappedTag, TarShotTag, AutotomizedTag, PowerTrickTag } from "../data/battler-tags"; import { WeatherType } from "#app/data/weather"; import { ArenaTagSide, NoCritTag, WeakenMoveScreenTag } from "#app/data/arena-tag"; -import { Ability, AbAttr, StatMultiplierAbAttr, BlockCritAbAttr, BonusCritAbAttr, BypassBurnDamageReductionAbAttr, FieldPriorityMoveImmunityAbAttr, IgnoreOpponentStatStagesAbAttr, MoveImmunityAbAttr, PreDefendFullHpEndureAbAttr, ReceivedMoveDamageMultiplierAbAttr, StabBoostAbAttr, StatusEffectImmunityAbAttr, TypeImmunityAbAttr, WeightMultiplierAbAttr, allAbilities, applyAbAttrs, applyStatMultiplierAbAttrs, applyPreApplyBattlerTagAbAttrs, applyPreAttackAbAttrs, applyPreDefendAbAttrs, applyPreSetStatusAbAttrs, UnsuppressableAbilityAbAttr, SuppressFieldAbilitiesAbAttr, NoFusionAbilityAbAttr, MultCritAbAttr, IgnoreTypeImmunityAbAttr, DamageBoostAbAttr, IgnoreTypeStatusEffectImmunityAbAttr, ConditionalCritAbAttr, applyFieldStatMultiplierAbAttrs, FieldMultiplyStatAbAttr, AddSecondStrikeAbAttr, UserFieldStatusEffectImmunityAbAttr, UserFieldBattlerTagImmunityAbAttr, BattlerTagImmunityAbAttr, MoveTypeChangeAbAttr, FullHpResistTypeAbAttr, applyCheckTrappedAbAttrs, CheckTrappedAbAttr, PostSetStatusAbAttr, applyPostSetStatusAbAttrs, InfiltratorAbAttr } from "#app/data/ability"; +import { Ability, AbAttr, StatMultiplierAbAttr, BlockCritAbAttr, BonusCritAbAttr, BypassBurnDamageReductionAbAttr, FieldPriorityMoveImmunityAbAttr, IgnoreOpponentStatStagesAbAttr, MoveImmunityAbAttr, PreDefendFullHpEndureAbAttr, ReceivedMoveDamageMultiplierAbAttr, StabBoostAbAttr, StatusEffectImmunityAbAttr, TypeImmunityAbAttr, WeightMultiplierAbAttr, allAbilities, applyAbAttrs, applyStatMultiplierAbAttrs, applyPreApplyBattlerTagAbAttrs, applyPreAttackAbAttrs, applyPreDefendAbAttrs, applyPreSetStatusAbAttrs, UnsuppressableAbilityAbAttr, SuppressFieldAbilitiesAbAttr, NoFusionAbilityAbAttr, MultCritAbAttr, IgnoreTypeImmunityAbAttr, DamageBoostAbAttr, IgnoreTypeStatusEffectImmunityAbAttr, ConditionalCritAbAttr, applyFieldStatMultiplierAbAttrs, FieldMultiplyStatAbAttr, AddSecondStrikeAbAttr, UserFieldStatusEffectImmunityAbAttr, UserFieldBattlerTagImmunityAbAttr, BattlerTagImmunityAbAttr, MoveTypeChangeAbAttr, FullHpResistTypeAbAttr, applyCheckTrappedAbAttrs, CheckTrappedAbAttr, PostSetStatusAbAttr, applyPostSetStatusAbAttrs, InfiltratorAbAttr, AlliedFieldDamageReductionAbAttr } from "#app/data/ability"; import PokemonData from "#app/system/pokemon-data"; import { BattlerIndex } from "#app/battle"; import { Mode } from "#app/ui/ui"; @@ -2667,9 +2667,15 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { this.scene.applyModifiers(EnemyDamageReducerModifier, false, damage); } + /** Apply this Pokemon's post-calc defensive modifiers (e.g. Fur Coat) */ if (!ignoreAbility) { applyPreDefendAbAttrs(ReceivedMoveDamageMultiplierAbAttr, this, source, move, cancelled, simulated, damage); + + /** Additionally apply friend guard damage reduction if ally has it. */ + if (this.scene.currentBattle.double && this.getAlly()?.isActive(true)) { + applyPreDefendAbAttrs(AlliedFieldDamageReductionAbAttr, this.getAlly(), source, move, cancelled, simulated, damage); + } } // This attribute may modify damage arbitrarily, so be careful about changing its order of application. diff --git a/src/test/abilities/friend_guard.test.ts b/src/test/abilities/friend_guard.test.ts new file mode 100644 index 00000000000..4ce64468c43 --- /dev/null +++ b/src/test/abilities/friend_guard.test.ts @@ -0,0 +1,120 @@ +import { Moves } from "#enums/moves"; +import { Species } from "#enums/species"; +import { Abilities } from "#enums/abilities"; +import GameManager from "#test/utils/gameManager"; +import Phaser from "phaser"; +import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest"; +import { BattlerIndex } from "#app/battle"; +import { allAbilities } from "#app/data/ability"; +import { allMoves, MoveCategory } from "#app/data/move"; + +describe("Moves - Friend Guard", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + + beforeAll(() => { + phaserGame = new Phaser.Game({ + type: Phaser.HEADLESS, + }); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); + + beforeEach(() => { + game = new GameManager(phaserGame); + game.override + .battleType("double") + .enemyAbility(Abilities.BALL_FETCH) + .enemyMoveset([ Moves.TACKLE, Moves.SPLASH, Moves.DRAGON_RAGE ]) + .enemySpecies(Species.SHUCKLE) + .moveset([ Moves.SPLASH ]) + .startingLevel(100); + }); + + it("should reduce damage that other allied Pokémon receive from attacks (from any Pokémon) by 25%", async () => { + await game.classicMode.startBattle([ Species.BULBASAUR, Species.CHARMANDER ]); + const [ player1, player2 ] = game.scene.getPlayerField(); + const spy = vi.spyOn(player1, "getAttackDamage"); + + const enemy1 = game.scene.getEnemyField()[0]; + + game.move.select(Moves.SPLASH); + game.move.select(Moves.SPLASH, 1); + await game.forceEnemyMove(Moves.TACKLE, BattlerIndex.PLAYER); + await game.forceEnemyMove(Moves.SPLASH); + await game.toNextTurn(); + + // Get the last return value from `getAttackDamage` + const turn1Damage = spy.mock.results[spy.mock.results.length - 1].value.damage; + // Making sure the test is controlled; turn 1 damage is equal to base damage (after rounding) + expect(turn1Damage).toBe(Math.floor(player1.getBaseDamage(enemy1, allMoves[Moves.TACKLE], MoveCategory.PHYSICAL))); + + vi.spyOn(player2, "getAbility").mockReturnValue(allAbilities[Abilities.FRIEND_GUARD]); + + game.move.select(Moves.SPLASH); + game.move.select(Moves.SPLASH, 1); + await game.forceEnemyMove(Moves.TACKLE, BattlerIndex.PLAYER); + await game.forceEnemyMove(Moves.SPLASH); + await game.toNextTurn(); + + // Get the last return value from `getAttackDamage` + const turn2Damage = spy.mock.results[spy.mock.results.length - 1].value.damage; + // With the ally's Friend Guard, damage should have been reduced from base damage by 25% + expect(turn2Damage).toBe(Math.floor(player1.getBaseDamage(enemy1, allMoves[Moves.TACKLE], MoveCategory.PHYSICAL) * 0.75)); + }); + + it("should NOT reduce damage to pokemon with friend guard", async () => { + await game.classicMode.startBattle([ Species.BULBASAUR, Species.CHARMANDER ]); + + const player2 = game.scene.getPlayerField()[1]; + const spy = vi.spyOn(player2, "getAttackDamage"); + + game.move.select(Moves.SPLASH); + game.move.select(Moves.SPLASH, 1); + await game.forceEnemyMove(Moves.TACKLE, BattlerIndex.PLAYER_2); + await game.forceEnemyMove(Moves.SPLASH); + await game.toNextTurn(); + + const turn1Damage = spy.mock.results[spy.mock.results.length - 1].value.damage; + + vi.spyOn(player2, "getAbility").mockReturnValue(allAbilities[Abilities.FRIEND_GUARD]); + + game.move.select(Moves.SPLASH); + game.move.select(Moves.SPLASH, 1); + await game.forceEnemyMove(Moves.TACKLE, BattlerIndex.PLAYER_2); + await game.forceEnemyMove(Moves.SPLASH); + await game.toNextTurn(); + + const turn2Damage = spy.mock.results[spy.mock.results.length - 1].value.damage; + expect(turn2Damage).toBe(turn1Damage); + }); + + it("should NOT reduce damage from fixed damage attacks", async () => { + await game.classicMode.startBattle([ Species.BULBASAUR, Species.CHARMANDER ]); + + const [ player1, player2 ] = game.scene.getPlayerField(); + const spy = vi.spyOn(player1, "getAttackDamage"); + + game.move.select(Moves.SPLASH); + game.move.select(Moves.SPLASH, 1); + await game.forceEnemyMove(Moves.DRAGON_RAGE, BattlerIndex.PLAYER); + await game.forceEnemyMove(Moves.SPLASH); + await game.toNextTurn(); + + const turn1Damage = spy.mock.results[spy.mock.results.length - 1].value.damage; + expect(turn1Damage).toBe(40); + + vi.spyOn(player2, "getAbility").mockReturnValue(allAbilities[Abilities.FRIEND_GUARD]); + + game.move.select(Moves.SPLASH); + game.move.select(Moves.SPLASH, 1); + await game.forceEnemyMove(Moves.DRAGON_RAGE, BattlerIndex.PLAYER); + await game.forceEnemyMove(Moves.SPLASH); + await game.toNextTurn(); + + const turn2Damage = spy.mock.results[spy.mock.results.length - 1].value.damage; + expect(turn2Damage).toBe(40); + }); +}); From 13377806ff74508e358e51f0d9cdfaed1d81ef54 Mon Sep 17 00:00:00 2001 From: AJ Fontaine <36677462+Fontbane@users.noreply.github.com> Date: Mon, 28 Oct 2024 18:58:46 -0400 Subject: [PATCH 13/25] [Refactor] Change attack type booster names to enum (#4725) --- src/modifier/modifier-type.ts | 62 ++++++++++++----------------------- 1 file changed, 21 insertions(+), 41 deletions(-) diff --git a/src/modifier/modifier-type.ts b/src/modifier/modifier-type.ts index cf2d74483f9..e68e9a06fae 100644 --- a/src/modifier/modifier-type.ts +++ b/src/modifier/modifier-type.ts @@ -502,45 +502,25 @@ export class BerryModifierType extends PokemonHeldItemModifierType implements Ge } } -function getAttackTypeBoosterItemName(type: Type) { - switch (type) { - case Type.NORMAL: - return "Silk Scarf"; - case Type.FIGHTING: - return "Black Belt"; - case Type.FLYING: - return "Sharp Beak"; - case Type.POISON: - return "Poison Barb"; - case Type.GROUND: - return "Soft Sand"; - case Type.ROCK: - return "Hard Stone"; - case Type.BUG: - return "Silver Powder"; - case Type.GHOST: - return "Spell Tag"; - case Type.STEEL: - return "Metal Coat"; - case Type.FIRE: - return "Charcoal"; - case Type.WATER: - return "Mystic Water"; - case Type.GRASS: - return "Miracle Seed"; - case Type.ELECTRIC: - return "Magnet"; - case Type.PSYCHIC: - return "Twisted Spoon"; - case Type.ICE: - return "Never-Melt Ice"; - case Type.DRAGON: - return "Dragon Fang"; - case Type.DARK: - return "Black Glasses"; - case Type.FAIRY: - return "Fairy Feather"; - } +enum AttackTypeBoosterItem { + SILK_SCARF, + BLACK_BELT, + SHARP_BEAK, + POISON_BARB, + SOFT_SAND, + HARD_STONE, + SILVER_POWDER, + SPELL_TAG, + METAL_COAT, + CHARCOAL, + MYSTIC_WATER, + MIRACLE_SEED, + MAGNET, + TWISTED_SPOON, + NEVER_MELT_ICE, + DRAGON_FANG, + BLACK_GLASSES, + FAIRY_FEATHER } export class AttackTypeBoosterModifierType extends PokemonHeldItemModifierType implements GeneratedPersistentModifierType { @@ -548,7 +528,7 @@ export class AttackTypeBoosterModifierType extends PokemonHeldItemModifierType i public boostPercent: integer; constructor(moveType: Type, boostPercent: integer) { - super("", `${getAttackTypeBoosterItemName(moveType)?.replace(/[ \-]/g, "_").toLowerCase()}`, + super("", `${AttackTypeBoosterItem[moveType]?.toLowerCase()}`, (_type, args) => new AttackTypeBoosterModifier(this, (args[0] as Pokemon).id, moveType, boostPercent)); this.moveType = moveType; @@ -556,7 +536,7 @@ export class AttackTypeBoosterModifierType extends PokemonHeldItemModifierType i } get name(): string { - return i18next.t(`modifierType:AttackTypeBoosterItem.${getAttackTypeBoosterItemName(this.moveType)?.replace(/[ \-]/g, "_").toLowerCase()}`); + return i18next.t(`modifierType:AttackTypeBoosterItem.${AttackTypeBoosterItem[this.moveType]?.toLowerCase()}`); } getDescription(scene: BattleScene): string { From 38a6bf07e3955348b797890c76c363cea7d2caed Mon Sep 17 00:00:00 2001 From: geeilhan <107366005+geeilhan@users.noreply.github.com> Date: Tue, 29 Oct 2024 16:36:24 +0100 Subject: [PATCH 14/25] [Bug] Fix enemy faint causing Frenzy moves to mishandle paralysis (#4680) * [BUG] Added frenzy reset function during move phase should move be cancelled (#4227) * Revert [P2 BUG] Fix since it does not work and is faulty * [P2 BUG] Implemented correct frenzy Tag and Movequeue reset should frenzy move fail (#4277) * Cleaned up Bug Fix using frenzyMissFunc * Added automated test case for frenzy move edge case * Improvement to frenzy move reset test case speed * Fix test * Add missing import --------- Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> --- src/phases/move-phase.ts | 6 +- src/test/phases/frenzy-move-reset.test.ts | 72 +++++++++++++++++++++++ 2 files changed, 77 insertions(+), 1 deletion(-) create mode 100644 src/test/phases/frenzy-move-reset.test.ts diff --git a/src/phases/move-phase.ts b/src/phases/move-phase.ts index a516fd8593d..5c6c339ffa5 100644 --- a/src/phases/move-phase.ts +++ b/src/phases/move-phase.ts @@ -3,7 +3,7 @@ import BattleScene from "#app/battle-scene"; import { applyAbAttrs, applyPostMoveUsedAbAttrs, applyPreAttackAbAttrs, BlockRedirectAbAttr, IncreasePpAbAttr, PokemonTypeChangeAbAttr, PostMoveUsedAbAttr, RedirectMoveAbAttr, ReduceStatusEffectDurationAbAttr } from "#app/data/ability"; import { CommonAnim } from "#app/data/battle-anims"; import { BattlerTagLapseType, CenterOfAttentionTag } from "#app/data/battler-tags"; -import { allMoves, applyMoveAttrs, BypassRedirectAttr, BypassSleepAttr, CopyMoveAttr, HealStatusEffectAttr, MoveFlags, PreMoveMessageAttr } from "#app/data/move"; +import { allMoves, applyMoveAttrs, BypassRedirectAttr, BypassSleepAttr, CopyMoveAttr, frenzyMissFunc, HealStatusEffectAttr, MoveFlags, PreMoveMessageAttr } from "#app/data/move"; import { SpeciesFormChangePreMoveTrigger } from "#app/data/pokemon-forms"; import { getStatusEffectActivationText, getStatusEffectHealText } from "#app/data/status-effect"; import { Type } from "#app/data/type"; @@ -470,6 +470,10 @@ export class MovePhase extends BattlePhase { this.scene.eventTarget.dispatchEvent(new MoveUsedEvent(this.pokemon?.id, this.move.getMove(), ppUsed)); } + if (this.cancelled && this.pokemon.summonData?.tags?.find(t => t.tagType === BattlerTagType.FRENZY)) { + frenzyMissFunc(this.pokemon, this.move.getMove()); + } + this.pokemon.pushMoveHistory({ move: Moves.NONE, result: MoveResult.FAIL }); this.pokemon.lapseTags(BattlerTagLapseType.MOVE_EFFECT); diff --git a/src/test/phases/frenzy-move-reset.test.ts b/src/test/phases/frenzy-move-reset.test.ts new file mode 100644 index 00000000000..db9ec2bfe66 --- /dev/null +++ b/src/test/phases/frenzy-move-reset.test.ts @@ -0,0 +1,72 @@ +import { BattlerIndex } from "#app/battle"; +import { Abilities } from "#enums/abilities"; +import { BattlerTagType } from "#enums/battler-tag-type"; +import { StatusEffect } from "#enums/status-effect"; +import { Moves } from "#enums/moves"; +import { Species } from "#enums/species"; +import GameManager from "#test/utils/gameManager"; +import Phaser from "phaser"; +import { afterEach, beforeAll, beforeEach, describe, it, expect } from "vitest"; + +describe("Frenzy Move Reset", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + + beforeAll(() => { + phaserGame = new Phaser.Game({ + type: Phaser.HEADLESS, + }); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); + + beforeEach(() => { + game = new GameManager(phaserGame); + game.override + .battleType("single") + .disableCrits() + .starterSpecies(Species.MAGIKARP) + .moveset(Moves.THRASH) + .statusEffect(StatusEffect.PARALYSIS) + .enemyMoveset(Moves.SPLASH) + .enemyLevel(100) + .enemySpecies(Species.SHUCKLE) + .enemyAbility(Abilities.BALL_FETCH); + }); + + /* + * Thrash (or frenzy moves in general) should not continue to run if attack fails due to paralysis + * + * This is a 3-turn Thrash test: + * 1. Thrash is selected and succeeds to hit the enemy -> Enemy Faints + * + * 2. Thrash is automatically selected but misses due to paralysis + * Note: After missing the Pokemon should stop automatically attacking + * + * 3. At the start of the 3rd turn the Player should be able to select a move/switch Pokemon/etc. + * Note: This means that BattlerTag.FRENZY is not anymore in pokemon.summonData.tags and pokemon.summonData.moveQueue is empty + * + */ + it("should cancel frenzy move if move fails turn 2", async () => { + await game.classicMode.startBattle(); + + const playerPokemon = game.scene.getPlayerPokemon()!; + + game.move.select(Moves.THRASH); + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.ENEMY ]); + await game.move.forceStatusActivation(false); + await game.toNextTurn(); + + expect(playerPokemon.summonData.moveQueue.length).toBe(2); + expect(playerPokemon.summonData.tags.some(tag => tag.tagType === BattlerTagType.FRENZY)).toBe(true); + + await game.setTurnOrder([ BattlerIndex.PLAYER, BattlerIndex.ENEMY ]); + await game.move.forceStatusActivation(true); + await game.toNextTurn(); + + expect(playerPokemon.summonData.moveQueue.length).toBe(0); + expect(playerPokemon.summonData.tags.some(tag => tag.tagType === BattlerTagType.FRENZY)).toBe(false); + }); +}); From fb2d3e45d617164eab37f4c70d30ad7cd1215e59 Mon Sep 17 00:00:00 2001 From: Mumble <171087428+frutescens@users.noreply.github.com> Date: Tue, 29 Oct 2024 10:10:37 -0700 Subject: [PATCH 15/25] [Move][Ability] Fully Implement Forest's Curse / Trick Or Treat / Mimicry (#4682) * addedType variable * basic mimicry implementation * eslint * rage * quick change * made files * added mimicry activation message * test for moves done * hahahhaha * done? for now? * laklhaflhasd * Apply suggestions from code review Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> * time to start... ughhh * reflect type * Added new message * Update src/field/pokemon.ts Co-authored-by: PigeonBar <56974298+PigeonBar@users.noreply.github.com> * Update src/data/ability.ts Co-authored-by: flx-sta <50131232+flx-sta@users.noreply.github.com> * added overrides * some checks * removed comments * Apply suggestions from code review Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> --------- Co-authored-by: frutescens Co-authored-by: NightKev <34855794+DayKev@users.noreply.github.com> Co-authored-by: PigeonBar <56974298+PigeonBar@users.noreply.github.com> Co-authored-by: flx-sta <50131232+flx-sta@users.noreply.github.com> --- src/data/ability.ts | 80 ++++++++++++++++++++++- src/data/move.ts | 23 +++---- src/field/arena.ts | 10 ++- src/field/pokemon.ts | 6 ++ src/test/abilities/mimicry.test.ts | 91 +++++++++++++++++++++++++++ src/test/moves/forests_curse.test.ts | 47 ++++++++++++++ src/test/moves/reflect_type.test.ts | 59 +++++++++++++++++ src/test/moves/trick_or_treat.test.ts | 47 ++++++++++++++ 8 files changed, 350 insertions(+), 13 deletions(-) create mode 100644 src/test/abilities/mimicry.test.ts create mode 100644 src/test/moves/forests_curse.test.ts create mode 100644 src/test/moves/reflect_type.test.ts create mode 100644 src/test/moves/trick_or_treat.test.ts diff --git a/src/data/ability.ts b/src/data/ability.ts index 58824603bc3..29bca792653 100644 --- a/src/data/ability.ts +++ b/src/data/ability.ts @@ -4703,6 +4703,84 @@ export class PreventBypassSpeedChanceAbAttr extends AbAttr { } } +/** + * This applies a terrain-based type change to the Pokemon. + * Used by Mimicry. + */ +export class TerrainEventTypeChangeAbAttr extends PostSummonAbAttr { + constructor() { + super(true); + } + + override apply(pokemon: Pokemon, _passive: boolean, _simulated: boolean, _cancelled: Utils.BooleanHolder, _args: any[]): boolean { + if (pokemon.isTerastallized()) { + return false; + } + const currentTerrain = pokemon.scene.arena.getTerrainType(); + const typeChange: Type[] = this.determineTypeChange(pokemon, currentTerrain); + if (typeChange.length !== 0) { + if (pokemon.summonData.addedType && typeChange.includes(pokemon.summonData.addedType)) { + pokemon.summonData.addedType = null; + } + pokemon.summonData.types = typeChange; + pokemon.updateInfo(); + } + return true; + } + + /** + * Retrieves the type(s) the Pokemon should change to in response to a terrain + * @param pokemon + * @param currentTerrain {@linkcode TerrainType} + * @returns a list of type(s) + */ + private determineTypeChange(pokemon: Pokemon, currentTerrain: TerrainType): Type[] { + const typeChange: Type[] = []; + switch (currentTerrain) { + case TerrainType.ELECTRIC: + typeChange.push(Type.ELECTRIC); + break; + case TerrainType.MISTY: + typeChange.push(Type.FAIRY); + break; + case TerrainType.GRASSY: + typeChange.push(Type.GRASS); + break; + case TerrainType.PSYCHIC: + typeChange.push(Type.PSYCHIC); + break; + default: + pokemon.getTypes(false, false, true).forEach(t => { + typeChange.push(t); + }); + break; + } + return typeChange; + } + + /** + * Checks if the Pokemon should change types if summoned into an active terrain + * @returns `true` if there is an active terrain requiring a type change | `false` if not + */ + override applyPostSummon(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean | Promise { + if (pokemon.scene.arena.getTerrainType() !== TerrainType.NONE) { + return this.apply(pokemon, passive, simulated, new Utils.BooleanHolder(false), []); + } + return false; + } + + override getTriggerMessage(pokemon: Pokemon, abilityName: string, ...args: any[]) { + const currentTerrain = pokemon.scene.arena.getTerrainType(); + const pokemonNameWithAffix = getPokemonNameWithAffix(pokemon); + if (currentTerrain === TerrainType.NONE) { + return i18next.t("abilityTriggers:pokemonTypeChangeRevert", { pokemonNameWithAffix }); + } else { + const moveType = i18next.t(`pokemonInfo:Type.${Type[this.determineTypeChange(pokemon, currentTerrain)[0]]}`); + return i18next.t("abilityTriggers:pokemonTypeChange", { pokemonNameWithAffix, moveType }); + } + } +} + async function applyAbAttrsInternal( attrType: Constructor, pokemon: Pokemon | null, @@ -5767,7 +5845,7 @@ export function initAbilities() { new Ability(Abilities.POWER_SPOT, 8) .attr(AllyMoveCategoryPowerBoostAbAttr, [ MoveCategory.SPECIAL, MoveCategory.PHYSICAL ], 1.3), new Ability(Abilities.MIMICRY, 8) - .unimplemented(), + .attr(TerrainEventTypeChangeAbAttr), new Ability(Abilities.SCREEN_CLEANER, 8) .attr(PostSummonRemoveArenaTagAbAttr, [ ArenaTagType.AURORA_VEIL, ArenaTagType.LIGHT_SCREEN, ArenaTagType.REFLECT ]), new Ability(Abilities.STEELY_SPIRIT, 8) diff --git a/src/data/move.ts b/src/data/move.ts index 9979b24cc24..7d89a4144eb 100644 --- a/src/data/move.ts +++ b/src/data/move.ts @@ -5858,6 +5858,9 @@ export class RemoveTypeAttr extends MoveEffectAttr { const userTypes = user.getTypes(true); const modifiedTypes = userTypes.filter(type => type !== this.removedType); + if (modifiedTypes.length === 0) { + modifiedTypes.push(Type.UNKNOWN); + } user.summonData.types = modifiedTypes; user.updateInfo(); @@ -5880,7 +5883,11 @@ export class CopyTypeAttr extends MoveEffectAttr { return false; } - user.summonData.types = target.getTypes(true); + const targetTypes = target.getTypes(true); + if (targetTypes.includes(Type.UNKNOWN) && targetTypes.indexOf(Type.UNKNOWN) > -1) { + targetTypes[targetTypes.indexOf(Type.UNKNOWN)] = Type.NORMAL; + } + user.summonData.types = targetTypes; user.updateInfo(); user.scene.queueMessage(i18next.t("moveTriggers:copyType", { pokemonName: getPokemonNameWithAffix(user), targetPokemonName: getPokemonNameWithAffix(target) })); @@ -5889,7 +5896,7 @@ export class CopyTypeAttr extends MoveEffectAttr { } getCondition(): MoveConditionFunc { - return (user, target, move) => target.getTypes()[0] !== Type.UNKNOWN; + return (user, target, move) => target.getTypes()[0] !== Type.UNKNOWN || target.summonData.addedType !== null; } } @@ -5947,11 +5954,7 @@ export class AddTypeAttr extends MoveEffectAttr { } apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): boolean { - const types = target.getTypes().slice(0, 2).filter(t => t !== Type.UNKNOWN); // TODO: Figure out some way to actually check if another version of this effect is already applied - if (this.type !== Type.UNKNOWN) { - types.push(this.type); - } - target.summonData.types = types; + target.summonData.addedType = this.type; target.updateInfo(); user.scene.queueMessage(i18next.t("moveTriggers:addType", { typeName: i18next.t(`pokemonInfo:Type.${Type[this.type]}`), pokemonName: getPokemonNameWithAffix(target) })); @@ -8983,8 +8986,7 @@ export function initMoves() { .ignoresProtect() .ignoresVirtual(), new StatusMove(Moves.TRICK_OR_TREAT, Type.GHOST, 100, 20, -1, 0, 6) - .attr(AddTypeAttr, Type.GHOST) - .edgeCase(), // Weird interaction with Forest's Curse, reflect type, burn up + .attr(AddTypeAttr, Type.GHOST), new StatusMove(Moves.NOBLE_ROAR, Type.NORMAL, 100, 30, -1, 0, 6) .attr(StatStageChangeAttr, [ Stat.ATK, Stat.SPATK ], -1) .soundBased(), @@ -8996,8 +8998,7 @@ export function initMoves() { .target(MoveTarget.ALL_NEAR_OTHERS) .triageMove(), new StatusMove(Moves.FORESTS_CURSE, Type.GRASS, 100, 20, -1, 0, 6) - .attr(AddTypeAttr, Type.GRASS) - .edgeCase(), // Weird interaction with Trick or Treat, reflect type, burn up + .attr(AddTypeAttr, Type.GRASS), new AttackMove(Moves.PETAL_BLIZZARD, Type.GRASS, MoveCategory.PHYSICAL, 90, 100, 15, -1, 0, 6) .windMove() .makesContact(false) diff --git a/src/field/arena.ts b/src/field/arena.ts index 7bfdf9a0000..09faee49d56 100644 --- a/src/field/arena.ts +++ b/src/field/arena.ts @@ -10,7 +10,14 @@ import Move from "#app/data/move"; import { ArenaTag, ArenaTagSide, ArenaTrapTag, getArenaTag } from "#app/data/arena-tag"; import { BattlerIndex } from "#app/battle"; import { Terrain, TerrainType } from "#app/data/terrain"; -import { applyPostTerrainChangeAbAttrs, applyPostWeatherChangeAbAttrs, PostTerrainChangeAbAttr, PostWeatherChangeAbAttr } from "#app/data/ability"; +import { + applyAbAttrs, + applyPostTerrainChangeAbAttrs, + applyPostWeatherChangeAbAttrs, + PostTerrainChangeAbAttr, + PostWeatherChangeAbAttr, + TerrainEventTypeChangeAbAttr +} from "#app/data/ability"; import Pokemon from "#app/field/pokemon"; import Overrides from "#app/overrides"; import { TagAddedEvent, TagRemovedEvent, TerrainChangedEvent, WeatherChangedEvent } from "#app/events/arena"; @@ -387,6 +394,7 @@ export class Arena { this.scene.getField(true).filter(p => p.isOnField()).map(pokemon => { pokemon.findAndRemoveTags(t => "terrainTypes" in t && !(t.terrainTypes as TerrainType[]).find(t => t === terrain)); applyPostTerrainChangeAbAttrs(PostTerrainChangeAbAttr, pokemon, terrain); + applyAbAttrs(TerrainEventTypeChangeAbAttr, pokemon, null, false); }); return true; diff --git a/src/field/pokemon.ts b/src/field/pokemon.ts index 278a28937ef..5c49e18058b 100644 --- a/src/field/pokemon.ts +++ b/src/field/pokemon.ts @@ -1258,6 +1258,11 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { } } + // the type added to Pokemon from moves like Forest's Curse or Trick Or Treat + if (!ignoreOverride && this.summonData && this.summonData.addedType && !types.includes(this.summonData.addedType)) { + types.push(this.summonData.addedType); + } + // If both types are the same (can happen in weird custom typing scenarios), reduce to single type if (types.length > 1 && types[0] === types[1]) { types.splice(0, 1); @@ -5100,6 +5105,7 @@ export class PokemonSummonData { public moveset: (PokemonMove | null)[]; // If not initialized this value will not be populated from save data. public types: Type[] = []; + public addedType: Type | null = null; } export class PokemonBattleData { diff --git a/src/test/abilities/mimicry.test.ts b/src/test/abilities/mimicry.test.ts new file mode 100644 index 00000000000..4e62ddc0b76 --- /dev/null +++ b/src/test/abilities/mimicry.test.ts @@ -0,0 +1,91 @@ +import { Abilities } from "#enums/abilities"; +import { Moves } from "#enums/moves"; +import { Species } from "#enums/species"; +import { Type } from "#app/data/type"; +import GameManager from "#test/utils/gameManager"; +import Phaser from "phaser"; +import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; + +describe("Abilities - Mimicry", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + + beforeAll(() => { + phaserGame = new Phaser.Game({ + type: Phaser.HEADLESS, + }); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); + + beforeEach(() => { + game = new GameManager(phaserGame); + game.override + .moveset([ Moves.SPLASH ]) + .ability(Abilities.MIMICRY) + .battleType("single") + .disableCrits() + .enemySpecies(Species.MAGIKARP) + .enemyMoveset(Moves.SPLASH); + }); + + it("Mimicry activates after the Pokémon with Mimicry is switched in while terrain is present, or whenever there is a change in terrain", async () => { + game.override.enemyAbility(Abilities.MISTY_SURGE); + await game.classicMode.startBattle([ Species.FEEBAS, Species.ABRA ]); + + const [ playerPokemon1, playerPokemon2 ] = game.scene.getParty(); + game.move.select(Moves.SPLASH); + await game.toNextTurn(); + expect(playerPokemon1.getTypes().includes(Type.FAIRY)).toBe(true); + + game.doSwitchPokemon(1); + await game.toNextTurn(); + + expect(playerPokemon2.getTypes().includes(Type.FAIRY)).toBe(true); + }); + + it("Pokemon should revert back to its original, root type once terrain ends", async () => { + game.override + .moveset([ Moves.SPLASH, Moves.TRANSFORM ]) + .enemyAbility(Abilities.MIMICRY) + .enemyMoveset([ Moves.SPLASH, Moves.PSYCHIC_TERRAIN ]); + await game.classicMode.startBattle([ Species.REGIELEKI ]); + + const playerPokemon = game.scene.getPlayerPokemon(); + game.move.select(Moves.TRANSFORM); + await game.forceEnemyMove(Moves.PSYCHIC_TERRAIN); + await game.toNextTurn(); + expect(playerPokemon?.getTypes().includes(Type.PSYCHIC)).toBe(true); + + if (game.scene.arena.terrain) { + game.scene.arena.terrain.turnsLeft = 1; + } + + game.move.select(Moves.SPLASH); + await game.forceEnemyMove(Moves.SPLASH); + await game.toNextTurn(); + expect(playerPokemon?.getTypes().includes(Type.ELECTRIC)).toBe(true); + }); + + it("If the Pokemon is under the effect of a type-adding move and an equivalent terrain activates, the move's effect disappears", async () => { + game.override + .enemyMoveset([ Moves.FORESTS_CURSE, Moves.GRASSY_TERRAIN ]); + await game.classicMode.startBattle([ Species.FEEBAS ]); + + const playerPokemon = game.scene.getPlayerPokemon(); + game.move.select(Moves.SPLASH); + await game.forceEnemyMove(Moves.FORESTS_CURSE); + await game.toNextTurn(); + + expect(playerPokemon?.summonData.addedType).toBe(Type.GRASS); + + game.move.select(Moves.SPLASH); + await game.forceEnemyMove(Moves.GRASSY_TERRAIN); + await game.phaseInterceptor.to("TurnEndPhase"); + + expect(playerPokemon?.summonData.addedType).toBeNull(); + expect(playerPokemon?.getTypes().includes(Type.GRASS)).toBe(true); + }); +}); diff --git a/src/test/moves/forests_curse.test.ts b/src/test/moves/forests_curse.test.ts new file mode 100644 index 00000000000..c49bdab5255 --- /dev/null +++ b/src/test/moves/forests_curse.test.ts @@ -0,0 +1,47 @@ +import { Abilities } from "#enums/abilities"; +import { Moves } from "#enums/moves"; +import { Species } from "#enums/species"; +import { Type } from "#app/data/type"; +import GameManager from "#test/utils/gameManager"; +import Phaser from "phaser"; +import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; + +describe("Moves - Forest's Curse", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + + beforeAll(() => { + phaserGame = new Phaser.Game({ + type: Phaser.HEADLESS, + }); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); + + beforeEach(() => { + game = new GameManager(phaserGame); + game.override + .moveset([ Moves.FORESTS_CURSE, Moves.TRICK_OR_TREAT ]) + .ability(Abilities.BALL_FETCH) + .battleType("single") + .disableCrits() + .enemySpecies(Species.MAGIKARP) + .enemyAbility(Abilities.BALL_FETCH) + .enemyMoveset(Moves.SPLASH); + }); + + it("will replace the added type from Trick Or Treat", async () => { + await game.classicMode.startBattle([ Species.FEEBAS ]); + + const enemyPokemon = game.scene.getEnemyPokemon(); + game.move.select(Moves.TRICK_OR_TREAT); + await game.phaseInterceptor.to("TurnEndPhase"); + expect(enemyPokemon!.summonData.addedType).toBe(Type.GHOST); + + game.move.select(Moves.FORESTS_CURSE); + await game.phaseInterceptor.to("TurnEndPhase"); + expect(enemyPokemon?.summonData.addedType).toBe(Type.GRASS); + }); +}); diff --git a/src/test/moves/reflect_type.test.ts b/src/test/moves/reflect_type.test.ts new file mode 100644 index 00000000000..0e47d4b00fc --- /dev/null +++ b/src/test/moves/reflect_type.test.ts @@ -0,0 +1,59 @@ +import { Abilities } from "#enums/abilities"; +import { Moves } from "#enums/moves"; +import { Species } from "#enums/species"; +import { Type } from "#app/data/type"; +import GameManager from "#test/utils/gameManager"; +import Phaser from "phaser"; +import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; + +describe("Moves - Reflect Type", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + + beforeAll(() => { + phaserGame = new Phaser.Game({ + type: Phaser.HEADLESS, + }); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); + + beforeEach(() => { + game = new GameManager(phaserGame); + game.override + .ability(Abilities.BALL_FETCH) + .battleType("single") + .disableCrits() + .enemyAbility(Abilities.BALL_FETCH); + }); + + it("will make the user Normal/Grass if targetting a typeless Pokemon affected by Forest's Curse", async () => { + game.override + .moveset([ Moves.FORESTS_CURSE, Moves.REFLECT_TYPE ]) + .startingLevel(60) + .enemySpecies(Species.CHARMANDER) + .enemyMoveset([ Moves.BURN_UP, Moves.SPLASH ]); + await game.classicMode.startBattle([ Species.FEEBAS ]); + + const playerPokemon = game.scene.getPlayerPokemon(); + const enemyPokemon = game.scene.getEnemyPokemon(); + + game.move.select(Moves.SPLASH); + await game.forceEnemyMove(Moves.BURN_UP); + await game.toNextTurn(); + + game.move.select(Moves.FORESTS_CURSE); + await game.forceEnemyMove(Moves.SPLASH); + await game.toNextTurn(); + expect(enemyPokemon?.getTypes().includes(Type.UNKNOWN)).toBe(true); + expect(enemyPokemon?.getTypes().includes(Type.GRASS)).toBe(true); + + game.move.select(Moves.REFLECT_TYPE); + await game.forceEnemyMove(Moves.SPLASH); + await game.phaseInterceptor.to("TurnEndPhase"); + expect(playerPokemon?.getTypes()[0]).toBe(Type.NORMAL); + expect(playerPokemon?.getTypes().includes(Type.GRASS)).toBe(true); + }); +}); diff --git a/src/test/moves/trick_or_treat.test.ts b/src/test/moves/trick_or_treat.test.ts new file mode 100644 index 00000000000..7ecd00ed076 --- /dev/null +++ b/src/test/moves/trick_or_treat.test.ts @@ -0,0 +1,47 @@ +import { Abilities } from "#enums/abilities"; +import { Moves } from "#enums/moves"; +import { Species } from "#enums/species"; +import { Type } from "#app/data/type"; +import GameManager from "#test/utils/gameManager"; +import Phaser from "phaser"; +import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; + +describe("Moves - Trick Or Treat", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + + beforeAll(() => { + phaserGame = new Phaser.Game({ + type: Phaser.HEADLESS, + }); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); + + beforeEach(() => { + game = new GameManager(phaserGame); + game.override + .moveset([ Moves.FORESTS_CURSE, Moves.TRICK_OR_TREAT ]) + .ability(Abilities.BALL_FETCH) + .battleType("single") + .disableCrits() + .enemySpecies(Species.MAGIKARP) + .enemyAbility(Abilities.BALL_FETCH) + .enemyMoveset(Moves.SPLASH); + }); + + it("will replace added type from Forest's Curse", async () => { + await game.classicMode.startBattle([ Species.FEEBAS ]); + + const enemyPokemon = game.scene.getEnemyPokemon(); + game.move.select(Moves.FORESTS_CURSE); + await game.phaseInterceptor.to("TurnEndPhase"); + expect(enemyPokemon!.summonData.addedType).toBe(Type.GRASS); + + game.move.select(Moves.TRICK_OR_TREAT); + await game.phaseInterceptor.to("TurnEndPhase"); + expect(enemyPokemon?.summonData.addedType).toBe(Type.GHOST); + }); +}); From 13ff80fb95996e6f65d955a2ff90b6749852549a Mon Sep 17 00:00:00 2001 From: NightKev <34855794+DayKev@users.noreply.github.com> Date: Tue, 29 Oct 2024 10:59:28 -0700 Subject: [PATCH 16/25] Mark Last Respects as partial (#4749) --- src/data/ability.ts | 2 +- src/data/move.ts | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/src/data/ability.ts b/src/data/ability.ts index 29bca792653..780c4a515cd 100644 --- a/src/data/ability.ts +++ b/src/data/ability.ts @@ -6002,7 +6002,7 @@ export function initAbilities() { .attr(MovePowerBoostAbAttr, (user, target, move) => move.hasFlag(MoveFlags.SLICING_MOVE), 1.5), new Ability(Abilities.SUPREME_OVERLORD, 9) .attr(VariableMovePowerBoostAbAttr, (user, target, move) => 1 + 0.1 * Math.min(user.isPlayer() ? user.scene.currentBattle.playerFaints : user.scene.currentBattle.enemyFaints, 5)) - .partial(), // Counter resets every wave + .partial(), // Counter resets every wave instead of on arena reset new Ability(Abilities.COSTAR, 9) .attr(PostSummonCopyAllyStatsAbAttr), new Ability(Abilities.TOXIC_DEBRIS, 9) diff --git a/src/data/move.ts b/src/data/move.ts index 7d89a4144eb..f9fb61ba447 100644 --- a/src/data/move.ts +++ b/src/data/move.ts @@ -10006,6 +10006,7 @@ export function initMoves() { .attr(ConfuseAttr) .recklessMove(), new AttackMove(Moves.LAST_RESPECTS, Type.GHOST, MoveCategory.PHYSICAL, 50, 100, 10, -1, 0, 9) + .partial() // Counter resets every wave instead of on arena reset .attr(MovePowerMultiplierAttr, (user, target, move) => 1 + Math.min(user.isPlayer() ? user.scene.currentBattle.playerFaints : user.scene.currentBattle.enemyFaints, 100)) .makesContact(false), new AttackMove(Moves.LUMINA_CRASH, Type.PSYCHIC, MoveCategory.SPECIAL, 80, 100, 10, 100, 0, 9) From 65269f935f00b6b2ce122487eede8112382b048b Mon Sep 17 00:00:00 2001 From: Blitzy <118096277+Blitz425@users.noreply.github.com> Date: Tue, 29 Oct 2024 15:19:42 -0500 Subject: [PATCH 17/25] [Balance] Change Bouncy Bubble's Attributes (#4757) * Change Bouncy Bubble's Healing * Move comment to what is custom about Bouncy Bubble --------- Co-authored-by: damocleas --- src/data/move.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/data/move.ts b/src/data/move.ts index f9fb61ba447..c4e920b773a 100644 --- a/src/data/move.ts +++ b/src/data/move.ts @@ -9492,7 +9492,7 @@ export function initMoves() { .edgeCase() // I assume it needs clanging scales and Kommo-O .ignoresVirtual(), /* End Unused */ - new AttackMove(Moves.ZIPPY_ZAP, Type.ELECTRIC, MoveCategory.PHYSICAL, 50, 100, 15, -1, 2, 7) //LGPE Implementation + new AttackMove(Moves.ZIPPY_ZAP, Type.ELECTRIC, MoveCategory.PHYSICAL, 50, 100, 15, -1, 2, 7) // LGPE Implementation .attr(CritOnlyAttr), new AttackMove(Moves.SPLISHY_SPLASH, Type.WATER, MoveCategory.SPECIAL, 90, 100, 15, 30, 0, 7) .attr(StatusEffectAttr, StatusEffect.PARALYSIS) @@ -9502,7 +9502,7 @@ export function initMoves() { new AttackMove(Moves.PIKA_PAPOW, Type.ELECTRIC, MoveCategory.SPECIAL, -1, -1, 20, -1, 0, 7) .attr(FriendshipPowerAttr), new AttackMove(Moves.BOUNCY_BUBBLE, Type.WATER, MoveCategory.SPECIAL, 60, 100, 20, -1, 0, 7) - .attr(HitHealAttr, 1.0) + .attr(HitHealAttr) // Custom .triageMove() .target(MoveTarget.ALL_NEAR_ENEMIES), new AttackMove(Moves.BUZZY_BUZZ, Type.ELECTRIC, MoveCategory.SPECIAL, 60, 100, 20, 100, 0, 7) From 1cbe8b15052053765127d444582101d50f4b6789 Mon Sep 17 00:00:00 2001 From: Opaque02 <66582645+Opaque02@users.noreply.github.com> Date: Wed, 30 Oct 2024 07:30:20 +1000 Subject: [PATCH 18/25] [P3] Fixing form name being incorrect for some evolved pokemon (#4742) * Fixing form name being incorrect for some evolved pokemon * Updated to include showing the root speciesId if the speciesId locale key doesn't exist --- src/ui/pokemon-info-container.ts | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/src/ui/pokemon-info-container.ts b/src/ui/pokemon-info-container.ts index 5c3a22639dd..6cc70bd598f 100644 --- a/src/ui/pokemon-info-container.ts +++ b/src/ui/pokemon-info-container.ts @@ -237,14 +237,20 @@ export default class PokemonInfoContainer extends Phaser.GameObjects.Container { const formKey = (pokemon.species?.forms?.[pokemon.formIndex!]?.formKey); const formText = Utils.capitalizeString(formKey, "-", false, false) || ""; - const speciesName = Utils.capitalizeString(Species[pokemon.species.getRootSpeciesId()], "_", true, false); + const speciesName = Utils.capitalizeString(Species[pokemon.species.speciesId], "_", true, false); let formName = ""; if (pokemon.species.speciesId === Species.ARCEUS) { formName = i18next.t(`pokemonInfo:Type.${formText?.toUpperCase()}`); } else { const i18key = `pokemonForm:${speciesName}${formText}`; - formName = i18next.exists(i18key) ? i18next.t(i18key) : formText; + if (i18next.exists(i18key)) { + formName = i18next.t(i18key); + } else { + const rootSpeciesName = Utils.capitalizeString(Species[pokemon.species.getRootSpeciesId()], "_", true, false); + const i18RootKey = `pokemonForm:${rootSpeciesName}${formText}`; + formName = i18next.exists(i18RootKey) ? i18next.t(i18RootKey) : formText; + } } if (formName) { From f9fe59239e6e0976c83cbd19263c7922b8faaf10 Mon Sep 17 00:00:00 2001 From: AJ Fontaine <36677462+Fontbane@users.noreply.github.com> Date: Tue, 29 Oct 2024 17:31:02 -0400 Subject: [PATCH 19/25] [TMs] Remove Sacred Sword, add Secret Power TM, fix Reflect compatibility (#4713) --- src/data/balance/tms.ts | 1085 ++++++++++++++++++++++++++++++++++++++- 1 file changed, 1064 insertions(+), 21 deletions(-) diff --git a/src/data/balance/tms.ts b/src/data/balance/tms.ts index 1a509637e05..7b65ae65ec4 100644 --- a/src/data/balance/tms.ts +++ b/src/data/balance/tms.ts @@ -12318,6 +12318,7 @@ export const tmSpecies: TmSpecies = { Species.TURTWIG, Species.GROTLE, Species.TORTERRA, + Species.BASTIODON, Species.CHINGLING, Species.BRONZOR, Species.BRONZONG, @@ -12325,6 +12326,7 @@ export const tmSpecies: TmSpecies = { Species.WEAVILE, Species.MAGNEZONE, Species.TANGROWTH, + Species.ELECTIVIRE, Species.TOGEKISS, Species.MAMOSWINE, Species.GALLADE, @@ -12357,6 +12359,8 @@ export const tmSpecies: TmSpecies = { Species.CRYOGONAL, Species.MIENFOO, Species.MIENSHAO, + Species.GOLETT, + Species.GOLURK, Species.HYDREIGON, Species.COBALION, Species.TERRAKION, @@ -40233,6 +40237,1065 @@ export const tmSpecies: TmSpecies = { Species.HISUI_ZORUA, Species.HISUI_ZOROARK, ], + [Moves.SECRET_POWER]: [ + Species.BULBASAUR, + Species.IVYSAUR, + Species.VENUSAUR, + Species.CHARMANDER, + Species.CHARMELEON, + Species.CHARIZARD, + Species.SQUIRTLE, + Species.WARTORTLE, + Species.BLASTOISE, + Species.BUTTERFREE, + Species.BEEDRILL, + Species.PIDGEY, + Species.PIDGEOTTO, + Species.PIDGEOT, + Species.RATTATA, + Species.RATICATE, + Species.SPEAROW, + Species.FEAROW, + Species.EKANS, + Species.ARBOK, + Species.PIKACHU, + Species.RAICHU, + Species.SANDSHREW, + Species.SANDSLASH, + Species.NIDORAN_F, + Species.NIDORINA, + Species.NIDOQUEEN, + Species.NIDORAN_M, + Species.NIDORINO, + Species.NIDOKING, + Species.CLEFAIRY, + Species.CLEFABLE, + Species.VULPIX, + Species.NINETALES, + Species.JIGGLYPUFF, + Species.WIGGLYTUFF, + Species.ZUBAT, + Species.GOLBAT, + Species.ODDISH, + Species.GLOOM, + Species.VILEPLUME, + Species.PARAS, + Species.PARASECT, + Species.VENONAT, + Species.VENOMOTH, + Species.DIGLETT, + Species.DUGTRIO, + Species.MEOWTH, + Species.PERSIAN, + Species.PSYDUCK, + Species.GOLDUCK, + Species.MANKEY, + Species.PRIMEAPE, + Species.GROWLITHE, + Species.ARCANINE, + Species.POLIWAG, + Species.POLIWHIRL, + Species.POLIWRATH, + Species.ABRA, + Species.KADABRA, + Species.ALAKAZAM, + Species.MACHOP, + Species.MACHOKE, + Species.MACHAMP, + Species.BELLSPROUT, + Species.WEEPINBELL, + Species.VICTREEBEL, + Species.TENTACOOL, + Species.TENTACRUEL, + Species.GEODUDE, + Species.GRAVELER, + Species.GOLEM, + Species.PONYTA, + Species.RAPIDASH, + Species.SLOWPOKE, + Species.SLOWBRO, + Species.MAGNEMITE, + Species.MAGNETON, + Species.FARFETCHD, + Species.DODUO, + Species.DODRIO, + Species.SEEL, + Species.DEWGONG, + Species.GRIMER, + Species.MUK, + Species.SHELLDER, + Species.CLOYSTER, + Species.GASTLY, + Species.HAUNTER, + Species.GENGAR, + Species.ONIX, + Species.DROWZEE, + Species.HYPNO, + Species.KRABBY, + Species.KINGLER, + Species.VOLTORB, + Species.ELECTRODE, + Species.EXEGGCUTE, + Species.EXEGGUTOR, + Species.CUBONE, + Species.MAROWAK, + Species.HITMONLEE, + Species.HITMONCHAN, + Species.LICKITUNG, + Species.KOFFING, + Species.WEEZING, + Species.RHYHORN, + Species.RHYDON, + Species.CHANSEY, + Species.TANGELA, + Species.KANGASKHAN, + Species.HORSEA, + Species.SEADRA, + Species.GOLDEEN, + Species.SEAKING, + Species.STARYU, + Species.STARMIE, + Species.MR_MIME, + Species.SCYTHER, + Species.JYNX, + Species.ELECTABUZZ, + Species.MAGMAR, + Species.PINSIR, + Species.TAUROS, + Species.GYARADOS, + Species.LAPRAS, + Species.EEVEE, + Species.VAPOREON, + Species.JOLTEON, + Species.FLAREON, + Species.PORYGON, + Species.OMANYTE, + Species.OMASTAR, + Species.KABUTO, + Species.KABUTOPS, + Species.AERODACTYL, + Species.SNORLAX, + Species.ARTICUNO, + Species.ZAPDOS, + Species.MOLTRES, + Species.DRATINI, + Species.DRAGONAIR, + Species.DRAGONITE, + Species.MEWTWO, + Species.MEW, + Species.CHIKORITA, + Species.BAYLEEF, + Species.MEGANIUM, + Species.CYNDAQUIL, + Species.QUILAVA, + Species.TYPHLOSION, + Species.TOTODILE, + Species.CROCONAW, + Species.FERALIGATR, + Species.SENTRET, + Species.FURRET, + Species.HOOTHOOT, + Species.NOCTOWL, + Species.LEDYBA, + Species.LEDIAN, + Species.SPINARAK, + Species.ARIADOS, + Species.CROBAT, + Species.CHINCHOU, + Species.LANTURN, + Species.PICHU, + Species.CLEFFA, + Species.IGGLYBUFF, + Species.TOGEPI, + Species.TOGETIC, + Species.NATU, + Species.XATU, + Species.MAREEP, + Species.FLAAFFY, + Species.AMPHAROS, + Species.BELLOSSOM, + Species.MARILL, + Species.AZUMARILL, + Species.SUDOWOODO, + Species.POLITOED, + Species.HOPPIP, + Species.SKIPLOOM, + Species.JUMPLUFF, + Species.AIPOM, + Species.SUNKERN, + Species.SUNFLORA, + Species.YANMA, + Species.WOOPER, + Species.QUAGSIRE, + Species.ESPEON, + Species.UMBREON, + Species.MURKROW, + Species.SLOWKING, + Species.MISDREAVUS, + Species.GIRAFARIG, + Species.PINECO, + Species.FORRETRESS, + Species.DUNSPARCE, + Species.GLIGAR, + Species.STEELIX, + Species.SNUBBULL, + Species.GRANBULL, + Species.QWILFISH, + Species.SCIZOR, + Species.SHUCKLE, + Species.HERACROSS, + Species.SNEASEL, + Species.TEDDIURSA, + Species.URSARING, + Species.SLUGMA, + Species.MAGCARGO, + Species.SWINUB, + Species.PILOSWINE, + Species.CORSOLA, + Species.REMORAID, + Species.OCTILLERY, + Species.DELIBIRD, + Species.MANTINE, + Species.SKARMORY, + Species.HOUNDOUR, + Species.HOUNDOOM, + Species.KINGDRA, + Species.PHANPY, + Species.DONPHAN, + Species.PORYGON2, + Species.STANTLER, + Species.TYROGUE, + Species.HITMONTOP, + Species.SMOOCHUM, + Species.ELEKID, + Species.MAGBY, + Species.MILTANK, + Species.BLISSEY, + Species.RAIKOU, + Species.ENTEI, + Species.SUICUNE, + Species.LARVITAR, + Species.PUPITAR, + Species.TYRANITAR, + Species.LUGIA, + Species.HO_OH, + Species.CELEBI, + Species.TREECKO, + Species.GROVYLE, + Species.SCEPTILE, + Species.TORCHIC, + Species.COMBUSKEN, + Species.BLAZIKEN, + Species.MUDKIP, + Species.MARSHTOMP, + Species.SWAMPERT, + Species.POOCHYENA, + Species.MIGHTYENA, + Species.ZIGZAGOON, + Species.LINOONE, + Species.BEAUTIFLY, + Species.DUSTOX, + Species.LOTAD, + Species.LOMBRE, + Species.LUDICOLO, + Species.SEEDOT, + Species.NUZLEAF, + Species.SHIFTRY, + Species.TAILLOW, + Species.SWELLOW, + Species.WINGULL, + Species.PELIPPER, + Species.RALTS, + Species.KIRLIA, + Species.GARDEVOIR, + Species.SURSKIT, + Species.MASQUERAIN, + Species.SHROOMISH, + Species.BRELOOM, + Species.SLAKOTH, + Species.VIGOROTH, + Species.SLAKING, + Species.NINCADA, + Species.NINJASK, + Species.SHEDINJA, + Species.WHISMUR, + Species.LOUDRED, + Species.EXPLOUD, + Species.MAKUHITA, + Species.HARIYAMA, + Species.AZURILL, + Species.NOSEPASS, + Species.SKITTY, + Species.DELCATTY, + Species.SABLEYE, + Species.MAWILE, + Species.ARON, + Species.LAIRON, + Species.AGGRON, + Species.MEDITITE, + Species.MEDICHAM, + Species.ELECTRIKE, + Species.MANECTRIC, + Species.PLUSLE, + Species.MINUN, + Species.VOLBEAT, + Species.ILLUMISE, + Species.ROSELIA, + Species.GULPIN, + Species.SWALOT, + Species.CARVANHA, + Species.SHARPEDO, + Species.WAILMER, + Species.WAILORD, + Species.NUMEL, + Species.CAMERUPT, + Species.TORKOAL, + Species.SPOINK, + Species.GRUMPIG, + Species.SPINDA, + Species.TRAPINCH, + Species.VIBRAVA, + Species.FLYGON, + Species.CACNEA, + Species.CACTURNE, + Species.SWABLU, + Species.ALTARIA, + Species.ZANGOOSE, + Species.SEVIPER, + Species.LUNATONE, + Species.SOLROCK, + Species.BARBOACH, + Species.WHISCASH, + Species.CORPHISH, + Species.CRAWDAUNT, + Species.BALTOY, + Species.CLAYDOL, + Species.LILEEP, + Species.CRADILY, + Species.ANORITH, + Species.ARMALDO, + Species.FEEBAS, + Species.MILOTIC, + Species.CASTFORM, + Species.KECLEON, + Species.SHUPPET, + Species.BANETTE, + Species.DUSKULL, + Species.DUSCLOPS, + Species.TROPIUS, + Species.CHIMECHO, + Species.ABSOL, + Species.SNORUNT, + Species.GLALIE, + Species.SPHEAL, + Species.SEALEO, + Species.WALREIN, + Species.CLAMPERL, + Species.HUNTAIL, + Species.GOREBYSS, + Species.RELICANTH, + Species.LUVDISC, + Species.BAGON, + Species.SHELGON, + Species.SALAMENCE, + Species.METANG, + Species.METAGROSS, + Species.REGIROCK, + Species.REGICE, + Species.REGISTEEL, + Species.LATIAS, + Species.LATIOS, + Species.KYOGRE, + Species.GROUDON, + Species.RAYQUAZA, + Species.JIRACHI, + Species.DEOXYS, + Species.TURTWIG, + Species.GROTLE, + Species.TORTERRA, + Species.CHIMCHAR, + Species.MONFERNO, + Species.INFERNAPE, + Species.PIPLUP, + Species.PRINPLUP, + Species.EMPOLEON, + Species.STARLY, + Species.STARAVIA, + Species.STARAPTOR, + Species.BIDOOF, + Species.BIBAREL, + Species.KRICKETUNE, + Species.SHINX, + Species.LUXIO, + Species.LUXRAY, + Species.BUDEW, + Species.ROSERADE, + Species.CRANIDOS, + Species.RAMPARDOS, + Species.SHIELDON, + Species.BASTIODON, + Species.WORMADAM, + Species.MOTHIM, + Species.VESPIQUEN, + Species.PACHIRISU, + Species.BUIZEL, + Species.FLOATZEL, + Species.CHERUBI, + Species.CHERRIM, + Species.SHELLOS, + Species.GASTRODON, + Species.AMBIPOM, + Species.DRIFLOON, + Species.DRIFBLIM, + Species.BUNEARY, + Species.LOPUNNY, + Species.MISMAGIUS, + Species.HONCHKROW, + Species.GLAMEOW, + Species.PURUGLY, + Species.CHINGLING, + Species.STUNKY, + Species.SKUNTANK, + Species.BRONZOR, + Species.BRONZONG, + Species.BONSLY, + Species.MIME_JR, + Species.HAPPINY, + Species.CHATOT, + Species.SPIRITOMB, + Species.GIBLE, + Species.GABITE, + Species.GARCHOMP, + Species.MUNCHLAX, + Species.RIOLU, + Species.LUCARIO, + Species.HIPPOPOTAS, + Species.HIPPOWDON, + Species.SKORUPI, + Species.DRAPION, + Species.CROAGUNK, + Species.TOXICROAK, + Species.CARNIVINE, + Species.FINNEON, + Species.LUMINEON, + Species.MANTYKE, + Species.SNOVER, + Species.ABOMASNOW, + Species.WEAVILE, + Species.MAGNEZONE, + Species.LICKILICKY, + Species.RHYPERIOR, + Species.TANGROWTH, + Species.ELECTIVIRE, + Species.MAGMORTAR, + Species.TOGEKISS, + Species.YANMEGA, + Species.LEAFEON, + Species.GLACEON, + Species.GLISCOR, + Species.MAMOSWINE, + Species.PORYGON_Z, + Species.GALLADE, + Species.PROBOPASS, + Species.DUSKNOIR, + Species.FROSLASS, + Species.ROTOM, + Species.UXIE, + Species.MESPRIT, + Species.AZELF, + Species.DIALGA, + Species.PALKIA, + Species.HEATRAN, + Species.REGIGIGAS, + Species.GIRATINA, + Species.CRESSELIA, + Species.PHIONE, + Species.MANAPHY, + Species.DARKRAI, + Species.SHAYMIN, + Species.ARCEUS, + Species.VICTINI, + Species.SNIVY, + Species.SERVINE, + Species.SERPERIOR, + Species.TEPIG, + Species.PIGNITE, + Species.EMBOAR, + Species.OSHAWOTT, + Species.DEWOTT, + Species.SAMUROTT, + Species.PATRAT, + Species.WATCHOG, + Species.LILLIPUP, + Species.HERDIER, + Species.STOUTLAND, + Species.PURRLOIN, + Species.LIEPARD, + Species.PANSAGE, + Species.SIMISAGE, + Species.PANSEAR, + Species.SIMISEAR, + Species.PANPOUR, + Species.SIMIPOUR, + Species.MUNNA, + Species.MUSHARNA, + Species.PIDOVE, + Species.TRANQUILL, + Species.UNFEZANT, + Species.BLITZLE, + Species.ZEBSTRIKA, + Species.ROGGENROLA, + Species.BOLDORE, + Species.GIGALITH, + Species.WOOBAT, + Species.SWOOBAT, + Species.DRILBUR, + Species.EXCADRILL, + Species.AUDINO, + Species.TIMBURR, + Species.GURDURR, + Species.CONKELDURR, + Species.TYMPOLE, + Species.PALPITOAD, + Species.SEISMITOAD, + Species.THROH, + Species.SAWK, + Species.SEWADDLE, + Species.SWADLOON, + Species.LEAVANNY, + Species.VENIPEDE, + Species.WHIRLIPEDE, + Species.SCOLIPEDE, + Species.COTTONEE, + Species.WHIMSICOTT, + Species.PETILIL, + Species.LILLIGANT, + Species.BASCULIN, + Species.SANDILE, + Species.KROKOROK, + Species.KROOKODILE, + Species.DARUMAKA, + Species.DARMANITAN, + Species.MARACTUS, + Species.DWEBBLE, + Species.CRUSTLE, + Species.SCRAGGY, + Species.SCRAFTY, + Species.SIGILYPH, + Species.YAMASK, + Species.COFAGRIGUS, + Species.TIRTOUGA, + Species.CARRACOSTA, + Species.ARCHEN, + Species.ARCHEOPS, + Species.TRUBBISH, + Species.GARBODOR, + Species.ZORUA, + Species.ZOROARK, + Species.MINCCINO, + Species.CINCCINO, + Species.GOTHITA, + Species.GOTHORITA, + Species.GOTHITELLE, + Species.SOLOSIS, + Species.DUOSION, + Species.REUNICLUS, + Species.DUCKLETT, + Species.SWANNA, + Species.VANILLITE, + Species.VANILLISH, + Species.VANILLUXE, + Species.DEERLING, + Species.SAWSBUCK, + Species.EMOLGA, + Species.KARRABLAST, + Species.ESCAVALIER, + Species.FOONGUS, + Species.AMOONGUSS, + Species.FRILLISH, + Species.JELLICENT, + Species.ALOMOMOLA, + Species.JOLTIK, + Species.GALVANTULA, + Species.FERROSEED, + Species.FERROTHORN, + Species.KLINK, + Species.KLANG, + Species.KLINKLANG, + Species.EELEKTRIK, + Species.EELEKTROSS, + Species.ELGYEM, + Species.BEHEEYEM, + Species.LITWICK, + Species.LAMPENT, + Species.CHANDELURE, + Species.AXEW, + Species.FRAXURE, + Species.HAXORUS, + Species.CUBCHOO, + Species.BEARTIC, + Species.CRYOGONAL, + Species.SHELMET, + Species.ACCELGOR, + Species.STUNFISK, + Species.MIENFOO, + Species.MIENSHAO, + Species.DRUDDIGON, + Species.GOLETT, + Species.GOLURK, + Species.PAWNIARD, + Species.BISHARP, + Species.BOUFFALANT, + Species.RUFFLET, + Species.BRAVIARY, + Species.VULLABY, + Species.MANDIBUZZ, + Species.HEATMOR, + Species.DURANT, + Species.DEINO, + Species.ZWEILOUS, + Species.HYDREIGON, + Species.LARVESTA, + Species.VOLCARONA, + Species.COBALION, + Species.TERRAKION, + Species.VIRIZION, + Species.TORNADUS, + Species.THUNDURUS, + Species.RESHIRAM, + Species.ZEKROM, + Species.LANDORUS, + Species.KYUREM, + Species.KELDEO, + Species.MELOETTA, + Species.GENESECT, + Species.CHESPIN, + Species.QUILLADIN, + Species.CHESNAUGHT, + Species.FENNEKIN, + Species.BRAIXEN, + Species.DELPHOX, + Species.FROAKIE, + Species.FROGADIER, + Species.GRENINJA, + Species.BUNNELBY, + Species.DIGGERSBY, + Species.FLETCHLING, + Species.FLETCHINDER, + Species.TALONFLAME, + Species.VIVILLON, + Species.LITLEO, + Species.PYROAR, + Species.FLABEBE, + Species.FLOETTE, + Species.FLORGES, + Species.SKIDDO, + Species.GOGOAT, + Species.PANCHAM, + Species.PANGORO, + Species.FURFROU, + Species.ESPURR, + Species.MEOWSTIC, + Species.HONEDGE, + Species.DOUBLADE, + Species.AEGISLASH, + Species.SPRITZEE, + Species.AROMATISSE, + Species.SWIRLIX, + Species.SLURPUFF, + Species.INKAY, + Species.MALAMAR, + Species.BINACLE, + Species.BARBARACLE, + Species.SKRELP, + Species.DRAGALGE, + Species.CLAUNCHER, + Species.CLAWITZER, + Species.HELIOPTILE, + Species.HELIOLISK, + Species.TYRUNT, + Species.TYRANTRUM, + Species.AMAURA, + Species.AURORUS, + Species.SYLVEON, + Species.HAWLUCHA, + Species.DEDENNE, + Species.CARBINK, + Species.GOOMY, + Species.SLIGGOO, + Species.GOODRA, + Species.KLEFKI, + Species.PHANTUMP, + Species.TREVENANT, + Species.PUMPKABOO, + Species.GOURGEIST, + Species.BERGMITE, + Species.AVALUGG, + Species.NOIBAT, + Species.NOIVERN, + Species.XERNEAS, + Species.YVELTAL, + Species.ZYGARDE, + Species.DIANCIE, + Species.HOOPA, + Species.VOLCANION, + Species.ROWLET, + Species.DARTRIX, + Species.DECIDUEYE, + Species.LITTEN, + Species.TORRACAT, + Species.INCINEROAR, + Species.POPPLIO, + Species.BRIONNE, + Species.PRIMARINA, + Species.PIKIPEK, + Species.TRUMBEAK, + Species.TOUCANNON, + Species.YUNGOOS, + Species.GUMSHOOS, + Species.GRUBBIN, + Species.CHARJABUG, + Species.VIKAVOLT, + Species.CRABRAWLER, + Species.CRABOMINABLE, + Species.ORICORIO, + Species.CUTIEFLY, + Species.RIBOMBEE, + Species.ROCKRUFF, + Species.LYCANROC, + Species.WISHIWASHI, + Species.MAREANIE, + Species.TOXAPEX, + Species.MUDBRAY, + Species.MUDSDALE, + Species.DEWPIDER, + Species.ARAQUANID, + Species.FOMANTIS, + Species.LURANTIS, + Species.MORELULL, + Species.SHIINOTIC, + Species.SALANDIT, + Species.SALAZZLE, + Species.STUFFUL, + Species.BEWEAR, + Species.BOUNSWEET, + Species.STEENEE, + Species.TSAREENA, + Species.COMFEY, + Species.ORANGURU, + Species.PASSIMIAN, + Species.WIMPOD, + Species.GOLISOPOD, + Species.SANDYGAST, + Species.PALOSSAND, + Species.TYPE_NULL, + Species.SILVALLY, + Species.MINIOR, + Species.KOMALA, + Species.TURTONATOR, + Species.TOGEDEMARU, + Species.MIMIKYU, + Species.BRUXISH, + Species.DRAMPA, + Species.DHELMISE, + Species.JANGMO_O, + Species.HAKAMO_O, + Species.KOMMO_O, + Species.TAPU_KOKO, + Species.TAPU_LELE, + Species.TAPU_BULU, + Species.TAPU_FINI, + Species.SOLGALEO, + Species.LUNALA, + Species.NIHILEGO, + Species.BUZZWOLE, + Species.PHEROMOSA, + Species.XURKITREE, + Species.CELESTEELA, + Species.KARTANA, + Species.GUZZLORD, + Species.NECROZMA, + Species.MAGEARNA, + Species.MARSHADOW, + Species.POIPOLE, + Species.NAGANADEL, + Species.STAKATAKA, + Species.BLACEPHALON, + Species.ZERAORA, + Species.MELTAN, + Species.MELMETAL, + Species.GROOKEY, + Species.THWACKEY, + Species.RILLABOOM, + Species.SCORBUNNY, + Species.RABOOT, + Species.CINDERACE, + Species.SOBBLE, + Species.DRIZZILE, + Species.INTELEON, + Species.SKWOVET, + Species.GREEDENT, + Species.ROOKIDEE, + Species.CORVISQUIRE, + Species.CORVIKNIGHT, + Species.DOTTLER, + Species.ORBEETLE, + Species.NICKIT, + Species.THIEVUL, + Species.GOSSIFLEUR, + Species.ELDEGOSS, + Species.WOOLOO, + Species.DUBWOOL, + Species.CHEWTLE, + Species.DREDNAW, + Species.YAMPER, + Species.BOLTUND, + Species.ROLYCOLY, + Species.CARKOL, + Species.COALOSSAL, + Species.FLAPPLE, + Species.APPLETUN, + Species.SILICOBRA, + Species.SANDACONDA, + Species.CRAMORANT, + Species.ARROKUDA, + Species.BARRASKEWDA, + Species.TOXEL, + Species.TOXTRICITY, + Species.SIZZLIPEDE, + Species.CENTISKORCH, + Species.CLOBBOPUS, + Species.GRAPPLOCT, + Species.SINISTEA, + Species.POLTEAGEIST, + Species.HATENNA, + Species.HATTREM, + Species.HATTERENE, + Species.IMPIDIMP, + Species.MORGREM, + Species.GRIMMSNARL, + Species.OBSTAGOON, + Species.PERRSERKER, + Species.CURSOLA, + Species.SIRFETCHD, + Species.MR_RIME, + Species.RUNERIGUS, + Species.MILCERY, + Species.ALCREMIE, + Species.FALINKS, + Species.PINCURCHIN, + Species.SNOM, + Species.FROSMOTH, + Species.STONJOURNER, + Species.EISCUE, + Species.INDEEDEE, + Species.MORPEKO, + Species.CUFANT, + Species.COPPERAJAH, + Species.DRACOZOLT, + Species.ARCTOZOLT, + Species.DRACOVISH, + Species.ARCTOVISH, + Species.DURALUDON, + Species.DREEPY, + Species.DRAKLOAK, + Species.DRAGAPULT, + Species.ZACIAN, + Species.ZAMAZENTA, + Species.ETERNATUS, + Species.KUBFU, + Species.URSHIFU, + Species.ZARUDE, + Species.REGIELEKI, + Species.REGIDRAGO, + Species.GLASTRIER, + Species.SPECTRIER, + Species.CALYREX, + Species.WYRDEER, + Species.KLEAVOR, + Species.URSALUNA, + Species.BASCULEGION, + Species.SNEASLER, + Species.OVERQWIL, + Species.ENAMORUS, + Species.SPRIGATITO, + Species.FLORAGATO, + Species.MEOWSCARADA, + Species.FUECOCO, + Species.CROCALOR, + Species.SKELEDIRGE, + Species.QUAXLY, + Species.QUAXWELL, + Species.QUAQUAVAL, + Species.LECHONK, + Species.OINKOLOGNE, + Species.TAROUNTULA, + Species.SPIDOPS, + Species.NYMBLE, + Species.LOKIX, + Species.PAWMI, + Species.PAWMO, + Species.PAWMOT, + Species.TANDEMAUS, + Species.MAUSHOLD, + Species.FIDOUGH, + Species.DACHSBUN, + Species.SMOLIV, + Species.DOLLIV, + Species.ARBOLIVA, + Species.SQUAWKABILLY, + Species.NACLI, + Species.NACLSTACK, + Species.GARGANACL, + Species.CHARCADET, + Species.ARMAROUGE, + Species.CERULEDGE, + Species.TADBULB, + Species.BELLIBOLT, + Species.WATTREL, + Species.KILOWATTREL, + Species.MASCHIFF, + Species.MABOSSTIFF, + Species.SHROODLE, + Species.GRAFAIAI, + Species.BRAMBLIN, + Species.BRAMBLEGHAST, + Species.TOEDSCOOL, + Species.TOEDSCRUEL, + Species.KLAWF, + Species.CAPSAKID, + Species.SCOVILLAIN, + Species.RELLOR, + Species.RABSCA, + Species.FLITTLE, + Species.ESPATHRA, + Species.TINKATINK, + Species.TINKATUFF, + Species.TINKATON, + Species.WIGLETT, + Species.WUGTRIO, + Species.BOMBIRDIER, + Species.FINIZEN, + Species.PALAFIN, + Species.VAROOM, + Species.REVAVROOM, + Species.CYCLIZAR, + Species.ORTHWORM, + Species.GLIMMET, + Species.GLIMMORA, + Species.GREAVARD, + Species.HOUNDSTONE, + Species.FLAMIGO, + Species.CETODDLE, + Species.CETITAN, + Species.VELUZA, + Species.DONDOZO, + Species.TATSUGIRI, + Species.ANNIHILAPE, + Species.CLODSIRE, + Species.FARIGIRAF, + Species.DUDUNSPARCE, + Species.KINGAMBIT, + Species.GREAT_TUSK, + Species.SCREAM_TAIL, + Species.BRUTE_BONNET, + Species.FLUTTER_MANE, + Species.SLITHER_WING, + Species.SANDY_SHOCKS, + Species.IRON_TREADS, + Species.IRON_BUNDLE, + Species.IRON_HANDS, + Species.IRON_JUGULIS, + Species.IRON_MOTH, + Species.IRON_THORNS, + Species.FRIGIBAX, + Species.ARCTIBAX, + Species.BAXCALIBUR, + Species.GIMMIGHOUL, + Species.GHOLDENGO, + Species.WO_CHIEN, + Species.CHIEN_PAO, + Species.TING_LU, + Species.CHI_YU, + Species.ROARING_MOON, + Species.IRON_VALIANT, + Species.KORAIDON, + Species.MIRAIDON, + Species.WALKING_WAKE, + Species.IRON_LEAVES, + Species.DIPPLIN, + Species.POLTCHAGEIST, + Species.SINISTCHA, + Species.OKIDOGI, + Species.MUNKIDORI, + Species.FEZANDIPITI, + Species.OGERPON, + Species.ARCHALUDON, + Species.HYDRAPPLE, + Species.GOUGING_FIRE, + Species.RAGING_BOLT, + Species.IRON_BOULDER, + Species.IRON_CROWN, + Species.TERAPAGOS, + Species.PECHARUNT, + Species.ALOLA_RATTATA, + Species.ALOLA_RATICATE, + Species.ALOLA_RAICHU, + Species.ALOLA_SANDSHREW, + Species.ALOLA_SANDSLASH, + Species.ALOLA_VULPIX, + Species.ALOLA_NINETALES, + Species.ALOLA_DIGLETT, + Species.ALOLA_DUGTRIO, + Species.ALOLA_MEOWTH, + Species.ALOLA_PERSIAN, + Species.ALOLA_GEODUDE, + Species.ALOLA_GRAVELER, + Species.ALOLA_GOLEM, + Species.ALOLA_GRIMER, + Species.ALOLA_MUK, + Species.ALOLA_EXEGGUTOR, + Species.ALOLA_MAROWAK, + Species.ETERNAL_FLOETTE, + Species.GALAR_MEOWTH, + Species.GALAR_PONYTA, + Species.GALAR_RAPIDASH, + Species.GALAR_SLOWPOKE, + Species.GALAR_SLOWBRO, + Species.GALAR_FARFETCHD, + Species.GALAR_WEEZING, + Species.GALAR_MR_MIME, + Species.GALAR_ARTICUNO, + Species.GALAR_ZAPDOS, + Species.GALAR_MOLTRES, + Species.GALAR_SLOWKING, + Species.GALAR_CORSOLA, + Species.GALAR_ZIGZAGOON, + Species.GALAR_LINOONE, + Species.GALAR_DARUMAKA, + Species.GALAR_DARMANITAN, + Species.GALAR_YAMASK, + Species.GALAR_STUNFISK, + Species.HISUI_GROWLITHE, + Species.HISUI_ARCANINE, + Species.HISUI_VOLTORB, + Species.HISUI_ELECTRODE, + Species.HISUI_TYPHLOSION, + Species.HISUI_QWILFISH, + Species.HISUI_SNEASEL, + Species.HISUI_SAMUROTT, + Species.HISUI_LILLIGANT, + Species.HISUI_ZORUA, + Species.HISUI_ZOROARK, + Species.HISUI_BRAVIARY, + Species.HISUI_SLIGGOO, + Species.HISUI_GOODRA, + Species.HISUI_AVALUGG, + Species.HISUI_DECIDUEYE, + Species.PALDEA_TAUROS, + Species.PALDEA_WOOPER, + Species.BLOODMOON_URSALUNA, + ], [Moves.DIVE]: [ Species.SQUIRTLE, Species.WARTORTLE, @@ -59529,26 +60592,6 @@ export const tmSpecies: TmSpecies = { Species.HISUI_SAMUROTT, Species.PALDEA_TAUROS, ], - [Moves.SACRED_SWORD]: [ - Species.GALLADE, - Species.OSHAWOTT, - Species.DEWOTT, - Species.SAMUROTT, - Species.COBALION, - Species.TERRAKION, - Species.VIRIZION, - Species.KELDEO, - Species.HONEDGE, - Species.DOUBLADE, - Species.AEGISLASH, - Species.KARTANA, - Species.ZACIAN, - Species.CHIEN_PAO, - Species.IRON_LEAVES, - Species.IRON_BOULDER, - Species.IRON_CROWN, - Species.HISUI_SAMUROTT, - ], [Moves.RAZOR_SHELL]: [ Species.SLOWBRO, Species.SHELLDER, @@ -67389,6 +68432,7 @@ export const tmPoolTiers: TmPoolTiers = { [Moves.ENDEAVOR]: ModifierTier.COMMON, [Moves.SKILL_SWAP]: ModifierTier.COMMON, [Moves.IMPRISON]: ModifierTier.COMMON, + [Moves.SECRET_POWER]: ModifierTier.COMMON, [Moves.DIVE]: ModifierTier.GREAT, [Moves.FEATHER_DANCE]: ModifierTier.COMMON, [Moves.BLAZE_KICK]: ModifierTier.GREAT, @@ -67517,7 +68561,6 @@ export const tmPoolTiers: TmPoolTiers = { [Moves.ELECTROWEB]: ModifierTier.GREAT, [Moves.WILD_CHARGE]: ModifierTier.GREAT, [Moves.DRILL_RUN]: ModifierTier.GREAT, - [Moves.SACRED_SWORD]: ModifierTier.ULTRA, [Moves.RAZOR_SHELL]: ModifierTier.GREAT, [Moves.HEAT_CRASH]: ModifierTier.GREAT, [Moves.TAIL_SLAP]: ModifierTier.GREAT, From 921d4fa18c3e4cb62968ea16f18ae27bf30ad567 Mon Sep 17 00:00:00 2001 From: NightKev <34855794+DayKev@users.noreply.github.com> Date: Tue, 29 Oct 2024 14:31:37 -0700 Subject: [PATCH 20/25] [P2] Chloroblast & Struggle should not recoil if the move failed (#4719) * Chloroblast & Struggle should not recoil if no damage was dealt * Protect against missing move entry Co-authored-by: PigeonBar <56974298+PigeonBar@users.noreply.github.com> --------- Co-authored-by: PigeonBar <56974298+PigeonBar@users.noreply.github.com> --- src/data/move.ts | 5 ++++ src/test/moves/chloroblast.test.ts | 42 ++++++++++++++++++++++++++++++ 2 files changed, 47 insertions(+) create mode 100644 src/test/moves/chloroblast.test.ts diff --git a/src/data/move.ts b/src/data/move.ts index c4e920b773a..529a9508acf 100644 --- a/src/data/move.ts +++ b/src/data/move.ts @@ -1420,6 +1420,11 @@ export class RecoilAttr extends MoveEffectAttr { return false; } + // Chloroblast and Struggle should not deal recoil damage if the move was not successful + if (this.useHp && [ MoveResult.FAIL, MoveResult.MISS ].includes(user.getLastXMoves(1)[0]?.result)) { + return false; + } + const damageValue = (!this.useHp ? user.turnData.damageDealt : user.getMaxHp()) * this.damageRatio; const minValue = user.turnData.damageDealt ? 1 : 0; const recoilDamage = Utils.toDmgValue(damageValue, minValue); diff --git a/src/test/moves/chloroblast.test.ts b/src/test/moves/chloroblast.test.ts new file mode 100644 index 00000000000..5e55bf46958 --- /dev/null +++ b/src/test/moves/chloroblast.test.ts @@ -0,0 +1,42 @@ +import { Abilities } from "#enums/abilities"; +import { Moves } from "#enums/moves"; +import { Species } from "#enums/species"; +import GameManager from "#test/utils/gameManager"; +import Phaser from "phaser"; +import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; + +describe("Moves - Chloroblast", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + + beforeAll(() => { + phaserGame = new Phaser.Game({ + type: Phaser.HEADLESS, + }); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); + + beforeEach(() => { + game = new GameManager(phaserGame); + game.override + .moveset([ Moves.CHLOROBLAST ]) + .ability(Abilities.BALL_FETCH) + .battleType("single") + .disableCrits() + .enemySpecies(Species.MAGIKARP) + .enemyAbility(Abilities.BALL_FETCH) + .enemyMoveset(Moves.PROTECT); + }); + + it("should not deal recoil damage if the opponent uses protect", async () => { + await game.classicMode.startBattle([ Species.FEEBAS ]); + + game.move.select(Moves.CHLOROBLAST); + await game.phaseInterceptor.to("BerryPhase"); + + expect(game.scene.getPlayerPokemon()!.isFullHp()).toBe(true); + }); +}); From fd1aa41d095a1d53a653b3ad33ddc653e1c0132b Mon Sep 17 00:00:00 2001 From: innerthunder <168692175+innerthunder@users.noreply.github.com> Date: Tue, 29 Oct 2024 14:32:07 -0700 Subject: [PATCH 21/25] [P2] Fix AI targeting allies with status effect moves (#4717) --- src/data/move.ts | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/src/data/move.ts b/src/data/move.ts index 529a9508acf..c5b14304fb2 100644 --- a/src/data/move.ts +++ b/src/data/move.ts @@ -2182,7 +2182,10 @@ export class StatusEffectAttr extends MoveEffectAttr { getTargetBenefitScore(user: Pokemon, target: Pokemon, move: Move): number { const moveChance = this.getMoveChance(user, target, move, this.selfTarget, false); - return !(this.selfTarget ? user : target).status && (this.selfTarget ? user : target).canSetStatus(this.effect, true, false, user) ? Math.floor(moveChance * -0.1) : 0; + const score = (moveChance < 0) ? -10 : Math.floor(moveChance * -0.1); + const pokemon = this.selfTarget ? user : target; + + return !pokemon.status && pokemon.canSetStatus(this.effect, true, false, user) ? score : 0; } } @@ -2202,7 +2205,10 @@ export class MultiStatusEffectAttr extends StatusEffectAttr { getTargetBenefitScore(user: Pokemon, target: Pokemon, move: Move): number { const moveChance = this.getMoveChance(user, target, move, this.selfTarget, false); - return !(this.selfTarget ? user : target).status && (this.selfTarget ? user : target).canSetStatus(this.effect, true, false, user) ? Math.floor(moveChance * -0.1) : 0; + const score = (moveChance < 0) ? -10 : Math.floor(moveChance * -0.1); + const pokemon = this.selfTarget ? user : target; + + return !pokemon.status && pokemon.canSetStatus(this.effect, true, false, user) ? score : 0; } } @@ -2233,7 +2239,7 @@ export class PsychoShiftEffectAttr extends MoveEffectAttr { } getTargetBenefitScore(user: Pokemon, target: Pokemon, move: Move): number { - return !(this.selfTarget ? user : target).status && (this.selfTarget ? user : target).canSetStatus(user.status?.effect, true, false, user) ? Math.floor(move.chance * -0.1) : 0; + return !target.status && target.canSetStatus(user.status?.effect, true, false, user) ? -10 : 0; } } /** From afe6d2900d1b540de672ae7632a57e3c58f68144 Mon Sep 17 00:00:00 2001 From: PrabbyDD <147005742+PrabbyDD@users.noreply.github.com> Date: Tue, 29 Oct 2024 14:38:33 -0700 Subject: [PATCH 22/25] [P2] Fix for Speed Boost is Activated on the Turn a Pokemon is Switched In, and When a Pokemon Fails to Escape #4353 (#4676) * fixing speed boost for pokemon being switched in and for if failed escape * adding unit tests * adding failed run away test case * adding failed run away test case modification * refactoring solution to be more consistent with coding style * more fixes for consistency * more fixes for consistency * adding new AbAttr in abiliity.ts for posterity * removing uneccesary variables * fixing a merge conflict --- src/data/ability.ts | 19 ++-- src/enums/switch-type.ts | 2 + src/field/pokemon.ts | 2 + src/phases/attempt-run-phase.ts | 7 +- src/phases/check-switch-phase.ts | 2 +- src/phases/switch-summon-phase.ts | 9 +- src/test/abilities/speed_boost.test.ts | 125 +++++++++++++++++++++++++ 7 files changed, 150 insertions(+), 16 deletions(-) create mode 100644 src/test/abilities/speed_boost.test.ts diff --git a/src/data/ability.ts b/src/data/ability.ts index 780c4a515cd..3c73bb47c47 100644 --- a/src/data/ability.ts +++ b/src/data/ability.ts @@ -3614,22 +3614,19 @@ export class MoodyAbAttr extends PostTurnAbAttr { } } -export class PostTurnStatStageChangeAbAttr extends PostTurnAbAttr { - private stats: BattleStat[]; - private stages: number; +export class SpeedBoostAbAttr extends PostTurnAbAttr { - constructor(stats: BattleStat[], stages: number) { + constructor() { super(true); - - this.stats = Array.isArray(stats) - ? stats - : [ stats ]; - this.stages = stages; } applyPostTurn(pokemon: Pokemon, passive: boolean, simulated: boolean, args: any[]): boolean { if (!simulated) { - pokemon.scene.unshiftPhase(new StatStageChangePhase(pokemon.scene, pokemon.getBattlerIndex(), true, this.stats, this.stages)); + if (!pokemon.turnData.switchedInThisTurn && !pokemon.turnData.failedRunAway) { + pokemon.scene.unshiftPhase(new StatStageChangePhase(pokemon.scene, pokemon.getBattlerIndex(), true, [ Stat.SPD ], 1)); + } else { + return false; + } } return true; } @@ -5011,7 +5008,7 @@ export function initAbilities() { .attr(PostSummonWeatherChangeAbAttr, WeatherType.RAIN) .attr(PostBiomeChangeWeatherChangeAbAttr, WeatherType.RAIN), new Ability(Abilities.SPEED_BOOST, 3) - .attr(PostTurnStatStageChangeAbAttr, [ Stat.SPD ], 1), + .attr(SpeedBoostAbAttr), new Ability(Abilities.BATTLE_ARMOR, 3) .attr(BlockCritAbAttr) .ignorable(), diff --git a/src/enums/switch-type.ts b/src/enums/switch-type.ts index b25ba6ad119..752c0902636 100644 --- a/src/enums/switch-type.ts +++ b/src/enums/switch-type.ts @@ -3,6 +3,8 @@ * or {@linkcode SwitchSummonPhase} will carry out. */ export enum SwitchType { + /** Switchout specifically for when combat starts and the player is prompted if they will switch Pokemon */ + INITIAL_SWITCH, /** Basic switchout where the Pokemon to switch in is selected */ SWITCH, /** Transfers stat stages and other effects from the returning Pokemon to the switched in Pokemon */ diff --git a/src/field/pokemon.ts b/src/field/pokemon.ts index 5c49e18058b..321532fffa7 100644 --- a/src/field/pokemon.ts +++ b/src/field/pokemon.ts @@ -5143,6 +5143,8 @@ export class PokemonTurnData { public statStagesDecreased: boolean = false; public moveEffectiveness: TypeDamageMultiplier | null = null; public combiningPledge?: Moves; + public switchedInThisTurn: boolean = false; + public failedRunAway: boolean = false; } export enum AiType { diff --git a/src/phases/attempt-run-phase.ts b/src/phases/attempt-run-phase.ts index e0dd7fa72fd..b4768dc9a26 100644 --- a/src/phases/attempt-run-phase.ts +++ b/src/phases/attempt-run-phase.ts @@ -10,6 +10,10 @@ import { NewBattlePhase } from "./new-battle-phase"; import { PokemonPhase } from "./pokemon-phase"; export class AttemptRunPhase extends PokemonPhase { + + /** For testing purposes: this is to force the pokemon to fail and escape */ + public forceFailEscape = false; + constructor(scene: BattleScene, fieldIndex: number) { super(scene, fieldIndex); } @@ -28,7 +32,7 @@ export class AttemptRunPhase extends PokemonPhase { applyAbAttrs(RunSuccessAbAttr, playerPokemon, null, false, escapeChance); - if (playerPokemon.randSeedInt(100) < escapeChance.value) { + if (playerPokemon.randSeedInt(100) < escapeChance.value && !this.forceFailEscape) { this.scene.playSound("se/flee"); this.scene.queueMessage(i18next.t("battle:runAwaySuccess"), null, true, 500); @@ -51,6 +55,7 @@ export class AttemptRunPhase extends PokemonPhase { this.scene.pushPhase(new BattleEndPhase(this.scene)); this.scene.pushPhase(new NewBattlePhase(this.scene)); } else { + playerPokemon.turnData.failedRunAway = true; this.scene.queueMessage(i18next.t("battle:runAwayCannotEscape"), null, true, 500); } diff --git a/src/phases/check-switch-phase.ts b/src/phases/check-switch-phase.ts index 8849d304435..5e459d0e6b5 100644 --- a/src/phases/check-switch-phase.ts +++ b/src/phases/check-switch-phase.ts @@ -51,7 +51,7 @@ export class CheckSwitchPhase extends BattlePhase { this.scene.ui.setMode(Mode.CONFIRM, () => { this.scene.ui.setMode(Mode.MESSAGE); this.scene.tryRemovePhase(p => p instanceof PostSummonPhase && p.player && p.fieldIndex === this.fieldIndex); - this.scene.unshiftPhase(new SwitchPhase(this.scene, SwitchType.SWITCH, this.fieldIndex, false, true)); + this.scene.unshiftPhase(new SwitchPhase(this.scene, SwitchType.INITIAL_SWITCH, this.fieldIndex, false, true)); this.end(); }, () => { this.scene.ui.setMode(Mode.MESSAGE); diff --git a/src/phases/switch-summon-phase.ts b/src/phases/switch-summon-phase.ts index 37652b3cfa4..c7e7bbe011e 100644 --- a/src/phases/switch-summon-phase.ts +++ b/src/phases/switch-summon-phase.ts @@ -64,10 +64,8 @@ export class SwitchSummonPhase extends SummonPhase { } const pokemon = this.getPokemon(); - (this.player ? this.scene.getEnemyField() : this.scene.getPlayerField()).forEach(enemyPokemon => enemyPokemon.removeTagsBySourceId(pokemon.id)); - - if (this.switchType === SwitchType.SWITCH) { + if (this.switchType === SwitchType.SWITCH || this.switchType === SwitchType.INITIAL_SWITCH) { const substitute = pokemon.getTag(SubstituteTag); if (substitute) { this.scene.tweens.add({ @@ -186,6 +184,11 @@ export class SwitchSummonPhase extends SummonPhase { } } + if (this.switchType !== SwitchType.INITIAL_SWITCH) { + pokemon.resetTurnData(); + pokemon.turnData.switchedInThisTurn = true; + } + this.lastPokemon?.resetSummonData(); this.scene.triggerPokemonFormChange(pokemon, SpeciesFormChangeActiveTrigger, true); diff --git a/src/test/abilities/speed_boost.test.ts b/src/test/abilities/speed_boost.test.ts new file mode 100644 index 00000000000..dd2e83aaa88 --- /dev/null +++ b/src/test/abilities/speed_boost.test.ts @@ -0,0 +1,125 @@ +import { Stat } from "#enums/stat"; +import { Abilities } from "#enums/abilities"; +import { Moves } from "#enums/moves"; +import { Species } from "#enums/species"; +import GameManager from "#test/utils/gameManager"; +import Phaser from "phaser"; +import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; +import { CommandPhase } from "#app/phases/command-phase"; +import { Command } from "#app/ui/command-ui-handler"; +import { AttemptRunPhase } from "#app/phases/attempt-run-phase"; + +describe("Abilities - Speed Boost", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + + beforeAll(() => { + phaserGame = new Phaser.Game({ + type: Phaser.HEADLESS, + }); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); + + beforeEach(() => { + game = new GameManager(phaserGame); + + game.override + .battleType("single") + .enemySpecies(Species.DRAGAPULT) + .ability(Abilities.SPEED_BOOST) + .enemyMoveset(Moves.SPLASH) + .moveset([ Moves.SPLASH, Moves.U_TURN ]); + }); + + it("should increase speed by 1 stage at end of turn", + async () => { + await game.classicMode.startBattle(); + + const playerPokemon = game.scene.getPlayerPokemon()!; + game.move.select(Moves.SPLASH); + await game.toNextTurn(); + + expect(playerPokemon.getStatStage(Stat.SPD)).toBe(1); + }); + + it("should not trigger this turn if pokemon was switched into combat via attack, but the turn after", + async () => { + await game.classicMode.startBattle([ + Species.SHUCKLE, + Species.NINJASK + ]); + + game.move.select(Moves.U_TURN); + game.doSelectPartyPokemon(1); + await game.toNextTurn(); + const playerPokemon = game.scene.getPlayerPokemon()!; + expect(playerPokemon.getStatStage(Stat.SPD)).toBe(0); + + game.move.select(Moves.SPLASH); + await game.toNextTurn(); + expect(playerPokemon.getStatStage(Stat.SPD)).toBe(1); + }); + + it("checking back to back swtiches", + async () => { + await game.classicMode.startBattle([ + Species.SHUCKLE, + Species.NINJASK + ]); + + game.move.select(Moves.U_TURN); + game.doSelectPartyPokemon(1); + await game.toNextTurn(); + let playerPokemon = game.scene.getPlayerPokemon()!; + expect(playerPokemon.getStatStage(Stat.SPD)).toBe(0); + + game.move.select(Moves.U_TURN); + game.doSelectPartyPokemon(1); + await game.toNextTurn(); + playerPokemon = game.scene.getPlayerPokemon()!; + expect(playerPokemon.getStatStage(Stat.SPD)).toBe(0); + + game.move.select(Moves.SPLASH); + await game.toNextTurn(); + expect(playerPokemon.getStatStage(Stat.SPD)).toBe(1); + }); + + it("should not trigger this turn if pokemon was switched into combat via normal switch, but the turn after", + async () => { + await game.classicMode.startBattle([ + Species.SHUCKLE, + Species.NINJASK + ]); + + game.doSwitchPokemon(1); + await game.toNextTurn(); + const playerPokemon = game.scene.getPlayerPokemon()!; + expect(playerPokemon.getStatStage(Stat.SPD)).toBe(0); + + game.move.select(Moves.SPLASH); + await game.toNextTurn(); + expect(playerPokemon.getStatStage(Stat.SPD)).toBe(1); + }); + + it("should not trigger if pokemon fails to escape", + async () => { + await game.classicMode.startBattle([ Species.SHUCKLE ]); + + const commandPhase = game.scene.getCurrentPhase() as CommandPhase; + commandPhase.handleCommand(Command.RUN, 0); + const runPhase = game.scene.getCurrentPhase() as AttemptRunPhase; + runPhase.forceFailEscape = true; + await game.phaseInterceptor.to(AttemptRunPhase); + await game.toNextTurn(); + + const playerPokemon = game.scene.getPlayerPokemon()!; + expect(playerPokemon.getStatStage(Stat.SPD)).toBe(0); + + game.move.select(Moves.SPLASH); + await game.toNextTurn(); + expect(playerPokemon.getStatStage(Stat.SPD)).toBe(1); + }); +}); From 15dedf06eda9b1cf1e012bc15c9df3c662dc0b28 Mon Sep 17 00:00:00 2001 From: PrabbyDD <147005742+PrabbyDD@users.noreply.github.com> Date: Tue, 29 Oct 2024 14:38:57 -0700 Subject: [PATCH 23/25] [P2] No Exp Gained after Switching in a Pokemon as the Opponent Faints (#4687) * fixing the exp bug * fixing the exp bug * dont think need to reset turn data there * changing a little bit * Update src/phases/faint-phase.ts Co-authored-by: innerthunder <168692175+innerthunder@users.noreply.github.com> --------- Co-authored-by: innerthunder <168692175+innerthunder@users.noreply.github.com> --- src/phases/faint-phase.ts | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/src/phases/faint-phase.ts b/src/phases/faint-phase.ts index eee1fd52938..8eb84beded5 100644 --- a/src/phases/faint-phase.ts +++ b/src/phases/faint-phase.ts @@ -65,6 +65,15 @@ export class FaintPhase extends PokemonPhase { } } + /** In case the current pokemon was just switched in, make sure it is counted as participating in the combat */ + this.scene.getPlayerField().forEach((pokemon, i) => { + if (pokemon?.isActive(true)) { + if (pokemon.isPlayer()) { + this.scene.currentBattle.addParticipant(pokemon as PlayerPokemon); + } + } + }); + if (!this.tryOverrideForBattleSpec()) { this.doFaint(); } From b3a0ca94753d13dd110c17f1856872a7b2dc9890 Mon Sep 17 00:00:00 2001 From: Mumble <171087428+frutescens@users.noreply.github.com> Date: Tue, 29 Oct 2024 19:31:24 -0700 Subject: [PATCH 24/25] [Misc] Update Donation Link (#4763) Co-authored-by: frutescens --- src/ui/menu-ui-handler.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/ui/menu-ui-handler.ts b/src/ui/menu-ui-handler.ts index 301d54daa3a..fea0a70af91 100644 --- a/src/ui/menu-ui-handler.ts +++ b/src/ui/menu-ui-handler.ts @@ -32,7 +32,7 @@ let wikiUrl = "https://wiki.pokerogue.net/start"; const discordUrl = "https://discord.gg/uWpTfdKG49"; const githubUrl = "https://github.com/pagefaultgames/pokerogue"; const redditUrl = "https://www.reddit.com/r/pokerogue"; -const donateUrl = "https://github.com/sponsors/patapancakes"; +const donateUrl = "https://github.com/sponsors/pagefaultgames"; export default class MenuUiHandler extends MessageUiHandler { private readonly textPadding = 8; From 5b9dfe17ad6c6d4abf829b2c17faddf13c69f818 Mon Sep 17 00:00:00 2001 From: PigeonBar <56974298+PigeonBar@users.noreply.github.com> Date: Wed, 30 Oct 2024 13:15:11 -0400 Subject: [PATCH 25/25] [P2] Fix Own Tempo Rockruff not being able to evolve (#4762) --- src/data/balance/pokemon-evolutions.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/data/balance/pokemon-evolutions.ts b/src/data/balance/pokemon-evolutions.ts index 4a6e44e0d51..c0b213e4def 100644 --- a/src/data/balance/pokemon-evolutions.ts +++ b/src/data/balance/pokemon-evolutions.ts @@ -1443,7 +1443,7 @@ export const pokemonEvolutions: PokemonEvolutions = { ], [Species.ROCKRUFF]: [ new SpeciesFormEvolution(Species.LYCANROC, "", "midday", 25, null, new SpeciesEvolutionCondition(p => (p.scene.arena.getTimeOfDay() === TimeOfDay.DAWN || p.scene.arena.getTimeOfDay() === TimeOfDay.DAY) && (p.formIndex === 0))), - new SpeciesFormEvolution(Species.LYCANROC, "", "dusk", 25, null, new SpeciesEvolutionCondition(p => p.formIndex === 1)), + new SpeciesFormEvolution(Species.LYCANROC, "own-tempo", "dusk", 25, null, new SpeciesEvolutionCondition(p => p.formIndex === 1)), new SpeciesFormEvolution(Species.LYCANROC, "", "midnight", 25, null, new SpeciesEvolutionCondition(p => (p.scene.arena.getTimeOfDay() === TimeOfDay.DUSK || p.scene.arena.getTimeOfDay() === TimeOfDay.NIGHT) && (p.formIndex === 0))) ], [Species.STEENEE]: [