exports.BattleMovedex = { "absorb": { num: 71, accuracy: 100, basePower: 20, category: "Special", desc: "Deals damage to one adjacent target. The user recovers half of the HP lost by the target, rounded up. If Big Root is held by the user, the HP recovered is 1.3x normal, rounded half down.", shortDesc: "User recovers 50% of the damage dealt.", id: "absorb", name: "Absorb", pp: 25, priority: 0, drain: [1,2], secondary: false, target: "normal", type: "Grass" }, "acid": { num: 51, accuracy: 100, basePower: 40, category: "Special", desc: "Deals damage to all adjacent foes with a 10% chance to lower their Special Defense by 1 stage each.", shortDesc: "10% chance to lower the foe(s) Sp. Def by 1.", id: "acid", name: "Acid", pp: 30, priority: 0, secondary: { chance: 10, boosts: { spd: -1 } }, target: "allAdjacentFoes", type: "Poison" }, "acidarmor": { num: 151, accuracy: true, basePower: 0, category: "Status", desc: "Raises the user's Defense by 2 stages.", shortDesc: "Boosts the user's Defense by 2.", id: "acidarmor", isViable: true, name: "Acid Armor", pp: 20, priority: 0, isSnatchable: true, boosts: { def: 2 }, secondary: false, target: "self", type: "Poison" }, "acidspray": { num: 491, accuracy: 100, basePower: 40, category: "Special", desc: "Deals damage to one adjacent target with a 100% chance to lower its Special Defense by 2 stages.", shortDesc: "100% chance to lower the target's Sp. Def by 2.", id: "acidspray", isViable: true, name: "Acid Spray", pp: 20, priority: 0, isBullet: true, secondary: { chance: 100, boosts: { spd: -2 } }, target: "normal", type: "Poison" }, "acrobatics": { num: 512, accuracy: 100, basePower: 55, basePowerCallback: function(pokemon) { if (!pokemon.item) { this.debug("Power doubled for no item"); return 110; } return 55; }, category: "Physical", desc: "Deals damage to one adjacent or non-adjacent target. Power doubles if the user has no held item. Makes contact.", shortDesc: "Power doubles if the user has no held item.", id: "acrobatics", isViable: true, name: "Acrobatics", pp: 15, priority: 0, isContact: true, secondary: false, target: "any", type: "Flying" }, "acupressure": { num: 367, accuracy: true, basePower: 0, category: "Status", desc: "Raises a random stat by 2 stages as long as the stat is not already at stage 6. The user can choose to use this move on itself or an adjacent ally. Fails if no stat stage can be raised or if used on an ally with a Substitute. This move ignores Protect and Detect.", shortDesc: "Boosts a random stat of the user or an ally by 2.", id: "acupressure", name: "Acupressure", pp: 30, priority: 0, isNotProtectable: true, onHit: function(target) { var stats = []; for (var i in target.boosts) { if (target.boosts[i] < 6) { stats.push(i); } } if (stats.length) { var i = stats[this.random(stats.length)]; var boost = {}; boost[i] = 2; this.boost(boost); } else { return false; } }, secondary: false, target: "adjacentAllyOrSelf", type: "Normal" }, "aerialace": { num: 332, accuracy: true, basePower: 60, category: "Physical", desc: "Deals damage to one adjacent or non-adjacent target and does not check accuracy. Makes contact.", shortDesc: "This move does not check accuracy.", id: "aerialace", isViable: true, name: "Aerial Ace", pp: 20, priority: 0, isContact: true, secondary: false, target: "any", type: "Flying" }, "aeroblast": { num: 177, accuracy: 95, basePower: 100, category: "Special", desc: "Deals damage to one adjacent or non-adjacent target with a higher chance for a critical hit.", shortDesc: "High critical hit ratio.", id: "aeroblast", isViable: true, name: "Aeroblast", pp: 5, priority: 0, critRatio: 2, secondary: false, target: "any", type: "Flying" }, "afteryou": { num: 495, accuracy: true, basePower: 0, category: "Status", desc: "Causes one adjacent target to take its turn immediately after the user this turn, no matter the priority of its selected move. Fails if the target would have moved next anyway, or if the target already moved this turn. This move ignores Protect and Detect. Ignores a target's Substitute.", shortDesc: "The target makes its move right after the user.", id: "afteryou", name: "After You", pp: 15, priority: 0, isNotProtectable: true, onHit: function(target) { if (target.side.active.length < 2) return false; // fails in singles var decision = this.willMove(target); if (decision) { this.cancelMove(target); this.queue.unshift(decision); this.add('-activate', target, 'move: After You'); } else { return false; } }, secondary: false, target: "normal", type: "Normal" }, "agility": { num: 97, accuracy: true, basePower: 0, category: "Status", desc: "Raises the user's Speed by 2 stages.", shortDesc: "Boosts the user's Speed by 2.", id: "agility", isViable: true, name: "Agility", pp: 30, priority: 0, isSnatchable: true, boosts: { spe: 2 }, secondary: false, target: "self", type: "Psychic" }, "aircutter": { num: 314, accuracy: 95, basePower: 60, category: "Special", desc: "Deals damage to all adjacent foes with a higher chance for a critical hit.", shortDesc: "High critical hit ratio. Hits adjacent foes.", id: "aircutter", name: "Air Cutter", pp: 25, priority: 0, critRatio: 2, secondary: false, target: "allAdjacentFoes", type: "Flying" }, "airslash": { num: 403, accuracy: 95, basePower: 75, category: "Special", desc: "Deals damage to one adjacent or non-adjacent target with a 30% chance to flinch it.", shortDesc: "30% chance to flinch the target.", id: "airslash", isViable: true, name: "Air Slash", pp: 15, priority: 0, secondary: { chance: 30, volatileStatus: 'flinch' }, target: "any", type: "Flying" }, "allyswitch": { num: 502, accuracy: true, basePower: 0, category: "Status", desc: "The user swaps positions with its ally on the far side of the field. Fails if there is no Pokemon at that position, if the user is the only Pokemon on its side, or if the user is in the middle. Priority +1.", shortDesc: "Switches position with the ally on the far side.", id: "allyswitch", name: "Ally Switch", pp: 15, priority: 1, onTryHit: function(source) { if (source.side.active.length === 1) return false; if (source.side.active.length === 3 && source.position === 1) return false; }, onHit: function(pokemon) { var newPosition = (pokemon.position === 0 ? pokemon.side.active.length - 1 : 0); if (!pokemon.side.active[newPosition]) return false; if (pokemon.side.active[newPosition].fainted) return false; this.swapPosition(pokemon, newPosition, 'move: Ally Switch'); }, secondary: false, target: "self", type: "Psychic" }, "amnesia": { num: 133, accuracy: true, basePower: 0, category: "Status", desc: "Raises the user's Special Defense by 2 stages.", shortDesc: "Boosts the user's Sp. Def by 2.", id: "amnesia", isViable: true, name: "Amnesia", pp: 20, priority: 0, isSnatchable: true, boosts: { spd: 2 }, secondary: false, target: "self", type: "Psychic" }, "ancientpower": { num: 246, accuracy: 100, basePower: 60, category: "Special", desc: "Deals damage to one adjacent target with a 10% chance to raise the user's Attack, Defense, Speed, Special Attack, and Special Defense by 1 stage.", shortDesc: "10% chance to boost all stats by 1 (not acc/eva).", id: "ancientpower", name: "Ancient Power", pp: 5, priority: 0, secondary: { chance: 10, self: { boosts: { atk: 1, def: 1, spa: 1, spd: 1, spe: 1 } } }, target: "normal", type: "Rock" }, "aquajet": { num: 453, accuracy: 100, basePower: 40, category: "Physical", desc: "Deals damage to one adjacent target. Makes contact. Priority +1.", shortDesc: "Usually goes first.", id: "aquajet", isViable: true, name: "Aqua Jet", pp: 20, priority: 1, isContact: true, secondary: false, target: "normal", type: "Water" }, "aquaring": { num: 392, accuracy: true, basePower: 0, category: "Status", desc: "The user has 1/16 of its maximum HP restored at the end of each turn while it remains active. If the user uses Baton Pass, the replacement will still receive the healing effect.", shortDesc: "User recovers 1/16 max HP per turn.", id: "aquaring", name: "Aqua Ring", pp: 20, priority: 0, isSnatchable: true, volatileStatus: 'aquaring', effect: { onStart: function(pokemon) { this.add('-start', pokemon, 'Aqua Ring'); }, onResidualOrder: 6, onResidual: function(pokemon) { this.heal(pokemon.maxhp/16); } }, secondary: false, target: "self", type: "Water" }, "aquatail": { num: 401, accuracy: 90, basePower: 90, category: "Physical", desc: "Deals damage to one adjacent target. Makes contact.", shortDesc: "No additional effect.", id: "aquatail", isViable: true, name: "Aqua Tail", pp: 10, priority: 0, isContact: true, secondary: false, target: "normal", type: "Water" }, "armthrust": { num: 292, accuracy: 100, basePower: 15, category: "Physical", desc: "Deals damage to one adjacent target and hits two to five times. Has a 1/3 chance to hit two or three times, and a 1/6 chance to hit four or five times. If one of the hits breaks the target's Substitute, it will take damage for the remaining hits. If the user has the Ability Skill Link, this move will always hit five times. Makes contact.", shortDesc: "Hits 2-5 times in one turn.", id: "armthrust", name: "Arm Thrust", pp: 20, priority: 0, isContact: true, multihit: [2,5], secondary: false, target: "normal", type: "Fighting" }, "aromatherapy": { num: 312, accuracy: true, basePower: 0, category: "Status", desc: "Every Pokemon in the user's party is cured of its major status problem.", shortDesc: "Cures the user's party of all status conditions.", id: "aromatherapy", isViable: true, name: "Aromatherapy", pp: 5, priority: 0, isSnatchable: true, onHit: function(pokemon, source) { var side = pokemon.side; for (var i=0; i 0 && pokemon.lastAttackedBy && pokemon.lastAttackedBy.thisTurn) { this.debug('Boosted for getting hit by '+pokemon.lastAttackedBy.move); return 120; } return 60; }, category: "Physical", desc: "Deals damage to one adjacent target. Power doubles if the user was hit by that target this turn. Makes contact. Priority -4.", shortDesc: "Power doubles if user is damaged by the target.", id: "avalanche", isViable: true, name: "Avalanche", pp: 10, priority: -4, isContact: true, secondary: false, target: "normal", type: "Ice" }, "babydolleyes": { num: 608, accuracy: 100, basePower: 0, category: "Status", desc: "Lowers the target's Attack by 1 stage. Priority +1.", shortDesc: "Lowers foe's Attack by 1. Priority +1.", id: "babydolleyes", name: "Baby-Doll Eyes", pp: 30, priority: 1, boosts: { atk: -1 }, secondary: false, target: "normal", type: "Fairy" }, "barrage": { num: 140, accuracy: 85, basePower: 15, category: "Physical", desc: "Deals damage to one adjacent target and hits two to five times. Has a 1/3 chance to hit two or three times, and a 1/6 chance to hit four or five times. If one of the hits breaks the target's Substitute, it will take damage for the remaining hits. If the user has the Ability Skill Link, this move will always hit five times.", shortDesc: "Hits 2-5 times in one turn.", id: "barrage", name: "Barrage", pp: 20, priority: 0, isBullet: true, multihit: [2,5], secondary: false, target: "normal", type: "Normal" }, "barrier": { num: 112, accuracy: true, basePower: 0, category: "Status", desc: "Raises the user's Defense by 2 stages.", shortDesc: "Boosts the user's Defense by 2.", id: "barrier", isViable: true, name: "Barrier", pp: 20, priority: 0, isSnatchable: true, boosts: { def: 2 }, secondary: false, target: "self", type: "Psychic" }, "batonpass": { num: 226, accuracy: true, basePower: 0, category: "Status", desc: "The user is replaced with another Pokemon in its party. The selected Pokemon has the user's stat stage changes, confusion, and certain move effects transferred to it.", shortDesc: "User switches, passing stat changes and more.", id: "batonpass", isViable: true, name: "Baton Pass", pp: 40, priority: 0, selfSwitch: 'copyvolatile', secondary: false, target: "self", type: "Normal" }, "beatup": { num: 251, accuracy: 100, basePower: 0, basePowerCallback: function(pokemon, target) { pokemon.addVolatile('beatup'); if (!pokemon.side.pokemon[pokemon.volatiles.beatup.index]) return null; return 5 + Math.floor(pokemon.side.pokemon[pokemon.volatiles.beatup.index].template.baseStats.atk / 10); }, category: "Physical", desc: "Deals damage to one adjacent target and hits one time for the user and one time for each unfainted Pokemon without a major status problem in the user's party. The power of each hit is equal to 5+(X/10), where X is each participating Pokemon's base Attack; each hit is considered to come from the user.", shortDesc: "All healthy allies aid in damaging the target.", id: "beatup", name: "Beat Up", pp: 10, priority: 0, multihit: 6, effect: { duration: 1, onStart: function(pokemon) { this.effectData.index = 0; while (pokemon.side.pokemon[this.effectData.index] !== pokemon && (!pokemon.side.pokemon[this.effectData.index] || pokemon.side.pokemon[this.effectData.index].fainted || pokemon.side.pokemon[this.effectData.index].status)) { this.effectData.index++; } }, onRestart: function(pokemon) { do { this.effectData.index++; if (this.effectData.index >= 6) break; } while (!pokemon.side.pokemon[this.effectData.index] || pokemon.side.pokemon[this.effectData.index].fainted || pokemon.side.pokemon[this.effectData.index].status); } }, secondary: false, target: "normal", type: "Dark" }, "belch": { num: 562, accuracy: 90, basePower: 120, category: "Special", desc: "The user must eat a Berry to use this move.", shortDesc: "User must eat a Berry to use this move.", id: "belch", name: "Belch", pp: 10, priority: 0, onTryHit: function(target, pokemon) { if (!pokemon.ateBerry) { return false; } }, secondary: false, target: "normal", type: "Poison" }, "bellydrum": { num: 187, accuracy: true, basePower: 0, category: "Status", desc: "Raises the user's Attack to stage 6 in exchange for the user losing 1/2 of its maximum HP, rounded down. Fails if the user would faint or if its Attack stage is already 6.", shortDesc: "User loses 50% max HP. Maximizes Attack.", id: "bellydrum", isViable: true, name: "Belly Drum", pp: 10, priority: 0, isSnatchable: true, onHit: function(target) { if (target.hp <= target.maxhp/2 || target.boosts.atk >= 6 || target.maxhp === 1) { // Shedinja clause return false; } this.directDamage(target.maxhp/2); target.setBoost({atk: 6}); this.add('-setboost', target, 'atk', '6', '[from] move: Belly Drum'); }, secondary: false, target: "self", type: "Normal" }, "bestow": { num: 516, accuracy: true, basePower: 0, category: "Status", desc: "Causes one adjacent target to receive the user's held item. Fails if the target is already holding an item or if the user is holding a Mail.", shortDesc: "User passes its held item to the target.", id: "bestow", name: "Bestow", pp: 15, priority: 0, onHit: function(target, source) { if (target.item) { return false; } var yourItem = source.takeItem(); if (!yourItem) { return false; } if (!target.setItem(yourItem)) { source.item = yourItem; return false; } this.add('-item', target, yourItem.name, '[from] move: Bestow', '[of] '+source); }, secondary: false, target: "normal", type: "Normal" }, "bide": { num: 117, accuracy: true, basePower: 0, category: "Physical", desc: "The user spends two turns locked into this move and then, on the second turn after using this move, the user attacks the last Pokemon that hit it, inflicting double the damage in HP it lost during the two turns. If the last Pokemon that hit it is no longer on the field, the user attacks a random foe instead. If the user is prevented from moving during this move's use, the effect ends. This move does not check accuracy. Makes contact. Priority +1.", shortDesc: "Waits 2 turns; deals double the damage taken.", id: "bide", name: "Bide", pp: 10, priority: 1, isContact: true, volatileStatus: 'bide', affectedByImmunities: false, effect: { duration: 3, onLockMove: 'bide', onStart: function(pokemon) { this.effectData.totalDamage = 0; this.add('-start', pokemon, 'Bide'); }, onDamagePriority: -101, onDamage: function(damage, target, source, move) { if (!move || move.effectType !== 'Move') return; if (!source || source.side === target.side) return; this.effectData.totalDamage += damage; this.effectData.sourcePosition = source.position; this.effectData.sourceSide = source.side; }, onAfterSetStatus: function(status, pokemon) { if (status.id === 'slp') { pokemon.removeVolatile('bide'); } }, onBeforeMove: function(pokemon) { if (this.effectData.duration === 1) { if (!this.effectData.totalDamage) { this.add('-end', pokemon, 'Bide'); this.add('-fail', pokemon); return false; } this.add('-end', pokemon, 'Bide'); var target = this.effectData.sourceSide.active[this.effectData.sourcePosition]; if (!target.runImmunity('Normal')) { this.add('-immune', target, '[msg]'); return false; } this.moveHit(target, pokemon, 'bide', {damage: this.effectData.totalDamage*2}); return false; } this.add('-activate', pokemon, 'Bide'); return false; } }, secondary: false, target: "self", type: "Normal" }, "bind": { num: 20, accuracy: 85, basePower: 15, category: "Physical", desc: "Deals damage to one adjacent target and prevents it from switching for four or five turns; seven turns if the user is holding Grip Claw. Causes damage to the target equal to 1/8 of its maximum HP (1/6 if the user is holding Binding Band), rounded down, at the end of each turn during effect. The target can still switch out if it is holding Shed Shell or uses Baton Pass, U-turn, or Volt Switch. The effect ends if either the user or the target leaves the field, or if the target uses Rapid Spin. This effect is not stackable or reset by using this or another partial-trapping move. Makes contact.", shortDesc: "Traps and damages the target for 4-5 turns.", id: "bind", name: "Bind", pp: 20, priority: 0, isContact: true, volatileStatus: 'partiallytrapped', secondary: false, target: "normal", type: "Normal" }, "bite": { num: 44, accuracy: 100, basePower: 60, category: "Physical", desc: "Deals damage to one adjacent target with a 30% chance to flinch it. Makes contact.", shortDesc: "30% chance to flinch the target.", id: "bite", name: "Bite", pp: 25, priority: 0, isContact: true, isBiteAttack: true, secondary: { chance: 30, volatileStatus: 'flinch' }, target: "normal", type: "Dark" }, "blastburn": { num: 307, accuracy: 90, basePower: 150, category: "Special", desc: "Deals damage to one adjacent target. If this move is successful, the user must recharge on the following turn and cannot make a move.", shortDesc: "User cannot move next turn.", id: "blastburn", name: "Blast Burn", pp: 5, priority: 0, self: { volatileStatus: 'mustrecharge' }, secondary: false, target: "normal", type: "Fire" }, "blazekick": { num: 299, accuracy: 90, basePower: 85, category: "Physical", desc: "Deals damage to one adjacent target with a 10% chance to burn it and a higher chance for a critical hit. Makes contact.", shortDesc: "High critical hit ratio. 10% chance to burn.", id: "blazekick", isViable: true, name: "Blaze Kick", pp: 10, priority: 0, isContact: true, critRatio: 2, secondary: { chance: 10, status: 'brn' }, target: "normal", type: "Fire" }, "blizzard": { num: 59, accuracy: 70, basePower: 110, category: "Special", desc: "Deals damage to all adjacent foes with a 10% chance to freeze each. If the weather is Hail, this move cannot miss.", shortDesc: "10% chance to freeze the foe(s).", id: "blizzard", isViable: true, name: "Blizzard", pp: 5, priority: 0, onModifyMove: function(move) { if (this.isWeather('hail')) move.accuracy = true; }, secondary: { chance: 10, status: 'frz' }, target: "allAdjacentFoes", type: "Ice" }, "block": { num: 335, accuracy: true, basePower: 0, category: "Status", desc: "Prevents one adjacent target from switching out. The target can still switch out if it is holding Shed Shell or uses Baton Pass, U-turn, or Volt Switch. If the target leaves the field using Baton Pass, the replacement will remain trapped. The effect ends if the user leaves the field. Pokemon protected by Magic Coat or the Ability Magic Bounce are unaffected and instead use this move themselves.", shortDesc: "The target cannot switch out.", id: "block", isViable: true, name: "Block", pp: 5, priority: 0, isBounceable: true, onHit: function(target) { if (!target.addVolatile('trapped')) { this.add('-fail', target); } }, secondary: false, target: "normal", type: "Normal" }, "blueflare": { num: 551, accuracy: 85, basePower: 130, category: "Special", desc: "Deals damage to one adjacent target with a 20% chance to burn it.", shortDesc: "20% chance to burn the target.", id: "blueflare", isViable: true, name: "Blue Flare", pp: 5, priority: 0, secondary: { chance: 20, status: 'brn' }, target: "normal", type: "Fire" }, "bodyslam": { num: 34, accuracy: 100, basePower: 85, category: "Physical", desc: "Deals damage to one adjacent target with a 30% chance to paralyze it. Makes contact.", shortDesc: "30% chance to paralyze the target.", id: "bodyslam", isViable: true, name: "Body Slam", pp: 15, priority: 0, isContact: true, secondary: { chance: 30, status: 'par' }, target: "normal", type: "Normal" }, "boltstrike": { num: 550, accuracy: 85, basePower: 130, category: "Physical", desc: "Deals damage to one adjacent target with a 20% chance to paralyze it. Makes contact.", shortDesc: "20% chance to paralyze the target.", id: "boltstrike", isViable: true, name: "Bolt Strike", pp: 5, priority: 0, isContact: true, secondary: { chance: 20, status: 'par' }, target: "normal", type: "Electric" }, "boneclub": { num: 125, accuracy: 85, basePower: 65, category: "Physical", desc: "Deals damage to one adjacent target with a 10% chance to flinch it.", shortDesc: "10% chance to flinch the target.", id: "boneclub", name: "Bone Club", pp: 20, priority: 0, secondary: { chance: 10, volatileStatus: 'flinch' }, target: "normal", type: "Ground" }, "bonerush": { num: 198, accuracy: 90, basePower: 25, category: "Physical", desc: "Deals damage to one adjacent target and hits two to five times. Has a 1/3 chance to hit two or three times, and a 1/6 chance to hit four or five times. If one of the hits breaks the target's Substitute, it will take damage for the remaining hits. If the user has the Ability Skill Link, this move will always hit five times.", shortDesc: "Hits 2-5 times in one turn.", id: "bonerush", isViable: true, name: "Bone Rush", pp: 10, priority: 0, multihit: [2,5], secondary: false, target: "normal", type: "Ground" }, "bonemerang": { num: 155, accuracy: 90, basePower: 50, category: "Physical", desc: "Deals damage to one adjacent target and hits twice. If the first hit breaks the target's Substitute, it will take damage for the second hit.", shortDesc: "Hits 2 times in one turn.", id: "bonemerang", isViable: true, name: "Bonemerang", pp: 10, priority: 0, multihit: 2, secondary: false, target: "normal", type: "Ground" }, "boomburst": { num: 586, accuracy: 100, basePower: 140, category: "Special", desc: "Deals damage to all Pokemon within range, including any allies.", shortDesc: "Hits adjacent Pokemon, including allies.", id: "boomburst", name: "Boomburst", pp: 10, priority: 0, isSoundBased: true, secondary: false, target: "allAdjacent", type: "Normal" }, "bounce": { num: 340, accuracy: 85, basePower: 85, category: "Physical", desc: "Deals damage to one adjacent or non-adjacent target with a 30% chance to paralyze it. This attack charges on the first turn and strikes on the second. On the first turn, the user avoids all attacks other than Gust, Hurricane, Sky Uppercut, Smack Down, Thunder, and Twister. The user cannot make a move between turns. If the user is holding a Power Herb, the move completes in one turn. This move cannot be used while Gravity is in effect. Makes contact.", shortDesc: "Bounces turn 1. Hits turn 2. 30% paralyze.", id: "bounce", isViable: true, name: "Bounce", pp: 5, priority: 0, isContact: true, isTwoTurnMove: true, onTry: function(attacker, defender, move) { if (attacker.removeVolatile(move.id)) { return; } this.add('-prepare', attacker, move.name, defender); if (!this.runEvent('ChargeMove', attacker, defender, move)) { this.add('-anim', attacker, move.name, defender); return; } attacker.addVolatile(move.id, defender); return null; }, effect: { duration: 2, onLockMove: 'bounce', onAccuracy: function(accuracy, target, source, move) { if (move.id === 'gust' || move.id === 'twister') { return; } if (move.id === 'skyuppercut' || move.id === 'thunder' || move.id === 'hurricane' || move.id === 'smackdown' || move.id === 'helpinghand') { return; } return 0; }, onSourceBasePower: function(basePower, target, source, move) { if (move.id === 'gust' || move.id === 'twister') { return this.chainModify(2); } } }, secondary: { chance: 30, status: 'par' }, target: "any", type: "Flying" }, "bravebird": { num: 413, accuracy: 100, basePower: 120, category: "Physical", desc: "Deals damage to one adjacent or non-adjacent target. If the target lost HP, the user takes recoil damage equal to 33% that HP, rounded half up, but not less than 1HP. Makes contact.", shortDesc: "Has 33% recoil.", id: "bravebird", isViable: true, name: "Brave Bird", pp: 15, priority: 0, isContact: true, recoil: [33,100], secondary: false, target: "any", type: "Flying" }, "brickbreak": { num: 280, accuracy: 100, basePower: 75, category: "Physical", desc: "Deals damage to one adjacent target. If this attack does not miss, the effects of Reflect and Light Screen end for the target's side of the field before damage is calculated. Makes contact.", shortDesc: "Destroys screens, unless the target is immune.", id: "brickbreak", isViable: true, name: "Brick Break", pp: 15, priority: 0, isContact: true, onTryHit: function(pokemon) { // will shatter screens through sub, before you hit if (pokemon.runImmunity('Fighting')) { pokemon.side.removeSideCondition('reflect'); pokemon.side.removeSideCondition('lightscreen'); } }, secondary: false, target: "normal", type: "Fighting" }, "brine": { num: 362, accuracy: 100, basePower: 65, category: "Special", desc: "Deals damage to one adjacent target. Power doubles if the target has less than or equal to half of its maximum HP remaining.", shortDesc: "Power doubles if the target's HP is 50% or less.", id: "brine", name: "Brine", pp: 10, priority: 0, onBasePowerPriority: 4, onBasePower: function(basePower, pokemon, target) { if (target.hp * 2 < target.maxhp) { return this.chainModify(2); } }, secondary: false, target: "normal", type: "Water" }, "bubble": { num: 145, accuracy: 100, basePower: 40, category: "Special", desc: "Deals damage to all adjacent foes with a 10% chance to lower their Speed by 1 stage each.", shortDesc: "10% chance to lower the foe(s) Speed by 1.", id: "bubble", name: "Bubble", pp: 30, priority: 0, secondary: { chance: 10, boosts: { spe: -1 } }, target: "allAdjacentFoes", type: "Water" }, "bubblebeam": { num: 61, accuracy: 100, basePower: 65, category: "Special", desc: "Deals damage to one adjacent target with a 10% chance to lower its Speed by 1 stage.", shortDesc: "10% chance to lower the target's Speed by 1.", id: "bubblebeam", name: "Bubble Beam", pp: 20, priority: 0, secondary: { chance: 10, boosts: { spe: -1 } }, target: "normal", type: "Water" }, "bugbite": { num: 450, accuracy: 100, basePower: 60, category: "Physical", desc: "Deals damage to one adjacent target. If this move is successful and the user has not fainted, it steals the target's held Berry if it is holding one and uses it immediately. Makes contact.", shortDesc: "User steals and eats the target's Berry.", id: "bugbite", name: "Bug Bite", pp: 20, priority: 0, isContact: true, onHit: function(target, source) { var item = target.getItem(); if (source.hp && item.isBerry && target.takeItem(source)) { this.add('-enditem', target, item.name, '[from] stealeat', '[move] Bug Bite', '[of] '+source); this.singleEvent('Eat', item, null, source, null, null); source.ateBerry = true; } }, secondary: false, target: "normal", type: "Bug" }, "bugbuzz": { num: 405, accuracy: 100, basePower: 90, category: "Special", desc: "Deals damage to one adjacent target with a 10% chance to lower its Special Defense by 1 stage. Pokemon with the Ability Soundproof are immune.", shortDesc: "10% chance to lower the target's Sp. Def. by 1.", id: "bugbuzz", isViable: true, name: "Bug Buzz", pp: 10, priority: 0, isSoundBased: true, secondary: { chance: 10, boosts: { spd: -1 } }, target: "normal", type: "Bug" }, "bulkup": { num: 339, accuracy: true, basePower: 0, category: "Status", desc: "Raises the user's Attack and Defense by 1 stage.", shortDesc: "Boosts the user's Attack and Defense by 1.", id: "bulkup", isViable: true, name: "Bulk Up", pp: 20, priority: 0, isSnatchable: true, boosts: { atk: 1, def: 1 }, secondary: false, target: "self", type: "Fighting" }, "bulldoze": { num: 523, accuracy: 100, basePower: 60, category: "Physical", desc: "Deals damage to all adjacent Pokemon with a 100% chance to lower their Speed by 1 stage each.", shortDesc: "100% chance to lower adjacent Pkmn Speed by 1.", id: "bulldoze", name: "Bulldoze", pp: 20, priority: 0, secondary: { chance: 100, boosts: { spe: -1 } }, target: "allAdjacent", type: "Ground" }, "bulletpunch": { num: 418, accuracy: 100, basePower: 40, category: "Physical", desc: "Deals damage to one adjacent target. Makes contact. Damage is boosted to 1.2x by the Ability Iron Fist. Priority +1.", shortDesc: "Usually goes first.", id: "bulletpunch", isViable: true, name: "Bullet Punch", pp: 30, priority: 1, isContact: true, isPunchAttack: true, secondary: false, target: "normal", type: "Steel" }, "bulletseed": { num: 331, accuracy: 100, basePower: 25, category: "Physical", desc: "Deals damage to one adjacent target and hits two to five times. Has a 1/3 chance to hit two or three times, and a 1/6 chance to hit four or five times. If one of the hits breaks the target's Substitute, it will take damage for the remaining hits. If the user has the Ability Skill Link, this move will always hit five times.", shortDesc: "Hits 2-5 times in one turn.", id: "bulletseed", isViable: true, name: "Bullet Seed", pp: 30, priority: 0, isBullet: true, multihit: [2,5], secondary: false, target: "normal", type: "Grass" }, "calmmind": { num: 347, accuracy: true, basePower: 0, category: "Status", desc: "Raises the user's Special Attack and Special Defense by 1 stage.", shortDesc: "Boosts the user's Sp. Atk and Sp. Def by 1.", id: "calmmind", isViable: true, name: "Calm Mind", pp: 20, priority: 0, isSnatchable: true, boosts: { spa: 1, spd: 1 }, secondary: false, target: "self", type: "Psychic" }, "camouflage": { num: 293, accuracy: true, basePower: 0, category: "Status", desc: "The user's type changes based on the battle terrain: Electric in Electric Terrain, Grass in Grassy Terrain, Fairy in Misty Terrain, and Normal in plain terrain. Fails if the user's type cannot be changed or if the user is already purely that type.", shortDesc: "Changes user's type by terrain (default Normal).", id: "camouflage", name: "Camouflage", pp: 20, priority: 0, isSnatchable: true, onHit: function(target) { var newType = 'Normal'; if (this.isTerrain('electricterrain')) newType = 'Electric'; else if (this.isTerrain('grassyterrain')) newType = 'Grass'; else if (this.isTerrain('mistyterrain')) newType = 'Fairy'; if (!target.setType(newType)) return false; this.add('-start', target, 'typechange', newType); }, secondary: false, target: "self", type: "Normal" }, "captivate": { num: 445, accuracy: 100, basePower: 0, category: "Status", desc: "Lowers all adjacent foes' Special Attack by 2 stages. A target is unaffected if both the user and the target are the same gender, or if either is genderless. Pokemon protected by Magic Coat or the Ability Magic Bounce are unaffected and instead use this move themselves. Pokemon with the Ability Oblivious are immune.", shortDesc: "Lowers the foe(s) Sp. Atk by 2 if opposite gender.", id: "captivate", name: "Captivate", pp: 20, priority: 0, onTryHit: function(pokemon, source) { if ((pokemon.gender === 'M' && source.gender === 'F') || (pokemon.gender === 'F' && source.gender === 'M')) { return; } return false; }, boosts: { spa: -2 }, secondary: false, target: "allAdjacentFoes", type: "Normal" }, "celebrate": { num: -6, gen: 6, accuracy: true, basePower: 0, category: "Status", desc: "No in-game effect.", shortDesc: "No in-game effect.", id: "celebrate", name: "Celebrate", pp: 40, priority: 0, onTryHit: function(target, source) { this.add('-activate', target, 'move: Celebrate'); return null; }, secondary: false, target: "self", type: "Normal" }, "charge": { num: 268, accuracy: true, basePower: 0, category: "Status", desc: "Raises the user's Special Defense by 1 stage. If the user chooses to use an Electric-type attack on the next turn, its power will be doubled.", shortDesc: "Boosts next Electric move and user's Sp. Def by 1.", id: "charge", name: "Charge", pp: 20, priority: 0, isSnatchable: true, volatileStatus: 'charge', onHit: function(pokemon) { this.add('-activate', pokemon, 'move: Charge'); }, effect: { duration: 2, onRestart: function(pokemon) { this.effectData.duration = 2; }, onBasePowerPriority: 3, onBasePower: function(basePower, attacker, defender, move) { if (move.type === 'Electric') { this.debug('charge boost'); return this.chainModify(2); } } }, boosts: { spd: 1 }, secondary: false, target: "self", type: "Electric" }, "chargebeam": { num: 451, accuracy: 90, basePower: 50, category: "Special", desc: "Deals damage to one adjacent target with a 70% chance to raise the user's Special Attack by 1 stage.", shortDesc: "70% chance to boost the user's Sp. Atk by 1.", id: "chargebeam", isViable: true, name: "Charge Beam", pp: 10, priority: 0, secondary: { chance: 70, self: { boosts: { spa: 1 } } }, target: "normal", type: "Electric" }, "charm": { num: 204, accuracy: 100, basePower: 0, category: "Status", desc: "Lowers one adjacent target's Attack by 2 stages. Pokemon protected by Magic Coat or the Ability Magic Bounce are unaffected and instead use this move themselves.", shortDesc: "Lowers the target's Attack by 2.", id: "charm", name: "Charm", pp: 20, priority: 0, boosts: { atk: -2 }, secondary: false, target: "normal", type: "Fairy" }, "chatter": { num: 448, accuracy: 100, basePower: 65, category: "Special", desc: "Deals damage to one adjacent or non-adjacent target with a 100% chance to confuse it.", shortDesc: "100% chance to confuse the target.", id: "chatter", name: "Chatter", pp: 20, priority: 0, isSoundBased: true, onModifyMove: function(move, pokemon) { if (pokemon.template.species !== 'Chatot') delete move.secondaries; }, secondary: { chance: 100, volatileStatus: 'confusion' }, target: "any", type: "Flying" }, "chipaway": { num: 498, accuracy: 100, basePower: 70, category: "Physical", desc: "Deals damage to one adjacent target and ignores the target's stat stage changes, including evasion. Makes contact.", shortDesc: "Ignores the target's stat stage changes.", id: "chipaway", name: "Chip Away", pp: 20, priority: 0, isContact: true, ignoreDefensive: true, ignoreEvasion: true, secondary: false, target: "normal", type: "Normal" }, "circlethrow": { num: 509, accuracy: 90, basePower: 60, category: "Physical", desc: "Deals damage to one adjacent target. If both the user and the target have not fainted, the target is forced to switch out and be replaced with a random unfainted ally. This effect fails if the target used Ingrain previously, has the Ability Suction Cups, or has a Substitute. Makes contact. Priority -6. (Wild battles: The battle ends as long as it is not a double battle and the user's level is not less than the opponent's level.)", shortDesc: "Forces the target to switch to a random ally.", id: "circlethrow", isViable: true, name: "Circle Throw", pp: 10, priority: -6, isContact: true, forceSwitch: true, target: "normal", type: "Fighting" }, "clamp": { num: 128, accuracy: 85, basePower: 35, category: "Physical", desc: "Deals damage to one adjacent target and prevents it from switching for four or five turns; seven turns if the user is holding Grip Claw. Causes damage to the target equal to 1/8 of its maximum HP (1/6 if the user is holding Binding Band), rounded down, at the end of each turn during effect. The target can still switch out if it is holding Shed Shell or uses Baton Pass, U-turn, or Volt Switch. The effect ends if either the user or the target leaves the field, or if the target uses Rapid Spin. This effect is not stackable or reset by using this or another partial-trapping move. Makes contact.", shortDesc: "Traps and damages the target for 4-5 turns.", id: "clamp", name: "Clamp", pp: 15, priority: 0, isContact: true, volatileStatus: 'partiallytrapped', secondary: false, target: "normal", type: "Water" }, "clearsmog": { num: 499, accuracy: true, basePower: 50, category: "Special", desc: "Deals damage to one adjacent target and eliminates all of its stat stage changes.", shortDesc: "Eliminates the target's stat changes.", id: "clearsmog", isViable: true, name: "Clear Smog", pp: 15, priority: 0, onHit: function(target) { target.clearBoosts(); this.add('-clearboost',target); }, secondary: false, target: "normal", type: "Poison" }, "closecombat": { num: 370, accuracy: 100, basePower: 120, category: "Physical", desc: "Deals damage to one adjacent target and lowers the user's Defense and Special Defense by 1 stage. Makes contact.", shortDesc: "Lowers the user's Defense and Sp. Def by 1.", id: "closecombat", isViable: true, name: "Close Combat", pp: 5, priority: 0, isContact: true, self: { boosts: { def: -1, spd: -1 } }, secondary: false, target: "normal", type: "Fighting" }, "coil": { num: 489, accuracy: true, basePower: 0, category: "Status", desc: "Raises the user's Attack, Defense, and accuracy by 1 stage.", shortDesc: "Boosts user's Attack, Defense, and accuracy by 1.", id: "coil", isViable: true, name: "Coil", pp: 20, priority: 0, isSnatchable: true, boosts: { atk: 1, def: 1, accuracy: 1 }, secondary: false, target: "self", type: "Poison" }, "cometpunch": { num: 4, accuracy: 85, basePower: 18, category: "Physical", desc: "Deals damage to one adjacent target and hits two to five times. Has a 1/3 chance to hit two or three times, and a 1/6 chance to hit four or five times. If one of the hits breaks the target's Substitute, it will take damage for the remaining hits. If the user has the Ability Skill Link, this move will always hit five times. Makes contact. Damage is boosted to 1.2x by the Ability Iron Fist.", shortDesc: "Hits 2-5 times in one turn.", id: "cometpunch", name: "Comet Punch", pp: 15, priority: 0, isContact: true, isPunchAttack: true, multihit: [2,5], secondary: false, target: "normal", type: "Normal" }, "confide": { num: 590, accuracy: true, basePower: 0, category: "Status", desc: "Lowers the target's Special Attack stat by 1.", shortDesc: "Lowers the target's Sp. Atk by 1.", id: "confide", name: "Confide", pp: 20, priority: 0, isNotProtectable: true, boosts: { spa: -1 }, secondary: false, target: "normal", type: "Normal" }, "confuseray": { num: 109, accuracy: 100, basePower: 0, category: "Status", desc: "Causes one adjacent target to become confused. Pokemon protected by Magic Coat or the Ability Magic Bounce are unaffected and instead use this move themselves.", shortDesc: "Confuses the target.", id: "confuseray", isViable: true, name: "Confuse Ray", pp: 10, priority: 0, volatileStatus: 'confusion', secondary: false, target: "normal", type: "Ghost" }, "confusion": { num: 93, accuracy: 100, basePower: 50, category: "Special", desc: "Deals damage to one adjacent target with a 10% chance to confuse it.", shortDesc: "10% chance to confuse the target.", id: "confusion", name: "Confusion", pp: 25, priority: 0, secondary: { chance: 10, volatileStatus: 'confusion' }, target: "normal", type: "Psychic" }, "constrict": { num: 132, accuracy: 100, basePower: 10, category: "Physical", desc: "Deals damage to one adjacent target with a 10% chance to lower its Speed by 1 stage. Makes contact.", shortDesc: "10% chance to lower the target's Speed by 1.", id: "constrict", name: "Constrict", pp: 35, priority: 0, isContact: true, secondary: { chance: 10, boosts: { spe: -1 } }, target: "normal", type: "Normal" }, "conversion": { num: 160, accuracy: true, basePower: 0, category: "Status", desc: "The user's type changes to match the original type of one of its four moves besides this move, at random, but not either of its current types. Fails if the user cannot change its type, or if this move would only be able to select one of the user's current types.", shortDesc: "Changes user's type to match a known move.", id: "conversion", name: "Conversion", pp: 30, priority: 0, isSnatchable: true, onHit: function(target) { var possibleTypes = target.moveset.map(function(val){ var move = this.getMove(val.id); if (move.id !== 'conversion' && !target.hasType(move.type)) { return move.type; } }, this).compact(); if (!possibleTypes.length) { return false; } var type = possibleTypes[this.random(possibleTypes.length)]; if (!target.setType(type)) return false; this.add('-start', target, 'typechange', type); }, secondary: false, target: "self", type: "Normal" }, "conversion2": { num: 176, accuracy: true, basePower: 0, category: "Status", desc: "The user's type changes to match a type that resists or is immune to the type of the last move used by one adjacent target, but not either of its current types. The determined type of the move is used rather than the original type. Fails if the user cannot change its type, or if this move would only be able to select one of the user's current types. This move ignores Protect and Detect. Ignores a target's Substitute.", shortDesc: "Changes user's type to resist target's last move.", id: "conversion2", name: "Conversion 2", pp: 30, priority: 0, isNotProtectable: true, onHit: function(target, source) { if (!target.lastMove) { return false; } var possibleTypes = []; var attackType = this.getMove(target.lastMove).type; for (var type in this.data.TypeChart) { if (source.hasType(type) || target.hasType(type)) continue; var typeCheck = this.data.TypeChart[type].damageTaken[attackType]; if (typeCheck === 2 || typeCheck === 3) { possibleTypes.push(type); } } if (!possibleTypes.length) { return false; } var type = possibleTypes[this.random(possibleTypes.length)]; if (!source.setType(type)) return false; this.add('-start', source, 'typechange', type); }, secondary: false, target: "normal", type: "Normal" }, "copycat": { num: 383, accuracy: true, basePower: 0, category: "Status", desc: "The user uses the last move used by any Pokemon, including itself. Fails if no move has been used, or if the last move used was Assist, Bestow, Chatter, Circle Throw, Copycat, Counter, Covet, Destiny Bond, Detect, Dragon Tail, Endure, Feint, Focus Punch, Follow Me, Helping Hand, Me First, Metronome, Mimic, Mirror Coat, Mirror Move, Nature Power, Protect, Rage Powder, Sketch, Sleep Talk, Snatch, Struggle, Switcheroo, Thief, Transform, or Trick.", shortDesc: "Uses the last move used in the battle.", id: "copycat", isViable: true, name: "Copycat", pp: 20, priority: 0, onHit: function(pokemon) { var noCopycat = {assist:1, bestow:1, chatter:1, circlethrow:1, copycat:1, counter:1, covet:1, destinybond:1, detect:1, dragontail:1, endure:1, feint:1, focuspunch:1, followme:1, helpinghand:1, mefirst:1, metronome:1, mimic:1, mirrorcoat:1, mirrormove:1, naturepower:1, protect:1, ragepowder:1, roar:1, sketch:1, sleeptalk:1, snatch:1, struggle:1, switcheroo:1, thief:1, transform:1, trick:1, whirlwind:1}; if (!this.lastMove || noCopycat[this.lastMove]) { return false; } this.useMove(this.lastMove, pokemon); }, secondary: false, target: "self", type: "Normal" }, "cosmicpower": { num: 322, accuracy: true, basePower: 0, category: "Status", desc: "Raises the user's Defense and Special Defense by 1 stage.", shortDesc: "Boosts the user's Defense and Sp. Def by 1.", id: "cosmicpower", isViable: true, name: "Cosmic Power", pp: 20, priority: 0, isSnatchable: true, boosts: { def: 1, spd: 1 }, secondary: false, target: "self", type: "Psychic" }, "cottonguard": { num: 538, accuracy: true, basePower: 0, category: "Status", desc: "Raises the user's Defense by 3 stages.", shortDesc: "Boosts the user's Defense by 3.", id: "cottonguard", isViable: true, name: "Cotton Guard", pp: 10, priority: 0, isSnatchable: true, boosts: { def: 3 }, secondary: false, target: "self", type: "Grass" }, "cottonspore": { num: 178, accuracy: 100, basePower: 0, category: "Status", desc: "Lowers one adjacent target's Speed by 2 stages. Pokemon protected by Magic Coat or the Ability Magic Bounce are unaffected and instead use this move themselves.", shortDesc: "Lowers the target's Speed by 2.", id: "cottonspore", name: "Cotton Spore", pp: 40, priority: 0, isPowder: true, boosts: { spe: -2 }, onTryHit: function(pokemon) { if (!pokemon.runImmunity('powder')) return false; }, secondary: false, target: "normal", type: "Grass" }, "counter": { num: 68, accuracy: 100, basePower: 0, damageCallback: function(pokemon) { if (pokemon.lastAttackedBy && pokemon.lastAttackedBy.thisTurn && this.getCategory(pokemon.lastAttackedBy.move) === 'Physical') { return 2 * pokemon.lastAttackedBy.damage; } return false; }, category: "Physical", desc: "Deals damage to the last foe to hit the user with a physical attack this turn. The damage is equal to twice the HP lost by the user from that attack. If that foe's position is no longer in use, damage is done to a random foe in range. Only the last hit of a multi-hit attack is counted. Fails if the user was not hit by a foe's physical attack this turn. Makes contact. Priority -5.", shortDesc: "If hit by physical attack, returns double damage.", id: "counter", isViable: true, name: "Counter", pp: 20, priority: -5, isContact: true, secondary: false, target: "scripted", type: "Fighting" }, "covet": { num: 343, accuracy: 100, basePower: 60, category: "Physical", desc: "Deals damage to one adjacent target. If the attack was successful and the user has not fainted, it steals the target's held item if the user is not holding one. Makes contact.", shortDesc: "If the user has no item, it steals the target's.", id: "covet", name: "Covet", pp: 25, priority: 0, isContact: true, onHit: function(target, source) { if (source.item) { return; } var yourItem = target.takeItem(source); if (!yourItem) { return; } if (!source.setItem(yourItem)) { target.item = yourItem.id; // bypass setItem so we don't break choicelock or anything return; } this.add('-item', source, yourItem, '[from] move: Covet', '[of] '+target); }, secondary: false, target: "normal", type: "Normal" }, "crabhammer": { num: 152, accuracy: 90, basePower: 100, category: "Physical", desc: "Deals damage to one adjacent target with a higher chance for a critical hit. Makes contact.", shortDesc: "High critical hit ratio.", id: "crabhammer", isViable: true, name: "Crabhammer", pp: 10, priority: 0, isContact: true, critRatio: 2, secondary: false, target: "normal", type: "Water" }, "craftyshield": { num: 578, accuracy: true, basePower: 0, category: "Status", desc: "Protects the user and allies from status moves. Priority +3.", shortDesc: "Protects allies from status moves this turn.", id: "craftyshield", isViable: true, name: "Crafty Shield", pp: 10, priority: 3, stallingMove: true, // Note: stallingMove is not used anywhere. volatileStatus: 'craftyshield', onTryHit: function(target, source, move) { return !!this.willAct() && this.runEvent('StallMove', target); }, onHit: function(pokemon) { pokemon.addVolatile('stall'); }, effect: { duration: 1, onStart: function(target) { this.add('-singleturn', target, 'Crafty Shield'); }, onTryHitPriority: 3, onTryHit: function(target, source, move) { if (move.breaksProtect) { target.removeVolatile('Crafty Shield'); return; } if (move && (move.target === 'self' || move.category !== 'Status')) return; this.add('-activate', target, 'Crafty Shield'); return null; } }, secondary: false, target: "self", type: "Fairy" }, "crosschop": { num: 238, accuracy: 80, basePower: 100, category: "Physical", desc: "Deals damage to one adjacent target with a higher chance for a critical hit. Makes contact.", shortDesc: "High critical hit ratio.", id: "crosschop", isViable: true, name: "Cross Chop", pp: 5, priority: 0, isContact: true, critRatio: 2, secondary: false, target: "normal", type: "Fighting" }, "crosspoison": { num: 440, accuracy: 100, basePower: 70, category: "Physical", desc: "Deals damage to one adjacent target with a 10% chance to poison it and a higher chance for a critical hit. Makes contact.", shortDesc: "High critical hit ratio. 10% chance to poison.", id: "crosspoison", isViable: true, name: "Cross Poison", pp: 20, priority: 0, isContact: true, secondary: { chance: 10, status: 'psn' }, critRatio: 2, target: "normal", type: "Poison" }, "crunch": { num: 242, accuracy: 100, basePower: 80, category: "Physical", desc: "Deals damage to one adjacent target with a 20% chance to lower its Defense by 1 stage. Makes contact.", shortDesc: "20% chance to lower the target's Defense by 1.", id: "crunch", isViable: true, name: "Crunch", pp: 15, priority: 0, isContact: true, isBiteAttack: true, secondary: { chance: 20, boosts: { def: -1 } }, target: "normal", type: "Dark" }, "crushclaw": { num: 306, accuracy: 95, basePower: 75, category: "Physical", desc: "Deals damage to one adjacent target with a 50% chance to lower its Defense by 1 stage. Makes contact.", shortDesc: "50% chance to lower the target's Defense by 1.", id: "crushclaw", name: "Crush Claw", pp: 10, priority: 0, isContact: true, secondary: { chance: 50, boosts: { def: -1 } }, target: "normal", type: "Normal" }, "crushgrip": { num: 462, accuracy: 100, basePower: 0, basePowerCallback: function(pokemon, target) { return Math.floor(Math.floor((120 * (100 * Math.floor(target.hp * 4096 / target.maxhp)) + 2048 - 1) / 4096) / 100) || 1; }, category: "Physical", desc: "Deals damage to one adjacent target. Power is equal to 120 * (target's current HP / target's maximum HP), rounded half down, but not less than 1. Makes contact.", shortDesc: "More power the more HP the target has left.", id: "crushgrip", name: "Crush Grip", pp: 5, priority: 0, isContact: true, secondary: false, target: "normal", type: "Normal" }, "curse": { num: 174, accuracy: true, basePower: 0, category: "Status", desc: "If the user is not a Ghost-type, lowers the user's Speed by 1 stage and raises the user's Attack and Defense by 1 stage. If the user is a Ghost-type, the user loses 1/2 of its maximum HP, rounded down and even if it would cause fainting, in exchange for one adjacent target losing 1/4 of its maximum HP, rounded down, at the end of each turn while it is active. If the target uses Baton Pass, the replacement will continue to be affected. Fails if there is no target or if the target is already affected. This move ignores Protect and Detect. Ignores a target's Substitute.", shortDesc: "Curses if Ghost, else +1 Atk, +1 Def, -1 Spe.", id: "curse", isViable: true, name: "Curse", pp: 10, priority: 0, isNotProtectable: true, volatileStatus: 'curse', onModifyMove: function(move, source, target) { if (!source.hasType('Ghost')) { delete move.volatileStatus; delete move.onHit; move.self = { boosts: {atk:1,def:1,spe:-1}}; move.target = move.nonGhostTarget; } }, onTryHit: function(target, source, move) { if (move.volatileStatus && target.volatiles.curse) return false; }, onHit: function(target, source) { this.directDamage(source.maxhp/2, source, source); }, effect: { onStart: function(pokemon, source) { this.add('-start', pokemon, 'Curse', '[of] '+source); }, onResidualOrder: 10, onResidual: function(pokemon) { this.damage(pokemon.maxhp/4); } }, secondary: false, target: "normal", nonGhostTarget: "self", type: "Ghost" }, "cut": { num: 15, accuracy: 95, basePower: 50, category: "Physical", desc: "Deals damage to one adjacent target. Makes contact. (Field: Can be used to cut down thin trees.)", shortDesc: "No additional effect.", id: "cut", name: "Cut", pp: 30, priority: 0, isContact: true, secondary: false, target: "normal", type: "Normal" }, "darkpulse": { num: 399, accuracy: 100, basePower: 80, category: "Special", desc: "Deals damage to one adjacent or non-adjacent target with a 20% chance to flinch it.", shortDesc: "20% chance to flinch the target.", id: "darkpulse", isViable: true, name: "Dark Pulse", pp: 15, priority: 0, isPulseMove: true, secondary: { chance: 20, volatileStatus: 'flinch' }, target: "any", type: "Dark" }, "darkvoid": { num: 464, accuracy: 80, basePower: 0, category: "Status", desc: "Puts all adjacent foes to sleep. Pokemon protected by Magic Coat or the Ability Magic Bounce are unaffected and instead use this move themselves.", shortDesc: "Puts the foe(s) to sleep.", id: "darkvoid", isViable: true, name: "Dark Void", pp: 10, priority: 0, status: 'slp', secondary: false, target: "allAdjacentFoes", type: "Dark" }, "dazzlinggleam": { num: 605, accuracy: 100, basePower: 80, category: "Special", desc: "Deals damage to all adjacent foes.", shortDesc: "No additional effect. Hits adjacent foes.", id: "dazzlinggleam", isViable: true, name: "Dazzling Gleam", pp: 10, priority: 0, secondary: false, target: "allAdjacentFoes", type: "Fairy" }, "defendorder": { num: 455, accuracy: true, basePower: 0, category: "Status", desc: "Raises the user's Defense and Special Defense by 1 stage.", shortDesc: "Boosts the user's Defense and Sp. Def by 1.", id: "defendorder", isViable: true, name: "Defend Order", pp: 10, priority: 0, isSnatchable: true, boosts: { def: 1, spd: 1 }, secondary: false, target: "self", type: "Bug" }, "defensecurl": { num: 111, accuracy: true, basePower: 0, category: "Status", desc: "Raises the user's Defense by 1 stage. As long as the user remains active, the power of the user's Ice Ball and Rollout will be doubled (this effect is not stackable).", shortDesc: "Boosts the user's Defense by 1.", id: "defensecurl", name: "Defense Curl", pp: 40, priority: 0, isSnatchable: true, boosts: { def: 1 }, volatileStatus: 'DefenseCurl', secondary: false, target: "self", type: "Normal" }, "defog": { num: 432, accuracy: true, basePower: 0, category: "Status", desc: "Lowers one adjacent target's evasion by 1 stage. Whether or not the target's evasion was affected, the effects of Safeguard, Mist, Spikes, Toxic Spikes, Stealth Rock, and Sticky Web end for the user's and the target's sides. In addition, the effects of Reflect and Light Screen will end for the target's side. Pokemon protected by Magic Coat or the Ability Magic Bounce are unaffected and instead use this move themselves. Ignores a target's Substitute, although a Substitute will still block the evasion lowering.", shortDesc: "Removes hazards from field. Lowers foe's evasion.", id: "defog", name: "Defog", pp: 15, priority: 0, isBounceable: true, onHit: function(target, source) { if (!target.volatiles['substitute']) this.boost({evasion:-1}); var sideConditions = {reflect:1, lightscreen:1, safeguard:1, mist:1, spikes:1, toxicspikes:1, stealthrock:1, stickyweb:1}; for (var i in sideConditions) { if (target.side.removeSideCondition(i)) { this.add('-sideend', target.side, this.getEffect(i).name, '[from] move: Defog', '[of] '+target); } } for (var i in sideConditions) { if (i === 'reflect' || i === 'lightscreen') continue; if (source.side.removeSideCondition(i)) { this.add('-sideend', source.side, this.getEffect(i).name, '[from] move: Defog', '[of] '+source); } } }, secondary: false, target: "normal", type: "Flying" }, "destinybond": { num: 194, accuracy: true, basePower: 0, category: "Status", desc: "Until the user's next turn, if a foe's attack knocks the user out, that foe faints as well, unless the attack was Doom Desire or Future Sight. Ignores a target's Substitute.", shortDesc: "If an opponent knocks out the user, it also faints.", id: "destinybond", isViable: true, name: "Destiny Bond", pp: 5, priority: 0, volatileStatus: 'destinybond', effect: { onStart: function(pokemon) { this.add('-singlemove', pokemon, 'Destiny Bond'); }, onFaint: function(target, source, effect) { if (!source || !effect) return; if (effect.effectType === 'Move' && !effect.isFutureMove && target.lastMove === 'destinybond') { this.add('-activate', target, 'Destiny Bond'); source.faint(); } }, onBeforeMovePriority: 100, onBeforeMove: function(pokemon) { this.debug('removing Destiny Bond before attack'); pokemon.removeVolatile('destinybond'); } }, secondary: false, target: "self", type: "Ghost" }, "detect": { num: 197, accuracy: true, basePower: 0, category: "Status", desc: "The user is protected from most attacks made by other Pokemon during this turn. This attack has a 1/X chance of being successful, where X starts at 1 and doubles each time this move is successfully used. X resets to 1 if this attack fails or if the user's last used move is not Detect, Endure, Protect, Quick Guard, or Wide Guard. If X is 256 or more, this move has a 1/(2^32) chance of being successful. Fails if the user moves last this turn. Priority +4.", shortDesc: "Prevents moves from affecting the user this turn.", id: "detect", isViable: true, name: "Detect", pp: 5, priority: 4, stallingMove: true, // Note: stallingMove is not used anywhere. volatileStatus: 'protect', onTryHit: function(pokemon) { return !!this.willAct() && this.runEvent('StallMove', pokemon); }, onHit: function(pokemon) { pokemon.addVolatile('stall'); }, secondary: false, target: "self", type: "Fighting" }, "diamondstorm": { num: -1, gen: 6, accuracy: 95, basePower: 100, category: "Physical", desc: "Deals damage to all adjacent Pokemon with a 50% chance to raise the user's Defense by 1 stage.", shortDesc: "Hits all adjacent Pokemon. 50% chance to boost Def by 1.", id: "diamondstorm", name: "Diamond Storm", pp: 5, priority: 0, secondary: { chance: 50, self: { boosts: { def: 1 } } }, target: "allAdjacent", type: "Rock" }, "dig": { num: 91, accuracy: 100, basePower: 80, category: "Physical", desc: "Deals damage to one adjacent target. This attack charges on the first turn and strikes on the second. On the first turn, the user avoids all attacks other than Earthquake and Magnitude but takes double damage from them, and is also unaffected by Hail and Sandstorm damage. The user cannot make a move between turns. If the user is holding a Power Herb, the move completes in one turn. Makes contact. (Field: Can be used to escape a cave quickly.)", shortDesc: "Digs underground turn 1, strikes turn 2.", id: "dig", name: "Dig", pp: 10, priority: 0, isContact: true, isTwoTurnMove: true, onTry: function(attacker, defender, move) { if (attacker.removeVolatile(move.id)) { return; } this.add('-prepare', attacker, move.name, defender); if (!this.runEvent('ChargeMove', attacker, defender, move)) { this.add('-anim', attacker, move.name, defender); return; } attacker.addVolatile(move.id, defender); return null; }, effect: { duration: 2, onLockMove: 'dig', onImmunity: function(type, pokemon) { if (type === 'sandstorm' || type === 'hail') return false; }, onAccuracy: function(accuracy, target, source, move) { if (move.id === 'earthquake' || move.id === 'magnitude' || move.id === 'helpinghand') { return; } return 0; }, onSourceModifyDamage: function(damage, source, target, move) { if (move.id === 'earthquake' || move.id === 'magnitude') { return this.chainModify(2); } } }, secondary: false, target: "normal", type: "Ground" }, "disable": { num: 50, accuracy: 100, basePower: 0, category: "Status", desc: "For 4 turns, one adjacent target's last move used becomes disabled. Fails if one of the target's moves is already disabled, if the target has not moved, or if the target no longer knows the move. Pokemon protected by Magic Coat or the Ability Magic Bounce are unaffected and instead use this move themselves. Ignores a target's Substitute.", shortDesc: "For 4 turns, disables the target's last move used.", id: "disable", name: "Disable", pp: 20, priority: 0, isBounceable: true, volatileStatus: 'disable', effect: { duration: 4, noCopy: true, // doesn't get copied by Baton Pass onStart: function(pokemon) { if (!this.willMove(pokemon)) { this.effectData.duration++; } if (!pokemon.lastMove) { this.debug('pokemon hasn\'t moved yet'); return false; } var moves = pokemon.moveset; for (var i=0; i 4 ? 4 : Math.floor(ratio))] + ' bp'); if (ratio >= 4) { return 150; } if (ratio >= 3) { return 120; } if (ratio >= 2) { return 80; } if (ratio >= 1) { return 60; } return 40; }, category: "Special", desc: "Deals damage to one adjacent target. The power of this move depends on (user's current Speed / target's current Speed), rounded down. Power is equal to 150 if the result is 4 or more, 120 if 3, 80 if 2, 60 if 1, 40 if less than 1.", shortDesc: "More power the faster the user is than the target.", id: "electroball", isViable: true, name: "Electro Ball", pp: 10, priority: 0, isBullet: true, secondary: false, target: "normal", type: "Electric" }, "electroweb": { num: 527, accuracy: 95, basePower: 55, category: "Special", desc: "Deals damage to all adjacent foes with a 100% chance to lower their Speed by 1 stage.", shortDesc: "100% chance to lower the foe(s) Speed by 1.", id: "electroweb", name: "Electroweb", pp: 15, priority: 0, secondary: { chance: 100, boosts: { spe: -1 } }, target: "allAdjacentFoes", type: "Electric" }, "embargo": { num: 373, accuracy: 100, basePower: 0, category: "Status", desc: "For 5 turns, one adjacent target cannot use its held item. Items thrown at the target with Fling will still activate for it. If the target uses Baton Pass, the replacement will remain unable to use items. Pokemon protected by Magic Coat or the Ability Magic Bounce are unaffected and instead use this move themselves.", shortDesc: "For 5 turns, the target can't use any items.", id: "embargo", name: "Embargo", pp: 15, priority: 0, isBounceable: true, volatileStatus: 'embargo', effect: { duration: 5, onStart: function(pokemon) { this.add('-start', pokemon, 'Embargo'); }, onResidualOrder: 18, onEnd: function(pokemon) { this.add('-end', pokemon, 'Embargo'); }, onModifyPokemonPriority: 1, onModifyPokemon: function(pokemon) { if (pokemon.getItem().megaEvolves) return; pokemon.ignore['Item'] = true; } }, secondary: false, target: "normal", type: "Dark" }, "ember": { num: 52, accuracy: 100, basePower: 40, category: "Special", desc: "Deals damage to one adjacent target with a 10% chance to burn it.", shortDesc: "10% chance to burn the target.", id: "ember", name: "Ember", pp: 25, priority: 0, secondary: { chance: 10, status: 'brn' }, target: "normal", type: "Fire" }, "encore": { num: 227, accuracy: 100, basePower: 0, category: "Status", desc: "For 3 turns, one adjacent target is forced to repeat its last move used. If the affected move runs out of PP, the effect ends. Fails if the target is already under this effect, if it has not moved yet, if the move has 0PP, or if the move is Encore, Mimic, Mirror Move, Sketch, Struggle, or Transform. Pokemon protected by Magic Coat or the Ability Magic Bounce are unaffected and instead use this move themselves. Ignores a target's Substitute.", shortDesc: "The target repeats its last move for 3 turns.", id: "encore", isViable: true, name: "Encore", pp: 5, priority: 0, isBounceable: true, volatileStatus: 'encore', effect: { duration: 3, onStart: function(target) { var noEncore = {encore:1, mimic:1, mirrormove:1, sketch:1, struggle:1, transform:1}; var moveIndex = target.moves.indexOf(target.lastMove); if (!target.lastMove || noEncore[target.lastMove] || (target.moveset[moveIndex] && target.moveset[moveIndex].pp <= 0)) { // it failed delete target.volatiles['encore']; return false; } this.effectData.move = target.lastMove; this.add('-start', target, 'Encore'); if (!this.willMove(target)) { this.effectData.duration++; } }, onOverrideDecision: function(pokemon, target, move) { if (move.id !== this.effectData.move) return this.effectData.move; }, onResidualOrder: 13, onResidual: function(target) { if (target.moves.indexOf(target.lastMove) >= 0 && target.moveset[target.moves.indexOf(target.lastMove)].pp <= 0) { // early termination if you run out of PP delete target.volatiles.encore; this.add('-end', target, 'Encore'); } }, onEnd: function(target) { this.add('-end', target, 'Encore'); }, onModifyPokemon: function(pokemon) { if (!this.effectData.move || !pokemon.hasMove(this.effectData.move)) { return; } for (var i=0; i pokemon.hp) { return target.hp - pokemon.hp; } this.add('-immune', target, '[msg]'); return false; }, category: "Physical", desc: "Deals damage to one adjacent target equal to (target's current HP - user's current HP). Fails if the target's current HP is less than or equal to the user's current HP. Makes contact.", shortDesc: "Lowers the target's HP to the user's HP.", id: "endeavor", isViable: true, name: "Endeavor", pp: 5, priority: 0, isContact: true, secondary: false, target: "normal", type: "Normal" }, "endure": { num: 203, accuracy: true, basePower: 0, category: "Status", desc: "The user will survive attacks made by other Pokemon during this turn with at least 1HP. This attack has a 1/X chance of being successful, where X starts at 1 and doubles each time this move is successfully used. X resets to 1 if this attack fails or if the user's last used move is not Detect, Endure, Protect, Quick Guard, or Wide Guard. If X is 256 or more, this move has a 1/(2^32) chance of being successful. Fails if the user moves last this turn. Priority +4.", shortDesc: "The user survives the next hit with at least 1 HP.", id: "endure", name: "Endure", pp: 10, priority: 4, stallingMove: true, // Note: stallingMove is not used anywhere. volatileStatus: 'endure', onTryHit: function(pokemon) { return this.willAct() && this.runEvent('StallMove', pokemon); }, onHit: function(pokemon) { pokemon.addVolatile('stall'); }, effect: { duration: 1, onStart: function(target) { this.add('-singleturn',target,'move: Endure'); }, onDamagePriority: -10, onDamage: function(damage, target, source, effect) { if (effect && effect.effectType === 'Move' && damage >= target.hp) { return target.hp-1; } } }, secondary: false, target: "self", type: "Normal" }, "energyball": { num: 412, accuracy: 100, basePower: 90, category: "Special", desc: "Deals damage to one adjacent target with a 10% chance to lower its Special Defense by 1 stage.", shortDesc: "10% chance to lower the target's Sp. Def. by 1.", id: "energyball", isViable: true, name: "Energy Ball", pp: 10, priority: 0, isBullet: true, secondary: { chance: 10, boosts: { spd: -1 } }, target: "normal", type: "Grass" }, "entrainment": { num: 494, accuracy: 100, basePower: 0, category: "Status", desc: "Causes one adjacent target's Ability to become the same as the user's. Fails if the target's Ability is Multitype, Stance Change, Truant, or the same Ability as the user, or if the user's Ability is Flower Gift, Forecast, Illusion, Imposter, Multitype, Stance Change, Trace, or Zen Mode. Pokemon protected by Magic Coat or the Ability Magic Bounce are unaffected and instead use this move themselves.", shortDesc: "The target's Ability changes to match the user's.", id: "entrainment", name: "Entrainment", pp: 15, priority: 0, isBounceable: true, onTryHit: function(target, source) { if (target === source) return false; var bannedTargetAbilities = {multitype:1, stancechange:1, truant:1}; var bannedSourceAbilities = {flowergift:1, forecast:1, illusion:1, imposter:1, multitype:1, stancechange:1, trace:1, zenmode:1}; if (bannedTargetAbilities[target.ability] || bannedSourceAbilities[source.ability] || target.ability === source.ability) { return false; } }, onHit: function(target, source) { if (target.setAbility(source.ability)) { this.add('-ability', target, target.ability); return; } return false; }, secondary: false, target: "normal", type: "Normal" }, "eruption": { num: 284, accuracy: 100, basePower: 150, basePowerCallback: function(pokemon) { return 150*pokemon.hp/pokemon.maxhp; }, category: "Special", desc: "Deals damage to all adjacent foes. Power is equal to (user's current HP * 150 / user's maximum HP), rounded down, but not less than 1.", shortDesc: "Less power as user's HP decreases. Hits foe(s).", id: "eruption", isViable: true, name: "Eruption", pp: 5, priority: 0, secondary: false, target: "allAdjacentFoes", type: "Fire" }, "explosion": { num: 153, accuracy: 100, basePower: 250, category: "Physical", desc: "The user faints and then damage is dealt to all adjacent Pokemon.", shortDesc: "Hits adjacent Pokemon. The user faints.", id: "explosion", name: "Explosion", pp: 5, priority: 0, selfdestruct: true, secondary: false, target: "allAdjacent", type: "Normal" }, "extrasensory": { num: 326, accuracy: 100, basePower: 80, category: "Special", desc: "Deals damage to one adjacent target with a 10% chance to flinch it.", shortDesc: "10% chance to flinch the target.", id: "extrasensory", isViable: true, name: "Extrasensory", pp: 20, priority: 0, secondary: { chance: 10, volatileStatus: 'flinch' }, target: "normal", type: "Psychic" }, "extremespeed": { num: 245, accuracy: 100, basePower: 80, category: "Physical", desc: "Deals damage to one adjacent target. Makes contact. Priority +2.", shortDesc: "Nearly always goes first.", id: "extremespeed", isViable: true, name: "Extreme Speed", pp: 5, priority: 2, isContact: true, secondary: false, target: "normal", type: "Normal" }, "facade": { num: 263, accuracy: 100, basePower: 70, category: "Physical", desc: "Deals damage to one adjacent target. Power doubles if the user is burned, paralyzed, or poisoned. Makes contact.", shortDesc: "Power doubles if user is burn/poison/paralyzed.", id: "facade", isViable: true, name: "Facade", pp: 20, priority: 0, isContact: true, onBasePowerPriority: 4, onBasePower: function(basePower, pokemon) { if (pokemon.status && pokemon.status !== 'slp') { return this.chainModify(2); } }, secondary: false, target: "normal", type: "Normal" }, "feintattack": { num: 185, accuracy: true, basePower: 60, category: "Physical", desc: "Deals damage to one adjacent target and does not check accuracy. Makes contact.", shortDesc: "This move does not check accuracy.", id: "feintattack", name: "Feint Attack", pp: 20, priority: 0, isContact: true, secondary: false, target: "normal", type: "Dark" }, "fairylock": { num: 587, accuracy: true, basePower: 0, category: "Status", desc: "Keeps all Pokemon from fleeing during the next turn.", shortDesc: "Prevents fleeing for one turn.", id: "fairylock", name: "Fairy Lock", pp: 10, priority: 0, pseudoWeather: 'fairylock', effect: { duration: 2, onStart: function(target) { this.add('-activate', target, 'move: Fairy Lock'); }, onModifyPokemon: function(pokemon) { pokemon.tryTrap(); } }, secondary: false, target: "all", type: "Fairy" }, "fairywind": { num: 584, accuracy: 100, basePower: 40, category: "Special", desc: "Deals damage to one adjacent target.", shortDesc: "No additional effect.", id: "fairywind", name: "Fairy Wind", pp: 30, priority: 0, secondary: false, target: "normal", type: "Fairy" }, "fakeout": { num: 252, accuracy: 100, basePower: 40, category: "Physical", desc: "Deals damage to one adjacent target with a 100% chance to flinch it. Fails unless it is the user's first turn on the field. Makes contact. Priority +3.", shortDesc: "Hits first. First turn out only. 100% flinch chance.", id: "fakeout", isViable: true, name: "Fake Out", pp: 10, priority: 3, isContact: true, onTryHit: function(target, pokemon) { if (pokemon.activeTurns > 1) { this.add('-message', '(Fake Out only works your first turn out.)'); return false; } }, secondary: { chance: 100, volatileStatus: 'flinch' }, target: "normal", type: "Normal" }, "faketears": { num: 313, accuracy: 100, basePower: 0, category: "Status", desc: "Lowers one adjacent target's Special Defense by 2 stages. Pokemon protected by Magic Coat or the Ability Magic Bounce are unaffected and instead use this move themselves.", shortDesc: "Lowers the target's Sp. Def by 2.", id: "faketears", name: "Fake Tears", pp: 20, priority: 0, boosts: { spd: -2 }, secondary: false, target: "normal", type: "Dark" }, "falseswipe": { num: 206, accuracy: 100, basePower: 40, category: "Physical", desc: "Deals damage to one adjacent target but leaves it with at least 1HP. Makes contact.", shortDesc: "Always leaves the target with at least 1 HP.", id: "falseswipe", name: "False Swipe", pp: 40, priority: 0, isContact: true, noFaint: true, secondary: false, target: "normal", type: "Normal" }, "featherdance": { num: 297, accuracy: 100, basePower: 0, category: "Status", desc: "Lowers one adjacent target's Attack by 2 stages. Pokemon protected by Magic Coat or the Ability Magic Bounce are unaffected and instead use this move themselves.", shortDesc: "Lowers the target's Attack by 2.", id: "featherdance", name: "Feather Dance", pp: 15, priority: 0, boosts: { atk: -2 }, secondary: false, target: "normal", type: "Flying" }, "feint": { num: 364, accuracy: 100, basePower: 30, category: "Physical", desc: "Deals damage to one adjacent target and breaks through Detect, King's Shield, Spiky Shield and Protect for this turn, allowing other Pokemon to attack the target normally. If the target is a foe, Quick Guard and Wide Guard are also broken for this turn and other Pokemon may attack the target normally. Priority +2.", shortDesc: "Nullifies Detect, Protect, and Quick/Wide Guard.", id: "feint", name: "Feint", pp: 10, priority: 2, breaksProtect: true, onHit: function(target, source) { if (target.removeVolatile('protect') || target.removeVolatile('kingsshield') || target.removeVolatile('spikyshield')) { this.add("-activate", target, "move: Feint"); } if (target.side !== source.side) { target.side.removeSideCondition('quickguard'); target.side.removeSideCondition('wideguard'); } }, secondary: false, target: "normal", type: "Normal" }, "fellstinger": { num: 565, accuracy: 100, basePower: 30, category: "Physical", desc: "When the user knocks out a target with this move, the user's Attack stat rises sharply.", shortDesc: "Raises Attack by 2 if knocks out target.", id: "fellstinger", name: "Fell Stinger", pp: 25, priority: 0, onHit: function(target, pokemon) { pokemon.addVolatile('fellstinger'); }, effect: { duration: 1, onAfterMoveSecondarySelf: function(pokemon, target, move) { if (!target || target.fainted || target.hp <= 0) this.boost({atk:2}, pokemon, pokemon, move); pokemon.removeVolatile('fellstinger'); } }, secondary: false, target: "normal", type: "Bug" }, "fierydance": { num: 552, accuracy: 100, basePower: 80, category: "Special", desc: "Deals damage to one adjacent target with a 50% chance to raise the user's Special Attack by 1 stage.", shortDesc: "50% chance to boost the user's Sp. Atk by 1.", id: "fierydance", isViable: true, name: "Fiery Dance", pp: 10, priority: 0, secondary: { chance: 50, self: { boosts: { spa: 1 } } }, target: "normal", type: "Fire" }, "finalgambit": { num: 515, accuracy: 100, basePower: 0, damageCallback: function(pokemon) { var damage = pokemon.hp; pokemon.hp = 0; return damage; }, category: "Special", desc: "Deals damage to one adjacent target equal to the user's current HP. If this move is successful, the user faints. Makes contact.", shortDesc: "Does damage equal to the user's HP. User faints.", id: "finalgambit", name: "Final Gambit", pp: 5, priority: 0, isContact: true, selfdestruct: true, secondary: false, target: "normal", type: "Fighting" }, "fireblast": { num: 126, accuracy: 85, basePower: 110, category: "Special", desc: "Deals damage to one adjacent target with a 10% chance to burn it.", shortDesc: "10% chance to burn the target.", id: "fireblast", isViable: true, name: "Fire Blast", pp: 5, priority: 0, secondary: { chance: 10, status: 'brn' }, target: "normal", type: "Fire" }, "firefang": { num: 424, accuracy: 95, basePower: 65, category: "Physical", desc: "Deals damage to one adjacent target with a 10% chance to burn it and a 10% chance to flinch it. Makes contact.", shortDesc: "10% chance to burn. 10% chance to flinch.", id: "firefang", isViable: true, name: "Fire Fang", pp: 15, priority: 0, isContact: true, isBiteAttack: true, secondaries: [ { chance: 10, status: 'brn' }, { chance: 10, volatileStatus: 'flinch' } ], target: "normal", type: "Fire" }, "firepledge": { num: 519, accuracy: 100, basePower: 80, basePowerCallback: function(target, source, move) { if (move.sourceEffect in {grasspledge:1, waterpledge:1}) { this.add('-combine'); return 150; } return 80; }, category: "Special", desc: "Deals damage to one adjacent target. If one of the user's allies chose to use Grass Pledge or Water Pledge this turn and has not moved yet, they take their turn immediately after the user and the user's move does nothing. Power goes up to 150 if this move is used by an ally that way, and a sea of fire appears on the target's side if the other move was Grass Pledge, or a rainbow appears on the user's side if the other move was Water Pledge.", shortDesc: "Use with Grass or Water Pledge for added effect.", id: "firepledge", name: "Fire Pledge", pp: 10, priority: 0, onTryHit: function(target, source, move) { for (var i=0; i= 200) { this.debug('120 bp'); return 120; } if (target.weightkg >= 100) { this.debug('100 bp'); return 100; } if (target.weightkg >= 50) { this.debug('80 bp'); return 80; } if (target.weightkg >= 25) { this.debug('60 bp'); return 60; } if (target.weightkg >= 10) { this.debug('40 bp'); return 40; } this.debug('20 bp'); return 20; }, category: "Special", desc: "Deals damage to one adjacent target based on that target's weight. Power is 20 if less than 10kg, 40 if less than 25kg, 60 if less than 50kg, 80 if less than 100kg, 100 if less than 200kg, and 120 if greater than or equal to 200kg. Makes contact.", shortDesc: "More power the heavier the target.", id: "grassknot", isViable: true, name: "Grass Knot", pp: 20, priority: 0, isContact: true, secondary: false, target: "normal", type: "Grass" }, "grasspledge": { num: 520, accuracy: 100, basePower: 80, basePowerCallback: function(target, source, move) { if (move.sourceEffect in {waterpledge:1, firepledge:1}) { this.add('-combine'); return 150; } return 80; }, category: "Special", desc: "Deals damage to one adjacent target. If one of the user's allies chose to use Fire Pledge or Water Pledge this turn and has not moved yet, they take their turn immediately after the user and the user's move does nothing. Power goes up to 150 if this move is used by an ally that way, and a sea of fire appears on the target's side if the other move was Fire Pledge, or a swamp appears on the target's side if the other move was Water Pledge.", shortDesc: "Use with Fire or Water Pledge for added effect.", id: "grasspledge", name: "Grass Pledge", pp: 10, priority: 0, onTryHit: function(target, source, move) { for (var i=0; i 150) power = 150; this.debug(''+power+' bp'); return power; }, category: "Physical", desc: "Deals damage to one adjacent target. Power is equal to (25 * target's current Speed / user's current Speed), rounded down, + 1, but not more than 150. Makes contact.", shortDesc: "More power the slower the user than the target.", id: "gyroball", isViable: true, name: "Gyro Ball", pp: 5, priority: 0, isContact: true, isBullet: true, secondary: false, target: "normal", type: "Steel" }, "hail": { num: 258, accuracy: true, basePower: 0, category: "Status", desc: "For 5 turns, the weather becomes Hail. At the end of each turn except the last, all active Pokemon lose 1/16 of their maximum HP, rounded down, unless they are an Ice-type, or have the Abilities Ice Body, Magic Guard, Overcoat, or Snow Cloak. Lasts for 8 turns if the user is holding Icy Rock. Fails if the current weather is Hail.", shortDesc: "For 5 turns, hail crashes down.", id: "hail", name: "Hail", pp: 10, priority: 0, weather: 'hail', secondary: false, target: "all", type: "Ice" }, "hammerarm": { num: 359, accuracy: 90, basePower: 100, category: "Physical", desc: "Deals damage to one adjacent target and lowers the user's Speed by 1 stage. Makes contact. Damage is boosted to 1.2x by the Ability Iron Fist.", shortDesc: "Lowers the user's Speed by 1.", id: "hammerarm", isViable: true, name: "Hammer Arm", pp: 10, priority: 0, isContact: true, isPunchAttack: true, self: { boosts: { spe: -1 } }, secondary: false, target: "normal", type: "Fighting" }, "happyhour": { num: 603, accuracy: true, basePower: 0, category: "Status", desc: "No competitive effect. (Doubles the prize money received after battle.)", shortDesc: "No effect.", id: "happyhour", name: "Happy Hour", pp: 30, priority: 0, onTryHit: function(target, source) { this.add('-activate', target, 'move: Happy Hour'); return null; }, secondary: false, target: "self", type: "Normal" }, "harden": { num: 106, accuracy: true, basePower: 0, category: "Status", desc: "Raises the user's Defense by 1 stage.", shortDesc: "Boosts the user's Defense by 1.", id: "harden", name: "Harden", pp: 30, priority: 0, isSnatchable: true, boosts: { def: 1 }, secondary: false, target: "self", type: "Normal" }, "haze": { num: 114, accuracy: true, basePower: 0, category: "Status", desc: "Eliminates any stat stage changes from all active Pokemon.", shortDesc: "Eliminates all stat changes.", id: "haze", isViable: true, name: "Haze", pp: 30, priority: 0, onHitField: function() { this.add('-clearallboost'); for (var i=0; i targetWeight * 5) { return 120; } if (pokemonWeight > targetWeight * 4) { return 100; } if (pokemonWeight > targetWeight * 3) { return 80; } if (pokemonWeight > targetWeight * 2) { return 60; } return 40; }, category: "Physical", desc: "Deals damage to one adjacent target. The power of this move depends on (user's weight / target's weight), rounded down. Power is equal to 120 if the result is 5 or more, 100 if 4, 80 if 3, 60 if 2, and 40 if 1 or less. Makes contact.", shortDesc: "More power the heavier the user than the target.", id: "heatcrash", isViable: true, name: "Heat Crash", pp: 10, priority: 0, isContact: true, secondary: false, target: "normal", type: "Fire" }, "heatwave": { num: 257, accuracy: 90, basePower: 95, category: "Special", desc: "Deals damage to all adjacent foes with a 10% chance to burn each.", shortDesc: "10% chance to burn the foe(s).", id: "heatwave", isViable: true, name: "Heat Wave", pp: 10, priority: 0, secondary: { chance: 10, status: 'brn' }, target: "allAdjacentFoes", type: "Fire" }, "heavyslam": { num: 484, accuracy: 100, basePower: 0, basePowerCallback: function(pokemon, target) { var targetWeight = target.weightkg; var pokemonWeight = pokemon.weightkg; if (pokemonWeight > targetWeight * 5) { return 120; } if (pokemonWeight > targetWeight * 4) { return 100; } if (pokemonWeight > targetWeight * 3) { return 80; } if (pokemonWeight > targetWeight * 2) { return 60; } return 40; }, category: "Physical", desc: "Deals damage to one adjacent target. The power of this move depends on (user's weight / target's weight), rounded down. Power is equal to 120 if the result is 5 or more, 100 if 4, 80 if 3, 60 if 2, and 40 if 1 or less. Makes contact.", shortDesc: "More power the heavier the user than the target.", id: "heavyslam", isViable: true, name: "Heavy Slam", pp: 10, priority: 0, isContact: true, secondary: false, target: "normal", type: "Steel" }, "helpinghand": { num: 270, accuracy: true, basePower: 0, category: "Status", desc: "Causes one adjacent ally to have the power of its attack this turn boosted to 1.5x (this effect is stackable). Fails if there is no adjacent ally, but does not fail if the ally is using a two-turn move. This move ignores Protect and Detect. Ignores a target's Substitute. Priority +5.", shortDesc: "One adjacent ally's move power is 1.5x this turn.", id: "helpinghand", name: "Helping Hand", pp: 20, priority: 5, isNotProtectable: true, volatileStatus: 'helpinghand', onTryHit: function(target, source) { if (target === source) return false; }, effect: { duration: 1, onStart: function(target, source) { this.add('-singleturn', target, 'Helping Hand', '[of] '+source); }, onBasePowerPriority: 3, onBasePower: function(basePower) { this.debug('Boosting from Helping Hand'); return this.chainModify(1.5); } }, secondary: false, target: "adjacentAlly", type: "Normal" }, "hex": { num: 506, accuracy: 100, basePower: 65, basePowerCallback: function(pokemon, target) { if (target.status) return 130; return 65; }, category: "Special", desc: "Deals damage to one adjacent target. Power doubles if the target has a major status problem.", shortDesc: "Power doubles if the target has a status ailment.", id: "hex", name: "Hex", pp: 10, priority: 0, secondary: false, target: "normal", type: "Ghost" }, "hiddenpower": { num: 237, accuracy: 100, basePower: 60, category: "Special", desc: "Deals damage to one adjacent target. This move's type depends on the user's individual values (IVs). Type can be any but Normal or Fairy.", shortDesc: "Varies in type based on the user's IVs.", id: "hiddenpower", isViable: true, name: "Hidden Power", pp: 15, priority: 0, onModifyMove: function(move, pokemon) { move.type = pokemon.hpType || 'Dark'; }, secondary: false, target: "normal", type: "Normal" }, "hiddenpowerbug": { accuracy: 100, basePower: 60, category: "Special", desc: "", shortDesc: "", id: "hiddenpower", name: "Hidden Power Bug", pp: 15, priority: 0, secondary: false, target: "normal", type: "Bug" }, "hiddenpowerdark": { accuracy: 100, basePower: 60, category: "Special", desc: "", shortDesc: "", id: "hiddenpower", name: "Hidden Power Dark", pp: 15, priority: 0, secondary: false, target: "normal", type: "Dark" }, "hiddenpowerdragon": { accuracy: 100, basePower: 60, category: "Special", desc: "", shortDesc: "", id: "hiddenpower", name: "Hidden Power Dragon", pp: 15, priority: 0, secondary: false, target: "normal", type: "Dragon" }, "hiddenpowerelectric": { accuracy: 100, basePower: 60, category: "Special", desc: "", shortDesc: "", id: "hiddenpower", isViable: true, name: "Hidden Power Electric", pp: 15, priority: 0, secondary: false, target: "normal", type: "Electric" }, "hiddenpowerfighting": { accuracy: 100, basePower: 60, category: "Special", desc: "", shortDesc: "", id: "hiddenpower", isViable: true, name: "Hidden Power Fighting", pp: 15, priority: 0, secondary: false, target: "normal", type: "Fighting" }, "hiddenpowerfire": { accuracy: 100, basePower: 60, category: "Special", desc: "", shortDesc: "", id: "hiddenpower", isViable: true, name: "Hidden Power Fire", pp: 15, priority: 0, secondary: false, target: "normal", type: "Fire" }, "hiddenpowerflying": { accuracy: 100, basePower: 60, category: "Special", desc: "", shortDesc: "", id: "hiddenpower", name: "Hidden Power Flying", pp: 15, priority: 0, secondary: false, target: "normal", type: "Flying" }, "hiddenpowerghost": { accuracy: 100, basePower: 60, category: "Special", desc: "", shortDesc: "", id: "hiddenpower", name: "Hidden Power Ghost", pp: 15, priority: 0, secondary: false, target: "normal", type: "Ghost" }, "hiddenpowergrass": { accuracy: 100, basePower: 60, category: "Special", desc: "", shortDesc: "", id: "hiddenpower", isViable: true, name: "Hidden Power Grass", pp: 15, priority: 0, secondary: false, target: "normal", type: "Grass" }, "hiddenpowerground": { accuracy: 100, basePower: 60, category: "Special", desc: "", shortDesc: "", id: "hiddenpower", name: "Hidden Power Ground", pp: 15, priority: 0, secondary: false, target: "normal", type: "Ground" }, "hiddenpowerice": { accuracy: 100, basePower: 60, category: "Special", desc: "", shortDesc: "", id: "hiddenpower", isViable: true, name: "Hidden Power Ice", pp: 15, priority: 0, secondary: false, target: "normal", type: "Ice" }, "hiddenpowerpoison": { accuracy: 100, basePower: 60, category: "Special", desc: "", shortDesc: "", id: "hiddenpower", name: "Hidden Power Poison", pp: 15, priority: 0, secondary: false, target: "normal", type: "Poison" }, "hiddenpowerpsychic": { accuracy: 100, basePower: 60, category: "Special", desc: "", shortDesc: "", id: "hiddenpower", name: "Hidden Power Psychic", pp: 15, priority: 0, secondary: false, target: "normal", type: "Psychic" }, "hiddenpowerrock": { accuracy: 100, basePower: 60, category: "Special", desc: "", shortDesc: "", id: "hiddenpower", name: "Hidden Power Rock", pp: 15, priority: 0, secondary: false, target: "normal", type: "Rock" }, "hiddenpowersteel": { accuracy: 100, basePower: 60, category: "Special", desc: "", shortDesc: "", id: "hiddenpower", name: "Hidden Power Steel", pp: 15, priority: 0, secondary: false, target: "normal", type: "Steel" }, "hiddenpowerwater": { accuracy: 100, basePower: 60, category: "Special", desc: "", shortDesc: "", id: "hiddenpower", name: "Hidden Power Water", pp: 15, priority: 0, secondary: false, target: "normal", type: "Water" }, "highjumpkick": { num: 136, accuracy: 90, basePower: 130, category: "Physical", desc: "Deals damage to one adjacent target. If this attack is not successful, the user loses half of its maximum HP, rounded down, as crash damage. Pokemon with the Ability Magic Guard are unaffected by crash damage. This move cannot be used while Gravity is in effect. Makes contact.", shortDesc: "User is hurt by 50% of its max HP if it misses.", id: "highjumpkick", isViable: true, name: "High Jump Kick", pp: 10, priority: 0, isContact: true, hasCustomRecoil: true, onMoveFail: function(target, source, move) { this.damage(source.maxhp/2, source, source, 'highjumpkick'); }, secondary: false, target: "normal", type: "Fighting" }, "holdback": { gen: 6, accuracy: 100, basePower: 40, category: "Physical", desc: "Deals damage to one adjacent target but leaves it with at least 1HP. Makes contact.", shortDesc: "Always leaves the target with at least 1 HP.", id: "holdback", name: "Hold Back", pp: 40, priority: 0, isContact: true, noFaint: true, secondary: false, target: "normal", type: "Normal" }, "honeclaws": { num: 468, accuracy: true, basePower: 0, category: "Status", desc: "Raises the user's Attack and accuracy by 1 stage.", shortDesc: "Boosts the user's Attack and accuracy by 1.", id: "honeclaws", isViable: true, name: "Hone Claws", pp: 15, priority: 0, isSnatchable: true, boosts: { atk: 1, accuracy: 1 }, secondary: false, target: "self", type: "Dark" }, "hornattack": { num: 30, accuracy: 100, basePower: 65, category: "Physical", desc: "Deals damage to one adjacent target. Makes contact.", shortDesc: "No additional effect.", id: "hornattack", name: "Horn Attack", pp: 25, priority: 0, isContact: true, secondary: false, target: "normal", type: "Normal" }, "horndrill": { num: 32, accuracy: 30, basePower: 0, category: "Physical", desc: "Deals damage to one adjacent target equal to the target's maximum HP. Ignores accuracy and evasion modifiers. This attack's accuracy is equal to (user's level - target's level + 30)%, and fails if the target is at a higher level. Pokemon with the Ability Sturdy are immune. Makes contact.", shortDesc: "OHKOs the target. Fails if user is a lower level.", id: "horndrill", name: "Horn Drill", pp: 5, priority: 0, isContact: true, ohko: true, secondary: false, target: "normal", type: "Normal" }, "hornleech": { num: 532, accuracy: 100, basePower: 75, category: "Physical", desc: "Deals damage to one adjacent target. The user recovers half of the HP lost by the target, rounded up. If Big Root is held by the user, the HP recovered is 1.3x normal, rounded half down. Makes contact.", shortDesc: "User recovers 50% of the damage dealt.", id: "hornleech", isViable: true, name: "Horn Leech", pp: 10, priority: 0, isContact: true, drain: [1,2], secondary: false, target: "normal", type: "Grass" }, "howl": { num: 336, accuracy: true, basePower: 0, category: "Status", desc: "Raises the user's Attack by 1 stage.", shortDesc: "Boosts the user's Attack by 1.", id: "howl", isViable: true, name: "Howl", pp: 40, priority: 0, isSnatchable: true, boosts: { atk: 1 }, secondary: false, target: "self", type: "Normal" }, "hurricane": { num: 542, accuracy: 70, basePower: 110, category: "Special", desc: "Deals damage to one adjacent or non-adjacent target with a 30% chance to confuse it. This move can hit a target using Bounce, Fly, or Sky Drop. If the weather is Rain Dance, this move cannot miss. If the weather is Sunny Day, this move's accuracy is 50%.", shortDesc: "30% chance to confuse target. Can't miss in rain.", id: "hurricane", isViable: true, name: "Hurricane", pp: 10, priority: 0, onModifyMove: function(move) { if (this.isWeather('raindance')) move.accuracy = true; else if (this.isWeather('sunnyday')) move.accuracy = 50; }, secondary: { chance: 30, volatileStatus: 'confusion' }, target: "any", type: "Flying" }, "hydrocannon": { num: 308, accuracy: 90, basePower: 150, category: "Special", desc: "Deals damage to one adjacent target. If this move is successful, the user must recharge on the following turn and cannot make a move.", shortDesc: "User cannot move next turn.", id: "hydrocannon", name: "Hydro Cannon", pp: 5, priority: 0, self: { volatileStatus: 'mustrecharge' }, secondary: false, target: "normal", type: "Water" }, "hydropump": { num: 56, accuracy: 80, basePower: 110, category: "Special", desc: "Deals damage to one adjacent target.", shortDesc: "No additional effect.", id: "hydropump", isViable: true, name: "Hydro Pump", pp: 5, priority: 0, secondary: false, target: "normal", type: "Water" }, "hyperbeam": { num: 63, accuracy: 90, basePower: 150, category: "Special", desc: "Deals damage to one adjacent target. If this move is successful, the user must recharge on the following turn and cannot make a move.", shortDesc: "User cannot move next turn.", id: "hyperbeam", name: "Hyper Beam", pp: 5, priority: 0, self: { volatileStatus: 'mustrecharge' }, secondary: false, target: "normal", type: "Normal" }, "hyperfang": { num: 158, accuracy: 90, basePower: 80, category: "Physical", desc: "Deals damage to one adjacent target with a 10% chance to flinch it. Makes contact.", shortDesc: "10% chance to flinch the target.", id: "hyperfang", name: "Hyper Fang", pp: 15, priority: 0, isContact: true, isBiteAttack: true, secondary: { chance: 10, volatileStatus: 'flinch' }, target: "normal", type: "Normal" }, "hypervoice": { num: 304, accuracy: 100, basePower: 90, category: "Special", desc: "Deals damage to all adjacent foes. Pokemon with the Ability Soundproof are immune.", shortDesc: "No additional effect. Hits adjacent foes.", id: "hypervoice", isViable: true, name: "Hyper Voice", pp: 10, priority: 0, isSoundBased: true, secondary: false, target: "allAdjacentFoes", type: "Normal" }, "hypnosis": { num: 95, accuracy: 60, basePower: 0, category: "Status", desc: "Puts one adjacent target to sleep. Pokemon protected by Magic Coat or the Ability Magic Bounce are unaffected and instead use this move themselves.", shortDesc: "Puts the target to sleep.", id: "hypnosis", isViable: true, name: "Hypnosis", pp: 20, priority: 0, status: 'slp', secondary: false, target: "normal", type: "Psychic" }, "iceball": { num: 301, accuracy: 90, basePower: 30, basePowerCallback: function(pokemon, target) { var bp = 30; var bpTable = [30, 60, 120, 240, 480]; if (pokemon.volatiles.iceball && pokemon.volatiles.iceball.hitCount) { bp = (bpTable[pokemon.volatiles.iceball.hitCount] || 480); } pokemon.addVolatile('iceball'); if (pokemon.volatiles.defensecurl) { bp *= 2; } this.debug("Ice Ball bp: "+bp); return bp; }, category: "Physical", desc: "Deals damage to one adjacent target. The user is locked into this move and cannot make another move until it misses, 5 turns have passed, or the attack cannot be used. Power doubles with each successful hit of this move and doubles again if Defense Curl was used previously by the user. If this move is called by Sleep Talk, the move is used for one turn. Makes contact.", shortDesc: "Power doubles with each hit. Repeats for 5 turns.", id: "iceball", name: "Ice Ball", pp: 20, priority: 0, isContact: true, isBullet: true, effect: { duration: 2, onLockMove: 'iceball', onStart: function() { this.effectData.hitCount = 1; }, onRestart: function() { this.effectData.hitCount++; if (this.effectData.hitCount < 5) { this.effectData.duration = 2; } }, onResidual: function(target) { if (target.lastMove === 'struggle') { // don't lock delete target.volatiles['iceball']; } } }, secondary: false, target: "normal", type: "Ice" }, "icebeam": { num: 58, accuracy: 100, basePower: 90, category: "Special", desc: "Deals damage to one adjacent target with a 10% chance to freeze it.", shortDesc: "10% chance to freeze the target.", id: "icebeam", isViable: true, name: "Ice Beam", pp: 10, priority: 0, secondary: { chance: 10, status: 'frz' }, target: "normal", type: "Ice" }, "iceburn": { num: 554, accuracy: 90, basePower: 140, category: "Special", desc: "Deals damage to one adjacent target with a 30% chance to burn it. This attack charges on the first turn and strikes on the second. The user cannot make a move between turns. If the user is holding a Power Herb, the move completes in one turn.", shortDesc: "Charges turn 1. Hits turn 2. 30% burn.", id: "iceburn", name: "Ice Burn", pp: 5, priority: 0, isTwoTurnMove: true, onTry: function(attacker, defender, move) { if (attacker.removeVolatile(move.id)) { return; } this.add('-prepare', attacker, move.name, defender); if (!this.runEvent('ChargeMove', attacker, defender, move)) { this.add('-anim', attacker, move.name, defender); return; } attacker.addVolatile(move.id, defender); return null; }, effect: { duration: 2, onLockMove: 'iceburn' }, secondary: { chance: 30, status: 'brn' }, target: "normal", type: "Ice" }, "icefang": { num: 423, accuracy: 95, basePower: 65, category: "Physical", desc: "Deals damage to one adjacent target with a 10% chance to freeze it and a 10% chance to flinch it. Makes contact.", shortDesc: "10% chance to freeze. 10% chance to flinch.", id: "icefang", isViable: true, name: "Ice Fang", pp: 15, priority: 0, isContact: true, isBiteAttack: true, secondaries: [ { chance: 10, status: 'frz' }, { chance: 10, volatileStatus: 'flinch' } ], target: "normal", type: "Ice" }, "icepunch": { num: 8, accuracy: 100, basePower: 75, category: "Physical", desc: "Deals damage to one adjacent target with a 10% chance to freeze it. Makes contact. Damage is boosted to 1.2x by the Ability Iron Fist.", shortDesc: "10% chance to freeze the target.", id: "icepunch", isViable: true, name: "Ice Punch", pp: 15, priority: 0, isContact: true, isPunchAttack: true, secondary: { chance: 10, status: 'frz' }, target: "normal", type: "Ice" }, "iceshard": { num: 420, accuracy: 100, basePower: 40, category: "Physical", desc: "Deals damage to one adjacent target. Priority +1.", shortDesc: "Usually goes first.", id: "iceshard", isViable: true, name: "Ice Shard", pp: 30, priority: 1, secondary: false, target: "normal", type: "Ice" }, "iciclecrash": { num: 556, accuracy: 90, basePower: 85, category: "Physical", desc: "Deals damage to one adjacent target with a 30% chance to flinch it.", shortDesc: "30% chance to flinch the target.", id: "iciclecrash", isViable: true, name: "Icicle Crash", pp: 10, priority: 0, secondary: { chance: 30, volatileStatus: 'flinch' }, target: "normal", type: "Ice" }, "iciclespear": { num: 333, accuracy: 100, basePower: 25, category: "Physical", desc: "Deals damage to one adjacent target and hits two to five times. Has a 1/3 chance to hit two or three times, and a 1/6 chance to hit four or five times. If one of the hits breaks the target's Substitute, it will take damage for the remaining hits. If the user has the Ability Skill Link, this move will always hit five times.", shortDesc: "Hits 2-5 times in one turn.", id: "iciclespear", isViable: true, name: "Icicle Spear", pp: 30, priority: 0, multihit: [2,5], secondary: false, target: "normal", type: "Ice" }, "icywind": { num: 196, accuracy: 95, basePower: 55, category: "Special", desc: "Deals damage to all adjacent foes with a 100% chance to lower their Speed by 1 stage each.", shortDesc: "100% chance to lower the foe(s) Speed by 1.", id: "icywind", name: "Icy Wind", pp: 15, priority: 0, secondary: { chance: 100, boosts: { spe: -1 } }, target: "allAdjacentFoes", type: "Ice" }, "imprison": { num: 286, accuracy: true, basePower: 0, category: "Status", desc: "The user prevents all of its foes from using any moves that the user also knows as long as the user remains active. Ignores a target's Substitute.", shortDesc: "No foe can use any move known by the user.", id: "imprison", name: "Imprison", pp: 10, priority: 0, isSnatchable: true, volatileStatus: 'imprison', effect: { noCopy: true, onStart: function(target) { this.add('-start', target, 'move: Imprison'); }, onFoeModifyPokemon: function(pokemon) { var foeMoves = this.effectData.source.moveset; for (var f=0; f 1) return this.chainModify(0.66); return this.chainModify(0.5); } } }, onStart: function(side) { this.add('-sidestart', side, 'move: Light Screen'); }, onResidualOrder: 21, onResidualSubOrder: 1, onEnd: function(side) { this.add('-sideend', side, 'move: Light Screen'); } }, secondary: false, target: "allySide", type: "Psychic" }, "lockon": { num: 199, accuracy: true, basePower: 0, category: "Status", desc: "On the following turn, one adjacent target cannot avoid the user's moves, even if the target is in the middle of a two-turn move. Fails if the user tries to use this move again during effect.", shortDesc: "User's next move will not miss the target.", id: "lockon", name: "Lock-On", pp: 5, priority: 0, volatileStatus: 'lockon', effect: { duration: 2, onFoeModifyMove: function(move, source, target) { if (source === this.effectData.source) { move.accuracy = true; move.alwaysHit = true; } } }, secondary: false, target: "normal", type: "Normal" }, "lovelykiss": { num: 142, accuracy: 75, basePower: 0, category: "Status", desc: "Puts one adjacent target to sleep. Pokemon protected by Magic Coat or the Ability Magic Bounce are unaffected and instead use this move themselves.", shortDesc: "Puts the target to sleep.", id: "lovelykiss", isViable: true, name: "Lovely Kiss", pp: 10, priority: 0, status: 'slp', secondary: false, target: "normal", type: "Normal" }, "lowkick": { num: 67, accuracy: 100, basePower: 0, basePowerCallback: function(pokemon, target) { var targetWeight = target.weightkg; if (target.weightkg >= 200) { return 120; } if (target.weightkg >= 100) { return 100; } if (target.weightkg >= 50) { return 80; } if (target.weightkg >= 25) { return 60; } if (target.weightkg >= 10) { return 40; } return 20; }, category: "Physical", desc: "Deals damage to one adjacent target based on that target's weight. Power is 20 if less than 10kg, 40 if less than 25kg, 60 if less than 50kg, 80 if less than 100kg, 100 if less than 200kg, and 120 if greater than or equal to 200kg. Makes contact.", shortDesc: "More power the heavier the target.", id: "lowkick", isViable: true, name: "Low Kick", pp: 20, priority: 0, isContact: true, secondary: false, target: "normal", type: "Fighting" }, "lowsweep": { num: 490, accuracy: 100, basePower: 65, category: "Physical", desc: "Deals damage to one adjacent target with a 100% chance to lower its Speed by 1 stage. Makes contact.", shortDesc: "100% chance to lower the target's Speed by 1.", id: "lowsweep", name: "Low Sweep", pp: 20, priority: 0, isContact: true, secondary: { chance: 100, boosts: { spe: -1 } }, target: "normal", type: "Fighting" }, "luckychant": { num: 381, accuracy: true, basePower: 0, category: "Status", desc: "For 5 turns, the user and its party members cannot be struck by a critical hit. Fails if this move is already in effect for the user's side.", shortDesc: "For 5 turns, shields user's party from critical hits.", id: "luckychant", name: "Lucky Chant", pp: 30, priority: 0, isSnatchable: true, sideCondition: 'luckychant', effect: { duration: 5, onStart: function(side) { this.add('-sidestart', side, 'move: Lucky Chant'); // "The Lucky Chant shielded [side.name]'s team from critical hits!" }, onCriticalHit: false, onResidualOrder: 21, onResidualSubOrder: 5, onEnd: function(side) { this.add('-sideend', side, 'move: Lucky Chant'); // "[side.name]'s team's Lucky Chant wore off!" } }, secondary: false, target: "allySide", type: "Normal" }, "lunardance": { num: 461, accuracy: true, basePower: 0, category: "Status", desc: "The user faints and the Pokemon brought out to replace it has its HP and PP fully restored along with having any major status condition cured. Fails if the user is the last unfainted Pokemon in its party.", shortDesc: "User faints. Replacement is fully healed, with PP.", id: "lunardance", isViable: true, name: "Lunar Dance", pp: 10, priority: 0, isSnatchable: true, onTryHit: function(pokemon, target, move) { if (pokemon.side.pokemonLeft <= 1) { delete move.selfdestruct; return false; } }, selfdestruct: true, sideCondition: 'lunardance', effect: { duration: 2, onStart: function(side) { this.debug('Lunar Dance started on '+side.name); }, onSwitchInPriority: 1, onSwitchIn: function(target) { if (target.position != this.effectData.sourcePosition) { return; } if (!target.fainted) { var source = this.effectData.source; var damage = target.heal(target.maxhp); target.setStatus(''); for (var m in target.moveset) { target.moveset[m].pp = target.moveset[m].maxpp; } this.add('-heal',target,target.getHealth,'[from] move: Lunar Dance'); target.side.removeSideCondition('lunardance'); } } }, secondary: false, target: "self", type: "Psychic" }, "lusterpurge": { num: 295, accuracy: 100, basePower: 70, category: "Special", desc: "Deals damage to one adjacent target with a 50% chance to lower its Special Defense by 1 stage.", shortDesc: "50% chance to lower the target's Sp. Def by 1.", id: "lusterpurge", name: "Luster Purge", pp: 5, priority: 0, secondary: { chance: 50, boosts: { spd: -1 } }, target: "normal", type: "Psychic" }, "machpunch": { num: 183, accuracy: 100, basePower: 40, category: "Physical", desc: "Deals damage to one adjacent target. Makes contact. Damage is boosted to 1.2x by the Ability Iron Fist. Priority +1.", shortDesc: "Usually goes first.", id: "machpunch", isViable: true, name: "Mach Punch", pp: 30, priority: 1, isContact: true, isPunchAttack: true, secondary: false, target: "normal", type: "Fighting" }, "magiccoat": { num: 277, accuracy: true, basePower: 0, category: "Status", desc: "Until the end of the turn, the user is unaffected by certain non-damaging moves directed at it and will instead use such moves against the original user. Moves reflected in this way are unable to be reflected again by this or the Ability Magic Bounce's effect. Spikes, Stealth Rock, and Toxic Spikes can only be reflected once per side, by the leftmost Pokemon under this or the Ability Magic Bounce's effect. If the user has the Ability Soundproof, this move's effect happens before a sound-based move can be nullified. The Abilities Lightningrod and Storm Drain redirect their respective moves before this move takes effect. Priority +4.", shortDesc: "Bounces back certain non-damaging moves.", id: "magiccoat", isViable: true, name: "Magic Coat", pp: 15, priority: 4, volatileStatus: 'magiccoat', effect: { duration: 1, onStart: function(target) { this.add('-singleturn', target, 'move: Magic Coat'); }, onTryHitPriority: 2, onTryHit: function(target, source, move) { if (target === source) return; if (move.hasBounced) return; if (typeof move.isBounceable === 'undefined') { move.isBounceable = !!(move.category === 'Status' && (move.status || move.boosts || move.volatileStatus === 'confusion' || move.forceSwitch)); } if (move.isBounceable) { var newMove = this.getMoveCopy(move.id); newMove.hasBounced = true; this.useMove(newMove, target, source); return null; } }, onAllyTryHitSide: function(target, source, move) { if (target.side === source.side) return; if (move.hasBounced) return; if (typeof move.isBounceable === 'undefined') { move.isBounceable = !!(move.category === 'Status' && (move.status || move.boosts || move.volatileStatus === 'confusion' || move.forceSwitch)); } if (move.isBounceable) { var newMove = this.getMoveCopy(move.id); newMove.hasBounced = true; this.useMove(newMove, target, source); return null; } } }, secondary: false, target: "self", type: "Psychic" }, "magicroom": { num: 478, accuracy: true, basePower: 0, category: "Status", desc: "For 5 turns, the held items of all active Pokemon have no effect. During the effect, Fling and Natural Gift are prevented from being used by all active Pokemon. If this move is used during the effect, the effect ends.", shortDesc: "For 5 turns, all held items have no effect.", id: "magicroom", name: "Magic Room", pp: 10, priority: 0, onHitField: function(target, source, effect) { if (this.pseudoWeather['magicroom']) { this.removePseudoWeather('magicroom', source, effect, '[of] '+source); } else { this.addPseudoWeather('magicroom', source, effect, '[of] '+source); } }, effect: { duration: 5, /*durationCallback: function(target, source, effect) { // Persistent isn't updated for BW moves if (source && source.ability === 'Persistent') { return 7; } return 5; },*/ onStart: function(target, source) { this.add('-fieldstart', 'move: Magic Room', '[of] '+source); }, onModifyPokemonPriority: 1, onModifyPokemon: function(pokemon) { if (pokemon.getItem().megaEvolves) return; pokemon.ignore['Item'] = true; }, onResidualOrder: 25, onEnd: function() { this.add('-fieldend', 'move: Magic Room', '[of] '+this.effectData.source); } }, secondary: false, target: "all", type: "Psychic" }, "magicalleaf": { num: 345, accuracy: true, basePower: 60, category: "Special", desc: "Deals damage to one adjacent target and does not check accuracy.", shortDesc: "This move does not check accuracy.", id: "magicalleaf", name: "Magical Leaf", pp: 20, priority: 0, secondary: false, target: "normal", type: "Grass" }, "magmastorm": { num: 463, accuracy: 75, basePower: 100, category: "Special", desc: "Deals damage to one adjacent target and prevents it from switching for four or five turns; seven turns if the user is holding Grip Claw. Causes damage to the target equal to 1/8 of its maximum HP (1/6 if the user is holding Binding Band), rounded down, at the end of each turn during effect. The target can still switch out if it is holding Shed Shell or uses Baton Pass, U-turn, or Volt Switch. The effect ends if either the user or the target leaves the field, or if the target uses Rapid Spin. This effect is not stackable or reset by using this or another partial-trapping move.", shortDesc: "Traps and damages the target for 4-5 turns.", id: "magmastorm", isViable: true, name: "Magma Storm", pp: 5, priority: 0, volatileStatus: 'partiallytrapped', secondary: false, target: "normal", type: "Fire" }, "magnetbomb": { num: 443, accuracy: true, basePower: 60, category: "Physical", desc: "Deals damage to one adjacent target and does not check accuracy.", shortDesc: "This move does not check accuracy.", id: "magnetbomb", name: "Magnet Bomb", pp: 20, priority: 0, isBullet: true, secondary: false, target: "normal", type: "Steel" }, "magneticflux": { num: 602, accuracy: true, basePower: 0, category: "Status", desc: "Raises the Defense and Sp. Def stats of ally Pokémon with the Plus or Minus Ability.", shortDesc: "Raises defenses of ally Pokemon with Plus/Minus.", id: "magneticflux", name: "Magnetic Flux", pp: 20, priority: 0, onHitSide: function(side, source) { var targets = []; for (var p in side.active) { if (side.active[p].ability === 'plus' || side.active[p].ability === 'minus') { targets.push(side.active[p]); } } if (!targets.length) return false; for (var i=0;i 1) { this.add('-message', '(Mat Block only works your first turn out.)'); return false; } }, effect: { duration: 1, onStart: function(target) { this.add('-singleturn', target, 'Mat Block'); }, onTryHitPriority: 3, onAllyTryHit: function(target, source, move) { if (move.breaksProtect) { target.removeVolatile('Mat Block'); return; } if (move && (move.target === 'self' || move.category === 'Status')) return; this.add('-activate', target, 'Mat Block', move.name); var lockedmove = source.getVolatile('lockedmove'); if (lockedmove) { // Outrage counter is reset if (source.volatiles['lockedmove'].duration === 2) { delete source.volatiles['lockedmove']; } } return null; } }, secondary: false, target: "allySide", type: "Fighting" }, "mefirst": { num: 382, accuracy: true, basePower: 0, category: "Status", desc: "The user selects one adjacent foe and uses the move it chose for use this turn against it, if possible, with 1.5x the power. The move must be a damaging move other than Chatter, Counter, Covet, Focus Punch, Me First, Metal Burst, Mirror Coat, Thief, or Struggle. Fails if the foe moves before the user. Ignores the foe's Substitute for the purpose of copying the move.", shortDesc: "Copies a foe at 1.5x power. User must be faster.", id: "mefirst", isViable: true, name: "Me First", pp: 20, priority: 0, onHit: function(target, pokemon) { var decision = this.willMove(target); if (decision) { var noMeFirst = { chatter:1, counter:1, covet:1, focuspunch:1, mefirst:1, metalburst:1, mirrorcoat:1, struggle:1, thief:1 }; var move = this.getMove(decision.move); if (move.category !== 'Status' && !noMeFirst[move]) { pokemon.addVolatile('mefirst'); this.useMove(move, pokemon); return; } } return false; }, effect: { duration: 1, onBasePowerPriority: 4, onBasePower: function(basePower) { return this.chainModify(1.5); } }, secondary: false, target: "adjacentFoe", type: "Normal" }, "meanlook": { num: 212, accuracy: true, basePower: 0, category: "Status", desc: "Prevents one adjacent target from switching out. The target can still switch out if it is holding Shed Shell or uses Baton Pass, U-turn, or Volt Switch. If the target leaves the field using Baton Pass, the replacement will remain trapped. The effect ends if the user leaves the field. Pokemon protected by Magic Coat or the Ability Magic Bounce are unaffected and instead use this move themselves.", shortDesc: "The target cannot switch out.", id: "meanlook", isViable: true, name: "Mean Look", pp: 5, priority: 0, isBounceable: true, onHit: function(target) { if (!target.addVolatile('trapped')) { this.add('-fail', target); } }, secondary: false, target: "normal", type: "Normal" }, "meditate": { num: 96, accuracy: true, basePower: 0, category: "Status", desc: "Raises the user's Attack by 1 stage.", shortDesc: "Boosts the user's Attack by 1.", id: "meditate", isViable: true, name: "Meditate", pp: 40, priority: 0, isSnatchable: true, boosts: { atk: 1 }, secondary: false, target: "self", type: "Psychic" }, "megadrain": { num: 72, accuracy: 100, basePower: 40, category: "Special", desc: "Deals damage to one adjacent target. The user recovers half of the HP lost by the target, rounded up. If Big Root is held by the user, the HP recovered is 1.3x, rounded half down.", shortDesc: "User recovers 50% of the damage dealt.", id: "megadrain", name: "Mega Drain", pp: 15, priority: 0, drain: [1,2], secondary: false, target: "normal", type: "Grass" }, "megakick": { num: 25, accuracy: 75, basePower: 120, category: "Physical", desc: "Deals damage to one adjacent target. Makes contact.", shortDesc: "No additional effect.", id: "megakick", isViable: true, name: "Mega Kick", pp: 5, priority: 0, isContact: true, secondary: false, target: "normal", type: "Normal" }, "megapunch": { num: 5, accuracy: 85, basePower: 80, category: "Physical", desc: "Deals damage to one adjacent target. Makes contact. Damage is boosted to 1.2x by the Ability Iron Fist.", shortDesc: "No additional effect.", id: "megapunch", name: "Mega Punch", pp: 20, priority: 0, isContact: true, isPunchAttack: true, secondary: false, target: "normal", type: "Normal" }, "megahorn": { num: 224, accuracy: 85, basePower: 120, category: "Physical", desc: "Deals damage to one adjacent target. Makes contact.", shortDesc: "No additional effect.", id: "megahorn", isViable: true, name: "Megahorn", pp: 10, priority: 0, isContact: true, secondary: false, target: "normal", type: "Bug" }, "memento": { num: 262, accuracy: 100, basePower: 0, category: "Status", desc: "Lowers one adjacent target's Attack and Special Attack by 2 stages. The user faints unless this move misses or there is no target. Fails entirely if the target has a Substitute, but does not fail if the target's stats cannot be changed.", shortDesc: "Lowers target's Attack, Sp. Atk by 2. User faints.", id: "memento", isViable: true, name: "Memento", pp: 10, priority: 0, isBounceable: false, boosts: { atk: -2, spa: -2 }, selfdestruct: true, secondary: false, target: "normal", type: "Dark" }, "metalburst": { num: 368, accuracy: 100, basePower: 0, damageCallback: function(pokemon) { if (pokemon.lastAttackedBy && pokemon.lastAttackedBy.thisTurn) { return 1.5 * pokemon.lastAttackedBy.damage; } return false; }, category: "Physical", desc: "Deals damage to the last foe to hit the user with an attack this turn. The damage is equal to 1.5x the HP lost by the user from that attack. If that foe's position is no longer in use, damage is done to a random foe in range. Only the last hit of a multi-hit attack is counted. Fails if the user moves first or if the user was not hit by a foe's attack this turn.", shortDesc: "If hit by an attack, returns 1.5x damage.", id: "metalburst", name: "Metal Burst", pp: 10, priority: 0, secondary: false, target: "scripted", type: "Steel" }, "metalclaw": { num: 232, accuracy: 95, basePower: 50, category: "Physical", desc: "Deals damage to one adjacent target with a 10% chance to raise the user's Attack by 1 stage. Makes contact.", shortDesc: "10% chance to boost the user's Attack by 1.", id: "metalclaw", name: "Metal Claw", pp: 35, priority: 0, isContact: true, secondary: { chance: 10, self: { boosts: { atk: 1 } } }, target: "normal", type: "Steel" }, "metalsound": { num: 319, accuracy: 85, basePower: 0, category: "Status", desc: "Lowers one adjacent target's Special Defense by 2 stages. Pokemon protected by Magic Coat or the Ability Magic Bounce are unaffected and instead use this move themselves. Pokemon with the Ability Soundproof are immune.", shortDesc: "Lowers the target's Sp. Def by 2.", id: "metalsound", name: "Metal Sound", pp: 40, priority: 0, isSoundBased: true, boosts: { spd: -2 }, secondary: false, target: "normal", type: "Steel" }, "meteormash": { num: 309, accuracy: 90, basePower: 90, category: "Physical", desc: "Deals damage to one adjacent target with a 20% chance to raise the user's Attack by 1 stage. Makes contact. Damage is boosted to 1.2x by the Ability Iron Fist.", shortDesc: "20% chance to boost the user's Attack by 1.", id: "meteormash", isViable: true, name: "Meteor Mash", pp: 10, priority: 0, isContact: true, isPunchAttack: true, secondary: { chance: 20, self: { boosts: { atk: 1 } } }, target: "normal", type: "Steel" }, "metronome": { num: 118, accuracy: true, basePower: 0, category: "Status", desc: "A random move is selected for use, other than After You, Assist, Bestow, Chatter, Copycat, Counter, Covet, Destiny Bond, Detect, Endure, Feint, Focus Punch, Follow Me, Freeze Shock, Helping Hand, Ice Burn, Me First, Metronome, Mimic, Mirror Coat, Mirror Move, Nature Power, Protect, Quash, Quick Guard, Rage Powder, Relic Song, Secret Sword, Sketch, Sleep Talk, Snarl, Snatch, Snore, Struggle, Switcheroo, Techno Blast, Thief, Transform, Trick, V-create, or Wide Guard.", shortDesc: "Picks a random move.", id: "metronome", name: "Metronome", pp: 10, priority: 0, onHit: function(target) { var moves = []; for (var i in exports.BattleMovedex) { var move = exports.BattleMovedex[i]; if (i !== move.id) continue; if (move.isNonstandard) continue; var noMetronome = { afteryou:1, assist:1, bestow:1, chatter:1, copycat:1, counter:1, covet:1, destinybond:1, detect:1, endure:1, feint:1, focuspunch:1, followme:1, freezeshock:1, helpinghand:1, iceburn:1, mefirst:1, metronome:1, mimic:1, mirrorcoat:1, mirrormove:1, naturepower:1, protect:1, quash:1, quickguard:1, ragepowder:1, relicsong:1, secretsword:1, sketch:1, sleeptalk:1, snatch:1, snarl:1, snore:1, struggle:1, switcheroo:1, technoblast:1, thief:1, transform:1, trick:1, vcreate:1, wideguard:1, diamondstorm:1, steameruption:1, hyperspacehole:1 }; if (!noMetronome[move.id]) { moves.push(move.id); } } var move = ''; if (moves.length) move = moves[this.random(moves.length)]; if (!move) { return false; } this.useMove(move, target); }, secondary: false, target: "self", type: "Normal" }, "milkdrink": { num: 208, accuracy: true, basePower: 0, category: "Status", desc: "The user restores 1/2 of its maximum HP, rounded half up. (Field: Can be used to heal an ally by draining 1/5 of the user's maximum HP, rounded down, and restoring that amount to the selected ally. Fails if the user's HP would be reduced to less than 1.)", shortDesc: "Heals the user by 50% of its max HP.", id: "milkdrink", isViable: true, name: "Milk Drink", pp: 10, priority: 0, isSnatchable: true, heal: [1,2], secondary: false, target: "self", type: "Normal" }, "mimic": { num: 102, accuracy: true, basePower: 0, category: "Status", desc: "This move is replaced by the last move used by one adjacent target. The copied move has the maximum PP for that move. Fails if the target has not made a move, if the user has Transformed, or if the move is Chatter, Mimic, Sketch, Struggle, or Transform. Ignores a target's Substitute.", shortDesc: "The last move the target used replaces this one.", id: "mimic", name: "Mimic", pp: 10, priority: 0, onHit: function(target, source) { var disallowedMoves = {chatter:1, mimic:1, sketch:1, struggle:1, transform:1}; if (source.transformed || !target.lastMove || disallowedMoves[target.lastMove] || source.moves.indexOf(target.lastMove) !== -1) return false; var moveslot = source.moves.indexOf('mimic'); if (moveslot === -1) return false; var move = Tools.getMove(target.lastMove); source.moveset[moveslot] = { move: move.name, id: move.id, pp: move.pp, maxpp: move.pp, target: move.target, disabled: false, used: false }; source.moves[moveslot] = toId(move.name); this.add('-start', source, 'Mimic', move.name); }, secondary: false, target: "normal", type: "Normal" }, "mindreader": { num: 170, accuracy: true, basePower: 0, category: "Status", desc: "On the following turn, one adjacent target cannot avoid the user's moves, even if the target is in the middle of a two-turn move. Fails if the user tries to use this move again during effect.", shortDesc: "User's next move will not miss the target.", id: "mindreader", name: "Mind Reader", pp: 5, priority: 0, volatileStatus: 'lockon', secondary: false, target: "normal", type: "Normal" }, "minimize": { num: 107, accuracy: true, basePower: 0, category: "Status", desc: "Raises the user's evasion by 2 stages. After using this move, Stomp, Steamroller, Body Slam, Flying Press, Dragon Rush and Phantom Force will have their power doubled and won't check accuracy if used against the user while it is active.", shortDesc: "Boosts the user's evasion by 2.", id: "minimize", name: "Minimize", pp: 10, priority: 0, isSnatchable: true, volatileStatus: 'minimize', effect: { noCopy: true, onSourceModifyDamage: function (damage, source, target, move) { if (move.id in {'stomp':1, 'steamroller':1, 'bodyslam':1, 'flyingpress':1, 'dragonrush':1, 'phantomforce':1}) { return this.chainModify(2); } }, onAccuracy: function (accuracy, target, source, move) { if (move.id in {'stomp':1, 'steamroller':1, 'bodyslam':1, 'flyingpress':1, 'dragonrush':1, 'phantomforce':1}) { return true; } return accuracy; } }, boosts: { evasion: 2 }, secondary: false, target: "self", type: "Normal" }, "miracleeye": { num: 357, accuracy: true, basePower: 0, category: "Status", desc: "Causes one adjacent target to have its positive evasion stat stage set to 0 while it is active. Psychic-type attacks can hit the target if it is a Dark-type. The effect ends when the target is no longer active. Fails if the target is already affected. Pokemon protected by Magic Coat or the Ability Magic Bounce are unaffected and instead use this move themselves. Ignores a target's Substitute.", shortDesc: "Blocks evasion mods. Psychic hits Dark.", id: "miracleeye", name: "Miracle Eye", pp: 40, priority: 0, isBounceable: true, volatileStatus: 'miracleeye', effect: { onStart: function(pokemon) { this.add('-start', pokemon, 'Miracle Eye'); }, onModifyPokemon: function(pokemon) { if (pokemon.hasType('Dark')) pokemon.negateImmunity['Psychic'] = true; }, onSourceModifyMove: function(move, source, target) { move.ignorePositiveEvasion = true; } }, secondary: false, target: "normal", type: "Psychic" }, "mirrorcoat": { num: 243, accuracy: 100, basePower: 0, damageCallback: function(pokemon) { if (pokemon.lastAttackedBy && pokemon.lastAttackedBy.thisTurn && this.getCategory(pokemon.lastAttackedBy.move) === 'Special') { return 2 * pokemon.lastAttackedBy.damage; } return false; }, category: "Special", desc: "Deals damage to the last foe to hit the user with a special attack this turn. The damage is equal to twice the HP lost by the user from that attack. If that foe's position is no longer in use, damage is done to a random foe in range. Only the last hit of a multi-hit attack is counted. Fails if the user was not hit by a foe's special attack this turn. Priority -5.", shortDesc: "If hit by special attack, returns double damage.", id: "mirrorcoat", isViable: true, name: "Mirror Coat", pp: 20, priority: -5, secondary: false, target: "scripted", type: "Psychic" }, "mirrormove": { num: 119, accuracy: true, basePower: 0, category: "Status", desc: "The user uses the last move used by a selected adjacent target. The copied move is used against that target, if possible. Fails if the target has not yet used a move, or the last move used was Acupressure, After You, Aromatherapy, Chatter, Conversion 2, Counter, Curse, Doom Desire, Feint, Final Gambit, Focus Punch, Future Sight, Gravity, Guard Split, Hail, Haze, Heal Bell, Heal Pulse, Helping Hand, Light Screen, Lucky Chant, Me First, Mimic, Mirror Coat, Mist, Mud Sport, Nature Power, Perish Song, Power Split, Psych Up, Quick Guard, Rain Dance, Reflect, Reflect Type, Role Play, Safeguard, Sandstorm, Sketch, Spikes, Spit Up, Stealth Rock, Struggle, Sunny Day, Tailwind, Toxic Spikes, Transform, Water Sport, Wide Guard, or any move that is self-targeting.", shortDesc: "User uses the target's last used move against it.", id: "mirrormove", name: "Mirror Move", pp: 20, priority: 0, isNotProtectable: true, onTryHit: function(target) { var noMirrorMove = {acupressure:1, afteryou:1, aromatherapy:1, chatter:1, conversion2:1, counter:1, curse:1, doomdesire:1, feint:1, finalgambit:1, focuspunch:1, futuresight:1, gravity:1, guardsplit:1, hail:1, haze:1, healbell:1, healpulse:1, helpinghand:1, lightscreen:1, luckychant:1, mefirst:1, mimic:1, mirrorcoat:1, mirrormove:1, mist:1, mudsport:1, naturepower:1, perishsong:1, powersplit:1, psychup:1, quickguard:1, raindance:1, reflect:1, reflecttype:1, roleplay:1, safeguard:1, sandstorm:1, sketch:1, spikes:1, spitup:1, stealthrock:1, struggle:1, sunnyday:1, tailwind:1, toxicspikes:1, transform:1, watersport:1, wideguard:1}; if (!target.lastMove || noMirrorMove[target.lastMove] || this.getMove(target.lastMove).target === 'self') { return false; } }, onHit: function(target, source) { this.useMove(target.lastMove, source); }, secondary: false, target: "normal", type: "Flying" }, "mirrorshot": { num: 429, accuracy: 85, basePower: 65, category: "Special", desc: "Deals damage to one adjacent target with a 30% chance to lower its accuracy by 1 stage.", shortDesc: "30% chance to lower the target's accuracy by 1.", id: "mirrorshot", name: "Mirror Shot", pp: 10, priority: 0, secondary: { chance: 30, boosts: { accuracy: -1 } }, target: "normal", type: "Steel" }, "mist": { num: 54, accuracy: true, basePower: 0, category: "Status", desc: "For 5 turns, the user and its party members are protected from having their stats lowered by other Pokemon.", shortDesc: "For 5 turns, protects user's party from stat drops.", id: "mist", name: "Mist", pp: 30, priority: 0, isSnatchable: true, sideCondition: 'mist', effect: { duration: 5, onBoost: function(boost, target, source) { if (!source || target === source) return; for (var i in boost) { if (boost[i] < 0) { delete boost[i]; this.add('-activate', target, 'Mist'); } } }, onStart: function(side) { this.add('-sidestart', side, 'Mist'); }, onResidualOrder: 21, onResidualSubOrder: 3, onEnd: function(side) { this.add('-sideend', side, 'Mist'); } }, secondary: false, target: "allySide", type: "Ice" }, "mistball": { num: 296, accuracy: 100, basePower: 70, category: "Special", desc: "Deals damage to one adjacent target with a 50% chance to lower its Special Attack by 1 stage.", shortDesc: "50% chance to lower the target's Sp. Atk by 1.", id: "mistball", name: "Mist Ball", pp: 5, priority: 0, isBullet: true, secondary: { chance: 50, boosts: { spa: -1 } }, target: "normal", type: "Psychic" }, "mistyterrain": { num: 581, accuracy: true, basePower: 0, category: "Status", desc: "For five turns, Grounded Pokemon cannot have major status problem inflicted on them by other Pokemon. Dragon-type moves used against them are weakened by 50%.", shortDesc: "Prevents status and weakens Dragon if grounded.", id: "mistyterrain", name: "Misty Terrain", pp: 10, priority: 0, terrain: 'mistyterrain', effect: { duration: 5, onSetStatus: function(status, target, source, effect) { if (!target.runImmunity('Ground')) return; if (source && source !== target || (effect && effect.id === 'toxicspikes')) { this.debug('misty terrain preventing status'); return false; } }, onTryHit: function(target, source, move) { if (!target.runImmunity('Ground')) return; if (move && move.id === 'yawn') { this.debug('misty terrain blocking yawn'); return false; } }, onBasePower: function(basePower, attacker, defender, move) { if (move.type === 'Dragon' && defender.runImmunity('Ground')) { this.debug('misty terrain weaken'); return this.chainModify(0.5); } }, onStart: function(side) { this.add('-fieldstart', 'Misty Terrain'); }, onResidualOrder: 21, onResidualSubOrder: 2, onEnd: function(side) { this.add('-fieldend', 'Misty Terrain'); } }, secondary: false, target: "all", type: "Fairy" }, "moonblast": { num: 585, accuracy: 100, basePower: 95, category: "Special", desc: "Deals damage to one adjacent target with a 30% chance to lower its Special Attack by 1 stage.", shortDesc: "30% chance to lower the target's Sp. Atk by 1.", id: "moonblast", isViable: true, name: "Moonblast", pp: 15, priority: 0, secondary: { chance: 30, boosts: { spa: -1 } }, target: "normal", type: "Fairy" }, "moonlight": { num: 236, accuracy: true, basePower: 0, category: "Status", desc: "The user restores 1/2 of its maximum HP if no weather conditions are in effect, 2/3 of its maximum HP if the weather is Sunny Day, and 1/4 of its maximum HP if the weather is Hail, Rain Dance, or Sandstorm, all rounded half down.", shortDesc: "Heals the user by a weather-dependent amount.", id: "moonlight", isViable: true, name: "Moonlight", pp: 5, priority: 0, isSnatchable: true, onHit: function(pokemon) { if (this.isWeather('sunnyday')) this.heal(this.modify(pokemon.maxhp, 0.667)); else if (this.isWeather(['raindance','sandstorm','hail'])) this.heal(this.modify(pokemon.maxhp, 0.25)); else this.heal(this.modify(pokemon.maxhp, 0.5)); }, secondary: false, target: "self", type: "Fairy" }, "morningsun": { num: 234, accuracy: true, basePower: 0, category: "Status", desc: "The user restores 1/2 of its maximum HP if no weather conditions are in effect, 2/3 of its maximum HP if the weather is Sunny Day, and 1/4 of its maximum HP if the weather is Hail, Rain Dance, or Sandstorm, all rounded half down.", shortDesc: "Heals the user by a weather-dependent amount.", id: "morningsun", isViable: true, name: "Morning Sun", pp: 5, priority: 0, isSnatchable: true, onHit: function(pokemon) { if (this.isWeather('sunnyday')) this.heal(this.modify(pokemon.maxhp, 0.667)); else if (this.isWeather(['raindance','sandstorm','hail'])) this.heal(this.modify(pokemon.maxhp, 0.25)); else this.heal(this.modify(pokemon.maxhp, 0.5)); }, secondary: false, target: "self", type: "Normal" }, "mudslap": { num: 189, accuracy: 100, basePower: 20, category: "Special", desc: "Deals damage to one adjacent target with a 100% chance to lower its accuracy by 1 stage.", shortDesc: "100% chance to lower the target's accuracy by 1.", id: "mudslap", name: "Mud-Slap", pp: 10, priority: 0, secondary: { chance: 100, boosts: { accuracy: -1 } }, target: "normal", type: "Ground" }, "mudbomb": { num: 426, accuracy: 85, basePower: 65, category: "Special", desc: "Deals damage to one adjacent target with a 30% chance to lower its accuracy by 1 stage.", shortDesc: "30% chance to lower the target's accuracy by 1.", id: "mudbomb", name: "Mud Bomb", pp: 10, priority: 0, isBullet: true, secondary: { chance: 30, boosts: { accuracy: -1 } }, target: "normal", type: "Ground" }, "mudshot": { num: 341, accuracy: 95, basePower: 55, category: "Special", desc: "Deals damage to one adjacent target with a 100% chance to lower its Speed by 1 stage.", shortDesc: "100% chance to lower the target's Speed by 1.", id: "mudshot", name: "Mud Shot", pp: 15, priority: 0, secondary: { chance: 100, boosts: { spe: -1 } }, target: "normal", type: "Ground" }, "mudsport": { num: 300, accuracy: true, basePower: 0, category: "Status", desc: "For 5 turns, all Electric-type attacks used by any active Pokemon have their power reduced to 0.33x. Fails if this move is already in effect; not stackable.", shortDesc: "For 5 turns, Electric-type attacks have 1/3 power.", id: "mudsport", name: "Mud Sport", pp: 15, priority: 0, onHitField: function(target, source, effect) { if (this.pseudoWeather['mudsport']) { return false; } else { this.addPseudoWeather('mudsport', source, effect, '[of] '+source); } }, effect: { duration: 5, onStart: function(side, source) { this.add('-fieldstart', 'move: Mud Sport', '[of] '+source); }, onBasePowerPriority: 1, onBasePower: function(basePower, attacker, defender, move) { if (move.type === 'Electric') { this.debug('mud sport weaken'); return this.chainModify([0x548, 0x1000]); // The Mud Sport modifier is slightly higher than the usual 0.33 modifier (0x547) } }, onResidualOrder: 21, onEnd: function() { this.add('-fieldend', 'move: Mud Sport'); } }, secondary: false, target: "all", type: "Ground" }, "muddywater": { num: 330, accuracy: 85, basePower: 90, category: "Special", desc: "Deals damage to all adjacent foes with a 30% chance to lower their accuracy by 1 stage each.", shortDesc: "30% chance to lower the foe(s) accuracy by 1.", id: "muddywater", isViable: true, name: "Muddy Water", pp: 10, priority: 0, secondary: { chance: 30, boosts: { accuracy: -1 } }, target: "allAdjacentFoes", type: "Water" }, "mysticalfire": { num: 595, accuracy: 100, basePower: 65, category: "Special", desc: "Deals damage to one adjacent target and lowers its Special Attack by 1 stage.", shortDesc: "Lowers the target's Special Attack by 1.", id: "mysticalfire", name: "Mystical Fire", pp: 10, priority: 0, secondary: { chance: 100, boosts: { spa: -1 } }, target: "normal", type: "Fire" }, "nastyplot": { num: 417, accuracy: true, basePower: 0, category: "Status", desc: "Raises the user's Special Attack by 2 stages.", shortDesc: "Boosts the user's Sp. Atk by 2.", id: "nastyplot", isViable: true, name: "Nasty Plot", pp: 20, priority: 0, isSnatchable: true, boosts: { spa: 2 }, secondary: false, target: "self", type: "Dark" }, "naturalgift": { num: 363, accuracy: 100, basePower: 0, basePowerCallback: function(pokemon) { if (pokemon.volatiles['naturalgift']) return pokemon.volatiles['naturalgift'].basePower; return false; }, category: "Physical", desc: "Deals damage to one adjacent target if the user's held item is a Berry. The type and power of this move depend on the kind of Berry held, and the Berry is lost. Fails if the user is not holding a Berry, if the user has the Ability Klutz, or if Embargo or Magic Room is in effect for the user.", shortDesc: "Power and type depends on the user's Berry.", id: "naturalgift", name: "Natural Gift", pp: 15, priority: 0, beforeMoveCallback: function(pokemon) { var item = pokemon.getItem(); if (item.id && item.naturalGift) { pokemon.addVolatile('naturalgift'); pokemon.volatiles['naturalgift'].basePower = item.naturalGift.basePower; pokemon.volatiles['naturalgift'].type = item.naturalGift.type; pokemon.setItem(''); } }, onTryHit: function(target, source) { if (!source.volatiles['naturalgift']) return false; }, onModifyMove: function(move, pokemon) { if (pokemon.volatiles['naturalgift']) move.type = pokemon.volatiles['naturalgift'].type; }, onHit: function(target, source) { return !!source.volatiles['naturalgift']; }, effect: { duration: 1 }, secondary: false, target: "normal", type: "Normal" }, "naturepower": { num: 267, accuracy: true, basePower: 0, category: "Status", desc: "This move calls another move for use depending on the battle terrain: Thunderbolt in Electric Terrain, Energy Ball in Grassy Terrain, Moonblast in Misty Terrain, and Tri Attack in plain terrain.", shortDesc: "Attack depends on terrain (default Tri Attack).", id: "naturepower", isViable: true, name: "Nature Power", pp: 20, priority: 0, onHit: function(target) { var moveToUse = 'triattack'; if (this.isTerrain('electricterrain')) moveToUse = 'thunderbolt'; else if (this.isTerrain('grassyterrain')) moveToUse = 'energyball'; else if (this.isTerrain('mistyterrain')) moveToUse = 'moonblast'; this.useMove(moveToUse, target); }, secondary: false, target: "self", type: "Normal" }, "needlearm": { num: 302, accuracy: 100, basePower: 60, category: "Physical", desc: "Deals damage to one adjacent target with a 30% chance to flinch it. Makes contact.", shortDesc: "30% chance to flinch the target.", id: "needlearm", name: "Needle Arm", pp: 15, priority: 0, isContact: true, secondary: { chance: 30, volatileStatus: 'flinch' }, target: "normal", type: "Grass" }, "nightdaze": { num: 539, accuracy: 95, basePower: 85, category: "Special", desc: "Deals damage to one adjacent target with a 40% chance to lower its accuracy by 1 stage.", shortDesc: "40% chance to lower the target's accuracy by 1.", id: "nightdaze", isViable: true, name: "Night Daze", pp: 10, priority: 0, secondary: { chance: 40, boosts: { accuracy: -1 } }, target: "normal", type: "Dark" }, "nightshade": { num: 101, accuracy: 100, basePower: 0, damage: 'level', category: "Special", desc: "Deals damage to one adjacent target equal to the user's level.", shortDesc: "Does damage equal to the user's level.", id: "nightshade", isViable: true, name: "Night Shade", pp: 15, priority: 0, secondary: false, target: "normal", type: "Ghost" }, "nightslash": { num: 400, accuracy: 100, basePower: 70, category: "Physical", desc: "Deals damage to one adjacent target with a higher chance for a critical hit. Makes contact.", shortDesc: "High critical hit ratio.", id: "nightslash", isViable: true, name: "Night Slash", pp: 15, priority: 0, isContact: true, critRatio: 2, secondary: false, target: "normal", type: "Dark" }, "nightmare": { num: 171, accuracy: 100, basePower: 0, category: "Status", desc: "Causes one adjacent target to lose 1/4 of its maximum HP, rounded down, at the end of each turn as long as it is asleep. This move does not affect the target unless it is asleep. The effect ends when the target wakes up.", shortDesc: "A sleeping target is hurt by 1/4 max HP per turn.", id: "nightmare", name: "Nightmare", pp: 15, priority: 0, volatileStatus: 'nightmare', effect: { onResidualOrder: 9, onStart: function(pokemon) { if (pokemon.status !== 'slp') { return false; } this.add('-start', pokemon, 'Nightmare'); }, onResidualOrder: 9, onResidual: function(pokemon) { if (pokemon.status !== 'slp') { pokemon.removeVolatile('nightmare'); return; } this.damage(pokemon.maxhp/4); } }, secondary: false, target: "normal", type: "Ghost" }, "nobleroar": { num: 568, accuracy: 100, basePower: 0, category: "Status", desc: "Lowers the target's Attack and Special Attack by 1 stage. Pokemon protected by Magic Coat or the Ability Magic Bounce are unaffected and instead use this move themselves.", shortDesc: "Lowers target's Atk and SpAtk by 1.", id: "nobleroar", name: "Noble Roar", pp: 30, priority: 0, boosts: { atk: -1, spa: -1 }, secondary: false, target: "normal", type: "Normal" }, "nuzzle": { num: 609, accuracy: 100, basePower: 20, category: "Physical", desc: "Deals damage and paralyzes the target.", shortDesc: "Deals damage and paralyzes the target.", id: "nuzzle", name: "Nuzzle", pp: 20, priority: 0, secondary: { chance: 100, status: 'par' }, target: "normal", type: "Electric" }, "oblivionwing": { num: 613, accuracy: 100, basePower: 80, category: "Special", desc: "Deals damage to one adjacent target. The user recovers 75% of the HP lost by the target, rounded up.", shortDesc: "User recovers 75% of the damage dealt.", id: "oblivionwing", isViable: true, name: "Oblivion Wing", pp: 10, priority: 0, drain: [3,4], secondary: false, target: "normal", type: "Flying" }, "octazooka": { num: 190, accuracy: 85, basePower: 65, category: "Special", desc: "Deals damage to one adjacent target with a 50% chance to lower its accuracy by 1 stage.", shortDesc: "50% chance to lower the target's accuracy by 1.", id: "octazooka", name: "Octazooka", pp: 10, priority: 0, isBullet: true, secondary: { chance: 50, boosts: { accuracy: -1 } }, target: "normal", type: "Water" }, "odorsleuth": { num: 316, accuracy: true, basePower: 0, category: "Status", desc: "Causes one adjacent target to have its positive evasion stat stage set to 0 while it is active. Normal and Fighting-type attacks can hit the target if it is a Ghost-type. The effect ends when the target is no longer active. Fails if the target is already affected. Pokemon protected by Magic Coat or the Ability Magic Bounce are unaffected and instead use this move themselves. Ignores a target's Substitute.", shortDesc: "Blocks evasion mods. Fighting, Normal hit Ghost.", id: "odorsleuth", name: "Odor Sleuth", pp: 40, priority: 0, isBounceable: true, volatileStatus: 'foresight', secondary: false, target: "normal", type: "Normal" }, "ominouswind": { num: 466, accuracy: 100, basePower: 60, category: "Special", desc: "Deals damage to one adjacent target with a 10% chance to raise the user's Attack, Defense, Speed, Special Attack, and Special Defense by 1 stage.", shortDesc: "10% chance to boost all stats by 1 (not acc/eva).", id: "ominouswind", name: "Ominous Wind", pp: 5, priority: 0, secondary: { chance: 10, self: { boosts: { atk: 1, def: 1, spa: 1, spd: 1, spe: 1 } } }, target: "normal", type: "Ghost" }, "outrage": { num: 200, accuracy: 100, basePower: 120, category: "Physical", desc: "Deals damage to one adjacent foe at random. The user spends two or three turns locked into this move and becomes confused after the last turn of the effect if it is not already. If the user is prevented from moving or the attack is not successful against the target on the first turn of the effect or the second turn of a three-turn effect, the effect ends without causing confusion. If this move is called by Sleep Talk, the move is used for one turn and does not confuse the user. Makes contact.", shortDesc: "Lasts 2-3 turns. Confuses the user afterwards.", id: "outrage", isViable: true, name: "Outrage", pp: 10, priority: 0, isContact: true, self: { volatileStatus: 'lockedmove' }, secondary: false, target: "randomNormal", type: "Dragon" }, "overheat": { num: 315, accuracy: 90, basePower: 130, category: "Special", desc: "Deals damage to one adjacent target and lowers the user's Special Attack by 2 stages.", shortDesc: "Lowers the user's Sp. Atk by 2.", id: "overheat", isViable: true, name: "Overheat", pp: 5, priority: 0, self: { boosts: { spa: -2 } }, secondary: false, target: "normal", type: "Fire" }, "painsplit": { num: 220, accuracy: true, basePower: 0, category: "Status", desc: "The user and one adjacent target's HP become the average of their current HP, rounded down, but not more than the maximum HP of either one.", shortDesc: "Shares HP of user and target equally.", id: "painsplit", isViable: true, name: "Pain Split", pp: 20, priority: 0, onHit: function(target, pokemon) { var averagehp = Math.floor((target.hp + pokemon.hp) / 2) || 1; target.sethp(averagehp); pokemon.sethp(averagehp); this.add('-sethp', target, target.getHealth, pokemon, pokemon.getHealth, '[from] move: Pain Split'); }, secondary: false, target: "normal", type: "Normal" }, "paraboliccharge": { num: 570, accuracy: 100, basePower: 50, category: "Special", desc: "Deals damage to all adjacent targets. The user recovers half of the HP lost by the target, rounded up.", shortDesc: "User recovers 50% of the damage dealt.", id: "paraboliccharge", name: "Parabolic Charge", pp: 20, priority: 0, isViable: true, drain: [1,2], secondary: false, target: "allAdjacent", type: "Electric" }, "partingshot": { num: 575, accuracy: 100, basePower: 0, category: "Status", desc: "Lowers all adjacent foes' Attack and Special Attack by 1 stage, then the user switches out.", shortDesc: "Foe's Atk/SpA -1, then switch out.", id: "partingshot", name: "Parting Shot", pp: 20, priority: 0, isSoundBased: true, selfSwitch: true, boosts: { atk: -1, spa: -1 }, secondary: false, target: "normal", type: "Dark" }, "payday": { num: 6, accuracy: 100, basePower: 40, category: "Physical", desc: "Deals damage to one adjacent target. (In-game: Each time this move is successfully used in battle, an amount of money equal to five times the user's level is added to the total the player receives upon winning the battle.)", shortDesc: "Scatters coins.", id: "payday", name: "Pay Day", pp: 20, priority: 0, onHit: function() { this.add('-fieldactivate', 'move: Pay Day'); }, secondary: false, target: "normal", type: "Normal" }, "payback": { num: 371, accuracy: 100, basePower: 50, basePowerCallback: function(pokemon, target) { if (target.newlySwitched) { this.debug('Payback NOT boosted on a switch'); return 50; } if (this.willMove(target)) { this.debug('Payback NOT boosted'); return 50; } this.debug('Payback damage boost'); return 100; }, category: "Physical", desc: "Deals damage to one adjacent target. Power doubles if the target moves before the user; power is not doubled if the target switches out. Makes contact.", shortDesc: "Power doubles if the user moves after the target.", id: "payback", isViable: true, name: "Payback", pp: 10, priority: 0, isContact: true, secondary: false, target: "normal", type: "Dark" }, "peck": { num: 64, accuracy: 100, basePower: 35, category: "Physical", desc: "Deals damage to one adjacent or non-adjacent target. Makes contact.", shortDesc: "No additional effect.", id: "peck", name: "Peck", pp: 35, priority: 0, isContact: true, secondary: false, target: "any", type: "Flying" }, "perishsong": { num: 195, accuracy: true, basePower: 0, category: "Status", desc: "Causes the user and all adjacent and non-adjacent Pokemon to receive a perish count of 4 if it doesn't already have a perish count. At the end of each turn including the turn used, the perish count of all active Pokemon lowers by 1 and Pokemon faint if the number reaches 0. The perish count is removed from Pokemon who switch out. If a Pokemon uses Baton Pass while it has a perish count, the replacement will gain the perish count and continue to count down. Pokemon with the Ability Soundproof are immune. Ignores a target's Substitute.", shortDesc: "All active Pokemon will faint in 3 turns.", id: "perishsong", isViable: true, name: "Perish Song", pp: 5, priority: 0, isSoundBased: true, onHitField: function(target, source) { var result = true; for (var i=0; i=0; i--) { if (this.queue[i].choice === 'residual') { this.queue.splice(i,0,decision); break; } } this.add('-activate', target, 'move: Quash'); } else { return false; } }, secondary: false, target: "normal", type: "Dark" }, "quickattack": { num: 98, accuracy: 100, basePower: 40, category: "Physical", desc: "Deals damage to one adjacent target. Makes contact. Priority +1.", shortDesc: "Usually goes first.", id: "quickattack", isViable: true, name: "Quick Attack", pp: 30, priority: 1, isContact: true, secondary: false, target: "normal", type: "Normal" }, "quickguard": { num: 501, accuracy: true, basePower: 0, category: "Status", desc: "The user and its party members are protected from attacks with priority greater than 0 made by other Pokemon, including allies, during this turn. Fails if this move is already in effect for the user's side. Priority +3.", shortDesc: "Protects allies from priority attacks this turn.", id: "quickguard", name: "Quick Guard", pp: 15, priority: 3, isSnatchable: true, sideCondition: 'quickguard', onTryHitSide: function(side, source) { return this.willAct(); }, effect: { duration: 1, onStart: function(target, source) { this.add('-singleturn', source, 'Quick Guard'); }, onTryHitPriority: 4, onTryHit: function(target, source, effect) { // Quick Guard blocks moves with positive priority, even those given increased priority by Prankster or Gale Wings. // (e.g. it blocks 0 priority moves boosted by Prankster or Gale Wings) if (effect && (effect.id === 'feint' || effect.priority <= 0 || effect.target === 'self')) { return; } this.add('-activate', target, 'Quick Guard'); var lockedmove = source.getVolatile('lockedmove'); if (lockedmove) { // Outrage counter is reset if (source.volatiles['lockedmove'].duration === 2) { delete source.volatiles['lockedmove']; } } return null; } }, secondary: false, target: "allySide", type: "Fighting" }, "quiverdance": { num: 483, accuracy: true, basePower: 0, category: "Status", desc: "Raises the user's Special Attack, Special Defense, and Speed by 1 stage.", shortDesc: "Boosts the user's Sp. Atk, Sp. Def, Speed by 1.", id: "quiverdance", isViable: true, name: "Quiver Dance", pp: 20, priority: 0, isSnatchable: true, boosts: { spa: 1, spd: 1, spe: 1 }, secondary: false, target: "self", type: "Bug" }, "rage": { num: 99, accuracy: 100, basePower: 20, category: "Physical", desc: "Deals damage to one adjacent target. Once this move is used, the user's Attack is raised by 1 stage every time it is hit by another Pokemon's attack as long as this move is chosen for use. Makes contact.", shortDesc: "Boosts the user's Attack by 1 if hit during use.", id: "rage", name: "Rage", pp: 20, priority: 0, isContact: true, self: { volatileStatus: 'rage' }, effect: { onStart: function(pokemon) { this.add('-singlemove', pokemon, 'Rage'); }, onHit: function(target, source, move) { if (target !== source && move.category !== 'Status') { this.boost({atk:1}); } }, onBeforeMovePriority: 100, onBeforeMove: function(pokemon) { this.debug('removing Rage before attack'); pokemon.removeVolatile('rage'); } }, secondary: false, target: "normal", type: "Normal" }, "ragepowder": { num: 476, accuracy: true, basePower: 0, category: "Status", desc: "Until the end of the turn, all single-target attacks from the foe's team are redirected to the user if they are in range. Such attacks are redirected to the user before they can be reflected by Magic Coat or the Ability Magic Bounce, or drawn in by the Abilities Lightningrod or Storm Drain. Fails if it is not a double or triple battle. Priority +3.", shortDesc: "The foes' moves target the user on the turn used.", id: "ragepowder", name: "Rage Powder", pp: 20, priority: 2, isPowder: true, volatileStatus: 'ragepowder', effect: { duration: 1, onStart: function(pokemon) { this.add('-start', pokemon, 'move: Rage Powder'); }, onFoeRedirectTarget: function(target, source, source2, move) { if (source.runImmunity('powder') && this.validTarget(this.effectData.target, source, move.target)) { this.debug("Rage Powder redirected target of move"); return this.effectData.target; } } }, secondary: false, target: "self", type: "Bug" }, "raindance": { num: 240, accuracy: true, basePower: 0, category: "Status", desc: "For 5 turns, the weather becomes Rain Dance. The power of Water-type attacks is 1.5x and the power of Fire-type attacks is 0.5x during the effect. Lasts for 8 turns if the user is holding Damp Rock. Fails if the current weather is Rain Dance.", shortDesc: "For 5 turns, heavy rain powers Water moves.", id: "raindance", isViable: true, name: "Rain Dance", pp: 5, priority: 0, weather: 'RainDance', secondary: false, target: "all", type: "Water" }, "rapidspin": { num: 229, accuracy: 100, basePower: 20, category: "Physical", desc: "Deals damage to one adjacent target. If this move is successful and the user has not fainted, the effects of Leech Seed and partial-trapping moves end for the user, and all hazards are removed from the user's side of the field.", shortDesc: "Frees user from hazards/partial trap/Leech Seed.", id: "rapidspin", isViable: true, name: "Rapid Spin", pp: 40, priority: 0, isContact: true, self: { onHit: function(pokemon) { if (pokemon.hp && pokemon.removeVolatile('leechseed')) { this.add('-end', pokemon, 'Leech Seed', '[from] move: Rapid Spin', '[of] '+pokemon); } var sideConditions = {spikes:1, toxicspikes:1, stealthrock:1, stickyweb:1}; for (var i in sideConditions) { if (pokemon.hp && pokemon.side.removeSideCondition(i)) { this.add('-sideend', pokemon.side, this.getEffect(i).name, '[from] move: Rapid Spin', '[of] '+pokemon); } } if (pokemon.hp && pokemon.volatiles['partiallytrapped']) { this.add('-remove', pokemon, pokemon.volatiles['partiallytrapped'].sourceEffect.name, '[from] move: Rapid Spin', '[of] '+pokemon, '[partiallytrapped]'); delete pokemon.volatiles['partiallytrapped']; } } }, secondary: false, target: "normal", type: "Normal" }, "razorleaf": { num: 75, accuracy: 95, basePower: 55, category: "Physical", desc: "Deals damage to all adjacent foes with a higher chance for a critical hit.", shortDesc: "High critical hit ratio. Hits adjacent foes.", id: "razorleaf", name: "Razor Leaf", pp: 25, priority: 0, critRatio: 2, secondary: false, target: "allAdjacentFoes", type: "Grass" }, "razorshell": { num: 534, accuracy: 95, basePower: 75, category: "Physical", desc: "Deals damage to one adjacent target with a 50% chance to lower its Defense by 1 stage. Makes contact.", shortDesc: "50% chance to lower the target's Defense by 1.", id: "razorshell", isViable: true, name: "Razor Shell", pp: 10, priority: 0, isContact: true, secondary: { chance: 50, boosts: { def: -1 } }, target: "normal", type: "Water" }, "razorwind": { num: 13, accuracy: 100, basePower: 80, category: "Special", desc: "Deals damage to all adjacent foes with a higher chance for a critical hit. This attack charges on the first turn and strikes on the second. The user cannot make a move between turns. If the user is holding a Power Herb, the move completes in one turn.", shortDesc: "Charges, then hits foe(s) turn 2. High crit ratio.", id: "razorwind", name: "Razor Wind", pp: 10, priority: 0, isTwoTurnMove: true, onTry: function(attacker, defender, move) { if (attacker.removeVolatile(move.id)) { return; } this.add('-prepare', attacker, move.name, defender); if (!this.runEvent('ChargeMove', attacker, defender, move)) { this.add('-anim', attacker, move.name, defender); return; } attacker.addVolatile(move.id, defender); return null; }, effect: { duration: 2, onLockMove: 'razorwind' }, critRatio: 2, secondary: false, target: "allAdjacentFoes", type: "Normal" }, "recover": { num: 105, accuracy: true, basePower: 0, category: "Status", desc: "The user restores 1/2 of its maximum HP, rounded half up.", shortDesc: "Heals the user by 50% of its max HP.", id: "recover", isViable: true, name: "Recover", pp: 10, priority: 0, isSnatchable: true, heal: [1,2], secondary: false, target: "self", type: "Normal" }, "recycle": { num: 278, accuracy: true, basePower: 0, category: "Status", desc: "The user regains the item it last used, if it is not holding an item. Fails if the user was not holding an item, if the item was a popped Air Balloon, or if the item was lost to Bug Bite, Covet, Incinerate, Knock Off, Pluck, or Thief. Items thrown with Fling can be regained.", shortDesc: "Restores the item the user last used.", id: "recycle", name: "Recycle", pp: 10, priority: 0, isSnatchable: true, onHit: function(pokemon) { if (!pokemon.item && pokemon.lastItem) { pokemon.setItem(pokemon.lastItem); this.add("-item", pokemon, pokemon.item, '[from] move: Recycle'); } else return false; }, secondary: false, target: "self", type: "Normal" }, "reflect": { num: 115, accuracy: true, basePower: 0, category: "Status", desc: "For 5 turns, the user and its party members take 0.5x damage from physical attacks, or 0.66x damage if in a double or triple battle. Critical hits ignore this protection. It is removed from the user's side if the user or an ally is successfully hit by Brick Break or Defog. Brick Break removes the effect before damage is calculated. Lasts for 8 turns if the user is holding Light Clay.", shortDesc: "For 5 turns, physical damage to allies is halved.", id: "reflect", isViable: true, name: "Reflect", pp: 20, priority: 0, isSnatchable: true, sideCondition: 'reflect', effect: { duration: 5, durationCallback: function(target, source, effect) { if (source && source.item === 'lightclay') { return 8; } return 5; }, onFoeModifyDamage: function(damage, source, target, move) { if (this.getCategory(move) === 'Physical' && target.side === this.effectData.target) { if (!move.crit && !move.ignoreScreens) { this.debug('Reflect weaken'); if (source.side.active.length > 1) return this.chainModify(0.66); return this.chainModify(0.5); } } }, onStart: function(side) { this.add('-sidestart',side,'Reflect'); }, onResidualOrder: 21, onEnd: function(side) { this.add('-sideend',side,'Reflect'); } }, secondary: false, target: "allySide", type: "Psychic" }, "reflecttype": { num: 513, accuracy: true, basePower: 0, category: "Status", desc: "Causes the user's types to become those of one adjacent target. Fails if the user is an Arceus. Ignores a target's Substitute.", shortDesc: "User becomes the same type as the target.", id: "reflecttype", name: "Reflect Type", pp: 15, priority: 0, onHit: function(target, source) { if (source.num === 493) return false; this.add('-start', source, 'typechange', target.getTypes(true).join('/'), '[from] move: Reflect Type', '[of] '+target); source.typesData = []; for (var i=0, l=target.typesData.length; i= target.maxhp) return false; if (!target.setStatus('slp')) return false; target.statusData.time = 3; target.statusData.startTime = 3; this.heal(target.maxhp); //Aeshetic only as the healing happens after you fall asleep in-game this.add('-status', target, 'slp', '[from] move: Rest'); }, secondary: false, target: "self", type: "Psychic" }, "retaliate": { num: 514, accuracy: 100, basePower: 70, category: "Physical", desc: "Deals damage to one adjacent target. Power doubles if one of the user's party members fainted last turn. Makes contact.", shortDesc: "Power doubles if an ally fainted last turn.", id: "retaliate", name: "Retaliate", pp: 5, priority: 0, isContact: true, onBasePowerPriority: 4, onBasePower: function(basePower, pokemon) { if (pokemon.side.faintedLastTurn) { this.debug('Boosted for a faint last turn'); return this.chainModify(2); } }, secondary: false, target: "normal", type: "Normal" }, "return": { num: 216, accuracy: 100, basePower: 0, basePowerCallback: function(pokemon) { return Math.floor((pokemon.happiness * 10) / 25) || 1; }, category: "Physical", desc: "Deals damage to one adjacent target. Power is equal to the greater of (user's Happiness * 2/5), rounded down, or 1. Makes contact.", shortDesc: "Max 102 power at maximum Happiness.", id: "return", isViable: true, name: "Return", pp: 20, priority: 0, isContact: true, secondary: false, target: "normal", type: "Normal" }, "revenge": { num: 279, accuracy: 100, basePower: 60, basePowerCallback: function(pokemon, source) { if (source.lastDamage > 0 && pokemon.lastAttackedBy && pokemon.lastAttackedBy.thisTurn) { this.debug('Boosted for getting hit by '+pokemon.lastAttackedBy.move); return 120; } return 60; }, category: "Physical", desc: "Deals damage to one adjacent target. Power doubles if the user was hit by that target this turn. Makes contact. Priority -4.", shortDesc: "Power doubles if user is damaged by the target.", id: "revenge", name: "Revenge", pp: 10, priority: -4, isContact: true, secondary: false, target: "normal", type: "Fighting" }, "reversal": { num: 179, accuracy: 100, basePower: 0, basePowerCallback: function(pokemon, target) { var ratio = pokemon.hp * 48 / pokemon.maxhp; if (ratio < 2) { return 200; } if (ratio < 5) { return 150; } if (ratio < 10) { return 100; } if (ratio < 17) { return 80; } if (ratio < 33) { return 40; } return 20; }, category: "Physical", desc: "Deals damage to one adjacent target based on the amount of HP the user has left. X is equal to (user's current HP * 48 / user's maximum HP), rounded down; the base power of this attack is 20 if X is 33 to 48, 40 if X is 17 to 32, 80 if X is 10 to 16, 100 if X is 5 to 9, 150 if X is 2 to 4, and 200 if X is 0 or 1. Makes contact.", shortDesc: "More power the less HP the user has left.", id: "reversal", isViable: true, name: "Reversal", pp: 15, priority: 0, isContact: true, secondary: false, target: "normal", type: "Fighting" }, "roar": { num: 46, accuracy: true, basePower: 0, category: "Status", desc: "Causes one adjacent target to be forced to switch out and be replaced with a random unfainted ally. Fails if the target used Ingrain previously or has the Ability Suction Cups. Pokemon with the Ability Soundproof are immune. Pokemon protected by Magic Coat or the Ability Magic Bounce are unaffected and instead use this move themselves. Ignores a target's Substitute. Priority -6. (Wild battles: The battle ends as long as it is not a double battle and the user's level is not less than the opponent's level.)", shortDesc: "Forces the target to switch to a random ally.", id: "roar", isViable: true, name: "Roar", pp: 20, priority: -6, isSoundBased: true, isNotProtectable: true, forceSwitch: true, secondary: false, target: "normal", type: "Normal" }, "roaroftime": { num: 459, accuracy: 90, basePower: 150, category: "Special", desc: "Deals damage to one adjacent target. If this move is successful, the user must recharge on the following turn and cannot make a move.", shortDesc: "User cannot move next turn.", id: "roaroftime", name: "Roar of Time", pp: 5, priority: 0, self: { volatileStatus: 'mustrecharge' }, secondary: false, target: "normal", type: "Dragon" }, "rockblast": { num: 350, accuracy: 90, basePower: 25, category: "Physical", desc: "Deals damage to one adjacent target and hits two to five times. Has a 1/3 chance to hit two or three times, and a 1/6 chance to hit four or five times. If one of the hits breaks the target's Substitute, it will take damage for the remaining hits. If the user has the Ability Skill Link, this move will always hit five times.", shortDesc: "Hits 2-5 times in one turn.", id: "rockblast", isViable: true, name: "Rock Blast", pp: 10, priority: 0, multihit: [2,5], secondary: false, target: "normal", type: "Rock" }, "rockclimb": { num: 431, accuracy: 85, basePower: 90, category: "Physical", desc: "Deals damage to one adjacent target with a 20% chance to confuse it. Makes contact.", shortDesc: "20% chance to confuse the target.", id: "rockclimb", name: "Rock Climb", pp: 20, priority: 0, isContact: true, secondary: { chance: 20, volatileStatus: 'confusion' }, target: "normal", type: "Normal" }, "rockpolish": { num: 397, accuracy: true, basePower: 0, category: "Status", desc: "Raises the user's Speed by 2 stages.", shortDesc: "Boosts the user's Speed by 2.", id: "rockpolish", isViable: true, name: "Rock Polish", pp: 20, priority: 0, isSnatchable: true, boosts: { spe: 2 }, secondary: false, target: "self", type: "Rock" }, "rockslide": { num: 157, accuracy: 90, basePower: 75, category: "Physical", desc: "Deals damage to all adjacent foes with a 30% chance to flinch each.", shortDesc: "30% chance to flinch the foe(s).", id: "rockslide", isViable: true, name: "Rock Slide", pp: 10, priority: 0, secondary: { chance: 30, volatileStatus: 'flinch' }, target: "allAdjacentFoes", type: "Rock" }, "rocksmash": { num: 249, accuracy: 100, basePower: 40, category: "Physical", desc: "Deals damage to one adjacent target with a 50% chance to lower its Defense by 1 stage. Makes contact.", shortDesc: "50% chance to lower the target's Defense by 1.", id: "rocksmash", name: "Rock Smash", pp: 15, priority: 0, isContact: true, secondary: { chance: 50, boosts: { def: -1 } }, target: "normal", type: "Fighting" }, "rockthrow": { num: 88, accuracy: 90, basePower: 50, category: "Physical", desc: "Deals damage to one adjacent target.", shortDesc: "No additional effect.", id: "rockthrow", name: "Rock Throw", pp: 15, priority: 0, secondary: false, target: "normal", type: "Rock" }, "rocktomb": { num: 317, accuracy: 95, basePower: 60, category: "Physical", desc: "Deals damage to one adjacent target with a 100% chance to lower its Speed by 1 stage.", shortDesc: "100% chance to lower the target's Speed by 1.", id: "rocktomb", name: "Rock Tomb", pp: 15, priority: 0, secondary: { chance: 100, boosts: { spe: -1 } }, target: "normal", type: "Rock" }, "rockwrecker": { num: 439, accuracy: 90, basePower: 150, category: "Physical", desc: "Deals damage to one adjacent target. If this move is successful, the user must recharge on the following turn and cannot make a move.", shortDesc: "User cannot move next turn.", id: "rockwrecker", name: "Rock Wrecker", pp: 5, priority: 0, self: { volatileStatus: 'mustrecharge' }, secondary: false, target: "normal", type: "Rock" }, "roleplay": { num: 272, accuracy: true, basePower: 0, category: "Status", desc: "The user's Ability changes to match one adjacent target's Ability. Fails if the user's Ability is Multitype or already matches the target, or if the target's Ability is Flower Gift, Forecast, Illusion, Imposter, Multitype, Trace, Wonder Guard, or Zen Mode. This move ignores Protect and Detect. Ignores a target's Substitute.", shortDesc: "User replaces its Ability with the target's.", id: "roleplay", name: "Role Play", pp: 10, priority: 0, isNotProtectable: true, onTryHit: function(target, source) { var bannedAbilities = {flowergift:1, forecast:1, illusion:1, imposter:1, multitype:1, trace:1, wonderguard:1, zenmode:1}; if (bannedAbilities[target.ability] || source.ability === 'multitype' || target.ability === source.ability) { return false; } }, onHit: function(target, source) { if (source.setAbility(target.ability)) { this.add('-ability', source, source.ability, '[from] move: Role Play', '[of] '+target); return; } return false; }, secondary: false, target: "normal", type: "Psychic" }, "rollingkick": { num: 27, accuracy: 85, basePower: 60, category: "Physical", desc: "Deals damage to one adjacent target with a 30% chance to flinch it. Makes contact.", shortDesc: "30% chance to flinch the target.", id: "rollingkick", name: "Rolling Kick", pp: 15, priority: 0, isContact: true, secondary: { chance: 30, volatileStatus: 'flinch' }, target: "normal", type: "Fighting" }, "rollout": { num: 205, accuracy: 90, basePower: 30, basePowerCallback: function(pokemon, target) { var bp = 30; var bpTable = [30, 60, 120, 240, 480]; if (pokemon.volatiles.rollout && pokemon.volatiles.rollout.hitCount) { bp = (bpTable[pokemon.volatiles.rollout.hitCount] || 480); } pokemon.addVolatile('rollout'); if (pokemon.volatiles.defensecurl) { bp *= 2; } this.debug("Rollout bp: "+bp); return bp; }, category: "Physical", desc: "Deals damage to one adjacent target. The user is locked into this move and cannot make another move until it misses, 5 turns have passed, or the attack cannot be used. Power doubles with each successful hit of this move and doubles again if Defense Curl was used previously by the user. If this move is called by Sleep Talk, the move is used for one turn. Makes contact.", shortDesc: "Power doubles with each hit. Repeats for 5 turns.", id: "rollout", name: "Rollout", pp: 20, priority: 0, isContact: true, effect: { duration: 2, onLockMove: 'rollout', onStart: function() { this.effectData.hitCount = 1; }, onRestart: function() { this.effectData.hitCount++; if (this.effectData.hitCount < 5) { this.effectData.duration = 2; } }, onResidual: function(target) { if (target.lastMove === 'struggle') { // don't lock delete target.volatiles['rollout']; } } }, secondary: false, target: "normal", type: "Rock" }, "roost": { num: 355, accuracy: true, basePower: 0, category: "Status", desc: "The user restores 1/2 of its maximum HP, rounded half up. Until the end of the turn, Flying-type users lose their Flying-type and pure Flying-type users become Normal-type. Does nothing if the user's HP is full.", shortDesc: "Heals 50% HP. Flying-type removed 'til turn ends.", id: "roost", isViable: true, name: "Roost", pp: 10, priority: 0, isSnatchable: true, heal: [1,2], self: { volatileStatus: 'roost', }, effect: { duration: 1, onStart: function(pokemon) { for (var i=0, l=pokemon.typesData.length; i= 200) { this.add('message', defender.species + ' is too heavy. (placeholder)'); return null; } if (defender.volatiles['protect']) { this.add('-activate', defender, 'Protect'); return null; } if (defender.volatiles['bounce'] || defender.volatiles['dig'] || defender.volatiles['dive'] || defender.volatiles['fly'] || defender.volatiles['shadowforce'] || defender.volatiles['skydrop']) { this.add('-miss', attacker, defender); return null; } this.add('-prepare', attacker, move.name, defender); attacker.addVolatile(move.id, defender); return null; }, onTryHit: function(target) { if (target.hasType('Flying')) { this.add('-immune', target, '[msg]'); return null; } }, effect: { duration: 2, onLockMove: 'skydrop', onDragOut: false, onSourceDragOut: false, onFoeModifyPokemon: function(defender) { if (defender !== this.effectData.source) return; defender.trapped = true; }, onFoeBeforeMove: function(attacker, defender, move) { if (attacker === this.effectData.source) { this.debug('Sky drop nullifying.'); this.add('-message', '(Sky Drop prevented a Pokemon from moving.)'); return null; } }, onAnyAccuracy: function(accuracy, target, source, move) { if (target !== this.effectData.target && target !== this.effectData.source) { return; } if (source === this.effectData.target && target === this.effectData.source) { return; } if (move.id === 'gust' || move.id === 'twister') { return; } if (move.id === 'skyuppercut' || move.id === 'thunder' || move.id === 'hurricane' || move.id === 'smackdown' || move.id === 'helpinghand') { return; } return 0; }, onAnyBasePower: function(basePower, target, source, move) { if (target !== this.effectData.target && target !== this.effectData.source) { return; } if (source === this.effectData.target && target === this.effectData.source) { return; } if (move.id === 'gust' || move.id === 'twister') { return this.chainModify(2); } } }, secondary: false, target: "any", type: "Flying" }, "skyuppercut": { num: 327, accuracy: 90, basePower: 85, category: "Physical", desc: "Deals damage to one adjacent target. This move can hit a target using Bounce, Fly, or Sky Drop. Makes contact. Damage is boosted to 1.2x by the Ability Iron Fist.", shortDesc: "Can hit Pokemon using Bounce, Fly, or Sky Drop.", id: "skyuppercut", isViable: true, name: "Sky Uppercut", pp: 15, priority: 0, isContact: true, isPunchAttack: true, secondary: false, target: "normal", type: "Fighting" }, "slackoff": { num: 303, accuracy: true, basePower: 0, category: "Status", desc: "The user restores 1/2 of its maximum HP, rounded half up.", shortDesc: "Heals the user by 50% of its max HP.", id: "slackoff", isViable: true, name: "Slack Off", pp: 10, priority: 0, isSnatchable: true, heal: [1,2], secondary: false, target: "self", type: "Normal" }, "slam": { num: 21, accuracy: 75, basePower: 80, category: "Physical", desc: "Deals damage to one adjacent target. Makes contact.", shortDesc: "No additional effect.", id: "slam", name: "Slam", pp: 20, priority: 0, isContact: true, secondary: false, target: "normal", type: "Normal" }, "slash": { num: 163, accuracy: 100, basePower: 70, category: "Physical", desc: "Deals damage to one adjacent target with a higher chance for a critical hit. Makes contact.", shortDesc: "High critical hit ratio.", id: "slash", name: "Slash", pp: 20, priority: 0, isContact: true, critRatio: 2, secondary: false, target: "normal", type: "Normal" }, "sleeppowder": { num: 79, accuracy: 75, basePower: 0, category: "Status", desc: "Puts one adjacent target to sleep. Pokemon protected by Magic Coat or the Ability Magic Bounce are unaffected and instead use this move themselves.", shortDesc: "Puts the target to sleep.", id: "sleeppowder", isViable: true, name: "Sleep Powder", pp: 15, priority: 0, isPowder: true, onTryHit: function(pokemon) { if (!pokemon.runImmunity('powder')) return false; }, status: 'slp', secondary: false, target: "normal", type: "Grass" }, "sleeptalk": { num: 214, accuracy: true, basePower: 0, category: "Status", desc: "One of the user's known moves is selected for use at random. Fails if the user is not asleep. The selected move does not have PP deducted from it, and can currently have 0PP. This move cannot select Assist, Bide, Chatter, Copycat, Focus Punch, Me First, Metronome, Mimic, Mirror Move, Nature Power, Sketch, Sleep Talk, Struggle, Uproar, or any two-turn move.", shortDesc: "User must be asleep. Uses another known move.", id: "sleeptalk", isViable: true, name: "Sleep Talk", pp: 10, priority: 0, sleepUsable: true, onTryHit: function(pokemon) { if (pokemon.status !== 'slp') return false; }, onHit: function(pokemon) { var moves = []; for (var i=0; i= 3) return false; this.add('-sidestart', side, 'Spikes'); this.effectData.layers++; }, onSwitchIn: function(pokemon) { var side = pokemon.side; if (!pokemon.runImmunity('Ground')) return; var damageAmounts = [0,3,4,6]; // 1/8, 1/6, 1/4 var damage = this.damage(damageAmounts[this.effectData.layers]*pokemon.maxhp/24); } }, secondary: false, target: "foeSide", type: "Ground" }, "spitup": { num: 255, accuracy: 100, basePower: 0, basePowerCallback: function(pokemon) { if (!pokemon.volatiles['stockpile'] || !pokemon.volatiles['stockpile'].layers) return false; return pokemon.volatiles['stockpile'].layers * 100; }, category: "Special", desc: "Deals damage to one adjacent target. Power is equal to 100 times the user's Stockpile count. Fails if the user's Stockpile count is 0. Whether or not this move is successful, the user's Defense and Special Defense decrease by as many stages as Stockpile had increased them, and the user's Stockpile count resets to 0.", shortDesc: "More power with more uses of Stockpile.", id: "spitup", name: "Spit Up", pp: 10, priority: 0, onTry: function(pokemon) { if (!pokemon.volatiles['stockpile']) { return false; } }, onAfterMove: function(pokemon) { pokemon.removeVolatile('stockpile'); }, secondary: false, target: "normal", type: "Normal" }, "spite": { num: 180, accuracy: 100, basePower: 0, category: "Status", desc: "Causes one adjacent target's last used move to decrease by 4PP. Fails if the target has not made a move, if the move has 0PP, or if it no longer knows the move. Pokemon protected by Magic Coat or the Ability Magic Bounce are unaffected and instead use this move themselves. Ignores a target's Substitute.", shortDesc: "Lowers the PP of the target's last move by 4.", id: "spite", name: "Spite", pp: 10, priority: 0, isBounceable: true, onHit: function(target) { if (target.deductPP(target.lastMove, 4)) { this.add("-activate", target, 'move: Spite', target.lastMove, 4); return; } return false; }, secondary: false, target: "normal", type: "Ghost" }, "splash": { num: 150, accuracy: true, basePower: 0, category: "Status", desc: "Nothing happens... This move cannot be used while Gravity is in effect.", shortDesc: "Does nothing (but we still love it).", id: "splash", name: "Splash", pp: 40, priority: 0, onTryHit: function(target, source) { this.add('-nothing'); return null; }, secondary: false, target: "self", type: "Normal" }, "spore": { num: 147, accuracy: 100, basePower: 0, category: "Status", desc: "Puts one adjacent target to sleep. Pokemon protected by Magic Coat or the Ability Magic Bounce are unaffected and instead use this move themselves.", shortDesc: "Puts the target to sleep.", id: "spore", isViable: true, name: "Spore", pp: 15, priority: 0, isPowder: true, onTryHit: function(pokemon) { if (!pokemon.runImmunity('powder')) return false; }, status: 'slp', secondary: false, target: "normal", type: "Grass" }, "stealthrock": { num: 446, accuracy: true, basePower: 0, category: "Status", desc: "Sets up a hazard on the foe's side of the field, damaging each foe that switches in. Can be used only once before failing. Foes lose 1/32, 1/16, 1/8, 1/4, or 1/2 of their maximum HP, rounded down, based on their weakness to the Rock-type; 0.25x, 0.5x, neutral, 2x, or 4x, respectively. Can be removed from the foe's side if any foe uses Rapid Spin or is hit by Defog. Pokemon protected by Magic Coat or the Ability Magic Bounce are unaffected and instead use this move themselves. (CAP: Pokemon with the Ability Mountaineer are immune.)", shortDesc: "Hurts foes on switch-in. Factors Rock weakness.", id: "stealthrock", isViable: true, name: "Stealth Rock", pp: 20, priority: 0, isBounceable: true, sideCondition: 'stealthrock', effect: { // this is a side condition onStart: function(side) { this.add('-sidestart', side, 'move: Stealth Rock'); }, onSwitchIn: function(pokemon) { var typeMod = this.getEffectiveness('Rock', pokemon); var factor = 8; if (typeMod == 1) factor = 4; if (typeMod >= 2) factor = 2; if (typeMod == -1) factor = 16; if (typeMod <= -2) factor = 32; var damage = this.damage(pokemon.maxhp/factor); } }, secondary: false, target: "foeSide", type: "Rock" }, "steelwing": { num: 211, accuracy: 90, basePower: 70, category: "Physical", desc: "Deals damage to one adjacent target with a 10% chance to raise the user's Defense by 1 stage. Makes contact.", shortDesc: "10% chance to boost the user's Defense by 1.", id: "steelwing", name: "Steel Wing", pp: 25, priority: 0, isContact: true, secondary: { chance: 10, self: { boosts: { def: 1 } } }, target: "normal", type: "Steel" }, "stickyweb": { num: 564, accuracy: true, basePower: 0, category: "Status", desc: "Lowers the Speed stat of the opposing team's Pokemon upon switching into battle.", shortDesc: "Lowers Speed of opposing Pokemon switched in.", id: "stickyweb", isViable: true, name: "Sticky Web", pp: 20, priority: 0, isBounceable: true, sideCondition: 'stickyweb', effect: { onStart: function(side) { this.add('-sidestart', side, 'move: Sticky Web'); }, onSwitchIn: function(pokemon) { if (!pokemon.runImmunity('Ground')) return; this.add('-activate', pokemon, 'move: Sticky Web'); this.boost({spe: -1}, pokemon, pokemon.side.foe.active[0], this.getMove('stickyweb')); } }, secondary: false, target: "foeSide", type: "Bug" }, "stockpile": { num: 254, accuracy: true, basePower: 0, category: "Status", desc: "Raises the user's Defense and Special Defense by 1 stage. The user's Stockpile count increases by 1. Fails if the user's Stockpile count is 3.", shortDesc: "Boosts user's Defense, Sp. Def by 1. Max 3 uses.", id: "stockpile", isViable: true, name: "Stockpile", pp: 20, priority: 0, isSnatchable: true, onTryHit: function(pokemon) { if (pokemon.volatiles['stockpile'] && pokemon.volatiles['stockpile'].layers >= 3) return false; }, volatileStatus: 'stockpile', effect: { onStart: function(target) { this.effectData.layers = 1; this.add('-start', target, 'stockpile'+this.effectData.layers); this.boost({def:1, spd:1}, target, target, this.getMove('stockpile')); }, onRestart: function(target) { if (this.effectData.layers >= 3) return false; this.effectData.layers++; this.add('-start', target, 'stockpile'+this.effectData.layers); this.boost({def:1, spd:1}, target, target, this.getMove('stockpile')); }, onEnd: function(target) { var layers = this.effectData.layers * -1; this.effectData.layers = 0; this.boost({def:layers, spd:layers}, target, target, this.getMove('stockpile')); this.add('-end', target, 'Stockpile'); } }, secondary: false, target: "self", type: "Normal" }, "stomp": { num: 23, accuracy: 100, basePower: 65, category: "Physical", desc: "Deals damage to one adjacent target with a 30% chance to flinch it. Damage doubles if Minimize was used previously by the target. Makes contact.", shortDesc: "30% chance to flinch the target.", id: "stomp", name: "Stomp", pp: 20, priority: 0, isContact: true, secondary: { chance: 30, volatileStatus: 'flinch' }, target: "normal", type: "Normal" }, "stoneedge": { num: 444, accuracy: 80, basePower: 100, category: "Physical", desc: "Deals damage to one adjacent target with a higher chance for a critical hit.", shortDesc: "High critical hit ratio.", id: "stoneedge", isViable: true, name: "Stone Edge", pp: 5, priority: 0, critRatio: 2, secondary: false, target: "normal", type: "Rock" }, "storedpower": { num: 500, accuracy: 100, basePower: 20, basePowerCallback: function(pokemon) { return 20 + 20 * pokemon.positiveBoosts(); }, category: "Special", desc: "Deals damage to one adjacent target. Power is equal to 20+(X*20), where X is the user's total stat stage changes that are greater than 0.", shortDesc: "+20 power for each of the user's stat boosts.", id: "storedpower", isViable: true, name: "Stored Power", pp: 10, priority: 0, secondary: false, target: "normal", type: "Psychic" }, "stormthrow": { num: 480, accuracy: 100, basePower: 60, category: "Physical", desc: "Deals damage to one adjacent target. This move is always a critical hit unless the target is under the effect of Lucky Chant or has the Abilities Battle Armor or Shell Armor. Makes contact.", shortDesc: "Always results in a critical hit.", id: "stormthrow", isViable: true, name: "Storm Throw", pp: 10, priority: 0, isContact: true, willCrit: true, secondary: false, target: "normal", type: "Fighting" }, "steamroller": { num: 537, accuracy: 100, basePower: 65, category: "Physical", desc: "Deals damage to one adjacent target with a 30% chance to flinch it. Damage doubles if Minimize was used previously by the target. Makes contact.", shortDesc: "30% chance to flinch the target.", id: "steamroller", name: "Steamroller", pp: 20, priority: 0, isContact: true, secondary: { chance: 30, volatileStatus: 'flinch' }, target: "normal", type: "Bug" }, "strength": { num: 70, accuracy: 100, basePower: 80, category: "Physical", desc: "Deals damage to one adjacent target. Makes contact. (Field: Can be used to move boulders.)", shortDesc: "No additional effect.", id: "strength", name: "Strength", pp: 15, priority: 0, isContact: true, secondary: false, target: "normal", type: "Normal" }, "stringshot": { num: 81, accuracy: 95, basePower: 0, category: "Status", desc: "Lowers all adjacent foes' Speed by 2 stages. Pokemon protected by Magic Coat or the Ability Magic Bounce are unaffected and instead use this move themselves.", shortDesc: "Lowers the foe(s) Speed by 2.", id: "stringshot", name: "String Shot", pp: 40, priority: 0, boosts: { spe: -2 }, secondary: false, target: "allAdjacentFoes", type: "Bug" }, "struggle": { num: 165, accuracy: true, basePower: 50, category: "Physical", desc: "Deals typeless damage to one adjacent foe at random. If this move was successful, the user loses 1/4 of its maximum HP, rounded half up; the Ability Rock Head does not prevent this. This move can only be used if none of the user's known moves can be selected. Makes contact.", shortDesc: "User loses 25% of its max HP as recoil.", id: "struggle", name: "Struggle", pp: 1, noPPBoosts: true, priority: 0, isContact: true, beforeMoveCallback: function(pokemon) { this.add('-activate', pokemon, 'move: Struggle'); }, onModifyMove: function(move) { move.type = '???'; }, self: { onHit: function(source) { this.directDamage(source.maxhp/4, source, source, 'strugglerecoil'); } }, secondary: false, target: "normal", type: "Normal" }, "strugglebug": { num: 522, accuracy: 100, basePower: 50, category: "Special", desc: "Deals damage to all adjacent foes with a 100% chance to lower their Special Attack by 1 stage each.", shortDesc: "100% chance to lower the foe(s) Sp. Atk by 1.", id: "strugglebug", name: "Struggle Bug", pp: 20, priority: 0, secondary: { chance: 100, boosts: { spa: -1 } }, target: "allAdjacentFoes", type: "Bug" }, "stunspore": { num: 78, accuracy: 75, basePower: 0, category: "Status", desc: "Paralyzes one adjacent target. Pokemon protected by Magic Coat or the Ability Magic Bounce are unaffected and instead use this move themselves.", shortDesc: "Paralyzes the target.", id: "stunspore", isViable: true, name: "Stun Spore", pp: 30, priority: 0, isPowder: true, onTryHit: function(pokemon) { if (!pokemon.runImmunity('powder')) return false; }, status: 'par', secondary: false, target: "normal", type: "Grass" }, "submission": { num: 66, accuracy: 80, basePower: 80, category: "Physical", desc: "Deals damage to one adjacent target. If the target lost HP, the user takes recoil damage equal to 1/4 that HP, rounded half up, but not less than 1HP. Makes contact.", shortDesc: "Has 1/4 recoil.", id: "submission", name: "Submission", pp: 25, priority: 0, isContact: true, recoil: [1,4], secondary: false, target: "normal", type: "Fighting" }, "substitute": { num: 164, accuracy: true, basePower: 0, category: "Status", desc: "The user takes 1/4 of its maximum HP, rounded down, and puts it into a substitute to take its place in battle. The substitute is removed once enough damage is inflicted on it, or if the user switches out or faints. Baton Pass can be used to transfer the substitute to an ally, and the substitute will keep its remaining HP. Until the substitute is broken, it receives damage from all attacks made by other Pokemon and shields the user from status effects and stat stage changes caused by other Pokemon. The user still takes normal damage from weather and status effects while behind its substitute. If the substitute breaks during a multi-hit attack, the user will take damage from any remaining hits. This move fails if the user does not have enough HP remaining to create a substitute, or if it already has a substitute.", shortDesc: "User takes 1/4 its max HP to put in a Substitute.", id: "substitute", isViable: true, name: "Substitute", pp: 10, priority: 0, isSnatchable: true, volatileStatus: 'Substitute', onTryHit: function(target) { if (target.volatiles['substitute']) { this.add('-fail', target, 'move: Substitute'); return null; } if (target.hp <= target.maxhp/4 || target.maxhp === 1) { // Shedinja clause this.add('-fail', target, 'move: Substitute', '[weak]'); return null; } }, onHit: function(target) { this.directDamage(target.maxhp/4); }, effect: { onStart: function(target) { this.add('-start', target, 'Substitute'); this.effectData.hp = Math.floor(target.maxhp/4); delete target.volatiles['partiallytrapped']; }, onTryPrimaryHitPriority: -1, onTryPrimaryHit: function(target, source, move) { if (target === source) { this.debug('sub bypass: self hit'); return; } if (move.notSubBlocked || move.isSoundBased && this.gen >= 6) { return; } if (move.category === 'Status') { var SubBlocked = { block:1, embargo:1, entrainment:1, gastroacid:1, healblock:1, healpulse:1, leechseed:1, lockon:1, meanlook:1, mindreader:1, nightmare:1, painsplit:1, psychoshift:1, simplebeam:1, skydrop:1, soak: 1, spiderweb:1, switcheroo:1, topsyturvy:1, trick:1, worryseed:1, yawn:1 }; if (move.status || move.boosts || move.volatileStatus === 'confusion' || SubBlocked[move.id]) { return false; } return; } var damage = this.getDamage(source, target, move); if (!damage) { return null; } damage = this.runEvent('SubDamage', target, source, move, damage); if (!damage) { return damage; } if (damage > target.volatiles['substitute'].hp) { damage = target.volatiles['substitute'].hp; } target.volatiles['substitute'].hp -= damage; source.lastDamage = damage; if (target.volatiles['substitute'].hp <= 0) { target.removeVolatile('substitute'); } else { this.add('-activate', target, 'Substitute', '[damage]'); } if (move.recoil) { this.damage(Math.round(damage * move.recoil[0] / move.recoil[1]), source, target, 'recoil'); } if (move.drain) { this.heal(Math.ceil(damage * move.drain[0] / move.drain[1]), source, target, 'drain'); } this.runEvent('AfterSubDamage', target, source, move, damage); return 0; // hit }, onEnd: function(target) { this.add('-end', target, 'Substitute'); } }, secondary: false, target: "self", type: "Normal" }, "suckerpunch": { num: 389, accuracy: 100, basePower: 80, category: "Physical", desc: "Deals damage to one adjacent target. Fails if the target did not select a damaging move for use this turn, or if the target moves before the user. Makes contact. Priority +1.", shortDesc: "Usually goes first. Fails if target is not attacking.", id: "suckerpunch", isViable: true, name: "Sucker Punch", pp: 5, priority: 1, isNotProtectable: true, isContact: true, onTryHit: function(target) { var decision = this.willMove(target); if (!decision || decision.choice !== 'move' || (decision.move.category === 'Status' && decision.move.id !== 'mefirst')) { return false; } }, secondary: false, target: "normal", type: "Dark" }, "sunnyday": { num: 241, accuracy: true, basePower: 0, category: "Status", desc: "For 5 turns, the weather becomes Sunny Day. The power of Fire-type attacks is 1.5x and the power of Water-type attacks is 0.5x during the effect. Lasts for 8 turns if the user is holding Heat Rock. Fails if the current weather is Sunny Day.", shortDesc: "For 5 turns, intense sunlight powers Fire moves.", id: "sunnyday", isViable: true, name: "Sunny Day", pp: 5, priority: 0, weather: 'sunnyday', secondary: false, target: "all", type: "Fire" }, "superfang": { num: 162, accuracy: 90, basePower: 0, damageCallback: function(pokemon, target) { return target.hp/2; }, category: "Physical", desc: "Deals damage to one adjacent target equal to half of its current HP, rounded down, but not less than 1HP. Makes contact.", shortDesc: "Does damage equal to 1/2 target's current HP.", id: "superfang", isViable: true, name: "Super Fang", pp: 10, priority: 0, isContact: true, secondary: false, target: "normal", type: "Normal" }, "superpower": { num: 276, accuracy: 100, basePower: 120, category: "Physical", desc: "Deals damage to one adjacent target and lowers the user's Attack and Defense by 1 stage. Makes contact.", shortDesc: "Lowers the user's Attack and Defense by 1.", id: "superpower", isViable: true, name: "Superpower", pp: 5, priority: 0, isContact: true, self: { boosts: { atk: -1, def: -1 } }, secondary: false, target: "normal", type: "Fighting" }, "supersonic": { num: 48, accuracy: 55, basePower: 0, category: "Status", desc: "Causes one adjacent target to become confused. Pokemon protected by Magic Coat or the Ability Magic Bounce are unaffected and instead use this move themselves. Pokemon with the Ability Soundproof are immune.", shortDesc: "Confuses the target.", id: "supersonic", name: "Supersonic", pp: 20, priority: 0, isSoundBased: true, volatileStatus: 'confusion', secondary: false, target: "normal", type: "Normal" }, "surf": { num: 57, accuracy: 100, basePower: 90, category: "Special", desc: "Deals damage to all adjacent Pokemon. Power doubles against Pokemon using Dive. (Field: Can be used to surf on water.)", shortDesc: "Hits adjacent Pokemon. Power doubles on Dive.", id: "surf", isViable: true, name: "Surf", pp: 15, priority: 0, secondary: false, target: "allAdjacent", type: "Water" }, "swagger": { num: 207, accuracy: 90, basePower: 0, category: "Status", desc: "Raises one adjacent target's Attack by 2 stages and confuses it. Pokemon protected by Magic Coat or the Ability Magic Bounce are unaffected and instead use this move themselves.", shortDesc: "Boosts the target's Attack by 2 and confuses it.", id: "swagger", name: "Swagger", pp: 15, priority: 0, volatileStatus: 'confusion', boosts: { atk: 2 }, secondary: false, target: "normal", type: "Normal" }, "swallow": { num: 256, accuracy: true, basePower: 0, category: "Status", desc: "The user restores its HP based on its Stockpile count. Restores 1/4 of its maximum HP if it's 1, 1/2 of its maximum HP if it's 2, both rounded half down, and all of its HP if it's 3. Fails if the user's Stockpile count is 0. The user's Defense and Special Defense decrease by as many stages as Stockpile had increased them, and the user's Stockpile count resets to 0.", shortDesc: "Heals the user based on uses of Stockpile.", id: "swallow", name: "Swallow", pp: 10, priority: 0, isSnatchable: true, onTryHit: function(pokemon) { if (!pokemon.volatiles['stockpile'] || !pokemon.volatiles['stockpile'].layers) return false; }, onHit: function(pokemon) { var healAmount = [0.25,0.5,1]; this.heal(this.modify(pokemon.maxhp, healAmount[(pokemon.volatiles['stockpile'].layers - 1)])); pokemon.removeVolatile('stockpile'); }, secondary: false, target: "self", type: "Normal" }, "sweetkiss": { num: 186, accuracy: 75, basePower: 0, category: "Status", desc: "Causes one adjacent target to become confused. Pokemon protected by Magic Coat or the Ability Magic Bounce are unaffected and instead use this move themselves.", shortDesc: "Confuses the target.", id: "sweetkiss", name: "Sweet Kiss", pp: 10, priority: 0, volatileStatus: 'confusion', secondary: false, target: "normal", type: "Fairy" }, "sweetscent": { num: 230, accuracy: 100, basePower: 0, category: "Status", desc: "Lowers all adjacent foes' evasion by 2 stages. Pokemon protected by Magic Coat or the Ability Magic Bounce are unaffected and instead use this move themselves.", shortDesc: "Lowers the foe(s) evasion by 2.", id: "sweetscent", name: "Sweet Scent", pp: 20, priority: 0, boosts: { evasion: -2 }, secondary: false, target: "allAdjacentFoes", type: "Normal" }, "swift": { num: 129, accuracy: true, basePower: 60, category: "Special", desc: "Deals damage to all adjacent foes and does not check accuracy.", shortDesc: "This move does not check accuracy. Hits foes.", id: "swift", name: "Swift", pp: 20, priority: 0, secondary: false, target: "allAdjacentFoes", type: "Normal" }, "switcheroo": { num: 415, accuracy: 100, basePower: 0, category: "Status", desc: "The user trades its held item with one adjacent target. Fails if either the user or the target is holding a Mail, if neither is holding an item, or if the user is trying to give or take a Griseous Orb, a Plate, a Drive, or a Mega Stone to or from a Giratina, an Arceus, a Genesect, or a pokémon able to Mega-evolve respectively. Pokemon with the Ability Sticky Hold are immune.", shortDesc: "User switches its held item with the target's.", id: "switcheroo", isViable: true, name: "Switcheroo", pp: 10, priority: 0, onHit: function(target, source) { var yourItem = target.takeItem(source); var myItem = source.takeItem(); if (target.item || source.item || (!yourItem && !myItem)) { if (yourItem) target.item = yourItem; if (myItem) source.item = myItem; return false; } this.add('-activate', source, 'move: Trick', '[of] '+target); if (myItem) { target.setItem(myItem); this.add('-item', target, myItem, '[from] Trick'); } if (yourItem) { source.setItem(yourItem); this.add('-item', source, yourItem, '[from] Trick'); } }, secondary: false, target: "normal", type: "Dark" }, "swordsdance": { num: 14, accuracy: true, basePower: 0, category: "Status", desc: "Raises the user's Attack by 2 stages.", shortDesc: "Boosts the user's Attack by 2.", id: "swordsdance", isViable: true, name: "Swords Dance", pp: 20, priority: 0, isSnatchable: true, boosts: { atk: 2 }, secondary: false, target: "self", type: "Normal" }, "synchronoise": { num: 485, accuracy: 100, basePower: 120, category: "Special", desc: "Deals damage to all adjacent Pokemon. This move has no effect on targets that do not share a type with the user.", shortDesc: "Hits adjacent Pokemon sharing the user's type.", id: "synchronoise", name: "Synchronoise", pp: 15, priority: 0, onTryHit: function(target, source) { return target.hasType(source.getTypes()); }, secondary: false, target: "allAdjacent", type: "Psychic" }, "synthesis": { num: 235, accuracy: true, basePower: 0, category: "Status", desc: "The user restores 1/2 of its maximum HP if no weather conditions are in effect, 2/3 of its maximum HP if the weather is Sunny Day, and 1/4 of its maximum HP if the weather is Hail, Rain Dance, or Sandstorm, all rounded half down.", shortDesc: "Heals the user by a weather-dependent amount.", id: "synthesis", isViable: true, name: "Synthesis", pp: 5, priority: 0, isSnatchable: true, onHit: function(pokemon) { if (this.isWeather('sunnyday')) this.heal(this.modify(pokemon.maxhp, 0.667)); else if (this.isWeather(['raindance','sandstorm','hail'])) this.heal(this.modify(pokemon.maxhp, 0.25)); else this.heal(this.modify(pokemon.maxhp, 0.5)); }, secondary: false, target: "self", type: "Grass" }, "tackle": { num: 33, accuracy: 100, basePower: 50, category: "Physical", desc: "Deals damage to one adjacent target. Makes contact.", shortDesc: "No additional effect.", id: "tackle", name: "Tackle", pp: 35, priority: 0, isContact: true, secondary: false, target: "normal", type: "Normal" }, "tailglow": { num: 294, accuracy: true, basePower: 0, category: "Status", desc: "Raises the user's Special Attack by 3 stages.", shortDesc: "Boosts the user's Sp. Atk by 3.", id: "tailglow", isViable: true, name: "Tail Glow", pp: 20, priority: 0, isSnatchable: true, boosts: { spa: 3 }, secondary: false, target: "self", type: "Bug" }, "tailslap": { num: 541, accuracy: 85, basePower: 25, category: "Physical", desc: "Deals damage to one adjacent target and hits two to five times. Has a 1/3 chance to hit two or three times, and a 1/6 chance to hit four or five times. If one of the hits breaks the target's Substitute, it will take damage for the remaining hits. If the user has the Ability Skill Link, this move will always hit five times. Makes contact.", shortDesc: "Hits 2-5 times in one turn.", id: "tailslap", isViable: true, name: "Tail Slap", pp: 10, priority: 0, isContact: true, multihit: [2,5], secondary: false, target: "normal", type: "Normal" }, "tailwhip": { num: 39, accuracy: 100, basePower: 0, category: "Status", desc: "Lowers all adjacent foes' Defense by 1 stage. Pokemon protected by Magic Coat or the Ability Magic Bounce are unaffected and instead use this move themselves.", shortDesc: "Lowers the foe(s) Defense by 1.", id: "tailwhip", name: "Tail Whip", pp: 30, priority: 0, boosts: { def: -1 }, secondary: false, target: "allAdjacentFoes", type: "Normal" }, "tailwind": { num: 366, accuracy: true, basePower: 0, category: "Status", desc: "For 4 turns, the user and its party members have their Speed doubled. Fails if this move is already in effect for the user's side.", shortDesc: "For 4 turns, allies' Speed is doubled.", id: "tailwind", isViable: true, name: "Tailwind", pp: 15, priority: 0, isSnatchable: true, sideCondition: 'tailwind', effect: { duration: 4, durationCallback: function(target, source, effect) { if (source && source.ability === 'persistent') { return 6; } return 4; }, onStart: function(side) { this.add('-sidestart', side, 'move: Tailwind'); }, onModifySpe: function(speMod, pokemon) { return this.chain(speMod, 2); }, onResidualOrder: 21, onResidualSubOrder: 4, onEnd: function(side) { this.add('-sideend', side, 'move: Tailwind'); } }, secondary: false, target: "allySide", type: "Flying" }, "takedown": { num: 36, accuracy: 85, basePower: 90, category: "Physical", desc: "Deals damage to one adjacent target. If the target lost HP, the user takes recoil damage equal to 1/4 that HP, rounded half up, but not less than 1HP. Makes contact.", shortDesc: "Has 1/4 recoil.", id: "takedown", name: "Take Down", pp: 20, priority: 0, isContact: true, recoil: [1,4], secondary: false, target: "normal", type: "Normal" }, "taunt": { num: 269, accuracy: 100, basePower: 0, category: "Status", desc: "Prevents one adjacent target from using non-damaging moves for its next three turns. Pokemon protected by Magic Coat or the Ability Magic Bounce are unaffected and instead use this move themselves. Ignores a target's Substitute.", shortDesc: "For 3 turns, the target can't use status moves.", id: "taunt", isViable: true, name: "Taunt", pp: 20, priority: 0, isBounceable: true, volatileStatus: 'taunt', effect: { duration: 3, onStart: function(target) { if (!this.willMove(target)) { this.effectData.duration++; } this.add('-start', target, 'move: Taunt'); }, onResidualOrder: 12, onEnd: function(target) { this.add('-end', target, 'move: Taunt'); }, onModifyPokemon: function(pokemon) { var moves = pokemon.moveset; for (var i=0; i= 2) return false; this.add('-sidestart', side, 'move: Toxic Spikes'); this.effectData.layers++; }, onSwitchIn: function(pokemon) { if (!pokemon.runImmunity('Ground')) return; if (!pokemon.runImmunity('Poison')) return; if (pokemon.hasType('Poison')) { this.add('-sideend', pokemon.side, 'move: Toxic Spikes', '[of] '+pokemon); pokemon.side.removeSideCondition('toxicspikes'); } else if (this.effectData.layers >= 2) { pokemon.trySetStatus('tox'); } else { pokemon.trySetStatus('psn'); } } }, secondary: false, target: "foeSide", type: "Poison" }, "transform": { num: 144, accuracy: true, basePower: 0, category: "Status", desc: "The user transforms into one adjacent target. The target's current stats, stat stages, types, moves, Ability, weight, gender, and sprite are copied. The user's level and HP remain the same and each copied move receives only 5PP, with a maximum of 5PP each. The user can no longer change formes if it would have the ability to do so. This move fails if the target has a Substitute, if either the user or the target has transformed previously, or if either is behind an Illusion. This move ignores Protect and Detect.", shortDesc: "Copies target's stats, moves, types, and Ability.", id: "transform", name: "Transform", pp: 10, priority: 0, isNotProtectable: true, onHit: function(target, pokemon) { if (!pokemon.transformInto(target, pokemon)) { return false; } }, secondary: false, target: "normal", type: "Normal" }, "triattack": { num: 161, accuracy: 100, basePower: 80, category: "Special", desc: "Deals damage to one adjacent target with a 20% chance to either burn, freeze, or paralyze it.", shortDesc: "20% chance to paralyze or burn or freeze target.", id: "triattack", isViable: true, name: "Tri Attack", pp: 10, priority: 0, secondary: { chance: 20, onHit: function(target, source) { var result = this.random(3); if (result===0) { target.trySetStatus('brn', source); } else if (result===1) { target.trySetStatus('par', source); } else { target.trySetStatus('frz', source); } } }, target: "normal", type: "Normal" }, "trick": { num: 271, accuracy: 100, basePower: 0, category: "Status", desc: "The user trades its held item with one adjacent target. Fails if either the user or the target is holding a Mail, if neither is holding an item, or if the user is trying to give or take a Griseous Orb, a Plate, a Drive, or a Mega Stone to or from a Giratina, an Arceus, a Genesect, or a pokémon able to Mega-evolve respectively. Pokemon with the Ability Sticky Hold are immune.", shortDesc: "User switches its held item with the target's.", id: "trick", isViable: true, name: "Trick", pp: 10, priority: 0, onHit: function(target, source) { var yourItem = target.takeItem(source); var myItem = source.takeItem(); if (target.item || source.item || (!yourItem && !myItem)) { if (yourItem) target.item = yourItem; if (myItem) source.item = myItem; return false; } this.add('-activate', source, 'move: Trick', '[of] '+target); if (myItem) { target.setItem(myItem); this.add('-item', target, myItem, '[from] move: Trick'); } if (yourItem) { source.setItem(yourItem); this.add('-item', source, yourItem, '[from] move: Trick'); } }, secondary: false, target: "normal", type: "Psychic" }, "trickortreat": { num: 567, accuracy: 100, basePower: 0, category: "Status", desc: "Adds Ghost to the target's type(s). If the target was affected by Forest's Curse, its Grass type is replaced.", shortDesc: "Adds Ghost to the target's type(s).", id: "trickortreat", name: "Trick-or-Treat", pp: 20, priority: 0, isBounceable: true, onHit: function(target) { if (target.hasType('Ghost')) return false; if (!target.addType('Ghost')) return false; this.add('-start', target, 'typechange', target.getTypes(true).join('/'), '[from] move: Trick-or-Treat'); }, secondary: false, target: "normal", type: "Ghost" }, "trickroom": { num: 433, accuracy: true, basePower: 0, category: "Status", desc: "For 5 turns, all active Pokemon with lower Speed will move before those with higher Speed, within their priority brackets. If this move is used during the effect, the effect ends. Priority -7.", shortDesc: "For 5 turns, slower Pokemon move first.", id: "trickroom", isViable: true, name: "Trick Room", pp: 5, priority: -7, onHitField: function(target, source, effect) { if (this.pseudoWeather['trickroom']) { this.removePseudoWeather('trickroom', source, effect, '[of] '+source); } else { this.addPseudoWeather('trickroom', source, effect, '[of] '+source); } }, effect: { duration: 5, durationCallback: function(target, source, effect) { if (source && source.ability === 'persistent') { return 7; } return 5; }, onStart: function(target, source) { this.add('-fieldstart', 'move: Trick Room', '[of] '+source); this.getStatCallback = function(stat, statName) { // If stat is speed and does not overflow (Trick Room Glitch) return negative speed. if (statName === 'spe' && stat <= 1809) return -stat; return stat; }; }, onResidualOrder: 23, onEnd: function() { this.add('-fieldend', 'move: Trick Room'); this.getStatCallback = null; } }, secondary: false, target: "all", type: "Psychic" }, "triplekick": { num: 167, accuracy: 90, basePower: 10, basePowerCallback: function(pokemon) { pokemon.addVolatile('triplekick'); return 10 * pokemon.volatiles['triplekick'].hit; }, category: "Physical", desc: "Deals damage to one adjacent target and hits three times. The base power increases to 20 for the second hit and 30 for the third. If any of the hits misses the target, the attack ends. If one of the hits breaks the target's Substitute, it will take damage for the remaining hits. Makes contact.", shortDesc: "Hits 3 times. Each hit can miss, but power rises.", id: "triplekick", name: "Triple Kick", pp: 10, priority: 0, isContact: true, multihit: [3,3], effect: { duration: 1, onStart: function() { this.effectData.hit = 1; }, onRestart: function() { this.effectData.hit++; } }, secondary: false, target: "normal", type: "Fighting" }, "trumpcard": { num: 376, accuracy: true, basePower: 0, basePowerCallback: function(pokemon) { var move = pokemon.getMoveData(pokemon.lastMove); // Account for calling Trump Card via other moves switch (move.pp) { case 0: return 200; case 1: return 80; case 2: return 60; case 3: return 50; default: return 40; } }, category: "Special", desc: "Deals damage to one adjacent target and does not check accuracy. The power of this move is based on the amount of PP remaining after normal PP reduction and the Ability Pressure resolve. 200 power for 0PP, 80 power for 1PP, 60 power for 2PP, 50 power for 3PP, and 40 power for 4 or more PP. Makes contact.", shortDesc: "More power the fewer PP this move has left.", id: "trumpcard", name: "Trump Card", pp: 5, noPPBoosts: true, priority: 0, isContact: true, secondary: false, target: "normal", type: "Normal" }, "twineedle": { num: 41, accuracy: 100, basePower: 25, category: "Physical", desc: "Deals damage to one adjacent target and hits twice, with each hit having a 20% chance to poison it. If the first hit breaks the target's Substitute, it will take damage for the second hit.", shortDesc: "Hits 2 times. Each hit has 20% chance to poison.", id: "twineedle", name: "Twineedle", pp: 20, priority: 0, multihit: [2,2], secondary: { chance: 20, status: 'psn' }, target: "normal", type: "Bug" }, "twister": { num: 239, accuracy: 100, basePower: 40, category: "Special", desc: "Deals damage to all adjacent foes with a 20% chance to flinch each. Power doubles against Pokemon using Bounce, Fly, or Sky Drop.", shortDesc: "20% chance to flinch the foe(s).", id: "twister", name: "Twister", pp: 20, priority: 0, secondary: { chance: 20, volatileStatus: 'flinch' }, target: "allAdjacentFoes", type: "Dragon" }, "uturn": { num: 369, accuracy: 100, basePower: 70, category: "Physical", desc: "Deals damage to one adjacent target. If this move is successful and the user has not fainted, the user switches out even if it is trapped and is replaced immediately by another party member. The user does not switch out if there are no unfainted party members, or if the target switched out using an Eject Button. Makes contact.", shortDesc: "User switches out after damaging the target.", id: "uturn", isViable: true, name: "U-turn", pp: 20, priority: 0, isContact: true, selfSwitch: true, secondary: false, target: "normal", type: "Bug" }, "uproar": { num: 253, accuracy: 100, basePower: 90, category: "Special", desc: "Deals damage to one adjacent foe at random. The user spends three turns locked into this move. On the first of the three turns, all sleeping active Pokemon wake up. During the three turns, no active Pokemon can fall asleep by any means; Pokemon switched in during the effect do not wake up. If the user is prevented from moving or the attack is not successful against the target during one of the turns, the effect ends. Pokemon with the Ability Soundproof are immune.", shortDesc: "Lasts 3 turns. Active Pokemon cannot fall asleep.", id: "uproar", name: "Uproar", pp: 10, priority: 0, isSoundBased: true, self: { volatileStatus: 'uproar' }, onTryHit: function(target) { for (var i=0; i