Spaces:
Paused
Paused
| 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() {}, | |
| }, | |
| }; | |