Jofthomas's picture
Jofthomas HF staff
Upload 4781 files
5c2ed06 verified
export const Abilities: import('../../../sim/dex-abilities').ModdedAbilityDataTable = {
disguise: {
inherit: true,
onDamage(damage, target, source, effect) {
if (
effect && effect.effectType === 'Move' &&
['mimikyu', 'mimikyutotem'].includes(target.species.id) && !target.transformed
) {
if (["rollout", "iceball"].includes(effect.id)) {
source.volatiles[effect.id].contactHitCount--;
}
this.add("-activate", target, "ability: Disguise");
this.effectState.busted = true;
return 0;
}
},
onUpdate(pokemon) {
if (['mimikyu', 'mimikyutotem'].includes(pokemon.species.id) && this.effectState.busted) {
const speciesid = pokemon.species.id === 'mimikyutotem' ? 'Mimikyu-Busted-Totem' : 'Mimikyu-Busted';
pokemon.formeChange(speciesid, this.effect, true);
}
},
},
darkaura: {
inherit: true,
flags: { breakable: 1 },
},
fairyaura: {
inherit: true,
flags: { breakable: 1 },
},
innerfocus: {
inherit: true,
rating: 1,
onTryBoost() {},
},
moody: {
inherit: true,
onResidual(pokemon) {
let stats: BoostID[] = [];
const boost: SparseBoostsTable = {};
let statPlus: BoostID;
for (statPlus in pokemon.boosts) {
if (pokemon.boosts[statPlus] < 6) {
stats.push(statPlus);
}
}
let randomStat = stats.length ? this.sample(stats) : undefined;
if (randomStat) boost[randomStat] = 2;
stats = [];
let statMinus: BoostID;
for (statMinus in pokemon.boosts) {
if (pokemon.boosts[statMinus] > -6 && statMinus !== randomStat) {
stats.push(statMinus);
}
}
randomStat = stats.length ? this.sample(stats) : undefined;
if (randomStat) boost[randomStat] = -1;
this.boost(boost, pokemon, pokemon);
},
},
oblivious: {
inherit: true,
onTryBoost() {},
},
owntempo: {
inherit: true,
onTryBoost() {},
},
rattled: {
onDamagingHit(damage, target, source, move) {
if (['Dark', 'Bug', 'Ghost'].includes(move.type)) {
this.boost({ spe: 1 });
}
},
name: "Rattled",
rating: 1.5,
num: 155,
},
scrappy: {
inherit: true,
onTryBoost() {},
},
slowstart: {
inherit: true,
condition: {
duration: 5,
onResidualOrder: 28,
onResidualSubOrder: 2,
onStart(target) {
this.add('-start', target, 'ability: Slow Start');
},
onModifyAtkPriority: 5,
onModifyAtk(atk, pokemon, target, move) {
// This is because the game checks the move's category in data, rather than what it is currently, unlike e.g. Huge Power
if (this.dex.moves.get(move.id).category === 'Physical') {
return this.chainModify(0.5);
}
},
onModifySpAPriority: 5,
onModifySpA(spa, pokemon, target, move) {
// Ordinary Z-moves like Breakneck Blitz will halve the user's Special Attack as well
if (this.dex.moves.get(move.id).category === 'Physical') {
return this.chainModify(0.5);
}
},
onModifySpe(spe, pokemon) {
return this.chainModify(0.5);
},
onEnd(target) {
this.add('-end', target, 'Slow Start');
},
},
},
soundproof: {
inherit: true,
onTryHit(target, source, move) {
if (move.flags['sound']) {
this.add('-immune', target, '[from] ability: Soundproof');
return null;
}
},
},
technician: {
inherit: true,
onBasePowerPriority: 19,
},
};