diff --git a/src/data/move.ts b/src/data/move.ts index 5797cf3fa..e0d94dd9e 100644 --- a/src/data/move.ts +++ b/src/data/move.ts @@ -1294,17 +1294,38 @@ export class SunlightChargeAttr extends ChargeAttr { } export class ElectroShotChargeAttr extends ChargeAttr { + private statIncreaseApplied: boolean; constructor() { super(ChargeAnim.ELECTRO_SHOT_CHARGING, 'absorbed electricity!', null, true); + // Add a flag because ChargeAttr skills use themselves twice instead of once over one-to-two turns + this.statIncreaseApplied = false; } apply(user: Pokemon, target: Pokemon, move: Move, args: any[]): Promise { return new Promise(resolve => { const weatherType = user.scene.arena.weather?.weatherType; - if (!user.scene.arena.weather?.isEffectSuppressed(user.scene) && (weatherType === WeatherType.RAIN || weatherType === WeatherType.HEAVY_RAIN)) + if (!user.scene.arena.weather?.isEffectSuppressed(user.scene) && (weatherType === WeatherType.RAIN || weatherType === WeatherType.HEAVY_RAIN)) { + // Apply the SPATK increase every call when used in the rain + const statChangeAttr = new StatChangeAttr(BattleStat.SPATK, 1, true); + statChangeAttr.apply(user, target, move, args); + // After the SPATK is raised, execute the move resolution e.g. deal damage resolve(false); - else - super.apply(user, target, move, args).then(result => resolve(result)); + } else { + if (!this.statIncreaseApplied) { + // Apply the SPATK increase only if it hasn't been applied before e.g. on the first turn charge up animation + const statChangeAttr = new StatChangeAttr(BattleStat.SPATK, 1, true); + statChangeAttr.apply(user, target, move, args); + // Set the flag to true so that on the following turn it doesn't raise SPATK a second time + this.statIncreaseApplied = true; + } + super.apply(user, target, move, args).then(result => { + if (!result) { + // On the second turn, reset the statIncreaseApplied flag without applying the SPATK increase + this.statIncreaseApplied = false; + } + resolve(result); + }); + } }); } } @@ -6128,7 +6149,6 @@ export function initMoves() { .makesContact(false), new AttackMove(Moves.ELECTRO_SHOT, Type.ELECTRIC, MoveCategory.SPECIAL, 130, 100, 10, 100, 0, 9) .attr(ElectroShotChargeAttr) - .attr(StatChangeAttr, BattleStat.SPATK, 1, true) .ignoresVirtual(), new AttackMove(Moves.TERA_STARSTORM, Type.NORMAL, MoveCategory.SPECIAL, 120, 100, 5, -1, 0, 9) .attr(TeraBlastCategoryAttr)