{ "version": 3, "sources": ["../../../data/abilities.ts"], "sourcesContent": ["/*\r\n\r\nRatings and how they work:\r\n\r\n-1: Detrimental\r\n\t An ability that severely harms the user.\r\n\tex. Defeatist, Slow Start\r\n\r\n 0: Useless\r\n\t An ability with no overall benefit in a singles battle.\r\n\tex. Color Change, Plus\r\n\r\n 1: Ineffective\r\n\t An ability that has minimal effect or is only useful in niche situations.\r\n\tex. Light Metal, Suction Cups\r\n\r\n 2: Useful\r\n\t An ability that can be generally useful.\r\n\tex. Flame Body, Overcoat\r\n\r\n 3: Effective\r\n\t An ability with a strong effect on the user or foe.\r\n\tex. Chlorophyll, Sturdy\r\n\r\n 4: Very useful\r\n\t One of the more popular abilities. It requires minimal support to be effective.\r\n\tex. Adaptability, Magic Bounce\r\n\r\n 5: Essential\r\n\t The sort of ability that defines metagames.\r\n\tex. Imposter, Shadow Tag\r\n\r\n*/\r\n\r\nexport const Abilities: {[abilityid: string]: AbilityData} = {\r\n\tnoability: {\r\n\t\tisNonstandard: \"Past\",\r\n\t\tname: \"No Ability\",\r\n\t\trating: 0.1,\r\n\t\tnum: 0,\r\n\t},\r\n\tadaptability: {\r\n\t\tonModifyMove(move) {\r\n\t\t\tmove.stab = 2;\r\n\t\t},\r\n\t\tname: \"Adaptability\",\r\n\t\trating: 4,\r\n\t\tnum: 91,\r\n\t},\r\n\taerilate: {\r\n\t\tonModifyTypePriority: -1,\r\n\t\tonModifyType(move, pokemon) {\r\n\t\t\tconst noModifyType = [\r\n\t\t\t\t'judgment', 'multiattack', 'naturalgift', 'revelationdance', 'technoblast', 'terrainpulse', 'weatherball',\r\n\t\t\t];\r\n\t\t\tif (move.type === 'Normal' && !noModifyType.includes(move.id) &&\r\n\t\t\t\t!(move.isZ && move.category !== 'Status') && !(move.name === 'Tera Blast' && pokemon.terastallized)) {\r\n\t\t\t\tmove.type = 'Flying';\r\n\t\t\t\tmove.typeChangerBoosted = this.effect;\r\n\t\t\t}\r\n\t\t},\r\n\t\tonBasePowerPriority: 23,\r\n\t\tonBasePower(basePower, pokemon, target, move) {\r\n\t\t\tif (move.typeChangerBoosted === this.effect) return this.chainModify([4915, 4096]);\r\n\t\t},\r\n\t\tname: \"Aerilate\",\r\n\t\trating: 4,\r\n\t\tnum: 184,\r\n\t},\r\n\taftermath: {\r\n\t\tname: \"Aftermath\",\r\n\t\tonDamagingHitOrder: 1,\r\n\t\tonDamagingHit(damage, target, source, move) {\r\n\t\t\tif (!target.hp && this.checkMoveMakesContact(move, source, target, true)) {\r\n\t\t\t\tthis.damage(source.baseMaxhp / 4, source, target);\r\n\t\t\t}\r\n\t\t},\r\n\t\trating: 2,\r\n\t\tnum: 106,\r\n\t},\r\n\tairlock: {\r\n\t\tonSwitchIn(pokemon) {\r\n\t\t\tthis.effectState.switchingIn = true;\r\n\t\t},\r\n\t\tonStart(pokemon) {\r\n\t\t\t// Air Lock does not activate when Skill Swapped or when Neutralizing Gas leaves the field\r\n\t\t\tif (this.effectState.switchingIn) {\r\n\t\t\t\tthis.add('-ability', pokemon, 'Air Lock');\r\n\t\t\t\tthis.effectState.switchingIn = false;\r\n\t\t\t}\r\n\t\t\tthis.eachEvent('WeatherChange', this.effect);\r\n\t\t},\r\n\t\tonEnd(pokemon) {\r\n\t\t\tthis.eachEvent('WeatherChange', this.effect);\r\n\t\t},\r\n\t\tsuppressWeather: true,\r\n\t\tname: \"Air Lock\",\r\n\t\trating: 1.5,\r\n\t\tnum: 76,\r\n\t},\r\n\tanalytic: {\r\n\t\tonBasePowerPriority: 21,\r\n\t\tonBasePower(basePower, pokemon) {\r\n\t\t\tlet boosted = true;\r\n\t\t\tfor (const target of this.getAllActive()) {\r\n\t\t\t\tif (target === pokemon) continue;\r\n\t\t\t\tif (this.queue.willMove(target)) {\r\n\t\t\t\t\tboosted = false;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (boosted) {\r\n\t\t\t\tthis.debug('Analytic boost');\r\n\t\t\t\treturn this.chainModify([5325, 4096]);\r\n\t\t\t}\r\n\t\t},\r\n\t\tname: \"Analytic\",\r\n\t\trating: 2.5,\r\n\t\tnum: 148,\r\n\t},\r\n\tangerpoint: {\r\n\t\tonHit(target, source, move) {\r\n\t\t\tif (!target.hp) return;\r\n\t\t\tif (move?.effectType === 'Move' && target.getMoveHitData(move).crit) {\r\n\t\t\t\tthis.boost({atk: 12}, target, target);\r\n\t\t\t}\r\n\t\t},\r\n\t\tname: \"Anger Point\",\r\n\t\trating: 1,\r\n\t\tnum: 83,\r\n\t},\r\n\tangershell: {\r\n\t\tonDamage(damage, target, source, effect) {\r\n\t\t\tif (\r\n\t\t\t\teffect.effectType === \"Move\" &&\r\n\t\t\t\t!effect.multihit &&\r\n\t\t\t\t(!effect.negateSecondary && !(effect.hasSheerForce && source.hasAbility('sheerforce')))\r\n\t\t\t) {\r\n\t\t\t\tthis.effectState.checkedAngerShell = false;\r\n\t\t\t} else {\r\n\t\t\t\tthis.effectState.checkedAngerShell = true;\r\n\t\t\t}\r\n\t\t},\r\n\t\tonTryEatItem(item) {\r\n\t\t\tconst healingItems = [\r\n\t\t\t\t'aguavberry', 'enigmaberry', 'figyberry', 'iapapaberry', 'magoberry', 'sitrusberry', 'wikiberry', 'oranberry', 'berryjuice',\r\n\t\t\t];\r\n\t\t\tif (healingItems.includes(item.id)) {\r\n\t\t\t\treturn this.effectState.checkedAngerShell;\r\n\t\t\t}\r\n\t\t\treturn true;\r\n\t\t},\r\n\t\tonAfterMoveSecondary(target, source, move) {\r\n\t\t\tthis.effectState.checkedAngerShell = true;\r\n\t\t\tif (!source || source === target || !target.hp || !move.totalDamage) return;\r\n\t\t\tconst lastAttackedBy = target.getLastAttackedBy();\r\n\t\t\tif (!lastAttackedBy) return;\r\n\t\t\tconst damage = move.multihit ? move.totalDamage : lastAttackedBy.damage;\r\n\t\t\tif (target.hp <= target.maxhp / 2 && target.hp + damage > target.maxhp / 2) {\r\n\t\t\t\tthis.boost({atk: 1, spa: 1, spe: 1, def: -1, spd: -1}, target, target);\r\n\t\t\t}\r\n\t\t},\r\n\t\tname: \"Anger Shell\",\r\n\t\trating: 4,\r\n\t\tnum: 271,\r\n\t},\r\n\tanticipation: {\r\n\t\tonStart(pokemon) {\r\n\t\t\tfor (const target of pokemon.foes()) {\r\n\t\t\t\tfor (const moveSlot of target.moveSlots) {\r\n\t\t\t\t\tconst move = this.dex.moves.get(moveSlot.move);\r\n\t\t\t\t\tif (move.category === 'Status') continue;\r\n\t\t\t\t\tconst moveType = move.id === 'hiddenpower' ? target.hpType : move.type;\r\n\t\t\t\t\tif (\r\n\t\t\t\t\t\tthis.dex.getImmunity(moveType, pokemon) && this.dex.getEffectiveness(moveType, pokemon) > 0 ||\r\n\t\t\t\t\t\tmove.ohko\r\n\t\t\t\t\t) {\r\n\t\t\t\t\t\tthis.add('-ability', pokemon, 'Anticipation');\r\n\t\t\t\t\t\treturn;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\tname: \"Anticipation\",\r\n\t\trating: 0.5,\r\n\t\tnum: 107,\r\n\t},\r\n\tarenatrap: {\r\n\t\tonFoeTrapPokemon(pokemon) {\r\n\t\t\tif (!pokemon.isAdjacent(this.effectState.target)) return;\r\n\t\t\tif (pokemon.isGrounded()) {\r\n\t\t\t\tpokemon.tryTrap(true);\r\n\t\t\t}\r\n\t\t},\r\n\t\tonFoeMaybeTrapPokemon(pokemon, source) {\r\n\t\t\tif (!source) source = this.effectState.target;\r\n\t\t\tif (!source || !pokemon.isAdjacent(source)) return;\r\n\t\t\tif (pokemon.isGrounded(!pokemon.knownType)) { // Negate immunity if the type is unknown\r\n\t\t\t\tpokemon.maybeTrapped = true;\r\n\t\t\t}\r\n\t\t},\r\n\t\tname: \"Arena Trap\",\r\n\t\trating: 5,\r\n\t\tnum: 71,\r\n\t},\r\n\tarmortail: {\r\n\t\tonFoeTryMove(target, source, move) {\r\n\t\t\tconst targetAllExceptions = ['perishsong', 'flowershield', 'rototiller'];\r\n\t\t\tif (move.target === 'foeSide' || (move.target === 'all' && !targetAllExceptions.includes(move.id))) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tconst armorTailHolder = this.effectState.target;\r\n\t\t\tif ((source.isAlly(armorTailHolder) || move.target === 'all') && move.priority > 0.1) {\r\n\t\t\t\tthis.attrLastMove('[still]');\r\n\t\t\t\tthis.add('cant', armorTailHolder, 'ability: Armor Tail', move, '[of] ' + target);\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\t\tisBreakable: true,\r\n\t\tname: \"Armor Tail\",\r\n\t\trating: 2.5,\r\n\t\tnum: 296,\r\n\t},\r\n\taromaveil: {\r\n\t\tonAllyTryAddVolatile(status, target, source, effect) {\r\n\t\t\tif (['attract', 'disable', 'encore', 'healblock', 'taunt', 'torment'].includes(status.id)) {\r\n\t\t\t\tif (effect.effectType === 'Move') {\r\n\t\t\t\t\tconst effectHolder = this.effectState.target;\r\n\t\t\t\t\tthis.add('-block', target, 'ability: Aroma Veil', '[of] ' + effectHolder);\r\n\t\t\t\t}\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t},\r\n\t\tisBreakable: true,\r\n\t\tname: \"Aroma Veil\",\r\n\t\trating: 2,\r\n\t\tnum: 165,\r\n\t},\r\n\tasoneglastrier: {\r\n\t\tonPreStart(pokemon) {\r\n\t\t\tthis.add('-ability', pokemon, 'As One');\r\n\t\t\tthis.add('-ability', pokemon, 'Unnerve');\r\n\t\t\tthis.effectState.unnerved = true;\r\n\t\t},\r\n\t\tonEnd() {\r\n\t\t\tthis.effectState.unnerved = false;\r\n\t\t},\r\n\t\tonFoeTryEatItem() {\r\n\t\t\treturn !this.effectState.unnerved;\r\n\t\t},\r\n\t\tonSourceAfterFaint(length, target, source, effect) {\r\n\t\t\tif (effect && effect.effectType === 'Move') {\r\n\t\t\t\tthis.boost({atk: length}, source, source, this.dex.abilities.get('chillingneigh'));\r\n\t\t\t}\r\n\t\t},\r\n\t\tisPermanent: true,\r\n\t\tname: \"As One (Glastrier)\",\r\n\t\trating: 3.5,\r\n\t\tnum: 266,\r\n\t},\r\n\tasonespectrier: {\r\n\t\tonPreStart(pokemon) {\r\n\t\t\tthis.add('-ability', pokemon, 'As One');\r\n\t\t\tthis.add('-ability', pokemon, 'Unnerve');\r\n\t\t\tthis.effectState.unnerved = true;\r\n\t\t},\r\n\t\tonEnd() {\r\n\t\t\tthis.effectState.unnerved = false;\r\n\t\t},\r\n\t\tonFoeTryEatItem() {\r\n\t\t\treturn !this.effectState.unnerved;\r\n\t\t},\r\n\t\tonSourceAfterFaint(length, target, source, effect) {\r\n\t\t\tif (effect && effect.effectType === 'Move') {\r\n\t\t\t\tthis.boost({spa: length}, source, source, this.dex.abilities.get('grimneigh'));\r\n\t\t\t}\r\n\t\t},\r\n\t\tisPermanent: true,\r\n\t\tname: \"As One (Spectrier)\",\r\n\t\trating: 3.5,\r\n\t\tnum: 267,\r\n\t},\r\n\taurabreak: {\r\n\t\tonStart(pokemon) {\r\n\t\t\tif (this.suppressingAbility(pokemon)) return;\r\n\t\t\tthis.add('-ability', pokemon, 'Aura Break');\r\n\t\t},\r\n\t\tonAnyTryPrimaryHit(target, source, move) {\r\n\t\t\tif (target === source || move.category === 'Status') return;\r\n\t\t\tmove.hasAuraBreak = true;\r\n\t\t},\r\n\t\tisBreakable: true,\r\n\t\tname: \"Aura Break\",\r\n\t\trating: 1,\r\n\t\tnum: 188,\r\n\t},\r\n\tbaddreams: {\r\n\t\tonResidualOrder: 28,\r\n\t\tonResidualSubOrder: 2,\r\n\t\tonResidual(pokemon) {\r\n\t\t\tif (!pokemon.hp) return;\r\n\t\t\tfor (const target of pokemon.foes()) {\r\n\t\t\t\tif (target.status === 'slp' || target.hasAbility('comatose')) {\r\n\t\t\t\t\tthis.damage(target.baseMaxhp / 8, target, pokemon);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\tname: \"Bad Dreams\",\r\n\t\trating: 1.5,\r\n\t\tnum: 123,\r\n\t},\r\n\tballfetch: {\r\n\t\tname: \"Ball Fetch\",\r\n\t\trating: 0,\r\n\t\tnum: 237,\r\n\t},\r\n\tbattery: {\r\n\t\tonAllyBasePowerPriority: 22,\r\n\t\tonAllyBasePower(basePower, attacker, defender, move) {\r\n\t\t\tif (attacker !== this.effectState.target && move.category === 'Special') {\r\n\t\t\t\tthis.debug('Battery boost');\r\n\t\t\t\treturn this.chainModify([5325, 4096]);\r\n\t\t\t}\r\n\t\t},\r\n\t\tname: \"Battery\",\r\n\t\trating: 0,\r\n\t\tnum: 217,\r\n\t},\r\n\tbattlearmor: {\r\n\t\tonCriticalHit: false,\r\n\t\tisBreakable: true,\r\n\t\tname: \"Battle Armor\",\r\n\t\trating: 1,\r\n\t\tnum: 4,\r\n\t},\r\n\tbattlebond: {\r\n\t\tonSourceAfterFaint(length, target, source, effect) {\r\n\t\t\tif (effect?.effectType !== 'Move') return;\r\n\t\t\tif (source.abilityState.battleBondTriggered) return;\r\n\t\t\tif (source.species.id === 'greninja' && source.hp && !source.transformed && source.side.foePokemonLeft()) {\r\n\t\t\t\tthis.add('-activate', source, 'ability: Battle Bond');\r\n\t\t\t\tthis.boost({atk: 1, spa: 1, spe: 1}, source, source, this.effect);\r\n\t\t\t\tsource.abilityState.battleBondTriggered = true;\r\n\t\t\t}\r\n\t\t},\r\n\t\tisNonstandard: \"Unobtainable\",\r\n\t\tisPermanent: true,\r\n\t\tname: \"Battle Bond\",\r\n\t\trating: 3.5,\r\n\t\tnum: 210,\r\n\t},\r\n\tbeadsofruin: {\r\n\t\tonStart(pokemon) {\r\n\t\t\tif (this.suppressingAbility(pokemon)) return;\r\n\t\t\tthis.add('-ability', pokemon, 'Beads of Ruin');\r\n\t\t},\r\n\t\tonAnyModifySpD(spd, target, source, move) {\r\n\t\t\tconst abilityHolder = this.effectState.target;\r\n\t\t\tif (target.hasAbility('Beads of Ruin')) return;\r\n\t\t\tif (!move.ruinedSpD?.hasAbility('Beads of Ruin')) move.ruinedSpD = abilityHolder;\r\n\t\t\tif (move.ruinedSpD !== abilityHolder) return;\r\n\t\t\tthis.debug('Beads of Ruin SpD drop');\r\n\t\t\treturn this.chainModify(0.75);\r\n\t\t},\r\n\t\tname: \"Beads of Ruin\",\r\n\t\trating: 4.5,\r\n\t\tnum: 284,\r\n\t},\r\n\tbeastboost: {\r\n\t\tonSourceAfterFaint(length, target, source, effect) {\r\n\t\t\tif (effect && effect.effectType === 'Move') {\r\n\t\t\t\tconst bestStat = source.getBestStat(true, true);\r\n\t\t\t\tthis.boost({[bestStat]: length}, source);\r\n\t\t\t}\r\n\t\t},\r\n\t\tname: \"Beast Boost\",\r\n\t\trating: 3.5,\r\n\t\tnum: 224,\r\n\t},\r\n\tberserk: {\r\n\t\tonDamage(damage, target, source, effect) {\r\n\t\t\tif (\r\n\t\t\t\teffect.effectType === \"Move\" &&\r\n\t\t\t\t!effect.multihit &&\r\n\t\t\t\t(!effect.negateSecondary && !(effect.hasSheerForce && source.hasAbility('sheerforce')))\r\n\t\t\t) {\r\n\t\t\t\tthis.effectState.checkedBerserk = false;\r\n\t\t\t} else {\r\n\t\t\t\tthis.effectState.checkedBerserk = true;\r\n\t\t\t}\r\n\t\t},\r\n\t\tonTryEatItem(item) {\r\n\t\t\tconst healingItems = [\r\n\t\t\t\t'aguavberry', 'enigmaberry', 'figyberry', 'iapapaberry', 'magoberry', 'sitrusberry', 'wikiberry', 'oranberry', 'berryjuice',\r\n\t\t\t];\r\n\t\t\tif (healingItems.includes(item.id)) {\r\n\t\t\t\treturn this.effectState.checkedBerserk;\r\n\t\t\t}\r\n\t\t\treturn true;\r\n\t\t},\r\n\t\tonAfterMoveSecondary(target, source, move) {\r\n\t\t\tthis.effectState.checkedBerserk = true;\r\n\t\t\tif (!source || source === target || !target.hp || !move.totalDamage) return;\r\n\t\t\tconst lastAttackedBy = target.getLastAttackedBy();\r\n\t\t\tif (!lastAttackedBy) return;\r\n\t\t\tconst damage = move.multihit ? move.totalDamage : lastAttackedBy.damage;\r\n\t\t\tif (target.hp <= target.maxhp / 2 && target.hp + damage > target.maxhp / 2) {\r\n\t\t\t\tthis.boost({spa: 1}, target, target);\r\n\t\t\t}\r\n\t\t},\r\n\t\tname: \"Berserk\",\r\n\t\trating: 2,\r\n\t\tnum: 201,\r\n\t},\r\n\tbigpecks: {\r\n\t\tonTryBoost(boost, target, source, effect) {\r\n\t\t\tif (source && target === source) return;\r\n\t\t\tif (boost.def && boost.def < 0) {\r\n\t\t\t\tdelete boost.def;\r\n\t\t\t\tif (!(effect as ActiveMove).secondaries && effect.id !== 'octolock') {\r\n\t\t\t\t\tthis.add(\"-fail\", target, \"unboost\", \"Defense\", \"[from] ability: Big Pecks\", \"[of] \" + target);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\tisBreakable: true,\r\n\t\tname: \"Big Pecks\",\r\n\t\trating: 0.5,\r\n\t\tnum: 145,\r\n\t},\r\n\tblaze: {\r\n\t\tonModifyAtkPriority: 5,\r\n\t\tonModifyAtk(atk, attacker, defender, move) {\r\n\t\t\tif (move.type === 'Fire' && attacker.hp <= attacker.maxhp / 3) {\r\n\t\t\t\tthis.debug('Blaze boost');\r\n\t\t\t\treturn this.chainModify(1.5);\r\n\t\t\t}\r\n\t\t},\r\n\t\tonModifySpAPriority: 5,\r\n\t\tonModifySpA(atk, attacker, defender, move) {\r\n\t\t\tif (move.type === 'Fire' && attacker.hp <= attacker.maxhp / 3) {\r\n\t\t\t\tthis.debug('Blaze boost');\r\n\t\t\t\treturn this.chainModify(1.5);\r\n\t\t\t}\r\n\t\t},\r\n\t\tname: \"Blaze\",\r\n\t\trating: 2,\r\n\t\tnum: 66,\r\n\t},\r\n\tbulletproof: {\r\n\t\tonTryHit(pokemon, target, move) {\r\n\t\t\tif (move.flags['bullet']) {\r\n\t\t\t\tthis.add('-immune', pokemon, '[from] ability: Bulletproof');\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t},\r\n\t\tisBreakable: true,\r\n\t\tname: \"Bulletproof\",\r\n\t\trating: 3,\r\n\t\tnum: 171,\r\n\t},\r\n\tcheekpouch: {\r\n\t\tonEatItem(item, pokemon) {\r\n\t\t\tthis.heal(pokemon.baseMaxhp / 3);\r\n\t\t},\r\n\t\tname: \"Cheek Pouch\",\r\n\t\trating: 2,\r\n\t\tnum: 167,\r\n\t},\r\n\tchillingneigh: {\r\n\t\tonSourceAfterFaint(length, target, source, effect) {\r\n\t\t\tif (effect && effect.effectType === 'Move') {\r\n\t\t\t\tthis.boost({atk: length}, source);\r\n\t\t\t}\r\n\t\t},\r\n\t\tname: \"Chilling Neigh\",\r\n\t\trating: 3,\r\n\t\tnum: 264,\r\n\t},\r\n\tchlorophyll: {\r\n\t\tonModifySpe(spe, pokemon) {\r\n\t\t\tif (['sunnyday', 'desolateland'].includes(pokemon.effectiveWeather())) {\r\n\t\t\t\treturn this.chainModify(2);\r\n\t\t\t}\r\n\t\t},\r\n\t\tname: \"Chlorophyll\",\r\n\t\trating: 3,\r\n\t\tnum: 34,\r\n\t},\r\n\tclearbody: {\r\n\t\tonTryBoost(boost, target, source, effect) {\r\n\t\t\tif (source && target === source) return;\r\n\t\t\tlet showMsg = false;\r\n\t\t\tlet i: BoostID;\r\n\t\t\tfor (i in boost) {\r\n\t\t\t\tif (boost[i]! < 0) {\r\n\t\t\t\t\tdelete boost[i];\r\n\t\t\t\t\tshowMsg = true;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (showMsg && !(effect as ActiveMove).secondaries && effect.id !== 'octolock') {\r\n\t\t\t\tthis.add(\"-fail\", target, \"unboost\", \"[from] ability: Clear Body\", \"[of] \" + target);\r\n\t\t\t}\r\n\t\t},\r\n\t\tisBreakable: true,\r\n\t\tname: \"Clear Body\",\r\n\t\trating: 2,\r\n\t\tnum: 29,\r\n\t},\r\n\tcloudnine: {\r\n\t\tonSwitchIn(pokemon) {\r\n\t\t\tthis.effectState.switchingIn = true;\r\n\t\t},\r\n\t\tonStart(pokemon) {\r\n\t\t\t// Cloud Nine does not activate when Skill Swapped or when Neutralizing Gas leaves the field\r\n\t\t\tif (this.effectState.switchingIn) {\r\n\t\t\t\tthis.add('-ability', pokemon, 'Cloud Nine');\r\n\t\t\t\tthis.effectState.switchingIn = false;\r\n\t\t\t}\r\n\t\t\tthis.eachEvent('WeatherChange', this.effect);\r\n\t\t},\r\n\t\tonEnd(pokemon) {\r\n\t\t\tthis.eachEvent('WeatherChange', this.effect);\r\n\t\t},\r\n\t\tsuppressWeather: true,\r\n\t\tname: \"Cloud Nine\",\r\n\t\trating: 1.5,\r\n\t\tnum: 13,\r\n\t},\r\n\tcolorchange: {\r\n\t\tonAfterMoveSecondary(target, source, move) {\r\n\t\t\tif (!target.hp) return;\r\n\t\t\tconst type = move.type;\r\n\t\t\tif (\r\n\t\t\t\ttarget.isActive && move.effectType === 'Move' && move.category !== 'Status' &&\r\n\t\t\t\ttype !== '???' && !target.hasType(type)\r\n\t\t\t) {\r\n\t\t\t\tif (!target.setType(type)) return false;\r\n\t\t\t\tthis.add('-start', target, 'typechange', type, '[from] ability: Color Change');\r\n\r\n\t\t\t\tif (target.side.active.length === 2 && target.position === 1) {\r\n\t\t\t\t\t// Curse Glitch\r\n\t\t\t\t\tconst action = this.queue.willMove(target);\r\n\t\t\t\t\tif (action && action.move.id === 'curse') {\r\n\t\t\t\t\t\taction.targetLoc = -1;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\tname: \"Color Change\",\r\n\t\trating: 0,\r\n\t\tnum: 16,\r\n\t},\r\n\tcomatose: {\r\n\t\tonStart(pokemon) {\r\n\t\t\tthis.add('-ability', pokemon, 'Comatose');\r\n\t\t},\r\n\t\tonSetStatus(status, target, source, effect) {\r\n\t\t\tif ((effect as Move)?.status) {\r\n\t\t\t\tthis.add('-immune', target, '[from] ability: Comatose');\r\n\t\t\t}\r\n\t\t\treturn false;\r\n\t\t},\r\n\t\t// Permanent sleep \"status\" implemented in the relevant sleep-checking effects\r\n\t\tisPermanent: true,\r\n\t\tname: \"Comatose\",\r\n\t\trating: 4,\r\n\t\tnum: 213,\r\n\t},\r\n\tcommander: {\r\n\t\tonUpdate(pokemon) {\r\n\t\t\tconst ally = pokemon.allies()[0];\r\n\t\t\tif (!ally || pokemon.baseSpecies.baseSpecies !== 'Tatsugiri' || ally.baseSpecies.baseSpecies !== 'Dondozo') {\r\n\t\t\t\t// Handle any edge cases\r\n\t\t\t\tif (pokemon.getVolatile('commanding')) pokemon.removeVolatile('commanding');\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tif (!pokemon.getVolatile('commanding')) {\r\n\t\t\t\t// If Dondozo already was commanded this fails\r\n\t\t\t\tif (ally.getVolatile('commanded')) return;\r\n\t\t\t\t// Cancel all actions this turn for pokemon if applicable\r\n\t\t\t\tthis.queue.cancelAction(pokemon);\r\n\t\t\t\t// Add volatiles to both pokemon\r\n\t\t\t\tthis.add('-activate', pokemon, 'ability: Commander', '[of] ' + ally);\r\n\t\t\t\tpokemon.addVolatile('commanding');\r\n\t\t\t\tally.addVolatile('commanded', pokemon);\r\n\t\t\t\t// Continued in conditions.ts in the volatiles\r\n\t\t\t} else {\r\n\t\t\t\tif (!ally.fainted) return;\r\n\t\t\t\tpokemon.removeVolatile('commanding');\r\n\t\t\t}\r\n\t\t},\r\n\t\tisPermanent: true,\r\n\t\tname: \"Commander\",\r\n\t\trating: 0,\r\n\t\tnum: 279,\r\n\t},\r\n\tcompetitive: {\r\n\t\tonAfterEachBoost(boost, target, source, effect) {\r\n\t\t\tif (!source || target.isAlly(source)) {\r\n\t\t\t\tif (effect.id === 'stickyweb') {\r\n\t\t\t\t\tthis.hint(\"Court Change Sticky Web counts as lowering your own Speed, and Competitive only affects stats lowered by foes.\", true, source.side);\r\n\t\t\t\t}\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tlet statsLowered = false;\r\n\t\t\tlet i: BoostID;\r\n\t\t\tfor (i in boost) {\r\n\t\t\t\tif (boost[i]! < 0) {\r\n\t\t\t\t\tstatsLowered = true;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (statsLowered) {\r\n\t\t\t\tthis.boost({spa: 2}, target, target, null, false, true);\r\n\t\t\t}\r\n\t\t},\r\n\t\tname: \"Competitive\",\r\n\t\trating: 2.5,\r\n\t\tnum: 172,\r\n\t},\r\n\tcompoundeyes: {\r\n\t\tonSourceModifyAccuracyPriority: -1,\r\n\t\tonSourceModifyAccuracy(accuracy) {\r\n\t\t\tif (typeof accuracy !== 'number') return;\r\n\t\t\tthis.debug('compoundeyes - enhancing accuracy');\r\n\t\t\treturn this.chainModify([5325, 4096]);\r\n\t\t},\r\n\t\tname: \"Compound Eyes\",\r\n\t\trating: 3,\r\n\t\tnum: 14,\r\n\t},\r\n\tcontrary: {\r\n\t\tonChangeBoost(boost, target, source, effect) {\r\n\t\t\tif (effect && effect.id === 'zpower') return;\r\n\t\t\tlet i: BoostID;\r\n\t\t\tfor (i in boost) {\r\n\t\t\t\tboost[i]! *= -1;\r\n\t\t\t}\r\n\t\t},\r\n\t\tisBreakable: true,\r\n\t\tname: \"Contrary\",\r\n\t\trating: 4.5,\r\n\t\tnum: 126,\r\n\t},\r\n\tcorrosion: {\r\n\t\t// Implemented in sim/pokemon.js:Pokemon#setStatus\r\n\t\tname: \"Corrosion\",\r\n\t\trating: 2.5,\r\n\t\tnum: 212,\r\n\t},\r\n\tcostar: {\r\n\t\tonStart(pokemon) {\r\n\t\t\tconst ally = pokemon.allies()[0];\r\n\t\t\tif (!ally) return;\r\n\r\n\t\t\tlet i: BoostID;\r\n\t\t\tfor (i in ally.boosts) {\r\n\t\t\t\tpokemon.boosts[i] = ally.boosts[i];\r\n\t\t\t}\r\n\t\t\tconst volatilesToCopy = ['focusenergy', 'gmaxchistrike', 'laserfocus'];\r\n\t\t\tfor (const volatile of volatilesToCopy) {\r\n\t\t\t\tif (ally.volatiles[volatile]) {\r\n\t\t\t\t\tpokemon.addVolatile(volatile);\r\n\t\t\t\t\tif (volatile === 'gmaxchistrike') pokemon.volatiles[volatile].layers = ally.volatiles[volatile].layers;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tpokemon.removeVolatile(volatile);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tthis.add('-copyboost', pokemon, ally, '[from] ability: Costar');\r\n\t\t},\r\n\t\tname: \"Costar\",\r\n\t\trating: 0,\r\n\t\tnum: 294,\r\n\t},\r\n\tcottondown: {\r\n\t\tonDamagingHit(damage, target, source, move) {\r\n\t\t\tlet activated = false;\r\n\t\t\tfor (const pokemon of this.getAllActive()) {\r\n\t\t\t\tif (pokemon === target || pokemon.fainted) continue;\r\n\t\t\t\tif (!activated) {\r\n\t\t\t\t\tthis.add('-ability', target, 'Cotton Down');\r\n\t\t\t\t\tactivated = true;\r\n\t\t\t\t}\r\n\t\t\t\tthis.boost({spe: -1}, pokemon, target, null, true);\r\n\t\t\t}\r\n\t\t},\r\n\t\tname: \"Cotton Down\",\r\n\t\trating: 2,\r\n\t\tnum: 238,\r\n\t},\r\n\tcudchew: {\r\n\t\tonEatItem(item, pokemon) {\r\n\t\t\tif (item.isBerry && pokemon.addVolatile('cudchew')) {\r\n\t\t\t\tpokemon.volatiles['cudchew'].berry = item;\r\n\t\t\t}\r\n\t\t},\r\n\t\tonEnd(pokemon) {\r\n\t\t\tdelete pokemon.volatiles['cudchew'];\r\n\t\t},\r\n\t\tcondition: {\r\n\t\t\tnoCopy: true,\r\n\t\t\tduration: 2,\r\n\t\t\tonRestart() {\r\n\t\t\t\tthis.effectState.duration = 2;\r\n\t\t\t},\r\n\t\t\tonResidualOrder: 28,\r\n\t\t\tonResidualSubOrder: 2,\r\n\t\t\tonEnd(pokemon) {\r\n\t\t\t\tif (pokemon.hp) {\r\n\t\t\t\t\tconst item = this.effectState.berry;\r\n\t\t\t\t\tthis.add('-activate', pokemon, 'ability: Cud Chew');\r\n\t\t\t\t\tthis.add('-enditem', pokemon, item.name, '[eat]');\r\n\t\t\t\t\tif (this.singleEvent('Eat', item, null, pokemon, null, null)) {\r\n\t\t\t\t\t\tthis.runEvent('EatItem', pokemon, null, null, item);\r\n\t\t\t\t\t}\r\n\t\t\t\t\tif (item.onEat) pokemon.ateBerry = true;\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t},\r\n\t\tname: \"Cud Chew\",\r\n\t\trating: 2,\r\n\t\tnum: 291,\r\n\t},\r\n\tcuriousmedicine: {\r\n\t\tonStart(pokemon) {\r\n\t\t\tfor (const ally of pokemon.adjacentAllies()) {\r\n\t\t\t\tally.clearBoosts();\r\n\t\t\t\tthis.add('-clearboost', ally, '[from] ability: Curious Medicine', '[of] ' + pokemon);\r\n\t\t\t}\r\n\t\t},\r\n\t\tname: \"Curious Medicine\",\r\n\t\trating: 0,\r\n\t\tnum: 261,\r\n\t},\r\n\tcursedbody: {\r\n\t\tonDamagingHit(damage, target, source, move) {\r\n\t\t\tif (source.volatiles['disable']) return;\r\n\t\t\tif (!move.isMax && !move.flags['futuremove'] && move.id !== 'struggle') {\r\n\t\t\t\tif (this.randomChance(3, 10)) {\r\n\t\t\t\t\tsource.addVolatile('disable', this.effectState.target);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\tname: \"Cursed Body\",\r\n\t\trating: 2,\r\n\t\tnum: 130,\r\n\t},\r\n\tcutecharm: {\r\n\t\tonDamagingHit(damage, target, source, move) {\r\n\t\t\tif (this.checkMoveMakesContact(move, source, target)) {\r\n\t\t\t\tif (this.randomChance(3, 10)) {\r\n\t\t\t\t\tsource.addVolatile('attract', this.effectState.target);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\tname: \"Cute Charm\",\r\n\t\trating: 0.5,\r\n\t\tnum: 56,\r\n\t},\r\n\tdamp: {\r\n\t\tonAnyTryMove(target, source, effect) {\r\n\t\t\tif (['explosion', 'mindblown', 'mistyexplosion', 'selfdestruct'].includes(effect.id)) {\r\n\t\t\t\tthis.attrLastMove('[still]');\r\n\t\t\t\tthis.add('cant', this.effectState.target, 'ability: Damp', effect, '[of] ' + target);\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\t\tonAnyDamage(damage, target, source, effect) {\r\n\t\t\tif (effect && effect.name === 'Aftermath') {\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\t\tisBreakable: true,\r\n\t\tname: \"Damp\",\r\n\t\trating: 0.5,\r\n\t\tnum: 6,\r\n\t},\r\n\tdancer: {\r\n\t\tname: \"Dancer\",\r\n\t\t// implemented in runMove in scripts.js\r\n\t\trating: 1.5,\r\n\t\tnum: 216,\r\n\t},\r\n\tdarkaura: {\r\n\t\tonStart(pokemon) {\r\n\t\t\tif (this.suppressingAbility(pokemon)) return;\r\n\t\t\tthis.add('-ability', pokemon, 'Dark Aura');\r\n\t\t},\r\n\t\tonAnyBasePowerPriority: 20,\r\n\t\tonAnyBasePower(basePower, source, target, move) {\r\n\t\t\tif (target === source || move.category === 'Status' || move.type !== 'Dark') return;\r\n\t\t\tif (!move.auraBooster?.hasAbility('Dark Aura')) move.auraBooster = this.effectState.target;\r\n\t\t\tif (move.auraBooster !== this.effectState.target) return;\r\n\t\t\treturn this.chainModify([move.hasAuraBreak ? 3072 : 5448, 4096]);\r\n\t\t},\r\n\t\tname: \"Dark Aura\",\r\n\t\trating: 3,\r\n\t\tnum: 186,\r\n\t},\r\n\tdauntlessshield: {\r\n\t\tonStart(pokemon) {\r\n\t\t\tif (this.effectState.shieldBoost) return;\r\n\t\t\tif (this.boost({def: 1}, pokemon)) {\r\n\t\t\t\tthis.effectState.shieldBoost = true;\r\n\t\t\t}\r\n\t\t},\r\n\t\tname: \"Dauntless Shield\",\r\n\t\trating: 3.5,\r\n\t\tnum: 235,\r\n\t},\r\n\tdazzling: {\r\n\t\tonFoeTryMove(target, source, move) {\r\n\t\t\tconst targetAllExceptions = ['perishsong', 'flowershield', 'rototiller'];\r\n\t\t\tif (move.target === 'foeSide' || (move.target === 'all' && !targetAllExceptions.includes(move.id))) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tconst dazzlingHolder = this.effectState.target;\r\n\t\t\tif ((source.isAlly(dazzlingHolder) || move.target === 'all') && move.priority > 0.1) {\r\n\t\t\t\tthis.attrLastMove('[still]');\r\n\t\t\t\tthis.add('cant', dazzlingHolder, 'ability: Dazzling', move, '[of] ' + target);\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\t\tisBreakable: true,\r\n\t\tname: \"Dazzling\",\r\n\t\trating: 2.5,\r\n\t\tnum: 219,\r\n\t},\r\n\tdefeatist: {\r\n\t\tonModifyAtkPriority: 5,\r\n\t\tonModifyAtk(atk, pokemon) {\r\n\t\t\tif (pokemon.hp <= pokemon.maxhp / 2) {\r\n\t\t\t\treturn this.chainModify(0.5);\r\n\t\t\t}\r\n\t\t},\r\n\t\tonModifySpAPriority: 5,\r\n\t\tonModifySpA(atk, pokemon) {\r\n\t\t\tif (pokemon.hp <= pokemon.maxhp / 2) {\r\n\t\t\t\treturn this.chainModify(0.5);\r\n\t\t\t}\r\n\t\t},\r\n\t\tname: \"Defeatist\",\r\n\t\trating: -1,\r\n\t\tnum: 129,\r\n\t},\r\n\tdefiant: {\r\n\t\tonAfterEachBoost(boost, target, source, effect) {\r\n\t\t\tif (!source || target.isAlly(source)) {\r\n\t\t\t\tif (effect.id === 'stickyweb') {\r\n\t\t\t\t\tthis.hint(\"Court Change Sticky Web counts as lowering your own Speed, and Defiant only affects stats lowered by foes.\", true, source.side);\r\n\t\t\t\t}\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tlet statsLowered = false;\r\n\t\t\tlet i: BoostID;\r\n\t\t\tfor (i in boost) {\r\n\t\t\t\tif (boost[i]! < 0) {\r\n\t\t\t\t\tstatsLowered = true;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (statsLowered) {\r\n\t\t\t\tthis.boost({atk: 2}, target, target, null, false, true);\r\n\t\t\t}\r\n\t\t},\r\n\t\tname: \"Defiant\",\r\n\t\trating: 3,\r\n\t\tnum: 128,\r\n\t},\r\n\tdeltastream: {\r\n\t\tonStart(source) {\r\n\t\t\tthis.field.setWeather('deltastream');\r\n\t\t},\r\n\t\tonAnySetWeather(target, source, weather) {\r\n\t\t\tconst strongWeathers = ['desolateland', 'primordialsea', 'deltastream'];\r\n\t\t\tif (this.field.getWeather().id === 'deltastream' && !strongWeathers.includes(weather.id)) return false;\r\n\t\t},\r\n\t\tonEnd(pokemon) {\r\n\t\t\tif (this.field.weatherState.source !== pokemon) return;\r\n\t\t\tfor (const target of this.getAllActive()) {\r\n\t\t\t\tif (target === pokemon) continue;\r\n\t\t\t\tif (target.hasAbility('deltastream')) {\r\n\t\t\t\t\tthis.field.weatherState.source = target;\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tthis.field.clearWeather();\r\n\t\t},\r\n\t\tname: \"Delta Stream\",\r\n\t\trating: 4,\r\n\t\tnum: 191,\r\n\t},\r\n\tdesolateland: {\r\n\t\tonStart(source) {\r\n\t\t\tthis.field.setWeather('desolateland');\r\n\t\t},\r\n\t\tonAnySetWeather(target, source, weather) {\r\n\t\t\tconst strongWeathers = ['desolateland', 'primordialsea', 'deltastream'];\r\n\t\t\tif (this.field.getWeather().id === 'desolateland' && !strongWeathers.includes(weather.id)) return false;\r\n\t\t},\r\n\t\tonEnd(pokemon) {\r\n\t\t\tif (this.field.weatherState.source !== pokemon) return;\r\n\t\t\tfor (const target of this.getAllActive()) {\r\n\t\t\t\tif (target === pokemon) continue;\r\n\t\t\t\tif (target.hasAbility('desolateland')) {\r\n\t\t\t\t\tthis.field.weatherState.source = target;\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tthis.field.clearWeather();\r\n\t\t},\r\n\t\tname: \"Desolate Land\",\r\n\t\trating: 4.5,\r\n\t\tnum: 190,\r\n\t},\r\n\tdisguise: {\r\n\t\tonDamagePriority: 1,\r\n\t\tonDamage(damage, target, source, effect) {\r\n\t\t\tif (\r\n\t\t\t\teffect && effect.effectType === 'Move' &&\r\n\t\t\t\t['mimikyu', 'mimikyutotem'].includes(target.species.id) && !target.transformed\r\n\t\t\t) {\r\n\t\t\t\tthis.add('-activate', target, 'ability: Disguise');\r\n\t\t\t\tthis.effectState.busted = true;\r\n\t\t\t\treturn 0;\r\n\t\t\t}\r\n\t\t},\r\n\t\tonCriticalHit(target, source, move) {\r\n\t\t\tif (!target) return;\r\n\t\t\tif (!['mimikyu', 'mimikyutotem'].includes(target.species.id) || target.transformed) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tconst hitSub = target.volatiles['substitute'] && !move.flags['bypasssub'] && !(move.infiltrates && this.gen >= 6);\r\n\t\t\tif (hitSub) return;\r\n\r\n\t\t\tif (!target.runImmunity(move.type)) return;\r\n\t\t\treturn false;\r\n\t\t},\r\n\t\tonEffectiveness(typeMod, target, type, move) {\r\n\t\t\tif (!target || move.category === 'Status') return;\r\n\t\t\tif (!['mimikyu', 'mimikyutotem'].includes(target.species.id) || target.transformed) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tconst hitSub = target.volatiles['substitute'] && !move.flags['bypasssub'] && !(move.infiltrates && this.gen >= 6);\r\n\t\t\tif (hitSub) return;\r\n\r\n\t\t\tif (!target.runImmunity(move.type)) return;\r\n\t\t\treturn 0;\r\n\t\t},\r\n\t\tonUpdate(pokemon) {\r\n\t\t\tif (['mimikyu', 'mimikyutotem'].includes(pokemon.species.id) && this.effectState.busted) {\r\n\t\t\t\tconst speciesid = pokemon.species.id === 'mimikyutotem' ? 'Mimikyu-Busted-Totem' : 'Mimikyu-Busted';\r\n\t\t\t\tpokemon.formeChange(speciesid, this.effect, true);\r\n\t\t\t\tthis.damage(pokemon.baseMaxhp / 8, pokemon, pokemon, this.dex.species.get(speciesid));\r\n\t\t\t}\r\n\t\t},\r\n\t\tisBreakable: true,\r\n\t\tisPermanent: true,\r\n\t\tname: \"Disguise\",\r\n\t\trating: 3.5,\r\n\t\tnum: 209,\r\n\t},\r\n\tdownload: {\r\n\t\tonStart(pokemon) {\r\n\t\t\tlet totaldef = 0;\r\n\t\t\tlet totalspd = 0;\r\n\t\t\tfor (const target of pokemon.foes()) {\r\n\t\t\t\ttotaldef += target.getStat('def', false, true);\r\n\t\t\t\ttotalspd += target.getStat('spd', false, true);\r\n\t\t\t}\r\n\t\t\tif (totaldef && totaldef >= totalspd) {\r\n\t\t\t\tthis.boost({spa: 1});\r\n\t\t\t} else if (totalspd) {\r\n\t\t\t\tthis.boost({atk: 1});\r\n\t\t\t}\r\n\t\t},\r\n\t\tname: \"Download\",\r\n\t\trating: 3.5,\r\n\t\tnum: 88,\r\n\t},\r\n\tdragonsmaw: {\r\n\t\tonModifyAtkPriority: 5,\r\n\t\tonModifyAtk(atk, attacker, defender, move) {\r\n\t\t\tif (move.type === 'Dragon') {\r\n\t\t\t\tthis.debug('Dragon\\'s Maw boost');\r\n\t\t\t\treturn this.chainModify(1.5);\r\n\t\t\t}\r\n\t\t},\r\n\t\tonModifySpAPriority: 5,\r\n\t\tonModifySpA(atk, attacker, defender, move) {\r\n\t\t\tif (move.type === 'Dragon') {\r\n\t\t\t\tthis.debug('Dragon\\'s Maw boost');\r\n\t\t\t\treturn this.chainModify(1.5);\r\n\t\t\t}\r\n\t\t},\r\n\t\tname: \"Dragon's Maw\",\r\n\t\trating: 3.5,\r\n\t\tnum: 263,\r\n\t},\r\n\tdrizzle: {\r\n\t\tonStart(source) {\r\n\t\t\tfor (const action of this.queue) {\r\n\t\t\t\tif (action.choice === 'runPrimal' && action.pokemon === source && source.species.id === 'kyogre') return;\r\n\t\t\t\tif (action.choice !== 'runSwitch' && action.choice !== 'runPrimal') break;\r\n\t\t\t}\r\n\t\t\tthis.field.setWeather('raindance');\r\n\t\t},\r\n\t\tname: \"Drizzle\",\r\n\t\trating: 4,\r\n\t\tnum: 2,\r\n\t},\r\n\tdrought: {\r\n\t\tonStart(source) {\r\n\t\t\tfor (const action of this.queue) {\r\n\t\t\t\tif (action.choice === 'runPrimal' && action.pokemon === source && source.species.id === 'groudon') return;\r\n\t\t\t\tif (action.choice !== 'runSwitch' && action.choice !== 'runPrimal') break;\r\n\t\t\t}\r\n\t\t\tthis.field.setWeather('sunnyday');\r\n\t\t},\r\n\t\tname: \"Drought\",\r\n\t\trating: 4,\r\n\t\tnum: 70,\r\n\t},\r\n\tdryskin: {\r\n\t\tonTryHit(target, source, move) {\r\n\t\t\tif (target !== source && move.type === 'Water') {\r\n\t\t\t\tif (!this.heal(target.baseMaxhp / 4)) {\r\n\t\t\t\t\tthis.add('-immune', target, '[from] ability: Dry Skin');\r\n\t\t\t\t}\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t},\r\n\t\tonSourceBasePowerPriority: 17,\r\n\t\tonSourceBasePower(basePower, attacker, defender, move) {\r\n\t\t\tif (move.type === 'Fire') {\r\n\t\t\t\treturn this.chainModify(1.25);\r\n\t\t\t}\r\n\t\t},\r\n\t\tonWeather(target, source, effect) {\r\n\t\t\tif (target.hasItem('utilityumbrella')) return;\r\n\t\t\tif (effect.id === 'raindance' || effect.id === 'primordialsea') {\r\n\t\t\t\tthis.heal(target.baseMaxhp / 8);\r\n\t\t\t} else if (effect.id === 'sunnyday' || effect.id === 'desolateland') {\r\n\t\t\t\tthis.damage(target.baseMaxhp / 8, target, target);\r\n\t\t\t}\r\n\t\t},\r\n\t\tisBreakable: true,\r\n\t\tname: \"Dry Skin\",\r\n\t\trating: 3,\r\n\t\tnum: 87,\r\n\t},\r\n\tearlybird: {\r\n\t\tname: \"Early Bird\",\r\n\t\t// Implemented in statuses.js\r\n\t\trating: 1.5,\r\n\t\tnum: 48,\r\n\t},\r\n\teartheater: {\r\n\t\tonTryHit(target, source, move) {\r\n\t\t\tif (target !== source && move.type === 'Ground') {\r\n\t\t\t\tif (!this.heal(target.baseMaxhp / 4)) {\r\n\t\t\t\t\tthis.add('-immune', target, '[from] ability: Earth Eater');\r\n\t\t\t\t}\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t},\r\n\t\tisBreakable: true,\r\n\t\tname: \"Earth Eater\",\r\n\t\trating: 3.5,\r\n\t\tnum: 297,\r\n\t},\r\n\teffectspore: {\r\n\t\tonDamagingHit(damage, target, source, move) {\r\n\t\t\tif (this.checkMoveMakesContact(move, source, target) && !source.status && source.runStatusImmunity('powder')) {\r\n\t\t\t\tconst r = this.random(100);\r\n\t\t\t\tif (r < 11) {\r\n\t\t\t\t\tsource.setStatus('slp', target);\r\n\t\t\t\t} else if (r < 21) {\r\n\t\t\t\t\tsource.setStatus('par', target);\r\n\t\t\t\t} else if (r < 30) {\r\n\t\t\t\t\tsource.setStatus('psn', target);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\tname: \"Effect Spore\",\r\n\t\trating: 2,\r\n\t\tnum: 27,\r\n\t},\r\n\telectricsurge: {\r\n\t\tonStart(source) {\r\n\t\t\tthis.field.setTerrain('electricterrain');\r\n\t\t},\r\n\t\tname: \"Electric Surge\",\r\n\t\trating: 4,\r\n\t\tnum: 226,\r\n\t},\r\n\telectromorphosis: {\r\n\t\tonDamagingHitOrder: 1,\r\n\t\tonDamagingHit(damage, target, source, move) {\r\n\t\t\ttarget.addVolatile('charge');\r\n\t\t},\r\n\t\tname: \"Electromorphosis\",\r\n\t\trating: 2.5,\r\n\t\tnum: 280,\r\n\t},\r\n\temergencyexit: {\r\n\t\tonEmergencyExit(target) {\r\n\t\t\tif (!this.canSwitch(target.side) || target.forceSwitchFlag || target.switchFlag) return;\r\n\t\t\tfor (const side of this.sides) {\r\n\t\t\t\tfor (const active of side.active) {\r\n\t\t\t\t\tactive.switchFlag = false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\ttarget.switchFlag = true;\r\n\t\t\tthis.add('-activate', target, 'ability: Emergency Exit');\r\n\t\t},\r\n\t\tname: \"Emergency Exit\",\r\n\t\trating: 1,\r\n\t\tnum: 194,\r\n\t},\r\n\tfairyaura: {\r\n\t\tonStart(pokemon) {\r\n\t\t\tif (this.suppressingAbility(pokemon)) return;\r\n\t\t\tthis.add('-ability', pokemon, 'Fairy Aura');\r\n\t\t},\r\n\t\tonAnyBasePowerPriority: 20,\r\n\t\tonAnyBasePower(basePower, source, target, move) {\r\n\t\t\tif (target === source || move.category === 'Status' || move.type !== 'Fairy') return;\r\n\t\t\tif (!move.auraBooster?.hasAbility('Fairy Aura')) move.auraBooster = this.effectState.target;\r\n\t\t\tif (move.auraBooster !== this.effectState.target) return;\r\n\t\t\treturn this.chainModify([move.hasAuraBreak ? 3072 : 5448, 4096]);\r\n\t\t},\r\n\t\tname: \"Fairy Aura\",\r\n\t\trating: 3,\r\n\t\tnum: 187,\r\n\t},\r\n\tfilter: {\r\n\t\tonSourceModifyDamage(damage, source, target, move) {\r\n\t\t\tif (target.getMoveHitData(move).typeMod > 0) {\r\n\t\t\t\tthis.debug('Filter neutralize');\r\n\t\t\t\treturn this.chainModify(0.75);\r\n\t\t\t}\r\n\t\t},\r\n\t\tisBreakable: true,\r\n\t\tname: \"Filter\",\r\n\t\trating: 3,\r\n\t\tnum: 111,\r\n\t},\r\n\tflamebody: {\r\n\t\tonDamagingHit(damage, target, source, move) {\r\n\t\t\tif (this.checkMoveMakesContact(move, source, target)) {\r\n\t\t\t\tif (this.randomChance(3, 10)) {\r\n\t\t\t\t\tsource.trySetStatus('brn', target);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\tname: \"Flame Body\",\r\n\t\trating: 2,\r\n\t\tnum: 49,\r\n\t},\r\n\tflareboost: {\r\n\t\tonBasePowerPriority: 19,\r\n\t\tonBasePower(basePower, attacker, defender, move) {\r\n\t\t\tif (attacker.status === 'brn' && move.category === 'Special') {\r\n\t\t\t\treturn this.chainModify(1.5);\r\n\t\t\t}\r\n\t\t},\r\n\t\tname: \"Flare Boost\",\r\n\t\trating: 2,\r\n\t\tnum: 138,\r\n\t},\r\n\tflashfire: {\r\n\t\tonTryHit(target, source, move) {\r\n\t\t\tif (target !== source && move.type === 'Fire') {\r\n\t\t\t\tmove.accuracy = true;\r\n\t\t\t\tif (!target.addVolatile('flashfire')) {\r\n\t\t\t\t\tthis.add('-immune', target, '[from] ability: Flash Fire');\r\n\t\t\t\t}\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t},\r\n\t\tonEnd(pokemon) {\r\n\t\t\tpokemon.removeVolatile('flashfire');\r\n\t\t},\r\n\t\tcondition: {\r\n\t\t\tnoCopy: true, // doesn't get copied by Baton Pass\r\n\t\t\tonStart(target) {\r\n\t\t\t\tthis.add('-start', target, 'ability: Flash Fire');\r\n\t\t\t},\r\n\t\t\tonModifyAtkPriority: 5,\r\n\t\t\tonModifyAtk(atk, attacker, defender, move) {\r\n\t\t\t\tif (move.type === 'Fire' && attacker.hasAbility('flashfire')) {\r\n\t\t\t\t\tthis.debug('Flash Fire boost');\r\n\t\t\t\t\treturn this.chainModify(1.5);\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tonModifySpAPriority: 5,\r\n\t\t\tonModifySpA(atk, attacker, defender, move) {\r\n\t\t\t\tif (move.type === 'Fire' && attacker.hasAbility('flashfire')) {\r\n\t\t\t\t\tthis.debug('Flash Fire boost');\r\n\t\t\t\t\treturn this.chainModify(1.5);\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tonEnd(target) {\r\n\t\t\t\tthis.add('-end', target, 'ability: Flash Fire', '[silent]');\r\n\t\t\t},\r\n\t\t},\r\n\t\tisBreakable: true,\r\n\t\tname: \"Flash Fire\",\r\n\t\trating: 3.5,\r\n\t\tnum: 18,\r\n\t},\r\n\tflowergift: {\r\n\t\tonStart(pokemon) {\r\n\t\t\tthis.singleEvent('WeatherChange', this.effect, this.effectState, pokemon);\r\n\t\t},\r\n\t\tonWeatherChange(pokemon) {\r\n\t\t\tif (!pokemon.isActive || pokemon.baseSpecies.baseSpecies !== 'Cherrim' || pokemon.transformed) return;\r\n\t\t\tif (!pokemon.hp) return;\r\n\t\t\tif (['sunnyday', 'desolateland'].includes(pokemon.effectiveWeather())) {\r\n\t\t\t\tif (pokemon.species.id !== 'cherrimsunshine') {\r\n\t\t\t\t\tpokemon.formeChange('Cherrim-Sunshine', this.effect, false, '[msg]');\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tif (pokemon.species.id === 'cherrimsunshine') {\r\n\t\t\t\t\tpokemon.formeChange('Cherrim', this.effect, false, '[msg]');\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\tonAllyModifyAtkPriority: 3,\r\n\t\tonAllyModifyAtk(atk, pokemon) {\r\n\t\t\tif (this.effectState.target.baseSpecies.baseSpecies !== 'Cherrim') return;\r\n\t\t\tif (['sunnyday', 'desolateland'].includes(pokemon.effectiveWeather())) {\r\n\t\t\t\treturn this.chainModify(1.5);\r\n\t\t\t}\r\n\t\t},\r\n\t\tonAllyModifySpDPriority: 4,\r\n\t\tonAllyModifySpD(spd, pokemon) {\r\n\t\t\tif (this.effectState.target.baseSpecies.baseSpecies !== 'Cherrim') return;\r\n\t\t\tif (['sunnyday', 'desolateland'].includes(pokemon.effectiveWeather())) {\r\n\t\t\t\treturn this.chainModify(1.5);\r\n\t\t\t}\r\n\t\t},\r\n\t\tisBreakable: true,\r\n\t\tname: \"Flower Gift\",\r\n\t\trating: 1,\r\n\t\tnum: 122,\r\n\t},\r\n\tflowerveil: {\r\n\t\tonAllyTryBoost(boost, target, source, effect) {\r\n\t\t\tif ((source && target === source) || !target.hasType('Grass')) return;\r\n\t\t\tlet showMsg = false;\r\n\t\t\tlet i: BoostID;\r\n\t\t\tfor (i in boost) {\r\n\t\t\t\tif (boost[i]! < 0) {\r\n\t\t\t\t\tdelete boost[i];\r\n\t\t\t\t\tshowMsg = true;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (showMsg && !(effect as ActiveMove).secondaries) {\r\n\t\t\t\tconst effectHolder = this.effectState.target;\r\n\t\t\t\tthis.add('-block', target, 'ability: Flower Veil', '[of] ' + effectHolder);\r\n\t\t\t}\r\n\t\t},\r\n\t\tonAllySetStatus(status, target, source, effect) {\r\n\t\t\tif (target.hasType('Grass') && source && target !== source && effect && effect.id !== 'yawn') {\r\n\t\t\t\tthis.debug('interrupting setStatus with Flower Veil');\r\n\t\t\t\tif (effect.name === 'Synchronize' || (effect.effectType === 'Move' && !effect.secondaries)) {\r\n\t\t\t\t\tconst effectHolder = this.effectState.target;\r\n\t\t\t\t\tthis.add('-block', target, 'ability: Flower Veil', '[of] ' + effectHolder);\r\n\t\t\t\t}\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t},\r\n\t\tonAllyTryAddVolatile(status, target) {\r\n\t\t\tif (target.hasType('Grass') && status.id === 'yawn') {\r\n\t\t\t\tthis.debug('Flower Veil blocking yawn');\r\n\t\t\t\tconst effectHolder = this.effectState.target;\r\n\t\t\t\tthis.add('-block', target, 'ability: Flower Veil', '[of] ' + effectHolder);\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t},\r\n\t\tisBreakable: true,\r\n\t\tname: \"Flower Veil\",\r\n\t\trating: 0,\r\n\t\tnum: 166,\r\n\t},\r\n\tfluffy: {\r\n\t\tonSourceModifyDamage(damage, source, target, move) {\r\n\t\t\tlet mod = 1;\r\n\t\t\tif (move.type === 'Fire') mod *= 2;\r\n\t\t\tif (move.flags['contact']) mod /= 2;\r\n\t\t\treturn this.chainModify(mod);\r\n\t\t},\r\n\t\tisBreakable: true,\r\n\t\tname: \"Fluffy\",\r\n\t\trating: 3.5,\r\n\t\tnum: 218,\r\n\t},\r\n\tforecast: {\r\n\t\tonStart(pokemon) {\r\n\t\t\tthis.singleEvent('WeatherChange', this.effect, this.effectState, pokemon);\r\n\t\t},\r\n\t\tonWeatherChange(pokemon) {\r\n\t\t\tif (pokemon.baseSpecies.baseSpecies !== 'Castform' || pokemon.transformed) return;\r\n\t\t\tlet forme = null;\r\n\t\t\tswitch (pokemon.effectiveWeather()) {\r\n\t\t\tcase 'sunnyday':\r\n\t\t\tcase 'desolateland':\r\n\t\t\t\tif (pokemon.species.id !== 'castformsunny') forme = 'Castform-Sunny';\r\n\t\t\t\tbreak;\r\n\t\t\tcase 'raindance':\r\n\t\t\tcase 'primordialsea':\r\n\t\t\t\tif (pokemon.species.id !== 'castformrainy') forme = 'Castform-Rainy';\r\n\t\t\t\tbreak;\r\n\t\t\tcase 'hail':\r\n\t\t\tcase 'snow':\r\n\t\t\t\tif (pokemon.species.id !== 'castformsnowy') forme = 'Castform-Snowy';\r\n\t\t\t\tbreak;\r\n\t\t\tdefault:\r\n\t\t\t\tif (pokemon.species.id !== 'castform') forme = 'Castform';\r\n\t\t\t\tbreak;\r\n\t\t\t}\r\n\t\t\tif (pokemon.isActive && forme) {\r\n\t\t\t\tpokemon.formeChange(forme, this.effect, false, '[msg]');\r\n\t\t\t}\r\n\t\t},\r\n\t\tname: \"Forecast\",\r\n\t\trating: 2,\r\n\t\tnum: 59,\r\n\t},\r\n\tforewarn: {\r\n\t\tonStart(pokemon) {\r\n\t\t\tlet warnMoves: (Move | Pokemon)[][] = [];\r\n\t\t\tlet warnBp = 1;\r\n\t\t\tfor (const target of pokemon.foes()) {\r\n\t\t\t\tfor (const moveSlot of target.moveSlots) {\r\n\t\t\t\t\tconst move = this.dex.moves.get(moveSlot.move);\r\n\t\t\t\t\tlet bp = move.basePower;\r\n\t\t\t\t\tif (move.ohko) bp = 150;\r\n\t\t\t\t\tif (move.id === 'counter' || move.id === 'metalburst' || move.id === 'mirrorcoat') bp = 120;\r\n\t\t\t\t\tif (bp === 1) bp = 80;\r\n\t\t\t\t\tif (!bp && move.category !== 'Status') bp = 80;\r\n\t\t\t\t\tif (bp > warnBp) {\r\n\t\t\t\t\t\twarnMoves = [[move, target]];\r\n\t\t\t\t\t\twarnBp = bp;\r\n\t\t\t\t\t} else if (bp === warnBp) {\r\n\t\t\t\t\t\twarnMoves.push([move, target]);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (!warnMoves.length) return;\r\n\t\t\tconst [warnMoveName, warnTarget] = this.sample(warnMoves);\r\n\t\t\tthis.add('-activate', pokemon, 'ability: Forewarn', warnMoveName, '[of] ' + warnTarget);\r\n\t\t},\r\n\t\tname: \"Forewarn\",\r\n\t\trating: 0.5,\r\n\t\tnum: 108,\r\n\t},\r\n\tfriendguard: {\r\n\t\tname: \"Friend Guard\",\r\n\t\tonAnyModifyDamage(damage, source, target, move) {\r\n\t\t\tif (target !== this.effectState.target && target.isAlly(this.effectState.target)) {\r\n\t\t\t\tthis.debug('Friend Guard weaken');\r\n\t\t\t\treturn this.chainModify(0.75);\r\n\t\t\t}\r\n\t\t},\r\n\t\tisBreakable: true,\r\n\t\trating: 0,\r\n\t\tnum: 132,\r\n\t},\r\n\tfrisk: {\r\n\t\tonStart(pokemon) {\r\n\t\t\tfor (const target of pokemon.foes()) {\r\n\t\t\t\tif (target.item) {\r\n\t\t\t\t\tthis.add('-item', target, target.getItem().name, '[from] ability: Frisk', '[of] ' + pokemon, '[identify]');\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\tname: \"Frisk\",\r\n\t\trating: 1.5,\r\n\t\tnum: 119,\r\n\t},\r\n\tfullmetalbody: {\r\n\t\tonTryBoost(boost, target, source, effect) {\r\n\t\t\tif (source && target === source) return;\r\n\t\t\tlet showMsg = false;\r\n\t\t\tlet i: BoostID;\r\n\t\t\tfor (i in boost) {\r\n\t\t\t\tif (boost[i]! < 0) {\r\n\t\t\t\t\tdelete boost[i];\r\n\t\t\t\t\tshowMsg = true;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (showMsg && !(effect as ActiveMove).secondaries && effect.id !== 'octolock') {\r\n\t\t\t\tthis.add(\"-fail\", target, \"unboost\", \"[from] ability: Full Metal Body\", \"[of] \" + target);\r\n\t\t\t}\r\n\t\t},\r\n\t\tname: \"Full Metal Body\",\r\n\t\trating: 2,\r\n\t\tnum: 230,\r\n\t},\r\n\tfurcoat: {\r\n\t\tonModifyDefPriority: 6,\r\n\t\tonModifyDef(def) {\r\n\t\t\treturn this.chainModify(2);\r\n\t\t},\r\n\t\tisBreakable: true,\r\n\t\tname: \"Fur Coat\",\r\n\t\trating: 4,\r\n\t\tnum: 169,\r\n\t},\r\n\tgalewings: {\r\n\t\tonModifyPriority(priority, pokemon, target, move) {\r\n\t\t\tif (move?.type === 'Flying' && pokemon.hp === pokemon.maxhp) return priority + 1;\r\n\t\t},\r\n\t\tname: \"Gale Wings\",\r\n\t\trating: 2.5,\r\n\t\tnum: 177,\r\n\t},\r\n\tgalvanize: {\r\n\t\tonModifyTypePriority: -1,\r\n\t\tonModifyType(move, pokemon) {\r\n\t\t\tconst noModifyType = [\r\n\t\t\t\t'judgment', 'multiattack', 'naturalgift', 'revelationdance', 'technoblast', 'terrainpulse', 'weatherball',\r\n\t\t\t];\r\n\t\t\tif (move.type === 'Normal' && !noModifyType.includes(move.id) &&\r\n\t\t\t\t!(move.isZ && move.category !== 'Status') && !(move.name === 'Tera Blast' && pokemon.terastallized)) {\r\n\t\t\t\tmove.type = 'Electric';\r\n\t\t\t\tmove.typeChangerBoosted = this.effect;\r\n\t\t\t}\r\n\t\t},\r\n\t\tonBasePowerPriority: 23,\r\n\t\tonBasePower(basePower, pokemon, target, move) {\r\n\t\t\tif (move.typeChangerBoosted === this.effect) return this.chainModify([4915, 4096]);\r\n\t\t},\r\n\t\tname: \"Galvanize\",\r\n\t\trating: 4,\r\n\t\tnum: 206,\r\n\t},\r\n\tgluttony: {\r\n\t\tname: \"Gluttony\",\r\n\t\trating: 1.5,\r\n\t\tnum: 82,\r\n\t\tonStart(pokemon) {\r\n\t\t\tpokemon.abilityState.gluttony = true;\r\n\t\t},\r\n\t\tonDamage(item, pokemon) {\r\n\t\t\tpokemon.abilityState.gluttony = true;\r\n\t\t},\r\n\r\n\t},\r\n\tgoodasgold: {\r\n\t\tonTryHit(target, source, move) {\r\n\t\t\tif (move.category === 'Status' && target !== source) {\r\n\t\t\t\tthis.add('-immune', target, '[from] ability: Good as Gold');\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t},\r\n\t\tisBreakable: true,\r\n\t\tname: \"Good as Gold\",\r\n\t\trating: 5,\r\n\t\tnum: 283,\r\n\t},\r\n\tgooey: {\r\n\t\tonDamagingHit(damage, target, source, move) {\r\n\t\t\tif (this.checkMoveMakesContact(move, source, target, true)) {\r\n\t\t\t\tthis.add('-ability', target, 'Gooey');\r\n\t\t\t\tthis.boost({spe: -1}, source, target, null, true);\r\n\t\t\t}\r\n\t\t},\r\n\t\tname: \"Gooey\",\r\n\t\trating: 2,\r\n\t\tnum: 183,\r\n\t},\r\n\tgorillatactics: {\r\n\t\tonStart(pokemon) {\r\n\t\t\tpokemon.abilityState.choiceLock = \"\";\r\n\t\t},\r\n\t\tonBeforeMove(pokemon, target, move) {\r\n\t\t\tif (move.isZOrMaxPowered || move.id === 'struggle') return;\r\n\t\t\tif (pokemon.abilityState.choiceLock && pokemon.abilityState.choiceLock !== move.id) {\r\n\t\t\t\t// Fails unless ability is being ignored (these events will not run), no PP lost.\r\n\t\t\t\tthis.addMove('move', pokemon, move.name);\r\n\t\t\t\tthis.attrLastMove('[still]');\r\n\t\t\t\tthis.debug(\"Disabled by Gorilla Tactics\");\r\n\t\t\t\tthis.add('-fail', pokemon);\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\t\tonModifyMove(move, pokemon) {\r\n\t\t\tif (pokemon.abilityState.choiceLock || move.isZOrMaxPowered || move.id === 'struggle') return;\r\n\t\t\tpokemon.abilityState.choiceLock = move.id;\r\n\t\t},\r\n\t\tonModifyAtkPriority: 1,\r\n\t\tonModifyAtk(atk, pokemon) {\r\n\t\t\tif (pokemon.volatiles['dynamax']) return;\r\n\t\t\t// PLACEHOLDER\r\n\t\t\tthis.debug('Gorilla Tactics Atk Boost');\r\n\t\t\treturn this.chainModify(1.5);\r\n\t\t},\r\n\t\tonDisableMove(pokemon) {\r\n\t\t\tif (!pokemon.abilityState.choiceLock) return;\r\n\t\t\tif (pokemon.volatiles['dynamax']) return;\r\n\t\t\tfor (const moveSlot of pokemon.moveSlots) {\r\n\t\t\t\tif (moveSlot.id !== pokemon.abilityState.choiceLock) {\r\n\t\t\t\t\tpokemon.disableMove(moveSlot.id, false, this.effectState.sourceEffect);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\tonEnd(pokemon) {\r\n\t\t\tpokemon.abilityState.choiceLock = \"\";\r\n\t\t},\r\n\t\tname: \"Gorilla Tactics\",\r\n\t\trating: 4.5,\r\n\t\tnum: 255,\r\n\t},\r\n\tgrasspelt: {\r\n\t\tonModifyDefPriority: 6,\r\n\t\tonModifyDef(pokemon) {\r\n\t\t\tif (this.field.isTerrain('grassyterrain')) return this.chainModify(1.5);\r\n\t\t},\r\n\t\tisBreakable: true,\r\n\t\tname: \"Grass Pelt\",\r\n\t\trating: 0.5,\r\n\t\tnum: 179,\r\n\t},\r\n\tgrassysurge: {\r\n\t\tonStart(source) {\r\n\t\t\tthis.field.setTerrain('grassyterrain');\r\n\t\t},\r\n\t\tname: \"Grassy Surge\",\r\n\t\trating: 4,\r\n\t\tnum: 229,\r\n\t},\r\n\tgrimneigh: {\r\n\t\tonSourceAfterFaint(length, target, source, effect) {\r\n\t\t\tif (effect && effect.effectType === 'Move') {\r\n\t\t\t\tthis.boost({spa: length}, source);\r\n\t\t\t}\r\n\t\t},\r\n\t\tname: \"Grim Neigh\",\r\n\t\trating: 3,\r\n\t\tnum: 265,\r\n\t},\r\n\tguarddog: {\r\n\t\tonDragOutPriority: 1,\r\n\t\tonDragOut(pokemon) {\r\n\t\t\tthis.add('-activate', pokemon, 'ability: Guard Dog');\r\n\t\t\treturn null;\r\n\t\t},\r\n\t\tonTryBoost(boost, target, source, effect) {\r\n\t\t\tif (effect.name === 'Intimidate' && boost.atk) {\r\n\t\t\t\tdelete boost.atk;\r\n\t\t\t\tthis.boost({atk: 1}, target, target, null, false, true);\r\n\t\t\t}\r\n\t\t},\r\n\t\tname: \"Guard Dog\",\r\n\t\trating: 2,\r\n\t\tnum: 275,\r\n\t},\r\n\tgulpmissile: {\r\n\t\tonDamagingHit(damage, target, source, move) {\r\n\t\t\tif (!source.hp || !source.isActive || target.transformed || target.isSemiInvulnerable()) return;\r\n\t\t\tif (['cramorantgulping', 'cramorantgorging'].includes(target.species.id)) {\r\n\t\t\t\tthis.damage(source.baseMaxhp / 4, source, target);\r\n\t\t\t\tif (target.species.id === 'cramorantgulping') {\r\n\t\t\t\t\tthis.boost({def: -1}, source, target, null, true);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tsource.trySetStatus('par', target, move);\r\n\t\t\t\t}\r\n\t\t\t\ttarget.formeChange('cramorant', move);\r\n\t\t\t}\r\n\t\t},\r\n\t\t// The Dive part of this mechanic is implemented in Dive's `onTryMove` in moves.ts\r\n\t\tonSourceTryPrimaryHit(target, source, effect) {\r\n\t\t\tif (\r\n\t\t\t\teffect && effect.id === 'surf' && source.hasAbility('gulpmissile') &&\r\n\t\t\t\tsource.species.name === 'Cramorant' && !source.transformed\r\n\t\t\t) {\r\n\t\t\t\tconst forme = source.hp <= source.maxhp / 2 ? 'cramorantgorging' : 'cramorantgulping';\r\n\t\t\t\tsource.formeChange(forme, effect);\r\n\t\t\t}\r\n\t\t},\r\n\t\tisPermanent: true,\r\n\t\tname: \"Gulp Missile\",\r\n\t\trating: 2.5,\r\n\t\tnum: 241,\r\n\t},\r\n\tguts: {\r\n\t\tonModifyAtkPriority: 5,\r\n\t\tonModifyAtk(atk, pokemon) {\r\n\t\t\tif (pokemon.status) {\r\n\t\t\t\treturn this.chainModify(1.5);\r\n\t\t\t}\r\n\t\t},\r\n\t\tname: \"Guts\",\r\n\t\trating: 3.5,\r\n\t\tnum: 62,\r\n\t},\r\n\thadronengine: {\r\n\t\tonStart(pokemon) {\r\n\t\t\tif (!this.field.setTerrain('electricterrain') && this.field.isTerrain('electricterrain')) {\r\n\t\t\t\tthis.add('-activate', pokemon, 'ability: Hadron Engine');\r\n\t\t\t}\r\n\t\t},\r\n\t\tonModifySpAPriority: 5,\r\n\t\tonModifySpA(atk, attacker, defender, move) {\r\n\t\t\tif (this.field.isTerrain('electricterrain')) {\r\n\t\t\t\tthis.debug('Hadron Engine boost');\r\n\t\t\t\treturn this.chainModify([5461, 4096]);\r\n\t\t\t}\r\n\t\t},\r\n\t\tname: \"Hadron Engine\",\r\n\t\trating: 4.5,\r\n\t\tnum: 289,\r\n\t},\r\n\tharvest: {\r\n\t\tname: \"Harvest\",\r\n\t\tonResidualOrder: 28,\r\n\t\tonResidualSubOrder: 2,\r\n\t\tonResidual(pokemon) {\r\n\t\t\tif (this.field.isWeather(['sunnyday', 'desolateland']) || this.randomChance(1, 2)) {\r\n\t\t\t\tif (pokemon.hp && !pokemon.item && this.dex.items.get(pokemon.lastItem).isBerry) {\r\n\t\t\t\t\tpokemon.setItem(pokemon.lastItem);\r\n\t\t\t\t\tpokemon.lastItem = '';\r\n\t\t\t\t\tthis.add('-item', pokemon, pokemon.getItem(), '[from] ability: Harvest');\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\trating: 2.5,\r\n\t\tnum: 139,\r\n\t},\r\n\thealer: {\r\n\t\tname: \"Healer\",\r\n\t\tonResidualOrder: 5,\r\n\t\tonResidualSubOrder: 3,\r\n\t\tonResidual(pokemon) {\r\n\t\t\tfor (const allyActive of pokemon.adjacentAllies()) {\r\n\t\t\t\tif (allyActive.status && this.randomChance(3, 10)) {\r\n\t\t\t\t\tthis.add('-activate', pokemon, 'ability: Healer');\r\n\t\t\t\t\tallyActive.cureStatus();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\trating: 0,\r\n\t\tnum: 131,\r\n\t},\r\n\theatproof: {\r\n\t\tonSourceBasePowerPriority: 18,\r\n\t\tonSourceBasePower(basePower, attacker, defender, move) {\r\n\t\t\tif (move.type === 'Fire') {\r\n\t\t\t\treturn this.chainModify(0.5);\r\n\t\t\t}\r\n\t\t},\r\n\t\tonDamage(damage, target, source, effect) {\r\n\t\t\tif (effect && effect.id === 'brn') {\r\n\t\t\t\treturn damage / 2;\r\n\t\t\t}\r\n\t\t},\r\n\t\tisBreakable: true,\r\n\t\tname: \"Heatproof\",\r\n\t\trating: 2,\r\n\t\tnum: 85,\r\n\t},\r\n\theavymetal: {\r\n\t\tonModifyWeightPriority: 1,\r\n\t\tonModifyWeight(weighthg) {\r\n\t\t\treturn weighthg * 2;\r\n\t\t},\r\n\t\tisBreakable: true,\r\n\t\tname: \"Heavy Metal\",\r\n\t\trating: 0,\r\n\t\tnum: 134,\r\n\t},\r\n\thoneygather: {\r\n\t\tname: \"Honey Gather\",\r\n\t\trating: 0,\r\n\t\tnum: 118,\r\n\t},\r\n\thugepower: {\r\n\t\tonModifyAtkPriority: 5,\r\n\t\tonModifyAtk(atk) {\r\n\t\t\treturn this.chainModify(2);\r\n\t\t},\r\n\t\tname: \"Huge Power\",\r\n\t\trating: 5,\r\n\t\tnum: 37,\r\n\t},\r\n\thungerswitch: {\r\n\t\tonResidualOrder: 29,\r\n\t\tonResidual(pokemon) {\r\n\t\t\tif (pokemon.species.baseSpecies !== 'Morpeko' || pokemon.transformed) return;\r\n\t\t\tconst targetForme = pokemon.species.name === 'Morpeko' ? 'Morpeko-Hangry' : 'Morpeko';\r\n\t\t\tpokemon.formeChange(targetForme);\r\n\t\t},\r\n\t\tname: \"Hunger Switch\",\r\n\t\trating: 1,\r\n\t\tnum: 258,\r\n\t},\r\n\thustle: {\r\n\t\t// This should be applied directly to the stat as opposed to chaining with the others\r\n\t\tonModifyAtkPriority: 5,\r\n\t\tonModifyAtk(atk) {\r\n\t\t\treturn this.modify(atk, 1.5);\r\n\t\t},\r\n\t\tonSourceModifyAccuracyPriority: -1,\r\n\t\tonSourceModifyAccuracy(accuracy, target, source, move) {\r\n\t\t\tif (move.category === 'Physical' && typeof accuracy === 'number') {\r\n\t\t\t\treturn this.chainModify([3277, 4096]);\r\n\t\t\t}\r\n\t\t},\r\n\t\tname: \"Hustle\",\r\n\t\trating: 3.5,\r\n\t\tnum: 55,\r\n\t},\r\n\thydration: {\r\n\t\tonResidualOrder: 5,\r\n\t\tonResidualSubOrder: 3,\r\n\t\tonResidual(pokemon) {\r\n\t\t\tif (pokemon.status && ['raindance', 'primordialsea'].includes(pokemon.effectiveWeather())) {\r\n\t\t\t\tthis.debug('hydration');\r\n\t\t\t\tthis.add('-activate', pokemon, 'ability: Hydration');\r\n\t\t\t\tpokemon.cureStatus();\r\n\t\t\t}\r\n\t\t},\r\n\t\tname: \"Hydration\",\r\n\t\trating: 1.5,\r\n\t\tnum: 93,\r\n\t},\r\n\thypercutter: {\r\n\t\tonTryBoost(boost, target, source, effect) {\r\n\t\t\tif (source && target === source) return;\r\n\t\t\tif (boost.atk && boost.atk < 0) {\r\n\t\t\t\tdelete boost.atk;\r\n\t\t\t\tif (!(effect as ActiveMove).secondaries) {\r\n\t\t\t\t\tthis.add(\"-fail\", target, \"unboost\", \"Attack\", \"[from] ability: Hyper Cutter\", \"[of] \" + target);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\tisBreakable: true,\r\n\t\tname: \"Hyper Cutter\",\r\n\t\trating: 1.5,\r\n\t\tnum: 52,\r\n\t},\r\n\ticebody: {\r\n\t\tonWeather(target, source, effect) {\r\n\t\t\tif (effect.id === 'hail' || effect.id === 'snow') {\r\n\t\t\t\tthis.heal(target.baseMaxhp / 16);\r\n\t\t\t}\r\n\t\t},\r\n\t\tonImmunity(type, pokemon) {\r\n\t\t\tif (type === 'hail') return false;\r\n\t\t},\r\n\t\tname: \"Ice Body\",\r\n\t\trating: 1,\r\n\t\tnum: 115,\r\n\t},\r\n\ticeface: {\r\n\t\tonStart(pokemon) {\r\n\t\t\tif (this.field.isWeather(['hail', 'snow']) &&\r\n\t\t\t\tpokemon.species.id === 'eiscuenoice' && !pokemon.transformed) {\r\n\t\t\t\tthis.add('-activate', pokemon, 'ability: Ice Face');\r\n\t\t\t\tthis.effectState.busted = false;\r\n\t\t\t\tpokemon.formeChange('Eiscue', this.effect, true);\r\n\t\t\t}\r\n\t\t},\r\n\t\tonDamagePriority: 1,\r\n\t\tonDamage(damage, target, source, effect) {\r\n\t\t\tif (\r\n\t\t\t\teffect && effect.effectType === 'Move' && effect.category === 'Physical' &&\r\n\t\t\t\ttarget.species.id === 'eiscue' && !target.transformed\r\n\t\t\t) {\r\n\t\t\t\tthis.add('-activate', target, 'ability: Ice Face');\r\n\t\t\t\tthis.effectState.busted = true;\r\n\t\t\t\treturn 0;\r\n\t\t\t}\r\n\t\t},\r\n\t\tonCriticalHit(target, type, move) {\r\n\t\t\tif (!target) return;\r\n\t\t\tif (move.category !== 'Physical' || target.species.id !== 'eiscue' || target.transformed) return;\r\n\t\t\tif (target.volatiles['substitute'] && !(move.flags['bypasssub'] || move.infiltrates)) return;\r\n\t\t\tif (!target.runImmunity(move.type)) return;\r\n\t\t\treturn false;\r\n\t\t},\r\n\t\tonEffectiveness(typeMod, target, type, move) {\r\n\t\t\tif (!target) return;\r\n\t\t\tif (move.category !== 'Physical' || target.species.id !== 'eiscue' || target.transformed) return;\r\n\r\n\t\t\tconst hitSub = target.volatiles['substitute'] && !move.flags['bypasssub'] && !(move.infiltrates && this.gen >= 6);\r\n\t\t\tif (hitSub) return;\r\n\r\n\t\t\tif (!target.runImmunity(move.type)) return;\r\n\t\t\treturn 0;\r\n\t\t},\r\n\t\tonUpdate(pokemon) {\r\n\t\t\tif (pokemon.species.id === 'eiscue' && this.effectState.busted) {\r\n\t\t\t\tpokemon.formeChange('Eiscue-Noice', this.effect, true);\r\n\t\t\t}\r\n\t\t},\r\n\t\tonWeatherChange(pokemon, source, sourceEffect) {\r\n\t\t\t// snow/hail resuming because Cloud Nine/Air Lock ended does not trigger Ice Face\r\n\t\t\tif ((sourceEffect as Ability)?.suppressWeather) return;\r\n\t\t\tif (!pokemon.hp) return;\r\n\t\t\tif (this.field.isWeather(['hail', 'snow']) &&\r\n\t\t\t\tpokemon.species.id === 'eiscuenoice' && !pokemon.transformed) {\r\n\t\t\t\tthis.add('-activate', pokemon, 'ability: Ice Face');\r\n\t\t\t\tthis.effectState.busted = false;\r\n\t\t\t\tpokemon.formeChange('Eiscue', this.effect, true);\r\n\t\t\t}\r\n\t\t},\r\n\t\tisBreakable: true,\r\n\t\tisPermanent: true,\r\n\t\tname: \"Ice Face\",\r\n\t\trating: 3,\r\n\t\tnum: 248,\r\n\t},\r\n\ticescales: {\r\n\t\tonSourceModifyDamage(damage, source, target, move) {\r\n\t\t\tif (move.category === 'Special') {\r\n\t\t\t\treturn this.chainModify(0.5);\r\n\t\t\t}\r\n\t\t},\r\n\t\tisBreakable: true,\r\n\t\tname: \"Ice Scales\",\r\n\t\trating: 4,\r\n\t\tnum: 246,\r\n\t},\r\n\tilluminate: {\r\n\t\tname: \"Illuminate\",\r\n\t\trating: 0,\r\n\t\tnum: 35,\r\n\t},\r\n\tillusion: {\r\n\t\tonBeforeSwitchIn(pokemon) {\r\n\t\t\tpokemon.illusion = null;\r\n\t\t\t// yes, you can Illusion an active pokemon but only if it's to your right\r\n\t\t\tfor (let i = pokemon.side.pokemon.length - 1; i > pokemon.position; i--) {\r\n\t\t\t\tconst possibleTarget = pokemon.side.pokemon[i];\r\n\t\t\t\tif (!possibleTarget.fainted) {\r\n\t\t\t\t\tpokemon.illusion = possibleTarget;\r\n\t\t\t\t\tbreak;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\tonDamagingHit(damage, target, source, move) {\r\n\t\t\tif (target.illusion) {\r\n\t\t\t\tthis.singleEvent('End', this.dex.abilities.get('Illusion'), target.abilityState, target, source, move);\r\n\t\t\t}\r\n\t\t},\r\n\t\tonEnd(pokemon) {\r\n\t\t\tif (pokemon.illusion) {\r\n\t\t\t\tthis.debug('illusion cleared');\r\n\t\t\t\tpokemon.illusion = null;\r\n\t\t\t\tconst details = pokemon.species.name + (pokemon.level === 100 ? '' : ', L' + pokemon.level) +\r\n\t\t\t\t\t(pokemon.gender === '' ? '' : ', ' + pokemon.gender) + (pokemon.set.shiny ? ', shiny' : '');\r\n\t\t\t\tthis.add('replace', pokemon, details);\r\n\t\t\t\tthis.add('-end', pokemon, 'Illusion');\r\n\t\t\t}\r\n\t\t},\r\n\t\tonFaint(pokemon) {\r\n\t\t\tpokemon.illusion = null;\r\n\t\t},\r\n\t\tname: \"Illusion\",\r\n\t\trating: 4.5,\r\n\t\tnum: 149,\r\n\t},\r\n\timmunity: {\r\n\t\tonUpdate(pokemon) {\r\n\t\t\tif (pokemon.status === 'psn' || pokemon.status === 'tox') {\r\n\t\t\t\tthis.add('-activate', pokemon, 'ability: Immunity');\r\n\t\t\t\tpokemon.cureStatus();\r\n\t\t\t}\r\n\t\t},\r\n\t\tonSetStatus(status, target, source, effect) {\r\n\t\t\tif (status.id !== 'psn' && status.id !== 'tox') return;\r\n\t\t\tif ((effect as Move)?.status) {\r\n\t\t\t\tthis.add('-immune', target, '[from] ability: Immunity');\r\n\t\t\t}\r\n\t\t\treturn false;\r\n\t\t},\r\n\t\tisBreakable: true,\r\n\t\tname: \"Immunity\",\r\n\t\trating: 2,\r\n\t\tnum: 17,\r\n\t},\r\n\timposter: {\r\n\t\tonSwitchIn(pokemon) {\r\n\t\t\tthis.effectState.switchingIn = true;\r\n\t\t},\r\n\t\tonStart(pokemon) {\r\n\t\t\t// Imposter does not activate when Skill Swapped or when Neutralizing Gas leaves the field\r\n\t\t\tif (!this.effectState.switchingIn) return;\r\n\t\t\t// copies across in doubles/triples\r\n\t\t\t// (also copies across in multibattle and diagonally in free-for-all,\r\n\t\t\t// but side.foe already takes care of those)\r\n\t\t\tconst target = pokemon.side.foe.active[pokemon.side.foe.active.length - 1 - pokemon.position];\r\n\t\t\tif (target) {\r\n\t\t\t\tpokemon.transformInto(target, this.dex.abilities.get('imposter'));\r\n\t\t\t}\r\n\t\t\tthis.effectState.switchingIn = false;\r\n\t\t},\r\n\t\tname: \"Imposter\",\r\n\t\trating: 5,\r\n\t\tnum: 150,\r\n\t},\r\n\tinfiltrator: {\r\n\t\tonModifyMove(move) {\r\n\t\t\tmove.infiltrates = true;\r\n\t\t},\r\n\t\tname: \"Infiltrator\",\r\n\t\trating: 2.5,\r\n\t\tnum: 151,\r\n\t},\r\n\tinnardsout: {\r\n\t\tname: \"Innards Out\",\r\n\t\tonDamagingHitOrder: 1,\r\n\t\tonDamagingHit(damage, target, source, move) {\r\n\t\t\tif (!target.hp) {\r\n\t\t\t\tthis.damage(target.getUndynamaxedHP(damage), source, target);\r\n\t\t\t}\r\n\t\t},\r\n\t\trating: 4,\r\n\t\tnum: 215,\r\n\t},\r\n\tinnerfocus: {\r\n\t\tonTryAddVolatile(status, pokemon) {\r\n\t\t\tif (status.id === 'flinch') return null;\r\n\t\t},\r\n\t\tonTryBoost(boost, target, source, effect) {\r\n\t\t\tif (effect.name === 'Intimidate' && boost.atk) {\r\n\t\t\t\tdelete boost.atk;\r\n\t\t\t\tthis.add('-fail', target, 'unboost', 'Attack', '[from] ability: Inner Focus', '[of] ' + target);\r\n\t\t\t}\r\n\t\t},\r\n\t\tisBreakable: true,\r\n\t\tname: \"Inner Focus\",\r\n\t\trating: 1,\r\n\t\tnum: 39,\r\n\t},\r\n\tinsomnia: {\r\n\t\tonUpdate(pokemon) {\r\n\t\t\tif (pokemon.status === 'slp') {\r\n\t\t\t\tthis.add('-activate', pokemon, 'ability: Insomnia');\r\n\t\t\t\tpokemon.cureStatus();\r\n\t\t\t}\r\n\t\t},\r\n\t\tonSetStatus(status, target, source, effect) {\r\n\t\t\tif (status.id !== 'slp') return;\r\n\t\t\tif ((effect as Move)?.status) {\r\n\t\t\t\tthis.add('-immune', target, '[from] ability: Insomnia');\r\n\t\t\t}\r\n\t\t\treturn false;\r\n\t\t},\r\n\t\tisBreakable: true,\r\n\t\tname: \"Insomnia\",\r\n\t\trating: 1.5,\r\n\t\tnum: 15,\r\n\t},\r\n\tintimidate: {\r\n\t\tonStart(pokemon) {\r\n\t\t\tlet activated = false;\r\n\t\t\tfor (const target of pokemon.adjacentFoes()) {\r\n\t\t\t\tif (!activated) {\r\n\t\t\t\t\tthis.add('-ability', pokemon, 'Intimidate', 'boost');\r\n\t\t\t\t\tactivated = true;\r\n\t\t\t\t}\r\n\t\t\t\tif (target.volatiles['substitute']) {\r\n\t\t\t\t\tthis.add('-immune', target);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tthis.boost({atk: -1}, target, pokemon, null, true);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\tname: \"Intimidate\",\r\n\t\trating: 3.5,\r\n\t\tnum: 22,\r\n\t},\r\n\tintrepidsword: {\r\n\t\tonStart(pokemon) {\r\n\t\t\tif (this.effectState.swordBoost) return;\r\n\t\t\tif (this.boost({atk: 1}, pokemon)) {\r\n\t\t\t\tthis.effectState.swordBoost = true;\r\n\t\t\t}\r\n\t\t},\r\n\t\tname: \"Intrepid Sword\",\r\n\t\trating: 4,\r\n\t\tnum: 234,\r\n\t},\r\n\tironbarbs: {\r\n\t\tonDamagingHitOrder: 1,\r\n\t\tonDamagingHit(damage, target, source, move) {\r\n\t\t\tif (this.checkMoveMakesContact(move, source, target, true)) {\r\n\t\t\t\tthis.damage(source.baseMaxhp / 8, source, target);\r\n\t\t\t}\r\n\t\t},\r\n\t\tname: \"Iron Barbs\",\r\n\t\trating: 2.5,\r\n\t\tnum: 160,\r\n\t},\r\n\tironfist: {\r\n\t\tonBasePowerPriority: 23,\r\n\t\tonBasePower(basePower, attacker, defender, move) {\r\n\t\t\tif (move.flags['punch']) {\r\n\t\t\t\tthis.debug('Iron Fist boost');\r\n\t\t\t\treturn this.chainModify([4915, 4096]);\r\n\t\t\t}\r\n\t\t},\r\n\t\tname: \"Iron Fist\",\r\n\t\trating: 3,\r\n\t\tnum: 89,\r\n\t},\r\n\tjustified: {\r\n\t\tonDamagingHit(damage, target, source, move) {\r\n\t\t\tif (move.type === 'Dark') {\r\n\t\t\t\tthis.boost({atk: 1});\r\n\t\t\t}\r\n\t\t},\r\n\t\tname: \"Justified\",\r\n\t\trating: 2.5,\r\n\t\tnum: 154,\r\n\t},\r\n\tkeeneye: {\r\n\t\tonTryBoost(boost, target, source, effect) {\r\n\t\t\tif (source && target === source) return;\r\n\t\t\tif (boost.accuracy && boost.accuracy < 0) {\r\n\t\t\t\tdelete boost.accuracy;\r\n\t\t\t\tif (!(effect as ActiveMove).secondaries) {\r\n\t\t\t\t\tthis.add(\"-fail\", target, \"unboost\", \"accuracy\", \"[from] ability: Keen Eye\", \"[of] \" + target);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\tonModifyMove(move) {\r\n\t\t\tmove.ignoreEvasion = true;\r\n\t\t},\r\n\t\tisBreakable: true,\r\n\t\tname: \"Keen Eye\",\r\n\t\trating: 0.5,\r\n\t\tnum: 51,\r\n\t},\r\n\tklutz: {\r\n\t\t// Item suppression implemented in Pokemon.ignoringItem() within sim/pokemon.js\r\n\t\tonStart(pokemon) {\r\n\t\t\tthis.singleEvent('End', pokemon.getItem(), pokemon.itemState, pokemon);\r\n\t\t},\r\n\t\tname: \"Klutz\",\r\n\t\trating: -1,\r\n\t\tnum: 103,\r\n\t},\r\n\tleafguard: {\r\n\t\tonSetStatus(status, target, source, effect) {\r\n\t\t\tif (['sunnyday', 'desolateland'].includes(target.effectiveWeather())) {\r\n\t\t\t\tif ((effect as Move)?.status) {\r\n\t\t\t\t\tthis.add('-immune', target, '[from] ability: Leaf Guard');\r\n\t\t\t\t}\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\t\tonTryAddVolatile(status, target) {\r\n\t\t\tif (status.id === 'yawn' && ['sunnyday', 'desolateland'].includes(target.effectiveWeather())) {\r\n\t\t\t\tthis.add('-immune', target, '[from] ability: Leaf Guard');\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t},\r\n\t\tisBreakable: true,\r\n\t\tname: \"Leaf Guard\",\r\n\t\trating: 0.5,\r\n\t\tnum: 102,\r\n\t},\r\n\tlevitate: {\r\n\t\t// airborneness implemented in sim/pokemon.js:Pokemon#isGrounded\r\n\t\tisBreakable: true,\r\n\t\tname: \"Levitate\",\r\n\t\trating: 3.5,\r\n\t\tnum: 26,\r\n\t},\r\n\tlibero: {\r\n\t\tonPrepareHit(source, target, move) {\r\n\t\t\tif (this.effectState.libero) return;\r\n\t\t\tif (move.hasBounced || move.flags['futuremove'] || move.sourceEffect === 'snatch') return;\r\n\t\t\tconst type = move.type;\r\n\t\t\tif (type && type !== '???' && source.getTypes().join() !== type) {\r\n\t\t\t\tif (!source.setType(type)) return;\r\n\t\t\t\tthis.effectState.libero = true;\r\n\t\t\t\tthis.add('-start', source, 'typechange', type, '[from] ability: Libero');\r\n\t\t\t}\r\n\t\t},\r\n\t\tonSwitchIn() {\r\n\t\t\tdelete this.effectState.libero;\r\n\t\t},\r\n\t\tname: \"Libero\",\r\n\t\trating: 4,\r\n\t\tnum: 236,\r\n\t},\r\n\tlightmetal: {\r\n\t\tonModifyWeight(weighthg) {\r\n\t\t\treturn this.trunc(weighthg / 2);\r\n\t\t},\r\n\t\tisBreakable: true,\r\n\t\tname: \"Light Metal\",\r\n\t\trating: 1,\r\n\t\tnum: 135,\r\n\t},\r\n\tlightningrod: {\r\n\t\tonTryHit(target, source, move) {\r\n\t\t\tif (target !== source && move.type === 'Electric') {\r\n\t\t\t\tif (!this.boost({spa: 1})) {\r\n\t\t\t\t\tthis.add('-immune', target, '[from] ability: Lightning Rod');\r\n\t\t\t\t}\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t},\r\n\t\tonAnyRedirectTarget(target, source, source2, move) {\r\n\t\t\tif (move.type !== 'Electric' || move.flags['pledgecombo']) return;\r\n\t\t\tconst redirectTarget = ['randomNormal', 'adjacentFoe'].includes(move.target) ? 'normal' : move.target;\r\n\t\t\tif (this.validTarget(this.effectState.target, source, redirectTarget)) {\r\n\t\t\t\tif (move.smartTarget) move.smartTarget = false;\r\n\t\t\t\tif (this.effectState.target !== target) {\r\n\t\t\t\t\tthis.add('-activate', this.effectState.target, 'ability: Lightning Rod');\r\n\t\t\t\t}\r\n\t\t\t\treturn this.effectState.target;\r\n\t\t\t}\r\n\t\t},\r\n\t\tisBreakable: true,\r\n\t\tname: \"Lightning Rod\",\r\n\t\trating: 3,\r\n\t\tnum: 31,\r\n\t},\r\n\tlimber: {\r\n\t\tonUpdate(pokemon) {\r\n\t\t\tif (pokemon.status === 'par') {\r\n\t\t\t\tthis.add('-activate', pokemon, 'ability: Limber');\r\n\t\t\t\tpokemon.cureStatus();\r\n\t\t\t}\r\n\t\t},\r\n\t\tonSetStatus(status, target, source, effect) {\r\n\t\t\tif (status.id !== 'par') return;\r\n\t\t\tif ((effect as Move)?.status) {\r\n\t\t\t\tthis.add('-immune', target, '[from] ability: Limber');\r\n\t\t\t}\r\n\t\t\treturn false;\r\n\t\t},\r\n\t\tisBreakable: true,\r\n\t\tname: \"Limber\",\r\n\t\trating: 2,\r\n\t\tnum: 7,\r\n\t},\r\n\tlingeringaroma: {\r\n\t\tonDamagingHit(damage, target, source, move) {\r\n\t\t\tconst sourceAbility = source.getAbility();\r\n\t\t\tif (sourceAbility.isPermanent || sourceAbility.id === 'lingeringaroma') {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tif (this.checkMoveMakesContact(move, source, target, !source.isAlly(target))) {\r\n\t\t\t\tconst oldAbility = source.setAbility('lingeringaroma', target);\r\n\t\t\t\tif (oldAbility) {\r\n\t\t\t\t\tthis.add('-activate', target, 'ability: Lingering Aroma', this.dex.abilities.get(oldAbility).name, '[of] ' + source);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\tname: \"Lingering Aroma\",\r\n\t\trating: 2,\r\n\t\tnum: 268,\r\n\t},\r\n\tliquidooze: {\r\n\t\tonSourceTryHeal(damage, target, source, effect) {\r\n\t\t\tthis.debug(\"Heal is occurring: \" + target + \" <- \" + source + \" :: \" + effect.id);\r\n\t\t\tconst canOoze = ['drain', 'leechseed', 'strengthsap'];\r\n\t\t\tif (canOoze.includes(effect.id)) {\r\n\t\t\t\tthis.damage(damage);\r\n\t\t\t\treturn 0;\r\n\t\t\t}\r\n\t\t},\r\n\t\tname: \"Liquid Ooze\",\r\n\t\trating: 2.5,\r\n\t\tnum: 64,\r\n\t},\r\n\tliquidvoice: {\r\n\t\tonModifyTypePriority: -1,\r\n\t\tonModifyType(move, pokemon) {\r\n\t\t\tif (move.flags['sound'] && !pokemon.volatiles['dynamax']) { // hardcode\r\n\t\t\t\tmove.type = 'Water';\r\n\t\t\t}\r\n\t\t},\r\n\t\tname: \"Liquid Voice\",\r\n\t\trating: 1.5,\r\n\t\tnum: 204,\r\n\t},\r\n\tlongreach: {\r\n\t\tonModifyMove(move) {\r\n\t\t\tdelete move.flags['contact'];\r\n\t\t},\r\n\t\tname: \"Long Reach\",\r\n\t\trating: 1,\r\n\t\tnum: 203,\r\n\t},\r\n\tmagicbounce: {\r\n\t\tname: \"Magic Bounce\",\r\n\t\tonTryHitPriority: 1,\r\n\t\tonTryHit(target, source, move) {\r\n\t\t\tif (target === source || move.hasBounced || !move.flags['reflectable']) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tconst newMove = this.dex.getActiveMove(move.id);\r\n\t\t\tnewMove.hasBounced = true;\r\n\t\t\tnewMove.pranksterBoosted = false;\r\n\t\t\tthis.actions.useMove(newMove, target, source);\r\n\t\t\treturn null;\r\n\t\t},\r\n\t\tonAllyTryHitSide(target, source, move) {\r\n\t\t\tif (target.isAlly(source) || move.hasBounced || !move.flags['reflectable']) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tconst newMove = this.dex.getActiveMove(move.id);\r\n\t\t\tnewMove.hasBounced = true;\r\n\t\t\tnewMove.pranksterBoosted = false;\r\n\t\t\tthis.actions.useMove(newMove, this.effectState.target, source);\r\n\t\t\treturn null;\r\n\t\t},\r\n\t\tcondition: {\r\n\t\t\tduration: 1,\r\n\t\t},\r\n\t\tisBreakable: true,\r\n\t\trating: 4,\r\n\t\tnum: 156,\r\n\t},\r\n\tmagicguard: {\r\n\t\tonDamage(damage, target, source, effect) {\r\n\t\t\tif (effect.effectType !== 'Move') {\r\n\t\t\t\tif (effect.effectType === 'Ability') this.add('-activate', source, 'ability: ' + effect.name);\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\t\tname: \"Magic Guard\",\r\n\t\trating: 4,\r\n\t\tnum: 98,\r\n\t},\r\n\tmagician: {\r\n\t\tonAfterMoveSecondarySelf(source, target, move) {\r\n\t\t\tif (!move || !target) return;\r\n\t\t\tif (target !== source && move.category !== 'Status') {\r\n\t\t\t\tif (source.item || source.volatiles['gem'] || move.id === 'fling') return;\r\n\t\t\t\tconst yourItem = target.takeItem(source);\r\n\t\t\t\tif (!yourItem) return;\r\n\t\t\t\tif (!source.setItem(yourItem)) {\r\n\t\t\t\t\ttarget.item = yourItem.id; // bypass setItem so we don't break choicelock or anything\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\tthis.add('-item', source, yourItem, '[from] ability: Magician', '[of] ' + target);\r\n\t\t\t}\r\n\t\t},\r\n\t\tname: \"Magician\",\r\n\t\trating: 1,\r\n\t\tnum: 170,\r\n\t},\r\n\tmagmaarmor: {\r\n\t\tonUpdate(pokemon) {\r\n\t\t\tif (pokemon.status === 'frz') {\r\n\t\t\t\tthis.add('-activate', pokemon, 'ability: Magma Armor');\r\n\t\t\t\tpokemon.cureStatus();\r\n\t\t\t}\r\n\t\t},\r\n\t\tonImmunity(type, pokemon) {\r\n\t\t\tif (type === 'frz') return false;\r\n\t\t},\r\n\t\tisBreakable: true,\r\n\t\tname: \"Magma Armor\",\r\n\t\trating: 0.5,\r\n\t\tnum: 40,\r\n\t},\r\n\tmagnetpull: {\r\n\t\tonFoeTrapPokemon(pokemon) {\r\n\t\t\tif (pokemon.hasType('Steel') && pokemon.isAdjacent(this.effectState.target)) {\r\n\t\t\t\tpokemon.tryTrap(true);\r\n\t\t\t}\r\n\t\t},\r\n\t\tonFoeMaybeTrapPokemon(pokemon, source) {\r\n\t\t\tif (!source) source = this.effectState.target;\r\n\t\t\tif (!source || !pokemon.isAdjacent(source)) return;\r\n\t\t\tif (!pokemon.knownType || pokemon.hasType('Steel')) {\r\n\t\t\t\tpokemon.maybeTrapped = true;\r\n\t\t\t}\r\n\t\t},\r\n\t\tname: \"Magnet Pull\",\r\n\t\trating: 4,\r\n\t\tnum: 42,\r\n\t},\r\n\tmarvelscale: {\r\n\t\tonModifyDefPriority: 6,\r\n\t\tonModifyDef(def, pokemon) {\r\n\t\t\tif (pokemon.status) {\r\n\t\t\t\treturn this.chainModify(1.5);\r\n\t\t\t}\r\n\t\t},\r\n\t\tisBreakable: true,\r\n\t\tname: \"Marvel Scale\",\r\n\t\trating: 2.5,\r\n\t\tnum: 63,\r\n\t},\r\n\tmegalauncher: {\r\n\t\tonBasePowerPriority: 19,\r\n\t\tonBasePower(basePower, attacker, defender, move) {\r\n\t\t\tif (move.flags['pulse']) {\r\n\t\t\t\treturn this.chainModify(1.5);\r\n\t\t\t}\r\n\t\t},\r\n\t\tname: \"Mega Launcher\",\r\n\t\trating: 3,\r\n\t\tnum: 178,\r\n\t},\r\n\tmerciless: {\r\n\t\tonModifyCritRatio(critRatio, source, target) {\r\n\t\t\tif (target && ['psn', 'tox'].includes(target.status)) return 5;\r\n\t\t},\r\n\t\tname: \"Merciless\",\r\n\t\trating: 1.5,\r\n\t\tnum: 196,\r\n\t},\r\n\tmimicry: {\r\n\t\tonStart(pokemon) {\r\n\t\t\tthis.singleEvent('TerrainChange', this.effect, this.effectState, pokemon);\r\n\t\t},\r\n\t\tonTerrainChange(pokemon) {\r\n\t\t\tlet types;\r\n\t\t\tswitch (this.field.terrain) {\r\n\t\t\tcase 'electricterrain':\r\n\t\t\t\ttypes = ['Electric'];\r\n\t\t\t\tbreak;\r\n\t\t\tcase 'grassyterrain':\r\n\t\t\t\ttypes = ['Grass'];\r\n\t\t\t\tbreak;\r\n\t\t\tcase 'mistyterrain':\r\n\t\t\t\ttypes = ['Fairy'];\r\n\t\t\t\tbreak;\r\n\t\t\tcase 'psychicterrain':\r\n\t\t\t\ttypes = ['Psychic'];\r\n\t\t\t\tbreak;\r\n\t\t\tdefault:\r\n\t\t\t\ttypes = pokemon.baseSpecies.types;\r\n\t\t\t}\r\n\t\t\tconst oldTypes = pokemon.getTypes();\r\n\t\t\tif (oldTypes.join() === types.join() || !pokemon.setType(types)) return;\r\n\t\t\tif (this.field.terrain || pokemon.transformed) {\r\n\t\t\t\tthis.add('-start', pokemon, 'typechange', types.join('/'), '[from] ability: Mimicry');\r\n\t\t\t\tif (!this.field.terrain) this.hint(\"Transform Mimicry changes you to your original un-transformed types.\");\r\n\t\t\t} else {\r\n\t\t\t\tthis.add('-activate', pokemon, 'ability: Mimicry');\r\n\t\t\t\tthis.add('-end', pokemon, 'typechange', '[silent]');\r\n\t\t\t}\r\n\t\t},\r\n\t\tname: \"Mimicry\",\r\n\t\trating: 0,\r\n\t\tnum: 250,\r\n\t},\r\n\tminus: {\r\n\t\tonModifySpAPriority: 5,\r\n\t\tonModifySpA(spa, pokemon) {\r\n\t\t\tfor (const allyActive of pokemon.allies()) {\r\n\t\t\t\tif (allyActive.hasAbility(['minus', 'plus'])) {\r\n\t\t\t\t\treturn this.chainModify(1.5);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\tname: \"Minus\",\r\n\t\trating: 0,\r\n\t\tnum: 58,\r\n\t},\r\n\tmirrorarmor: {\r\n\t\tonTryBoost(boost, target, source, effect) {\r\n\t\t\t// Don't bounce self stat changes, or boosts that have already bounced\r\n\t\t\tif (!source || target === source || !boost || effect.name === 'Mirror Armor') return;\r\n\t\t\tlet b: BoostID;\r\n\t\t\tfor (b in boost) {\r\n\t\t\t\tif (boost[b]! < 0) {\r\n\t\t\t\t\tif (target.boosts[b] === -6) continue;\r\n\t\t\t\t\tconst negativeBoost: SparseBoostsTable = {};\r\n\t\t\t\t\tnegativeBoost[b] = boost[b];\r\n\t\t\t\t\tdelete boost[b];\r\n\t\t\t\t\tif (source.hp) {\r\n\t\t\t\t\t\tthis.add('-ability', target, 'Mirror Armor');\r\n\t\t\t\t\t\tthis.boost(negativeBoost, source, target, null, true);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\tisBreakable: true,\r\n\t\tname: \"Mirror Armor\",\r\n\t\trating: 2,\r\n\t\tnum: 240,\r\n\t},\r\n\tmistysurge: {\r\n\t\tonStart(source) {\r\n\t\t\tthis.field.setTerrain('mistyterrain');\r\n\t\t},\r\n\t\tname: \"Misty Surge\",\r\n\t\trating: 3.5,\r\n\t\tnum: 228,\r\n\t},\r\n\tmoldbreaker: {\r\n\t\tonStart(pokemon) {\r\n\t\t\tthis.add('-ability', pokemon, 'Mold Breaker');\r\n\t\t},\r\n\t\tonModifyMove(move) {\r\n\t\t\tmove.ignoreAbility = true;\r\n\t\t},\r\n\t\tname: \"Mold Breaker\",\r\n\t\trating: 3,\r\n\t\tnum: 104,\r\n\t},\r\n\tmoody: {\r\n\t\tonResidualOrder: 28,\r\n\t\tonResidualSubOrder: 2,\r\n\t\tonResidual(pokemon) {\r\n\t\t\tlet stats: BoostID[] = [];\r\n\t\t\tconst boost: SparseBoostsTable = {};\r\n\t\t\tlet statPlus: BoostID;\r\n\t\t\tfor (statPlus in pokemon.boosts) {\r\n\t\t\t\tif (statPlus === 'accuracy' || statPlus === 'evasion') continue;\r\n\t\t\t\tif (pokemon.boosts[statPlus] < 6) {\r\n\t\t\t\t\tstats.push(statPlus);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tlet randomStat: BoostID | undefined = stats.length ? this.sample(stats) : undefined;\r\n\t\t\tif (randomStat) boost[randomStat] = 2;\r\n\r\n\t\t\tstats = [];\r\n\t\t\tlet statMinus: BoostID;\r\n\t\t\tfor (statMinus in pokemon.boosts) {\r\n\t\t\t\tif (statMinus === 'accuracy' || statMinus === 'evasion') continue;\r\n\t\t\t\tif (pokemon.boosts[statMinus] > -6 && statMinus !== randomStat) {\r\n\t\t\t\t\tstats.push(statMinus);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\trandomStat = stats.length ? this.sample(stats) : undefined;\r\n\t\t\tif (randomStat) boost[randomStat] = -1;\r\n\r\n\t\t\tthis.boost(boost, pokemon, pokemon);\r\n\t\t},\r\n\t\tname: \"Moody\",\r\n\t\trating: 5,\r\n\t\tnum: 141,\r\n\t},\r\n\tmotordrive: {\r\n\t\tonTryHit(target, source, move) {\r\n\t\t\tif (target !== source && move.type === 'Electric') {\r\n\t\t\t\tif (!this.boost({spe: 1})) {\r\n\t\t\t\t\tthis.add('-immune', target, '[from] ability: Motor Drive');\r\n\t\t\t\t}\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t},\r\n\t\tisBreakable: true,\r\n\t\tname: \"Motor Drive\",\r\n\t\trating: 3,\r\n\t\tnum: 78,\r\n\t},\r\n\tmoxie: {\r\n\t\tonSourceAfterFaint(length, target, source, effect) {\r\n\t\t\tif (effect && effect.effectType === 'Move') {\r\n\t\t\t\tthis.boost({atk: length}, source);\r\n\t\t\t}\r\n\t\t},\r\n\t\tname: \"Moxie\",\r\n\t\trating: 3,\r\n\t\tnum: 153,\r\n\t},\r\n\tmultiscale: {\r\n\t\tonSourceModifyDamage(damage, source, target, move) {\r\n\t\t\tif (target.hp >= target.maxhp) {\r\n\t\t\t\tthis.debug('Multiscale weaken');\r\n\t\t\t\treturn this.chainModify(0.5);\r\n\t\t\t}\r\n\t\t},\r\n\t\tisBreakable: true,\r\n\t\tname: \"Multiscale\",\r\n\t\trating: 3.5,\r\n\t\tnum: 136,\r\n\t},\r\n\tmultitype: {\r\n\t\t// Multitype's type-changing itself is implemented in statuses.js\r\n\t\tisPermanent: true,\r\n\t\tname: \"Multitype\",\r\n\t\trating: 4,\r\n\t\tnum: 121,\r\n\t},\r\n\tmummy: {\r\n\t\tname: \"Mummy\",\r\n\t\tonDamagingHit(damage, target, source, move) {\r\n\t\t\tconst sourceAbility = source.getAbility();\r\n\t\t\tif (sourceAbility.isPermanent || sourceAbility.id === 'mummy') {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tif (this.checkMoveMakesContact(move, source, target, !source.isAlly(target))) {\r\n\t\t\t\tconst oldAbility = source.setAbility('mummy', target);\r\n\t\t\t\tif (oldAbility) {\r\n\t\t\t\t\tthis.add('-activate', target, 'ability: Mummy', this.dex.abilities.get(oldAbility).name, '[of] ' + source);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\trating: 2,\r\n\t\tnum: 152,\r\n\t},\r\n\tmyceliummight: {\r\n\t\tonFractionalPriorityPriority: -1,\r\n\t\tonFractionalPriority(priority, pokemon, target, move) {\r\n\t\t\tif (move.category === 'Status') {\r\n\t\t\t\treturn -0.1;\r\n\t\t\t}\r\n\t\t},\r\n\t\tonModifyMove(move) {\r\n\t\t\tif (move.category === 'Status') {\r\n\t\t\t\tmove.ignoreAbility = true;\r\n\t\t\t}\r\n\t\t},\r\n\t\tname: \"Mycelium Might\",\r\n\t\trating: 2,\r\n\t\tnum: 298,\r\n\t},\r\n\tnaturalcure: {\r\n\t\tonCheckShow(pokemon) {\r\n\t\t\t// This is complicated\r\n\t\t\t// For the most part, in-game, it's obvious whether or not Natural Cure activated,\r\n\t\t\t// since you can see how many of your opponent's pokemon are statused.\r\n\t\t\t// The only ambiguous situation happens in Doubles/Triples, where multiple pokemon\r\n\t\t\t// that could have Natural Cure switch out, but only some of them get cured.\r\n\t\t\tif (pokemon.side.active.length === 1) return;\r\n\t\t\tif (pokemon.showCure === true || pokemon.showCure === false) return;\r\n\r\n\t\t\tconst cureList = [];\r\n\t\t\tlet noCureCount = 0;\r\n\t\t\tfor (const curPoke of pokemon.side.active) {\r\n\t\t\t\t// pokemon not statused\r\n\t\t\t\tif (!curPoke?.status) {\r\n\t\t\t\t\t// this.add('-message', \"\" + curPoke + \" skipped: not statused or doesn't exist\");\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tif (curPoke.showCure) {\r\n\t\t\t\t\t// this.add('-message', \"\" + curPoke + \" skipped: Natural Cure already known\");\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tconst species = curPoke.species;\r\n\t\t\t\t// pokemon can't get Natural Cure\r\n\t\t\t\tif (!Object.values(species.abilities).includes('Natural Cure')) {\r\n\t\t\t\t\t// this.add('-message', \"\" + curPoke + \" skipped: no Natural Cure\");\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\t// pokemon's ability is known to be Natural Cure\r\n\t\t\t\tif (!species.abilities['1'] && !species.abilities['H']) {\r\n\t\t\t\t\t// this.add('-message', \"\" + curPoke + \" skipped: only one ability\");\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\t// pokemon isn't switching this turn\r\n\t\t\t\tif (curPoke !== pokemon && !this.queue.willSwitch(curPoke)) {\r\n\t\t\t\t\t// this.add('-message', \"\" + curPoke + \" skipped: not switching\");\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\r\n\t\t\t\tif (curPoke.hasAbility('naturalcure')) {\r\n\t\t\t\t\t// this.add('-message', \"\" + curPoke + \" confirmed: could be Natural Cure (and is)\");\r\n\t\t\t\t\tcureList.push(curPoke);\r\n\t\t\t\t} else {\r\n\t\t\t\t\t// this.add('-message', \"\" + curPoke + \" confirmed: could be Natural Cure (but isn't)\");\r\n\t\t\t\t\tnoCureCount++;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\r\n\t\t\tif (!cureList.length || !noCureCount) {\r\n\t\t\t\t// It's possible to know what pokemon were cured\r\n\t\t\t\tfor (const pkmn of cureList) {\r\n\t\t\t\t\tpkmn.showCure = true;\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\t// It's not possible to know what pokemon were cured\r\n\r\n\t\t\t\t// Unlike a -hint, this is real information that battlers need, so we use a -message\r\n\t\t\t\tthis.add('-message', \"(\" + cureList.length + \" of \" + pokemon.side.name + \"'s pokemon \" + (cureList.length === 1 ? \"was\" : \"were\") + \" cured by Natural Cure.)\");\r\n\r\n\t\t\t\tfor (const pkmn of cureList) {\r\n\t\t\t\t\tpkmn.showCure = false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\tonSwitchOut(pokemon) {\r\n\t\t\tif (!pokemon.status) return;\r\n\r\n\t\t\t// if pokemon.showCure is undefined, it was skipped because its ability\r\n\t\t\t// is known\r\n\t\t\tif (pokemon.showCure === undefined) pokemon.showCure = true;\r\n\r\n\t\t\tif (pokemon.showCure) this.add('-curestatus', pokemon, pokemon.status, '[from] ability: Natural Cure');\r\n\t\t\tpokemon.clearStatus();\r\n\r\n\t\t\t// only reset .showCure if it's false\r\n\t\t\t// (once you know a Pokemon has Natural Cure, its cures are always known)\r\n\t\t\tif (!pokemon.showCure) pokemon.showCure = undefined;\r\n\t\t},\r\n\t\tname: \"Natural Cure\",\r\n\t\trating: 2.5,\r\n\t\tnum: 30,\r\n\t},\r\n\tneuroforce: {\r\n\t\tonModifyDamage(damage, source, target, move) {\r\n\t\t\tif (move && target.getMoveHitData(move).typeMod > 0) {\r\n\t\t\t\treturn this.chainModify([5120, 4096]);\r\n\t\t\t}\r\n\t\t},\r\n\t\tname: \"Neuroforce\",\r\n\t\trating: 2.5,\r\n\t\tnum: 233,\r\n\t},\r\n\tneutralizinggas: {\r\n\t\t// Ability suppression implemented in sim/pokemon.ts:Pokemon#ignoringAbility\r\n\t\tonPreStart(pokemon) {\r\n\t\t\tif (pokemon.transformed) return;\r\n\t\t\tthis.add('-ability', pokemon, 'Neutralizing Gas');\r\n\t\t\tpokemon.abilityState.ending = false;\r\n\t\t\tconst strongWeathers = ['desolateland', 'primordialsea', 'deltastream'];\r\n\t\t\tfor (const target of this.getAllActive()) {\r\n\t\t\t\tif (target.hasItem('Ability Shield')) {\r\n\t\t\t\t\tthis.add('-block', target, 'item: Ability Shield');\r\n\t\t\t\t\tcontinue;\r\n\t\t\t\t}\r\n\t\t\t\tif (target.illusion) {\r\n\t\t\t\t\tthis.singleEvent('End', this.dex.abilities.get('Illusion'), target.abilityState, target, pokemon, 'neutralizinggas');\r\n\t\t\t\t}\r\n\t\t\t\tif (target.volatiles['slowstart']) {\r\n\t\t\t\t\tdelete target.volatiles['slowstart'];\r\n\t\t\t\t\tthis.add('-end', target, 'Slow Start', '[silent]');\r\n\t\t\t\t}\r\n\t\t\t\tif (strongWeathers.includes(target.getAbility().id)) {\r\n\t\t\t\t\tthis.singleEvent('End', this.dex.abilities.get(target.getAbility().id), target.abilityState, target, pokemon, 'neutralizinggas');\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\tonEnd(source) {\r\n\t\t\tif (source.transformed) return;\r\n\t\t\tfor (const pokemon of this.getAllActive()) {\r\n\t\t\t\tif (pokemon !== source && pokemon.hasAbility('Neutralizing Gas')) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tthis.add('-end', source, 'ability: Neutralizing Gas');\r\n\r\n\t\t\t// FIXME this happens before the pokemon switches out, should be the opposite order.\r\n\t\t\t// Not an easy fix since we cant use a supported event. Would need some kind of special event that\r\n\t\t\t// gathers events to run after the switch and then runs them when the ability is no longer accessible.\r\n\t\t\t// (If you're tackling this, do note extreme weathers have the same issue)\r\n\r\n\t\t\t// Mark this pokemon's ability as ending so Pokemon#ignoringAbility skips it\r\n\t\t\tif (source.abilityState.ending) return;\r\n\t\t\tsource.abilityState.ending = true;\r\n\t\t\tconst sortedActive = this.getAllActive();\r\n\t\t\tthis.speedSort(sortedActive);\r\n\t\t\tfor (const pokemon of sortedActive) {\r\n\t\t\t\tif (pokemon !== source) {\r\n\t\t\t\t\tif (pokemon.getAbility().isPermanent) continue; // does not interact with e.g Ice Face, Zen Mode\r\n\r\n\t\t\t\t\t// Will be suppressed by Pokemon#ignoringAbility if needed\r\n\t\t\t\t\tthis.singleEvent('Start', pokemon.getAbility(), pokemon.abilityState, pokemon);\r\n\t\t\t\t\tif (pokemon.ability === \"gluttony\") {\r\n\t\t\t\t\t\tpokemon.abilityState.gluttony = false;\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\tname: \"Neutralizing Gas\",\r\n\t\trating: 4,\r\n\t\tnum: 256,\r\n\t},\r\n\tnoguard: {\r\n\t\tonAnyInvulnerabilityPriority: 1,\r\n\t\tonAnyInvulnerability(target, source, move) {\r\n\t\t\tif (move && (source === this.effectState.target || target === this.effectState.target)) return 0;\r\n\t\t},\r\n\t\tonAnyAccuracy(accuracy, target, source, move) {\r\n\t\t\tif (move && (source === this.effectState.target || target === this.effectState.target)) {\r\n\t\t\t\treturn true;\r\n\t\t\t}\r\n\t\t\treturn accuracy;\r\n\t\t},\r\n\t\tname: \"No Guard\",\r\n\t\trating: 4,\r\n\t\tnum: 99,\r\n\t},\r\n\tnormalize: {\r\n\t\tonModifyTypePriority: 1,\r\n\t\tonModifyType(move, pokemon) {\r\n\t\t\tconst noModifyType = [\r\n\t\t\t\t'hiddenpower', 'judgment', 'multiattack', 'naturalgift', 'revelationdance', 'struggle', 'technoblast', 'terrainpulse', 'weatherball',\r\n\t\t\t];\r\n\t\t\tif (!(move.isZ && move.category !== 'Status') && !noModifyType.includes(move.id) &&\r\n\t\t\t\t// TODO: Figure out actual interaction\r\n\t\t\t\t!(move.name === 'Tera Blast' && pokemon.terastallized)) {\r\n\t\t\t\tmove.type = 'Normal';\r\n\t\t\t\tmove.typeChangerBoosted = this.effect;\r\n\t\t\t}\r\n\t\t},\r\n\t\tonBasePowerPriority: 23,\r\n\t\tonBasePower(basePower, pokemon, target, move) {\r\n\t\t\tif (move.typeChangerBoosted === this.effect) return this.chainModify([4915, 4096]);\r\n\t\t},\r\n\t\tname: \"Normalize\",\r\n\t\trating: 0,\r\n\t\tnum: 96,\r\n\t},\r\n\toblivious: {\r\n\t\tonUpdate(pokemon) {\r\n\t\t\tif (pokemon.volatiles['attract']) {\r\n\t\t\t\tthis.add('-activate', pokemon, 'ability: Oblivious');\r\n\t\t\t\tpokemon.removeVolatile('attract');\r\n\t\t\t\tthis.add('-end', pokemon, 'move: Attract', '[from] ability: Oblivious');\r\n\t\t\t}\r\n\t\t\tif (pokemon.volatiles['taunt']) {\r\n\t\t\t\tthis.add('-activate', pokemon, 'ability: Oblivious');\r\n\t\t\t\tpokemon.removeVolatile('taunt');\r\n\t\t\t\t// Taunt's volatile already sends the -end message when removed\r\n\t\t\t}\r\n\t\t},\r\n\t\tonImmunity(type, pokemon) {\r\n\t\t\tif (type === 'attract') return false;\r\n\t\t},\r\n\t\tonTryHit(pokemon, target, move) {\r\n\t\t\tif (move.id === 'attract' || move.id === 'captivate' || move.id === 'taunt') {\r\n\t\t\t\tthis.add('-immune', pokemon, '[from] ability: Oblivious');\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t},\r\n\t\tonTryBoost(boost, target, source, effect) {\r\n\t\t\tif (effect.name === 'Intimidate' && boost.atk) {\r\n\t\t\t\tdelete boost.atk;\r\n\t\t\t\tthis.add('-fail', target, 'unboost', 'Attack', '[from] ability: Oblivious', '[of] ' + target);\r\n\t\t\t}\r\n\t\t},\r\n\t\tisBreakable: true,\r\n\t\tname: \"Oblivious\",\r\n\t\trating: 1.5,\r\n\t\tnum: 12,\r\n\t},\r\n\topportunist: {\r\n\t\tonFoeAfterBoost(boost, target, source, effect) {\r\n\t\t\tif (effect?.name === 'Opportunist' || effect?.name === 'Mirror Herb') return;\r\n\t\t\tconst pokemon = this.effectState.target;\r\n\t\t\tconst positiveBoosts: Partial = {};\r\n\t\t\tlet i: BoostID;\r\n\t\t\tfor (i in boost) {\r\n\t\t\t\tif (boost[i]! > 0) {\r\n\t\t\t\t\tpositiveBoosts[i] = boost[i];\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (Object.keys(positiveBoosts).length < 1) return;\r\n\t\t\tthis.boost(positiveBoosts, pokemon);\r\n\t\t},\r\n\t\tname: \"Opportunist\",\r\n\t\trating: 3,\r\n\t\tnum: 290,\r\n\t},\r\n\torichalcumpulse: {\r\n\t\tonStart(pokemon) {\r\n\t\t\tif (this.field.setWeather('sunnyday')) {\r\n\t\t\t\tthis.add('-activate', pokemon, 'Orichalcum Pulse', '[source]');\r\n\t\t\t} else if (this.field.isWeather('sunnyday')) {\r\n\t\t\t\tthis.add('-activate', pokemon, 'ability: Orichalcum Pulse');\r\n\t\t\t}\r\n\t\t},\r\n\t\tonModifyAtkPriority: 5,\r\n\t\tonModifyAtk(atk, pokemon) {\r\n\t\t\tif (['sunnyday', 'desolateland'].includes(pokemon.effectiveWeather())) {\r\n\t\t\t\tthis.debug('Orichalcum boost');\r\n\t\t\t\treturn this.chainModify([5461, 4096]);\r\n\t\t\t}\r\n\t\t},\r\n\t\tname: \"Orichalcum Pulse\",\r\n\t\trating: 4.5,\r\n\t\tnum: 288,\r\n\t},\r\n\tovercoat: {\r\n\t\tonImmunity(type, pokemon) {\r\n\t\t\tif (type === 'sandstorm' || type === 'hail' || type === 'powder') return false;\r\n\t\t},\r\n\t\tonTryHitPriority: 1,\r\n\t\tonTryHit(target, source, move) {\r\n\t\t\tif (move.flags['powder'] && target !== source && this.dex.getImmunity('powder', target)) {\r\n\t\t\t\tthis.add('-immune', target, '[from] ability: Overcoat');\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t},\r\n\t\tisBreakable: true,\r\n\t\tname: \"Overcoat\",\r\n\t\trating: 2,\r\n\t\tnum: 142,\r\n\t},\r\n\tovergrow: {\r\n\t\tonModifyAtkPriority: 5,\r\n\t\tonModifyAtk(atk, attacker, defender, move) {\r\n\t\t\tif (move.type === 'Grass' && attacker.hp <= attacker.maxhp / 3) {\r\n\t\t\t\tthis.debug('Overgrow boost');\r\n\t\t\t\treturn this.chainModify(1.5);\r\n\t\t\t}\r\n\t\t},\r\n\t\tonModifySpAPriority: 5,\r\n\t\tonModifySpA(atk, attacker, defender, move) {\r\n\t\t\tif (move.type === 'Grass' && attacker.hp <= attacker.maxhp / 3) {\r\n\t\t\t\tthis.debug('Overgrow boost');\r\n\t\t\t\treturn this.chainModify(1.5);\r\n\t\t\t}\r\n\t\t},\r\n\t\tname: \"Overgrow\",\r\n\t\trating: 2,\r\n\t\tnum: 65,\r\n\t},\r\n\towntempo: {\r\n\t\tonUpdate(pokemon) {\r\n\t\t\tif (pokemon.volatiles['confusion']) {\r\n\t\t\t\tthis.add('-activate', pokemon, 'ability: Own Tempo');\r\n\t\t\t\tpokemon.removeVolatile('confusion');\r\n\t\t\t}\r\n\t\t},\r\n\t\tonTryAddVolatile(status, pokemon) {\r\n\t\t\tif (status.id === 'confusion') return null;\r\n\t\t},\r\n\t\tonHit(target, source, move) {\r\n\t\t\tif (move?.volatileStatus === 'confusion') {\r\n\t\t\t\tthis.add('-immune', target, 'confusion', '[from] ability: Own Tempo');\r\n\t\t\t}\r\n\t\t},\r\n\t\tonTryBoost(boost, target, source, effect) {\r\n\t\t\tif (effect.name === 'Intimidate' && boost.atk) {\r\n\t\t\t\tdelete boost.atk;\r\n\t\t\t\tthis.add('-fail', target, 'unboost', 'Attack', '[from] ability: Own Tempo', '[of] ' + target);\r\n\t\t\t}\r\n\t\t},\r\n\t\tisBreakable: true,\r\n\t\tname: \"Own Tempo\",\r\n\t\trating: 1.5,\r\n\t\tnum: 20,\r\n\t},\r\n\tparentalbond: {\r\n\t\tonPrepareHit(source, target, move) {\r\n\t\t\tif (move.category === 'Status' || move.multihit || move.flags['noparentalbond'] || move.flags['charge'] ||\r\n\t\t\tmove.flags['futuremove'] || move.spreadHit || move.isZ || move.isMax) return;\r\n\t\t\tmove.multihit = 2;\r\n\t\t\tmove.multihitType = 'parentalbond';\r\n\t\t},\r\n\t\t// Damage modifier implemented in BattleActions#modifyDamage()\r\n\t\tonSourceModifySecondaries(secondaries, target, source, move) {\r\n\t\t\tif (move.multihitType === 'parentalbond' && move.id === 'secretpower' && move.hit < 2) {\r\n\t\t\t\t// hack to prevent accidentally suppressing King's Rock/Razor Fang\r\n\t\t\t\treturn secondaries.filter(effect => effect.volatileStatus === 'flinch');\r\n\t\t\t}\r\n\t\t},\r\n\t\tname: \"Parental Bond\",\r\n\t\trating: 4.5,\r\n\t\tnum: 185,\r\n\t},\r\n\tpastelveil: {\r\n\t\tonStart(pokemon) {\r\n\t\t\tfor (const ally of pokemon.alliesAndSelf()) {\r\n\t\t\t\tif (['psn', 'tox'].includes(ally.status)) {\r\n\t\t\t\t\tthis.add('-activate', pokemon, 'ability: Pastel Veil');\r\n\t\t\t\t\tally.cureStatus();\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\tonUpdate(pokemon) {\r\n\t\t\tif (['psn', 'tox'].includes(pokemon.status)) {\r\n\t\t\t\tthis.add('-activate', pokemon, 'ability: Pastel Veil');\r\n\t\t\t\tpokemon.cureStatus();\r\n\t\t\t}\r\n\t\t},\r\n\t\tonAllySwitchIn(pokemon) {\r\n\t\t\tif (['psn', 'tox'].includes(pokemon.status)) {\r\n\t\t\t\tthis.add('-activate', this.effectState.target, 'ability: Pastel Veil');\r\n\t\t\t\tpokemon.cureStatus();\r\n\t\t\t}\r\n\t\t},\r\n\t\tonSetStatus(status, target, source, effect) {\r\n\t\t\tif (!['psn', 'tox'].includes(status.id)) return;\r\n\t\t\tif ((effect as Move)?.status) {\r\n\t\t\t\tthis.add('-immune', target, '[from] ability: Pastel Veil');\r\n\t\t\t}\r\n\t\t\treturn false;\r\n\t\t},\r\n\t\tonAllySetStatus(status, target, source, effect) {\r\n\t\t\tif (!['psn', 'tox'].includes(status.id)) return;\r\n\t\t\tif ((effect as Move)?.status) {\r\n\t\t\t\tconst effectHolder = this.effectState.target;\r\n\t\t\t\tthis.add('-block', target, 'ability: Pastel Veil', '[of] ' + effectHolder);\r\n\t\t\t}\r\n\t\t\treturn false;\r\n\t\t},\r\n\t\tisBreakable: true,\r\n\t\tname: \"Pastel Veil\",\r\n\t\trating: 2,\r\n\t\tnum: 257,\r\n\t},\r\n\tperishbody: {\r\n\t\tonDamagingHit(damage, target, source, move) {\r\n\t\t\tif (!this.checkMoveMakesContact(move, source, target)) return;\r\n\r\n\t\t\tlet announced = false;\r\n\t\t\tfor (const pokemon of [target, source]) {\r\n\t\t\t\tif (pokemon.volatiles['perishsong']) continue;\r\n\t\t\t\tif (!announced) {\r\n\t\t\t\t\tthis.add('-ability', target, 'Perish Body');\r\n\t\t\t\t\tannounced = true;\r\n\t\t\t\t}\r\n\t\t\t\tpokemon.addVolatile('perishsong');\r\n\t\t\t}\r\n\t\t},\r\n\t\tname: \"Perish Body\",\r\n\t\trating: 1,\r\n\t\tnum: 253,\r\n\t},\r\n\tpickpocket: {\r\n\t\tonAfterMoveSecondary(target, source, move) {\r\n\t\t\tif (source && source !== target && move?.flags['contact']) {\r\n\t\t\t\tif (target.item || target.switchFlag || target.forceSwitchFlag || source.switchFlag === true) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\tconst yourItem = source.takeItem(target);\r\n\t\t\t\tif (!yourItem) {\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\tif (!target.setItem(yourItem)) {\r\n\t\t\t\t\tsource.item = yourItem.id;\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t\tthis.add('-enditem', source, yourItem, '[silent]', '[from] ability: Pickpocket', '[of] ' + source);\r\n\t\t\t\tthis.add('-item', target, yourItem, '[from] ability: Pickpocket', '[of] ' + source);\r\n\t\t\t}\r\n\t\t},\r\n\t\tname: \"Pickpocket\",\r\n\t\trating: 1,\r\n\t\tnum: 124,\r\n\t},\r\n\tpickup: {\r\n\t\tonResidualOrder: 28,\r\n\t\tonResidualSubOrder: 2,\r\n\t\tonResidual(pokemon) {\r\n\t\t\tif (pokemon.item) return;\r\n\t\t\tconst pickupTargets = this.getAllActive().filter(target => (\r\n\t\t\t\ttarget.lastItem && target.usedItemThisTurn && pokemon.isAdjacent(target)\r\n\t\t\t));\r\n\t\t\tif (!pickupTargets.length) return;\r\n\t\t\tconst randomTarget = this.sample(pickupTargets);\r\n\t\t\tconst item = randomTarget.lastItem;\r\n\t\t\trandomTarget.lastItem = '';\r\n\t\t\tthis.add('-item', pokemon, this.dex.items.get(item), '[from] ability: Pickup');\r\n\t\t\tpokemon.setItem(item);\r\n\t\t},\r\n\t\tname: \"Pickup\",\r\n\t\trating: 0.5,\r\n\t\tnum: 53,\r\n\t},\r\n\tpixilate: {\r\n\t\tonModifyTypePriority: -1,\r\n\t\tonModifyType(move, pokemon) {\r\n\t\t\tconst noModifyType = [\r\n\t\t\t\t'judgment', 'multiattack', 'naturalgift', 'revelationdance', 'technoblast', 'terrainpulse', 'weatherball',\r\n\t\t\t];\r\n\t\t\tif (move.type === 'Normal' && !noModifyType.includes(move.id) &&\r\n\t\t\t\t!(move.isZ && move.category !== 'Status') && !(move.name === 'Tera Blast' && pokemon.terastallized)) {\r\n\t\t\t\tmove.type = 'Fairy';\r\n\t\t\t\tmove.typeChangerBoosted = this.effect;\r\n\t\t\t}\r\n\t\t},\r\n\t\tonBasePowerPriority: 23,\r\n\t\tonBasePower(basePower, pokemon, target, move) {\r\n\t\t\tif (move.typeChangerBoosted === this.effect) return this.chainModify([4915, 4096]);\r\n\t\t},\r\n\t\tname: \"Pixilate\",\r\n\t\trating: 4,\r\n\t\tnum: 182,\r\n\t},\r\n\tplus: {\r\n\t\tonModifySpAPriority: 5,\r\n\t\tonModifySpA(spa, pokemon) {\r\n\t\t\tfor (const allyActive of pokemon.allies()) {\r\n\t\t\t\tif (allyActive.hasAbility(['minus', 'plus'])) {\r\n\t\t\t\t\treturn this.chainModify(1.5);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\tname: \"Plus\",\r\n\t\trating: 0,\r\n\t\tnum: 57,\r\n\t},\r\n\tpoisonheal: {\r\n\t\tonDamagePriority: 1,\r\n\t\tonDamage(damage, target, source, effect) {\r\n\t\t\tif (effect.id === 'psn' || effect.id === 'tox') {\r\n\t\t\t\tthis.heal(target.baseMaxhp / 8);\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\t\tname: \"Poison Heal\",\r\n\t\trating: 4,\r\n\t\tnum: 90,\r\n\t},\r\n\tpoisonpoint: {\r\n\t\tonDamagingHit(damage, target, source, move) {\r\n\t\t\tif (this.checkMoveMakesContact(move, source, target)) {\r\n\t\t\t\tif (this.randomChance(3, 10)) {\r\n\t\t\t\t\tsource.trySetStatus('psn', target);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\tname: \"Poison Point\",\r\n\t\trating: 1.5,\r\n\t\tnum: 38,\r\n\t},\r\n\tpoisontouch: {\r\n\t\t// upokecenter says this is implemented as an added secondary effect\r\n\t\tonModifyMove(move) {\r\n\t\t\tif (!move?.flags['contact'] || move.target === 'self') return;\r\n\t\t\tif (!move.secondaries) {\r\n\t\t\t\tmove.secondaries = [];\r\n\t\t\t}\r\n\t\t\tmove.secondaries.push({\r\n\t\t\t\tchance: 30,\r\n\t\t\t\tstatus: 'psn',\r\n\t\t\t\tability: this.dex.abilities.get('poisontouch'),\r\n\t\t\t});\r\n\t\t},\r\n\t\tname: \"Poison Touch\",\r\n\t\trating: 2,\r\n\t\tnum: 143,\r\n\t},\r\n\tpowerconstruct: {\r\n\t\tonResidualOrder: 29,\r\n\t\tonResidual(pokemon) {\r\n\t\t\tif (pokemon.baseSpecies.baseSpecies !== 'Zygarde' || pokemon.transformed || !pokemon.hp) return;\r\n\t\t\tif (pokemon.species.id === 'zygardecomplete' || pokemon.hp > pokemon.maxhp / 2) return;\r\n\t\t\tthis.add('-activate', pokemon, 'ability: Power Construct');\r\n\t\t\tpokemon.formeChange('Zygarde-Complete', this.effect, true);\r\n\t\t\tpokemon.baseMaxhp = Math.floor(Math.floor(\r\n\t\t\t\t2 * pokemon.species.baseStats['hp'] + pokemon.set.ivs['hp'] + Math.floor(pokemon.set.evs['hp'] / 4) + 100\r\n\t\t\t) * pokemon.level / 100 + 10);\r\n\t\t\tconst newMaxHP = pokemon.volatiles['dynamax'] ? (2 * pokemon.baseMaxhp) : pokemon.baseMaxhp;\r\n\t\t\tpokemon.hp = newMaxHP - (pokemon.maxhp - pokemon.hp);\r\n\t\t\tpokemon.maxhp = newMaxHP;\r\n\t\t\tthis.add('-heal', pokemon, pokemon.getHealth, '[silent]');\r\n\t\t},\r\n\t\tisPermanent: true,\r\n\t\tname: \"Power Construct\",\r\n\t\trating: 5,\r\n\t\tnum: 211,\r\n\t},\r\n\tpowerofalchemy: {\r\n\t\tonAllyFaint(target) {\r\n\t\t\tif (!this.effectState.target.hp) return;\r\n\t\t\tconst ability = target.getAbility();\r\n\t\t\tconst additionalBannedAbilities = [\r\n\t\t\t\t'noability', 'flowergift', 'forecast', 'hungerswitch', 'illusion', 'imposter', 'neutralizinggas', 'powerofalchemy', 'receiver', 'trace', 'wonderguard',\r\n\t\t\t];\r\n\t\t\tif (target.getAbility().isPermanent || additionalBannedAbilities.includes(target.ability)) return;\r\n\t\t\tif (this.effectState.target.setAbility(ability)) {\r\n\t\t\t\tthis.add('-ability', this.effectState.target, ability, '[from] ability: Power of Alchemy', '[of] ' + target);\r\n\t\t\t}\r\n\t\t},\r\n\t\tname: \"Power of Alchemy\",\r\n\t\trating: 0,\r\n\t\tnum: 223,\r\n\t},\r\n\tpowerspot: {\r\n\t\tonAllyBasePowerPriority: 22,\r\n\t\tonAllyBasePower(basePower, attacker, defender, move) {\r\n\t\t\tif (attacker !== this.effectState.target) {\r\n\t\t\t\tthis.debug('Power Spot boost');\r\n\t\t\t\treturn this.chainModify([5325, 4096]);\r\n\t\t\t}\r\n\t\t},\r\n\t\tname: \"Power Spot\",\r\n\t\trating: 0,\r\n\t\tnum: 249,\r\n\t},\r\n\tprankster: {\r\n\t\tonModifyPriority(priority, pokemon, target, move) {\r\n\t\t\tif (move?.category === 'Status') {\r\n\t\t\t\tmove.pranksterBoosted = true;\r\n\t\t\t\treturn priority + 1;\r\n\t\t\t}\r\n\t\t},\r\n\t\tname: \"Prankster\",\r\n\t\trating: 4,\r\n\t\tnum: 158,\r\n\t},\r\n\tpressure: {\r\n\t\tonStart(pokemon) {\r\n\t\t\tthis.add('-ability', pokemon, 'Pressure');\r\n\t\t},\r\n\t\tonDeductPP(target, source) {\r\n\t\t\tif (target.isAlly(source)) return;\r\n\t\t\treturn 1;\r\n\t\t},\r\n\t\tname: \"Pressure\",\r\n\t\trating: 2.5,\r\n\t\tnum: 46,\r\n\t},\r\n\tprimordialsea: {\r\n\t\tonStart(source) {\r\n\t\t\tthis.field.setWeather('primordialsea');\r\n\t\t},\r\n\t\tonAnySetWeather(target, source, weather) {\r\n\t\t\tconst strongWeathers = ['desolateland', 'primordialsea', 'deltastream'];\r\n\t\t\tif (this.field.getWeather().id === 'primordialsea' && !strongWeathers.includes(weather.id)) return false;\r\n\t\t},\r\n\t\tonEnd(pokemon) {\r\n\t\t\tif (this.field.weatherState.source !== pokemon) return;\r\n\t\t\tfor (const target of this.getAllActive()) {\r\n\t\t\t\tif (target === pokemon) continue;\r\n\t\t\t\tif (target.hasAbility('primordialsea')) {\r\n\t\t\t\t\tthis.field.weatherState.source = target;\r\n\t\t\t\t\treturn;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tthis.field.clearWeather();\r\n\t\t},\r\n\t\tname: \"Primordial Sea\",\r\n\t\trating: 4.5,\r\n\t\tnum: 189,\r\n\t},\r\n\tprismarmor: {\r\n\t\tonSourceModifyDamage(damage, source, target, move) {\r\n\t\t\tif (target.getMoveHitData(move).typeMod > 0) {\r\n\t\t\t\tthis.debug('Prism Armor neutralize');\r\n\t\t\t\treturn this.chainModify(0.75);\r\n\t\t\t}\r\n\t\t},\r\n\t\tname: \"Prism Armor\",\r\n\t\trating: 3,\r\n\t\tnum: 232,\r\n\t},\r\n\tpropellertail: {\r\n\t\tonModifyMovePriority: 1,\r\n\t\tonModifyMove(move) {\r\n\t\t\t// most of the implementation is in Battle#getTarget\r\n\t\t\tmove.tracksTarget = move.target !== 'scripted';\r\n\t\t},\r\n\t\tname: \"Propeller Tail\",\r\n\t\trating: 0,\r\n\t\tnum: 239,\r\n\t},\r\n\tprotean: {\r\n\t\tonPrepareHit(source, target, move) {\r\n\t\t\tif (this.effectState.protean) return;\r\n\t\t\tif (move.hasBounced || move.flags['futuremove'] || move.sourceEffect === 'snatch') return;\r\n\t\t\tconst type = move.type;\r\n\t\t\tif (type && type !== '???' && source.getTypes().join() !== type) {\r\n\t\t\t\tif (!source.setType(type)) return;\r\n\t\t\t\tthis.effectState.protean = true;\r\n\t\t\t\tthis.add('-start', source, 'typechange', type, '[from] ability: Protean');\r\n\t\t\t}\r\n\t\t},\r\n\t\tonSwitchIn(pokemon) {\r\n\t\t\tdelete this.effectState.protean;\r\n\t\t},\r\n\t\tname: \"Protean\",\r\n\t\trating: 4,\r\n\t\tnum: 168,\r\n\t},\r\n\tprotosynthesis: {\r\n\t\tonStart(pokemon) {\r\n\t\t\tthis.singleEvent('WeatherChange', this.effect, this.effectState, pokemon);\r\n\t\t},\r\n\t\tonWeatherChange(pokemon) {\r\n\t\t\tif (pokemon.transformed) return;\r\n\t\t\t// Protosynthesis is not affected by Utility Umbrella\r\n\t\t\tif (this.field.isWeather('sunnyday')) {\r\n\t\t\t\tpokemon.addVolatile('protosynthesis');\r\n\t\t\t} else if (!pokemon.volatiles['protosynthesis']?.fromBooster) {\r\n\t\t\t\tpokemon.removeVolatile('protosynthesis');\r\n\t\t\t}\r\n\t\t},\r\n\t\tonEnd(pokemon) {\r\n\t\t\tdelete pokemon.volatiles['protosynthesis'];\r\n\t\t\tthis.add('-end', pokemon, 'Protosynthesis', '[silent]');\r\n\t\t},\r\n\t\tcondition: {\r\n\t\t\tnoCopy: true,\r\n\t\t\tonStart(pokemon, source, effect) {\r\n\t\t\t\tif (effect?.id === 'boosterenergy') {\r\n\t\t\t\t\tthis.effectState.fromBooster = true;\r\n\t\t\t\t\tthis.add('-activate', pokemon, 'ability: Protosynthesis', '[fromitem]');\r\n\t\t\t\t} else {\r\n\t\t\t\t\tthis.add('-activate', pokemon, 'ability: Protosynthesis');\r\n\t\t\t\t}\r\n\t\t\t\tthis.effectState.bestStat = pokemon.getBestStat(false, true);\r\n\t\t\t\tthis.add('-start', pokemon, 'protosynthesis' + this.effectState.bestStat);\r\n\t\t\t},\r\n\t\t\tonModifyAtkPriority: 5,\r\n\t\t\tonModifyAtk(atk, source, target, move) {\r\n\t\t\t\tif (this.effectState.bestStat !== 'atk') return;\r\n\t\t\t\tthis.debug('Protosynthesis atk boost');\r\n\t\t\t\treturn this.chainModify([5325, 4096]);\r\n\t\t\t},\r\n\t\t\tonModifyDefPriority: 6,\r\n\t\t\tonModifyDef(def, target, source, move) {\r\n\t\t\t\tif (this.effectState.bestStat !== 'def') return;\r\n\t\t\t\tthis.debug('Protosynthesis def boost');\r\n\t\t\t\treturn this.chainModify([5325, 4096]);\r\n\t\t\t},\r\n\t\t\tonModifySpAPriority: 5,\r\n\t\t\tonModifySpA(relayVar, source, target, move) {\r\n\t\t\t\tif (this.effectState.bestStat !== 'spa') return;\r\n\t\t\t\tthis.debug('Protosynthesis spa boost');\r\n\t\t\t\treturn this.chainModify([5325, 4096]);\r\n\t\t\t},\r\n\t\t\tonModifySpDPriority: 6,\r\n\t\t\tonModifySpD(relayVar, target, source, move) {\r\n\t\t\t\tif (this.effectState.bestStat !== 'spd') return;\r\n\t\t\t\tthis.debug('Protosynthesis spd boost');\r\n\t\t\t\treturn this.chainModify([5325, 4096]);\r\n\t\t\t},\r\n\t\t\tonModifySpe(spe, pokemon) {\r\n\t\t\t\tif (this.effectState.bestStat !== 'spe') return;\r\n\t\t\t\tthis.debug('Protosynthesis spe boost');\r\n\t\t\t\treturn this.chainModify(1.5);\r\n\t\t\t},\r\n\t\t\tonEnd(pokemon) {\r\n\t\t\t\tthis.add('-end', pokemon, 'Protosynthesis');\r\n\t\t\t},\r\n\t\t},\r\n\t\tisPermanent: true,\r\n\t\tname: \"Protosynthesis\",\r\n\t\trating: 3,\r\n\t\tnum: 281,\r\n\t},\r\n\tpsychicsurge: {\r\n\t\tonStart(source) {\r\n\t\t\tthis.field.setTerrain('psychicterrain');\r\n\t\t},\r\n\t\tname: \"Psychic Surge\",\r\n\t\trating: 4,\r\n\t\tnum: 227,\r\n\t},\r\n\tpunkrock: {\r\n\t\tonBasePowerPriority: 7,\r\n\t\tonBasePower(basePower, attacker, defender, move) {\r\n\t\t\tif (move.flags['sound']) {\r\n\t\t\t\tthis.debug('Punk Rock boost');\r\n\t\t\t\treturn this.chainModify([5325, 4096]);\r\n\t\t\t}\r\n\t\t},\r\n\t\tonSourceModifyDamage(damage, source, target, move) {\r\n\t\t\tif (move.flags['sound']) {\r\n\t\t\t\tthis.debug('Punk Rock weaken');\r\n\t\t\t\treturn this.chainModify(0.5);\r\n\t\t\t}\r\n\t\t},\r\n\t\tisBreakable: true,\r\n\t\tname: \"Punk Rock\",\r\n\t\trating: 3.5,\r\n\t\tnum: 244,\r\n\t},\r\n\tpurepower: {\r\n\t\tonModifyAtkPriority: 5,\r\n\t\tonModifyAtk(atk) {\r\n\t\t\treturn this.chainModify(2);\r\n\t\t},\r\n\t\tname: \"Pure Power\",\r\n\t\trating: 5,\r\n\t\tnum: 74,\r\n\t},\r\n\tpurifyingsalt: {\r\n\t\tonSetStatus(status, target, source, effect) {\r\n\t\t\tif ((effect as Move)?.status) {\r\n\t\t\t\tthis.add('-immune', target, '[from] ability: Purifying Salt');\r\n\t\t\t}\r\n\t\t\treturn false;\r\n\t\t},\r\n\t\tonTryAddVolatile(status, target) {\r\n\t\t\tif (status.id === 'yawn') {\r\n\t\t\t\tthis.add('-immune', target, '[from] ability: Purifying Salt');\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t},\r\n\t\tonSourceModifyAtkPriority: 6,\r\n\t\tonSourceModifyAtk(atk, attacker, defender, move) {\r\n\t\t\tif (move.type === 'Ghost') {\r\n\t\t\t\tthis.debug('Purifying Salt weaken');\r\n\t\t\t\treturn this.chainModify(0.5);\r\n\t\t\t}\r\n\t\t},\r\n\t\tonSourceModifySpAPriority: 5,\r\n\t\tonSourceModifySpA(spa, attacker, defender, move) {\r\n\t\t\tif (move.type === 'Ghost') {\r\n\t\t\t\tthis.debug('Purifying Salt weaken');\r\n\t\t\t\treturn this.chainModify(0.5);\r\n\t\t\t}\r\n\t\t},\r\n\t\tisBreakable: true,\r\n\t\tname: \"Purifying Salt\",\r\n\t\trating: 4,\r\n\t\tnum: 272,\r\n\t},\r\n\tquarkdrive: {\r\n\t\tonStart(pokemon) {\r\n\t\t\tthis.singleEvent('TerrainChange', this.effect, this.effectState, pokemon);\r\n\t\t},\r\n\t\tonTerrainChange(pokemon) {\r\n\t\t\tif (pokemon.transformed) return;\r\n\t\t\tif (this.field.isTerrain('electricterrain')) {\r\n\t\t\t\tpokemon.addVolatile('quarkdrive');\r\n\t\t\t} else if (!pokemon.volatiles['quarkdrive']?.fromBooster) {\r\n\t\t\t\tpokemon.removeVolatile('quarkdrive');\r\n\t\t\t}\r\n\t\t},\r\n\t\tonEnd(pokemon) {\r\n\t\t\tdelete pokemon.volatiles['quarkdrive'];\r\n\t\t\tthis.add('-end', pokemon, 'Quark Drive', '[silent]');\r\n\t\t},\r\n\t\tcondition: {\r\n\t\t\tnoCopy: true,\r\n\t\t\tonStart(pokemon, source, effect) {\r\n\t\t\t\tif (effect?.id === 'boosterenergy') {\r\n\t\t\t\t\tthis.effectState.fromBooster = true;\r\n\t\t\t\t\tthis.add('-activate', pokemon, 'ability: Quark Drive', '[fromitem]');\r\n\t\t\t\t} else {\r\n\t\t\t\t\tthis.add('-activate', pokemon, 'ability: Quark Drive');\r\n\t\t\t\t}\r\n\t\t\t\tthis.effectState.bestStat = pokemon.getBestStat(false, true);\r\n\t\t\t\tthis.add('-start', pokemon, 'quarkdrive' + this.effectState.bestStat);\r\n\t\t\t},\r\n\t\t\tonModifyAtkPriority: 5,\r\n\t\t\tonModifyAtk(atk, source, target, move) {\r\n\t\t\t\tif (this.effectState.bestStat !== 'atk') return;\r\n\t\t\t\tthis.debug('Quark Drive atk boost');\r\n\t\t\t\treturn this.chainModify([5325, 4096]);\r\n\t\t\t},\r\n\t\t\tonModifyDefPriority: 6,\r\n\t\t\tonModifyDef(def, target, source, move) {\r\n\t\t\t\tif (this.effectState.bestStat !== 'def') return;\r\n\t\t\t\tthis.debug('Quark Drive def boost');\r\n\t\t\t\treturn this.chainModify([5325, 4096]);\r\n\t\t\t},\r\n\t\t\tonModifySpAPriority: 5,\r\n\t\t\tonModifySpA(relayVar, source, target, move) {\r\n\t\t\t\tif (this.effectState.bestStat !== 'spa') return;\r\n\t\t\t\tthis.debug('Quark Drive spa boost');\r\n\t\t\t\treturn this.chainModify([5325, 4096]);\r\n\t\t\t},\r\n\t\t\tonModifySpDPriority: 6,\r\n\t\t\tonModifySpD(relayVar, target, source, move) {\r\n\t\t\t\tif (this.effectState.bestStat !== 'spd') return;\r\n\t\t\t\tthis.debug('Quark Drive spd boost');\r\n\t\t\t\treturn this.chainModify([5325, 4096]);\r\n\t\t\t},\r\n\t\t\tonModifySpe(spe, pokemon) {\r\n\t\t\t\tif (this.effectState.bestStat !== 'spe') return;\r\n\t\t\t\tthis.debug('Quark Drive spe boost');\r\n\t\t\t\treturn this.chainModify(1.5);\r\n\t\t\t},\r\n\t\t\tonEnd(pokemon) {\r\n\t\t\t\tthis.add('-end', pokemon, 'Quark Drive');\r\n\t\t\t},\r\n\t\t},\r\n\t\tisPermanent: true,\r\n\t\tname: \"Quark Drive\",\r\n\t\trating: 3,\r\n\t\tnum: 282,\r\n\t},\r\n\tqueenlymajesty: {\r\n\t\tonFoeTryMove(target, source, move) {\r\n\t\t\tconst targetAllExceptions = ['perishsong', 'flowershield', 'rototiller'];\r\n\t\t\tif (move.target === 'foeSide' || (move.target === 'all' && !targetAllExceptions.includes(move.id))) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tconst dazzlingHolder = this.effectState.target;\r\n\t\t\tif ((source.isAlly(dazzlingHolder) || move.target === 'all') && move.priority > 0.1) {\r\n\t\t\t\tthis.attrLastMove('[still]');\r\n\t\t\t\tthis.add('cant', dazzlingHolder, 'ability: Queenly Majesty', move, '[of] ' + target);\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\t\tisBreakable: true,\r\n\t\tname: \"Queenly Majesty\",\r\n\t\trating: 2.5,\r\n\t\tnum: 214,\r\n\t},\r\n\tquickdraw: {\r\n\t\tonFractionalPriorityPriority: -1,\r\n\t\tonFractionalPriority(priority, pokemon, target, move) {\r\n\t\t\tif (move.category !== \"Status\" && this.randomChance(3, 10)) {\r\n\t\t\t\tthis.add('-activate', pokemon, 'ability: Quick Draw');\r\n\t\t\t\treturn 0.1;\r\n\t\t\t}\r\n\t\t},\r\n\t\tname: \"Quick Draw\",\r\n\t\trating: 2.5,\r\n\t\tnum: 259,\r\n\t},\r\n\tquickfeet: {\r\n\t\tonModifySpe(spe, pokemon) {\r\n\t\t\tif (pokemon.status) {\r\n\t\t\t\treturn this.chainModify(1.5);\r\n\t\t\t}\r\n\t\t},\r\n\t\tname: \"Quick Feet\",\r\n\t\trating: 2.5,\r\n\t\tnum: 95,\r\n\t},\r\n\traindish: {\r\n\t\tonWeather(target, source, effect) {\r\n\t\t\tif (target.hasItem('utilityumbrella')) return;\r\n\t\t\tif (effect.id === 'raindance' || effect.id === 'primordialsea') {\r\n\t\t\t\tthis.heal(target.baseMaxhp / 16);\r\n\t\t\t}\r\n\t\t},\r\n\t\tname: \"Rain Dish\",\r\n\t\trating: 1.5,\r\n\t\tnum: 44,\r\n\t},\r\n\trattled: {\r\n\t\tonDamagingHit(damage, target, source, move) {\r\n\t\t\tif (['Dark', 'Bug', 'Ghost'].includes(move.type)) {\r\n\t\t\t\tthis.boost({spe: 1});\r\n\t\t\t}\r\n\t\t},\r\n\t\tonAfterBoost(boost, target, source, effect) {\r\n\t\t\tif (effect?.name === 'Intimidate') {\r\n\t\t\t\tthis.boost({spe: 1});\r\n\t\t\t}\r\n\t\t},\r\n\t\tname: \"Rattled\",\r\n\t\trating: 1,\r\n\t\tnum: 155,\r\n\t},\r\n\treceiver: {\r\n\t\tonAllyFaint(target) {\r\n\t\t\tif (!this.effectState.target.hp) return;\r\n\t\t\tconst ability = target.getAbility();\r\n\t\t\tconst additionalBannedAbilities = [\r\n\t\t\t\t'noability', 'flowergift', 'forecast', 'hungerswitch', 'illusion', 'imposter', 'neutralizinggas', 'powerofalchemy', 'receiver', 'trace', 'wonderguard',\r\n\t\t\t];\r\n\t\t\tif (target.getAbility().isPermanent || additionalBannedAbilities.includes(target.ability)) return;\r\n\t\t\tif (this.effectState.target.setAbility(ability)) {\r\n\t\t\t\tthis.add('-ability', this.effectState.target, ability, '[from] ability: Receiver', '[of] ' + target);\r\n\t\t\t}\r\n\t\t},\r\n\t\tname: \"Receiver\",\r\n\t\trating: 0,\r\n\t\tnum: 222,\r\n\t},\r\n\treckless: {\r\n\t\tonBasePowerPriority: 23,\r\n\t\tonBasePower(basePower, attacker, defender, move) {\r\n\t\t\tif (move.recoil || move.hasCrashDamage) {\r\n\t\t\t\tthis.debug('Reckless boost');\r\n\t\t\t\treturn this.chainModify([4915, 4096]);\r\n\t\t\t}\r\n\t\t},\r\n\t\tname: \"Reckless\",\r\n\t\trating: 3,\r\n\t\tnum: 120,\r\n\t},\r\n\trefrigerate: {\r\n\t\tonModifyTypePriority: -1,\r\n\t\tonModifyType(move, pokemon) {\r\n\t\t\tconst noModifyType = [\r\n\t\t\t\t'judgment', 'multiattack', 'naturalgift', 'revelationdance', 'technoblast', 'terrainpulse', 'weatherball',\r\n\t\t\t];\r\n\t\t\tif (move.type === 'Normal' && !noModifyType.includes(move.id) &&\r\n\t\t\t\t!(move.isZ && move.category !== 'Status') && !(move.name === 'Tera Blast' && pokemon.terastallized)) {\r\n\t\t\t\tmove.type = 'Ice';\r\n\t\t\t\tmove.typeChangerBoosted = this.effect;\r\n\t\t\t}\r\n\t\t},\r\n\t\tonBasePowerPriority: 23,\r\n\t\tonBasePower(basePower, pokemon, target, move) {\r\n\t\t\tif (move.typeChangerBoosted === this.effect) return this.chainModify([4915, 4096]);\r\n\t\t},\r\n\t\tname: \"Refrigerate\",\r\n\t\trating: 4,\r\n\t\tnum: 174,\r\n\t},\r\n\tregenerator: {\r\n\t\tonSwitchOut(pokemon) {\r\n\t\t\tpokemon.heal(pokemon.baseMaxhp / 3);\r\n\t\t},\r\n\t\tname: \"Regenerator\",\r\n\t\trating: 4.5,\r\n\t\tnum: 144,\r\n\t},\r\n\tripen: {\r\n\t\tonTryHeal(damage, target, source, effect) {\r\n\t\t\tif (!effect) return;\r\n\t\t\tif (effect.name === 'Berry Juice' || effect.name === 'Leftovers') {\r\n\t\t\t\tthis.add('-activate', target, 'ability: Ripen');\r\n\t\t\t}\r\n\t\t\tif ((effect as Item).isBerry) return this.chainModify(2);\r\n\t\t},\r\n\t\tonChangeBoost(boost, target, source, effect) {\r\n\t\t\tif (effect && (effect as Item).isBerry) {\r\n\t\t\t\tlet b: BoostID;\r\n\t\t\t\tfor (b in boost) {\r\n\t\t\t\t\tboost[b]! *= 2;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\tonSourceModifyDamagePriority: -1,\r\n\t\tonSourceModifyDamage(damage, source, target, move) {\r\n\t\t\tif (target.abilityState.berryWeaken) {\r\n\t\t\t\ttarget.abilityState.berryWeaken = false;\r\n\t\t\t\treturn this.chainModify(0.5);\r\n\t\t\t}\r\n\t\t},\r\n\t\tonTryEatItemPriority: -1,\r\n\t\tonTryEatItem(item, pokemon) {\r\n\t\t\tthis.add('-activate', pokemon, 'ability: Ripen');\r\n\t\t},\r\n\t\tonEatItem(item, pokemon) {\r\n\t\t\tconst weakenBerries = [\r\n\t\t\t\t'Babiri Berry', 'Charti Berry', 'Chilan Berry', 'Chople Berry', 'Coba Berry', 'Colbur Berry', 'Haban Berry', 'Kasib Berry', 'Kebia Berry', 'Occa Berry', 'Passho Berry', 'Payapa Berry', 'Rindo Berry', 'Roseli Berry', 'Shuca Berry', 'Tanga Berry', 'Wacan Berry', 'Yache Berry',\r\n\t\t\t];\r\n\t\t\t// Record if the pokemon ate a berry to resist the attack\r\n\t\t\tpokemon.abilityState.berryWeaken = weakenBerries.includes(item.name);\r\n\t\t},\r\n\t\tname: \"Ripen\",\r\n\t\trating: 2,\r\n\t\tnum: 247,\r\n\t},\r\n\trivalry: {\r\n\t\tonBasePowerPriority: 24,\r\n\t\tonBasePower(basePower, attacker, defender, move) {\r\n\t\t\tif (attacker.gender && defender.gender) {\r\n\t\t\t\tif (attacker.gender === defender.gender) {\r\n\t\t\t\t\tthis.debug('Rivalry boost');\r\n\t\t\t\t\treturn this.chainModify(1.25);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tthis.debug('Rivalry weaken');\r\n\t\t\t\t\treturn this.chainModify(0.75);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\tname: \"Rivalry\",\r\n\t\trating: 0,\r\n\t\tnum: 79,\r\n\t},\r\n\trkssystem: {\r\n\t\t// RKS System's type-changing itself is implemented in statuses.js\r\n\t\tisPermanent: true,\r\n\t\tname: \"RKS System\",\r\n\t\trating: 4,\r\n\t\tnum: 225,\r\n\t},\r\n\trockhead: {\r\n\t\tonDamage(damage, target, source, effect) {\r\n\t\t\tif (effect.id === 'recoil') {\r\n\t\t\t\tif (!this.activeMove) throw new Error(\"Battle.activeMove is null\");\r\n\t\t\t\tif (this.activeMove.id !== 'struggle') return null;\r\n\t\t\t}\r\n\t\t},\r\n\t\tname: \"Rock Head\",\r\n\t\trating: 3,\r\n\t\tnum: 69,\r\n\t},\r\n\trockypayload: {\r\n\t\tonModifyAtkPriority: 5,\r\n\t\tonModifyAtk(atk, attacker, defender, move) {\r\n\t\t\tif (move.type === 'Rock') {\r\n\t\t\t\tthis.debug('Rocky Payload boost');\r\n\t\t\t\treturn this.chainModify(1.5);\r\n\t\t\t}\r\n\t\t},\r\n\t\tonModifySpAPriority: 5,\r\n\t\tonModifySpA(atk, attacker, defender, move) {\r\n\t\t\tif (move.type === 'Rock') {\r\n\t\t\t\tthis.debug('Rocky Payload boost');\r\n\t\t\t\treturn this.chainModify(1.5);\r\n\t\t\t}\r\n\t\t},\r\n\t\tname: \"Rocky Payload\",\r\n\t\trating: 3.5,\r\n\t\tnum: 276,\r\n\t},\r\n\troughskin: {\r\n\t\tonDamagingHitOrder: 1,\r\n\t\tonDamagingHit(damage, target, source, move) {\r\n\t\t\tif (this.checkMoveMakesContact(move, source, target, true)) {\r\n\t\t\t\tthis.damage(source.baseMaxhp / 8, source, target);\r\n\t\t\t}\r\n\t\t},\r\n\t\tname: \"Rough Skin\",\r\n\t\trating: 2.5,\r\n\t\tnum: 24,\r\n\t},\r\n\trunaway: {\r\n\t\tname: \"Run Away\",\r\n\t\trating: 0,\r\n\t\tnum: 50,\r\n\t},\r\n\tsandforce: {\r\n\t\tonBasePowerPriority: 21,\r\n\t\tonBasePower(basePower, attacker, defender, move) {\r\n\t\t\tif (this.field.isWeather('sandstorm')) {\r\n\t\t\t\tif (move.type === 'Rock' || move.type === 'Ground' || move.type === 'Steel') {\r\n\t\t\t\t\tthis.debug('Sand Force boost');\r\n\t\t\t\t\treturn this.chainModify([5325, 4096]);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\tonImmunity(type, pokemon) {\r\n\t\t\tif (type === 'sandstorm') return false;\r\n\t\t},\r\n\t\tname: \"Sand Force\",\r\n\t\trating: 2,\r\n\t\tnum: 159,\r\n\t},\r\n\tsandrush: {\r\n\t\tonModifySpe(spe, pokemon) {\r\n\t\t\tif (this.field.isWeather('sandstorm')) {\r\n\t\t\t\treturn this.chainModify(2);\r\n\t\t\t}\r\n\t\t},\r\n\t\tonImmunity(type, pokemon) {\r\n\t\t\tif (type === 'sandstorm') return false;\r\n\t\t},\r\n\t\tname: \"Sand Rush\",\r\n\t\trating: 3,\r\n\t\tnum: 146,\r\n\t},\r\n\tsandspit: {\r\n\t\tonDamagingHit(damage, target, source, move) {\r\n\t\t\tthis.field.setWeather('sandstorm');\r\n\t\t},\r\n\t\tname: \"Sand Spit\",\r\n\t\trating: 1,\r\n\t\tnum: 245,\r\n\t},\r\n\tsandstream: {\r\n\t\tonStart(source) {\r\n\t\t\tthis.field.setWeather('sandstorm');\r\n\t\t},\r\n\t\tname: \"Sand Stream\",\r\n\t\trating: 4,\r\n\t\tnum: 45,\r\n\t},\r\n\tsandveil: {\r\n\t\tonImmunity(type, pokemon) {\r\n\t\t\tif (type === 'sandstorm') return false;\r\n\t\t},\r\n\t\tonModifyAccuracyPriority: -1,\r\n\t\tonModifyAccuracy(accuracy) {\r\n\t\t\tif (typeof accuracy !== 'number') return;\r\n\t\t\tif (this.field.isWeather('sandstorm')) {\r\n\t\t\t\tthis.debug('Sand Veil - decreasing accuracy');\r\n\t\t\t\treturn this.chainModify([3277, 4096]);\r\n\t\t\t}\r\n\t\t},\r\n\t\tisBreakable: true,\r\n\t\tname: \"Sand Veil\",\r\n\t\trating: 1.5,\r\n\t\tnum: 8,\r\n\t},\r\n\tsapsipper: {\r\n\t\tonTryHitPriority: 1,\r\n\t\tonTryHit(target, source, move) {\r\n\t\t\tif (target !== source && move.type === 'Grass') {\r\n\t\t\t\tif (!this.boost({atk: 1})) {\r\n\t\t\t\t\tthis.add('-immune', target, '[from] ability: Sap Sipper');\r\n\t\t\t\t}\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t},\r\n\t\tonAllyTryHitSide(target, source, move) {\r\n\t\t\tif (source === this.effectState.target || !target.isAlly(source)) return;\r\n\t\t\tif (move.type === 'Grass') {\r\n\t\t\t\tthis.boost({atk: 1}, this.effectState.target);\r\n\t\t\t}\r\n\t\t},\r\n\t\tisBreakable: true,\r\n\t\tname: \"Sap Sipper\",\r\n\t\trating: 3,\r\n\t\tnum: 157,\r\n\t},\r\n\tschooling: {\r\n\t\tonStart(pokemon) {\r\n\t\t\tif (pokemon.baseSpecies.baseSpecies !== 'Wishiwashi' || pokemon.level < 20 || pokemon.transformed) return;\r\n\t\t\tif (pokemon.hp > pokemon.maxhp / 4) {\r\n\t\t\t\tif (pokemon.species.id === 'wishiwashi') {\r\n\t\t\t\t\tpokemon.formeChange('Wishiwashi-School');\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tif (pokemon.species.id === 'wishiwashischool') {\r\n\t\t\t\t\tpokemon.formeChange('Wishiwashi');\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\tonResidualOrder: 29,\r\n\t\tonResidual(pokemon) {\r\n\t\t\tif (\r\n\t\t\t\tpokemon.baseSpecies.baseSpecies !== 'Wishiwashi' || pokemon.level < 20 ||\r\n\t\t\t\tpokemon.transformed || !pokemon.hp\r\n\t\t\t) return;\r\n\t\t\tif (pokemon.hp > pokemon.maxhp / 4) {\r\n\t\t\t\tif (pokemon.species.id === 'wishiwashi') {\r\n\t\t\t\t\tpokemon.formeChange('Wishiwashi-School');\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tif (pokemon.species.id === 'wishiwashischool') {\r\n\t\t\t\t\tpokemon.formeChange('Wishiwashi');\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\tisPermanent: true,\r\n\t\tname: \"Schooling\",\r\n\t\trating: 3,\r\n\t\tnum: 208,\r\n\t},\r\n\tscrappy: {\r\n\t\tonModifyMovePriority: -5,\r\n\t\tonModifyMove(move) {\r\n\t\t\tif (!move.ignoreImmunity) move.ignoreImmunity = {};\r\n\t\t\tif (move.ignoreImmunity !== true) {\r\n\t\t\t\tmove.ignoreImmunity['Fighting'] = true;\r\n\t\t\t\tmove.ignoreImmunity['Normal'] = true;\r\n\t\t\t}\r\n\t\t},\r\n\t\tonTryBoost(boost, target, source, effect) {\r\n\t\t\tif (effect.name === 'Intimidate' && boost.atk) {\r\n\t\t\t\tdelete boost.atk;\r\n\t\t\t\tthis.add('-fail', target, 'unboost', 'Attack', '[from] ability: Scrappy', '[of] ' + target);\r\n\t\t\t}\r\n\t\t},\r\n\t\tname: \"Scrappy\",\r\n\t\trating: 3,\r\n\t\tnum: 113,\r\n\t},\r\n\tscreencleaner: {\r\n\t\tonStart(pokemon) {\r\n\t\t\tlet activated = false;\r\n\t\t\tfor (const sideCondition of ['reflect', 'lightscreen', 'auroraveil']) {\r\n\t\t\t\tfor (const side of [pokemon.side, ...pokemon.side.foeSidesWithConditions()]) {\r\n\t\t\t\t\tif (side.getSideCondition(sideCondition)) {\r\n\t\t\t\t\t\tif (!activated) {\r\n\t\t\t\t\t\t\tthis.add('-activate', pokemon, 'ability: Screen Cleaner');\r\n\t\t\t\t\t\t\tactivated = true;\r\n\t\t\t\t\t\t}\r\n\t\t\t\t\t\tside.removeSideCondition(sideCondition);\r\n\t\t\t\t\t}\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\tname: \"Screen Cleaner\",\r\n\t\trating: 2,\r\n\t\tnum: 251,\r\n\t},\r\n\tseedsower: {\r\n\t\tonDamagingHit(damage, target, source, move) {\r\n\t\t\tthis.field.setTerrain('grassyterrain');\r\n\t\t},\r\n\t\tname: \"Seed Sower\",\r\n\t\trating: 2.5,\r\n\t\tnum: 269,\r\n\t},\r\n\tserenegrace: {\r\n\t\tonModifyMovePriority: -2,\r\n\t\tonModifyMove(move) {\r\n\t\t\tif (move.secondaries) {\r\n\t\t\t\tthis.debug('doubling secondary chance');\r\n\t\t\t\tfor (const secondary of move.secondaries) {\r\n\t\t\t\t\tif (secondary.chance) secondary.chance *= 2;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (move.self?.chance) move.self.chance *= 2;\r\n\t\t},\r\n\t\tname: \"Serene Grace\",\r\n\t\trating: 3.5,\r\n\t\tnum: 32,\r\n\t},\r\n\tshadowshield: {\r\n\t\tonSourceModifyDamage(damage, source, target, move) {\r\n\t\t\tif (target.hp >= target.maxhp) {\r\n\t\t\t\tthis.debug('Shadow Shield weaken');\r\n\t\t\t\treturn this.chainModify(0.5);\r\n\t\t\t}\r\n\t\t},\r\n\t\tname: \"Shadow Shield\",\r\n\t\trating: 3.5,\r\n\t\tnum: 231,\r\n\t},\r\n\tshadowtag: {\r\n\t\tonFoeTrapPokemon(pokemon) {\r\n\t\t\tif (!pokemon.hasAbility('shadowtag') && pokemon.isAdjacent(this.effectState.target)) {\r\n\t\t\t\tpokemon.tryTrap(true);\r\n\t\t\t}\r\n\t\t},\r\n\t\tonFoeMaybeTrapPokemon(pokemon, source) {\r\n\t\t\tif (!source) source = this.effectState.target;\r\n\t\t\tif (!source || !pokemon.isAdjacent(source)) return;\r\n\t\t\tif (!pokemon.hasAbility('shadowtag')) {\r\n\t\t\t\tpokemon.maybeTrapped = true;\r\n\t\t\t}\r\n\t\t},\r\n\t\tname: \"Shadow Tag\",\r\n\t\trating: 5,\r\n\t\tnum: 23,\r\n\t},\r\n\tsharpness: {\r\n\t\tonBasePowerPriority: 19,\r\n\t\tonBasePower(basePower, attacker, defender, move) {\r\n\t\t\tif (move.flags['slicing']) {\r\n\t\t\t\tthis.debug('Shapness boost');\r\n\t\t\t\treturn this.chainModify(1.5);\r\n\t\t\t}\r\n\t\t},\r\n\t\tname: \"Sharpness\",\r\n\t\trating: 3.5,\r\n\t\tnum: 292,\r\n\t},\r\n\tshedskin: {\r\n\t\tonResidualOrder: 5,\r\n\t\tonResidualSubOrder: 3,\r\n\t\tonResidual(pokemon) {\r\n\t\t\tif (pokemon.hp && pokemon.status && this.randomChance(33, 100)) {\r\n\t\t\t\tthis.debug('shed skin');\r\n\t\t\t\tthis.add('-activate', pokemon, 'ability: Shed Skin');\r\n\t\t\t\tpokemon.cureStatus();\r\n\t\t\t}\r\n\t\t},\r\n\t\tname: \"Shed Skin\",\r\n\t\trating: 3,\r\n\t\tnum: 61,\r\n\t},\r\n\tsheerforce: {\r\n\t\tonModifyMove(move, pokemon) {\r\n\t\t\tif (move.secondaries) {\r\n\t\t\t\tdelete move.secondaries;\r\n\t\t\t\t// Technically not a secondary effect, but it is negated\r\n\t\t\t\tdelete move.self;\r\n\t\t\t\tif (move.id === 'clangoroussoulblaze') delete move.selfBoost;\r\n\t\t\t\t// Actual negation of `AfterMoveSecondary` effects implemented in scripts.js\r\n\t\t\t\tmove.hasSheerForce = true;\r\n\t\t\t}\r\n\t\t},\r\n\t\tonBasePowerPriority: 21,\r\n\t\tonBasePower(basePower, pokemon, target, move) {\r\n\t\t\tif (move.hasSheerForce) return this.chainModify([5325, 4096]);\r\n\t\t},\r\n\t\tname: \"Sheer Force\",\r\n\t\trating: 3.5,\r\n\t\tnum: 125,\r\n\t},\r\n\tshellarmor: {\r\n\t\tonCriticalHit: false,\r\n\t\tisBreakable: true,\r\n\t\tname: \"Shell Armor\",\r\n\t\trating: 1,\r\n\t\tnum: 75,\r\n\t},\r\n\tshielddust: {\r\n\t\tonModifySecondaries(secondaries) {\r\n\t\t\tthis.debug('Shield Dust prevent secondary');\r\n\t\t\treturn secondaries.filter(effect => !!(effect.self || effect.dustproof));\r\n\t\t},\r\n\t\tisBreakable: true,\r\n\t\tname: \"Shield Dust\",\r\n\t\trating: 2,\r\n\t\tnum: 19,\r\n\t},\r\n\tshieldsdown: {\r\n\t\tonStart(pokemon) {\r\n\t\t\tif (pokemon.baseSpecies.baseSpecies !== 'Minior' || pokemon.transformed) return;\r\n\t\t\tif (pokemon.hp > pokemon.maxhp / 2) {\r\n\t\t\t\tif (pokemon.species.forme !== 'Meteor') {\r\n\t\t\t\t\tpokemon.formeChange('Minior-Meteor');\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tif (pokemon.species.forme === 'Meteor') {\r\n\t\t\t\t\tpokemon.formeChange(pokemon.set.species);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\tonResidualOrder: 29,\r\n\t\tonResidual(pokemon) {\r\n\t\t\tif (pokemon.baseSpecies.baseSpecies !== 'Minior' || pokemon.transformed || !pokemon.hp) return;\r\n\t\t\tif (pokemon.hp > pokemon.maxhp / 2) {\r\n\t\t\t\tif (pokemon.species.forme !== 'Meteor') {\r\n\t\t\t\t\tpokemon.formeChange('Minior-Meteor');\r\n\t\t\t\t}\r\n\t\t\t} else {\r\n\t\t\t\tif (pokemon.species.forme === 'Meteor') {\r\n\t\t\t\t\tpokemon.formeChange(pokemon.set.species);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\tonSetStatus(status, target, source, effect) {\r\n\t\t\tif (target.species.id !== 'miniormeteor' || target.transformed) return;\r\n\t\t\tif ((effect as Move)?.status) {\r\n\t\t\t\tthis.add('-immune', target, '[from] ability: Shields Down');\r\n\t\t\t}\r\n\t\t\treturn false;\r\n\t\t},\r\n\t\tonTryAddVolatile(status, target) {\r\n\t\t\tif (target.species.id !== 'miniormeteor' || target.transformed) return;\r\n\t\t\tif (status.id !== 'yawn') return;\r\n\t\t\tthis.add('-immune', target, '[from] ability: Shields Down');\r\n\t\t\treturn null;\r\n\t\t},\r\n\t\tisPermanent: true,\r\n\t\tname: \"Shields Down\",\r\n\t\trating: 3,\r\n\t\tnum: 197,\r\n\t},\r\n\tsimple: {\r\n\t\tonChangeBoost(boost, target, source, effect) {\r\n\t\t\tif (effect && effect.id === 'zpower') return;\r\n\t\t\tlet i: BoostID;\r\n\t\t\tfor (i in boost) {\r\n\t\t\t\tboost[i]! *= 2;\r\n\t\t\t}\r\n\t\t},\r\n\t\tisBreakable: true,\r\n\t\tname: \"Simple\",\r\n\t\trating: 4,\r\n\t\tnum: 86,\r\n\t},\r\n\tskilllink: {\r\n\t\tonModifyMove(move) {\r\n\t\t\tif (move.multihit && Array.isArray(move.multihit) && move.multihit.length) {\r\n\t\t\t\tmove.multihit = move.multihit[1];\r\n\t\t\t}\r\n\t\t\tif (move.multiaccuracy) {\r\n\t\t\t\tdelete move.multiaccuracy;\r\n\t\t\t}\r\n\t\t},\r\n\t\tname: \"Skill Link\",\r\n\t\trating: 3,\r\n\t\tnum: 92,\r\n\t},\r\n\tslowstart: {\r\n\t\tonStart(pokemon) {\r\n\t\t\tpokemon.addVolatile('slowstart');\r\n\t\t},\r\n\t\tonEnd(pokemon) {\r\n\t\t\tdelete pokemon.volatiles['slowstart'];\r\n\t\t\tthis.add('-end', pokemon, 'Slow Start', '[silent]');\r\n\t\t},\r\n\t\tcondition: {\r\n\t\t\tduration: 5,\r\n\t\t\tonResidualOrder: 28,\r\n\t\t\tonResidualSubOrder: 2,\r\n\t\t\tonStart(target) {\r\n\t\t\t\tthis.add('-start', target, 'ability: Slow Start');\r\n\t\t\t},\r\n\t\t\tonModifyAtkPriority: 5,\r\n\t\t\tonModifyAtk(atk, pokemon) {\r\n\t\t\t\treturn this.chainModify(0.5);\r\n\t\t\t},\r\n\t\t\tonModifySpe(spe, pokemon) {\r\n\t\t\t\treturn this.chainModify(0.5);\r\n\t\t\t},\r\n\t\t\tonEnd(target) {\r\n\t\t\t\tthis.add('-end', target, 'Slow Start');\r\n\t\t\t},\r\n\t\t},\r\n\t\tname: \"Slow Start\",\r\n\t\trating: -1,\r\n\t\tnum: 112,\r\n\t},\r\n\tslushrush: {\r\n\t\tonModifySpe(spe, pokemon) {\r\n\t\t\tif (this.field.isWeather(['hail', 'snow'])) {\r\n\t\t\t\treturn this.chainModify(2);\r\n\t\t\t}\r\n\t\t},\r\n\t\tname: \"Slush Rush\",\r\n\t\trating: 3,\r\n\t\tnum: 202,\r\n\t},\r\n\tsniper: {\r\n\t\tonModifyDamage(damage, source, target, move) {\r\n\t\t\tif (target.getMoveHitData(move).crit) {\r\n\t\t\t\tthis.debug('Sniper boost');\r\n\t\t\t\treturn this.chainModify(1.5);\r\n\t\t\t}\r\n\t\t},\r\n\t\tname: \"Sniper\",\r\n\t\trating: 2,\r\n\t\tnum: 97,\r\n\t},\r\n\tsnowcloak: {\r\n\t\tonImmunity(type, pokemon) {\r\n\t\t\tif (type === 'hail') return false;\r\n\t\t},\r\n\t\tonModifyAccuracyPriority: -1,\r\n\t\tonModifyAccuracy(accuracy) {\r\n\t\t\tif (typeof accuracy !== 'number') return;\r\n\t\t\tif (this.field.isWeather(['hail', 'snow'])) {\r\n\t\t\t\tthis.debug('Snow Cloak - decreasing accuracy');\r\n\t\t\t\treturn this.chainModify([3277, 4096]);\r\n\t\t\t}\r\n\t\t},\r\n\t\tisBreakable: true,\r\n\t\tname: \"Snow Cloak\",\r\n\t\trating: 1.5,\r\n\t\tnum: 81,\r\n\t},\r\n\tsnowwarning: {\r\n\t\tonStart(source) {\r\n\t\t\tthis.field.setWeather('snow');\r\n\t\t},\r\n\t\tname: \"Snow Warning\",\r\n\t\trating: 4,\r\n\t\tnum: 117,\r\n\t},\r\n\tsolarpower: {\r\n\t\tonModifySpAPriority: 5,\r\n\t\tonModifySpA(spa, pokemon) {\r\n\t\t\tif (['sunnyday', 'desolateland'].includes(pokemon.effectiveWeather())) {\r\n\t\t\t\treturn this.chainModify(1.5);\r\n\t\t\t}\r\n\t\t},\r\n\t\tonWeather(target, source, effect) {\r\n\t\t\tif (target.hasItem('utilityumbrella')) return;\r\n\t\t\tif (effect.id === 'sunnyday' || effect.id === 'desolateland') {\r\n\t\t\t\tthis.damage(target.baseMaxhp / 8, target, target);\r\n\t\t\t}\r\n\t\t},\r\n\t\tname: \"Solar Power\",\r\n\t\trating: 2,\r\n\t\tnum: 94,\r\n\t},\r\n\tsolidrock: {\r\n\t\tonSourceModifyDamage(damage, source, target, move) {\r\n\t\t\tif (target.getMoveHitData(move).typeMod > 0) {\r\n\t\t\t\tthis.debug('Solid Rock neutralize');\r\n\t\t\t\treturn this.chainModify(0.75);\r\n\t\t\t}\r\n\t\t},\r\n\t\tisBreakable: true,\r\n\t\tname: \"Solid Rock\",\r\n\t\trating: 3,\r\n\t\tnum: 116,\r\n\t},\r\n\tsoulheart: {\r\n\t\tonAnyFaintPriority: 1,\r\n\t\tonAnyFaint() {\r\n\t\t\tthis.boost({spa: 1}, this.effectState.target);\r\n\t\t},\r\n\t\tname: \"Soul-Heart\",\r\n\t\trating: 3.5,\r\n\t\tnum: 220,\r\n\t},\r\n\tsoundproof: {\r\n\t\tonTryHit(target, source, move) {\r\n\t\t\tif (target !== source && move.flags['sound']) {\r\n\t\t\t\tthis.add('-immune', target, '[from] ability: Soundproof');\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t},\r\n\t\tonAllyTryHitSide(target, source, move) {\r\n\t\t\tif (move.flags['sound']) {\r\n\t\t\t\tthis.add('-immune', this.effectState.target, '[from] ability: Soundproof');\r\n\t\t\t}\r\n\t\t},\r\n\t\tisBreakable: true,\r\n\t\tname: \"Soundproof\",\r\n\t\trating: 2,\r\n\t\tnum: 43,\r\n\t},\r\n\tspeedboost: {\r\n\t\tonResidualOrder: 28,\r\n\t\tonResidualSubOrder: 2,\r\n\t\tonResidual(pokemon) {\r\n\t\t\tif (pokemon.activeTurns) {\r\n\t\t\t\tthis.boost({spe: 1});\r\n\t\t\t}\r\n\t\t},\r\n\t\tname: \"Speed Boost\",\r\n\t\trating: 4.5,\r\n\t\tnum: 3,\r\n\t},\r\n\tstakeout: {\r\n\t\tonModifyAtkPriority: 5,\r\n\t\tonModifyAtk(atk, attacker, defender) {\r\n\t\t\tif (!defender.activeTurns) {\r\n\t\t\t\tthis.debug('Stakeout boost');\r\n\t\t\t\treturn this.chainModify(2);\r\n\t\t\t}\r\n\t\t},\r\n\t\tonModifySpAPriority: 5,\r\n\t\tonModifySpA(atk, attacker, defender) {\r\n\t\t\tif (!defender.activeTurns) {\r\n\t\t\t\tthis.debug('Stakeout boost');\r\n\t\t\t\treturn this.chainModify(2);\r\n\t\t\t}\r\n\t\t},\r\n\t\tname: \"Stakeout\",\r\n\t\trating: 4.5,\r\n\t\tnum: 198,\r\n\t},\r\n\tstall: {\r\n\t\tonFractionalPriority: -0.1,\r\n\t\tname: \"Stall\",\r\n\t\trating: -1,\r\n\t\tnum: 100,\r\n\t},\r\n\tstalwart: {\r\n\t\tonModifyMovePriority: 1,\r\n\t\tonModifyMove(move) {\r\n\t\t\t// most of the implementation is in Battle#getTarget\r\n\t\t\tmove.tracksTarget = move.target !== 'scripted';\r\n\t\t},\r\n\t\tname: \"Stalwart\",\r\n\t\trating: 0,\r\n\t\tnum: 242,\r\n\t},\r\n\tstamina: {\r\n\t\tonDamagingHit(damage, target, source, effect) {\r\n\t\t\tthis.boost({def: 1});\r\n\t\t},\r\n\t\tname: \"Stamina\",\r\n\t\trating: 3.5,\r\n\t\tnum: 192,\r\n\t},\r\n\tstancechange: {\r\n\t\tonModifyMovePriority: 1,\r\n\t\tonModifyMove(move, attacker, defender) {\r\n\t\t\tif (attacker.species.baseSpecies !== 'Aegislash' || attacker.transformed) return;\r\n\t\t\tif (move.category === 'Status' && move.id !== 'kingsshield') return;\r\n\t\t\tconst targetForme = (move.id === 'kingsshield' ? 'Aegislash' : 'Aegislash-Blade');\r\n\t\t\tif (attacker.species.name !== targetForme) attacker.formeChange(targetForme);\r\n\t\t},\r\n\t\tisPermanent: true,\r\n\t\tname: \"Stance Change\",\r\n\t\trating: 4,\r\n\t\tnum: 176,\r\n\t},\r\n\tstatic: {\r\n\t\tonDamagingHit(damage, target, source, move) {\r\n\t\t\tif (this.checkMoveMakesContact(move, source, target)) {\r\n\t\t\t\tif (this.randomChance(3, 10)) {\r\n\t\t\t\t\tsource.trySetStatus('par', target);\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t},\r\n\t\tname: \"Static\",\r\n\t\trating: 2,\r\n\t\tnum: 9,\r\n\t},\r\n\tsteadfast: {\r\n\t\tonFlinch(pokemon) {\r\n\t\t\tthis.boost({spe: 1});\r\n\t\t},\r\n\t\tname: \"Steadfast\",\r\n\t\trating: 1,\r\n\t\tnum: 80,\r\n\t},\r\n\tsteamengine: {\r\n\t\tonDamagingHit(damage, target, source, move) {\r\n\t\t\tif (['Water', 'Fire'].includes(move.type)) {\r\n\t\t\t\tthis.boost({spe: 6});\r\n\t\t\t}\r\n\t\t},\r\n\t\tname: \"Steam Engine\",\r\n\t\trating: 2,\r\n\t\tnum: 243,\r\n\t},\r\n\tsteelworker: {\r\n\t\tonModifyAtkPriority: 5,\r\n\t\tonModifyAtk(atk, attacker, defender, move) {\r\n\t\t\tif (move.type === 'Steel') {\r\n\t\t\t\tthis.debug('Steelworker boost');\r\n\t\t\t\treturn this.chainModify(1.5);\r\n\t\t\t}\r\n\t\t},\r\n\t\tonModifySpAPriority: 5,\r\n\t\tonModifySpA(atk, attacker, defender, move) {\r\n\t\t\tif (move.type === 'Steel') {\r\n\t\t\t\tthis.debug('Steelworker boost');\r\n\t\t\t\treturn this.chainModify(1.5);\r\n\t\t\t}\r\n\t\t},\r\n\t\tname: \"Steelworker\",\r\n\t\trating: 3.5,\r\n\t\tnum: 200,\r\n\t},\r\n\tsteelyspirit: {\r\n\t\tonAllyBasePowerPriority: 22,\r\n\t\tonAllyBasePower(basePower, attacker, defender, move) {\r\n\t\t\tif (move.type === 'Steel') {\r\n\t\t\t\tthis.debug('Steely Spirit boost');\r\n\t\t\t\treturn this.chainModify(1.5);\r\n\t\t\t}\r\n\t\t},\r\n\t\tname: \"Steely Spirit\",\r\n\t\trating: 3.5,\r\n\t\tnum: 252,\r\n\t},\r\n\tstench: {\r\n\t\tonModifyMovePriority: -1,\r\n\t\tonModifyMove(move) {\r\n\t\t\tif (move.category !== \"Status\") {\r\n\t\t\t\tthis.debug('Adding Stench flinch');\r\n\t\t\t\tif (!move.secondaries) move.secondaries = [];\r\n\t\t\t\tfor (const secondary of move.secondaries) {\r\n\t\t\t\t\tif (secondary.volatileStatus === 'flinch') return;\r\n\t\t\t\t}\r\n\t\t\t\tmove.secondaries.push({\r\n\t\t\t\t\tchance: 10,\r\n\t\t\t\t\tvolatileStatus: 'flinch',\r\n\t\t\t\t});\r\n\t\t\t}\r\n\t\t},\r\n\t\tname: \"Stench\",\r\n\t\trating: 0.5,\r\n\t\tnum: 1,\r\n\t},\r\n\tstickyhold: {\r\n\t\tonTakeItem(item, pokemon, source) {\r\n\t\t\tif (!this.activeMove) throw new Error(\"Battle.activeMove is null\");\r\n\t\t\tif (!pokemon.hp || pokemon.item === 'stickybarb') return;\r\n\t\t\tif ((source && source !== pokemon) || this.activeMove.id === 'knockoff') {\r\n\t\t\t\tthis.add('-activate', pokemon, 'ability: Sticky Hold');\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\t\tisBreakable: true,\r\n\t\tname: \"Sticky Hold\",\r\n\t\trating: 1.5,\r\n\t\tnum: 60,\r\n\t},\r\n\tstormdrain: {\r\n\t\tonTryHit(target, source, move) {\r\n\t\t\tif (target !== source && move.type === 'Water') {\r\n\t\t\t\tif (!this.boost({spa: 1})) {\r\n\t\t\t\t\tthis.add('-immune', target, '[from] ability: Storm Drain');\r\n\t\t\t\t}\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t},\r\n\t\tonAnyRedirectTarget(target, source, source2, move) {\r\n\t\t\tif (move.type !== 'Water' || move.flags['pledgecombo']) return;\r\n\t\t\tconst redirectTarget = ['randomNormal', 'adjacentFoe'].includes(move.target) ? 'normal' : move.target;\r\n\t\t\tif (this.validTarget(this.effectState.target, source, redirectTarget)) {\r\n\t\t\t\tif (move.smartTarget) move.smartTarget = false;\r\n\t\t\t\tif (this.effectState.target !== target) {\r\n\t\t\t\t\tthis.add('-activate', this.effectState.target, 'ability: Storm Drain');\r\n\t\t\t\t}\r\n\t\t\t\treturn this.effectState.target;\r\n\t\t\t}\r\n\t\t},\r\n\t\tisBreakable: true,\r\n\t\tname: \"Storm Drain\",\r\n\t\trating: 3,\r\n\t\tnum: 114,\r\n\t},\r\n\tstrongjaw: {\r\n\t\tonBasePowerPriority: 19,\r\n\t\tonBasePower(basePower, attacker, defender, move) {\r\n\t\t\tif (move.flags['bite']) {\r\n\t\t\t\treturn this.chainModify(1.5);\r\n\t\t\t}\r\n\t\t},\r\n\t\tname: \"Strong Jaw\",\r\n\t\trating: 3.5,\r\n\t\tnum: 173,\r\n\t},\r\n\tsturdy: {\r\n\t\tonTryHit(pokemon, target, move) {\r\n\t\t\tif (move.ohko) {\r\n\t\t\t\tthis.add('-immune', pokemon, '[from] ability: Sturdy');\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t},\r\n\t\tonDamagePriority: -30,\r\n\t\tonDamage(damage, target, source, effect) {\r\n\t\t\tif (target.hp === target.maxhp && damage >= target.hp && effect && effect.effectType === 'Move') {\r\n\t\t\t\tthis.add('-ability', target, 'Sturdy');\r\n\t\t\t\treturn target.hp - 1;\r\n\t\t\t}\r\n\t\t},\r\n\t\tisBreakable: true,\r\n\t\tname: \"Sturdy\",\r\n\t\trating: 3,\r\n\t\tnum: 5,\r\n\t},\r\n\tsuctioncups: {\r\n\t\tonDragOutPriority: 1,\r\n\t\tonDragOut(pokemon) {\r\n\t\t\tthis.add('-activate', pokemon, 'ability: Suction Cups');\r\n\t\t\treturn null;\r\n\t\t},\r\n\t\tisBreakable: true,\r\n\t\tname: \"Suction Cups\",\r\n\t\trating: 1,\r\n\t\tnum: 21,\r\n\t},\r\n\tsuperluck: {\r\n\t\tonModifyCritRatio(critRatio) {\r\n\t\t\treturn critRatio + 1;\r\n\t\t},\r\n\t\tname: \"Super Luck\",\r\n\t\trating: 1.5,\r\n\t\tnum: 105,\r\n\t},\r\n\tsupremeoverlord: {\r\n\t\tonStart(pokemon) {\r\n\t\t\tif (pokemon.side.totalFainted) {\r\n\t\t\t\tthis.add('-activate', pokemon, 'ability: Supreme Overlord');\r\n\t\t\t\tconst fallen = Math.min(pokemon.side.totalFainted, 5);\r\n\t\t\t\tthis.add('-start', pokemon, `fallen${fallen}`, '[silent]');\r\n\t\t\t\tthis.effectState.fallen = fallen;\r\n\t\t\t}\r\n\t\t},\r\n\t\tonEnd(pokemon) {\r\n\t\t\tthis.add('-end', pokemon, `fallen${this.effectState.fallen}`, '[silent]');\r\n\t\t},\r\n\t\tonBasePowerPriority: 21,\r\n\t\tonBasePower(basePower, attacker, defender, move) {\r\n\t\t\tif (this.effectState.fallen) {\r\n\t\t\t\tconst powMod = [4096, 4506, 4915, 5325, 5734, 6144];\r\n\t\t\t\tthis.debug(`Supreme Overlord boost: ${powMod[this.effectState.fallen]}/4096`);\r\n\t\t\t\treturn this.chainModify([powMod[this.effectState.fallen], 4096]);\r\n\t\t\t}\r\n\t\t},\r\n\t\tname: \"Supreme Overlord\",\r\n\t\trating: 4,\r\n\t\tnum: 293,\r\n\t},\r\n\tsurgesurfer: {\r\n\t\tonModifySpe(spe) {\r\n\t\t\tif (this.field.isTerrain('electricterrain')) {\r\n\t\t\t\treturn this.chainModify(2);\r\n\t\t\t}\r\n\t\t},\r\n\t\tname: \"Surge Surfer\",\r\n\t\trating: 3,\r\n\t\tnum: 207,\r\n\t},\r\n\tswarm: {\r\n\t\tonModifyAtkPriority: 5,\r\n\t\tonModifyAtk(atk, attacker, defender, move) {\r\n\t\t\tif (move.type === 'Bug' && attacker.hp <= attacker.maxhp / 3) {\r\n\t\t\t\tthis.debug('Swarm boost');\r\n\t\t\t\treturn this.chainModify(1.5);\r\n\t\t\t}\r\n\t\t},\r\n\t\tonModifySpAPriority: 5,\r\n\t\tonModifySpA(atk, attacker, defender, move) {\r\n\t\t\tif (move.type === 'Bug' && attacker.hp <= attacker.maxhp / 3) {\r\n\t\t\t\tthis.debug('Swarm boost');\r\n\t\t\t\treturn this.chainModify(1.5);\r\n\t\t\t}\r\n\t\t},\r\n\t\tname: \"Swarm\",\r\n\t\trating: 2,\r\n\t\tnum: 68,\r\n\t},\r\n\tsweetveil: {\r\n\t\tname: \"Sweet Veil\",\r\n\t\tonAllySetStatus(status, target, source, effect) {\r\n\t\t\tif (status.id === 'slp') {\r\n\t\t\t\tthis.debug('Sweet Veil interrupts sleep');\r\n\t\t\t\tconst effectHolder = this.effectState.target;\r\n\t\t\t\tthis.add('-block', target, 'ability: Sweet Veil', '[of] ' + effectHolder);\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t},\r\n\t\tonAllyTryAddVolatile(status, target) {\r\n\t\t\tif (status.id === 'yawn') {\r\n\t\t\t\tthis.debug('Sweet Veil blocking yawn');\r\n\t\t\t\tconst effectHolder = this.effectState.target;\r\n\t\t\t\tthis.add('-block', target, 'ability: Sweet Veil', '[of] ' + effectHolder);\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t},\r\n\t\tisBreakable: true,\r\n\t\trating: 2,\r\n\t\tnum: 175,\r\n\t},\r\n\tswiftswim: {\r\n\t\tonModifySpe(spe, pokemon) {\r\n\t\t\tif (['raindance', 'primordialsea'].includes(pokemon.effectiveWeather())) {\r\n\t\t\t\treturn this.chainModify(2);\r\n\t\t\t}\r\n\t\t},\r\n\t\tname: \"Swift Swim\",\r\n\t\trating: 3,\r\n\t\tnum: 33,\r\n\t},\r\n\tsymbiosis: {\r\n\t\tonAllyAfterUseItem(item, pokemon) {\r\n\t\t\tif (pokemon.switchFlag) return;\r\n\t\t\tconst source = this.effectState.target;\r\n\t\t\tconst myItem = source.takeItem();\r\n\t\t\tif (!myItem) return;\r\n\t\t\tif (\r\n\t\t\t\t!this.singleEvent('TakeItem', myItem, source.itemState, pokemon, source, this.effect, myItem) ||\r\n\t\t\t\t!pokemon.setItem(myItem)\r\n\t\t\t) {\r\n\t\t\t\tsource.item = myItem.id;\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tthis.add('-activate', source, 'ability: Symbiosis', myItem, '[of] ' + pokemon);\r\n\t\t},\r\n\t\tname: \"Symbiosis\",\r\n\t\trating: 0,\r\n\t\tnum: 180,\r\n\t},\r\n\tsynchronize: {\r\n\t\tonAfterSetStatus(status, target, source, effect) {\r\n\t\t\tif (!source || source === target) return;\r\n\t\t\tif (effect && effect.id === 'toxicspikes') return;\r\n\t\t\tif (status.id === 'slp' || status.id === 'frz') return;\r\n\t\t\tthis.add('-activate', target, 'ability: Synchronize');\r\n\t\t\t// Hack to make status-prevention abilities think Synchronize is a status move\r\n\t\t\t// and show messages when activating against it.\r\n\t\t\tsource.trySetStatus(status, target, {status: status.id, id: 'synchronize'} as Effect);\r\n\t\t},\r\n\t\tname: \"Synchronize\",\r\n\t\trating: 2,\r\n\t\tnum: 28,\r\n\t},\r\n\tswordofruin: {\r\n\t\tonStart(pokemon) {\r\n\t\t\tif (this.suppressingAbility(pokemon)) return;\r\n\t\t\tthis.add('-ability', pokemon, 'Sword of Ruin');\r\n\t\t},\r\n\t\tonAnyModifyDef(def, target, source, move) {\r\n\t\t\tconst abilityHolder = this.effectState.target;\r\n\t\t\tif (target.hasAbility('Sword of Ruin')) return;\r\n\t\t\tif (!move.ruinedDef?.hasAbility('Sword of Ruin')) move.ruinedDef = abilityHolder;\r\n\t\t\tif (move.ruinedDef !== abilityHolder) return;\r\n\t\t\tthis.debug('Sword of Ruin Def drop');\r\n\t\t\treturn this.chainModify(0.75);\r\n\t\t},\r\n\t\tname: \"Sword of Ruin\",\r\n\t\trating: 4.5,\r\n\t\tnum: 285,\r\n\t},\r\n\ttabletsofruin: {\r\n\t\tonStart(pokemon) {\r\n\t\t\tif (this.suppressingAbility(pokemon)) return;\r\n\t\t\tthis.add('-ability', pokemon, 'Tablets of Ruin');\r\n\t\t},\r\n\t\tonAnyModifyAtk(atk, source, target, move) {\r\n\t\t\tconst abilityHolder = this.effectState.target;\r\n\t\t\tif (source.hasAbility('Tablets of Ruin')) return;\r\n\t\t\tif (!move.ruinedAtk) move.ruinedAtk = abilityHolder;\r\n\t\t\tif (move.ruinedAtk !== abilityHolder) return;\r\n\t\t\tthis.debug('Tablets of Ruin Atk drop');\r\n\t\t\treturn this.chainModify(0.75);\r\n\t\t},\r\n\t\tname: \"Tablets of Ruin\",\r\n\t\trating: 4.5,\r\n\t\tnum: 284,\r\n\t},\r\n\ttangledfeet: {\r\n\t\tonModifyAccuracyPriority: -1,\r\n\t\tonModifyAccuracy(accuracy, target) {\r\n\t\t\tif (typeof accuracy !== 'number') return;\r\n\t\t\tif (target?.volatiles['confusion']) {\r\n\t\t\t\tthis.debug('Tangled Feet - decreasing accuracy');\r\n\t\t\t\treturn this.chainModify(0.5);\r\n\t\t\t}\r\n\t\t},\r\n\t\tisBreakable: true,\r\n\t\tname: \"Tangled Feet\",\r\n\t\trating: 1,\r\n\t\tnum: 77,\r\n\t},\r\n\ttanglinghair: {\r\n\t\tonDamagingHit(damage, target, source, move) {\r\n\t\t\tif (this.checkMoveMakesContact(move, source, target, true)) {\r\n\t\t\t\tthis.add('-ability', target, 'Tangling Hair');\r\n\t\t\t\tthis.boost({spe: -1}, source, target, null, true);\r\n\t\t\t}\r\n\t\t},\r\n\t\tname: \"Tangling Hair\",\r\n\t\trating: 2,\r\n\t\tnum: 221,\r\n\t},\r\n\ttechnician: {\r\n\t\tonBasePowerPriority: 30,\r\n\t\tonBasePower(basePower, attacker, defender, move) {\r\n\t\t\tconst basePowerAfterMultiplier = this.modify(basePower, this.event.modifier);\r\n\t\t\tthis.debug('Base Power: ' + basePowerAfterMultiplier);\r\n\t\t\tif (basePowerAfterMultiplier <= 60) {\r\n\t\t\t\tthis.debug('Technician boost');\r\n\t\t\t\treturn this.chainModify(1.5);\r\n\t\t\t}\r\n\t\t},\r\n\t\tname: \"Technician\",\r\n\t\trating: 3.5,\r\n\t\tnum: 101,\r\n\t},\r\n\ttelepathy: {\r\n\t\tonTryHit(target, source, move) {\r\n\t\t\tif (target !== source && target.isAlly(source) && move.category !== 'Status') {\r\n\t\t\t\tthis.add('-activate', target, 'ability: Telepathy');\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t},\r\n\t\tisBreakable: true,\r\n\t\tname: \"Telepathy\",\r\n\t\trating: 0,\r\n\t\tnum: 140,\r\n\t},\r\n\tteravolt: {\r\n\t\tonStart(pokemon) {\r\n\t\t\tthis.add('-ability', pokemon, 'Teravolt');\r\n\t\t},\r\n\t\tonModifyMove(move) {\r\n\t\t\tmove.ignoreAbility = true;\r\n\t\t},\r\n\t\tname: \"Teravolt\",\r\n\t\trating: 3,\r\n\t\tnum: 164,\r\n\t},\r\n\tthermalexchange: {\r\n\t\tonDamagingHit(damage, target, source, move) {\r\n\t\t\tif (move.type === 'Fire') {\r\n\t\t\t\tthis.boost({atk: 1});\r\n\t\t\t}\r\n\t\t},\r\n\t\tonUpdate(pokemon) {\r\n\t\t\tif (pokemon.status === 'brn') {\r\n\t\t\t\tthis.add('-activate', pokemon, 'ability: Thermal Exchange');\r\n\t\t\t\tpokemon.cureStatus();\r\n\t\t\t}\r\n\t\t},\r\n\t\tonSetStatus(status, target, source, effect) {\r\n\t\t\tif (status.id !== 'brn') return;\r\n\t\t\tif ((effect as Move)?.status) {\r\n\t\t\t\tthis.add('-immune', target, '[from] ability: Thermal Exchange');\r\n\t\t\t}\r\n\t\t\treturn false;\r\n\t\t},\r\n\t\tname: \"Thermal Exchange\",\r\n\t\trating: 2.5,\r\n\t\tnum: 270,\r\n\t},\r\n\tthickfat: {\r\n\t\tonSourceModifyAtkPriority: 6,\r\n\t\tonSourceModifyAtk(atk, attacker, defender, move) {\r\n\t\t\tif (move.type === 'Ice' || move.type === 'Fire') {\r\n\t\t\t\tthis.debug('Thick Fat weaken');\r\n\t\t\t\treturn this.chainModify(0.5);\r\n\t\t\t}\r\n\t\t},\r\n\t\tonSourceModifySpAPriority: 5,\r\n\t\tonSourceModifySpA(atk, attacker, defender, move) {\r\n\t\t\tif (move.type === 'Ice' || move.type === 'Fire') {\r\n\t\t\t\tthis.debug('Thick Fat weaken');\r\n\t\t\t\treturn this.chainModify(0.5);\r\n\t\t\t}\r\n\t\t},\r\n\t\tisBreakable: true,\r\n\t\tname: \"Thick Fat\",\r\n\t\trating: 3.5,\r\n\t\tnum: 47,\r\n\t},\r\n\ttintedlens: {\r\n\t\tonModifyDamage(damage, source, target, move) {\r\n\t\t\tif (target.getMoveHitData(move).typeMod < 0) {\r\n\t\t\t\tthis.debug('Tinted Lens boost');\r\n\t\t\t\treturn this.chainModify(2);\r\n\t\t\t}\r\n\t\t},\r\n\t\tname: \"Tinted Lens\",\r\n\t\trating: 4,\r\n\t\tnum: 110,\r\n\t},\r\n\ttorrent: {\r\n\t\tonModifyAtkPriority: 5,\r\n\t\tonModifyAtk(atk, attacker, defender, move) {\r\n\t\t\tif (move.type === 'Water' && attacker.hp <= attacker.maxhp / 3) {\r\n\t\t\t\tthis.debug('Torrent boost');\r\n\t\t\t\treturn this.chainModify(1.5);\r\n\t\t\t}\r\n\t\t},\r\n\t\tonModifySpAPriority: 5,\r\n\t\tonModifySpA(atk, attacker, defender, move) {\r\n\t\t\tif (move.type === 'Water' && attacker.hp <= attacker.maxhp / 3) {\r\n\t\t\t\tthis.debug('Torrent boost');\r\n\t\t\t\treturn this.chainModify(1.5);\r\n\t\t\t}\r\n\t\t},\r\n\t\tname: \"Torrent\",\r\n\t\trating: 2,\r\n\t\tnum: 67,\r\n\t},\r\n\ttoughclaws: {\r\n\t\tonBasePowerPriority: 21,\r\n\t\tonBasePower(basePower, attacker, defender, move) {\r\n\t\t\tif (move.flags['contact']) {\r\n\t\t\t\treturn this.chainModify([5325, 4096]);\r\n\t\t\t}\r\n\t\t},\r\n\t\tname: \"Tough Claws\",\r\n\t\trating: 3.5,\r\n\t\tnum: 181,\r\n\t},\r\n\ttoxicboost: {\r\n\t\tonBasePowerPriority: 19,\r\n\t\tonBasePower(basePower, attacker, defender, move) {\r\n\t\t\tif ((attacker.status === 'psn' || attacker.status === 'tox') && move.category === 'Physical') {\r\n\t\t\t\treturn this.chainModify(1.5);\r\n\t\t\t}\r\n\t\t},\r\n\t\tname: \"Toxic Boost\",\r\n\t\trating: 3,\r\n\t\tnum: 137,\r\n\t},\r\n\ttoxicdebris: {\r\n\t\tonDamagingHit(damage, target, source, move) {\r\n\t\t\tconst side = source.isAlly(target) ? source.side.foe : source.side;\r\n\t\t\tconst toxicSpikes = side.sideConditions['toxicspikes'];\r\n\t\t\tif (move.category === 'Physical' && (!toxicSpikes || toxicSpikes.layers < 2)) {\r\n\t\t\t\tthis.add('-activate', target, 'ability: Toxic Debris');\r\n\t\t\t\tside.addSideCondition('toxicspikes', target);\r\n\t\t\t}\r\n\t\t},\r\n\t\tname: \"Toxic Debris\",\r\n\t\trating: 3.5,\r\n\t\tnum: 295,\r\n\t},\r\n\ttrace: {\r\n\t\tonStart(pokemon) {\r\n\t\t\t// n.b. only affects Hackmons\r\n\t\t\t// interaction with No Ability is complicated: https://www.smogon.com/forums/threads/pokemon-sun-moon-battle-mechanics-research.3586701/page-76#post-7790209\r\n\t\t\tif (pokemon.adjacentFoes().some(foeActive => foeActive.ability === 'noability')) {\r\n\t\t\t\tthis.effectState.gaveUp = true;\r\n\t\t\t}\r\n\t\t\t// interaction with Ability Shield is similar to No Ability\r\n\t\t\tif (pokemon.hasItem('Ability Shield')) {\r\n\t\t\t\tthis.add('-block', pokemon, 'item: Ability Shield');\r\n\t\t\t\tthis.effectState.gaveUp = true;\r\n\t\t\t}\r\n\t\t},\r\n\t\tonUpdate(pokemon) {\r\n\t\t\tif (!pokemon.isStarted || this.effectState.gaveUp) return;\r\n\r\n\t\t\tconst additionalBannedAbilities = [\r\n\t\t\t\t// Zen Mode included here for compatability with Gen 5-6\r\n\t\t\t\t'noability', 'flowergift', 'forecast', 'hungerswitch', 'illusion', 'imposter', 'neutralizinggas', 'powerofalchemy', 'receiver', 'trace', 'zenmode',\r\n\t\t\t];\r\n\t\t\tconst possibleTargets = pokemon.adjacentFoes().filter(target => (\r\n\t\t\t\t!target.getAbility().isPermanent && !additionalBannedAbilities.includes(target.ability)\r\n\t\t\t));\r\n\t\t\tif (!possibleTargets.length) return;\r\n\r\n\t\t\tconst target = this.sample(possibleTargets);\r\n\t\t\tconst ability = target.getAbility();\r\n\t\t\tif (pokemon.setAbility(ability)) {\r\n\t\t\t\tthis.add('-ability', pokemon, ability, '[from] ability: Trace', '[of] ' + target);\r\n\t\t\t}\r\n\t\t},\r\n\t\tname: \"Trace\",\r\n\t\trating: 2.5,\r\n\t\tnum: 36,\r\n\t},\r\n\ttransistor: {\r\n\t\tonModifyAtkPriority: 5,\r\n\t\tonModifyAtk(atk, attacker, defender, move) {\r\n\t\t\tif (move.type === 'Electric') {\r\n\t\t\t\tthis.debug('Transistor boost');\r\n\t\t\t\treturn this.chainModify(1.5);\r\n\t\t\t}\r\n\t\t},\r\n\t\tonModifySpAPriority: 5,\r\n\t\tonModifySpA(atk, attacker, defender, move) {\r\n\t\t\tif (move.type === 'Electric') {\r\n\t\t\t\tthis.debug('Transistor boost');\r\n\t\t\t\treturn this.chainModify(1.5);\r\n\t\t\t}\r\n\t\t},\r\n\t\tname: \"Transistor\",\r\n\t\trating: 3.5,\r\n\t\tnum: 262,\r\n\t},\r\n\ttriage: {\r\n\t\tonModifyPriority(priority, pokemon, target, move) {\r\n\t\t\tif (move?.flags['heal']) return priority + 3;\r\n\t\t},\r\n\t\tname: \"Triage\",\r\n\t\trating: 3.5,\r\n\t\tnum: 205,\r\n\t},\r\n\ttruant: {\r\n\t\tonStart(pokemon) {\r\n\t\t\tpokemon.removeVolatile('truant');\r\n\t\t\tif (pokemon.activeTurns && (pokemon.moveThisTurnResult !== undefined || !this.queue.willMove(pokemon))) {\r\n\t\t\t\tpokemon.addVolatile('truant');\r\n\t\t\t}\r\n\t\t},\r\n\t\tonBeforeMovePriority: 9,\r\n\t\tonBeforeMove(pokemon) {\r\n\t\t\tif (pokemon.removeVolatile('truant')) {\r\n\t\t\t\tthis.add('cant', pokemon, 'ability: Truant');\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t\tpokemon.addVolatile('truant');\r\n\t\t},\r\n\t\tcondition: {},\r\n\t\tname: \"Truant\",\r\n\t\trating: -1,\r\n\t\tnum: 54,\r\n\t},\r\n\tturboblaze: {\r\n\t\tonStart(pokemon) {\r\n\t\t\tthis.add('-ability', pokemon, 'Turboblaze');\r\n\t\t},\r\n\t\tonModifyMove(move) {\r\n\t\t\tmove.ignoreAbility = true;\r\n\t\t},\r\n\t\tname: \"Turboblaze\",\r\n\t\trating: 3,\r\n\t\tnum: 163,\r\n\t},\r\n\tunaware: {\r\n\t\tname: \"Unaware\",\r\n\t\tonAnyModifyBoost(boosts, pokemon) {\r\n\t\t\tconst unawareUser = this.effectState.target;\r\n\t\t\tif (unawareUser === pokemon) return;\r\n\t\t\tif (unawareUser === this.activePokemon && pokemon === this.activeTarget) {\r\n\t\t\t\tboosts['def'] = 0;\r\n\t\t\t\tboosts['spd'] = 0;\r\n\t\t\t\tboosts['evasion'] = 0;\r\n\t\t\t}\r\n\t\t\tif (pokemon === this.activePokemon && unawareUser === this.activeTarget) {\r\n\t\t\t\tboosts['atk'] = 0;\r\n\t\t\t\tboosts['def'] = 0;\r\n\t\t\t\tboosts['spa'] = 0;\r\n\t\t\t\tboosts['accuracy'] = 0;\r\n\t\t\t}\r\n\t\t},\r\n\t\tisBreakable: true,\r\n\t\trating: 4,\r\n\t\tnum: 109,\r\n\t},\r\n\tunburden: {\r\n\t\tonAfterUseItem(item, pokemon) {\r\n\t\t\tif (pokemon !== this.effectState.target) return;\r\n\t\t\tpokemon.addVolatile('unburden');\r\n\t\t},\r\n\t\tonTakeItem(item, pokemon) {\r\n\t\t\tpokemon.addVolatile('unburden');\r\n\t\t},\r\n\t\tonEnd(pokemon) {\r\n\t\t\tpokemon.removeVolatile('unburden');\r\n\t\t},\r\n\t\tcondition: {\r\n\t\t\tonModifySpe(spe, pokemon) {\r\n\t\t\t\tif (!pokemon.item && !pokemon.ignoringAbility()) {\r\n\t\t\t\t\treturn this.chainModify(2);\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t},\r\n\t\tname: \"Unburden\",\r\n\t\trating: 3.5,\r\n\t\tnum: 84,\r\n\t},\r\n\tunnerve: {\r\n\t\tonPreStart(pokemon) {\r\n\t\t\tthis.add('-ability', pokemon, 'Unnerve');\r\n\t\t\tthis.effectState.unnerved = true;\r\n\t\t},\r\n\t\tonStart(pokemon) {\r\n\t\t\tif (this.effectState.unnerved) return;\r\n\t\t\tthis.add('-ability', pokemon, 'Unnerve');\r\n\t\t\tthis.effectState.unnerved = true;\r\n\t\t},\r\n\t\tonEnd() {\r\n\t\t\tthis.effectState.unnerved = false;\r\n\t\t},\r\n\t\tonFoeTryEatItem() {\r\n\t\t\treturn !this.effectState.unnerved;\r\n\t\t},\r\n\t\tname: \"Unnerve\",\r\n\t\trating: 1,\r\n\t\tnum: 127,\r\n\t},\r\n\tunseenfist: {\r\n\t\tonModifyMove(move) {\r\n\t\t\tif (move.flags['contact']) delete move.flags['protect'];\r\n\t\t},\r\n\t\tname: \"Unseen Fist\",\r\n\t\trating: 2,\r\n\t\tnum: 260,\r\n\t},\r\n\tvesselofruin: {\r\n\t\tonStart(pokemon) {\r\n\t\t\tif (this.suppressingAbility(pokemon)) return;\r\n\t\t\tthis.add('-ability', pokemon, 'Vessel of Ruin');\r\n\t\t},\r\n\t\tonAnyModifySpA(spa, source, target, move) {\r\n\t\t\tconst abilityHolder = this.effectState.target;\r\n\t\t\tif (source.hasAbility('Vessel of Ruin')) return;\r\n\t\t\tif (!move.ruinedSpA) move.ruinedSpA = abilityHolder;\r\n\t\t\tif (move.ruinedSpA !== abilityHolder) return;\r\n\t\t\tthis.debug('Vessel of Ruin SpA drop');\r\n\t\t\treturn this.chainModify(0.75);\r\n\t\t},\r\n\t\tname: \"Vessel of Ruin\",\r\n\t\trating: 4.5,\r\n\t\tnum: 284,\r\n\t},\r\n\tvictorystar: {\r\n\t\tonAnyModifyAccuracyPriority: -1,\r\n\t\tonAnyModifyAccuracy(accuracy, target, source) {\r\n\t\t\tif (source.isAlly(this.effectState.target) && typeof accuracy === 'number') {\r\n\t\t\t\treturn this.chainModify([4506, 4096]);\r\n\t\t\t}\r\n\t\t},\r\n\t\tname: \"Victory Star\",\r\n\t\trating: 2,\r\n\t\tnum: 162,\r\n\t},\r\n\tvitalspirit: {\r\n\t\tonUpdate(pokemon) {\r\n\t\t\tif (pokemon.status === 'slp') {\r\n\t\t\t\tthis.add('-activate', pokemon, 'ability: Vital Spirit');\r\n\t\t\t\tpokemon.cureStatus();\r\n\t\t\t}\r\n\t\t},\r\n\t\tonSetStatus(status, target, source, effect) {\r\n\t\t\tif (status.id !== 'slp') return;\r\n\t\t\tif ((effect as Move)?.status) {\r\n\t\t\t\tthis.add('-immune', target, '[from] ability: Vital Spirit');\r\n\t\t\t}\r\n\t\t\treturn false;\r\n\t\t},\r\n\t\tisBreakable: true,\r\n\t\tname: \"Vital Spirit\",\r\n\t\trating: 1.5,\r\n\t\tnum: 72,\r\n\t},\r\n\tvoltabsorb: {\r\n\t\tonTryHit(target, source, move) {\r\n\t\t\tif (target !== source && move.type === 'Electric') {\r\n\t\t\t\tif (!this.heal(target.baseMaxhp / 4)) {\r\n\t\t\t\t\tthis.add('-immune', target, '[from] ability: Volt Absorb');\r\n\t\t\t\t}\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t},\r\n\t\tisBreakable: true,\r\n\t\tname: \"Volt Absorb\",\r\n\t\trating: 3.5,\r\n\t\tnum: 10,\r\n\t},\r\n\twanderingspirit: {\r\n\t\tonDamagingHit(damage, target, source, move) {\r\n\t\t\tconst additionalBannedAbilities = ['hungerswitch', 'illusion', 'neutralizinggas', 'wonderguard'];\r\n\t\t\tif (source.getAbility().isPermanent || additionalBannedAbilities.includes(source.ability) ||\r\n\t\t\t\ttarget.volatiles['dynamax']\r\n\t\t\t) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\r\n\t\t\tif (this.checkMoveMakesContact(move, source, target)) {\r\n\t\t\t\tconst targetCanBeSet = this.runEvent('SetAbility', target, source, this.effect, source.ability);\r\n\t\t\t\tif (!targetCanBeSet) return targetCanBeSet;\r\n\t\t\t\tconst sourceAbility = source.setAbility('wanderingspirit', target);\r\n\t\t\t\tif (!sourceAbility) return;\r\n\t\t\t\tif (target.isAlly(source)) {\r\n\t\t\t\t\tthis.add('-activate', target, 'Skill Swap', '', '', '[of] ' + source);\r\n\t\t\t\t} else {\r\n\t\t\t\t\tthis.add('-activate', target, 'ability: Wandering Spirit', this.dex.abilities.get(sourceAbility).name, 'Wandering Spirit', '[of] ' + source);\r\n\t\t\t\t}\r\n\t\t\t\ttarget.setAbility(sourceAbility);\r\n\t\t\t}\r\n\t\t},\r\n\t\tname: \"Wandering Spirit\",\r\n\t\trating: 2.5,\r\n\t\tnum: 254,\r\n\t},\r\n\twaterabsorb: {\r\n\t\tonTryHit(target, source, move) {\r\n\t\t\tif (target !== source && move.type === 'Water') {\r\n\t\t\t\tif (!this.heal(target.baseMaxhp / 4)) {\r\n\t\t\t\t\tthis.add('-immune', target, '[from] ability: Water Absorb');\r\n\t\t\t\t}\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t},\r\n\t\tisBreakable: true,\r\n\t\tname: \"Water Absorb\",\r\n\t\trating: 3.5,\r\n\t\tnum: 11,\r\n\t},\r\n\twaterbubble: {\r\n\t\tonSourceModifyAtkPriority: 5,\r\n\t\tonSourceModifyAtk(atk, attacker, defender, move) {\r\n\t\t\tif (move.type === 'Fire') {\r\n\t\t\t\treturn this.chainModify(0.5);\r\n\t\t\t}\r\n\t\t},\r\n\t\tonSourceModifySpAPriority: 5,\r\n\t\tonSourceModifySpA(atk, attacker, defender, move) {\r\n\t\t\tif (move.type === 'Fire') {\r\n\t\t\t\treturn this.chainModify(0.5);\r\n\t\t\t}\r\n\t\t},\r\n\t\tonModifyAtk(atk, attacker, defender, move) {\r\n\t\t\tif (move.type === 'Water') {\r\n\t\t\t\treturn this.chainModify(2);\r\n\t\t\t}\r\n\t\t},\r\n\t\tonModifySpA(atk, attacker, defender, move) {\r\n\t\t\tif (move.type === 'Water') {\r\n\t\t\t\treturn this.chainModify(2);\r\n\t\t\t}\r\n\t\t},\r\n\t\tonUpdate(pokemon) {\r\n\t\t\tif (pokemon.status === 'brn') {\r\n\t\t\t\tthis.add('-activate', pokemon, 'ability: Water Bubble');\r\n\t\t\t\tpokemon.cureStatus();\r\n\t\t\t}\r\n\t\t},\r\n\t\tonSetStatus(status, target, source, effect) {\r\n\t\t\tif (status.id !== 'brn') return;\r\n\t\t\tif ((effect as Move)?.status) {\r\n\t\t\t\tthis.add('-immune', target, '[from] ability: Water Bubble');\r\n\t\t\t}\r\n\t\t\treturn false;\r\n\t\t},\r\n\t\tisBreakable: true,\r\n\t\tname: \"Water Bubble\",\r\n\t\trating: 4.5,\r\n\t\tnum: 199,\r\n\t},\r\n\twatercompaction: {\r\n\t\tonDamagingHit(damage, target, source, move) {\r\n\t\t\tif (move.type === 'Water') {\r\n\t\t\t\tthis.boost({def: 2});\r\n\t\t\t}\r\n\t\t},\r\n\t\tname: \"Water Compaction\",\r\n\t\trating: 1.5,\r\n\t\tnum: 195,\r\n\t},\r\n\twaterveil: {\r\n\t\tonUpdate(pokemon) {\r\n\t\t\tif (pokemon.status === 'brn') {\r\n\t\t\t\tthis.add('-activate', pokemon, 'ability: Water Veil');\r\n\t\t\t\tpokemon.cureStatus();\r\n\t\t\t}\r\n\t\t},\r\n\t\tonSetStatus(status, target, source, effect) {\r\n\t\t\tif (status.id !== 'brn') return;\r\n\t\t\tif ((effect as Move)?.status) {\r\n\t\t\t\tthis.add('-immune', target, '[from] ability: Water Veil');\r\n\t\t\t}\r\n\t\t\treturn false;\r\n\t\t},\r\n\t\tisBreakable: true,\r\n\t\tname: \"Water Veil\",\r\n\t\trating: 2,\r\n\t\tnum: 41,\r\n\t},\r\n\tweakarmor: {\r\n\t\tonDamagingHit(damage, target, source, move) {\r\n\t\t\tif (move.category === 'Physical') {\r\n\t\t\t\tthis.boost({def: -1, spe: 2}, target, target);\r\n\t\t\t}\r\n\t\t},\r\n\t\tname: \"Weak Armor\",\r\n\t\trating: 1,\r\n\t\tnum: 133,\r\n\t},\r\n\twellbakedbody: {\r\n\t\tonTryHit(target, source, move) {\r\n\t\t\tif (target !== source && move.type === 'Fire') {\r\n\t\t\t\tif (!this.boost({def: 2})) {\r\n\t\t\t\t\tthis.add('-immune', target, '[from] ability: Well-Baked Body');\r\n\t\t\t\t}\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t},\r\n\t\tisBreakable: true,\r\n\t\tname: \"Well-Baked Body\",\r\n\t\trating: 3.5,\r\n\t\tnum: 273,\r\n\t},\r\n\twhitesmoke: {\r\n\t\tonTryBoost(boost, target, source, effect) {\r\n\t\t\tif (source && target === source) return;\r\n\t\t\tlet showMsg = false;\r\n\t\t\tlet i: BoostID;\r\n\t\t\tfor (i in boost) {\r\n\t\t\t\tif (boost[i]! < 0) {\r\n\t\t\t\t\tdelete boost[i];\r\n\t\t\t\t\tshowMsg = true;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\tif (showMsg && !(effect as ActiveMove).secondaries && effect.id !== 'octolock') {\r\n\t\t\t\tthis.add(\"-fail\", target, \"unboost\", \"[from] ability: White Smoke\", \"[of] \" + target);\r\n\t\t\t}\r\n\t\t},\r\n\t\tisBreakable: true,\r\n\t\tname: \"White Smoke\",\r\n\t\trating: 2,\r\n\t\tnum: 73,\r\n\t},\r\n\twimpout: {\r\n\t\tonEmergencyExit(target) {\r\n\t\t\tif (!this.canSwitch(target.side) || target.forceSwitchFlag || target.switchFlag) return;\r\n\t\t\tfor (const side of this.sides) {\r\n\t\t\t\tfor (const active of side.active) {\r\n\t\t\t\t\tactive.switchFlag = false;\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t\ttarget.switchFlag = true;\r\n\t\t\tthis.add('-activate', target, 'ability: Wimp Out');\r\n\t\t},\r\n\t\tname: \"Wimp Out\",\r\n\t\trating: 1,\r\n\t\tnum: 193,\r\n\t},\r\n\twindpower: {\r\n\t\tonDamagingHitOrder: 1,\r\n\t\tonDamagingHit(damage, target, source, move) {\r\n\t\t\tif (move.flags['wind']) {\r\n\t\t\t\ttarget.addVolatile('charge');\r\n\t\t\t}\r\n\t\t},\r\n\t\tonAllySideConditionStart(target, source, sideCondition) {\r\n\t\t\tconst pokemon = this.effectState.target;\r\n\t\t\tif (sideCondition.id === 'tailwind') {\r\n\t\t\t\tpokemon.addVolatile('charge');\r\n\t\t\t}\r\n\t\t},\r\n\t\tname: \"Wind Power\",\r\n\t\trating: 1,\r\n\t\tnum: 277,\r\n\t},\r\n\twindrider: {\r\n\t\tonStart(pokemon) {\r\n\t\t\tif (pokemon.side.sideConditions['tailwind']) {\r\n\t\t\t\tthis.boost({atk: 1}, pokemon, pokemon);\r\n\t\t\t}\r\n\t\t},\r\n\t\tonTryHit(target, source, move) {\r\n\t\t\tif (target !== source && move.flags['wind']) {\r\n\t\t\t\tif (!this.boost({atk: 1}, target, target)) {\r\n\t\t\t\t\tthis.add('-immune', target, '[from] ability: Wind Rider');\r\n\t\t\t\t}\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t},\r\n\t\tonAllySideConditionStart(target, source, sideCondition) {\r\n\t\t\tconst pokemon = this.effectState.target;\r\n\t\t\tif (sideCondition.id === 'tailwind') {\r\n\t\t\t\tthis.boost({atk: 1}, pokemon, pokemon);\r\n\t\t\t}\r\n\t\t},\r\n\t\tname: \"Wind Rider\",\r\n\t\trating: 3.5,\r\n\t\t// We do not want Brambleghast to get Infiltrator in Randbats\r\n\t\tnum: 274,\r\n\t},\r\n\twonderguard: {\r\n\t\tonTryHit(target, source, move) {\r\n\t\t\tif (target === source || move.category === 'Status' || move.type === '???' || move.id === 'struggle') return;\r\n\t\t\tif (move.id === 'skydrop' && !source.volatiles['skydrop']) return;\r\n\t\t\tthis.debug('Wonder Guard immunity: ' + move.id);\r\n\t\t\tif (target.runEffectiveness(move) <= 0) {\r\n\t\t\t\tif (move.smartTarget) {\r\n\t\t\t\t\tmove.smartTarget = false;\r\n\t\t\t\t} else {\r\n\t\t\t\t\tthis.add('-immune', target, '[from] ability: Wonder Guard');\r\n\t\t\t\t}\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t},\r\n\t\tisBreakable: true,\r\n\t\tname: \"Wonder Guard\",\r\n\t\trating: 5,\r\n\t\tnum: 25,\r\n\t},\r\n\twonderskin: {\r\n\t\tonModifyAccuracyPriority: 10,\r\n\t\tonModifyAccuracy(accuracy, target, source, move) {\r\n\t\t\tif (move.category === 'Status' && typeof accuracy === 'number') {\r\n\t\t\t\tthis.debug('Wonder Skin - setting accuracy to 50');\r\n\t\t\t\treturn 50;\r\n\t\t\t}\r\n\t\t},\r\n\t\tisBreakable: true,\r\n\t\tname: \"Wonder Skin\",\r\n\t\trating: 2,\r\n\t\tnum: 147,\r\n\t},\r\n\tzenmode: {\r\n\t\tonResidualOrder: 29,\r\n\t\tonResidual(pokemon) {\r\n\t\t\tif (pokemon.baseSpecies.baseSpecies !== 'Darmanitan' || pokemon.transformed) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tif (pokemon.hp <= pokemon.maxhp / 2 && !['Zen', 'Galar-Zen'].includes(pokemon.species.forme)) {\r\n\t\t\t\tpokemon.addVolatile('zenmode');\r\n\t\t\t} else if (pokemon.hp > pokemon.maxhp / 2 && ['Zen', 'Galar-Zen'].includes(pokemon.species.forme)) {\r\n\t\t\t\tpokemon.addVolatile('zenmode'); // in case of base Darmanitan-Zen\r\n\t\t\t\tpokemon.removeVolatile('zenmode');\r\n\t\t\t}\r\n\t\t},\r\n\t\tonEnd(pokemon) {\r\n\t\t\tif (!pokemon.volatiles['zenmode'] || !pokemon.hp) return;\r\n\t\t\tpokemon.transformed = false;\r\n\t\t\tdelete pokemon.volatiles['zenmode'];\r\n\t\t\tif (pokemon.species.baseSpecies === 'Darmanitan' && pokemon.species.battleOnly) {\r\n\t\t\t\tpokemon.formeChange(pokemon.species.battleOnly as string, this.effect, false, '[silent]');\r\n\t\t\t}\r\n\t\t},\r\n\t\tcondition: {\r\n\t\t\tonStart(pokemon) {\r\n\t\t\t\tif (!pokemon.species.name.includes('Galar')) {\r\n\t\t\t\t\tif (pokemon.species.id !== 'darmanitanzen') pokemon.formeChange('Darmanitan-Zen');\r\n\t\t\t\t} else {\r\n\t\t\t\t\tif (pokemon.species.id !== 'darmanitangalarzen') pokemon.formeChange('Darmanitan-Galar-Zen');\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t\tonEnd(pokemon) {\r\n\t\t\t\tif (['Zen', 'Galar-Zen'].includes(pokemon.species.forme)) {\r\n\t\t\t\t\tpokemon.formeChange(pokemon.species.battleOnly as string);\r\n\t\t\t\t}\r\n\t\t\t},\r\n\t\t},\r\n\t\tisPermanent: true,\r\n\t\tname: \"Zen Mode\",\r\n\t\trating: 0,\r\n\t\tnum: 161,\r\n\t},\r\n\tzerotohero: {\r\n\t\tonSwitchOut(pokemon) {\r\n\t\t\tif (pokemon.baseSpecies.baseSpecies !== 'Palafin' || pokemon.transformed) return;\r\n\t\t\tif (pokemon.species.forme !== 'Hero') {\r\n\t\t\t\tpokemon.formeChange('Palafin-Hero', this.effect, true);\r\n\t\t\t}\r\n\t\t},\r\n\t\tonSwitchIn() {\r\n\t\t\tthis.effectState.switchingIn = true;\r\n\t\t},\r\n\t\tonStart(pokemon) {\r\n\t\t\tif (!this.effectState.switchingIn) return;\r\n\t\t\tthis.effectState.switchingIn = false;\r\n\t\t\tif (pokemon.baseSpecies.baseSpecies !== 'Palafin' || pokemon.transformed) return;\r\n\t\t\tif (!this.effectState.heroMessageDisplayed && pokemon.species.forme === 'Hero') {\r\n\t\t\t\tthis.add('-activate', pokemon, 'ability: Zero to Hero');\r\n\t\t\t\tthis.effectState.heroMessageDisplayed = true;\r\n\t\t\t}\r\n\t\t},\r\n\t\tisPermanent: true,\r\n\t\tname: \"Zero to Hero\",\r\n\t\trating: 5,\r\n\t\tnum: 278,\r\n\t},\r\n\r\n\t// CAP\r\n\tmountaineer: {\r\n\t\tonDamage(damage, target, source, effect) {\r\n\t\t\tif (effect && effect.id === 'stealthrock') {\r\n\t\t\t\treturn false;\r\n\t\t\t}\r\n\t\t},\r\n\t\tonTryHit(target, source, move) {\r\n\t\t\tif (move.type === 'Rock' && !target.activeTurns) {\r\n\t\t\t\tthis.add('-immune', target, '[from] ability: Mountaineer');\r\n\t\t\t\treturn null;\r\n\t\t\t}\r\n\t\t},\r\n\t\tisNonstandard: \"CAP\",\r\n\t\tisBreakable: true,\r\n\t\tname: \"Mountaineer\",\r\n\t\trating: 3,\r\n\t\tnum: -2,\r\n\t},\r\n\trebound: {\r\n\t\tisNonstandard: \"CAP\",\r\n\t\tname: \"Rebound\",\r\n\t\tonTryHitPriority: 1,\r\n\t\tonTryHit(target, source, move) {\r\n\t\t\tif (this.effectState.target.activeTurns) return;\r\n\r\n\t\t\tif (target === source || move.hasBounced || !move.flags['reflectable']) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tconst newMove = this.dex.getActiveMove(move.id);\r\n\t\t\tnewMove.hasBounced = true;\r\n\t\t\tthis.actions.useMove(newMove, target, source);\r\n\t\t\treturn null;\r\n\t\t},\r\n\t\tonAllyTryHitSide(target, source, move) {\r\n\t\t\tif (this.effectState.target.activeTurns) return;\r\n\r\n\t\t\tif (target.isAlly(source) || move.hasBounced || !move.flags['reflectable']) {\r\n\t\t\t\treturn;\r\n\t\t\t}\r\n\t\t\tconst newMove = this.dex.getActiveMove(move.id);\r\n\t\t\tnewMove.hasBounced = true;\r\n\t\t\tthis.actions.useMove(newMove, this.effectState.target, source);\r\n\t\t\treturn null;\r\n\t\t},\r\n\t\tcondition: {\r\n\t\t\tduration: 1,\r\n\t\t},\r\n\t\tisBreakable: true,\r\n\t\trating: 3,\r\n\t\tnum: -3,\r\n\t},\r\n\tpersistent: {\r\n\t\tisNonstandard: \"CAP\",\r\n\t\tname: \"Persistent\",\r\n\t\t// implemented in the corresponding move\r\n\t\trating: 3,\r\n\t\tnum: -4,\r\n\t},\r\n};\r\n"], "mappings": "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", "names": ["target"] }