pokemon-showdown/data/mods/gen9dlc1/abilities.ts
André Bastos Dias 815b5f260a
Some checks are pending
Node.js CI / build (18.x) (push) Waiting to run
Support inheritance of ability, item, and move conditions (#11754)
2026-03-19 03:44:48 -07:00

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 },
},
};