From af3532cdd0094ac34f8e4474f51241e30e5c2140 Mon Sep 17 00:00:00 2001 From: Dean Date: Tue, 4 Feb 2025 12:48:35 -0800 Subject: [PATCH] Add NoMidTurnActivationAttr --- src/data/ability.ts | 19 +++++++++++++++---- 1 file changed, 15 insertions(+), 4 deletions(-) diff --git a/src/data/ability.ts b/src/data/ability.ts index 23f4a2d467f..7123210ddc2 100644 --- a/src/data/ability.ts +++ b/src/data/ability.ts @@ -4524,6 +4524,15 @@ export class NoFusionAbilityAbAttr extends AbAttr { } } +/** + * Attach to a post-summon ability if it shouldn't be activated when it is obtained or activated during the battle + */ +export class NoMidTurnActivationAttr extends AbAttr { + constructor() { + super(false); + } +} + export class IgnoreTypeImmunityAbAttr extends AbAttr { private defenderType: Type; private allowedMoveTypes: Type[]; @@ -4867,10 +4876,11 @@ async function applyAbAttrsInternal( showAbilityInstant: boolean = false, simulated: boolean = false, messages: string[] = [], - considerPassive: boolean = true + midTurn: boolean = false /** Ignore passives and abilities with {@linkcode NoMidTurnActivationAttr} */ ) { for (const passive of [ false, true ]) { - if (!pokemon?.canApplyAbility(passive) || (passive && (pokemon.getPassiveAbility().id === pokemon.getAbility().id || !considerPassive))) { + if (!pokemon?.canApplyAbility(passive) || (passive && (pokemon.getPassiveAbility().id === pokemon.getAbility().id || midTurn)) + || (midTurn && pokemon.getAbility().hasAttr(NoMidTurnActivationAttr))) { continue; } @@ -5302,14 +5312,14 @@ export function applyPostItemLostAbAttrs(attrType: Constructor { - return applyAbAttrsInternal(PostSummonAbAttr, pokemon, (attr, passive) => attr.applyPostSummon(pokemon, passive, simulated, args), args, false, simulated, [], false); + return applyAbAttrsInternal(PostSummonAbAttr, pokemon, (attr, passive) => attr.applyPostSummon(pokemon, passive, simulated, args), args, false, simulated, [], true); } /** * Clears primal weather during the turn if {@linkcode pokemon}'s ability corresponds to one */ export function applyMidTurnClearWeatherAbAttrs(pokemon: Pokemon, simulated: boolean = false, ...args: any[]): Promise { - return applyAbAttrsInternal(PreSwitchOutClearWeatherAbAttr, pokemon, (attr, passive) => attr.applyPreSwitchOut(pokemon, passive, simulated, args), args, true, simulated, [], false); + return applyAbAttrsInternal(PreSwitchOutClearWeatherAbAttr, pokemon, (attr, passive) => attr.applyPreSwitchOut(pokemon, passive, simulated, [ ...args, true ]), args, true, simulated, [], true); } function queueShowAbility(pokemon: Pokemon, passive: boolean): void { globalScene.unshiftPhase(new ShowAbilityPhase(pokemon.id, passive)); @@ -5804,6 +5814,7 @@ export function initAbilities() { new Ability(Abilities.ILLUSION, 5) .attr(UncopiableAbilityAbAttr) .attr(UnswappableAbilityAbAttr) + .attr(NoMidTurnActivationAttr) .unimplemented(), new Ability(Abilities.IMPOSTER, 5) .attr(PostSummonTransformAbAttr)