diff --git a/src/data/abilities/ability.ts b/src/data/abilities/ability.ts index 199e0af3efb..b42b2ba07e7 100644 --- a/src/data/abilities/ability.ts +++ b/src/data/abilities/ability.ts @@ -7824,25 +7824,33 @@ export function initAbilities() { new Ability(AbilityId.TOXIC_CHAIN, 9) .attr(PostAttackApplyStatusEffectAbAttr, false, 30, StatusEffect.TOXIC), new Ability(AbilityId.EMBODY_ASPECT_TEAL, 9) - .attr(PostTeraFormChangeStatChangeAbAttr, [ Stat.SPD ], 1) + .attr(PostSummonStatStageChangeAbAttr, [ Stat.SPD ], 1, true) //Activiates on switch in when Terastallized + .attr(PostTeraFormChangeStatChangeAbAttr, [ Stat.SPD ], 1) //Activates mid round when Terastallized .uncopiable() .unreplaceable() // TODO is this true? - .attr(NoTransformAbilityAbAttr), + .attr(NoTransformAbilityAbAttr) + .condition(pokemon => pokemon.isTerastallized), new Ability(AbilityId.EMBODY_ASPECT_WELLSPRING, 9) + .attr(PostSummonStatStageChangeAbAttr, [ Stat.SPDEF ], 1, true) .attr(PostTeraFormChangeStatChangeAbAttr, [ Stat.SPDEF ], 1) .uncopiable() .unreplaceable() - .attr(NoTransformAbilityAbAttr), + .attr(NoTransformAbilityAbAttr) + .condition(pokemon => pokemon.isTerastallized), new Ability(AbilityId.EMBODY_ASPECT_HEARTHFLAME, 9) + .attr(PostSummonStatStageChangeAbAttr, [ Stat.ATK ], 1, true) .attr(PostTeraFormChangeStatChangeAbAttr, [ Stat.ATK ], 1) .uncopiable() .unreplaceable() - .attr(NoTransformAbilityAbAttr), + .attr(NoTransformAbilityAbAttr) + .condition(pokemon => pokemon.isTerastallized), new Ability(AbilityId.EMBODY_ASPECT_CORNERSTONE, 9) + .attr(PostSummonStatStageChangeAbAttr, [ Stat.SPD ], 1, true) .attr(PostTeraFormChangeStatChangeAbAttr, [ Stat.DEF ], 1) .uncopiable() .unreplaceable() - .attr(NoTransformAbilityAbAttr), + .attr(NoTransformAbilityAbAttr) + .condition(pokemon => pokemon.isTerastallized), new Ability(AbilityId.TERA_SHIFT, 9, 2) .attr(PostSummonFormChangeAbAttr, p => p.getFormKey() ? 0 : 1) .uncopiable() diff --git a/test/abilities/embody-aspect.test.ts b/test/abilities/embody-aspect.test.ts new file mode 100644 index 00000000000..43e4f9015dd --- /dev/null +++ b/test/abilities/embody-aspect.test.ts @@ -0,0 +1,63 @@ +import { AbilityId } from "#enums/ability-id"; +import { MoveId } from "#enums/move-id"; +import { SpeciesId } from "#enums/species-id"; +import { Stat } from "#enums/stat"; +import { GameManager } from "#test/test-utils/game-manager"; +import Phaser from "phaser"; +import { afterEach, beforeAll, beforeEach, describe, expect, it } from "vitest"; + +describe("Ability - Embody Aspect", () => { + let phaserGame: Phaser.Game; + let game: GameManager; + + const teraForm = 4; + const baseForm = 0; + + beforeAll(() => { + phaserGame = new Phaser.Game({ + type: Phaser.HEADLESS, + }); + }); + + afterEach(() => { + game.phaseInterceptor.restoreOg(); + }); + + beforeEach(() => { + game = new GameManager(phaserGame); + game.override + .moveset(MoveId.SPLASH) + .ability(AbilityId.EMBODY_ASPECT_TEAL) + .battleStyle("single") + .criticalHits(false) + .enemySpecies(SpeciesId.MAGIKARP) + .enemyMoveset(MoveId.SPLASH); + }); + + it("Embody Aspect should activate on switching in if user is terrestrialized", async () => { + await game.classicMode.startBattle([SpeciesId.OGERPON, SpeciesId.ABOMASNOW]); + + const ogerpon = game.field.getPlayerPokemon(); + expect(ogerpon.formIndex).toBe(baseForm); + expect(ogerpon.getStatStage(Stat.SPD)).toBe(0); + + //Also terastallizes Ogerpon + game.move.selectWithTera(MoveId.SPLASH); + + await game.phaseInterceptor.to("QuietFormChangePhase"); + expect(ogerpon.formIndex).toBe(teraForm); + await game.toNextTurn(); + expect(ogerpon.getStatStage(Stat.SPD)).toBe(1); + + //Switch Ogerpon out + game.doSwitchPokemon(1); + await game.toNextTurn(); + + //Switch Ogerpon back in + game.doSwitchPokemon(1); + await game.toNextTurn(); + + //Ability activated + expect(ogerpon.getStatStage(Stat.SPD)).toBe(1); + }); +});