mirror of
https://github.com/smogon/pokemon-showdown.git
synced 2026-03-21 17:25:10 -05:00
87 lines
2.9 KiB
TypeScript
87 lines
2.9 KiB
TypeScript
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 suppression)
|
|
pokemon.removeVolatile('protosynthesis');
|
|
}
|
|
},
|
|
condition: {
|
|
inherit: true,
|
|
onModifyAtk() {
|
|
if (this.effectState.bestStat !== 'atk') return;
|
|
this.debug('Protosynthesis atk boost');
|
|
return this.chainModify([5325, 4096]);
|
|
},
|
|
onModifyDef() {
|
|
if (this.effectState.bestStat !== 'def') return;
|
|
this.debug('Protosynthesis def boost');
|
|
return this.chainModify([5325, 4096]);
|
|
},
|
|
onModifySpA() {
|
|
if (this.effectState.bestStat !== 'spa') return;
|
|
this.debug('Protosynthesis spa boost');
|
|
return this.chainModify([5325, 4096]);
|
|
},
|
|
onModifySpD() {
|
|
if (this.effectState.bestStat !== 'spd') return;
|
|
this.debug('Protosynthesis spd boost');
|
|
return this.chainModify([5325, 4096]);
|
|
},
|
|
onModifySpe() {
|
|
if (this.effectState.bestStat !== 'spe') return;
|
|
this.debug('Protosynthesis spe boost');
|
|
return this.chainModify(1.5);
|
|
},
|
|
},
|
|
flags: { failroleplay: 1, noreceiver: 1, noentrain: 1, notrace: 1, failskillswap: 1, notransform: 1, cantsuppress: 1 },
|
|
},
|
|
quarkdrive: {
|
|
inherit: true,
|
|
condition: {
|
|
inherit: true,
|
|
onModifyAtk() {
|
|
if (this.effectState.bestStat !== 'atk') return;
|
|
this.debug('Quark Drive atk boost');
|
|
return this.chainModify([5325, 4096]);
|
|
},
|
|
onModifyDef() {
|
|
if (this.effectState.bestStat !== 'def') return;
|
|
this.debug('Quark Drive def boost');
|
|
return this.chainModify([5325, 4096]);
|
|
},
|
|
onModifySpA() {
|
|
if (this.effectState.bestStat !== 'spa') return;
|
|
this.debug('Quark Drive spa boost');
|
|
return this.chainModify([5325, 4096]);
|
|
},
|
|
onModifySpD() {
|
|
if (this.effectState.bestStat !== 'spd') return;
|
|
this.debug('Quark Drive spd boost');
|
|
return this.chainModify([5325, 4096]);
|
|
},
|
|
onModifySpe() {
|
|
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 },
|
|
},
|
|
};
|