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