mirror of
https://github.com/smogon/pokemon-showdown.git
synced 2026-05-27 19:07:58 -05:00
834 lines
22 KiB
TypeScript
834 lines
22 KiB
TypeScript
export const Items: {[itemid: string]: ModdedItemData} = {
|
|
boomerang: {
|
|
name: "Boomerang",
|
|
fling: {
|
|
basePower: 120,
|
|
},
|
|
num: -1001,
|
|
gen: 8,
|
|
desc: "Comes back to the user when flung.",
|
|
},
|
|
momentumarmor: {
|
|
name: "Momentum Armor",
|
|
fling: {
|
|
basePower: 80,
|
|
},
|
|
onModifyAtkPriority: 1,
|
|
onModifyAtk(atk, pokemon) {
|
|
const def = pokemon.getStat('def', false, true);
|
|
const newAtk = atk + (def / 4);
|
|
return newAtk;
|
|
},
|
|
num: -1002,
|
|
gen: 8,
|
|
desc: "Boosts the user's Attack by 25% of its Defense.",
|
|
},
|
|
shellbell: {
|
|
name: "Shell Bell",
|
|
spritenum: 438,
|
|
fling: {
|
|
basePower: 40,
|
|
},
|
|
onAfterMoveSecondarySelfPriority: -1,
|
|
onAfterMoveSecondarySelf(pokemon, target, move) {
|
|
if (move.category !== 'Status') {
|
|
this.heal(pokemon.baseMaxhp / 8);
|
|
}
|
|
},
|
|
num: 253,
|
|
gen: 3,
|
|
desc: "The holder heals 12.5% of their max HP upon successfully damaging a Pokemon with an attack.",
|
|
},
|
|
honey: {
|
|
name: "Honey",
|
|
fling: {
|
|
basePower: 30,
|
|
},
|
|
num: -1003,
|
|
gen: 4,
|
|
shortDesc: "Pokemon with the ability Honey Gather or Sweet Veil heal 12.5% when holding this item.",
|
|
},
|
|
eviolith: {
|
|
name: "Eviolith",
|
|
spritenum: 130,
|
|
fling: {
|
|
basePower: 40,
|
|
},
|
|
onModifyAtkPriority: 2,
|
|
onModifyAtk(atk, pokemon) {
|
|
if (pokemon.baseSpecies.nfe) {
|
|
return this.chainModify(1.5);
|
|
}
|
|
},
|
|
onModifySpAPriority: 2,
|
|
onModifySpA(spa, pokemon) {
|
|
if (pokemon.baseSpecies.nfe) {
|
|
return this.chainModify(1.5);
|
|
}
|
|
},
|
|
num: -1004,
|
|
gen: 8,
|
|
desc: "If holder's species can evolve, its Atk and Sp. Atk are 1.5x.",
|
|
},
|
|
reliccharm: {
|
|
name: "Relic Charm",
|
|
spritenum: 390,
|
|
onSwitchIn(pokemon) {
|
|
if (pokemon.isActive && pokemon.baseSpecies.name === 'Meloetta') {
|
|
pokemon.formeChange('Meloetta-Pirouette');
|
|
}
|
|
},
|
|
onBasePower(basePower, user, target, move) {
|
|
if (move && move.type === 'Fighting') {
|
|
return this.chainModify([0x1333, 0x1000]);
|
|
}
|
|
},
|
|
onTakeItem(item, source) {
|
|
if (source.baseSpecies.baseSpecies === 'Meloetta') return false;
|
|
return true;
|
|
},
|
|
itemUser: ["Meloetta"],
|
|
num: -1005,
|
|
gen: 8,
|
|
desc: "If held by Meloetta: Pirouette Forme on entry, 1.2x power Fighting-type attacks.",
|
|
},
|
|
chillpill: {
|
|
name: "Chill Pill",
|
|
spritenum: 390,
|
|
onStart(pokemon) {
|
|
if (pokemon.isActive && pokemon.baseSpecies.name === 'Darmanitan') {
|
|
if (!pokemon.species.name.includes('Galar')) {
|
|
if (pokemon.species.id !== 'darmanitanzen') pokemon.formeChange('Darmanitan-Zen');
|
|
pokemon.setAbility('psychicsurge', pokemon, true);
|
|
} else {
|
|
if (pokemon.species.id !== 'darmanitangalarzen') pokemon.formeChange('Darmanitan-Galar-Zen');
|
|
pokemon.setAbility('snowwarning', pokemon, true);
|
|
}
|
|
}
|
|
},
|
|
onBasePower(basePower, user, target, move) {
|
|
if (move && (
|
|
(user.species.id === 'darmanitanzen' && move.type === 'Psychic') ||
|
|
(user.species.id === 'darmanitangalarzen') && (move.type === 'Fire')
|
|
)) {
|
|
return this.chainModify([0x1333, 0x1000]);
|
|
}
|
|
},
|
|
onTakeItem(item, source) {
|
|
if (source.baseSpecies.baseSpecies === 'Darmanitan') return false;
|
|
return true;
|
|
},
|
|
itemUser: ["Darmanitan"],
|
|
num: -1006,
|
|
gen: 8,
|
|
desc: "If held by Darmanitan: Zen Mode and Psychic Terrain on entry, 1.2x power Psychic-type attacks.",
|
|
},
|
|
chillpillg: {
|
|
name: "Chill Pill G",
|
|
spritenum: 390,
|
|
onStart(pokemon) {
|
|
this.add('-item', pokemon, 'Chill Pill');
|
|
if (pokemon.baseSpecies.baseSpecies === 'Darmanitan' && pokemon.species.name.includes('Galar')) {
|
|
this.add('-formechange', pokemon, 'Darmanitan-Galar-Zen', '[msg]');
|
|
pokemon.formeChange("Darmanitan-Galar-Zen");
|
|
const oldAbility = pokemon.setAbility('snowwarning', pokemon, true);
|
|
if (oldAbility) {
|
|
this.add('-activate', pokemon, 'ability: Snow Warning', oldAbility, '[of] ' + pokemon);
|
|
}
|
|
}
|
|
},
|
|
onBasePower(basePower, user, target, move) {
|
|
if (move && user.species.id === 'darmanitangalarzen' && move.type === 'Fire') {
|
|
return this.chainModify([0x1333, 0x1000]);
|
|
}
|
|
},
|
|
onTakeItem(item, source) {
|
|
if (source.baseSpecies.baseSpecies === 'Darmanitan') return false;
|
|
return true;
|
|
},
|
|
itemUser: ["Darmanitan-Galar"],
|
|
num: -1006,
|
|
gen: 8,
|
|
desc: "If held by Darmanitan: Zen Mode and Hail on entry, 1.2x power Fire-type attacks.",
|
|
},
|
|
graduationscale: {
|
|
name: "Graduation Scale",
|
|
onStart(pokemon) {
|
|
pokemon.setAbility('intimidate', pokemon, true);
|
|
},
|
|
onTakeItem(item, source) {
|
|
if (source.baseSpecies.baseSpecies === 'Wishiwashi') return false;
|
|
return true;
|
|
},
|
|
fling: {
|
|
basePower: 20,
|
|
},
|
|
onBasePowerPriority: 6,
|
|
onBasePower(basePower, user, target, move) {
|
|
if (move && user.baseSpecies.num === 746 && move.type === 'Water') {
|
|
return this.chainModify([0x1333, 0x1000]);
|
|
}
|
|
},
|
|
gen: 7,
|
|
desc: "If holder is a Wishiwashi, it becomes School Form. Its ability becomes Intimidate. Water moves are boosted by 1.2x",
|
|
},
|
|
blunderpolicy: {
|
|
name: "Blunder Policy",
|
|
spritenum: 716,
|
|
fling: {
|
|
basePower: 80,
|
|
},
|
|
onUpdate(pokemon) {
|
|
if (pokemon.moveThisTurnResult === false) {
|
|
this.boost({spe: 2});
|
|
pokemon.useItem();
|
|
}
|
|
},
|
|
// Item activation located in scripts.js
|
|
num: 1121,
|
|
gen: 8,
|
|
desc: "+2 Speed if the holder's move fails. Single use.",
|
|
},
|
|
lightball: {
|
|
name: "Light Ball",
|
|
spritenum: 251,
|
|
fling: {
|
|
basePower: 30,
|
|
status: 'par',
|
|
},
|
|
onModifyAtkPriority: 1,
|
|
onModifyAtk(atk, pokemon) {
|
|
if (['Pikachu', 'Raichu', 'Togedemaru', 'Morpeko'].includes((pokemon.baseSpecies.baseSpecies))) {
|
|
return this.chainModify(1.5);
|
|
}
|
|
},
|
|
onModifyDefPriority: 1,
|
|
onModifyDef(def, pokemon) {
|
|
if (['Emolga', 'Dedenne', 'Togedemaru', 'Pachirisu'].includes(pokemon.baseSpecies.baseSpecies)) {
|
|
return this.chainModify(1.5);
|
|
}
|
|
},
|
|
onModifySpAPriority: 1,
|
|
onModifySpA(spa, pokemon) {
|
|
if (['Pikachu', 'Raichu', 'Raichu-Alola', 'Plusle', 'Dedenne'].includes(pokemon.baseSpecies.baseSpecies)) {
|
|
return this.chainModify(1.5);
|
|
}
|
|
},
|
|
onModifySpDPriority: 1,
|
|
onModifySpD(spd, pokemon) {
|
|
if (['Plusle', 'Minun', 'Pachirisu', 'Morpeko'].includes(pokemon.baseSpecies.baseSpecies)) {
|
|
return this.chainModify(1.5);
|
|
}
|
|
},
|
|
onModifySpePriority: 1,
|
|
onModifySpe(spe, pokemon) {
|
|
if (['Pikachu', 'Minun', 'Emolga'].includes(pokemon.baseSpecies.baseSpecies)) {
|
|
return this.chainModify(1.5);
|
|
}
|
|
},
|
|
itemUser: ["Pikachu", "Raichu", "Plusle", "Minun", "Emolga", "Morpeko", "Dedenne", "Togedemaru"],
|
|
num: 236,
|
|
gen: 2,
|
|
desc: "If held by Pikachu, Raichu, or a Pikaclone, 2 of its stats are boosted 1.5x.",
|
|
},
|
|
/*
|
|
soulblade: {
|
|
name: "Soul Blade",
|
|
spritenum: 297,
|
|
fling: {
|
|
basePower: 100,
|
|
},
|
|
onModifyDamage(damage, source, target, move) {
|
|
return this.chainModify([0x1199, 0x1000]);
|
|
},
|
|
gen: 8,
|
|
desc: "(Non-functional placeholder) The holder's moves deal 1.1x damage + .2x for every KO it has.",
|
|
},
|
|
*/
|
|
mentalherb: {
|
|
name: "Mental Herb",
|
|
spritenum: 285,
|
|
fling: {
|
|
basePower: 10,
|
|
effect(pokemon) {
|
|
const conditions = ['attract', 'taunt', 'encore', 'torment', 'disable', 'healblock', 'trashtalk'];
|
|
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', 'trashtalk'];
|
|
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,
|
|
},
|
|
morningblossom: {
|
|
name: "Morning Blossom",
|
|
spritenum: 297,
|
|
fling: {
|
|
basePower: 10,
|
|
},
|
|
onSwitchIn(pokemon) {
|
|
if (pokemon.isActive && pokemon.baseSpecies.name === 'Cherrim') {
|
|
this.field.setWeather('desolateland');
|
|
}
|
|
},
|
|
onSwitchOut(pokemon) {
|
|
this.field.clearWeather();
|
|
},
|
|
onFaint(pokemon) {
|
|
this.field.clearWeather();
|
|
},
|
|
onBasePower(basePower, user, target, move) {
|
|
if (move && move.type === 'Grass') {
|
|
return this.chainModify([0x1333, 0x1000]);
|
|
}
|
|
},
|
|
onTakeItem(item, source) {
|
|
if (source.baseSpecies.baseSpecies === 'Cherrim') return false;
|
|
return true;
|
|
},
|
|
onUpdate(pokemon) {
|
|
if (pokemon.volatiles['embargo']) {
|
|
this.add('-activate', pokemon, 'item: Morning Blossom');
|
|
pokemon.removeVolatile('embargo');
|
|
// Taunt's volatile already sends the -end message when removed
|
|
}
|
|
},
|
|
onTryHit(pokemon, target, move) {
|
|
if (move.id === 'embargo') {
|
|
this.add('-immune', pokemon, '[from] item: Morning Blossom');
|
|
return null;
|
|
}
|
|
},
|
|
itemUser: ["Cherrim"],
|
|
gen: 8,
|
|
desc: "If held by Cherrim: Desolate Land on entry, 1.2x power Grass-type attacks.",
|
|
},
|
|
absorbbulb: {
|
|
name: "Absorb Bulb",
|
|
spritenum: 2,
|
|
fling: {
|
|
basePower: 30,
|
|
},
|
|
onDamagingHit(damage, target, source, move) {
|
|
if (move.type === 'Water') {
|
|
target.useItem();
|
|
}
|
|
},
|
|
boosts: {
|
|
def: 1,
|
|
spa: 1,
|
|
spd: 1,
|
|
},
|
|
num: 545,
|
|
gen: 5,
|
|
desc: "Raises holder's Def, SpA, & SpD by 1 stage if hit by a Water-type attack. Single use.",
|
|
},
|
|
cellbattery: {
|
|
name: "Cell Battery",
|
|
spritenum: 60,
|
|
fling: {
|
|
basePower: 30,
|
|
},
|
|
onDamagingHit(damage, target, source, move) {
|
|
if (move.type === 'Electric') {
|
|
target.useItem();
|
|
}
|
|
},
|
|
boosts: {
|
|
atk: 1,
|
|
spe: 1,
|
|
accuracy: 1,
|
|
},
|
|
num: 546,
|
|
gen: 5,
|
|
desc: "Raises holder's Atk, Spe, & Acc by 1 stage if hit by an Electric-type attack. Single use.",
|
|
},
|
|
luminousmoss: {
|
|
name: "Luminous Moss",
|
|
spritenum: 595,
|
|
fling: {
|
|
basePower: 30,
|
|
},
|
|
onDamagingHit(damage, target, source, move) {
|
|
if (move.type === 'Grass') {
|
|
target.useItem();
|
|
}
|
|
},
|
|
boosts: {
|
|
spa: 2,
|
|
spd: 2,
|
|
},
|
|
num: 648,
|
|
gen: 6,
|
|
desc: "Raises holder's SpA & SpD by 2 stages if hit by a Grass-type attack. Single use.",
|
|
},
|
|
snowball: {
|
|
name: "Snowball",
|
|
spritenum: 606,
|
|
fling: {
|
|
basePower: 30,
|
|
},
|
|
onDamagingHit(damage, target, source, move) {
|
|
if (move.type === 'Ice') {
|
|
target.useItem();
|
|
}
|
|
},
|
|
boosts: {
|
|
atk: 2,
|
|
def: 2,
|
|
},
|
|
num: 649,
|
|
gen: 6,
|
|
desc: "Raises holder's Atk & Def by 2 stages if hit by an Ice-type attack. Single use.",
|
|
},
|
|
coalengine: {
|
|
name: "Coal Engine",
|
|
spritenum: 297,
|
|
fling: {
|
|
basePower: 60,
|
|
},
|
|
onStart(pokemon) {
|
|
if (pokemon.side.getSideCondition('stealthrock') && !pokemon.ignoringItem()) {
|
|
pokemon.useItem();
|
|
this.boost({spe: 1}, pokemon);
|
|
}
|
|
},
|
|
gen: 8,
|
|
desc: "If Stealth Rock is on the field, damage is ignored, and the user's Speed is raised by 1. Single use.",
|
|
},
|
|
tartapple: {
|
|
name: "Tart Apple",
|
|
spritenum: 712,
|
|
fling: {
|
|
basePower: 20,
|
|
},
|
|
onModifySpe(spe, pokemon) {
|
|
if (pokemon.baseSpecies.baseSpecies === 'Flapple') {
|
|
return this.chainModify(1.5);
|
|
}
|
|
},
|
|
onStart(pokemon) {
|
|
if (pokemon.baseSpecies.baseSpecies === 'Flapple') {
|
|
this.boost({accuracy: 2});
|
|
}
|
|
},
|
|
itemUser: ["Flapple"],
|
|
num: 1117,
|
|
gen: 8,
|
|
desc: "If the holder is Flapple: 1.5x Speed and +2 Accuracy.",
|
|
},
|
|
sweetapple: {
|
|
name: "Sweet Apple",
|
|
spritenum: 711,
|
|
fling: {
|
|
basePower: 20,
|
|
},
|
|
onResidualOrder: 5,
|
|
onResidualSubOrder: 5,
|
|
onResidual(pokemon) {
|
|
if (pokemon.baseSpecies.name === 'Appletun') {
|
|
this.heal(pokemon.baseMaxhp / 8);
|
|
}
|
|
},
|
|
onSourceModifyAtkPriority: 6,
|
|
onSourceModifyAtk(atk, attacker, defender, move) {
|
|
if (move.type === 'Poison') {
|
|
this.debug('Sweet Apple weaken');
|
|
return this.chainModify(0.5);
|
|
}
|
|
},
|
|
onSourceModifySpAPriority: 5,
|
|
onSourceModifySpA(atk, attacker, defender, move) {
|
|
if (move.type === 'Poison') {
|
|
this.debug('Sweet Apple weaken');
|
|
return this.chainModify(0.5);
|
|
}
|
|
},
|
|
onDamage(damage, target, source, effect) {
|
|
if (effect && (effect.id === 'tox' || effect.id === 'psn')) {
|
|
return damage / 2;
|
|
}
|
|
},
|
|
num: 1116,
|
|
gen: 8,
|
|
desc: "If the holder is Appletun: Heals 12.5% HP every turn and takes 50% damage from Poison moves and poison status.",
|
|
},
|
|
protector: {
|
|
name: "Protector",
|
|
spritenum: 367,
|
|
fling: {
|
|
basePower: 100,
|
|
},
|
|
onSourceModifyDamage(damage, source, target, move) {
|
|
if (target.getMoveHitData(move).typeMod > 0 && !target.hasAbility('solidrock') && !target.hasAbility('filter')) {
|
|
this.debug('Protector neutralize');
|
|
return this.chainModify(0.75);
|
|
}
|
|
},
|
|
num: 321,
|
|
gen: 4,
|
|
desc: "Super effective attacks deal 3/4 damage to the holder.",
|
|
},
|
|
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
|
|
}
|
|
},
|
|
onUpdate(pokemon) {
|
|
if (pokemon.volatiles['mustrecharge']) {
|
|
pokemon.removeVolatile('mustrecharge');
|
|
pokemon.useItem();
|
|
}
|
|
},
|
|
name: "Power Herb",
|
|
spritenum: 358,
|
|
fling: {
|
|
basePower: 10,
|
|
},
|
|
num: 271,
|
|
gen: 4,
|
|
desc: "Holder's two-turn moves and recharge complete in one turn (except Sky Drop). Single use.",
|
|
},
|
|
pillow: {
|
|
name: "Pillow",
|
|
spritenum: 242,
|
|
fling: {
|
|
basePower: 10,
|
|
// status: 'slp', Fixed
|
|
},
|
|
onResidualOrder: 5,
|
|
onResidualSubOrder: 5,
|
|
onResidual(pokemon) {
|
|
if (pokemon.status === 'slp' || pokemon.hasAbility('comatose')) {
|
|
this.heal(pokemon.baseMaxhp / 8);
|
|
}
|
|
},
|
|
/*
|
|
onStart(pokemon) {
|
|
if (pokemon.status === 'slp' || pokemon.hasAbility('comatose')) {
|
|
pokemon.addVolatile('pillow');
|
|
}
|
|
},
|
|
condition: {
|
|
onTryMovePriority: -2,
|
|
onTryMove(pokemon, target, move) {
|
|
if (!pokemon.hasItem('pillow') || (pokemon.status !== 'slp' && !pokemon.hasAbility('comatose'))) {
|
|
pokemon.removeVolatile('pillow');
|
|
return;
|
|
}
|
|
if (pokemon.status === 'slp' || pokemon.hasAbility('comatose')) {
|
|
this.useMove("Sleep Talk", pokemon);
|
|
}
|
|
},
|
|
},
|
|
*/
|
|
gen: 8,
|
|
desc: "(Bugged) Holder heals 12.5% HP while asleep. If asleep, calls a random attack.",
|
|
},
|
|
reapercloth: {
|
|
name: "Reaper Cloth",
|
|
spritenum: 385,
|
|
fling: {
|
|
basePower: 100,
|
|
},
|
|
onResidualOrder: 5,
|
|
onResidualSubOrder: 5,
|
|
onResidual(pokemon) {
|
|
if (pokemon.hasType('Ghost')) {
|
|
this.heal(pokemon.baseMaxhp / 16);
|
|
}
|
|
},
|
|
onDisableMove(pokemon) {
|
|
if (!pokemon.hasType('Ghost') && pokemon.lastMove && pokemon.lastMove.id !== 'struggle') {
|
|
pokemon.disableMove(pokemon.lastMove.id);
|
|
}
|
|
},
|
|
onTakeItem(item, source) {
|
|
if (source.hasType('Ghost')) return false;
|
|
return true;
|
|
},
|
|
num: 325,
|
|
gen: 4,
|
|
desc: "Each turn, if holder is a Ghost type, restores 1/16 max HP; is Tormented if not.",
|
|
},
|
|
chilipepper: {
|
|
name: "Chili Pepper",
|
|
spritenum: 13,
|
|
fling: {
|
|
basePower: 10,
|
|
status: 'brn',
|
|
},
|
|
onSetStatus(status, target, source, effect) {
|
|
if (status.id !== 'brn') return;
|
|
if ((effect as Move)?.status) {
|
|
this.add('-immune', target, '[from] item: Chili Pepper');
|
|
}
|
|
return false;
|
|
},
|
|
onUpdate(pokemon) {
|
|
if (pokemon.status === 'frz') {
|
|
this.add('-activate', pokemon, 'item: Chili Pepper');
|
|
pokemon.cureStatus();
|
|
pokemon.useItem();
|
|
}
|
|
},
|
|
desc: "The holder is immune to burns. Thaws the user and is consumed if the holder is frozen.",
|
|
},
|
|
widelens: {
|
|
name: "Wide Lens",
|
|
spritenum: 537,
|
|
fling: {
|
|
basePower: 10,
|
|
},
|
|
onSourceModifyAccuracyPriority: 4,
|
|
onSourceModifyAccuracy(accuracy) {
|
|
if (typeof accuracy === 'number') {
|
|
return accuracy * 1.2;
|
|
}
|
|
},
|
|
num: 265,
|
|
gen: 4,
|
|
desc: "The accuracy of attacks by the holder is 1.2x.",
|
|
},
|
|
zoomlens: {
|
|
name: "Zoom Lens",
|
|
spritenum: 574,
|
|
fling: {
|
|
basePower: 10,
|
|
},
|
|
onSourceModifyAccuracyPriority: 4,
|
|
onSourceModifyAccuracy(accuracy, target) {
|
|
if (typeof accuracy === 'number' && (!this.queue.willMove(target) || target.newlySwitched)) {
|
|
this.debug('Zoom Lens boosting accuracy');
|
|
return accuracy * 1.5;
|
|
}
|
|
},
|
|
num: 276,
|
|
gen: 4,
|
|
desc: "The accuracy of attacks by the holder is 1.5x if it moves lasts or the foe switches.",
|
|
},
|
|
whippeddream: {
|
|
name: "Whipped Dream",
|
|
spritenum: 692,
|
|
fling: {
|
|
basePower: 30,
|
|
},
|
|
onBasePowerPriority: 15,
|
|
onBasePower(basePower, user, target, move) {
|
|
if (move && move.type === 'Fairy') {
|
|
return this.chainModify([0x1333, 0x1000]);
|
|
}
|
|
},
|
|
num: 646,
|
|
gen: 6,
|
|
desc: "Holder's Fairy-type attacks have 1.2x power.",
|
|
},
|
|
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
|
|
num: 278,
|
|
gen: 4,
|
|
desc: "Holder's use of Gravity lasts 8 turns instead of 5. Grounds holder.",
|
|
},
|
|
cursedbelt: {
|
|
name: "Cursed Belt",
|
|
spritenum: 13,
|
|
fling: {
|
|
basePower: 10,
|
|
},
|
|
onAfterMoveSecondarySelf(target, source, move) {
|
|
if (move.category === 'Status') {
|
|
target.addVolatile('disable');
|
|
}
|
|
},
|
|
onModifyDamage(damage, source, target, move) {
|
|
if (source.volatiles['disable']) {
|
|
return this.chainModify(1.2);
|
|
}
|
|
},
|
|
desc: "When the holder uses a status move, it is disabled. Moves deal 1.2x damage while a move is disabled.",
|
|
},
|
|
utilityumbrella: {
|
|
name: "Utility Umbrella",
|
|
spritenum: 718,
|
|
fling: {
|
|
basePower: 60,
|
|
},
|
|
onImmunity(type, pokemon) {
|
|
if (type === 'sandstorm' || type === 'hail') return false;
|
|
},
|
|
onWeather(target, source, effect) {
|
|
if (this.field.isWeather(['sunnyday', 'desolateland', 'hail', 'raindance', 'primordialsea', 'sandstorm'])) {
|
|
this.heal(target.baseMaxhp / 12);
|
|
}
|
|
},
|
|
// Other effects implemented in statuses.js, moves.js, and abilities.js
|
|
num: 1123,
|
|
gen: 8,
|
|
desc: "The holder ignores rain- and sun-based effects & weather damage. Heals 1/12 of its max HP in weather.",
|
|
},
|
|
nightlightball: {
|
|
name: "Nightlight Ball",
|
|
spritenum: 251,
|
|
fling: {
|
|
basePower: 90,
|
|
status: 'brn',
|
|
},
|
|
onStart(pokemon) {
|
|
this.add('-item', pokemon, 'Nightlight Ball');
|
|
this.add('-message', `Mimikyu's Nightlight Ball has a sinister sheen!`);
|
|
},
|
|
onModifyAtkPriority: 1,
|
|
onModifyAtk(atk, pokemon) {
|
|
if (pokemon.baseSpecies.baseSpecies === 'Mimikyu') {
|
|
return this.chainModify(1.3);
|
|
}
|
|
},
|
|
onModifyDefPriority: 1,
|
|
onModifyDef(def, pokemon) {
|
|
if (pokemon.baseSpecies.baseSpecies === 'Mimikyu') {
|
|
return this.chainModify(1.3);
|
|
}
|
|
},
|
|
onTryHit(target, source, move) {
|
|
if (target !== source && move.type === 'Electric' && target.baseSpecies.baseSpecies === 'Mimikyu') {
|
|
if (!this.heal(target.baseMaxhp / 4)) {
|
|
this.add('-immune', target, '[from] item: Nightlight Ball');
|
|
}
|
|
return null;
|
|
}
|
|
},
|
|
onTakeItem(item, source) {
|
|
if (source.baseSpecies.baseSpecies === 'Mimikyu') return false;
|
|
return true;
|
|
},
|
|
itemUser: ["Mimikyu"],
|
|
desc: "If held by Mimikyu: 1.3x Atk and Def, Heals 1/4 of its max HP when hit by Electric moves.",
|
|
},
|
|
seawaterbead: {
|
|
name: "Seawater Bead",
|
|
spritenum: 251,
|
|
fling: {
|
|
basePower: 30,
|
|
},
|
|
onModifyDefPriority: 2,
|
|
onModifyDef(def, pokemon) {
|
|
if (pokemon.baseSpecies.baseSpecies === 'Phione') {
|
|
return this.chainModify(1.5);
|
|
}
|
|
},
|
|
onModifySpDPriority: 2,
|
|
onModifySpD(spd, pokemon) {
|
|
if (pokemon.baseSpecies.baseSpecies === 'Phione') {
|
|
return this.chainModify(1.5);
|
|
}
|
|
},
|
|
onTakeItem(item, source) {
|
|
if (source.baseSpecies.baseSpecies === 'Phione') return false;
|
|
return true;
|
|
},
|
|
itemUser: ["Phione"],
|
|
desc: "If held by Phione: 1.5x Defense & Special Defense.",
|
|
},
|
|
sacredropes: {
|
|
name: "Sacred Ropes",
|
|
spritenum: 251,
|
|
fling: {
|
|
basePower: 130,
|
|
},
|
|
onStart(pokemon) {
|
|
this.add('-item', pokemon, 'Sacred Ropes');
|
|
this.add('-message', `Regigigas is adorned with continent-towing ropes!`);
|
|
},
|
|
onSwitchIn(pokemon) {
|
|
if (pokemon.isActive && pokemon.baseSpecies.baseSpecies === 'Regigigas') {
|
|
const oldAbility = pokemon.setAbility('thickfat', pokemon, true);
|
|
if (oldAbility) {
|
|
this.add('-activate', pokemon, 'ability: Thick Fat', oldAbility, '[of] ' + pokemon);
|
|
}
|
|
}
|
|
},
|
|
onSourceModifyAtkPriority: 6,
|
|
onSourceModifyAtk(atk, attacker, defender, move) {
|
|
if ((move.type === 'Fighting' || move.type === 'Rock') &&
|
|
defender.baseSpecies.baseSpecies === 'Regigigas') {
|
|
this.debug('Sacred Ropes weaken');
|
|
return this.chainModify(0.75);
|
|
}
|
|
},
|
|
onSourceModifySpAPriority: 5,
|
|
onSourceModifySpA(atk, attacker, defender, move) {
|
|
if ((move.type === 'Fighting' || move.type === 'Rock') &&
|
|
defender.baseSpecies.baseSpecies === 'Regigigas') {
|
|
this.debug('Sacred Ropes weaken');
|
|
return this.chainModify(0.75);
|
|
}
|
|
},
|
|
onTakeItem(item, source) {
|
|
if (source.baseSpecies.baseSpecies === 'Regigigas') return false;
|
|
return true;
|
|
},
|
|
itemUser: ["Regigigas"],
|
|
desc: "If held by Regigigas: Ability becomes Thick Fat, takes 0.75x damage from Fighting and Rock moves.",
|
|
},
|
|
// soul blades
|
|
soulblade: {
|
|
name: "Soul Blade",
|
|
spritenum: 297,
|
|
fling: {
|
|
basePower: 100,
|
|
},
|
|
onModifyDamage(damage, source, target, move) {
|
|
const soulBladePower = [[0x1199, 0x1000], [0x14CC, 0x1000], 1.5, 1.7, 1.9, 2.1];
|
|
const soulBladeLevel = source.m.soulBladeLevel || 1;
|
|
return this.chainModify(soulBladePower[soulBladeLevel - 1]);
|
|
},
|
|
onSourceAfterFaint(length, target, source, effect) {
|
|
if (effect && effect.effectType === 'Move') {
|
|
if (!source.m.soulBladeLevel) source.m.soulBladeLevel = 1;
|
|
if (source.m.soulBladeLevel < 6) this.add('-activate', source, 'item: Soul Blade');
|
|
source.m.soulBladeLevel += 1;
|
|
if (source.m.soulBladeLevel > 6) source.m.soulBladeLevel = 6;
|
|
}
|
|
},
|
|
gen: 8,
|
|
desc: "The holder's moves deal 1.1x damage + .2x for every KO it has.",
|
|
},
|
|
};
|