diff --git a/src/data/abilities/ability.ts b/src/data/abilities/ability.ts index 120d1d413c4..bc9084ea7f2 100644 --- a/src/data/abilities/ability.ts +++ b/src/data/abilities/ability.ts @@ -3903,7 +3903,12 @@ export class PostSummonTransformAbAttr extends PostSummonAbAttr { const targets = pokemon.getOpponents(); const target = this.getTarget(targets); - if (target.summonData.illusion) { + //Prevents Imposter from triggering on a transformed target or if the user is already transformed + if (pokemon?.isTransformed() || target?.isTransformed()) { + return false; + } + + if (target?.summonData?.illusion) { return false; } diff --git a/src/data/moves/move.ts b/src/data/moves/move.ts index f94c59bb463..7d3fc253da7 100644 --- a/src/data/moves/move.ts +++ b/src/data/moves/move.ts @@ -7616,7 +7616,6 @@ export class TransformAttr extends MoveEffectAttr { globalScene.phaseManager.unshiftNew("PokemonTransformPhase", user.getBattlerIndex(), target.getBattlerIndex()); - globalScene.phaseManager.queueMessage(i18next.t("moveTriggers:transformedIntoTarget", { pokemonName: getPokemonNameWithAffix(user), targetName: getPokemonNameWithAffix(target) })); return true; } diff --git a/src/field/pokemon.ts b/src/field/pokemon.ts index e9cc4f70d70..deeffd736e8 100644 --- a/src/field/pokemon.ts +++ b/src/field/pokemon.ts @@ -1062,6 +1062,10 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { return species; } + isTransformed(): boolean { + return this.summonData.speciesForm !== null; + } + /** * @param {boolean} useIllusion - Whether we want the fusionSpeciesForm of the illusion or not. */ diff --git a/src/phases/move-phase.ts b/src/phases/move-phase.ts index 2e94b085948..0deb1c6f470 100644 --- a/src/phases/move-phase.ts +++ b/src/phases/move-phase.ts @@ -339,6 +339,17 @@ export class MovePhase extends BattlePhase { this.showMoveText(); } + if ( + //Prevent using Transform if either the user or target is already transformed + this.move.getMove().id === MoveId.TRANSFORM && + (targets[0].isTransformed() || this.pokemon.isTransformed()) + ) { + this.showMoveText(); + this.showFailedText(); + this.end(); + return; + } + // Clear out any two turn moves once they've been used. // TODO: Refactor move queues and remove this assignment; // Move queues should be handled by the calling `CommandPhase` or a manager for it