Spaces:
Running
Running
export const Abilities: import('../../../sim/dex-abilities').ModdedAbilityDataTable = { | |
anticipation: { | |
inherit: true, | |
onStart(pokemon) { | |
for (const target of pokemon.foes()) { | |
for (const moveSlot of target.moveSlots) { | |
const move = this.dex.moves.get(moveSlot.move); | |
if (move.category !== 'Status' && ( | |
this.dex.getImmunity(move.type, pokemon) && this.dex.getEffectiveness(move.type, pokemon) > 0 || | |
move.ohko | |
)) { | |
this.add('-ability', pokemon, 'Anticipation'); | |
return; | |
} | |
} | |
} | |
}, | |
}, | |
frisk: { | |
inherit: true, | |
onStart(pokemon) { | |
const target = pokemon.side.randomFoe(); | |
if (target?.item) { | |
this.add('-item', '', target.getItem().name, '[from] ability: Frisk', `[of] ${pokemon}`); | |
} | |
}, | |
}, | |
infiltrator: { | |
inherit: true, | |
rating: 1.5, | |
}, | |
keeneye: { | |
inherit: true, | |
onModifyMove() {}, | |
}, | |
magicbounce: { | |
inherit: true, | |
onAllyTryHitSide(target, source, move) { | |
if (target.isAlly(source) || move.hasBounced || !move.flags['reflectable']) { | |
return; | |
} | |
const newMove = this.dex.getActiveMove(move.id); | |
newMove.hasBounced = true; | |
newMove.pranksterBoosted = false; | |
this.actions.useMove(newMove, this.effectState.target, { target: source }); | |
return null; | |
}, | |
}, | |
oblivious: { | |
inherit: true, | |
onUpdate(pokemon) { | |
if (pokemon.volatiles['attract']) { | |
pokemon.removeVolatile('attract'); | |
this.add('-end', pokemon, 'move: Attract', '[from] ability: Oblivious'); | |
} | |
}, | |
onTryHit(pokemon, target, move) { | |
if (move.id === 'captivate') { | |
this.add('-immune', pokemon, '[from] Oblivious'); | |
return null; | |
} | |
}, | |
rating: 0.5, | |
}, | |
overcoat: { | |
inherit: true, | |
onTryHit() {}, | |
flags: {}, | |
rating: 0.5, | |
}, | |
sapsipper: { | |
inherit: true, | |
onAllyTryHitSide() {}, | |
}, | |
serenegrace: { | |
inherit: true, | |
onModifyMove(move) { | |
if (move.secondaries && move.id !== 'secretpower') { | |
this.debug('doubling secondary chance'); | |
for (const secondary of move.secondaries) { | |
if (secondary.chance) secondary.chance *= 2; | |
} | |
} | |
}, | |
}, | |
soundproof: { | |
inherit: true, | |
onAllyTryHitSide() {}, | |
}, | |
}; | |