Jofthomas's picture
Upload 4781 files
5c2ed06 verified
'use strict';
const assert = require('./../../assert');
const common = require('./../../common');
let battle;
describe('Metronome (item)', () => {
afterEach(() => {
battle.destroy();
});
it(`should increase the damage of moves that have been used successfully and consecutively`, () => {
battle = common.createBattle([[
{ species: 'wynaut', item: 'metronome', moves: ['psystrike'] },
], [
{ species: 'cleffa', evs: { hp: 252 }, ability: 'shellarmor', moves: ['sleeptalk'] },
]]);
battle.makeChoices();
const cleffa = battle.p2.active[0];
const hpAfterOneAttack = cleffa.hp;
battle.makeChoices();
const damage = hpAfterOneAttack - cleffa.hp;
assert.bounded(damage, [115, 137]);
});
it(`should reset the multiplier after switching moves`, () => {
battle = common.createBattle([[
{ species: 'wynaut', item: 'metronome', moves: ['psystrike', 'sleeptalk'] },
], [
{ species: 'cleffa', evs: { hp: 252 }, ability: 'shellarmor', moves: ['sleeptalk'] },
]]);
battle.makeChoices();
const cleffa = battle.p2.active[0];
const hpAfterOneAttack = cleffa.hp;
battle.makeChoices('move sleeptalk', 'auto');
battle.makeChoices();
const damage = hpAfterOneAttack - cleffa.hp;
assert.bounded(damage, [96, 114]);
});
it(`should reset the multiplier after hitting Protect`, () => {
battle = common.createBattle([[
{ species: 'wynaut', item: 'metronome', moves: ['psystrike'] },
], [
{ species: 'cleffa', evs: { hp: 252 }, ability: 'shellarmor', moves: ['sleeptalk', 'protect'] },
]]);
battle.makeChoices();
const cleffa = battle.p2.active[0];
const hpAfterOneAttack = cleffa.hp;
battle.makeChoices('auto', 'move protect');
battle.makeChoices();
const damage = hpAfterOneAttack - cleffa.hp;
assert.bounded(damage, [96, 114]);
});
it(`should instantly start moves that use a charging turn at Metronome 1 boost level, then increase linearly`, () => {
battle = common.createBattle([[
{ species: 'dusknoir', item: 'metronome', moves: ['dig'] },
], [
{ species: 'blissey', ability: 'shellarmor', moves: ['softboiled'] },
]]);
battle.makeChoices();
battle.makeChoices();
const blissey = battle.p2.active[0];
let damage = blissey.maxhp - blissey.hp;
// Metronome 1 and 2 damage rolls always overlap in range, so we can't use assert.bounded here.
let possibleDamageRolls = [290, 294, 296, 300, 304, 307, 311, 314, 318, 320, 324, 328, 331, 335, 338, 342];
const damageWasMetronome1Boosted = possibleDamageRolls.includes(damage);
assert(damageWasMetronome1Boosted, `Dig should be Metronome 1 boosted`);
battle.makeChoices();
battle.makeChoices();
damage = blissey.maxhp - blissey.hp;
possibleDamageRolls = [339, 343, 346, 350, 354, 358, 363, 367, 371, 374, 378, 382, 386, 391, 395, 399];
const damageWasMetronome2Boosted = possibleDamageRolls.includes(damage);
assert(damageWasMetronome2Boosted, `Dig should be Metronome 2 boosted`);
});
it(`should not instantly start moves that skip a charging turn at Metronome 1 boost level`, () => {
battle = common.createBattle([[
{ species: 'slowbro', item: 'metronome', moves: ['solarbeam'] },
], [
{ species: 'blissey', ability: 'shellarmor', moves: ['sunnyday'] },
{ species: 'blissey', ability: 'cloudnine', moves: ['luckychant'] },
]]);
battle.makeChoices();
const blissey = battle.p2.active[0];
let damage = blissey.maxhp - blissey.hp;
assert.bounded(damage, [67, 79], `Solar Beam should not be Metronome boosted`);
battle.makeChoices('auto', 'switch 2');
battle.makeChoices();
const newBlissey = battle.p2.active[0];
damage = newBlissey.maxhp - newBlissey.hp;
assert.bounded(damage, [80, 95], `Solar Beam should be Metronome 1 boosted`);
});
it(`should use called moves to determine the Metronome multiplier`, () => {
battle = common.createBattle([[
{ species: 'goomy', item: 'metronome', moves: ['copycat', 'surf'] },
], [
{ species: 'clefable', evs: { hp: 252 }, ability: 'shellarmor', moves: ['softboiled', 'surf'] },
]]);
battle.makeChoices('move copycat', 'move surf');
const clefable = battle.p2.active[0];
let damage = clefable.maxhp - clefable.hp;
assert.bounded(damage, [45, 53], `Surf should not be Metronome boosted`);
const hpAfterOneAttack = clefable.hp;
battle.makeChoices('move copycat', 'move surf');
damage = hpAfterOneAttack - clefable.hp;
assert.bounded(damage, [54, 64], `Surf should be Metronome 1 boosted`);
battle.makeChoices('move surf', 'move softboiled');
damage = clefable.maxhp - clefable.hp;
assert.bounded(damage, [63, 74], `Surf should be Metronome 2 boosted`);
});
});