mirror of
https://github.com/smogon/pokemon-showdown.git
synced 2026-05-07 23:52:22 -05:00
218 lines
5.4 KiB
JavaScript
218 lines
5.4 KiB
JavaScript
exports.BattleItems = {
|
|
"adamantorb": {
|
|
inherit: true,
|
|
onBasePower: function (basePower, user, target, move) {
|
|
if (move && user.template.species === 'Dialga' && (move.type === 'Steel' || move.type === 'Dragon')) {
|
|
return this.chainModify(1.2);
|
|
}
|
|
}
|
|
},
|
|
"choiceband": {
|
|
inherit: true,
|
|
onStart: function () { }
|
|
},
|
|
"choicescarf": {
|
|
inherit: true,
|
|
onStart: function () { }
|
|
},
|
|
"choicespecs": {
|
|
inherit: true,
|
|
onStart: function () { }
|
|
},
|
|
"custapberry": {
|
|
id: "custapberry",
|
|
name: "Custap Berry",
|
|
spritenum: 86,
|
|
isBerry: true,
|
|
naturalGift: {
|
|
basePower: 80,
|
|
type: "Ghost"
|
|
},
|
|
onBeforeTurn: function (pokemon) {
|
|
if (pokemon.hp <= pokemon.maxhp / 4 || (pokemon.hp <= pokemon.maxhp / 2 && pokemon.ability === 'gluttony')) {
|
|
var decision = this.willMove(pokemon);
|
|
if (!decision) return;
|
|
this.insertQueue({
|
|
choice: 'event',
|
|
event: 'Custap',
|
|
priority: decision.priority + 0.1,
|
|
pokemon: decision.pokemon,
|
|
move: decision.move,
|
|
target: decision.target
|
|
});
|
|
}
|
|
},
|
|
onCustap: function (pokemon) {
|
|
var decision = this.willMove(pokemon);
|
|
this.debug('custap decision: ' + decision);
|
|
if (decision) {
|
|
pokemon.eatItem();
|
|
}
|
|
},
|
|
onEat: function (pokemon) {
|
|
var decision = this.willMove(pokemon);
|
|
this.debug('custap eaten: ' + decision);
|
|
if (decision) {
|
|
this.cancelDecision(pokemon);
|
|
this.add('-message', "Custap Berry activated.");
|
|
this.runDecision(decision);
|
|
}
|
|
},
|
|
desc: "Activates at 25% HP. Next move used goes first. One-time use."
|
|
},
|
|
"deepseascale": {
|
|
inherit: true,
|
|
onModifySpD: function (spd, pokemon) {
|
|
if (pokemon.template.species === 'Clamperl') {
|
|
return this.chainModify(2);
|
|
}
|
|
}
|
|
},
|
|
"deepseatooth": {
|
|
inherit: true,
|
|
onModifySpA: function (spa, pokemon) {
|
|
if (pokemon.template.species === 'Clamperl') {
|
|
return this.chainModify(2);
|
|
}
|
|
}
|
|
},
|
|
"focussash": {
|
|
inherit: true,
|
|
onDamage: function () { },
|
|
onTryHit: function (target, source, move) {
|
|
if (target !== source && target.hp === target.maxhp) {
|
|
target.addVolatile('focussash');
|
|
}
|
|
},
|
|
effect: {
|
|
duration: 1,
|
|
onDamage: function (damage, target, source, effect) {
|
|
if (effect && effect.effectType === 'Move' && damage >= target.hp && target.useItem()) {
|
|
target.removeVolatile('focussash');
|
|
return target.hp - 1;
|
|
}
|
|
},
|
|
onAfterMoveSecondary: function (target, source, move) {
|
|
target.removeVolatile('focussash');
|
|
}
|
|
}
|
|
},
|
|
"griseousorb": {
|
|
inherit: true,
|
|
onBasePower: function (basePower, user, target, move) {
|
|
if (user.template.num === 487 && (move.type === 'Ghost' || move.type === 'Dragon')) {
|
|
return this.chainModify(1.2);
|
|
}
|
|
}
|
|
},
|
|
"ironball": {
|
|
inherit: true,
|
|
onEffectiveness: function () {},
|
|
desc: "Holder's Speed is halved and it becomes grounded."
|
|
},
|
|
"lifeorb": {
|
|
id: "lifeorb",
|
|
name: "Life Orb",
|
|
spritenum: 249,
|
|
fling: {
|
|
basePower: 30
|
|
},
|
|
onBasePower: function (basePower, user, target) {
|
|
if (!target.volatiles['substitute']) {
|
|
user.addVolatile('lifeorb');
|
|
}
|
|
return basePower * 1.3;
|
|
},
|
|
effect: {
|
|
duration: 1,
|
|
onAfterMoveSecondarySelf: function (source, target, move) {
|
|
if (move && move.effectType === 'Move' && source && source.volatiles['lifeorb']) {
|
|
this.damage(source.maxhp / 10, source, source, this.getItem('lifeorb'));
|
|
source.removeVolatile('lifeorb');
|
|
}
|
|
}
|
|
},
|
|
num: 270,
|
|
gen: 4,
|
|
desc: "Holder's damaging moves do 1.3x damage; loses 1/10 max HP after the attack."
|
|
},
|
|
"lightball": {
|
|
inherit: true,
|
|
onModifySpA: function (spa, pokemon) {
|
|
if (pokemon.template.species === 'Pikachu') {
|
|
return this.chainModify(2);
|
|
}
|
|
}
|
|
},
|
|
"luckypunch": {
|
|
inherit: true,
|
|
onModifyMove: function (move, user) {
|
|
if (user.template.species === 'Chansey') {
|
|
move.critRatio += 2;
|
|
}
|
|
}
|
|
},
|
|
"lustrousorb": {
|
|
inherit: true,
|
|
onBasePower: function (basePower, user, target, move) {
|
|
if (move && user.template.species === 'Palkia' && (move.type === 'Water' || move.type === 'Dragon')) {
|
|
return this.chainModify(1.2);
|
|
}
|
|
}
|
|
},
|
|
"mentalherb": {
|
|
id: "mentalherb",
|
|
name: "Mental Herb",
|
|
spritenum: 285,
|
|
fling: {
|
|
basePower: 10,
|
|
effect: function (pokemon) {
|
|
if (pokemon.removeVolatile('attract')) {
|
|
this.add('-end', pokemon, 'move: Attract', '[from] item: Mental Herb');
|
|
}
|
|
}
|
|
},
|
|
onUpdate: function (pokemon) {
|
|
if (pokemon.volatiles.attract && pokemon.useItem()) {
|
|
pokemon.removeVolatile('attract');
|
|
this.add('-end', pokemon, 'move: Attract', '[from] item: Mental Herb');
|
|
}
|
|
},
|
|
desc: "Cures infatuation. One-time use."
|
|
},
|
|
"metronome": {
|
|
inherit: true,
|
|
effect: {
|
|
onBasePower: function (basePower, pokemon, target, move) {
|
|
if (pokemon.item !== 'metronome') {
|
|
pokemon.removeVolatile('metronome');
|
|
return;
|
|
}
|
|
if (!this.effectData.move || this.effectData.move !== move.id) {
|
|
this.effectData.move = move.id;
|
|
this.effectData.numConsecutive = 0;
|
|
} else if (this.effectData.numConsecutive < 10) {
|
|
this.effectData.numConsecutive++;
|
|
}
|
|
return basePower * (1 + (this.effectData.numConsecutive / 10));
|
|
}
|
|
}
|
|
},
|
|
"stick": {
|
|
inherit: true,
|
|
onModifyMove: function (move, user) {
|
|
if (user.template.species === 'Farfetch\'d') {
|
|
move.critRatio += 2;
|
|
}
|
|
}
|
|
},
|
|
"thickclub": {
|
|
inherit: true,
|
|
onModifyAtk: function (atk, pokemon) {
|
|
if (pokemon.template.species === 'Cubone' || pokemon.template.species === 'Marowak') {
|
|
return this.chainModify(2);
|
|
}
|
|
}
|
|
}
|
|
};
|