export const Abilities: import('../../../sim/dex-abilities').ModdedAbilityDataTable = { commander: { inherit: true, flags: { failroleplay: 1, noreceiver: 1, noentrain: 1, notrace: 1, failskillswap: 1, notransform: 1 }, }, gulpmissile: { inherit: true, flags: { failroleplay: 1, noreceiver: 1, noentrain: 1, notrace: 1, failskillswap: 1, cantsuppress: 1, notransform: 1 }, }, protosynthesis: { inherit: true, onWeatherChange(pokemon) { // Protosynthesis is not affected by Utility Umbrella if (this.field.isWeather('sunnyday')) { pokemon.addVolatile('protosynthesis'); } else if (!pokemon.volatiles['protosynthesis']?.fromBooster && this.field.weather !== 'sunnyday') { // Protosynthesis will not deactivite if Sun is suppressed, hence the direct ID check (isWeather respects supression) pokemon.removeVolatile('protosynthesis'); } }, condition: { noCopy: true, onStart(pokemon, source, effect) { if (effect?.name === 'Booster Energy') { this.effectState.fromBooster = true; this.add('-activate', pokemon, 'ability: Protosynthesis', '[fromitem]'); } else { this.add('-activate', pokemon, 'ability: Protosynthesis'); } this.effectState.bestStat = pokemon.getBestStat(false, true); this.add('-start', pokemon, 'protosynthesis' + this.effectState.bestStat); }, onModifyAtkPriority: 5, onModifyAtk(atk, pokemon) { if (this.effectState.bestStat !== 'atk') return; this.debug('Protosynthesis atk boost'); return this.chainModify([5325, 4096]); }, onModifyDefPriority: 6, onModifyDef(def, pokemon) { if (this.effectState.bestStat !== 'def') return; this.debug('Protosynthesis def boost'); return this.chainModify([5325, 4096]); }, onModifySpAPriority: 5, onModifySpA(spa, pokemon) { if (this.effectState.bestStat !== 'spa') return; this.debug('Protosynthesis spa boost'); return this.chainModify([5325, 4096]); }, onModifySpDPriority: 6, onModifySpD(spd, pokemon) { if (this.effectState.bestStat !== 'spd') return; this.debug('Protosynthesis spd boost'); return this.chainModify([5325, 4096]); }, onModifySpe(spe, pokemon) { if (this.effectState.bestStat !== 'spe') return; this.debug('Protosynthesis spe boost'); return this.chainModify(1.5); }, onEnd(pokemon) { this.add('-end', pokemon, 'Protosynthesis'); }, }, flags: { failroleplay: 1, noreceiver: 1, noentrain: 1, notrace: 1, failskillswap: 1, notransform: 1, cantsuppress: 1 }, }, quarkdrive: { inherit: true, condition: { noCopy: true, onStart(pokemon, source, effect) { if (effect?.name === 'Booster Energy') { this.effectState.fromBooster = true; this.add('-activate', pokemon, 'ability: Quark Drive', '[fromitem]'); } else { this.add('-activate', pokemon, 'ability: Quark Drive'); } this.effectState.bestStat = pokemon.getBestStat(false, true); this.add('-start', pokemon, 'quarkdrive' + this.effectState.bestStat); }, onModifyAtkPriority: 5, onModifyAtk(atk, pokemon) { if (this.effectState.bestStat !== 'atk') return; this.debug('Quark Drive atk boost'); return this.chainModify([5325, 4096]); }, onModifyDefPriority: 6, onModifyDef(def, pokemon) { if (this.effectState.bestStat !== 'def') return; this.debug('Quark Drive def boost'); return this.chainModify([5325, 4096]); }, onModifySpAPriority: 5, onModifySpA(spa, pokemon) { if (this.effectState.bestStat !== 'spa') return; this.debug('Quark Drive spa boost'); return this.chainModify([5325, 4096]); }, onModifySpDPriority: 6, onModifySpD(spd, pokemon) { if (this.effectState.bestStat !== 'spd') return; this.debug('Quark Drive spd boost'); return this.chainModify([5325, 4096]); }, onModifySpe(spe, pokemon) { if (this.effectState.bestStat !== 'spe') return; this.debug('Quark Drive spe boost'); return this.chainModify(1.5); }, onEnd(pokemon) { this.add('-end', pokemon, 'Quark Drive'); }, }, flags: { failroleplay: 1, noreceiver: 1, noentrain: 1, notrace: 1, failskillswap: 1, notransform: 1, cantsuppress: 1 }, }, };