export const Items: import('../sim/dex-items').ItemDataTable = { abilityshield: { name: "Ability Shield", spritenum: 746, fling: { basePower: 30, }, ignoreKlutz: true, // Neutralizing Gas protection implemented in Pokemon.ignoringAbility() within sim/pokemon.ts // and in Neutralizing Gas itself within data/abilities.ts onSetAbility(ability, target, source, effect) { if (effect && effect.effectType === 'Ability' && effect.name !== 'Trace') { this.add('-ability', source, effect); } this.add('-block', target, 'item: Ability Shield'); return null; }, // Mold Breaker protection implemented in Battle.suppressingAbility() within sim/battle.ts num: 1881, gen: 9, }, abomasite: { name: "Abomasite", spritenum: 575, megaStone: "Abomasnow-Mega", megaEvolves: "Abomasnow", itemUser: ["Abomasnow"], onTakeItem(item, source) { if (item.megaEvolves === source.baseSpecies.baseSpecies) return false; return true; }, num: 674, gen: 6, isNonstandard: "Past", }, absolite: { name: "Absolite", spritenum: 576, megaStone: "Absol-Mega", megaEvolves: "Absol", itemUser: ["Absol"], onTakeItem(item, source) { if (item.megaEvolves === source.baseSpecies.baseSpecies) return false; return true; }, num: 677, gen: 6, isNonstandard: "Past", }, absorbbulb: { name: "Absorb Bulb", spritenum: 2, fling: { basePower: 30, }, onDamagingHit(damage, target, source, move) { if (move.type === 'Water') { target.useItem(); } }, boosts: { spa: 1, }, num: 545, gen: 5, }, adamantcrystal: { name: "Adamant Crystal", spritenum: 741, onBasePowerPriority: 15, onBasePower(basePower, user, target, move) { if (user.baseSpecies.num === 483 && (move.type === 'Steel' || move.type === 'Dragon')) { return this.chainModify([4915, 4096]); } }, onTakeItem(item, pokemon, source) { if (source?.baseSpecies.num === 483 || pokemon.baseSpecies.num === 483) { return false; } return true; }, forcedForme: "Dialga-Origin", itemUser: ["Dialga-Origin"], num: 1777, gen: 8, }, adamantorb: { name: "Adamant Orb", spritenum: 4, fling: { basePower: 60, }, onBasePowerPriority: 15, onBasePower(basePower, user, target, move) { if (user.baseSpecies.num === 483 && (move.type === 'Steel' || move.type === 'Dragon')) { return this.chainModify([4915, 4096]); } }, itemUser: ["Dialga"], num: 135, gen: 4, }, adrenalineorb: { name: "Adrenaline Orb", spritenum: 660, fling: { basePower: 30, }, onAfterBoost(boost, target, source, effect) { // Adrenaline Orb activates if Intimidate is blocked by an ability like Hyper Cutter, // which deletes boost.atk, // but not if the holder's attack is already at -6 (or +6 if it has Contrary), // which sets boost.atk to 0 if (target.boosts['spe'] === 6 || boost.atk === 0) { return; } if (effect.name === 'Intimidate') { target.useItem(); } }, boosts: { spe: 1, }, num: 846, gen: 7, }, aerodactylite: { name: "Aerodactylite", spritenum: 577, megaStone: "Aerodactyl-Mega", megaEvolves: "Aerodactyl", itemUser: ["Aerodactyl"], onTakeItem(item, source) { if (item.megaEvolves === source.baseSpecies.baseSpecies) return false; return true; }, num: 672, gen: 6, isNonstandard: "Past", }, aggronite: { name: "Aggronite", spritenum: 578, megaStone: "Aggron-Mega", megaEvolves: "Aggron", itemUser: ["Aggron"], onTakeItem(item, source) { if (item.megaEvolves === source.baseSpecies.baseSpecies) return false; return true; }, num: 667, gen: 6, isNonstandard: "Past", }, aguavberry: { name: "Aguav Berry", spritenum: 5, isBerry: true, naturalGift: { basePower: 80, type: "Dragon", }, onUpdate(pokemon) { if (pokemon.hp <= pokemon.maxhp / 4 || (pokemon.hp <= pokemon.maxhp / 2 && pokemon.hasAbility('gluttony') && pokemon.abilityState.gluttony)) { pokemon.eatItem(); } }, onTryEatItem(item, pokemon) { if (!this.runEvent('TryHeal', pokemon, null, this.effect, pokemon.baseMaxhp / 3)) return false; }, onEat(pokemon) { this.heal(pokemon.baseMaxhp / 3); if (pokemon.getNature().minus === 'spd') { pokemon.addVolatile('confusion'); } }, num: 162, gen: 3, }, airballoon: { name: "Air Balloon", spritenum: 6, fling: { basePower: 10, }, onStart(target) { if (!target.ignoringItem() && !this.field.getPseudoWeather('gravity')) { this.add('-item', target, 'Air Balloon'); } }, // airborneness implemented in sim/pokemon.js:Pokemon#isGrounded onDamagingHit(damage, target, source, move) { this.add('-enditem', target, 'Air Balloon'); target.item = ''; this.clearEffectState(target.itemState); this.runEvent('AfterUseItem', target, null, null, this.dex.items.get('airballoon')); }, onAfterSubDamage(damage, target, source, effect) { this.debug('effect: ' + effect.id); if (effect.effectType === 'Move') { this.add('-enditem', target, 'Air Balloon'); target.item = ''; this.clearEffectState(target.itemState); this.runEvent('AfterUseItem', target, null, null, this.dex.items.get('airballoon')); } }, num: 541, gen: 5, }, alakazite: { name: "Alakazite", spritenum: 579, megaStone: "Alakazam-Mega", megaEvolves: "Alakazam", itemUser: ["Alakazam"], onTakeItem(item, source) { if (item.megaEvolves === source.baseSpecies.baseSpecies) return false; return true; }, num: 679, gen: 6, isNonstandard: "Past", }, aloraichiumz: { name: "Aloraichium Z", spritenum: 655, onTakeItem: false, zMove: "Stoked Sparksurfer", zMoveFrom: "Thunderbolt", itemUser: ["Raichu-Alola"], num: 803, gen: 7, isNonstandard: "Past", }, altarianite: { name: "Altarianite", spritenum: 615, megaStone: "Altaria-Mega", megaEvolves: "Altaria", itemUser: ["Altaria"], onTakeItem(item, source) { if (item.megaEvolves === source.baseSpecies.baseSpecies) return false; return true; }, num: 755, gen: 6, isNonstandard: "Past", }, ampharosite: { name: "Ampharosite", spritenum: 580, megaStone: "Ampharos-Mega", megaEvolves: "Ampharos", itemUser: ["Ampharos"], onTakeItem(item, source) { if (item.megaEvolves === source.baseSpecies.baseSpecies) return false; return true; }, num: 658, gen: 6, isNonstandard: "Past", }, apicotberry: { name: "Apicot Berry", spritenum: 10, isBerry: true, naturalGift: { basePower: 100, type: "Ground", }, onUpdate(pokemon) { if (pokemon.hp <= pokemon.maxhp / 4 || (pokemon.hp <= pokemon.maxhp / 2 && pokemon.hasAbility('gluttony') && pokemon.abilityState.gluttony)) { pokemon.eatItem(); } }, onEat(pokemon) { this.boost({ spd: 1 }); }, num: 205, gen: 3, }, armorfossil: { name: "Armor Fossil", spritenum: 12, fling: { basePower: 100, }, num: 104, gen: 4, isNonstandard: "Past", }, aspearberry: { name: "Aspear Berry", spritenum: 13, isBerry: true, naturalGift: { basePower: 80, type: "Ice", }, onUpdate(pokemon) { if (pokemon.status === 'frz') { pokemon.eatItem(); } }, onEat(pokemon) { if (pokemon.status === 'frz') { pokemon.cureStatus(); } }, num: 153, gen: 3, }, assaultvest: { name: "Assault Vest", spritenum: 581, fling: { basePower: 80, }, onModifySpDPriority: 1, onModifySpD(spd) { return this.chainModify(1.5); }, onDisableMove(pokemon) { for (const moveSlot of pokemon.moveSlots) { const move = this.dex.moves.get(moveSlot.id); if (move.category === 'Status' && move.id !== 'mefirst') { pokemon.disableMove(moveSlot.id); } } }, num: 640, gen: 6, }, audinite: { name: "Audinite", spritenum: 617, megaStone: "Audino-Mega", megaEvolves: "Audino", itemUser: ["Audino"], onTakeItem(item, source) { if (item.megaEvolves === source.baseSpecies.baseSpecies) return false; return true; }, num: 757, gen: 6, isNonstandard: "Past", }, auspiciousarmor: { name: "Auspicious Armor", spritenum: 753, fling: { basePower: 30, }, num: 2344, gen: 9, }, babiriberry: { name: "Babiri Berry", spritenum: 17, isBerry: true, naturalGift: { basePower: 80, type: "Steel", }, onSourceModifyDamage(damage, source, target, move) { if (move.type === 'Steel' && target.getMoveHitData(move).typeMod > 0) { const hitSub = target.volatiles['substitute'] && !move.flags['bypasssub'] && !(move.infiltrates && this.gen >= 6); if (hitSub) return; if (target.eatItem()) { this.debug('-50% reduction'); this.add('-enditem', target, this.effect, '[weaken]'); return this.chainModify(0.5); } } }, onEat() { }, num: 199, gen: 4, }, banettite: { name: "Banettite", spritenum: 582, megaStone: "Banette-Mega", megaEvolves: "Banette", itemUser: ["Banette"], onTakeItem(item, source) { if (item.megaEvolves === source.baseSpecies.baseSpecies) return false; return true; }, num: 668, gen: 6, isNonstandard: "Past", }, beastball: { name: "Beast Ball", spritenum: 661, num: 851, gen: 7, isPokeball: true, }, beedrillite: { name: "Beedrillite", spritenum: 628, megaStone: "Beedrill-Mega", megaEvolves: "Beedrill", itemUser: ["Beedrill"], onTakeItem(item, source) { if (item.megaEvolves === source.baseSpecies.baseSpecies) return false; return true; }, num: 770, gen: 6, isNonstandard: "Past", }, belueberry: { name: "Belue Berry", spritenum: 21, isBerry: true, naturalGift: { basePower: 100, type: "Electric", }, onEat: false, num: 183, gen: 3, isNonstandard: "Past", }, berryjuice: { name: "Berry Juice", spritenum: 22, fling: { basePower: 30, }, onUpdate(pokemon) { if (pokemon.hp <= pokemon.maxhp / 2) { if (this.runEvent('TryHeal', pokemon, null, this.effect, 20) && pokemon.useItem()) { this.heal(20); } } }, num: 43, gen: 2, isNonstandard: "Past", }, berrysweet: { name: "Berry Sweet", spritenum: 706, fling: { basePower: 10, }, num: 1111, gen: 8, }, bignugget: { name: "Big Nugget", spritenum: 27, fling: { basePower: 130, }, num: 581, gen: 5, }, bigroot: { name: "Big Root", spritenum: 29, fling: { basePower: 10, }, onTryHealPriority: 1, onTryHeal(damage, target, source, effect) { const heals = ['drain', 'leechseed', 'ingrain', 'aquaring', 'strengthsap']; if (heals.includes(effect.id)) { return this.chainModify([5324, 4096]); } }, num: 296, gen: 4, }, bindingband: { name: "Binding Band", spritenum: 31, fling: { basePower: 30, }, // implemented in statuses num: 544, gen: 5, }, blackbelt: { name: "Black Belt", spritenum: 32, fling: { basePower: 30, }, onBasePowerPriority: 15, onBasePower(basePower, user, target, move) { if (move && move.type === 'Fighting') { return this.chainModify([4915, 4096]); } }, num: 241, gen: 2, }, blackglasses: { name: "Black Glasses", spritenum: 35, fling: { basePower: 30, }, onBasePowerPriority: 15, onBasePower(basePower, user, target, move) { if (move && move.type === 'Dark') { return this.chainModify([4915, 4096]); } }, num: 240, gen: 2, }, blacksludge: { name: "Black Sludge", spritenum: 34, fling: { basePower: 30, }, onResidualOrder: 5, onResidualSubOrder: 4, onResidual(pokemon) { if (pokemon.hasType('Poison')) { this.heal(pokemon.baseMaxhp / 16); } else { this.damage(pokemon.baseMaxhp / 8); } }, num: 281, gen: 4, }, blastoisinite: { name: "Blastoisinite", spritenum: 583, megaStone: "Blastoise-Mega", megaEvolves: "Blastoise", itemUser: ["Blastoise"], onTakeItem(item, source) { if (item.megaEvolves === source.baseSpecies.baseSpecies) return false; return true; }, num: 661, gen: 6, isNonstandard: "Past", }, blazikenite: { name: "Blazikenite", spritenum: 584, megaStone: "Blaziken-Mega", megaEvolves: "Blaziken", itemUser: ["Blaziken"], onTakeItem(item, source) { if (item.megaEvolves === source.baseSpecies.baseSpecies) return false; return true; }, num: 664, gen: 6, isNonstandard: "Past", }, blueorb: { name: "Blue Orb", spritenum: 41, onSwitchInPriority: -1, onSwitchIn(pokemon) { if (pokemon.isActive && pokemon.baseSpecies.name === 'Kyogre' && !pokemon.transformed) { pokemon.formeChange('Kyogre-Primal', this.effect, true); } }, onTakeItem(item, source) { if (source.baseSpecies.baseSpecies === 'Kyogre') return false; return true; }, itemUser: ["Kyogre"], isPrimalOrb: true, num: 535, gen: 6, isNonstandard: "Past", }, blukberry: { name: "Bluk Berry", spritenum: 44, isBerry: true, naturalGift: { basePower: 90, type: "Fire", }, onEat: false, num: 165, gen: 3, isNonstandard: "Past", }, blunderpolicy: { name: "Blunder Policy", spritenum: 716, fling: { basePower: 80, }, // Item activation located in scripts.js num: 1121, gen: 8, }, boosterenergy: { name: "Booster Energy", spritenum: 745, fling: { basePower: 30, }, onSwitchInPriority: -2, onStart(pokemon) { this.effectState.started = true; ((this.effect as any).onUpdate as (p: Pokemon) => void).call(this, pokemon); }, onUpdate(pokemon) { if (!this.effectState.started || pokemon.transformed) return; if (pokemon.hasAbility('protosynthesis') && !this.field.isWeather('sunnyday') && pokemon.useItem()) { pokemon.addVolatile('protosynthesis'); } if (pokemon.hasAbility('quarkdrive') && !this.field.isTerrain('electricterrain') && pokemon.useItem()) { pokemon.addVolatile('quarkdrive'); } }, onTakeItem(item, source) { if (source.baseSpecies.tags.includes("Paradox")) return false; return true; }, num: 1880, gen: 9, }, bottlecap: { name: "Bottle Cap", spritenum: 696, fling: { basePower: 30, }, num: 795, gen: 7, }, brightpowder: { name: "Bright Powder", spritenum: 51, fling: { basePower: 10, }, onModifyAccuracyPriority: -2, onModifyAccuracy(accuracy) { if (typeof accuracy !== 'number') return; this.debug('brightpowder - decreasing accuracy'); return this.chainModify([3686, 4096]); }, num: 213, gen: 2, }, buggem: { name: "Bug Gem", spritenum: 53, isGem: true, onSourceTryPrimaryHit(target, source, move) { if (target === source || move.category === 'Status') return; if (move.type === 'Bug' && source.useItem()) { source.addVolatile('gem'); } }, num: 558, gen: 5, isNonstandard: "Past", }, bugmemory: { name: "Bug Memory", spritenum: 673, onMemory: 'Bug', onTakeItem(item, pokemon, source) { if ((source && source.baseSpecies.num === 773) || pokemon.baseSpecies.num === 773) { return false; } return true; }, forcedForme: "Silvally-Bug", itemUser: ["Silvally-Bug"], num: 909, gen: 7, isNonstandard: "Past", }, buginiumz: { name: "Buginium Z", spritenum: 642, onPlate: 'Bug', onTakeItem: false, zMove: true, zMoveType: "Bug", forcedForme: "Arceus-Bug", num: 787, gen: 7, isNonstandard: "Past", }, burndrive: { name: "Burn Drive", spritenum: 54, onTakeItem(item, pokemon, source) { if ((source && source.baseSpecies.num === 649) || pokemon.baseSpecies.num === 649) { return false; } return true; }, onDrive: 'Fire', forcedForme: "Genesect-Burn", itemUser: ["Genesect-Burn"], num: 118, gen: 5, isNonstandard: "Past", }, cameruptite: { name: "Cameruptite", spritenum: 625, megaStone: "Camerupt-Mega", megaEvolves: "Camerupt", itemUser: ["Camerupt"], onTakeItem(item, source) { if (item.megaEvolves === source.baseSpecies.baseSpecies) return false; return true; }, num: 767, gen: 6, isNonstandard: "Past", }, cellbattery: { name: "Cell Battery", spritenum: 60, fling: { basePower: 30, }, onDamagingHit(damage, target, source, move) { if (move.type === 'Electric') { target.useItem(); } }, boosts: { atk: 1, }, num: 546, gen: 5, }, charcoal: { name: "Charcoal", spritenum: 61, fling: { basePower: 30, }, onBasePowerPriority: 15, onBasePower(basePower, user, target, move) { if (move && move.type === 'Fire') { return this.chainModify([4915, 4096]); } }, num: 249, gen: 2, }, charizarditex: { name: "Charizardite X", spritenum: 585, megaStone: "Charizard-Mega-X", megaEvolves: "Charizard", itemUser: ["Charizard"], onTakeItem(item, source) { if (item.megaEvolves === source.baseSpecies.baseSpecies) return false; return true; }, num: 660, gen: 6, isNonstandard: "Past", }, charizarditey: { name: "Charizardite Y", spritenum: 586, megaStone: "Charizard-Mega-Y", megaEvolves: "Charizard", itemUser: ["Charizard"], onTakeItem(item, source) { if (item.megaEvolves === source.baseSpecies.baseSpecies) return false; return true; }, num: 678, gen: 6, isNonstandard: "Past", }, chartiberry: { name: "Charti Berry", spritenum: 62, isBerry: true, naturalGift: { basePower: 80, type: "Rock", }, onSourceModifyDamage(damage, source, target, move) { if (move.type === 'Rock' && target.getMoveHitData(move).typeMod > 0) { const hitSub = target.volatiles['substitute'] && !move.flags['bypasssub'] && !(move.infiltrates && this.gen >= 6); if (hitSub) return; if (target.eatItem()) { this.debug('-50% reduction'); this.add('-enditem', target, this.effect, '[weaken]'); return this.chainModify(0.5); } } }, onEat() { }, num: 195, gen: 4, }, cheriberry: { name: "Cheri Berry", spritenum: 63, isBerry: true, naturalGift: { basePower: 80, type: "Fire", }, onUpdate(pokemon) { if (pokemon.status === 'par') { pokemon.eatItem(); } }, onEat(pokemon) { if (pokemon.status === 'par') { pokemon.cureStatus(); } }, num: 149, gen: 3, }, cherishball: { name: "Cherish Ball", spritenum: 64, num: 16, gen: 4, isPokeball: true, isNonstandard: "Unobtainable", }, chestoberry: { name: "Chesto Berry", spritenum: 65, isBerry: true, naturalGift: { basePower: 80, type: "Water", }, onUpdate(pokemon) { if (pokemon.status === 'slp') { pokemon.eatItem(); } }, onEat(pokemon) { if (pokemon.status === 'slp') { pokemon.cureStatus(); } }, num: 150, gen: 3, }, chilanberry: { name: "Chilan Berry", spritenum: 66, isBerry: true, naturalGift: { basePower: 80, type: "Normal", }, onSourceModifyDamage(damage, source, target, move) { if ( move.type === 'Normal' && (!target.volatiles['substitute'] || move.flags['bypasssub'] || (move.infiltrates && this.gen >= 6)) ) { if (target.eatItem()) { this.debug('-50% reduction'); this.add('-enditem', target, this.effect, '[weaken]'); return this.chainModify(0.5); } } }, onEat() { }, num: 200, gen: 4, }, chilldrive: { name: "Chill Drive", spritenum: 67, onTakeItem(item, pokemon, source) { if ((source && source.baseSpecies.num === 649) || pokemon.baseSpecies.num === 649) { return false; } return true; }, onDrive: 'Ice', forcedForme: "Genesect-Chill", itemUser: ["Genesect-Chill"], num: 119, gen: 5, isNonstandard: "Past", }, chippedpot: { name: "Chipped Pot", spritenum: 720, fling: { basePower: 80, }, num: 1254, gen: 8, }, choiceband: { name: "Choice Band", spritenum: 68, fling: { basePower: 10, }, onStart(pokemon) { if (pokemon.volatiles['choicelock']) { this.debug('removing choicelock'); } pokemon.removeVolatile('choicelock'); }, onModifyMove(move, pokemon) { pokemon.addVolatile('choicelock'); }, onModifyAtkPriority: 1, onModifyAtk(atk, pokemon) { if (pokemon.volatiles['dynamax']) return; return this.chainModify(1.5); }, isChoice: true, num: 220, gen: 3, }, choicescarf: { name: "Choice Scarf", spritenum: 69, fling: { basePower: 10, }, onStart(pokemon) { if (pokemon.volatiles['choicelock']) { this.debug('removing choicelock'); } pokemon.removeVolatile('choicelock'); }, onModifyMove(move, pokemon) { pokemon.addVolatile('choicelock'); }, onModifySpe(spe, pokemon) { if (pokemon.volatiles['dynamax']) return; return this.chainModify(1.5); }, isChoice: true, num: 287, gen: 4, }, choicespecs: { name: "Choice Specs", spritenum: 70, fling: { basePower: 10, }, onStart(pokemon) { if (pokemon.volatiles['choicelock']) { this.debug('removing choicelock'); } pokemon.removeVolatile('choicelock'); }, onModifyMove(move, pokemon) { pokemon.addVolatile('choicelock'); }, onModifySpAPriority: 1, onModifySpA(spa, pokemon) { if (pokemon.volatiles['dynamax']) return; return this.chainModify(1.5); }, isChoice: true, num: 297, gen: 4, }, chopleberry: { name: "Chople Berry", spritenum: 71, isBerry: true, naturalGift: { basePower: 80, type: "Fighting", }, onSourceModifyDamage(damage, source, target, move) { if (move.type === 'Fighting' && target.getMoveHitData(move).typeMod > 0) { const hitSub = target.volatiles['substitute'] && !move.flags['bypasssub'] && !(move.infiltrates && this.gen >= 6); if (hitSub) return; if (target.eatItem()) { this.debug('-50% reduction'); this.add('-enditem', target, this.effect, '[weaken]'); return this.chainModify(0.5); } } }, onEat() { }, num: 189, gen: 4, }, clawfossil: { name: "Claw Fossil", spritenum: 72, fling: { basePower: 100, }, num: 100, gen: 3, isNonstandard: "Past", }, clearamulet: { name: "Clear Amulet", spritenum: 747, fling: { basePower: 30, }, onTryBoostPriority: 1, onTryBoost(boost, target, source, effect) { if (source && target === source) return; let showMsg = false; let i: BoostID; for (i in boost) { if (boost[i]! < 0) { delete boost[i]; showMsg = true; } } if (showMsg && !(effect as ActiveMove).secondaries && effect.id !== 'octolock') { this.add('-fail', target, 'unboost', '[from] item: Clear Amulet', `[of] ${target}`); } }, num: 1882, gen: 9, }, cloversweet: { name: "Clover Sweet", spritenum: 707, fling: { basePower: 10, }, num: 1112, gen: 8, }, cobaberry: { name: "Coba Berry", spritenum: 76, isBerry: true, naturalGift: { basePower: 80, type: "Flying", }, onSourceModifyDamage(damage, source, target, move) { if (move.type === 'Flying' && target.getMoveHitData(move).typeMod > 0) { const hitSub = target.volatiles['substitute'] && !move.flags['bypasssub'] && !(move.infiltrates && this.gen >= 6); if (hitSub) return; if (target.eatItem()) { this.debug('-50% reduction'); this.add('-enditem', target, this.effect, '[weaken]'); return this.chainModify(0.5); } } }, onEat() { }, num: 192, gen: 4, }, colburberry: { name: "Colbur Berry", spritenum: 78, isBerry: true, naturalGift: { basePower: 80, type: "Dark", }, onSourceModifyDamage(damage, source, target, move) { if (move.type === 'Dark' && target.getMoveHitData(move).typeMod > 0) { const hitSub = target.volatiles['substitute'] && !move.flags['bypasssub'] && !(move.infiltrates && this.gen >= 6); if (hitSub) return; if (target.eatItem()) { this.debug('-50% reduction'); this.add('-enditem', target, this.effect, '[weaken]'); return this.chainModify(0.5); } } }, onEat() { }, num: 198, gen: 4, }, cornerstonemask: { name: "Cornerstone Mask", spritenum: 758, fling: { basePower: 60, }, onBasePowerPriority: 15, onBasePower(basePower, user, target, move) { if (user.baseSpecies.name.startsWith('Ogerpon-Cornerstone')) { return this.chainModify([4915, 4096]); } }, onTakeItem(item, source) { if (source.baseSpecies.baseSpecies === 'Ogerpon') return false; return true; }, forcedForme: "Ogerpon-Cornerstone", itemUser: ["Ogerpon-Cornerstone"], num: 2406, gen: 9, }, cornnberry: { name: "Cornn Berry", spritenum: 81, isBerry: true, naturalGift: { basePower: 90, type: "Bug", }, onEat: false, num: 175, gen: 3, isNonstandard: "Past", }, coverfossil: { name: "Cover Fossil", spritenum: 85, fling: { basePower: 100, }, num: 572, gen: 5, isNonstandard: "Past", }, covertcloak: { name: "Covert Cloak", spritenum: 750, fling: { basePower: 30, }, onModifySecondaries(secondaries) { this.debug('Covert Cloak prevent secondary'); return secondaries.filter(effect => !!(effect.self || effect.dustproof)); }, num: 1885, gen: 9, }, crackedpot: { name: "Cracked Pot", spritenum: 719, fling: { basePower: 80, }, num: 1253, gen: 8, }, custapberry: { name: "Custap Berry", spritenum: 86, isBerry: true, naturalGift: { basePower: 100, type: "Ghost", }, onFractionalPriorityPriority: -2, onFractionalPriority(priority, pokemon) { if ( priority <= 0 && (pokemon.hp <= pokemon.maxhp / 4 || (pokemon.hp <= pokemon.maxhp / 2 && pokemon.hasAbility('gluttony') && pokemon.abilityState.gluttony)) ) { if (pokemon.eatItem()) { this.add('-activate', pokemon, 'item: Custap Berry', '[consumed]'); return 0.1; } } }, onEat() { }, num: 210, gen: 4, }, damprock: { name: "Damp Rock", spritenum: 88, fling: { basePower: 60, }, num: 285, gen: 4, }, darkgem: { name: "Dark Gem", spritenum: 89, isGem: true, onSourceTryPrimaryHit(target, source, move) { if (target === source || move.category === 'Status') return; if (move.type === 'Dark' && source.useItem()) { source.addVolatile('gem'); } }, num: 562, gen: 5, isNonstandard: "Past", }, darkmemory: { name: "Dark Memory", spritenum: 683, onMemory: 'Dark', onTakeItem(item, pokemon, source) { if ((source && source.baseSpecies.num === 773) || pokemon.baseSpecies.num === 773) { return false; } return true; }, forcedForme: "Silvally-Dark", itemUser: ["Silvally-Dark"], num: 919, gen: 7, isNonstandard: "Past", }, darkiniumz: { name: "Darkinium Z", spritenum: 646, onPlate: 'Dark', onTakeItem: false, zMove: true, zMoveType: "Dark", forcedForme: "Arceus-Dark", num: 791, gen: 7, isNonstandard: "Past", }, dawnstone: { name: "Dawn Stone", spritenum: 92, fling: { basePower: 80, }, num: 109, gen: 4, }, decidiumz: { name: "Decidium Z", spritenum: 650, onTakeItem: false, zMove: "Sinister Arrow Raid", zMoveFrom: "Spirit Shackle", itemUser: ["Decidueye"], num: 798, gen: 7, isNonstandard: "Past", }, deepseascale: { name: "Deep Sea Scale", spritenum: 93, fling: { basePower: 30, }, onModifySpDPriority: 2, onModifySpD(spd, pokemon) { if (pokemon.baseSpecies.name === 'Clamperl') { return this.chainModify(2); } }, itemUser: ["Clamperl"], num: 227, gen: 3, isNonstandard: "Past", }, deepseatooth: { name: "Deep Sea Tooth", spritenum: 94, fling: { basePower: 90, }, onModifySpAPriority: 1, onModifySpA(spa, pokemon) { if (pokemon.baseSpecies.name === 'Clamperl') { return this.chainModify(2); } }, itemUser: ["Clamperl"], num: 226, gen: 3, isNonstandard: "Past", }, destinyknot: { name: "Destiny Knot", spritenum: 95, fling: { basePower: 10, }, onAttractPriority: -100, onAttract(target, source) { this.debug(`attract intercepted: ${target} from ${source}`); if (!source || source === target) return; if (!source.volatiles['attract']) source.addVolatile('attract', target); }, num: 280, gen: 4, }, diancite: { name: "Diancite", spritenum: 624, megaStone: "Diancie-Mega", megaEvolves: "Diancie", itemUser: ["Diancie"], onTakeItem(item, source) { if (item.megaEvolves === source.baseSpecies.baseSpecies) return false; return true; }, num: 764, gen: 6, isNonstandard: "Past", }, diveball: { name: "Dive Ball", spritenum: 101, num: 7, gen: 3, isPokeball: true, }, domefossil: { name: "Dome Fossil", spritenum: 102, fling: { basePower: 100, }, num: 102, gen: 3, isNonstandard: "Past", }, dousedrive: { name: "Douse Drive", spritenum: 103, onTakeItem(item, pokemon, source) { if ((source && source.baseSpecies.num === 649) || pokemon.baseSpecies.num === 649) { return false; } return true; }, onDrive: 'Water', forcedForme: "Genesect-Douse", itemUser: ["Genesect-Douse"], num: 116, gen: 5, isNonstandard: "Past", }, dracoplate: { name: "Draco Plate", spritenum: 105, onPlate: 'Dragon', onBasePowerPriority: 15, onBasePower(basePower, user, target, move) { if (move && move.type === 'Dragon') { return this.chainModify([4915, 4096]); } }, onTakeItem(item, pokemon, source) { if ((source && source.baseSpecies.num === 493) || pokemon.baseSpecies.num === 493) { return false; } return true; }, forcedForme: "Arceus-Dragon", num: 311, gen: 4, }, dragonfang: { name: "Dragon Fang", spritenum: 106, fling: { basePower: 70, }, onBasePowerPriority: 15, onBasePower(basePower, user, target, move) { if (move && move.type === 'Dragon') { return this.chainModify([4915, 4096]); } }, num: 250, gen: 2, }, dragongem: { name: "Dragon Gem", spritenum: 107, isGem: true, onSourceTryPrimaryHit(target, source, move) { if (target === source || move.category === 'Status') return; if (move.type === 'Dragon' && source.useItem()) { source.addVolatile('gem'); } }, num: 561, gen: 5, isNonstandard: "Past", }, dragonmemory: { name: "Dragon Memory", spritenum: 682, onMemory: 'Dragon', onTakeItem(item, pokemon, source) { if ((source && source.baseSpecies.num === 773) || pokemon.baseSpecies.num === 773) { return false; } return true; }, forcedForme: "Silvally-Dragon", itemUser: ["Silvally-Dragon"], num: 918, gen: 7, isNonstandard: "Past", }, dragonscale: { name: "Dragon Scale", spritenum: 108, fling: { basePower: 30, }, num: 235, gen: 2, }, dragoniumz: { name: "Dragonium Z", spritenum: 645, onPlate: 'Dragon', onTakeItem: false, zMove: true, zMoveType: "Dragon", forcedForme: "Arceus-Dragon", num: 790, gen: 7, isNonstandard: "Past", }, dreadplate: { name: "Dread Plate", spritenum: 110, onPlate: 'Dark', onBasePowerPriority: 15, onBasePower(basePower, user, target, move) { if (move && move.type === 'Dark') { return this.chainModify([4915, 4096]); } }, onTakeItem(item, pokemon, source) { if ((source && source.baseSpecies.num === 493) || pokemon.baseSpecies.num === 493) { return false; } return true; }, forcedForme: "Arceus-Dark", num: 312, gen: 4, }, dreamball: { name: "Dream Ball", spritenum: 111, num: 576, gen: 5, isPokeball: true, }, dubiousdisc: { name: "Dubious Disc", spritenum: 113, fling: { basePower: 50, }, num: 324, gen: 4, }, durinberry: { name: "Durin Berry", spritenum: 114, isBerry: true, naturalGift: { basePower: 100, type: "Water", }, onEat: false, num: 182, gen: 3, isNonstandard: "Past", }, duskball: { name: "Dusk Ball", spritenum: 115, num: 13, gen: 4, isPokeball: true, }, duskstone: { name: "Dusk Stone", spritenum: 116, fling: { basePower: 80, }, num: 108, gen: 4, }, earthplate: { name: "Earth Plate", spritenum: 117, onPlate: 'Ground', onBasePowerPriority: 15, onBasePower(basePower, user, target, move) { if (move && move.type === 'Ground') { return this.chainModify([4915, 4096]); } }, onTakeItem(item, pokemon, source) { if ((source && source.baseSpecies.num === 493) || pokemon.baseSpecies.num === 493) { return false; } return true; }, forcedForme: "Arceus-Ground", num: 305, gen: 4, }, eeviumz: { name: "Eevium Z", spritenum: 657, onTakeItem: false, zMove: "Extreme Evoboost", zMoveFrom: "Last Resort", itemUser: ["Eevee"], num: 805, gen: 7, isNonstandard: "Past", }, ejectbutton: { name: "Eject Button", spritenum: 118, fling: { basePower: 30, }, onAfterMoveSecondaryPriority: 2, onAfterMoveSecondary(target, source, move) { if (source && source !== target && target.hp && move && move.category !== 'Status' && !move.flags['futuremove']) { if (!this.canSwitch(target.side) || target.forceSwitchFlag || target.beingCalledBack || target.isSkyDropped()) return; if (target.volatiles['commanding'] || target.volatiles['commanded']) return; for (const pokemon of this.getAllActive()) { if (pokemon.switchFlag === true) return; } target.switchFlag = true; if (target.useItem()) { source.switchFlag = false; } else { target.switchFlag = false; } } }, num: 547, gen: 5, }, ejectpack: { name: "Eject Pack", spritenum: 714, fling: { basePower: 50, }, onAfterBoost(boost, target, source, effect) { if (this.activeMove?.id === 'partingshot') return; let eject = false; let i: BoostID; for (i in boost) { if (boost[i]! < 0) { eject = true; } } if (eject) { if (target.hp) { if (!this.canSwitch(target.side)) return; if (target.volatiles['commanding'] || target.volatiles['commanded']) return; for (const pokemon of this.getAllActive()) { if (pokemon.switchFlag === true) return; } if (target.useItem()) target.switchFlag = true; } } }, num: 1119, gen: 8, }, electirizer: { name: "Electirizer", spritenum: 119, fling: { basePower: 80, }, num: 322, gen: 4, }, electricgem: { name: "Electric Gem", spritenum: 120, isGem: true, onSourceTryPrimaryHit(target, source, move) { if (target === source || move.category === 'Status' || move.flags['pledgecombo']) return; if (move.type === 'Electric' && source.useItem()) { source.addVolatile('gem'); } }, num: 550, gen: 5, isNonstandard: "Past", }, electricmemory: { name: "Electric Memory", spritenum: 679, onMemory: 'Electric', onTakeItem(item, pokemon, source) { if ((source && source.baseSpecies.num === 773) || pokemon.baseSpecies.num === 773) { return false; } return true; }, forcedForme: "Silvally-Electric", itemUser: ["Silvally-Electric"], num: 915, gen: 7, isNonstandard: "Past", }, electricseed: { name: "Electric Seed", spritenum: 664, fling: { basePower: 10, }, onSwitchInPriority: -1, onStart(pokemon) { if (!pokemon.ignoringItem() && this.field.isTerrain('electricterrain')) { pokemon.useItem(); } }, onTerrainChange(pokemon) { if (this.field.isTerrain('electricterrain')) { pokemon.useItem(); } }, boosts: { def: 1, }, num: 881, gen: 7, }, electriumz: { name: "Electrium Z", spritenum: 634, onPlate: 'Electric', onTakeItem: false, zMove: true, zMoveType: "Electric", forcedForme: "Arceus-Electric", num: 779, gen: 7, isNonstandard: "Past", }, enigmaberry: { name: "Enigma Berry", spritenum: 124, isBerry: true, naturalGift: { basePower: 100, type: "Bug", }, onHit(target, source, move) { if (move && target.getMoveHitData(move).typeMod > 0) { if (target.eatItem()) { this.heal(target.baseMaxhp / 4); } } }, onTryEatItem(item, pokemon) { if (!this.runEvent('TryHeal', pokemon, null, this.effect, pokemon.baseMaxhp / 4)) return false; }, onEat() { }, num: 208, gen: 3, }, eviolite: { name: "Eviolite", spritenum: 130, fling: { basePower: 40, }, onModifyDefPriority: 2, onModifyDef(def, pokemon) { if (pokemon.baseSpecies.nfe) { return this.chainModify(1.5); } }, onModifySpDPriority: 2, onModifySpD(spd, pokemon) { if (pokemon.baseSpecies.nfe) { return this.chainModify(1.5); } }, num: 538, gen: 5, }, expertbelt: { name: "Expert Belt", spritenum: 132, fling: { basePower: 10, }, onModifyDamage(damage, source, target, move) { if (move && target.getMoveHitData(move).typeMod > 0) { return this.chainModify([4915, 4096]); } }, num: 268, gen: 4, }, fairiumz: { name: "Fairium Z", spritenum: 648, onPlate: 'Fairy', onTakeItem: false, zMove: true, zMoveType: "Fairy", forcedForme: "Arceus-Fairy", num: 793, gen: 7, isNonstandard: "Past", }, fairyfeather: { name: "Fairy Feather", spritenum: 754, fling: { basePower: 10, }, onBasePowerPriority: 15, onBasePower(basePower, user, target, move) { if (move && move.type === 'Fairy') { return this.chainModify([4915, 4096]); } }, num: 2401, gen: 9, }, fairygem: { name: "Fairy Gem", spritenum: 611, isGem: true, onSourceTryPrimaryHit(target, source, move) { if (target === source || move.category === 'Status') return; if (move.type === 'Fairy' && source.useItem()) { source.addVolatile('gem'); } }, num: 715, gen: 6, isNonstandard: "Past", }, fairymemory: { name: "Fairy Memory", spritenum: 684, onMemory: 'Fairy', onTakeItem(item, pokemon, source) { if ((source && source.baseSpecies.num === 773) || pokemon.baseSpecies.num === 773) { return false; } return true; }, forcedForme: "Silvally-Fairy", itemUser: ["Silvally-Fairy"], num: 920, gen: 7, isNonstandard: "Past", }, fastball: { name: "Fast Ball", spritenum: 137, num: 492, gen: 2, isPokeball: true, }, fightinggem: { name: "Fighting Gem", spritenum: 139, isGem: true, onSourceTryPrimaryHit(target, source, move) { if (target === source || move.category === 'Status') return; if (move.type === 'Fighting' && source.useItem()) { source.addVolatile('gem'); } }, num: 553, gen: 5, isNonstandard: "Past", }, fightingmemory: { name: "Fighting Memory", spritenum: 668, onMemory: 'Fighting', onTakeItem(item, pokemon, source) { if ((source && source.baseSpecies.num === 773) || pokemon.baseSpecies.num === 773) { return false; } return true; }, forcedForme: "Silvally-Fighting", itemUser: ["Silvally-Fighting"], num: 904, gen: 7, isNonstandard: "Past", }, fightiniumz: { name: "Fightinium Z", spritenum: 637, onPlate: 'Fighting', onTakeItem: false, zMove: true, zMoveType: "Fighting", forcedForme: "Arceus-Fighting", num: 782, gen: 7, isNonstandard: "Past", }, figyberry: { name: "Figy Berry", spritenum: 140, isBerry: true, naturalGift: { basePower: 80, type: "Bug", }, onUpdate(pokemon) { if (pokemon.hp <= pokemon.maxhp / 4 || (pokemon.hp <= pokemon.maxhp / 2 && pokemon.hasAbility('gluttony') && pokemon.abilityState.gluttony)) { pokemon.eatItem(); } }, onTryEatItem(item, pokemon) { if (!this.runEvent('TryHeal', pokemon, null, this.effect, pokemon.baseMaxhp / 3)) return false; }, onEat(pokemon) { this.heal(pokemon.baseMaxhp / 3); if (pokemon.getNature().minus === 'atk') { pokemon.addVolatile('confusion'); } }, num: 159, gen: 3, }, firegem: { name: "Fire Gem", spritenum: 141, isGem: true, onSourceTryPrimaryHit(target, source, move) { if (target === source || move.category === 'Status' || move.flags['pledgecombo']) return; if (move.type === 'Fire' && source.useItem()) { source.addVolatile('gem'); } }, num: 548, gen: 5, isNonstandard: "Past", }, firememory: { name: "Fire Memory", spritenum: 676, onMemory: 'Fire', onTakeItem(item, pokemon, source) { if ((source && source.baseSpecies.num === 773) || pokemon.baseSpecies.num === 773) { return false; } return true; }, forcedForme: "Silvally-Fire", itemUser: ["Silvally-Fire"], num: 912, gen: 7, isNonstandard: "Past", }, firestone: { name: "Fire Stone", spritenum: 142, fling: { basePower: 30, }, num: 82, gen: 1, }, firiumz: { name: "Firium Z", spritenum: 632, onPlate: 'Fire', onTakeItem: false, zMove: true, zMoveType: "Fire", forcedForme: "Arceus-Fire", num: 777, gen: 7, isNonstandard: "Past", }, fistplate: { name: "Fist Plate", spritenum: 143, onPlate: 'Fighting', onBasePowerPriority: 15, onBasePower(basePower, user, target, move) { if (move && move.type === 'Fighting') { return this.chainModify([4915, 4096]); } }, onTakeItem(item, pokemon, source) { if ((source && source.baseSpecies.num === 493) || pokemon.baseSpecies.num === 493) { return false; } return true; }, forcedForme: "Arceus-Fighting", num: 303, gen: 4, }, flameorb: { name: "Flame Orb", spritenum: 145, fling: { basePower: 30, status: 'brn', }, onResidualOrder: 28, onResidualSubOrder: 3, onResidual(pokemon) { pokemon.trySetStatus('brn', pokemon); }, num: 273, gen: 4, }, flameplate: { name: "Flame Plate", spritenum: 146, onPlate: 'Fire', onBasePowerPriority: 15, onBasePower(basePower, user, target, move) { if (move && move.type === 'Fire') { return this.chainModify([4915, 4096]); } }, onTakeItem(item, pokemon, source) { if ((source && source.baseSpecies.num === 493) || pokemon.baseSpecies.num === 493) { return false; } return true; }, forcedForme: "Arceus-Fire", num: 298, gen: 4, }, floatstone: { name: "Float Stone", spritenum: 147, fling: { basePower: 30, }, onModifyWeight(weighthg) { return this.trunc(weighthg / 2); }, num: 539, gen: 5, }, flowersweet: { name: "Flower Sweet", spritenum: 708, fling: { basePower: 0, }, num: 1113, gen: 8, }, flyinggem: { name: "Flying Gem", spritenum: 149, isGem: true, onSourceTryPrimaryHit(target, source, move) { if (target === source || move.category === 'Status') return; if (move.type === 'Flying' && source.useItem()) { source.addVolatile('gem'); } }, num: 556, gen: 5, isNonstandard: "Past", }, flyingmemory: { name: "Flying Memory", spritenum: 669, onMemory: 'Flying', onTakeItem(item, pokemon, source) { if ((source && source.baseSpecies.num === 773) || pokemon.baseSpecies.num === 773) { return false; } return true; }, forcedForme: "Silvally-Flying", itemUser: ["Silvally-Flying"], num: 905, gen: 7, isNonstandard: "Past", }, flyiniumz: { name: "Flyinium Z", spritenum: 640, onPlate: 'Flying', onTakeItem: false, zMove: true, zMoveType: "Flying", forcedForme: "Arceus-Flying", num: 785, gen: 7, isNonstandard: "Past", }, focusband: { name: "Focus Band", spritenum: 150, fling: { basePower: 10, }, onDamagePriority: -40, onDamage(damage, target, source, effect) { if (this.randomChance(1, 10) && damage >= target.hp && effect && effect.effectType === 'Move') { this.add("-activate", target, "item: Focus Band"); return target.hp - 1; } }, num: 230, gen: 2, }, focussash: { name: "Focus Sash", spritenum: 151, fling: { basePower: 10, }, onDamagePriority: -40, onDamage(damage, target, source, effect) { if (target.hp === target.maxhp && damage >= target.hp && effect && effect.effectType === 'Move') { if (target.useItem()) { return target.hp - 1; } } }, num: 275, gen: 4, }, fossilizedbird: { name: "Fossilized Bird", spritenum: 700, fling: { basePower: 100, }, num: 1105, gen: 8, isNonstandard: "Past", }, fossilizeddino: { name: "Fossilized Dino", spritenum: 703, fling: { basePower: 100, }, num: 1108, gen: 8, isNonstandard: "Past", }, fossilizeddrake: { name: "Fossilized Drake", spritenum: 702, fling: { basePower: 100, }, num: 1107, gen: 8, isNonstandard: "Past", }, fossilizedfish: { name: "Fossilized Fish", spritenum: 701, fling: { basePower: 100, }, num: 1106, gen: 8, isNonstandard: "Past", }, friendball: { name: "Friend Ball", spritenum: 153, num: 497, gen: 2, isPokeball: true, }, fullincense: { name: "Full Incense", spritenum: 155, fling: { basePower: 10, }, onFractionalPriority: -0.1, num: 316, gen: 4, isNonstandard: "Past", }, galaricacuff: { name: "Galarica Cuff", spritenum: 739, fling: { basePower: 30, }, num: 1582, gen: 8, }, galaricawreath: { name: "Galarica Wreath", spritenum: 740, fling: { basePower: 30, }, num: 1592, gen: 8, }, galladite: { name: "Galladite", spritenum: 616, megaStone: "Gallade-Mega", megaEvolves: "Gallade", itemUser: ["Gallade"], onTakeItem(item, source) { if (item.megaEvolves === source.baseSpecies.baseSpecies) return false; return true; }, num: 756, gen: 6, isNonstandard: "Past", }, ganlonberry: { name: "Ganlon Berry", spritenum: 158, isBerry: true, naturalGift: { basePower: 100, type: "Ice", }, onUpdate(pokemon) { if (pokemon.hp <= pokemon.maxhp / 4 || (pokemon.hp <= pokemon.maxhp / 2 && pokemon.hasAbility('gluttony') && pokemon.abilityState.gluttony)) { pokemon.eatItem(); } }, onEat(pokemon) { this.boost({ def: 1 }); }, num: 202, gen: 3, }, garchompite: { name: "Garchompite", spritenum: 589, megaStone: "Garchomp-Mega", megaEvolves: "Garchomp", itemUser: ["Garchomp"], onTakeItem(item, source) { if (item.megaEvolves === source.baseSpecies.baseSpecies) return false; return true; }, num: 683, gen: 6, isNonstandard: "Past", }, gardevoirite: { name: "Gardevoirite", spritenum: 587, megaStone: "Gardevoir-Mega", megaEvolves: "Gardevoir", itemUser: ["Gardevoir"], onTakeItem(item, source) { if (item.megaEvolves === source.baseSpecies.baseSpecies) return false; return true; }, num: 657, gen: 6, isNonstandard: "Past", }, gengarite: { name: "Gengarite", spritenum: 588, megaStone: "Gengar-Mega", megaEvolves: "Gengar", itemUser: ["Gengar"], onTakeItem(item, source) { if (item.megaEvolves === source.baseSpecies.baseSpecies) return false; return true; }, num: 656, gen: 6, isNonstandard: "Past", }, ghostgem: { name: "Ghost Gem", spritenum: 161, isGem: true, onSourceTryPrimaryHit(target, source, move) { if (target === source || move.category === 'Status') return; if (move.type === 'Ghost' && source.useItem()) { source.addVolatile('gem'); } }, num: 560, gen: 5, isNonstandard: "Past", }, ghostmemory: { name: "Ghost Memory", spritenum: 674, onMemory: 'Ghost', onTakeItem(item, pokemon, source) { if ((source && source.baseSpecies.num === 773) || pokemon.baseSpecies.num === 773) { return false; } return true; }, forcedForme: "Silvally-Ghost", itemUser: ["Silvally-Ghost"], num: 910, gen: 7, isNonstandard: "Past", }, ghostiumz: { name: "Ghostium Z", spritenum: 644, onPlate: 'Ghost', onTakeItem: false, zMove: true, zMoveType: "Ghost", forcedForme: "Arceus-Ghost", num: 789, gen: 7, isNonstandard: "Past", }, glalitite: { name: "Glalitite", spritenum: 623, megaStone: "Glalie-Mega", megaEvolves: "Glalie", itemUser: ["Glalie"], onTakeItem(item, source) { if (item.megaEvolves === source.baseSpecies.baseSpecies) return false; return true; }, num: 763, gen: 6, isNonstandard: "Past", }, goldbottlecap: { name: "Gold Bottle Cap", spritenum: 697, fling: { basePower: 30, }, num: 796, gen: 7, }, grassgem: { name: "Grass Gem", spritenum: 172, isGem: true, onSourceTryPrimaryHit(target, source, move) { if (target === source || move.category === 'Status' || move.flags['pledgecombo']) return; if (move.type === 'Grass' && source.useItem()) { source.addVolatile('gem'); } }, num: 551, gen: 5, isNonstandard: "Past", }, grassmemory: { name: "Grass Memory", spritenum: 678, onMemory: 'Grass', onTakeItem(item, pokemon, source) { if ((source && source.baseSpecies.num === 773) || pokemon.baseSpecies.num === 773) { return false; } return true; }, forcedForme: "Silvally-Grass", itemUser: ["Silvally-Grass"], num: 914, gen: 7, isNonstandard: "Past", }, grassiumz: { name: "Grassium Z", spritenum: 635, onPlate: 'Grass', onTakeItem: false, zMove: true, zMoveType: "Grass", forcedForme: "Arceus-Grass", num: 780, gen: 7, isNonstandard: "Past", }, grassyseed: { name: "Grassy Seed", spritenum: 667, fling: { basePower: 10, }, onSwitchInPriority: -1, onStart(pokemon) { if (!pokemon.ignoringItem() && this.field.isTerrain('grassyterrain')) { pokemon.useItem(); } }, onTerrainChange(pokemon) { if (this.field.isTerrain('grassyterrain')) { pokemon.useItem(); } }, boosts: { def: 1, }, num: 884, gen: 7, }, greatball: { name: "Great Ball", spritenum: 174, num: 3, gen: 1, isPokeball: true, }, grepaberry: { name: "Grepa Berry", spritenum: 178, isBerry: true, naturalGift: { basePower: 90, type: "Flying", }, onEat: false, num: 173, gen: 3, }, gripclaw: { name: "Grip Claw", spritenum: 179, fling: { basePower: 90, }, // implemented in statuses num: 286, gen: 4, }, griseouscore: { name: "Griseous Core", spritenum: 743, onBasePowerPriority: 15, onBasePower(basePower, user, target, move) { if (user.baseSpecies.num === 487 && (move.type === 'Ghost' || move.type === 'Dragon')) { return this.chainModify([4915, 4096]); } }, onTakeItem(item, pokemon, source) { if (source?.baseSpecies.num === 487 || pokemon.baseSpecies.num === 487) { return false; } return true; }, forcedForme: "Giratina-Origin", itemUser: ["Giratina-Origin"], num: 1779, gen: 8, }, griseousorb: { name: "Griseous Orb", spritenum: 180, fling: { basePower: 60, }, onBasePowerPriority: 15, onBasePower(basePower, user, target, move) { if (user.baseSpecies.num === 487 && (move.type === 'Ghost' || move.type === 'Dragon')) { return this.chainModify([4915, 4096]); } }, itemUser: ["Giratina"], num: 112, gen: 4, }, groundgem: { name: "Ground Gem", spritenum: 182, isGem: true, onSourceTryPrimaryHit(target, source, move) { if (target === source || move.category === 'Status') return; if (move.type === 'Ground' && source.useItem()) { source.addVolatile('gem'); } }, num: 555, gen: 5, isNonstandard: "Past", }, groundmemory: { name: "Ground Memory", spritenum: 671, onMemory: 'Ground', onTakeItem(item, pokemon, source) { if ((source && source.baseSpecies.num === 773) || pokemon.baseSpecies.num === 773) { return false; } return true; }, forcedForme: "Silvally-Ground", itemUser: ["Silvally-Ground"], num: 907, gen: 7, isNonstandard: "Past", }, groundiumz: { name: "Groundium Z", spritenum: 639, onPlate: 'Ground', onTakeItem: false, zMove: true, zMoveType: "Ground", forcedForme: "Arceus-Ground", num: 784, gen: 7, isNonstandard: "Past", }, gyaradosite: { name: "Gyaradosite", spritenum: 589, megaStone: "Gyarados-Mega", megaEvolves: "Gyarados", itemUser: ["Gyarados"], onTakeItem(item, source) { if (item.megaEvolves === source.baseSpecies.baseSpecies) return false; return true; }, num: 676, gen: 6, isNonstandard: "Past", }, habanberry: { name: "Haban Berry", spritenum: 185, isBerry: true, naturalGift: { basePower: 80, type: "Dragon", }, onSourceModifyDamage(damage, source, target, move) { if (move.type === 'Dragon' && target.getMoveHitData(move).typeMod > 0) { const hitSub = target.volatiles['substitute'] && !move.flags['bypasssub'] && !(move.infiltrates && this.gen >= 6); if (hitSub) return; if (target.eatItem()) { this.debug('-50% reduction'); this.add('-enditem', target, this.effect, '[weaken]'); return this.chainModify(0.5); } } }, onEat() { }, num: 197, gen: 4, }, hardstone: { name: "Hard Stone", spritenum: 187, fling: { basePower: 100, }, onBasePowerPriority: 15, onBasePower(basePower, user, target, move) { if (move && move.type === 'Rock') { return this.chainModify([4915, 4096]); } }, num: 238, gen: 2, }, healball: { name: "Heal Ball", spritenum: 188, num: 14, gen: 4, isPokeball: true, }, hearthflamemask: { name: "Hearthflame Mask", spritenum: 760, fling: { basePower: 60, }, onBasePowerPriority: 15, onBasePower(basePower, user, target, move) { if (user.baseSpecies.name.startsWith('Ogerpon-Hearthflame')) { return this.chainModify([4915, 4096]); } }, onTakeItem(item, source) { if (source.baseSpecies.baseSpecies === 'Ogerpon') return false; return true; }, forcedForme: "Ogerpon-Hearthflame", itemUser: ["Ogerpon-Hearthflame"], num: 2408, gen: 9, }, heatrock: { name: "Heat Rock", spritenum: 193, fling: { basePower: 60, }, num: 284, gen: 4, }, heavyball: { name: "Heavy Ball", spritenum: 194, num: 495, gen: 2, isPokeball: true, }, heavydutyboots: { name: "Heavy-Duty Boots", spritenum: 715, fling: { basePower: 80, }, num: 1120, gen: 8, // Hazard Immunity implemented in moves.ts }, helixfossil: { name: "Helix Fossil", spritenum: 195, fling: { basePower: 100, }, num: 101, gen: 3, isNonstandard: "Past", }, heracronite: { name: "Heracronite", spritenum: 590, megaStone: "Heracross-Mega", megaEvolves: "Heracross", itemUser: ["Heracross"], onTakeItem(item, source) { if (item.megaEvolves === source.baseSpecies.baseSpecies) return false; return true; }, num: 680, gen: 6, isNonstandard: "Past", }, hondewberry: { name: "Hondew Berry", spritenum: 213, isBerry: true, naturalGift: { basePower: 90, type: "Ground", }, onEat: false, num: 172, gen: 3, }, houndoominite: { name: "Houndoominite", spritenum: 591, megaStone: "Houndoom-Mega", megaEvolves: "Houndoom", itemUser: ["Houndoom"], onTakeItem(item, source) { if (item.megaEvolves === source.baseSpecies.baseSpecies) return false; return true; }, num: 666, gen: 6, isNonstandard: "Past", }, iapapaberry: { name: "Iapapa Berry", spritenum: 217, isBerry: true, naturalGift: { basePower: 80, type: "Dark", }, onUpdate(pokemon) { if (pokemon.hp <= pokemon.maxhp / 4 || (pokemon.hp <= pokemon.maxhp / 2 && pokemon.hasAbility('gluttony') && pokemon.abilityState.gluttony)) { pokemon.eatItem(); } }, onTryEatItem(item, pokemon) { if (!this.runEvent('TryHeal', pokemon, null, this.effect, pokemon.baseMaxhp / 3)) return false; }, onEat(pokemon) { this.heal(pokemon.baseMaxhp / 3); if (pokemon.getNature().minus === 'def') { pokemon.addVolatile('confusion'); } }, num: 163, gen: 3, }, icegem: { name: "Ice Gem", spritenum: 218, isGem: true, onSourceTryPrimaryHit(target, source, move) { if (target === source || move.category === 'Status') return; if (move.type === 'Ice' && source.useItem()) { source.addVolatile('gem'); } }, num: 552, gen: 5, isNonstandard: "Past", }, icememory: { name: "Ice Memory", spritenum: 681, onMemory: 'Ice', onTakeItem(item, pokemon, source) { if ((source && source.baseSpecies.num === 773) || pokemon.baseSpecies.num === 773) { return false; } return true; }, forcedForme: "Silvally-Ice", itemUser: ["Silvally-Ice"], num: 917, gen: 7, isNonstandard: "Past", }, icestone: { name: "Ice Stone", spritenum: 693, fling: { basePower: 30, }, num: 849, gen: 7, }, icicleplate: { name: "Icicle Plate", spritenum: 220, onPlate: 'Ice', onBasePowerPriority: 15, onBasePower(basePower, user, target, move) { if (move.type === 'Ice') { return this.chainModify([4915, 4096]); } }, onTakeItem(item, pokemon, source) { if ((source && source.baseSpecies.num === 493) || pokemon.baseSpecies.num === 493) { return false; } return true; }, forcedForme: "Arceus-Ice", num: 302, gen: 4, }, iciumz: { name: "Icium Z", spritenum: 636, onPlate: 'Ice', onTakeItem: false, zMove: true, zMoveType: "Ice", forcedForme: "Arceus-Ice", num: 781, gen: 7, isNonstandard: "Past", }, icyrock: { name: "Icy Rock", spritenum: 221, fling: { basePower: 40, }, num: 282, gen: 4, }, inciniumz: { name: "Incinium Z", spritenum: 651, onTakeItem: false, zMove: "Malicious Moonsault", zMoveFrom: "Darkest Lariat", itemUser: ["Incineroar"], num: 799, gen: 7, isNonstandard: "Past", }, insectplate: { name: "Insect Plate", spritenum: 223, onPlate: 'Bug', onBasePowerPriority: 15, onBasePower(basePower, user, target, move) { if (move.type === 'Bug') { return this.chainModify([4915, 4096]); } }, onTakeItem(item, pokemon, source) { if ((source && source.baseSpecies.num === 493) || pokemon.baseSpecies.num === 493) { return false; } return true; }, forcedForme: "Arceus-Bug", num: 308, gen: 4, }, ironball: { name: "Iron Ball", spritenum: 224, fling: { basePower: 130, }, onEffectiveness(typeMod, target, type, move) { if (!target) return; if (target.volatiles['ingrain'] || target.volatiles['smackdown'] || this.field.getPseudoWeather('gravity')) return; if (move.type === 'Ground' && target.hasType('Flying')) return 0; }, // airborneness negation implemented in sim/pokemon.js:Pokemon#isGrounded onModifySpe(spe) { return this.chainModify(0.5); }, num: 278, gen: 4, }, ironplate: { name: "Iron Plate", spritenum: 225, onPlate: 'Steel', onBasePowerPriority: 15, onBasePower(basePower, user, target, move) { if (move.type === 'Steel') { return this.chainModify([4915, 4096]); } }, onTakeItem(item, pokemon, source) { if ((source && source.baseSpecies.num === 493) || pokemon.baseSpecies.num === 493) { return false; } return true; }, forcedForme: "Arceus-Steel", num: 313, gen: 4, }, jabocaberry: { name: "Jaboca Berry", spritenum: 230, isBerry: true, naturalGift: { basePower: 100, type: "Dragon", }, onDamagingHit(damage, target, source, move) { if (move.category === 'Physical' && source.hp && source.isActive && !source.hasAbility('magicguard')) { if (target.eatItem()) { this.damage(source.baseMaxhp / (target.hasAbility('ripen') ? 4 : 8), source, target); } } }, onEat() { }, num: 211, gen: 4, }, jawfossil: { name: "Jaw Fossil", spritenum: 694, fling: { basePower: 100, }, num: 710, gen: 6, isNonstandard: "Past", }, kasibberry: { name: "Kasib Berry", spritenum: 233, isBerry: true, naturalGift: { basePower: 80, type: "Ghost", }, onSourceModifyDamage(damage, source, target, move) { if (move.type === 'Ghost' && target.getMoveHitData(move).typeMod > 0) { const hitSub = target.volatiles['substitute'] && !move.flags['bypasssub'] && !(move.infiltrates && this.gen >= 6); if (hitSub) return; if (target.eatItem()) { this.debug('-50% reduction'); this.add('-enditem', target, this.effect, '[weaken]'); return this.chainModify(0.5); } } }, onEat() { }, num: 196, gen: 4, }, kebiaberry: { name: "Kebia Berry", spritenum: 234, isBerry: true, naturalGift: { basePower: 80, type: "Poison", }, onSourceModifyDamage(damage, source, target, move) { if (move.type === 'Poison' && target.getMoveHitData(move).typeMod > 0) { const hitSub = target.volatiles['substitute'] && !move.flags['bypasssub'] && !(move.infiltrates && this.gen >= 6); if (hitSub) return; if (target.eatItem()) { this.debug('-50% reduction'); this.add('-enditem', target, this.effect, '[weaken]'); return this.chainModify(0.5); } } }, onEat() { }, num: 190, gen: 4, }, keeberry: { name: "Kee Berry", spritenum: 593, isBerry: true, naturalGift: { basePower: 100, type: "Fairy", }, onAfterMoveSecondary(target, source, move) { if (move.category === 'Physical') { if (move.id === 'present' && move.heal) return; target.eatItem(); } }, onEat(pokemon) { this.boost({ def: 1 }); }, num: 687, gen: 6, }, kelpsyberry: { name: "Kelpsy Berry", spritenum: 235, isBerry: true, naturalGift: { basePower: 90, type: "Fighting", }, onEat: false, num: 170, gen: 3, }, kangaskhanite: { name: "Kangaskhanite", spritenum: 592, megaStone: "Kangaskhan-Mega", megaEvolves: "Kangaskhan", itemUser: ["Kangaskhan"], onTakeItem(item, source) { if (item.megaEvolves === source.baseSpecies.baseSpecies) return false; return true; }, num: 675, gen: 6, isNonstandard: "Past", }, kingsrock: { name: "King's Rock", spritenum: 236, fling: { basePower: 30, volatileStatus: 'flinch', }, onModifyMovePriority: -1, onModifyMove(move) { if (move.category !== "Status") { if (!move.secondaries) move.secondaries = []; for (const secondary of move.secondaries) { if (secondary.volatileStatus === 'flinch') return; } move.secondaries.push({ chance: 10, volatileStatus: 'flinch', }); } }, num: 221, gen: 2, }, kommoniumz: { name: "Kommonium Z", spritenum: 690, onTakeItem: false, zMove: "Clangorous Soulblaze", zMoveFrom: "Clanging Scales", itemUser: ["Kommo-o", "Kommo-o-Totem"], num: 926, gen: 7, isNonstandard: "Past", }, laggingtail: { name: "Lagging Tail", spritenum: 237, fling: { basePower: 10, }, onFractionalPriority: -0.1, num: 279, gen: 4, }, lansatberry: { name: "Lansat Berry", spritenum: 238, isBerry: true, naturalGift: { basePower: 100, type: "Flying", }, onUpdate(pokemon) { if (pokemon.hp <= pokemon.maxhp / 4 || (pokemon.hp <= pokemon.maxhp / 2 && pokemon.hasAbility('gluttony') && pokemon.abilityState.gluttony)) { pokemon.eatItem(); } }, onEat(pokemon) { pokemon.addVolatile('focusenergy'); }, num: 206, gen: 3, }, latiasite: { name: "Latiasite", spritenum: 629, megaStone: "Latias-Mega", megaEvolves: "Latias", itemUser: ["Latias"], onTakeItem(item, source) { if (item.megaEvolves === source.baseSpecies.baseSpecies) return false; return true; }, num: 684, gen: 6, isNonstandard: "Past", }, latiosite: { name: "Latiosite", spritenum: 630, megaStone: "Latios-Mega", megaEvolves: "Latios", itemUser: ["Latios"], onTakeItem(item, source) { if (item.megaEvolves === source.baseSpecies.baseSpecies) return false; return true; }, num: 685, gen: 6, isNonstandard: "Past", }, laxincense: { name: "Lax Incense", spritenum: 240, fling: { basePower: 10, }, onModifyAccuracyPriority: -2, onModifyAccuracy(accuracy) { if (typeof accuracy !== 'number') return; this.debug('lax incense - decreasing accuracy'); return this.chainModify([3686, 4096]); }, num: 255, gen: 3, isNonstandard: "Past", }, leafstone: { name: "Leaf Stone", spritenum: 241, fling: { basePower: 30, }, num: 85, gen: 1, }, leek: { name: "Leek", fling: { basePower: 60, }, spritenum: 475, onModifyCritRatio(critRatio, user) { if (["farfetchd", "sirfetchd"].includes(this.toID(user.baseSpecies.baseSpecies))) { return critRatio + 2; } }, itemUser: ["Farfetch\u2019d", "Farfetch\u2019d-Galar", "Sirfetch\u2019d"], num: 259, gen: 8, isNonstandard: "Past", }, leftovers: { name: "Leftovers", spritenum: 242, fling: { basePower: 10, }, onResidualOrder: 5, onResidualSubOrder: 4, onResidual(pokemon) { this.heal(pokemon.baseMaxhp / 16); }, num: 234, gen: 2, }, leppaberry: { name: "Leppa Berry", spritenum: 244, isBerry: true, naturalGift: { basePower: 80, type: "Fighting", }, onUpdate(pokemon) { if (!pokemon.hp) return; if (pokemon.moveSlots.some(move => move.pp === 0)) { pokemon.eatItem(); } }, onEat(pokemon) { const moveSlot = pokemon.moveSlots.find(move => move.pp === 0) || pokemon.moveSlots.find(move => move.pp < move.maxpp); if (!moveSlot) return; moveSlot.pp += 10; if (moveSlot.pp > moveSlot.maxpp) moveSlot.pp = moveSlot.maxpp; this.add('-activate', pokemon, 'item: Leppa Berry', moveSlot.move, '[consumed]'); }, num: 154, gen: 3, }, levelball: { name: "Level Ball", spritenum: 246, num: 493, gen: 2, isPokeball: true, }, liechiberry: { name: "Liechi Berry", spritenum: 248, isBerry: true, naturalGift: { basePower: 100, type: "Grass", }, onUpdate(pokemon) { if (pokemon.hp <= pokemon.maxhp / 4 || (pokemon.hp <= pokemon.maxhp / 2 && pokemon.hasAbility('gluttony') && pokemon.abilityState.gluttony)) { pokemon.eatItem(); } }, onEat(pokemon) { this.boost({ atk: 1 }); }, num: 201, gen: 3, }, lifeorb: { name: "Life Orb", spritenum: 249, fling: { basePower: 30, }, onModifyDamage(damage, source, target, move) { return this.chainModify([5324, 4096]); }, onAfterMoveSecondarySelf(source, target, move) { if (source && source !== target && move && move.category !== 'Status' && !source.forceSwitchFlag) { this.damage(source.baseMaxhp / 10, source, source, this.dex.items.get('lifeorb')); } }, num: 270, gen: 4, }, lightball: { name: "Light Ball", spritenum: 251, fling: { basePower: 30, status: 'par', }, onModifyAtkPriority: 1, onModifyAtk(atk, pokemon) { if (pokemon.baseSpecies.baseSpecies === 'Pikachu') { return this.chainModify(2); } }, onModifySpAPriority: 1, onModifySpA(spa, pokemon) { if (pokemon.baseSpecies.baseSpecies === 'Pikachu') { return this.chainModify(2); } }, itemUser: ["Pikachu", "Pikachu-Cosplay", "Pikachu-Rock-Star", "Pikachu-Belle", "Pikachu-Pop-Star", "Pikachu-PhD", "Pikachu-Libre", "Pikachu-Original", "Pikachu-Hoenn", "Pikachu-Sinnoh", "Pikachu-Unova", "Pikachu-Kalos", "Pikachu-Alola", "Pikachu-Partner", "Pikachu-Starter", "Pikachu-World"], num: 236, gen: 2, }, lightclay: { name: "Light Clay", spritenum: 252, fling: { basePower: 30, }, // implemented in the corresponding thing num: 269, gen: 4, }, loadeddice: { name: "Loaded Dice", spritenum: 751, fling: { basePower: 30, }, // partially implemented in sim/battle-actions.ts:BattleActions#hitStepMoveHitLoop onModifyMove(move) { if (move.multiaccuracy) { delete move.multiaccuracy; } }, num: 1886, gen: 9, }, lopunnite: { name: "Lopunnite", spritenum: 626, megaStone: "Lopunny-Mega", megaEvolves: "Lopunny", itemUser: ["Lopunny"], onTakeItem(item, source) { if (item.megaEvolves === source.baseSpecies.baseSpecies) return false; return true; }, num: 768, gen: 6, isNonstandard: "Past", }, loveball: { name: "Love Ball", spritenum: 258, num: 496, gen: 2, isPokeball: true, }, lovesweet: { name: "Love Sweet", spritenum: 705, fling: { basePower: 10, }, num: 1110, gen: 8, }, lucarionite: { name: "Lucarionite", spritenum: 594, megaStone: "Lucario-Mega", megaEvolves: "Lucario", itemUser: ["Lucario"], onTakeItem(item, source) { if (item.megaEvolves === source.baseSpecies.baseSpecies) return false; return true; }, num: 673, gen: 6, isNonstandard: "Past", }, luckypunch: { name: "Lucky Punch", spritenum: 261, fling: { basePower: 40, }, onModifyCritRatio(critRatio, user) { if (user.baseSpecies.name === 'Chansey') { return critRatio + 2; } }, itemUser: ["Chansey"], num: 256, gen: 2, isNonstandard: "Past", }, lumberry: { name: "Lum Berry", spritenum: 262, isBerry: true, naturalGift: { basePower: 80, type: "Flying", }, onAfterSetStatusPriority: -1, onAfterSetStatus(status, pokemon) { pokemon.eatItem(); }, onUpdate(pokemon) { if (pokemon.status || pokemon.volatiles['confusion']) { pokemon.eatItem(); } }, onEat(pokemon) { pokemon.cureStatus(); pokemon.removeVolatile('confusion'); }, num: 157, gen: 3, }, luminousmoss: { name: "Luminous Moss", spritenum: 595, fling: { basePower: 30, }, onDamagingHit(damage, target, source, move) { if (move.type === 'Water') { target.useItem(); } }, boosts: { spd: 1, }, num: 648, gen: 6, }, lunaliumz: { name: "Lunalium Z", spritenum: 686, onTakeItem: false, zMove: "Menacing Moonraze Maelstrom", zMoveFrom: "Moongeist Beam", itemUser: ["Lunala", "Necrozma-Dawn-Wings"], num: 922, gen: 7, isNonstandard: "Past", }, lureball: { name: "Lure Ball", spritenum: 264, num: 494, gen: 2, isPokeball: true, }, lustrousglobe: { name: "Lustrous Globe", spritenum: 742, onBasePowerPriority: 15, onBasePower(basePower, user, target, move) { if (user.baseSpecies.num === 484 && (move.type === 'Water' || move.type === 'Dragon')) { return this.chainModify([4915, 4096]); } }, onTakeItem(item, pokemon, source) { if (source?.baseSpecies.num === 484 || pokemon.baseSpecies.num === 484) { return false; } return true; }, forcedForme: "Palkia-Origin", itemUser: ["Palkia-Origin"], num: 1778, gen: 8, }, lustrousorb: { name: "Lustrous Orb", spritenum: 265, fling: { basePower: 60, }, onBasePowerPriority: 15, onBasePower(basePower, user, target, move) { if (user.baseSpecies.num === 484 && (move.type === 'Water' || move.type === 'Dragon')) { return this.chainModify([4915, 4096]); } }, itemUser: ["Palkia"], num: 136, gen: 4, }, luxuryball: { name: "Luxury Ball", spritenum: 266, num: 11, gen: 3, isPokeball: true, }, lycaniumz: { name: "Lycanium Z", spritenum: 689, onTakeItem: false, zMove: "Splintered Stormshards", zMoveFrom: "Stone Edge", itemUser: ["Lycanroc", "Lycanroc-Midnight", "Lycanroc-Dusk"], num: 925, gen: 7, isNonstandard: "Past", }, machobrace: { name: "Macho Brace", spritenum: 269, ignoreKlutz: true, fling: { basePower: 60, }, onModifySpe(spe) { return this.chainModify(0.5); }, num: 215, gen: 3, isNonstandard: "Past", }, magmarizer: { name: "Magmarizer", spritenum: 272, fling: { basePower: 80, }, num: 323, gen: 4, }, magnet: { name: "Magnet", spritenum: 273, fling: { basePower: 30, }, onBasePowerPriority: 15, onBasePower(basePower, user, target, move) { if (move.type === 'Electric') { return this.chainModify([4915, 4096]); } }, num: 242, gen: 2, }, magoberry: { name: "Mago Berry", spritenum: 274, isBerry: true, naturalGift: { basePower: 80, type: "Ghost", }, onUpdate(pokemon) { if (pokemon.hp <= pokemon.maxhp / 4 || (pokemon.hp <= pokemon.maxhp / 2 && pokemon.hasAbility('gluttony') && pokemon.abilityState.gluttony)) { pokemon.eatItem(); } }, onTryEatItem(item, pokemon) { if (!this.runEvent('TryHeal', pokemon, null, this.effect, pokemon.baseMaxhp / 3)) return false; }, onEat(pokemon) { this.heal(pokemon.baseMaxhp / 3); if (pokemon.getNature().minus === 'spe') { pokemon.addVolatile('confusion'); } }, num: 161, gen: 3, }, magostberry: { name: "Magost Berry", spritenum: 275, isBerry: true, naturalGift: { basePower: 90, type: "Rock", }, onEat: false, num: 176, gen: 3, isNonstandard: "Past", }, mail: { name: "Mail", spritenum: 403, onTakeItem(item, source) { if (!this.activeMove) return false; if (this.activeMove.id !== 'knockoff' && this.activeMove.id !== 'thief' && this.activeMove.id !== 'covet') return false; }, num: 137, gen: 2, isNonstandard: "Past", }, maliciousarmor: { name: "Malicious Armor", spritenum: 744, fling: { basePower: 30, }, num: 1861, gen: 9, }, manectite: { name: "Manectite", spritenum: 596, megaStone: "Manectric-Mega", megaEvolves: "Manectric", itemUser: ["Manectric"], onTakeItem(item, source) { if (item.megaEvolves === source.baseSpecies.baseSpecies) return false; return true; }, num: 682, gen: 6, isNonstandard: "Past", }, marangaberry: { name: "Maranga Berry", spritenum: 597, isBerry: true, naturalGift: { basePower: 100, type: "Dark", }, onAfterMoveSecondary(target, source, move) { if (move.category === 'Special') { target.eatItem(); } }, onEat(pokemon) { this.boost({ spd: 1 }); }, num: 688, gen: 6, }, marshadiumz: { name: "Marshadium Z", spritenum: 654, onTakeItem: false, zMove: "Soul-Stealing 7-Star Strike", zMoveFrom: "Spectral Thief", itemUser: ["Marshadow"], num: 802, gen: 7, isNonstandard: "Past", }, masterball: { name: "Master Ball", spritenum: 276, num: 1, gen: 1, isPokeball: true, }, masterpieceteacup: { name: "Masterpiece Teacup", spritenum: 757, fling: { basePower: 80, }, num: 2404, gen: 9, }, mawilite: { name: "Mawilite", spritenum: 598, megaStone: "Mawile-Mega", megaEvolves: "Mawile", itemUser: ["Mawile"], onTakeItem(item, source) { if (item.megaEvolves === source.baseSpecies.baseSpecies) return false; return true; }, num: 681, gen: 6, isNonstandard: "Past", }, meadowplate: { name: "Meadow Plate", spritenum: 282, onPlate: 'Grass', onBasePowerPriority: 15, onBasePower(basePower, user, target, move) { if (move.type === 'Grass') { return this.chainModify([4915, 4096]); } }, onTakeItem(item, pokemon, source) { if ((source && source.baseSpecies.num === 493) || pokemon.baseSpecies.num === 493) { return false; } return true; }, forcedForme: "Arceus-Grass", num: 301, gen: 4, }, medichamite: { name: "Medichamite", spritenum: 599, megaStone: "Medicham-Mega", megaEvolves: "Medicham", itemUser: ["Medicham"], onTakeItem(item, source) { if (item.megaEvolves === source.baseSpecies.baseSpecies) return false; return true; }, num: 665, gen: 6, isNonstandard: "Past", }, mentalherb: { name: "Mental Herb", spritenum: 285, fling: { basePower: 10, effect(pokemon) { const conditions = ['attract', 'taunt', 'encore', 'torment', 'disable', 'healblock']; for (const firstCondition of conditions) { if (pokemon.volatiles[firstCondition]) { for (const secondCondition of conditions) { pokemon.removeVolatile(secondCondition); if (firstCondition === 'attract' && secondCondition === 'attract') { this.add('-end', pokemon, 'move: Attract', '[from] item: Mental Herb'); } } return; } } }, }, onUpdate(pokemon) { const conditions = ['attract', 'taunt', 'encore', 'torment', 'disable', 'healblock']; for (const firstCondition of conditions) { if (pokemon.volatiles[firstCondition]) { if (!pokemon.useItem()) return; for (const secondCondition of conditions) { pokemon.removeVolatile(secondCondition); if (firstCondition === 'attract' && secondCondition === 'attract') { this.add('-end', pokemon, 'move: Attract', '[from] item: Mental Herb'); } } return; } } }, num: 219, gen: 3, }, metagrossite: { name: "Metagrossite", spritenum: 618, megaStone: "Metagross-Mega", megaEvolves: "Metagross", itemUser: ["Metagross"], onTakeItem(item, source) { if (item.megaEvolves === source.baseSpecies.baseSpecies) return false; return true; }, num: 758, gen: 6, isNonstandard: "Past", }, metalalloy: { name: "Metal Alloy", spritenum: 761, num: 2482, gen: 9, }, metalcoat: { name: "Metal Coat", spritenum: 286, fling: { basePower: 30, }, onBasePowerPriority: 15, onBasePower(basePower, user, target, move) { if (move.type === 'Steel') { return this.chainModify([4915, 4096]); } }, num: 233, gen: 2, }, metalpowder: { name: "Metal Powder", fling: { basePower: 10, }, spritenum: 287, onModifyDefPriority: 2, onModifyDef(def, pokemon) { if (pokemon.species.name === 'Ditto' && !pokemon.transformed) { return this.chainModify(2); } }, itemUser: ["Ditto"], num: 257, gen: 2, isNonstandard: "Past", }, metronome: { name: "Metronome", spritenum: 289, fling: { basePower: 30, }, onStart(pokemon) { pokemon.addVolatile('metronome'); }, condition: { onStart(pokemon) { this.effectState.lastMove = ''; this.effectState.numConsecutive = 0; }, onTryMovePriority: -2, onTryMove(pokemon, target, move) { if (!pokemon.hasItem('metronome')) { pokemon.removeVolatile('metronome'); return; } if (move.callsMove) return; if (this.effectState.lastMove === move.id && pokemon.moveLastTurnResult) { this.effectState.numConsecutive++; } else if (pokemon.volatiles['twoturnmove']) { if (this.effectState.lastMove !== move.id) { this.effectState.numConsecutive = 1; } else { this.effectState.numConsecutive++; } } else { this.effectState.numConsecutive = 0; } this.effectState.lastMove = move.id; }, onModifyDamage(damage, source, target, move) { const dmgMod = [4096, 4915, 5734, 6553, 7372, 8192]; const numConsecutive = this.effectState.numConsecutive > 5 ? 5 : this.effectState.numConsecutive; this.debug(`Current Metronome boost: ${dmgMod[numConsecutive]}/4096`); return this.chainModify([dmgMod[numConsecutive], 4096]); }, }, num: 277, gen: 4, }, mewniumz: { name: "Mewnium Z", spritenum: 658, onTakeItem: false, zMove: "Genesis Supernova", zMoveFrom: "Psychic", itemUser: ["Mew"], num: 806, gen: 7, isNonstandard: "Past", }, mewtwonitex: { name: "Mewtwonite X", spritenum: 600, megaStone: "Mewtwo-Mega-X", megaEvolves: "Mewtwo", itemUser: ["Mewtwo"], onTakeItem(item, source) { if (item.megaEvolves === source.baseSpecies.baseSpecies) return false; return true; }, num: 662, gen: 6, isNonstandard: "Past", }, mewtwonitey: { name: "Mewtwonite Y", spritenum: 601, megaStone: "Mewtwo-Mega-Y", megaEvolves: "Mewtwo", itemUser: ["Mewtwo"], onTakeItem(item, source) { if (item.megaEvolves === source.baseSpecies.baseSpecies) return false; return true; }, num: 663, gen: 6, isNonstandard: "Past", }, micleberry: { name: "Micle Berry", spritenum: 290, isBerry: true, naturalGift: { basePower: 100, type: "Rock", }, onResidual(pokemon) { if (pokemon.hp <= pokemon.maxhp / 4 || (pokemon.hp <= pokemon.maxhp / 2 && pokemon.hasAbility('gluttony') && pokemon.abilityState.gluttony)) { pokemon.eatItem(); } }, onEat(pokemon) { pokemon.addVolatile('micleberry'); }, condition: { duration: 2, onSourceAccuracy(accuracy, target, source, move) { if (!move.ohko) { this.add('-enditem', source, 'Micle Berry'); source.removeVolatile('micleberry'); if (typeof accuracy === 'number') { return this.chainModify([4915, 4096]); } } }, }, num: 209, gen: 4, }, mimikiumz: { name: "Mimikium Z", spritenum: 688, onTakeItem: false, zMove: "Let's Snuggle Forever", zMoveFrom: "Play Rough", itemUser: ["Mimikyu", "Mimikyu-Busted", "Mimikyu-Totem", "Mimikyu-Busted-Totem"], num: 924, isNonstandard: "Past", gen: 7, }, mindplate: { name: "Mind Plate", spritenum: 291, onPlate: 'Psychic', onBasePowerPriority: 15, onBasePower(basePower, user, target, move) { if (move.type === 'Psychic') { return this.chainModify([4915, 4096]); } }, onTakeItem(item, pokemon, source) { if ((source && source.baseSpecies.num === 493) || pokemon.baseSpecies.num === 493) { return false; } return true; }, forcedForme: "Arceus-Psychic", num: 307, gen: 4, }, miracleseed: { name: "Miracle Seed", fling: { basePower: 30, }, spritenum: 292, onBasePowerPriority: 15, onBasePower(basePower, user, target, move) { if (move.type === 'Grass') { return this.chainModify([4915, 4096]); } }, num: 239, gen: 2, }, mirrorherb: { name: "Mirror Herb", spritenum: 748, fling: { basePower: 30, }, onFoeAfterBoost(boost, target, source, effect) { if (effect?.name === 'Opportunist' || effect?.name === 'Mirror Herb') return; if (!this.effectState.boosts) this.effectState.boosts = {} as SparseBoostsTable; const boostPlus = this.effectState.boosts; let i: BoostID; for (i in boost) { if (boost[i]! > 0) { boostPlus[i] = (boostPlus[i] || 0) + boost[i]!; this.effectState.ready = true; } } }, onAnySwitchInPriority: -3, onAnySwitchIn() { if (!this.effectState.ready || !this.effectState.boosts) return; (this.effectState.target as Pokemon).useItem(); }, onAnyAfterMove() { if (!this.effectState.ready || !this.effectState.boosts) return; (this.effectState.target as Pokemon).useItem(); }, onResidualOrder: 29, onResidual(pokemon) { if (!this.effectState.ready || !this.effectState.boosts) return; (this.effectState.target as Pokemon).useItem(); }, onUse(pokemon) { this.boost(this.effectState.boosts, pokemon); }, onEnd() { delete this.effectState.boosts; delete this.effectState.ready; }, num: 1883, gen: 9, }, mistyseed: { name: "Misty Seed", spritenum: 666, fling: { basePower: 10, }, onSwitchInPriority: -1, onStart(pokemon) { if (!pokemon.ignoringItem() && this.field.isTerrain('mistyterrain')) { pokemon.useItem(); } }, onTerrainChange(pokemon) { if (this.field.isTerrain('mistyterrain')) { pokemon.useItem(); } }, boosts: { spd: 1, }, num: 883, gen: 7, }, moonball: { name: "Moon Ball", spritenum: 294, num: 498, gen: 2, isPokeball: true, }, moonstone: { name: "Moon Stone", spritenum: 295, fling: { basePower: 30, }, num: 81, gen: 1, }, muscleband: { name: "Muscle Band", spritenum: 297, fling: { basePower: 10, }, onBasePowerPriority: 16, onBasePower(basePower, user, target, move) { if (move.category === 'Physical') { return this.chainModify([4505, 4096]); } }, num: 266, gen: 4, }, mysticwater: { name: "Mystic Water", spritenum: 300, fling: { basePower: 30, }, onBasePowerPriority: 15, onBasePower(basePower, user, target, move) { if (move.type === 'Water') { return this.chainModify([4915, 4096]); } }, num: 243, gen: 2, }, nanabberry: { name: "Nanab Berry", spritenum: 302, isBerry: true, naturalGift: { basePower: 90, type: "Water", }, onEat: false, num: 166, gen: 3, isNonstandard: "Past", }, nestball: { name: "Nest Ball", spritenum: 303, num: 8, gen: 3, isPokeball: true, }, netball: { name: "Net Ball", spritenum: 304, num: 6, gen: 3, isPokeball: true, }, nevermeltice: { name: "Never-Melt Ice", spritenum: 305, fling: { basePower: 30, }, onBasePowerPriority: 15, onBasePower(basePower, user, target, move) { if (move.type === 'Ice') { return this.chainModify([4915, 4096]); } }, num: 246, gen: 2, }, nomelberry: { name: "Nomel Berry", spritenum: 306, isBerry: true, naturalGift: { basePower: 90, type: "Dragon", }, onEat: false, num: 178, gen: 3, isNonstandard: "Past", }, normalgem: { name: "Normal Gem", spritenum: 307, isGem: true, onSourceTryPrimaryHit(target, source, move) { if (target === source || move.category === 'Status' || move.flags['pledgecombo']) return; if (move.type === 'Normal' && source.useItem()) { source.addVolatile('gem'); } }, num: 564, gen: 5, }, normaliumz: { name: "Normalium Z", spritenum: 631, onTakeItem: false, zMove: true, zMoveType: "Normal", num: 776, gen: 7, isNonstandard: "Past", }, occaberry: { name: "Occa Berry", spritenum: 311, isBerry: true, naturalGift: { basePower: 80, type: "Fire", }, onSourceModifyDamage(damage, source, target, move) { if (move.type === 'Fire' && target.getMoveHitData(move).typeMod > 0) { const hitSub = target.volatiles['substitute'] && !move.flags['bypasssub'] && !(move.infiltrates && this.gen >= 6); if (hitSub) return; if (target.eatItem()) { this.debug('-50% reduction'); this.add('-enditem', target, this.effect, '[weaken]'); return this.chainModify(0.5); } } }, onEat() { }, num: 184, gen: 4, }, oddincense: { name: "Odd Incense", spritenum: 312, fling: { basePower: 10, }, onBasePowerPriority: 15, onBasePower(basePower, user, target, move) { if (move.type === 'Psychic') { return this.chainModify([4915, 4096]); } }, num: 314, gen: 4, isNonstandard: "Past", }, oldamber: { name: "Old Amber", spritenum: 314, fling: { basePower: 100, }, num: 103, gen: 3, isNonstandard: "Past", }, oranberry: { name: "Oran Berry", spritenum: 319, isBerry: true, naturalGift: { basePower: 80, type: "Poison", }, onUpdate(pokemon) { if (pokemon.hp <= pokemon.maxhp / 2) { pokemon.eatItem(); } }, onTryEatItem(item, pokemon) { if (!this.runEvent('TryHeal', pokemon, null, this.effect, 10)) return false; }, onEat(pokemon) { this.heal(10); }, num: 155, gen: 3, }, ovalstone: { name: "Oval Stone", spritenum: 321, fling: { basePower: 80, }, num: 110, gen: 4, }, pamtreberry: { name: "Pamtre Berry", spritenum: 323, isBerry: true, naturalGift: { basePower: 90, type: "Steel", }, onEat: false, num: 180, gen: 3, isNonstandard: "Past", }, parkball: { name: "Park Ball", spritenum: 325, num: 500, gen: 4, isPokeball: true, isNonstandard: "Unobtainable", }, passhoberry: { name: "Passho Berry", spritenum: 329, isBerry: true, naturalGift: { basePower: 80, type: "Water", }, onSourceModifyDamage(damage, source, target, move) { if (move.type === 'Water' && target.getMoveHitData(move).typeMod > 0) { const hitSub = target.volatiles['substitute'] && !move.flags['bypasssub'] && !(move.infiltrates && this.gen >= 6); if (hitSub) return; if (target.eatItem()) { this.debug('-50% reduction'); this.add('-enditem', target, this.effect, '[weaken]'); return this.chainModify(0.5); } } }, onEat() { }, num: 185, gen: 4, }, payapaberry: { name: "Payapa Berry", spritenum: 330, isBerry: true, naturalGift: { basePower: 80, type: "Psychic", }, onSourceModifyDamage(damage, source, target, move) { if (move.type === 'Psychic' && target.getMoveHitData(move).typeMod > 0) { const hitSub = target.volatiles['substitute'] && !move.flags['bypasssub'] && !(move.infiltrates && this.gen >= 6); if (hitSub) return; if (target.eatItem()) { this.debug('-50% reduction'); this.add('-enditem', target, this.effect, '[weaken]'); return this.chainModify(0.5); } } }, onEat() { }, num: 193, gen: 4, }, pechaberry: { name: "Pecha Berry", spritenum: 333, isBerry: true, naturalGift: { basePower: 80, type: "Electric", }, onUpdate(pokemon) { if (pokemon.status === 'psn' || pokemon.status === 'tox') { pokemon.eatItem(); } }, onEat(pokemon) { if (pokemon.status === 'psn' || pokemon.status === 'tox') { pokemon.cureStatus(); } }, num: 151, gen: 3, }, persimberry: { name: "Persim Berry", spritenum: 334, isBerry: true, naturalGift: { basePower: 80, type: "Ground", }, onUpdate(pokemon) { if (pokemon.volatiles['confusion']) { pokemon.eatItem(); } }, onEat(pokemon) { pokemon.removeVolatile('confusion'); }, num: 156, gen: 3, }, petayaberry: { name: "Petaya Berry", spritenum: 335, isBerry: true, naturalGift: { basePower: 100, type: "Poison", }, onUpdate(pokemon) { if (pokemon.hp <= pokemon.maxhp / 4 || (pokemon.hp <= pokemon.maxhp / 2 && pokemon.hasAbility('gluttony') && pokemon.abilityState.gluttony)) { pokemon.eatItem(); } }, onEat(pokemon) { this.boost({ spa: 1 }); }, num: 204, gen: 3, }, pidgeotite: { name: "Pidgeotite", spritenum: 622, megaStone: "Pidgeot-Mega", megaEvolves: "Pidgeot", itemUser: ["Pidgeot"], onTakeItem(item, source) { if (item.megaEvolves === source.baseSpecies.baseSpecies) return false; return true; }, num: 762, gen: 6, isNonstandard: "Past", }, pikaniumz: { name: "Pikanium Z", spritenum: 649, onTakeItem: false, zMove: "Catastropika", zMoveFrom: "Volt Tackle", itemUser: ["Pikachu"], num: 794, gen: 7, isNonstandard: "Past", }, pikashuniumz: { name: "Pikashunium Z", spritenum: 659, onTakeItem: false, zMove: "10,000,000 Volt Thunderbolt", zMoveFrom: "Thunderbolt", itemUser: ["Pikachu-Original", "Pikachu-Hoenn", "Pikachu-Sinnoh", "Pikachu-Unova", "Pikachu-Kalos", "Pikachu-Alola", "Pikachu-Partner"], num: 836, isNonstandard: "Past", gen: 7, }, pinapberry: { name: "Pinap Berry", spritenum: 337, isBerry: true, naturalGift: { basePower: 90, type: "Grass", }, onEat: false, num: 168, gen: 3, isNonstandard: "Past", }, pinsirite: { name: "Pinsirite", spritenum: 602, megaStone: "Pinsir-Mega", megaEvolves: "Pinsir", itemUser: ["Pinsir"], onTakeItem(item, source) { if (item.megaEvolves === source.baseSpecies.baseSpecies) return false; return true; }, num: 671, gen: 6, isNonstandard: "Past", }, pixieplate: { name: "Pixie Plate", spritenum: 610, onPlate: 'Fairy', onBasePowerPriority: 15, onBasePower(basePower, user, target, move) { if (move && move.type === 'Fairy') { return this.chainModify([4915, 4096]); } }, onTakeItem(item, pokemon, source) { if ((source && source.baseSpecies.num === 493) || pokemon.baseSpecies.num === 493) { return false; } return true; }, forcedForme: "Arceus-Fairy", num: 644, gen: 6, }, plumefossil: { name: "Plume Fossil", spritenum: 339, fling: { basePower: 100, }, num: 573, gen: 5, isNonstandard: "Past", }, poisonbarb: { name: "Poison Barb", spritenum: 343, fling: { basePower: 70, status: 'psn', }, onBasePowerPriority: 15, onBasePower(basePower, user, target, move) { if (move.type === 'Poison') { return this.chainModify([4915, 4096]); } }, num: 245, gen: 2, }, poisongem: { name: "Poison Gem", spritenum: 344, isGem: true, onSourceTryPrimaryHit(target, source, move) { if (target === source || move.category === 'Status') return; if (move.type === 'Poison' && source.useItem()) { source.addVolatile('gem'); } }, num: 554, gen: 5, isNonstandard: "Past", }, poisonmemory: { name: "Poison Memory", spritenum: 670, onMemory: 'Poison', onTakeItem(item, pokemon, source) { if ((source && source.baseSpecies.num === 773) || pokemon.baseSpecies.num === 773) { return false; } return true; }, forcedForme: "Silvally-Poison", itemUser: ["Silvally-Poison"], num: 906, gen: 7, isNonstandard: "Past", }, poisoniumz: { name: "Poisonium Z", spritenum: 638, onPlate: 'Poison', onTakeItem: false, zMove: true, zMoveType: "Poison", forcedForme: "Arceus-Poison", num: 783, gen: 7, isNonstandard: "Past", }, pokeball: { name: "Poke Ball", spritenum: 345, num: 4, gen: 1, isPokeball: true, }, pomegberry: { name: "Pomeg Berry", spritenum: 351, isBerry: true, naturalGift: { basePower: 90, type: "Ice", }, onEat: false, num: 169, gen: 3, }, poweranklet: { name: "Power Anklet", spritenum: 354, ignoreKlutz: true, fling: { basePower: 70, }, onModifySpe(spe) { return this.chainModify(0.5); }, num: 293, gen: 4, }, powerband: { name: "Power Band", spritenum: 355, ignoreKlutz: true, fling: { basePower: 70, }, onModifySpe(spe) { return this.chainModify(0.5); }, num: 292, gen: 4, }, powerbelt: { name: "Power Belt", spritenum: 356, ignoreKlutz: true, fling: { basePower: 70, }, onModifySpe(spe) { return this.chainModify(0.5); }, num: 290, gen: 4, }, powerbracer: { name: "Power Bracer", spritenum: 357, ignoreKlutz: true, fling: { basePower: 70, }, onModifySpe(spe) { return this.chainModify(0.5); }, num: 289, gen: 4, }, powerherb: { onChargeMove(pokemon, target, move) { if (pokemon.useItem()) { this.debug('power herb - remove charge turn for ' + move.id); this.attrLastMove('[still]'); this.addMove('-anim', pokemon, move.name, target); return false; // skip charge turn } }, name: "Power Herb", spritenum: 358, fling: { basePower: 10, }, num: 271, gen: 4, }, powerlens: { name: "Power Lens", spritenum: 359, ignoreKlutz: true, fling: { basePower: 70, }, onModifySpe(spe) { return this.chainModify(0.5); }, num: 291, gen: 4, }, powerweight: { name: "Power Weight", spritenum: 360, ignoreKlutz: true, fling: { basePower: 70, }, onModifySpe(spe) { return this.chainModify(0.5); }, num: 294, gen: 4, }, premierball: { name: "Premier Ball", spritenum: 363, num: 12, gen: 3, isPokeball: true, }, primariumz: { name: "Primarium Z", spritenum: 652, onTakeItem: false, zMove: "Oceanic Operetta", zMoveFrom: "Sparkling Aria", itemUser: ["Primarina"], num: 800, gen: 7, isNonstandard: "Past", }, prismscale: { name: "Prism Scale", spritenum: 365, fling: { basePower: 30, }, num: 537, gen: 5, }, protectivepads: { name: "Protective Pads", spritenum: 663, fling: { basePower: 30, }, // protective effect handled in Battle#checkMoveMakesContact num: 880, gen: 7, }, protector: { name: "Protector", spritenum: 367, fling: { basePower: 80, }, num: 321, gen: 4, }, psychicgem: { name: "Psychic Gem", spritenum: 369, isGem: true, onSourceTryPrimaryHit(target, source, move) { if (target === source || move.category === 'Status') return; if (move.type === 'Psychic' && source.useItem()) { source.addVolatile('gem'); } }, num: 557, gen: 5, isNonstandard: "Past", }, psychicmemory: { name: "Psychic Memory", spritenum: 680, onMemory: 'Psychic', onTakeItem(item, pokemon, source) { if ((source && source.baseSpecies.num === 773) || pokemon.baseSpecies.num === 773) { return false; } return true; }, forcedForme: "Silvally-Psychic", itemUser: ["Silvally-Psychic"], num: 916, gen: 7, isNonstandard: "Past", }, psychicseed: { name: "Psychic Seed", spritenum: 665, fling: { basePower: 10, }, onSwitchInPriority: -1, onStart(pokemon) { if (!pokemon.ignoringItem() && this.field.isTerrain('psychicterrain')) { pokemon.useItem(); } }, onTerrainChange(pokemon) { if (this.field.isTerrain('psychicterrain')) { pokemon.useItem(); } }, boosts: { spd: 1, }, num: 882, gen: 7, }, psychiumz: { name: "Psychium Z", spritenum: 641, onPlate: 'Psychic', onTakeItem: false, zMove: true, zMoveType: "Psychic", forcedForme: "Arceus-Psychic", num: 786, gen: 7, isNonstandard: "Past", }, punchingglove: { name: "Punching Glove", spritenum: 749, fling: { basePower: 30, }, onBasePowerPriority: 23, onBasePower(basePower, attacker, defender, move) { if (move.flags['punch']) { this.debug('Punching Glove boost'); return this.chainModify([4506, 4096]); } }, onModifyMovePriority: 1, onModifyMove(move) { if (move.flags['punch']) delete move.flags['contact']; }, num: 1884, gen: 9, }, qualotberry: { name: "Qualot Berry", spritenum: 371, isBerry: true, naturalGift: { basePower: 90, type: "Poison", }, onEat: false, num: 171, gen: 3, }, quickball: { name: "Quick Ball", spritenum: 372, num: 15, gen: 4, isPokeball: true, }, quickclaw: { onFractionalPriorityPriority: -2, onFractionalPriority(priority, pokemon, target, move) { if (move.category === "Status" && pokemon.hasAbility("myceliummight")) return; if (priority <= 0 && this.randomChance(1, 5)) { this.add('-activate', pokemon, 'item: Quick Claw'); return 0.1; } }, name: "Quick Claw", spritenum: 373, fling: { basePower: 80, }, num: 217, gen: 2, }, quickpowder: { name: "Quick Powder", spritenum: 374, fling: { basePower: 10, }, onModifySpe(spe, pokemon) { if (pokemon.species.name === 'Ditto' && !pokemon.transformed) { return this.chainModify(2); } }, itemUser: ["Ditto"], num: 274, gen: 4, isNonstandard: "Past", }, rabutaberry: { name: "Rabuta Berry", spritenum: 375, isBerry: true, naturalGift: { basePower: 90, type: "Ghost", }, onEat: false, num: 177, gen: 3, isNonstandard: "Past", }, rarebone: { name: "Rare Bone", spritenum: 379, fling: { basePower: 100, }, num: 106, gen: 4, }, rawstberry: { name: "Rawst Berry", spritenum: 381, isBerry: true, naturalGift: { basePower: 80, type: "Grass", }, onUpdate(pokemon) { if (pokemon.status === 'brn') { pokemon.eatItem(); } }, onEat(pokemon) { if (pokemon.status === 'brn') { pokemon.cureStatus(); } }, num: 152, gen: 3, }, razorclaw: { name: "Razor Claw", spritenum: 382, fling: { basePower: 80, }, onModifyCritRatio(critRatio) { return critRatio + 1; }, num: 326, gen: 4, }, razorfang: { name: "Razor Fang", spritenum: 383, fling: { basePower: 30, volatileStatus: 'flinch', }, onModifyMovePriority: -1, onModifyMove(move) { if (move.category !== "Status") { if (!move.secondaries) move.secondaries = []; for (const secondary of move.secondaries) { if (secondary.volatileStatus === 'flinch') return; } move.secondaries.push({ chance: 10, volatileStatus: 'flinch', }); } }, num: 327, gen: 4, }, razzberry: { name: "Razz Berry", spritenum: 384, isBerry: true, naturalGift: { basePower: 80, type: "Steel", }, onEat: false, num: 164, gen: 3, isNonstandard: "Past", }, reapercloth: { name: "Reaper Cloth", spritenum: 385, fling: { basePower: 10, }, num: 325, gen: 4, }, redcard: { name: "Red Card", spritenum: 387, fling: { basePower: 10, }, onAfterMoveSecondary(target, source, move) { if (source && source !== target && source.hp && target.hp && move && move.category !== 'Status') { if (!source.isActive || !this.canSwitch(source.side) || source.forceSwitchFlag || target.forceSwitchFlag) { return; } // The item is used up even against a pokemon with Ingrain or that otherwise can't be forced out if (target.useItem(source)) { if (this.runEvent('DragOut', source, target, move)) { source.forceSwitchFlag = true; } } } }, num: 542, gen: 5, }, redorb: { name: "Red Orb", spritenum: 390, onSwitchInPriority: -1, onSwitchIn(pokemon) { if (pokemon.isActive && pokemon.baseSpecies.name === 'Groudon' && !pokemon.transformed) { pokemon.formeChange('Groudon-Primal', this.effect, true); } }, onTakeItem(item, source) { if (source.baseSpecies.baseSpecies === 'Groudon') return false; return true; }, itemUser: ["Groudon"], isPrimalOrb: true, num: 534, gen: 6, isNonstandard: "Past", }, repeatball: { name: "Repeat Ball", spritenum: 401, num: 9, gen: 3, isPokeball: true, }, ribbonsweet: { name: "Ribbon Sweet", spritenum: 710, fling: { basePower: 10, }, num: 1115, gen: 8, }, rindoberry: { name: "Rindo Berry", spritenum: 409, isBerry: true, naturalGift: { basePower: 80, type: "Grass", }, onSourceModifyDamage(damage, source, target, move) { if (move.type === 'Grass' && target.getMoveHitData(move).typeMod > 0) { const hitSub = target.volatiles['substitute'] && !move.flags['bypasssub'] && !(move.infiltrates && this.gen >= 6); if (hitSub) return; if (target.eatItem()) { this.debug('-50% reduction'); this.add('-enditem', target, this.effect, '[weaken]'); return this.chainModify(0.5); } } }, onEat() { }, num: 187, gen: 4, }, ringtarget: { name: "Ring Target", spritenum: 410, fling: { basePower: 10, }, onNegateImmunity: false, num: 543, gen: 5, }, rockgem: { name: "Rock Gem", spritenum: 415, isGem: true, onSourceTryPrimaryHit(target, source, move) { if (target === source || move.category === 'Status') return; if (move.type === 'Rock' && source.useItem()) { source.addVolatile('gem'); } }, num: 559, gen: 5, isNonstandard: "Past", }, rockincense: { name: "Rock Incense", spritenum: 416, fling: { basePower: 10, }, onBasePowerPriority: 15, onBasePower(basePower, user, target, move) { if (move.type === 'Rock') { return this.chainModify([4915, 4096]); } }, num: 315, gen: 4, isNonstandard: "Past", }, rockmemory: { name: "Rock Memory", spritenum: 672, onMemory: 'Rock', onTakeItem(item, pokemon, source) { if ((source && source.baseSpecies.num === 773) || pokemon.baseSpecies.num === 773) { return false; } return true; }, forcedForme: "Silvally-Rock", itemUser: ["Silvally-Rock"], num: 908, gen: 7, isNonstandard: "Past", }, rockiumz: { name: "Rockium Z", spritenum: 643, onPlate: 'Rock', onTakeItem: false, zMove: true, zMoveType: "Rock", forcedForme: "Arceus-Rock", num: 788, gen: 7, isNonstandard: "Past", }, rockyhelmet: { name: "Rocky Helmet", spritenum: 417, fling: { basePower: 60, }, onDamagingHitOrder: 2, onDamagingHit(damage, target, source, move) { if (this.checkMoveMakesContact(move, source, target)) { this.damage(source.baseMaxhp / 6, source, target); } }, num: 540, gen: 5, }, roomservice: { name: "Room Service", spritenum: 717, fling: { basePower: 100, }, onSwitchInPriority: -1, onStart(pokemon) { if (!pokemon.ignoringItem() && this.field.getPseudoWeather('trickroom')) { pokemon.useItem(); } }, onAnyPseudoWeatherChange() { const pokemon = this.effectState.target; if (this.field.getPseudoWeather('trickroom')) { pokemon.useItem(pokemon); } }, boosts: { spe: -1, }, num: 1122, gen: 8, }, rootfossil: { name: "Root Fossil", spritenum: 418, fling: { basePower: 100, }, num: 99, gen: 3, isNonstandard: "Past", }, roseincense: { name: "Rose Incense", spritenum: 419, fling: { basePower: 10, }, onBasePowerPriority: 15, onBasePower(basePower, user, target, move) { if (move.type === 'Grass') { return this.chainModify([4915, 4096]); } }, num: 318, gen: 4, isNonstandard: "Past", }, roseliberry: { name: "Roseli Berry", spritenum: 603, isBerry: true, naturalGift: { basePower: 80, type: "Fairy", }, onSourceModifyDamage(damage, source, target, move) { if (move.type === 'Fairy' && target.getMoveHitData(move).typeMod > 0) { const hitSub = target.volatiles['substitute'] && !move.flags['bypasssub'] && !(move.infiltrates && this.gen >= 6); if (hitSub) return; if (target.eatItem()) { this.debug('-50% reduction'); this.add('-enditem', target, this.effect, '[weaken]'); return this.chainModify(0.5); } } }, onEat() { }, num: 686, gen: 6, }, rowapberry: { name: "Rowap Berry", spritenum: 420, isBerry: true, naturalGift: { basePower: 100, type: "Dark", }, onDamagingHit(damage, target, source, move) { if (move.category === 'Special' && source.hp && source.isActive && !source.hasAbility('magicguard')) { if (target.eatItem()) { this.damage(source.baseMaxhp / (target.hasAbility('ripen') ? 4 : 8), source, target); } } }, onEat() { }, num: 212, gen: 4, }, rustedshield: { name: "Rusted Shield", spritenum: 699, onTakeItem(item, pokemon, source) { if ((source && source.baseSpecies.num === 889) || pokemon.baseSpecies.num === 889) { return false; } return true; }, itemUser: ["Zamazenta-Crowned"], num: 1104, gen: 8, }, rustedsword: { name: "Rusted Sword", spritenum: 698, onTakeItem(item, pokemon, source) { if ((source && source.baseSpecies.num === 888) || pokemon.baseSpecies.num === 888) { return false; } return true; }, itemUser: ["Zacian-Crowned"], num: 1103, gen: 8, }, sablenite: { name: "Sablenite", spritenum: 614, megaStone: "Sableye-Mega", megaEvolves: "Sableye", itemUser: ["Sableye"], onTakeItem(item, source) { if (item.megaEvolves === source.baseSpecies.baseSpecies) return false; return true; }, num: 754, gen: 6, isNonstandard: "Past", }, sachet: { name: "Sachet", spritenum: 691, fling: { basePower: 80, }, num: 647, gen: 6, isNonstandard: "Past", }, safariball: { name: "Safari Ball", spritenum: 425, num: 5, gen: 1, isPokeball: true, }, safetygoggles: { name: "Safety Goggles", spritenum: 604, fling: { basePower: 80, }, onImmunity(type, pokemon) { if (type === 'sandstorm' || type === 'hail' || type === 'powder') return false; }, onTryHit(pokemon, source, move) { if (move.flags['powder'] && pokemon !== source && this.dex.getImmunity('powder', pokemon)) { this.add('-activate', pokemon, 'item: Safety Goggles', move.name); return null; } }, num: 650, gen: 6, }, sailfossil: { name: "Sail Fossil", spritenum: 695, fling: { basePower: 100, }, num: 711, gen: 6, isNonstandard: "Past", }, salacberry: { name: "Salac Berry", spritenum: 426, isBerry: true, naturalGift: { basePower: 100, type: "Fighting", }, onUpdate(pokemon) { if (pokemon.hp <= pokemon.maxhp / 4 || (pokemon.hp <= pokemon.maxhp / 2 && pokemon.hasAbility('gluttony') && pokemon.abilityState.gluttony)) { pokemon.eatItem(); } }, onEat(pokemon) { this.boost({ spe: 1 }); }, num: 203, gen: 3, }, salamencite: { name: "Salamencite", spritenum: 627, megaStone: "Salamence-Mega", megaEvolves: "Salamence", itemUser: ["Salamence"], onTakeItem(item, source) { if (item.megaEvolves === source.baseSpecies.baseSpecies) return false; return true; }, num: 769, gen: 6, isNonstandard: "Past", }, sceptilite: { name: "Sceptilite", spritenum: 613, megaStone: "Sceptile-Mega", megaEvolves: "Sceptile", itemUser: ["Sceptile"], onTakeItem(item, source) { if (item.megaEvolves === source.baseSpecies.baseSpecies) return false; return true; }, num: 753, gen: 6, isNonstandard: "Past", }, scizorite: { name: "Scizorite", spritenum: 605, megaStone: "Scizor-Mega", megaEvolves: "Scizor", itemUser: ["Scizor"], onTakeItem(item, source) { if (item.megaEvolves === source.baseSpecies.baseSpecies) return false; return true; }, num: 670, gen: 6, isNonstandard: "Past", }, scopelens: { name: "Scope Lens", spritenum: 429, fling: { basePower: 30, }, onModifyCritRatio(critRatio) { return critRatio + 1; }, num: 232, gen: 2, }, seaincense: { name: "Sea Incense", spritenum: 430, fling: { basePower: 10, }, onBasePowerPriority: 15, onBasePower(basePower, user, target, move) { if (move && move.type === 'Water') { return this.chainModify([4915, 4096]); } }, num: 254, gen: 3, isNonstandard: "Past", }, sharpbeak: { name: "Sharp Beak", spritenum: 436, fling: { basePower: 50, }, onBasePowerPriority: 15, onBasePower(basePower, user, target, move) { if (move && move.type === 'Flying') { return this.chainModify([4915, 4096]); } }, num: 244, gen: 2, }, sharpedonite: { name: "Sharpedonite", spritenum: 619, megaStone: "Sharpedo-Mega", megaEvolves: "Sharpedo", itemUser: ["Sharpedo"], onTakeItem(item, source) { if (item.megaEvolves === source.baseSpecies.baseSpecies) return false; return true; }, num: 759, gen: 6, isNonstandard: "Past", }, shedshell: { name: "Shed Shell", spritenum: 437, fling: { basePower: 10, }, onTrapPokemonPriority: -10, onTrapPokemon(pokemon) { pokemon.trapped = pokemon.maybeTrapped = false; }, num: 295, gen: 4, }, shellbell: { name: "Shell Bell", spritenum: 438, fling: { basePower: 30, }, onAfterMoveSecondarySelfPriority: -1, onAfterMoveSecondarySelf(pokemon, target, move) { if (move.totalDamage && !pokemon.forceSwitchFlag) { this.heal(move.totalDamage / 8, pokemon); } }, num: 253, gen: 3, }, shinystone: { name: "Shiny Stone", spritenum: 439, fling: { basePower: 80, }, num: 107, gen: 4, }, shockdrive: { name: "Shock Drive", spritenum: 442, onTakeItem(item, pokemon, source) { if ((source && source.baseSpecies.num === 649) || pokemon.baseSpecies.num === 649) { return false; } return true; }, onDrive: 'Electric', forcedForme: "Genesect-Shock", itemUser: ["Genesect-Shock"], num: 117, gen: 5, isNonstandard: "Past", }, shucaberry: { name: "Shuca Berry", spritenum: 443, isBerry: true, naturalGift: { basePower: 80, type: "Ground", }, onSourceModifyDamage(damage, source, target, move) { if (move.type === 'Ground' && target.getMoveHitData(move).typeMod > 0) { const hitSub = target.volatiles['substitute'] && !move.flags['bypasssub'] && !(move.infiltrates && this.gen >= 6); if (hitSub) return; if (target.eatItem()) { this.debug('-50% reduction'); this.add('-enditem', target, this.effect, '[weaken]'); return this.chainModify(0.5); } } }, onEat() { }, num: 191, gen: 4, }, silkscarf: { name: "Silk Scarf", spritenum: 444, fling: { basePower: 10, }, onBasePowerPriority: 15, onBasePower(basePower, user, target, move) { if (move.type === 'Normal') { return this.chainModify([4915, 4096]); } }, num: 251, gen: 3, }, silverpowder: { name: "Silver Powder", spritenum: 447, fling: { basePower: 10, }, onBasePowerPriority: 15, onBasePower(basePower, user, target, move) { if (move.type === 'Bug') { return this.chainModify([4915, 4096]); } }, num: 222, gen: 2, }, sitrusberry: { name: "Sitrus Berry", spritenum: 448, isBerry: true, naturalGift: { basePower: 80, type: "Psychic", }, onUpdate(pokemon) { if (pokemon.hp <= pokemon.maxhp / 2) { pokemon.eatItem(); } }, onTryEatItem(item, pokemon) { if (!this.runEvent('TryHeal', pokemon, null, this.effect, pokemon.baseMaxhp / 4)) return false; }, onEat(pokemon) { this.heal(pokemon.baseMaxhp / 4); }, num: 158, gen: 3, }, skullfossil: { name: "Skull Fossil", spritenum: 449, fling: { basePower: 100, }, num: 105, gen: 4, isNonstandard: "Past", }, skyplate: { name: "Sky Plate", spritenum: 450, onPlate: 'Flying', onBasePowerPriority: 15, onBasePower(basePower, user, target, move) { if (move.type === 'Flying') { return this.chainModify([4915, 4096]); } }, onTakeItem(item, pokemon, source) { if ((source && source.baseSpecies.num === 493) || pokemon.baseSpecies.num === 493) { return false; } return true; }, forcedForme: "Arceus-Flying", num: 306, gen: 4, }, slowbronite: { name: "Slowbronite", spritenum: 620, megaStone: "Slowbro-Mega", megaEvolves: "Slowbro", itemUser: ["Slowbro"], onTakeItem(item, source) { if (item.megaEvolves === source.baseSpecies.baseSpecies) return false; return true; }, num: 760, gen: 6, isNonstandard: "Past", }, smoothrock: { name: "Smooth Rock", spritenum: 453, fling: { basePower: 10, }, num: 283, gen: 4, }, snorliumz: { name: "Snorlium Z", spritenum: 656, onTakeItem: false, zMove: "Pulverizing Pancake", zMoveFrom: "Giga Impact", itemUser: ["Snorlax"], num: 804, gen: 7, isNonstandard: "Past", }, snowball: { name: "Snowball", spritenum: 606, fling: { basePower: 30, }, onDamagingHit(damage, target, source, move) { if (move.type === 'Ice') { target.useItem(); } }, boosts: { atk: 1, }, num: 649, gen: 6, }, softsand: { name: "Soft Sand", spritenum: 456, fling: { basePower: 10, }, onBasePowerPriority: 15, onBasePower(basePower, user, target, move) { if (move.type === 'Ground') { return this.chainModify([4915, 4096]); } }, num: 237, gen: 2, }, solganiumz: { name: "Solganium Z", spritenum: 685, onTakeItem: false, zMove: "Searing Sunraze Smash", zMoveFrom: "Sunsteel Strike", itemUser: ["Solgaleo", "Necrozma-Dusk-Mane"], num: 921, gen: 7, isNonstandard: "Past", }, souldew: { name: "Soul Dew", spritenum: 459, fling: { basePower: 30, }, onBasePowerPriority: 15, onBasePower(basePower, user, target, move) { if ( move && (user.baseSpecies.num === 380 || user.baseSpecies.num === 381) && (move.type === 'Psychic' || move.type === 'Dragon') ) { return this.chainModify([4915, 4096]); } }, itemUser: ["Latios", "Latias"], num: 225, gen: 3, }, spelltag: { name: "Spell Tag", spritenum: 461, fling: { basePower: 30, }, onBasePowerPriority: 15, onBasePower(basePower, user, target, move) { if (move.type === 'Ghost') { return this.chainModify([4915, 4096]); } }, num: 247, gen: 2, }, spelonberry: { name: "Spelon Berry", spritenum: 462, isBerry: true, naturalGift: { basePower: 90, type: "Dark", }, onEat: false, num: 179, gen: 3, isNonstandard: "Past", }, splashplate: { name: "Splash Plate", spritenum: 463, onPlate: 'Water', onBasePowerPriority: 15, onBasePower(basePower, user, target, move) { if (move.type === 'Water') { return this.chainModify([4915, 4096]); } }, onTakeItem(item, pokemon, source) { if ((source && source.baseSpecies.num === 493) || pokemon.baseSpecies.num === 493) { return false; } return true; }, forcedForme: "Arceus-Water", num: 299, gen: 4, }, spookyplate: { name: "Spooky Plate", spritenum: 464, onPlate: 'Ghost', onBasePowerPriority: 15, onBasePower(basePower, user, target, move) { if (move.type === 'Ghost') { return this.chainModify([4915, 4096]); } }, onTakeItem(item, pokemon, source) { if ((source && source.baseSpecies.num === 493) || pokemon.baseSpecies.num === 493) { return false; } return true; }, forcedForme: "Arceus-Ghost", num: 310, gen: 4, }, sportball: { name: "Sport Ball", spritenum: 465, num: 499, gen: 2, isPokeball: true, }, starfberry: { name: "Starf Berry", spritenum: 472, isBerry: true, naturalGift: { basePower: 100, type: "Psychic", }, onUpdate(pokemon) { if (pokemon.hp <= pokemon.maxhp / 4 || (pokemon.hp <= pokemon.maxhp / 2 && pokemon.hasAbility('gluttony') && pokemon.abilityState.gluttony)) { pokemon.eatItem(); } }, onEat(pokemon) { const stats: BoostID[] = []; let stat: BoostID; for (stat in pokemon.boosts) { if (stat !== 'accuracy' && stat !== 'evasion' && pokemon.boosts[stat] < 6) { stats.push(stat); } } if (stats.length) { const randomStat = this.sample(stats); const boost: SparseBoostsTable = {}; boost[randomStat] = 2; this.boost(boost); } }, num: 207, gen: 3, }, starsweet: { name: "Star Sweet", spritenum: 709, fling: { basePower: 10, }, num: 1114, gen: 8, }, steelixite: { name: "Steelixite", spritenum: 621, megaStone: "Steelix-Mega", megaEvolves: "Steelix", itemUser: ["Steelix"], onTakeItem(item, source) { if (item.megaEvolves === source.baseSpecies.baseSpecies) return false; return true; }, num: 761, gen: 6, isNonstandard: "Past", }, steelgem: { name: "Steel Gem", spritenum: 473, isGem: true, onSourceTryPrimaryHit(target, source, move) { if (target === source || move.category === 'Status') return; if (move.type === 'Steel' && source.useItem()) { source.addVolatile('gem'); } }, num: 563, gen: 5, isNonstandard: "Past", }, steelmemory: { name: "Steel Memory", spritenum: 675, onMemory: 'Steel', onTakeItem(item, pokemon, source) { if ((source && source.baseSpecies.num === 773) || pokemon.baseSpecies.num === 773) { return false; } return true; }, forcedForme: "Silvally-Steel", itemUser: ["Silvally-Steel"], num: 911, gen: 7, isNonstandard: "Past", }, steeliumz: { name: "Steelium Z", spritenum: 647, onPlate: 'Steel', onTakeItem: false, zMove: true, zMoveType: "Steel", forcedForme: "Arceus-Steel", num: 792, gen: 7, isNonstandard: "Past", }, stick: { name: "Stick", fling: { basePower: 60, }, spritenum: 475, onModifyCritRatio(critRatio, user) { if (this.toID(user.baseSpecies.baseSpecies) === 'farfetchd') { return critRatio + 2; } }, itemUser: ["Farfetch\u2019d"], num: 259, gen: 2, isNonstandard: "Past", }, stickybarb: { name: "Sticky Barb", spritenum: 476, fling: { basePower: 80, }, onResidualOrder: 28, onResidualSubOrder: 3, onResidual(pokemon) { this.damage(pokemon.baseMaxhp / 8); }, onHit(target, source, move) { if (source && source !== target && !source.item && move && this.checkMoveMakesContact(move, source, target)) { const barb = target.takeItem(); if (!barb) return; // Gen 4 Multitype source.setItem(barb); // no message for Sticky Barb changing hands } }, num: 288, gen: 4, }, stoneplate: { name: "Stone Plate", spritenum: 477, onPlate: 'Rock', onBasePowerPriority: 15, onBasePower(basePower, user, target, move) { if (move.type === 'Rock') { return this.chainModify([4915, 4096]); } }, onTakeItem(item, pokemon, source) { if ((source && source.baseSpecies.num === 493) || pokemon.baseSpecies.num === 493) { return false; } return true; }, forcedForme: "Arceus-Rock", num: 309, gen: 4, }, strangeball: { name: "Strange Ball", spritenum: 308, num: 1785, gen: 8, isPokeball: true, isNonstandard: "Unobtainable", }, strawberrysweet: { name: "Strawberry Sweet", spritenum: 704, fling: { basePower: 10, }, num: 1109, gen: 8, }, sunstone: { name: "Sun Stone", spritenum: 480, fling: { basePower: 30, }, num: 80, gen: 2, }, swampertite: { name: "Swampertite", spritenum: 612, megaStone: "Swampert-Mega", megaEvolves: "Swampert", itemUser: ["Swampert"], onTakeItem(item, source) { if (item.megaEvolves === source.baseSpecies.baseSpecies) return false; return true; }, num: 752, gen: 6, isNonstandard: "Past", }, sweetapple: { name: "Sweet Apple", spritenum: 711, fling: { basePower: 30, }, num: 1116, gen: 8, }, syrupyapple: { name: "Syrupy Apple", spritenum: 755, fling: { basePower: 30, }, num: 2402, gen: 9, }, tamatoberry: { name: "Tamato Berry", spritenum: 486, isBerry: true, naturalGift: { basePower: 90, type: "Psychic", }, onEat: false, num: 174, gen: 3, }, tangaberry: { name: "Tanga Berry", spritenum: 487, isBerry: true, naturalGift: { basePower: 80, type: "Bug", }, onSourceModifyDamage(damage, source, target, move) { if (move.type === 'Bug' && target.getMoveHitData(move).typeMod > 0) { const hitSub = target.volatiles['substitute'] && !move.flags['bypasssub'] && !(move.infiltrates && this.gen >= 6); if (hitSub) return; if (target.eatItem()) { this.debug('-50% reduction'); this.add('-enditem', target, this.effect, '[weaken]'); return this.chainModify(0.5); } } }, onEat() { }, num: 194, gen: 4, }, tapuniumz: { name: "Tapunium Z", spritenum: 653, onTakeItem: false, zMove: "Guardian of Alola", zMoveFrom: "Nature's Madness", itemUser: ["Tapu Koko", "Tapu Lele", "Tapu Bulu", "Tapu Fini"], num: 801, gen: 7, isNonstandard: "Past", }, tartapple: { name: "Tart Apple", spritenum: 712, fling: { basePower: 30, }, num: 1117, gen: 8, }, terrainextender: { name: "Terrain Extender", spritenum: 662, fling: { basePower: 60, }, num: 879, gen: 7, }, thickclub: { name: "Thick Club", spritenum: 491, fling: { basePower: 90, }, onModifyAtkPriority: 1, onModifyAtk(atk, pokemon) { if (pokemon.baseSpecies.baseSpecies === 'Cubone' || pokemon.baseSpecies.baseSpecies === 'Marowak') { return this.chainModify(2); } }, itemUser: ["Marowak", "Marowak-Alola", "Marowak-Alola-Totem", "Cubone"], num: 258, gen: 2, isNonstandard: "Past", }, throatspray: { name: "Throat Spray", spritenum: 713, fling: { basePower: 30, }, onAfterMoveSecondarySelf(target, source, move) { if (move.flags['sound']) { target.useItem(); } }, boosts: { spa: 1, }, num: 1118, gen: 8, }, thunderstone: { name: "Thunder Stone", spritenum: 492, fling: { basePower: 30, }, num: 83, gen: 1, }, timerball: { name: "Timer Ball", spritenum: 494, num: 10, gen: 3, isPokeball: true, }, toxicorb: { name: "Toxic Orb", spritenum: 515, fling: { basePower: 30, status: 'tox', }, onResidualOrder: 28, onResidualSubOrder: 3, onResidual(pokemon) { pokemon.trySetStatus('tox', pokemon); }, num: 272, gen: 4, }, toxicplate: { name: "Toxic Plate", spritenum: 516, onPlate: 'Poison', onBasePowerPriority: 15, onBasePower(basePower, user, target, move) { if (move.type === 'Poison') { return this.chainModify([4915, 4096]); } }, onTakeItem(item, pokemon, source) { if ((source && source.baseSpecies.num === 493) || pokemon.baseSpecies.num === 493) { return false; } return true; }, forcedForme: "Arceus-Poison", num: 304, gen: 4, }, tr00: { name: "TR00", fling: { basePower: 10, }, spritenum: 721, num: 1130, gen: 8, isNonstandard: "Past", }, tr01: { name: "TR01", fling: { basePower: 85, }, spritenum: 721, num: 1131, gen: 8, isNonstandard: "Past", }, tr02: { name: "TR02", fling: { basePower: 90, }, spritenum: 730, num: 1132, gen: 8, isNonstandard: "Past", }, tr03: { name: "TR03", fling: { basePower: 110, }, spritenum: 731, num: 1133, gen: 8, isNonstandard: "Past", }, tr04: { name: "TR04", fling: { basePower: 90, }, spritenum: 731, num: 1134, gen: 8, isNonstandard: "Past", }, tr05: { name: "TR05", fling: { basePower: 90, }, spritenum: 735, num: 1135, gen: 8, isNonstandard: "Past", }, tr06: { name: "TR06", fling: { basePower: 110, }, spritenum: 735, num: 1136, gen: 8, isNonstandard: "Past", }, tr07: { name: "TR07", fling: { basePower: 10, }, spritenum: 722, num: 1137, gen: 8, isNonstandard: "Past", }, tr08: { name: "TR08", fling: { basePower: 90, }, spritenum: 733, num: 1138, gen: 8, isNonstandard: "Past", }, tr09: { name: "TR09", fling: { basePower: 110, }, spritenum: 733, num: 1139, gen: 8, isNonstandard: "Past", }, tr10: { name: "TR10", fling: { basePower: 100, }, spritenum: 725, num: 1140, gen: 8, isNonstandard: "Past", }, tr11: { name: "TR11", fling: { basePower: 90, }, spritenum: 734, num: 1141, gen: 8, isNonstandard: "Past", }, tr12: { name: "TR12", fling: { basePower: 10, }, spritenum: 734, num: 1142, gen: 8, isNonstandard: "Past", }, tr13: { name: "TR13", fling: { basePower: 10, }, spritenum: 721, num: 1143, gen: 8, isNonstandard: "Past", }, tr14: { name: "TR14", fling: { basePower: 10, }, spritenum: 721, num: 1144, gen: 8, isNonstandard: "Past", }, tr15: { name: "TR15", fling: { basePower: 110, }, spritenum: 730, num: 1145, gen: 8, isNonstandard: "Past", }, tr16: { name: "TR16", fling: { basePower: 80, }, spritenum: 731, num: 1146, gen: 8, isNonstandard: "Past", }, tr17: { name: "TR17", fling: { basePower: 10, }, spritenum: 734, num: 1147, gen: 8, isNonstandard: "Past", }, tr18: { name: "TR18", fling: { basePower: 80, }, spritenum: 727, num: 1148, gen: 8, isNonstandard: "Past", }, tr19: { name: "TR19", fling: { basePower: 80, }, spritenum: 721, num: 1149, gen: 8, isNonstandard: "Past", }, tr20: { name: "TR20", fling: { basePower: 10, }, spritenum: 721, num: 1150, gen: 8, isNonstandard: "Past", }, tr21: { name: "TR21", fling: { basePower: 10, }, spritenum: 722, num: 1151, gen: 8, isNonstandard: "Past", }, tr22: { name: "TR22", fling: { basePower: 90, }, spritenum: 724, num: 1152, gen: 8, isNonstandard: "Past", }, tr23: { name: "TR23", fling: { basePower: 10, }, spritenum: 725, num: 1153, gen: 8, isNonstandard: "Past", }, tr24: { name: "TR24", fling: { basePower: 120, }, spritenum: 736, num: 1154, gen: 8, isNonstandard: "Past", }, tr25: { name: "TR25", fling: { basePower: 80, }, spritenum: 734, num: 1155, gen: 8, isNonstandard: "Past", }, tr26: { name: "TR26", fling: { basePower: 10, }, spritenum: 721, num: 1156, gen: 8, isNonstandard: "Past", }, tr27: { name: "TR27", fling: { basePower: 10, }, spritenum: 721, num: 1157, gen: 8, isNonstandard: "Past", }, tr28: { name: "TR28", fling: { basePower: 120, }, spritenum: 727, num: 1158, gen: 8, isNonstandard: "Past", }, tr29: { name: "TR29", fling: { basePower: 10, }, spritenum: 721, num: 1159, gen: 8, isNonstandard: "Past", }, tr30: { name: "TR30", fling: { basePower: 10, }, spritenum: 721, num: 1160, gen: 8, isNonstandard: "Past", }, tr31: { name: "TR31", fling: { basePower: 100, }, spritenum: 729, num: 1161, gen: 8, isNonstandard: "Past", }, tr32: { name: "TR32", fling: { basePower: 80, }, spritenum: 737, num: 1162, gen: 8, isNonstandard: "Past", }, tr33: { name: "TR33", fling: { basePower: 80, }, spritenum: 728, num: 1163, gen: 8, isNonstandard: "Past", }, tr34: { name: "TR34", fling: { basePower: 120, }, spritenum: 734, num: 1164, gen: 8, isNonstandard: "Past", }, tr35: { name: "TR35", fling: { basePower: 90, }, spritenum: 721, num: 1165, gen: 8, isNonstandard: "Past", }, tr36: { name: "TR36", fling: { basePower: 95, }, spritenum: 730, num: 1166, gen: 8, isNonstandard: "Past", }, tr37: { name: "TR37", fling: { basePower: 10, }, spritenum: 737, num: 1167, gen: 8, isNonstandard: "Past", }, tr38: { name: "TR38", fling: { basePower: 10, }, spritenum: 734, num: 1168, gen: 8, isNonstandard: "Past", }, tr39: { name: "TR39", fling: { basePower: 120, }, spritenum: 722, num: 1169, gen: 8, isNonstandard: "Past", }, tr40: { name: "TR40", fling: { basePower: 10, }, spritenum: 734, num: 1170, gen: 8, isNonstandard: "Past", }, tr41: { name: "TR41", fling: { basePower: 85, }, spritenum: 730, num: 1171, gen: 8, isNonstandard: "Past", }, tr42: { name: "TR42", fling: { basePower: 90, }, spritenum: 721, num: 1172, gen: 8, isNonstandard: "Past", }, tr43: { name: "TR43", fling: { basePower: 130, }, spritenum: 730, num: 1173, gen: 8, isNonstandard: "Past", }, tr44: { name: "TR44", fling: { basePower: 10, }, spritenum: 734, num: 1174, gen: 8, isNonstandard: "Past", }, tr45: { name: "TR45", fling: { basePower: 90, }, spritenum: 731, num: 1175, gen: 8, isNonstandard: "Past", }, tr46: { name: "TR46", fling: { basePower: 10, }, spritenum: 729, num: 1176, gen: 8, isNonstandard: "Past", }, tr47: { name: "TR47", fling: { basePower: 80, }, spritenum: 736, num: 1177, gen: 8, isNonstandard: "Past", }, tr48: { name: "TR48", fling: { basePower: 10, }, spritenum: 722, num: 1178, gen: 8, isNonstandard: "Past", }, tr49: { name: "TR49", fling: { basePower: 10, }, spritenum: 734, num: 1179, gen: 8, isNonstandard: "Past", }, tr50: { name: "TR50", fling: { basePower: 90, }, spritenum: 732, num: 1180, gen: 8, isNonstandard: "Past", }, tr51: { name: "TR51", fling: { basePower: 10, }, spritenum: 736, num: 1181, gen: 8, isNonstandard: "Past", }, tr52: { name: "TR52", fling: { basePower: 10, }, spritenum: 729, num: 1182, gen: 8, isNonstandard: "Past", }, tr53: { name: "TR53", fling: { basePower: 120, }, spritenum: 722, num: 1183, gen: 8, isNonstandard: "Past", }, tr54: { name: "TR54", fling: { basePower: 10, }, spritenum: 724, num: 1184, gen: 8, isNonstandard: "Past", }, tr55: { name: "TR55", fling: { basePower: 120, }, spritenum: 730, num: 1185, gen: 8, isNonstandard: "Past", }, tr56: { name: "TR56", fling: { basePower: 80, }, spritenum: 722, num: 1186, gen: 8, isNonstandard: "Past", }, tr57: { name: "TR57", fling: { basePower: 80, }, spritenum: 724, num: 1187, gen: 8, isNonstandard: "Past", }, tr58: { name: "TR58", fling: { basePower: 80, }, spritenum: 737, num: 1188, gen: 8, isNonstandard: "Past", }, tr59: { name: "TR59", fling: { basePower: 80, }, spritenum: 732, num: 1189, gen: 8, isNonstandard: "Past", }, tr60: { name: "TR60", fling: { basePower: 80, }, spritenum: 727, num: 1190, gen: 8, isNonstandard: "Past", }, tr61: { name: "TR61", fling: { basePower: 90, }, spritenum: 727, num: 1191, gen: 8, isNonstandard: "Past", }, tr62: { name: "TR62", fling: { basePower: 85, }, spritenum: 736, num: 1192, gen: 8, isNonstandard: "Past", }, tr63: { name: "TR63", fling: { basePower: 80, }, spritenum: 726, num: 1193, gen: 8, isNonstandard: "Past", }, tr64: { name: "TR64", fling: { basePower: 120, }, spritenum: 722, num: 1194, gen: 8, isNonstandard: "Past", }, tr65: { name: "TR65", fling: { basePower: 90, }, spritenum: 732, num: 1195, gen: 8, isNonstandard: "Past", }, tr66: { name: "TR66", fling: { basePower: 120, }, spritenum: 723, num: 1196, gen: 8, isNonstandard: "Past", }, tr67: { name: "TR67", fling: { basePower: 90, }, spritenum: 725, num: 1197, gen: 8, isNonstandard: "Past", }, tr68: { name: "TR68", fling: { basePower: 10, }, spritenum: 737, num: 1198, gen: 8, isNonstandard: "Past", }, tr69: { name: "TR69", fling: { basePower: 80, }, spritenum: 734, num: 1199, gen: 8, isNonstandard: "Past", }, tr70: { name: "TR70", fling: { basePower: 80, }, spritenum: 729, num: 1200, gen: 8, isNonstandard: "Past", }, tr71: { name: "TR71", fling: { basePower: 130, }, spritenum: 732, num: 1201, gen: 8, isNonstandard: "Past", }, tr72: { name: "TR72", fling: { basePower: 120, }, spritenum: 732, num: 1202, gen: 8, isNonstandard: "Past", }, tr73: { name: "TR73", fling: { basePower: 120, }, spritenum: 724, num: 1203, gen: 8, isNonstandard: "Past", }, tr74: { name: "TR74", fling: { basePower: 80, }, spritenum: 729, num: 1204, gen: 8, isNonstandard: "Past", }, tr75: { name: "TR75", fling: { basePower: 100, }, spritenum: 726, num: 1205, gen: 8, isNonstandard: "Past", }, tr76: { name: "TR76", fling: { basePower: 10, }, spritenum: 726, num: 1206, gen: 8, isNonstandard: "Past", }, tr77: { name: "TR77", fling: { basePower: 10, }, spritenum: 732, num: 1207, gen: 8, isNonstandard: "Past", }, tr78: { name: "TR78", fling: { basePower: 95, }, spritenum: 724, num: 1208, gen: 8, isNonstandard: "Past", }, tr79: { name: "TR79", fling: { basePower: 10, }, spritenum: 729, num: 1209, gen: 8, isNonstandard: "Past", }, tr80: { name: "TR80", fling: { basePower: 10, }, spritenum: 733, num: 1210, gen: 8, isNonstandard: "Past", }, tr81: { name: "TR81", fling: { basePower: 95, }, spritenum: 737, num: 1211, gen: 8, isNonstandard: "Past", }, tr82: { name: "TR82", fling: { basePower: 20, }, spritenum: 734, num: 1212, gen: 8, isNonstandard: "Past", }, tr83: { name: "TR83", fling: { basePower: 10, }, spritenum: 734, num: 1213, gen: 8, isNonstandard: "Past", }, tr84: { name: "TR84", fling: { basePower: 80, }, spritenum: 731, num: 1214, gen: 8, isNonstandard: "Past", }, tr85: { name: "TR85", fling: { basePower: 10, }, spritenum: 721, num: 1215, gen: 8, isNonstandard: "Past", }, tr86: { name: "TR86", fling: { basePower: 90, }, spritenum: 733, num: 1216, gen: 8, isNonstandard: "Past", }, tr87: { name: "TR87", fling: { basePower: 80, }, spritenum: 725, num: 1217, gen: 8, isNonstandard: "Past", }, tr88: { name: "TR88", fling: { basePower: 10, }, spritenum: 730, num: 1218, gen: 8, isNonstandard: "Past", }, tr89: { name: "TR89", fling: { basePower: 110, }, spritenum: 723, num: 1219, gen: 8, isNonstandard: "Past", }, tr90: { name: "TR90", fling: { basePower: 90, }, spritenum: 738, num: 1220, gen: 8, isNonstandard: "Past", }, tr91: { name: "TR91", fling: { basePower: 10, }, spritenum: 724, num: 1221, gen: 8, isNonstandard: "Past", }, tr92: { name: "TR92", fling: { basePower: 80, }, spritenum: 738, num: 1222, gen: 8, isNonstandard: "Past", }, tr93: { name: "TR93", fling: { basePower: 85, }, spritenum: 737, num: 1223, gen: 8, isNonstandard: "Past", }, tr94: { name: "TR94", fling: { basePower: 95, }, spritenum: 725, num: 1224, gen: 8, isNonstandard: "Past", }, tr95: { name: "TR95", fling: { basePower: 80, }, spritenum: 737, num: 1225, gen: 8, isNonstandard: "Past", }, tr96: { name: "TR96", fling: { basePower: 90, }, spritenum: 727, num: 1226, gen: 8, isNonstandard: "Past", }, tr97: { name: "TR97", fling: { basePower: 85, }, spritenum: 734, num: 1227, gen: 8, isNonstandard: "Past", }, tr98: { name: "TR98", fling: { basePower: 85, }, spritenum: 731, num: 1228, gen: 8, isNonstandard: "Past", }, tr99: { name: "TR99", fling: { basePower: 80, }, spritenum: 722, num: 1229, gen: 8, isNonstandard: "Past", }, twistedspoon: { name: "Twisted Spoon", spritenum: 520, fling: { basePower: 30, }, onBasePowerPriority: 15, onBasePower(basePower, user, target, move) { if (move.type === 'Psychic') { return this.chainModify([4915, 4096]); } }, num: 248, gen: 2, }, tyranitarite: { name: "Tyranitarite", spritenum: 607, megaStone: "Tyranitar-Mega", megaEvolves: "Tyranitar", itemUser: ["Tyranitar"], onTakeItem(item, source) { if (item.megaEvolves === source.baseSpecies.baseSpecies) return false; return true; }, num: 669, gen: 6, isNonstandard: "Past", }, ultraball: { name: "Ultra Ball", spritenum: 521, num: 2, gen: 1, isPokeball: true, }, ultranecroziumz: { name: "Ultranecrozium Z", spritenum: 687, onTakeItem: false, zMove: "Light That Burns the Sky", zMoveFrom: "Photon Geyser", itemUser: ["Necrozma-Ultra"], num: 923, gen: 7, isNonstandard: "Past", }, unremarkableteacup: { name: "Unremarkable Teacup", spritenum: 756, fling: { basePower: 80, }, num: 2403, gen: 9, }, upgrade: { name: "Up-Grade", spritenum: 523, fling: { basePower: 30, }, num: 252, gen: 2, }, utilityumbrella: { name: "Utility Umbrella", spritenum: 718, fling: { basePower: 60, }, // Partially implemented in Pokemon.effectiveWeather() in sim/pokemon.ts onStart(pokemon) { if (!pokemon.ignoringItem()) return; if (['sunnyday', 'raindance', 'desolateland', 'primordialsea'].includes(this.field.effectiveWeather())) { this.runEvent('WeatherChange', pokemon, pokemon, this.effect); } }, onUpdate(pokemon) { if (!this.effectState.inactive) return; this.effectState.inactive = false; if (['sunnyday', 'raindance', 'desolateland', 'primordialsea'].includes(this.field.effectiveWeather())) { this.runEvent('WeatherChange', pokemon, pokemon, this.effect); } }, onEnd(pokemon) { if (['sunnyday', 'raindance', 'desolateland', 'primordialsea'].includes(this.field.effectiveWeather())) { this.runEvent('WeatherChange', pokemon, pokemon, this.effect); } this.effectState.inactive = true; }, num: 1123, gen: 8, }, venusaurite: { name: "Venusaurite", spritenum: 608, megaStone: "Venusaur-Mega", megaEvolves: "Venusaur", itemUser: ["Venusaur"], onTakeItem(item, source) { if (item.megaEvolves === source.baseSpecies.baseSpecies) return false; return true; }, num: 659, gen: 6, isNonstandard: "Past", }, wacanberry: { name: "Wacan Berry", spritenum: 526, isBerry: true, naturalGift: { basePower: 80, type: "Electric", }, onSourceModifyDamage(damage, source, target, move) { if (move.type === 'Electric' && target.getMoveHitData(move).typeMod > 0) { const hitSub = target.volatiles['substitute'] && !move.flags['bypasssub'] && !(move.infiltrates && this.gen >= 6); if (hitSub) return; if (target.eatItem()) { this.debug('-50% reduction'); this.add('-enditem', target, this.effect, '[weaken]'); return this.chainModify(0.5); } } }, onEat() { }, num: 186, gen: 4, }, watergem: { name: "Water Gem", spritenum: 528, isGem: true, onSourceTryPrimaryHit(target, source, move) { if (target === source || move.category === 'Status' || move.flags['pledgecombo']) return; if (move.type === 'Water' && source.useItem()) { source.addVolatile('gem'); } }, num: 549, gen: 5, isNonstandard: "Past", }, watermemory: { name: "Water Memory", spritenum: 677, onMemory: 'Water', onTakeItem(item, pokemon, source) { if ((source && source.baseSpecies.num === 773) || pokemon.baseSpecies.num === 773) { return false; } return true; }, forcedForme: "Silvally-Water", itemUser: ["Silvally-Water"], num: 913, gen: 7, isNonstandard: "Past", }, waterstone: { name: "Water Stone", spritenum: 529, fling: { basePower: 30, }, num: 84, gen: 1, }, wateriumz: { name: "Waterium Z", spritenum: 633, onPlate: 'Water', onTakeItem: false, zMove: true, zMoveType: "Water", forcedForme: "Arceus-Water", num: 778, gen: 7, isNonstandard: "Past", }, watmelberry: { name: "Watmel Berry", spritenum: 530, isBerry: true, naturalGift: { basePower: 100, type: "Fire", }, onEat: false, num: 181, gen: 3, isNonstandard: "Past", }, waveincense: { name: "Wave Incense", spritenum: 531, fling: { basePower: 10, }, onBasePowerPriority: 15, onBasePower(basePower, user, target, move) { if (move.type === 'Water') { return this.chainModify([4915, 4096]); } }, num: 317, gen: 4, isNonstandard: "Past", }, weaknesspolicy: { name: "Weakness Policy", spritenum: 609, fling: { basePower: 80, }, onDamagingHit(damage, target, source, move) { if (!move.damage && !move.damageCallback && target.getMoveHitData(move).typeMod > 0) { target.useItem(); } }, boosts: { atk: 2, spa: 2, }, num: 639, gen: 6, }, wellspringmask: { name: "Wellspring Mask", spritenum: 759, fling: { basePower: 60, }, onBasePowerPriority: 15, onBasePower(basePower, user, target, move) { if (user.baseSpecies.name.startsWith('Ogerpon-Wellspring')) { return this.chainModify([4915, 4096]); } }, onTakeItem(item, source) { if (source.baseSpecies.baseSpecies === 'Ogerpon') return false; return true; }, forcedForme: "Ogerpon-Wellspring", itemUser: ["Ogerpon-Wellspring"], num: 2407, gen: 9, }, wepearberry: { name: "Wepear Berry", spritenum: 533, isBerry: true, naturalGift: { basePower: 90, type: "Electric", }, onEat: false, num: 167, gen: 3, isNonstandard: "Past", }, whippeddream: { name: "Whipped Dream", spritenum: 692, fling: { basePower: 80, }, num: 646, gen: 6, isNonstandard: "Past", }, whiteherb: { name: "White Herb", spritenum: 535, fling: { basePower: 10, effect(pokemon) { let activate = false; const boosts: SparseBoostsTable = {}; let i: BoostID; for (i in pokemon.boosts) { if (pokemon.boosts[i] < 0) { activate = true; boosts[i] = 0; } } if (activate) { pokemon.setBoost(boosts); this.add('-clearnegativeboost', pokemon, '[silent]'); } }, }, onAnySwitchInPriority: -2, onAnySwitchIn() { ((this.effect as any).onUpdate as (p: Pokemon) => void).call(this, this.effectState.target); }, onStart(pokemon) { ((this.effect as any).onUpdate as (p: Pokemon) => void).call(this, pokemon); }, onUpdate(pokemon) { let activate = false; const boosts: SparseBoostsTable = {}; let i: BoostID; for (i in pokemon.boosts) { if (pokemon.boosts[i] < 0) { activate = true; boosts[i] = 0; } } if (activate && pokemon.useItem()) { pokemon.setBoost(boosts); this.add('-clearnegativeboost', pokemon, '[silent]'); } }, num: 214, gen: 3, }, widelens: { name: "Wide Lens", spritenum: 537, fling: { basePower: 10, }, onSourceModifyAccuracyPriority: -2, onSourceModifyAccuracy(accuracy) { if (typeof accuracy === 'number') { return this.chainModify([4505, 4096]); } }, num: 265, gen: 4, }, wikiberry: { name: "Wiki Berry", spritenum: 538, isBerry: true, naturalGift: { basePower: 80, type: "Rock", }, onUpdate(pokemon) { if (pokemon.hp <= pokemon.maxhp / 4 || (pokemon.hp <= pokemon.maxhp / 2 && pokemon.hasAbility('gluttony') && pokemon.abilityState.gluttony)) { pokemon.eatItem(); } }, onTryEatItem(item, pokemon) { if (!this.runEvent('TryHeal', pokemon, null, this.effect, pokemon.baseMaxhp / 3)) return false; }, onEat(pokemon) { this.heal(pokemon.baseMaxhp / 3); if (pokemon.getNature().minus === 'spa') { pokemon.addVolatile('confusion'); } }, num: 160, gen: 3, }, wiseglasses: { name: "Wise Glasses", spritenum: 539, fling: { basePower: 10, }, onBasePowerPriority: 16, onBasePower(basePower, user, target, move) { if (move.category === 'Special') { return this.chainModify([4505, 4096]); } }, num: 267, gen: 4, }, yacheberry: { name: "Yache Berry", spritenum: 567, isBerry: true, naturalGift: { basePower: 80, type: "Ice", }, onSourceModifyDamage(damage, source, target, move) { if (move.type === 'Ice' && target.getMoveHitData(move).typeMod > 0) { const hitSub = target.volatiles['substitute'] && !move.flags['bypasssub'] && !(move.infiltrates && this.gen >= 6); if (hitSub) return; if (target.eatItem()) { this.debug('-50% reduction'); this.add('-enditem', target, this.effect, '[weaken]'); return this.chainModify(0.5); } } }, onEat() { }, num: 188, gen: 4, }, zapplate: { name: "Zap Plate", spritenum: 572, onPlate: 'Electric', onBasePowerPriority: 15, onBasePower(basePower, user, target, move) { if (move.type === 'Electric') { return this.chainModify([4915, 4096]); } }, onTakeItem(item, pokemon, source) { if ((source && source.baseSpecies.num === 493) || pokemon.baseSpecies.num === 493) { return false; } return true; }, forcedForme: "Arceus-Electric", num: 300, gen: 4, }, zoomlens: { name: "Zoom Lens", spritenum: 574, fling: { basePower: 10, }, onSourceModifyAccuracyPriority: -2, onSourceModifyAccuracy(accuracy, target) { if (typeof accuracy === 'number' && !this.queue.willMove(target)) { this.debug('Zoom Lens boosting accuracy'); return this.chainModify([4915, 4096]); } }, num: 276, gen: 4, }, // Gen 2 items berserkgene: { name: "Berserk Gene", spritenum: 388, onUpdate(pokemon) { if (pokemon.useItem()) { pokemon.addVolatile('confusion'); } }, boosts: { atk: 2, }, num: 0, gen: 2, isNonstandard: "Past", }, berry: { name: "Berry", spritenum: 319, isBerry: true, naturalGift: { basePower: 80, type: "Poison", }, onResidualOrder: 10, onResidual(pokemon) { if (pokemon.hp <= pokemon.maxhp / 2) { pokemon.eatItem(); } }, onTryEatItem(item, pokemon) { if (!this.runEvent('TryHeal', pokemon, null, this.effect, 10)) return false; }, onEat(pokemon) { this.heal(10); }, num: 155, gen: 2, isNonstandard: "Past", }, bitterberry: { name: "Bitter Berry", spritenum: 334, isBerry: true, naturalGift: { basePower: 80, type: "Ground", }, onUpdate(pokemon) { if (pokemon.volatiles['confusion']) { pokemon.eatItem(); } }, onEat(pokemon) { pokemon.removeVolatile('confusion'); }, num: 156, gen: 2, isNonstandard: "Past", }, burntberry: { name: "Burnt Berry", spritenum: 13, isBerry: true, naturalGift: { basePower: 80, type: "Ice", }, onUpdate(pokemon) { if (pokemon.status === 'frz') { pokemon.eatItem(); } }, onEat(pokemon) { if (pokemon.status === 'frz') { pokemon.cureStatus(); } }, num: 153, gen: 2, isNonstandard: "Past", }, goldberry: { name: "Gold Berry", spritenum: 448, isBerry: true, naturalGift: { basePower: 80, type: "Psychic", }, onResidualOrder: 10, onResidual(pokemon) { if (pokemon.hp <= pokemon.maxhp / 2) { pokemon.eatItem(); } }, onTryEatItem(item, pokemon) { if (!this.runEvent('TryHeal', pokemon, null, this.effect, 30)) return false; }, onEat(pokemon) { this.heal(30); }, num: 158, gen: 2, isNonstandard: "Past", }, iceberry: { name: "Ice Berry", spritenum: 381, isBerry: true, naturalGift: { basePower: 80, type: "Grass", }, onUpdate(pokemon) { if (pokemon.status === 'brn') { pokemon.eatItem(); } }, onEat(pokemon) { if (pokemon.status === 'brn') { pokemon.cureStatus(); } }, num: 152, gen: 2, isNonstandard: "Past", }, mintberry: { name: "Mint Berry", spritenum: 65, isBerry: true, naturalGift: { basePower: 80, type: "Water", }, onUpdate(pokemon) { if (pokemon.status === 'slp') { pokemon.eatItem(); } }, onEat(pokemon) { if (pokemon.status === 'slp') { pokemon.cureStatus(); } }, num: 150, gen: 2, isNonstandard: "Past", }, miracleberry: { name: "Miracle Berry", spritenum: 262, isBerry: true, naturalGift: { basePower: 80, type: "Flying", }, onUpdate(pokemon) { if (pokemon.status || pokemon.volatiles['confusion']) { pokemon.eatItem(); } }, onEat(pokemon) { pokemon.cureStatus(); pokemon.removeVolatile('confusion'); }, num: 157, gen: 2, isNonstandard: "Past", }, mysteryberry: { name: "Mystery Berry", spritenum: 244, isBerry: true, naturalGift: { basePower: 80, type: "Fighting", }, onUpdate(pokemon) { if (!pokemon.hp) return; const moveSlot = pokemon.lastMove && pokemon.getMoveData(pokemon.lastMove.id); if (moveSlot && moveSlot.pp === 0) { pokemon.addVolatile('leppaberry'); pokemon.volatiles['leppaberry'].moveSlot = moveSlot; pokemon.eatItem(); } }, onEat(pokemon) { let moveSlot; if (pokemon.volatiles['leppaberry']) { moveSlot = pokemon.volatiles['leppaberry'].moveSlot; pokemon.removeVolatile('leppaberry'); } else { let pp = 99; for (const possibleMoveSlot of pokemon.moveSlots) { if (possibleMoveSlot.pp < pp) { moveSlot = possibleMoveSlot; pp = moveSlot.pp; } } } moveSlot.pp += 5; if (moveSlot.pp > moveSlot.maxpp) moveSlot.pp = moveSlot.maxpp; this.add('-activate', pokemon, 'item: Mystery Berry', moveSlot.move); }, num: 154, gen: 2, isNonstandard: "Past", }, pinkbow: { name: "Pink Bow", spritenum: 444, onBasePower(basePower, user, target, move) { if (move.type === 'Normal') { return basePower * 1.1; } }, num: 251, gen: 2, isNonstandard: "Past", }, polkadotbow: { name: "Polkadot Bow", spritenum: 444, onBasePower(basePower, user, target, move) { if (move.type === 'Normal') { return basePower * 1.1; } }, num: 251, gen: 2, isNonstandard: "Past", }, przcureberry: { name: "PRZ Cure Berry", spritenum: 63, isBerry: true, naturalGift: { basePower: 80, type: "Fire", }, onUpdate(pokemon) { if (pokemon.status === 'par') { pokemon.eatItem(); } }, onEat(pokemon) { if (pokemon.status === 'par') { pokemon.cureStatus(); } }, num: 149, gen: 2, isNonstandard: "Past", }, psncureberry: { name: "PSN Cure Berry", spritenum: 333, isBerry: true, naturalGift: { basePower: 80, type: "Electric", }, onUpdate(pokemon) { if (pokemon.status === 'psn' || pokemon.status === 'tox') { pokemon.eatItem(); } }, onEat(pokemon) { if (pokemon.status === 'psn' || pokemon.status === 'tox') { pokemon.cureStatus(); } }, num: 151, gen: 2, isNonstandard: "Past", }, // CAP items crucibellite: { name: "Crucibellite", spritenum: 577, megaStone: "Crucibelle-Mega", megaEvolves: "Crucibelle", itemUser: ["Crucibelle"], onTakeItem(item, source) { if (item.megaEvolves === source.baseSpecies.baseSpecies) return false; return true; }, num: -1, gen: 6, isNonstandard: "CAP", }, vilevial: { name: "Vile Vial", spritenum: 752, fling: { basePower: 60, }, onBasePowerPriority: 15, onBasePower(basePower, user, target, move) { if (user.baseSpecies.num === -66 && ['Poison', 'Flying'].includes(move.type)) { return this.chainModify([4915, 4096]); } }, onTakeItem(item, pokemon, source) { if (source?.baseSpecies.num === -66 || pokemon.baseSpecies.num === -66) { return false; } return true; }, forcedForme: "Venomicon-Epilogue", itemUser: ["Venomicon-Epilogue"], num: -2, gen: 8, isNonstandard: "CAP", }, };