Spaces:
Paused
Paused
| 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", | |
| }, | |
| }; | |