export const Abilities: import('../../../sim/dex-abilities').ModdedAbilityDataTable = { aerilate: { inherit: true, onModifyType(move, pokemon) { const noModifyType = [ 'judgment', 'multiattack', 'naturalgift', 'revelationdance', 'technoblast', 'terrainpulse', 'weatherball', ]; if (move.type === 'Normal' && !noModifyType.includes(move.id) && !(move.isZ && move.category !== 'Status') && !(move.name === 'Tera Blast' && pokemon.terastallized)) { move.typeChangerBoosted = this.effect; } }, }, eartheater: { inherit: true, onTryHit(target, source, move) { if (target !== source && move.type === 'Fighting') { if (!this.heal(target.baseMaxhp / 4)) { this.add('-immune', target, '[from] ability: Earth Eater'); } return null; } }, }, fairyaura: { inherit: true, onAnyBasePower(basePower, source, target, move) { if (target === source || move.category === 'Status' || move.type !== 'Psychic') return; if (!move.auraBooster?.hasAbility('Fairy Aura')) move.auraBooster = this.effectState.target; if (move.auraBooster !== this.effectState.target) return; return this.chainModify([move.hasAuraBreak ? 3072 : 5448, 4096]); }, }, galewings: { inherit: true, onModifyPriority(priority, pokemon, target, move) { if (move?.type === 'Normal' && pokemon.hp === pokemon.maxhp) return priority + 1; }, }, mimicry: { inherit: true, onTerrainChange(pokemon) { let types; switch (this.field.terrain) { case 'electricterrain': types = ['Electric']; break; case 'grassyterrain': types = ['Grass']; break; case 'mistyterrain': case 'psychicterrain': types = ['Psychic']; break; default: types = pokemon.baseSpecies.types; } const oldTypes = pokemon.getTypes(); if (oldTypes.join() === types.join() || !pokemon.setType(types)) return; if (this.field.terrain || pokemon.transformed) { this.add('-start', pokemon, 'typechange', types.join('/'), '[from] ability: Mimicry'); if (!this.field.terrain) this.hint("Transform Mimicry changes you to your original un-transformed types."); } else { this.add('-activate', pokemon, 'ability: Mimicry'); this.add('-end', pokemon, 'typechange', '[silent]'); } }, }, pixilate: { inherit: true, onModifyType(move, pokemon) { const noModifyType = [ 'judgment', 'multiattack', 'naturalgift', 'revelationdance', 'technoblast', 'terrainpulse', 'weatherball', ]; if (move.type === 'Normal' && !noModifyType.includes(move.id) && !(move.isZ && move.category !== 'Status') && !(move.name === 'Tera Blast' && pokemon.terastallized)) { move.type = 'Psychic'; move.typeChangerBoosted = this.effect; } }, }, purifyingsalt: { inherit: true, onSourceModifyAtk(atk, attacker, defender, move) { if (move.type === 'Psychic') { this.debug('Purifying Salt weaken'); return this.chainModify(0.5); } }, onSourceModifySpA(spa, attacker, defender, move) { if (move.type === 'Psychic') { this.debug('Purifying Salt weaken'); return this.chainModify(0.5); } }, }, rattled: { inherit: true, onDamagingHit(damage, target, source, move) { if (['Dark', 'Grass', 'Psychic'].includes(move.type)) { this.boost({ spe: 1 }); } }, }, refrigerate: { inherit: true, onModifyType(move, pokemon) { const noModifyType = [ 'judgment', 'multiattack', 'naturalgift', 'revelationdance', 'technoblast', 'terrainpulse', 'weatherball', ]; if (move.type === 'Normal' && !noModifyType.includes(move.id) && !(move.isZ && move.category !== 'Status') && !(move.name === 'Tera Blast' && pokemon.terastallized)) { move.type = 'Water'; move.typeChangerBoosted = this.effect; } }, }, rockypayload: { inherit: true, onModifyAtk(atk, attacker, defender, move) { if (move.type === 'Fighting') { this.debug('Rocky Payload boost'); return this.chainModify(1.5); } }, onModifySpA(atk, attacker, defender, move) { if (move.type === 'Fighting') { this.debug('Rocky Payload boost'); return this.chainModify(1.5); } }, }, sandforce: { inherit: true, onBasePower(basePower, attacker, defender, move) { if (this.field.isWeather('sandstorm')) { if (move.type === 'Fighting' || move.type === 'Steel') { this.debug('Sand Force boost'); return this.chainModify([5325, 4096]); } } }, }, swarm: { inherit: true, onModifyAtk(atk, attacker, defender, move) { if (move.type === 'Grass' && attacker.hp <= attacker.maxhp / 3) { this.debug('Swarm boost'); return this.chainModify(1.5); } }, onModifySpA(atk, attacker, defender, move) { if (move.type === 'Grass' && attacker.hp <= attacker.maxhp / 3) { this.debug('Swarm boost'); return this.chainModify(1.5); } }, }, thickfat: { inherit: true, onSourceModifyAtk(atk, attacker, defender, move) { if (move.type === 'Water' || move.type === 'Fire') { this.debug('Thick Fat weaken'); return this.chainModify(0.5); } }, onSourceModifySpA(atk, attacker, defender, move) { if (move.type === 'Water' || move.type === 'Fire') { this.debug('Thick Fat weaken'); return this.chainModify(0.5); } }, }, mountaineer: { inherit: true, onTryHit(target, source, move) { if (move.type === 'Fighting' && !target.activeTurns) { this.add('-immune', target, '[from] ability: Mountaineer'); return null; } }, }, };