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: 8, noPPBoosts: true, 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: 10, noPPBoosts: true, 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", name: "Acid Armor", pp: 8, noPPBoosts: true, 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", name: "Acid Spray", pp: 4, noPPBoosts: true, secondary: { chance: 100, boosts: { spd: -2 } }, target: "normal", type: "Poison" "acrobatics": { num: 512, accuracy: 100, basePower: 55, basePowerCallback: function(pokemon) { if (!pokemon.item || pokemon.item === 'flyinggem') { 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", name: "Acrobatics", pp: 3, noPPBoosts: true, 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: 10, noPPBoosts: true, 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", name: "Aerial Ace", pp: 4, noPPBoosts: true, 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", name: "Aeroblast", pp: 1, noPPBoosts: true, 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: 5, noPPBoosts: true, 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", name: "Agility", pp: 6, noPPBoosts: true, isSnatchable: true, boosts: { spe: 2 }, secondary: false, target: "self", type: "Psychic" "aircutter": { num: 314, accuracy: 95, basePower: 55, 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: 8, noPPBoosts: true, 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", name: "Air Slash", pp: 4, noPPBoosts: true, 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: 5, noPPBoosts: true, 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", name: "Amnesia", pp: 4, noPPBoosts: true, 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 of the user's stats by 1.", id: "ancientpower", name: "AncientPower", pp: 3, noPPBoosts: true, 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", name: "Aqua Jet", pp: 4, noPPBoosts: true, 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: 6, noPPBoosts: true, 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", name: "Aqua Tail", pp: 2, noPPBoosts: true, 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: 6, noPPBoosts: true, 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", name: "Aromatherapy", pp: 1, noPPBoosts: true, 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", name: "Avalanche", pp: 2, noPPBoosts: true, isContact: true, secondary: false, target: "normal", type: "Ice" "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: 6, noPPBoosts: 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", name: "Barrier", pp: 6, noPPBoosts: true, 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", name: "Baton Pass", pp: 8, noPPBoosts: true, 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].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: 3, noPPBoosts: true, 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" "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", name: "Belly Drum", pp: 2, noPPBoosts: true, 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: 5, noPPBoosts: true, 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 and can hit Ghost-types. Makes contact. Priority +1.", shortDesc: "Waits 2 turns; deals double the damage taken.", id: "bide", name: "Bide", pp: 3, noPPBoosts: true, isContact: true, volatileStatus: 'bide', affectedByImmunities: false, effect: { duration: 3, onLockMove: 'bide', onStart: function(pokemon) { this.effectData.totalDamage = 0; this.add('-start', pokemon, 'Bide'); }, 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]; 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; always five turns if the user is holding Grip Claw. Causes damage to the target equal to 1/16 of its maximum HP (1/8 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: 6, noPPBoosts: true, 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: 8, noPPBoosts: true, isContact: 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: 3, noPPBoosts: true, 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", name: "Blaze Kick", pp: 2, noPPBoosts: true, isContact: true, critRatio: 2, secondary: { chance: 10, status: 'brn' }, target: "normal", type: "Fire" "blizzard": { num: 59, accuracy: 70, basePower: 120, 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", name: "Blizzard", pp: 1, noPPBoosts: true, 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", name: "Block", pp: 1, noPPBoosts: true, isBounceable: true, onHit: function(target) { target.addVolatile('trapped'); }, 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", name: "Blue Flare", pp: 1, noPPBoosts: true, 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", name: "Body Slam", pp: 3, noPPBoosts: true, 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", name: "Bolt Strike", pp: 1, noPPBoosts: true, 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: 6, noPPBoosts: true, 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", name: "Bone Rush", pp: 2, noPPBoosts: true, 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", name: "Bonemerang", pp: 2, noPPBoosts: true, multihit: 2, secondary: false, target: "normal", type: "Ground" "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", name: "Bounce", pp: 1, noPPBoosts: true, 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)) { 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; }, onBasePower: function(basePower, target, source, move) { if (move.id === 'gust' || move.id === 'twister') { return basePower * 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", name: "Brave Bird", pp: 3, noPPBoosts: true, 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", name: "Brick Break", pp: 3, noPPBoosts: true, 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, basePowerCallback: function(pokemon, target) { if (target.hp * 2 < target.maxhp) return 130; return 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: 3, noPPBoosts: true, secondary: false, target: "normal", type: "Water" "bubble": { num: 145, accuracy: 100, basePower: 20, 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: 10, noPPBoosts: true, 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: "BubbleBeam", pp: 6, noPPBoosts: true, 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: 6, noPPBoosts: true, 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); } }, 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", name: "Bug Buzz", pp: 2, noPPBoosts: true, 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", name: "Bulk Up", pp: 4, noPPBoosts: true, 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: 6, noPPBoosts: true, 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", name: "Bullet Punch", pp: 6, noPPBoosts: true, 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", name: "Bullet Seed", pp: 6, noPPBoosts: 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", name: "Calm Mind", pp: 4, noPPBoosts: true, 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. Ground-type in Wi-Fi battles. (In-game: Ground-type in puddles, rocky ground, and sand, Water-type on water, Rock-type in caves, Ice-type on snow and ice, and Normal-type everywhere else.) Fails if the user's type cannot be changed or if the user is already purely that type.", shortDesc: "Changes user's type based on terrain. (Ground)", id: "camouflage", name: "Camouflage", pp: 6, noPPBoosts: true, isSnatchable: true, volatileStatus: 'camouflage', effect: { noCopy: true, onStart: function(pokemon) { this.add('-start', pokemon, 'typechange', 'Ground'); }, onModifyPokemon: function(pokemon) { pokemon.types = ['Ground']; } }, 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: 6, noPPBoosts: true, 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" "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: 6, noPPBoosts: true, isSnatchable: true, volatileStatus: 'charge', onHit: function(pokemon) { this.add('-activate', pokemon, 'move: Charge'); }, effect: { duration: 2, onRestart: function(pokemon) { this.effectData.duration = 2; }, onBasePower: function(basePower, attacker, defender, move) { if (move.type === 'Electric') { this.debug('charge boost'); return basePower * 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", name: "Charge Beam", pp: 2, noPPBoosts: true, 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: 6, noPPBoosts: true, boosts: { atk: -2 }, secondary: false, target: "normal", type: "Normal" "chatter": { num: 448, accuracy: 100, basePower: 60, category: "Special", desc: "Deals damage to one adjacent or non-adjacent target. This move has an X% chance to confuse the target, where X is 0 unless the user is a Chatot that hasn't Transformed. If the user is a Chatot, X is 0 or 10 depending on the volume of Chatot's recorded cry, if any; 0 for a low volume or no recording, 10 for a medium to high volume recording. Pokemon with the Ability Soundproof are immune. (Field: Can be used to record a sound to replace Chatot's cry. The cry is reset if Chatot is deposited in a PC.)", shortDesc: "10% chance to confuse the target.", id: "chatter", name: "Chatter", pp: 6, noPPBoosts: true, isSoundBased: true, onModifyMove: function(move, pokemon) { if (pokemon.template.species !== 'Chatot') delete move.secondaries; }, secondary: { chance: 10, 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: 6, noPPBoosts: true, 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", name: "Circle Throw", pp: 2, noPPBoosts: true, 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; always five turns if the user is holding Grip Claw. Causes damage to the target equal to 1/16 of its maximum HP (1/8 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: 3, noPPBoosts: true, 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", name: "Clear Smog", pp: 3, noPPBoosts: true, 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", name: "Close Combat", pp: 1, noPPBoosts: true, 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", name: "Coil", pp: 4, noPPBoosts: true, 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: 5, noPPBoosts: true, isContact: true, isPunchAttack: true, multihit: [2,5], 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", name: "Confuse Ray", pp: 2, noPPBoosts: true, 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: 8, noPPBoosts: true, 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: 11, noPPBoosts: true, 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: 10, noPPBoosts: true, isSnatchable: true, volatileStatus: 'conversion', effect: { noCopy: true, onStart: function(pokemon) { var possibleTypes = pokemon.moveset.map(function(val){ var move = this.getMove(val.id); if (move.id !== 'conversion' && !pokemon.hasType(move.type)) { return move.type; } }, this).compact(); if (!possibleTypes.length) { this.add('-fail', pokemon); return false; } this.effectData.type = possibleTypes[this.random(possibleTypes.length)]; this.add('-start', pokemon, 'typechange', this.effectData.type); }, onRestart: function(pokemon) { var possibleTypes = pokemon.moveset.map(function(val){ var move = this.getMove(val.id); if (move.id !== 'conversion' && !pokemon.hasType(move.type)) { return move.type; } }, this).compact(); if (!possibleTypes.length) { this.add('-fail', pokemon); return false; } this.effectData.type = possibleTypes[this.random(possibleTypes.length)]; this.add('-start', pokemon, 'typechange', this.effectData.type); }, onModifyPokemon: function(pokemon) { pokemon.types = [this.effectData.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: 10, noPPBoosts: true, isNotProtectable: true, onTryHit: function(target, source) { source.addVolatile("conversion2", target); }, effect: { noCopy: true, onStart: function(pokemon, target, move) { if (!target.lastMove) { this.add('-fail', pokemon); return false; } var possibleTypes = []; var attackType = this.getMove(target.lastMove).type; for (var type in this.data.TypeChart) { if (pokemon.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) { this.add('-fail', pokemon); return false; } this.effectData.type = possibleTypes[this.random(possibleTypes.length)]; this.add('-start', pokemon, 'typechange', this.effectData.type); }, onRestart: function(pokemon, target, move) { if (!target.lastMove) { this.add('-fail', pokemon); return false; } var possibleTypes = []; var attackType = this.getMove(target.lastMove).type; for (var type in this.data.TypeChart) { if (pokemon.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) { this.add('-fail', pokemon); return false; } this.effectData.type = possibleTypes[this.random(possibleTypes.length)]; this.add('-start', pokemon, 'typechange', this.effectData.type); }, onModifyPokemon: function(pokemon) { pokemon.types = [this.effectData.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", name: "Copycat", pp: 4, noPPBoosts: true, 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, sketch:1, sleeptalk:1, snatch:1, struggle:1, switcheroo:1, thief:1, transform:1, trick: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", name: "Cosmic Power", pp: 4, noPPBoosts: true, 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", name: "Cotton Guard", pp: 2, noPPBoosts: true, 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: 13, noPPBoosts: true, boosts: { spe: -2 }, affectedByImmunities: true, secondary: false, target: "normal", type: "Grass" "counter": { num: 68, accuracy: 100, basePower: 0, damageCallback: function(pokemon) { if (pokemon.lastAttackedBy && pokemon.lastAttackedBy.thisTurn && this.getMove(pokemon.lastAttackedBy.move).category === 'Physical') { return 2 * pokemon.lastAttackedBy.damage; } this.add('-fail',pokemon.id); 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", name: "Counter", pp: 4, noPPBoosts: true, 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: 13, noPPBoosts: true, 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: 90, 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", name: "Crabhammer", pp: 2, noPPBoosts: true, isContact: true, critRatio: 2, secondary: false, target: "normal", type: "Water" "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", name: "Cross Chop", pp: 1, noPPBoosts: true, 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", name: "Cross Poison", pp: 4, noPPBoosts: true, 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", name: "Crunch", pp: 3, noPPBoosts: true, isContact: 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: 3, noPPBoosts: true, isContact: true, secondary: { chance: 50, boosts: { def: -1 } }, target: "normal", type: "Normal" "crushgrip": { num: 462, accuracy: 100, basePower: 0, basePowerCallback: function(pokemon, target) { return 120*target.hp/target.maxhp; }, 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: 3, noPPBoosts: true, 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", name: "Curse", pp: 2, noPPBoosts: true, 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 = "self"; } }, onTryHit: function(target, source) { if (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", ghostTarget: "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: 10, noPPBoosts: true, 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", name: "Dark Pulse", pp: 3, noPPBoosts: 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", name: "Dark Void", pp: 2, noPPBoosts: true, status: 'slp', secondary: false, target: "allAdjacentFoes", type: "Dark" "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", name: "Defend Order", pp: 2, noPPBoosts: true, 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: 13, noPPBoosts: true, 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 Reflect, Light Screen, Safeguard, Mist, Spikes, Toxic Spikes, and Stealth Rock 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 target's hazards, lowers evasion by 1.", id: "defog", name: "Defog", pp: 5, noPPBoosts: true, isBounceable: true, onHit: function(pokemon) { if (!pokemon.volatiles['substitute']) this.boost({evasion:-1}); var sideConditions = {reflect:1, lightscreen:1, safeguard:1, mist:1, spikes:1, toxicspikes:1, stealthrock:1}; for (var i in sideConditions) { if (pokemon.side.removeSideCondition(i)) { this.add('-sideend', pokemon.side, this.getEffect(i).name, '[from] move: Defog', '[of] '+pokemon); } } }, 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", name: "Destiny Bond", pp: 1, noPPBoosts: true, 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' && 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 for a turn.", id: "detect", name: "Detect", pp: 1, noPPBoosts: true, 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" "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: 3, noPPBoosts: true, 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)) { 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; }, onBasePower: function(basePower, target, source, move) { if (move.id === 'earthquake' || move.id === 'magnitude') { return basePower * 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: 6, noPPBoosts: true, 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) { 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", name: "Electro Ball", pp: 2, noPPBoosts: 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: 5, noPPBoosts: true, 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: 5, noPPBoosts: true, 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'); }, onModifyPokemon: function(pokemon) { 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: 8, noPPBoosts: true, 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", name: "Encore", pp: 1, noPPBoosts: true, 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 this.add('-fail',target); delete target.volatiles['encore']; return; } this.effectData.move = target.lastMove; this.add('-start', target, 'Encore'); if (this.willMove(target)) { this.changeDecision(target, {move:this.effectData.move}); } else { this.effectData.duration++; } }, 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; } 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", name: "Endeavor", pp: 1, noPPBoosts: true, 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: 3, noPPBoosts: true, 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: 80, 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", name: "Energy Ball", pp: 2, noPPBoosts: 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, Truant, or the same Ability as the user, or if the user's Ability is Flower Gift, Forecast, Illusion, Imposter, Multitype, Trace, Wonder Guard, 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: 5, noPPBoosts: true, isBounceable: true, onTryHit: function(target, source) { if (target === source) return false; var bannedTargetAbilities = {multitype:1, truant:1}; var bannedSourceAbilities = {flowergift:1, forecast:1, illusion:1, imposter:1, multitype:1, trace:1, wonderguard: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: 0, 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", name: "Eruption", pp: 1, noPPBoosts: true, 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: 3, noPPBoosts: true, 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", name: "Extrasensory", pp: 6, noPPBoosts: true, 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", name: "ExtremeSpeed", pp: 1, noPPBoosts: true, isContact: true, secondary: false, target: "normal", type: "Normal" "facade": { num: 263, accuracy: 100, basePower: 70, basePowerCallback: function(pokemon) { if (pokemon.status && pokemon.status !== 'slp') { return 140; } return 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", name: "Facade", pp: 4, noPPBoosts: true, isContact: true, secondary: false, target: "normal", type: "Normal" "faintattack": { 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: "faintattack", name: "Faint Attack", pp: 6, noPPBoosts: true, isContact: true, secondary: false, target: "normal", type: "Dark" "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. The target flinches.", id: "fakeout", name: "Fake Out", pp: 2, noPPBoosts: true, isContact: true, onTryHit: function(target, pokemon) { if (pokemon.activeTurns > 1) { this.debug('It\'s not 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: 6, noPPBoosts: true, 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: 13, noPPBoosts: true, 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: "FeatherDance", pp: 5, noPPBoosts: true, 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 Protect and Detect 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: 3, noPPBoosts: true, isNotProtectable: true, onHit: function(target, source) { if (target.removeVolatile('protect')) { 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" "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", name: "Fiery Dance", pp: 2, noPPBoosts: true, secondary: { chance: 50, self: { boosts: { spa: 1 } } }, target: "normal", type: "Fire" "finalgambit": { num: 515, accuracy: 100, basePower: 0, damageCallback: function(pokemon) { return pokemon.hp; }, 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: 3, noPPBoosts: true, isContact: true, selfdestruct: true, secondary: false, target: "normal", type: "Fighting" "fireblast": { num: 126, accuracy: 85, basePower: 120, 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", name: "Fire Blast", pp: 1, noPPBoosts: true, 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", name: "Fire Fang", pp: 3, noPPBoosts: true, isContact: true, secondaries: [ { chance: 10, status: 'brn' }, { chance: 10, volatileStatus: 'flinch' } ], target: "normal", type: "Fire" "firepledge": { num: 519, accuracy: 100, basePower: 50, basePowerCallback: function(target, source, move) { if (move.sourceEffect in {grasspledge:1, waterpledge:1}) { this.add('-combine'); this.debug('triple damage'); return 150; } return 50; }, 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 triples if this move is used by an ally that way, and a sea of fire appears on the target's side if the first move was Grass Pledge, or a rainbow appears on the user's side if the first move was Water Pledge.", shortDesc: "Use with Grass or Water Pledge for added effect.", id: "firepledge", name: "Fire Pledge", pp: 3, noPPBoosts: true, 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", name: "Grass Knot", pp: 4, noPPBoosts: true, isContact: true, secondary: false, target: "normal", type: "Grass" "grasspledge": { num: 520, accuracy: 100, basePower: 50, basePowerCallback: function(target, source, move) { if (move.sourceEffect in {waterpledge:1, firepledge:1}) { this.add('-combine'); this.debug('triple damage'); return 150; } return 50; }, 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 triples if this move is used by an ally that way, and a sea of fire appears on the target's side if the first move was Fire Pledge, or a swamp appears on the target's side if the first move was Water Pledge.", shortDesc: "Use with Fire or Water Pledge for added effect.", id: "grasspledge", name: "Grass Pledge", pp: 3, noPPBoosts: true, 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", name: "Gyro Ball", pp: 1, noPPBoosts: true, isContact: 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: 3, noPPBoosts: true, 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", name: "Hammer Arm", pp: 2, noPPBoosts: true, isContact: true, isPunchAttack: true, self: { boosts: { spe: -1 } }, secondary: false, target: "normal", type: "Fighting" "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: 10, noPPBoosts: true, 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", name: "Haze", pp: 6, noPPBoosts: true, 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", name: "Heat Crash", pp: 2, noPPBoosts: true, isContact: true, secondary: false, target: "normal", type: "Fire" "heatwave": { num: 257, accuracy: 90, basePower: 100, 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", name: "Heat Wave", pp: 2, noPPBoosts: true, 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", name: "Heavy Slam", pp: 2, noPPBoosts: true, 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: "Increases the power of an ally's move by 50%.", id: "helpinghand", name: "Helping Hand", pp: 6, noPPBoosts: true, 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); }, onBasePower: function(basePower) { this.debug('Boosting from Helping Hand'); return basePower * 1.5; } }, secondary: false, target: "adjacentAlly", type: "Normal" "hex": { num: 506, accuracy: 100, basePower: 50, basePowerCallback: function(pokemon, target) { if (target.status) return 100; return 50; }, 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: 3, noPPBoosts: true, secondary: false, target: "normal", type: "Ghost" "hijumpkick": { 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: "hijumpkick", name: "Hi Jump Kick", pp: 2, noPPBoosts: true, isContact: true, hasCustomRecoil: true, onMoveFail: function(target, source, move) { this.damage(source.maxhp/2, source, source, 'hijumpkick'); }, secondary: false, target: "normal", type: "Fighting" "hiddenpower": { num: 237, accuracy: 100, basePower: 0, basePowerCallback: function(pokemon) { return pokemon.hpPower || 70; }, category: "Special", desc: "Deals damage to one adjacent target. This move's type and power depend on the user's individual values (IVs). Power varies between 30 and 70, and type can be any but Normal.", shortDesc: "Varies in power and type based on the user's IVs.", id: "hiddenpower", name: "Hidden Power", pp: 3, noPPBoosts: true, onModifyMove: function(move, pokemon) { move.type = pokemon.hpType || 'Dark'; }, secondary: false, target: "normal", type: "Normal" "hiddenpowerbug": { accuracy: 100, basePower: 70, category: "Special", desc: "", shortDesc: "", id: "hiddenpower", name: "Hidden Power Bug", pp: 5, noPPBoosts: true, secondary: false, target: "normal", type: "Bug" "hiddenpowerdark": { accuracy: 100, basePower: 70, category: "Special", desc: "", shortDesc: "", id: "hiddenpower", name: "Hidden Power Dark", pp: 5, noPPBoosts: true, secondary: false, target: "normal", type: "Dark" "hiddenpowerdragon": { accuracy: 100, basePower: 70, category: "Special", desc: "", shortDesc: "", id: "hiddenpower", name: "Hidden Power Dragon", pp: 5, noPPBoosts: true, secondary: false, target: "normal", type: "Dragon" "hiddenpowerelectric": { accuracy: 100, basePower: 70, category: "Special", desc: "", shortDesc: "", id: "hiddenpower", name: "Hidden Power Electric", pp: 3, noPPBoosts: true, secondary: false, target: "normal", type: "Electric" "hiddenpowerfighting": { accuracy: 100, basePower: 70, category: "Special", desc: "", shortDesc: "", id: "hiddenpower", name: "Hidden Power Fighting", pp: 3, noPPBoosts: true, secondary: false, target: "normal", type: "Fighting" "hiddenpowerfire": { accuracy: 100, basePower: 70, category: "Special", desc: "", shortDesc: "", id: "hiddenpower", name: "Hidden Power Fire", pp: 3, noPPBoosts: true, secondary: false, target: "normal", type: "Fire" "hiddenpowerflying": { accuracy: 100, basePower: 70, category: "Special", desc: "", shortDesc: "", id: "hiddenpower", name: "Hidden Power Flying", pp: 5, noPPBoosts: true, secondary: false, target: "normal", type: "Flying" "hiddenpowerghost": { accuracy: 100, basePower: 70, category: "Special", desc: "", shortDesc: "", id: "hiddenpower", name: "Hidden Power Ghost", pp: 5, noPPBoosts: true, secondary: false, target: "normal", type: "Ghost" "hiddenpowergrass": { accuracy: 100, basePower: 70, category: "Special", desc: "", shortDesc: "", id: "hiddenpower", name: "Hidden Power Grass", pp: 3, noPPBoosts: true, secondary: false, target: "normal", type: "Grass" "hiddenpowerground": { accuracy: 100, basePower: 70, category: "Special", desc: "", shortDesc: "", id: "hiddenpower", name: "Hidden Power Ground", pp: 5, noPPBoosts: true, secondary: false, target: "normal", type: "Ground" "hiddenpowerice": { accuracy: 100, basePower: 70, category: "Special", desc: "", shortDesc: "", id: "hiddenpower", name: "Hidden Power Ice", pp: 3, noPPBoosts: true, secondary: false, target: "normal", type: "Ice" "hiddenpowerpoison": { accuracy: 100, basePower: 70, category: "Special", desc: "", shortDesc: "", id: "hiddenpower", name: "Hidden Power Poison", pp: 5, noPPBoosts: true, secondary: false, target: "normal", type: "Poison" "hiddenpowerpsychic": { accuracy: 100, basePower: 70, category: "Special", desc: "", shortDesc: "", id: "hiddenpower", name: "Hidden Power Psychic", pp: 5, noPPBoosts: true, secondary: false, target: "normal", type: "Psychic" "hiddenpowerrock": { accuracy: 100, basePower: 70, category: "Special", desc: "", shortDesc: "", id: "hiddenpower", name: "Hidden Power Rock", pp: 5, noPPBoosts: true, secondary: false, target: "normal", type: "Rock" "hiddenpowersteel": { accuracy: 100, basePower: 70, category: "Special", desc: "", shortDesc: "", id: "hiddenpower", name: "Hidden Power Steel", pp: 5, noPPBoosts: true, secondary: false, target: "normal", type: "Steel" "hiddenpowerwater": { accuracy: 100, basePower: 70, category: "Special", desc: "", shortDesc: "", id: "hiddenpower", name: "Hidden Power Water", pp: 5, noPPBoosts: true, secondary: false, target: "normal", type: "Water" "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", name: "Hone Claws", pp: 3, noPPBoosts: true, 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: 8, noPPBoosts: true, 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: 3, noPPBoosts: true, 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", name: "Horn Leech", pp: 2, noPPBoosts: true, 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", name: "Howl", pp: 8, noPPBoosts: true, isSnatchable: true, boosts: { atk: 1 }, secondary: false, target: "self", type: "Normal" "hurricane": { num: 542, accuracy: 70, basePower: 120, 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", name: "Hurricane", pp: 2, noPPBoosts: true, 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: 3, noPPBoosts: true, self: { volatileStatus: 'mustrecharge' }, secondary: false, target: "normal", type: "Water" "hydropump": { num: 56, accuracy: 80, basePower: 120, category: "Special", desc: "Deals damage to one adjacent target.", shortDesc: "No additional effect.", id: "hydropump", name: "Hydro Pump", pp: 1, noPPBoosts: true, 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: 3, noPPBoosts: true, 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: 5, noPPBoosts: true, isContact: 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", name: "Hyper Voice", pp: 2, noPPBoosts: true, 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", name: "Hypnosis", pp: 4, noPPBoosts: true, 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: 6, noPPBoosts: true, isContact: 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']; } }, onBeforeTurn: function(pokemon) { if (pokemon.lastMove !== 'struggle') { this.debug('Forcing into Ice Ball'); this.changeDecision(pokemon, {move: 'iceball'}); } } }, secondary: false, target: "normal", type: "Ice" "icebeam": { num: 58, accuracy: 100, basePower: 95, 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", name: "Ice Beam", pp: 2, noPPBoosts: true, 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: 3, noPPBoosts: 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)) { 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", name: "Ice Fang", pp: 3, noPPBoosts: true, isContact: 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", name: "Ice Punch", pp: 3, noPPBoosts: true, 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", name: "Ice Shard", pp: 6, noPPBoosts: true, 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", name: "Icicle Crash", pp: 2, noPPBoosts: true, 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", name: "Icicle Spear", pp: 6, noPPBoosts: true, 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: 5, noPPBoosts: true, 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: 3, noPPBoosts: true, 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 basePower*2/3; return basePower/2; } } }, 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: 3, noPPBoosts: true, volatileStatus: 'lockon', effect: { duration: 2, onFoeModifyMove: function(move) { 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", name: "Lovely Kiss", pp: 2, noPPBoosts: true, 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", name: "Low Kick", pp: 4, noPPBoosts: true, isContact: true, secondary: false, target: "normal", type: "Fighting" "lowsweep": { num: 490, accuracy: 100, basePower: 60, 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: 6, noPPBoosts: true, 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: 10, noPPBoosts: true, 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", name: "Lunar Dance", pp: 2, noPPBoosts: true, isSnatchable: true, onTryHit: function(pokemon) { if (pokemon.side.pokemonLeft <= 1) 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: 3, noPPBoosts: true, 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", name: "Mach Punch", pp: 6, noPPBoosts: true, 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", name: "Magic Coat", pp: 3, noPPBoosts: true, volatileStatus: 'magiccoat', effect: { duration: 1, onStart: function(target) { this.add('-singleturn', target, 'move: Magic Coat'); }, onAllyTryFieldHit: function(target, source, move) { if (target === source) return; if (typeof move.isBounceable === 'undefined') { move.isBounceable = !!(move.category === 'Status' && (move.status || move.boosts || move.volatileStatus === 'confusion' || move.forceSwitch)); } if (move.target !== 'foeSide' && target !== this.effectData.target) { return; } if (move.hasBounced) { return; } if (move.isBounceable) { var newMove = this.getMoveCopy(move.id); newMove.hasBounced = true; this.add('-activate', target, 'move: Magic Coat', newMove, '[of] '+source); this.moveHit(source, target, newMove); 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. Priority -7.", shortDesc: "For 5 turns, all held items have no effect.", id: "magicroom", name: "Magic Room", pp: 3, noPPBoosts: true, onFieldHit: 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: -100, onModifyPokemon: function(pokemon) { pokemon.ignore['Item'] = true; }, onResidualOrder: 25, onEnd: function() { this.add('-fieldend', 'move: Magic Room', '[of] '+this.effectData.source); } }, secondary: false, target: "normal", 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: 6, noPPBoosts: true, secondary: false, target: "normal", type: "Grass" "magmastorm": { num: 463, accuracy: 75, basePower: 120, category: "Special", desc: "Deals damage to one adjacent target and prevents it from switching for four or five turns; always five turns if the user is holding Grip Claw. Causes damage to the target equal to 1/16 of its maximum HP (1/8 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", name: "Magma Storm", pp: 1, noPPBoosts: true, 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: 6, noPPBoosts: true, secondary: false, target: "normal", type: "Steel" "magnetrise": { num: 393, accuracy: true, basePower: 0, category: "Status", desc: "For 5 turns, the user is immune to Ground-type attacks and the effects of Spikes, Toxic Spikes, and the Ability Arena Trap as long as it remains active. If the user uses Baton Pass, the replacement will gain the effect. Ingrain, Smack Down, and Iron Ball override this move if the user is under any of their effects. Fails if the user is already under this effect or the effects of Ingrain or Smack Down. This move cannot be used while Gravity is in effect.", shortDesc: "For 5 turns, the user is immune to Ground moves.", id: "magnetrise", name: "Magnet Rise", pp: 2, noPPBoosts: true, isSnatchable: true, volatileStatus: 'magnetrise', effect: { duration: 5, onStart: function(target) { if (target.volatiles['smackdown'] || target.volatiles['ingrain']) return false; this.add('-start', target, 'Magnet Rise'); }, onImmunity: function(type) { if (type === 'Ground') return false; }, onResidualOrder: 15, onEnd: function(target) { this.add('-end', target, 'Magnet Rise'); } }, secondary: false, target: "self", type: "Electric" "magnitude": { num: 222, accuracy: 100, basePower: 0, basePowerCallback: function(pokemon) { var i = this.random(100); if (i < 5) { this.add('-activate', pokemon, 'move: Magnitude', 4); return 10; } else if (i < 15) { this.add('-activate', pokemon, 'move: Magnitude', 5); return 30; } else if (i < 35) { this.add('-activate', pokemon, 'move: Magnitude', 6); return 50; } else if (i < 65) { this.add('-activate', pokemon, 'move: Magnitude', 7); return 70; } else if (i < 85) { this.add('-activate', pokemon, 'move: Magnitude', 8); return 90; } else if (i < 95) { this.add('-activate', pokemon, 'move: Magnitude', 9); return 110; } else { this.add('-activate', pokemon, 'move: Magnitude', 10); return 150; } }, category: "Physical", desc: "Deals damage to all adjacent Pokemon. The power of this move varies; 5% chances for 10 and 150 power, 10% chances for 30 and 110 power, 20% chances for 50 and 90 power, and 30% chance for 70 power. Power doubles against Pokemon using Dig.", shortDesc: "Hits adjacent Pokemon. Power varies; 2x on Dig.", id: "magnitude", name: "Magnitude", pp: 10, noPPBoosts: true, secondary: false, target: "allAdjacent", type: "Ground" "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", name: "Me First", pp: 4, noPPBoosts: true, onHit: function(target, pokemon) { var decision = this.willMove(target); if (decision) { var move = this.getMove(decision.move); if (move.category !== 'Status') { pokemon.addVolatile('mefirst'); this.useMove(move, pokemon); return; } } return false; }, effect: { duration: 1, onBasePower: function(basePower) { return basePower * 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", name: "Mean Look", pp: 1, noPPBoosts: true, isBounceable: true, onHit: function(target) { target.addVolatile('trapped'); }, 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", name: "Meditate", pp: 8, noPPBoosts: true, 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: 5, noPPBoosts: true, 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", name: "Mega Kick", pp: 1, noPPBoosts: true, 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: 6, noPPBoosts: true, 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", name: "Megahorn", pp: 2, noPPBoosts: true, 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", name: "Memento", pp: 2, noPPBoosts: true, 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; } this.add('-fail', pokemon); 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: "The foe takes 1.5x the damage it did to the user.", id: "metalburst", name: "Metal Burst", pp: 3, noPPBoosts: true, 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: 11, noPPBoosts: true, 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: 13, noPPBoosts: true, isSoundBased: true, boosts: { spd: -2 }, secondary: false, target: "normal", type: "Steel" "meteormash": { num: 309, accuracy: 85, basePower: 100, 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", name: "Meteor Mash", pp: 2, noPPBoosts: true, 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: 3, noPPBoosts: true, 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, "v-create":1, wideguard: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", name: "Milk Drink", pp: 2, noPPBoosts: true, 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: 3, noPPBoosts: true, 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: 3, noPPBoosts: true, 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 and Steamroller will have their power doubled if used against the user while it is active.", shortDesc: "Boosts the user's evasion by 2.", id: "minimize", name: "Minimize", pp: 6, noPPBoosts: true, isSnatchable: true, volatileStatus: 'minimize', 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: 13, noPPBoosts: true, 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.getMove(pokemon.lastAttackedBy.move).category === 'Special') { return 2 * pokemon.lastAttackedBy.damage; } this.add('-fail', pokemon); 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", name: "Mirror Coat", pp: 4, noPPBoosts: true, 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: 6, noPPBoosts: true, 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(this.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: 3, noPPBoosts: true, 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: 10, noPPBoosts: true, 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: 3, noPPBoosts: true, secondary: { chance: 50, boosts: { spa: -1 } }, target: "normal", type: "Psychic" "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", name: "Moonlight", pp: 1, noPPBoosts: true, isSnatchable: true, heal: [1,2], onModifyMove: function(move) { if (this.isWeather('sunnyday')) move.heal = [2,3]; else if (this.isWeather(['raindance','sandstorm','hail'])) move.heal = [1,4]; }, secondary: false, target: "self", type: "Normal" "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", name: "Morning Sun", pp: 1, noPPBoosts: true, isSnatchable: true, heal: [1,2], onModifyMove: function(move) { if (this.isWeather('sunnyday')) move.heal = [2,3]; else if (this.isWeather(['raindance','sandstorm','hail'])) move.heal = [1,4]; }, 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: 3, noPPBoosts: true, 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: 3, noPPBoosts: 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: 5, noPPBoosts: true, secondary: { chance: 100, boosts: { spe: -1 } }, target: "normal", type: "Ground" "mudsport": { num: 300, accuracy: 100, basePower: 0, category: "Status", desc: "Until the user is no longer active, 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: "Weakens Electric-type attacks to 1/3 their power.", id: "mudsport", name: "Mud Sport", pp: 5, noPPBoosts: true, volatileStatus: 'mudsport', onTryHitField: function(target, source) { if (source.volatiles['mudsport']) return false; }, effect: { noCopy: true, onStart: function(pokemon) { this.add("-start", pokemon, 'Mud Sport'); }, onAnyBasePower: function(basePower, user, target, move) { if (move.type === 'Electric') return basePower * 0.33; } }, secondary: false, target: "all", type: "Ground" "muddywater": { num: 330, accuracy: 85, basePower: 95, 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", name: "Muddy Water", pp: 2, noPPBoosts: true, secondary: { chance: 30, boosts: { accuracy: -1 } }, target: "allAdjacentFoes", type: "Water" "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", name: "Nasty Plot", pp: 4, noPPBoosts: true, 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: 5, noPPBoosts: true, 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(''); } }, 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. Earthquake in Wi-Fi battles. (In-game: Seed Bomb in grass, Mud Bomb in puddles, Hydro Pump on water, Rock Slide in caves, Earthquake on rocky ground and sand, Blizzard on snow, Ice Beam on ice, and Tri Attack everywhere else.)", shortDesc: "Attack changes based on terrain. (Earthquake)", id: "naturepower", name: "Nature Power", pp: 4, noPPBoosts: true, onHit: function(target) { this.useMove('earthquake', 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: 5, noPPBoosts: true, 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", name: "Night Daze", pp: 2, noPPBoosts: true, 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", name: "Night Shade", pp: 3, noPPBoosts: true, 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", name: "Night Slash", pp: 3, noPPBoosts: true, 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: 5, noPPBoosts: true, 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" "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: 3, noPPBoosts: 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: 13, noPPBoosts: true, 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 of the user's stats by 1.", id: "ominouswind", name: "Ominous Wind", pp: 3, noPPBoosts: true, 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", name: "Outrage", pp: 1, noPPBoosts: true, isContact: true, self: { volatileStatus: 'lockedmove' }, secondary: false, target: "randomNormal", type: "Dragon" "overheat": { num: 315, accuracy: 90, basePower: 140, 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", name: "Overheat", pp: 1, noPPBoosts: true, 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", name: "Pain Split", pp: 4, noPPBoosts: true, 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.hpChange(), '[from] move: Pain Split'); }, secondary: false, target: "normal", type: "Normal" "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: 6, noPPBoosts: true, 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", name: "Payback", pp: 2, noPPBoosts: true, 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: 11, noPPBoosts: true, 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", name: "Perish Song", pp: 1, noPPBoosts: true, isSoundBased: true, onHitField: function(target, source) { this.add('-fieldactivate', 'move: Perish Song'); 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", name: "Quick Attack", pp: 6, noPPBoosts: true, 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 original priority greater than 0 made by other Pokemon, including allies, 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 or if this move is already in effect for the user's side. Priority +3.", shortDesc: "Protects allies from priority attacks for one turn.", id: "quickguard", name: "Quick Guard", pp: 5, noPPBoosts: true, isSnatchable: true, sideCondition: 'quickguard', stallingMove: true, // Note: stallingMove is not used anywhere. onTryHitSide: function(side, source) { return this.willAct() && this.runEvent('StallMove', source); }, onHitSide: function(side, source) { source.addVolatile('stall'); }, effect: { duration: 1, onStart: function(target, source) { this.add('-singleturn', source, 'Quick Guard'); }, onTryHitPriority: 1, onTryHit: function(target, source, effect) { // Quick Guard only blocks moves with a natural positive priority // (e.g. it doesn't block 0 priority moves boosted by Prankster) if (effect && (effect.id === 'Feint' || this.getMove(effect.id).priority <= 0)) { 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", name: "Quiver Dance", pp: 4, noPPBoosts: true, 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: 6, noPPBoosts: true, isContact: true, 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: 6, noPPBoosts: true, volatileStatus: 'followme', 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", name: "Rain Dance", pp: 1, noPPBoosts: true, 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", name: "Rapid Spin", pp: 8, noPPBoosts: true, 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}; 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: 8, noPPBoosts: true, 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", name: "Razor Shell", pp: 2, noPPBoosts: true, 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: 3, noPPBoosts: 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)) { 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", name: "Recover", pp: 2, noPPBoosts: true, 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: 3, noPPBoosts: true, 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, allies' Defense is 2x; 1.5x if not 1vs1.", id: "reflect", name: "Reflect", pp: 4, noPPBoosts: true, isSnatchable: true, sideCondition: 'reflect', effect: { duration: 5, durationCallback: function(target, source, effect) { if (source && source.item === 'lightclay') { return 8; } return 5; }, onFoeBasePower: function(basePower, attacker, defender, move) { if (move.category === 'Physical' && defender.side === this.effectData.target) { if (!move.crit && attacker.ability !== 'infiltrator') { this.debug('Reflect weaken'); if (attacker.side.active.length > 1) return basePower*2/3; return basePower/2; } } }, 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: 5, noPPBoosts: true, onHit: function(target, source) { source.addVolatile("reflecttype", target); }, effect: { noCopy: true, onStart: function(target, source) { this.effectData.types = source.types; this.add('-start', target, 'typechange', source.types.join(', '), '[from] move: Reflect Type', '[of] '+source); }, onRestart: function(target, source) { this.effectData.types = source.types; this.add('-start', target, 'typechange', source.types.join(', '), '[from] move: Reflect Type', '[of] '+source); }, onModifyPokemon: function(pokemon) { pokemon.types = this.effectData.types; } }, secondary: false, target: "normal", type: "Normal" "refresh": { num: 287, accuracy: true, basePower: 0, category: "Status", desc: "The user cures its burn, poison, or paralysis.", shortDesc: "Removes status from the user.", id: "refresh", name: "Refresh", pp: 4, noPPBoosts: true, isSnatchable: true, onHit: function(pokemon) { pokemon.cureStatus(); }, secondary: false, target: "self", type: "Normal" "relicsong": { num: 547, accuracy: 100, basePower: 75, category: "Special", desc: "Deals damage to all adjacent foes with a 10% chance to put each to sleep. If this move is successful on at least one foe and the user is a Meloetta, it changes to the Pirouette Forme if it is currently in Aria Forme, or changes to Aria Forme if it is currently in Pirouette Forme. The Pirouette Forme reverts to Aria Forme when Meloetta is not active. Pokemon with the Ability Soundproof are immune.", shortDesc: "10% chance to sleep foe(s). Meloetta transforms.", id: "relicsong", name: "Relic Song", pp: 2, noPPBoosts: true, isSoundBased: true, secondary: { chance: 10, status: 'slp' }, onHit: function(target, pokemon) { if (pokemon.baseTemplate.species === 'Meloetta' && !pokemon.transformed) { pokemon.addVolatile('relicsong'); } }, effect: { duration: 1, onAfterMoveSecondarySelf: function(pokemon, target, move) { if (pokemon.template.speciesid === 'meloettapirouette' && pokemon.transformInto('Meloetta')) { this.add('-formechange', pokemon, 'Meloetta'); } else if (pokemon.transformInto('Meloetta-Pirouette')) { this.add('-formechange', pokemon, 'Meloetta-Pirouette'); } pokemon.transformed = false; pokemon.removeVolatile('relicsong'); } }, target: "allAdjacentFoes", type: "Normal" "rest": { num: 156, accuracy: true, basePower: 0, category: "Status", desc: "The user falls asleep for the next two turns and restores all of its HP, curing itself of any major status problem in the process. Fails if the user has full HP, is already asleep, or if another effect is preventing sleep.", shortDesc: "User sleeps 2 turns and restores HP and status.", id: "rest", name: "Rest", pp: 2, noPPBoosts: true, isSnatchable: true, onHit: function(target) { if (target.hp >= 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: 3, noPPBoosts: true, isContact: true, 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", name: "Return", pp: 4, noPPBoosts: true, 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: 3, noPPBoosts: true, isContact: true, secondary: false, target: "normal", type: "Fighting" "reversal": { num: 179, accuracy: 100, basePower: 0, basePowerCallback: function(pokemon, target) { var hpPercent = pokemon.hpPercent(pokemon.hp); if (hpPercent <= 5) { return 200; } if (hpPercent <= 10) { return 150; } if (hpPercent <= 20) { return 100; } if (hpPercent <= 35) { return 80; } if (hpPercent <= 70) { 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", name: "Reversal", pp: 3, noPPBoosts: true, isContact: true, secondary: false, target: "normal", type: "Fighting" "roar": { num: 46, accuracy: 100, 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", name: "Roar", pp: 4, noPPBoosts: true, isSoundBased: true, forceSwitch: true, notSubBlocked: 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: 3, noPPBoosts: true, 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", name: "Rock Blast", pp: 2, noPPBoosts: true, 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: 6, noPPBoosts: true, 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", name: "Rock Polish", pp: 4, noPPBoosts: true, 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", name: "Rock Slide", pp: 2, noPPBoosts: true, 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: 5, noPPBoosts: true, 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: 5, noPPBoosts: true, secondary: false, target: "normal", type: "Rock" "rocktomb": { num: 317, accuracy: 80, basePower: 50, 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: 3, noPPBoosts: true, 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: 3, noPPBoosts: true, 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: 3, noPPBoosts: true, 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: 5, noPPBoosts: true, 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: 6, noPPBoosts: true, 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']; } }, onBeforeTurn: function(pokemon) { if (pokemon.lastMove !== 'struggle') { this.debug('Forcing into Rollout'); this.changeDecision(pokemon, {move: '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. Removes Flying-type 'til turn ends.", id: "roost", name: "Roost", pp: 2, noPPBoosts: true, isSnatchable: true, heal: [1,2], volatileStatus: 'roost', effect: { duration: 1, onModifyPokemonPriority: 100, onModifyPokemon: function(pokemon) { if (pokemon.hasType('Flying')) { // don't just delete the type; since // the types array may be a pointer to the // types array in the Pokedex. if (pokemon.types[0] === 'Flying') { pokemon.types = [pokemon.types[1] || 'Normal']; } else { pokemon.types = [pokemon.types[0]]; } } //pokemon.negateImmunity['Ground'] = 1; } }, secondary: false, target: "self", type: "Flying" "round": { num: 496, accuracy: 100, basePower: 60, basePowerCallback: function(target, source, move) { if (move.sourceEffect === 'round') { return 120; } return 60; }, category: "Special", desc: "Deals damage to one adjacent target. If there are other active Pokemon that chose this move for use this turn, those Pokemon take their turn immediately after the user, in Speed order, and this move's power is 120 for each other user. Pokemon with the Ability Soundproof are immune.", shortDesc: "Power doubles if others used Round this turn.", id: "round", name: "Round", pp: 5, noPPBoosts: true, isSoundBased: true, onTryHit: function(target, source) { for (var i=0; i= 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: 8, noPPBoosts: true, isContact: true, secondary: { chance: 10, self: { boosts: { def: 1 } } }, target: "normal", type: "Steel" "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", name: "Stockpile", pp: 4, noPPBoosts: true, 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}); }, onRestart: function(target) { if (this.effectData.layers < 3) { this.effectData.layers++; this.add('-start',target,'stockpile'+this.effectData.layers); this.boost({def:1, spd:1}); } }, onEnd: function(target) { var layers = this.effectData.layers * -1; this.effectData.layers = 0; this.boost({def:layers, spd:layers}); } }, secondary: false, target: "self", type: "Normal" "stomp": { num: 23, accuracy: 100, basePower: 65, basePowerCallback: function(pokemon, target) { if (target.volatiles['minimize']) return 130; return 65; }, category: "Physical", desc: "Deals damage to one adjacent target with a 30% chance to flinch it. Power doubles if Minimize was used previously by the target. Makes contact.", shortDesc: "30% chance to flinch the target.", id: "stomp", name: "Stomp", pp: 6, noPPBoosts: true, 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", name: "Stone Edge", pp: 1, noPPBoosts: true, 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", name: "Stored Power", pp: 2, noPPBoosts: true, secondary: false, target: "normal", type: "Psychic" "stormthrow": { num: 480, accuracy: 100, basePower: 40, 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", name: "Storm Throw", pp: 2, noPPBoosts: true, isContact: true, willCrit: true, secondary: false, target: "normal", type: "Fighting" "steamroller": { num: 537, accuracy: 100, basePower: 65, basePowerCallback: function(pokemon, target) { if (target.volatiles['minimize']) return 130; return 65; }, category: "Physical", desc: "Deals damage to one adjacent target with a 30% chance to flinch it. Power doubles if Minimize was used previously by the target. Makes contact.", shortDesc: "30% chance to flinch the target.", id: "steamroller", name: "Steamroller", pp: 6, noPPBoosts: true, 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: 5, noPPBoosts: true, isContact: true, secondary: false, target: "normal", type: "Normal" "stringshot": { num: 81, accuracy: 95, basePower: 0, category: "Status", desc: "Lowers all adjacent foes' Speed 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) Speed by 1.", id: "stringshot", name: "String Shot", pp: 13, noPPBoosts: true, boosts: { spe: -1 }, 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: 30, 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: 6, noPPBoosts: true, 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", name: "Stun Spore", pp: 6, noPPBoosts: true, status: 'par', affectedByImmunities: true, 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: 8, noPPBoosts: true, 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", name: "Substitute", pp: 2, noPPBoosts: true, 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']; }, onTryHitPriority: -1, onTryHit: function(target, source, move) { if (target === source) { this.debug('sub bypass: self hit'); 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, 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", name: "Sucker Punch", pp: 1, noPPBoosts: true, isContact: true, onTryHit: function(target) { 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", name: "Sunny Day", pp: 1, noPPBoosts: true, 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", name: "Super Fang", pp: 2, noPPBoosts: true, 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", name: "Superpower", pp: 1, noPPBoosts: true, 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: 6, noPPBoosts: true, isSoundBased: true, volatileStatus: 'confusion', secondary: false, target: "normal", type: "Normal" "surf": { num: 57, accuracy: 100, basePower: 95, 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", name: "Surf", pp: 3, noPPBoosts: true, 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: 5, noPPBoosts: true, 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: 3, noPPBoosts: true, isSnatchable: true, onTryHit: function(pokemon) { if (!pokemon.volatiles['stockpile'] || !pokemon.volatiles['stockpile'].layers) return false; }, onHit: function(pokemon) { var healAmount = [4,2,1]; this.heal(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: 3, noPPBoosts: true, volatileStatus: 'confusion', secondary: false, target: "normal", type: "Normal" "sweetscent": { num: 230, accuracy: 100, basePower: 0, category: "Status", desc: "Lowers all adjacent foes' evasion by 1 stage. Pokemon protected by Magic Coat or the Ability Magic Bounce are unaffected and instead use this move themselves. (Field: Can be used to attract wild Pokemon while standing in grass. Fails if the weather is not clear.)", shortDesc: "Lowers the foe(s) evasion by 1.", id: "sweetscent", name: "Sweet Scent", pp: 6, noPPBoosts: true, boosts: { evasion: -1 }, 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: 6, noPPBoosts: true, 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, or a Drive to or from a Giratina, an Arceus, or a Genesect, respectively. Pokemon with the Ability Sticky Hold are immune.", shortDesc: "User switches its held item with the target's.", id: "switcheroo", name: "Switcheroo", pp: 2, noPPBoosts: true, 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", name: "Swords Dance", pp: 6, noPPBoosts: true, isSnatchable: true, boosts: { atk: 2 }, secondary: false, target: "self", type: "Normal" "synchronoise": { num: 485, accuracy: 100, basePower: 70, 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: 5, noPPBoosts: true, onTryHit: function(target, source) { return target.hasType(source.types); }, 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", name: "Synthesis", pp: 1, noPPBoosts: true, isSnatchable: true, heal: [1,2], onModifyMove: function(move) { if (this.isWeather('sunnyday')) move.heal = [2,3]; else if (this.isWeather(['raindance','sandstorm','hail'])) move.heal = [1,4]; }, 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: 11, noPPBoosts: true, 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", name: "Tail Glow", pp: 4, noPPBoosts: true, 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", name: "Tail Slap", pp: 2, noPPBoosts: true, 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: 10, noPPBoosts: true, 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", name: "Tailwind", pp: 6, noPPBoosts: true, 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(spe) { return spe * 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: 6, noPPBoosts: true, 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", name: "Taunt", pp: 4, noPPBoosts: true, 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) { 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: 3, noPPBoosts: true, isNotProtectable: true, onHit: function(target, pokemon) { if (!pokemon.transformInto(target)) { return false; } this.add('-transform', pokemon, target); }, 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", name: "Tri Attack", pp: 2, noPPBoosts: true, 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, or a Drive to or from a Giratina, an Arceus, or a Genesect, respectively. Pokemon with the Ability Sticky Hold are immune.", shortDesc: "User switches its held item with the target's.", id: "trick", name: "Trick", pp: 2, noPPBoosts: true, 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" "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", name: "Trick Room", pp: 1, noPPBoosts: true, 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); }, onModifySpePriority: -100, onModifySpe: function(spe) { // just for fun: Trick Room glitch if (spe <= 1809) return -spe; }, onResidualOrder: 23, onEnd: function() { this.add('-fieldend', 'move: Trick Room'); } }, 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: 3, noPPBoosts: true, 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: 6, noPPBoosts: true, 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: 6, noPPBoosts: true, 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", name: "U-turn", pp: 4, noPPBoosts: true, 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: 3, noPPBoosts: true, isSoundBased: true, self: { volatileStatus: 'uproar' }, onTryHit: function(target) { for (var i=0; i