'use strict'; const assert = require('./../../assert'); const common = require('./../../common'); let battle; describe("Accuracy", () => { afterEach(() => { battle.destroy(); }); it(`should round half down when applying a modifier`, () => { battle = common.createBattle([ [{ species: 'Butterfree', ability: 'compoundeyes', moves: ['sleeppowder'] }], [{ species: 'Beldum', moves: ['poltergeist'] }], ]); battle.onEvent('Accuracy', battle.format, accuracy => { assert.equal(accuracy, 98, 'CompoundEyes Sleep Powder should be 98% accurate'); }); battle.makeChoices(); battle = common.createBattle([ [{ species: 'Butterfree', ability: 'victorystar', moves: ['fireblast'] }], [{ species: 'Regirock', moves: ['sleeptalk'] }], ]); battle.onEvent('Accuracy', battle.format, accuracy => { assert.equal(accuracy, 94, 'Victory Star Fire Blast should be 94% accurate'); }); battle.makeChoices(); battle = common.createBattle([ [{ species: 'Butterfree', item: 'widelens', moves: ['fireblast'] }], [{ species: 'Regirock', moves: ['sleeptalk'] }], ]); battle.onEvent('Accuracy', battle.format, accuracy => { assert.equal(accuracy, 93, 'Wide Lens Fire Blast should be 93% accurate'); }); battle.makeChoices(); }); it(`should chain modifiers in order of the Pokemon's raw speed`, () => { battle = common.createBattle({ gameType: 'doubles' }, [[ { species: 'Mewtwo', ability: 'victorystar', moves: ['gravity', 'sleeptalk', 'sandattack'] }, { species: 'Charizard', ability: 'compoundeyes', moves: ['sleeptalk', 'fireblast'] }, ], [ { species: 'Bonsly', ability: 'tangledfeet', moves: ['doubleteam', 'sleeptalk'] }, { species: 'Pyukumuku', ability: 'noguard', moves: ['confuseray', 'sandattack', 'sleeptalk'] }, ]]); battle.makeChoices('move sandattack -2, move sleeptalk', 'move doubleteam, move sandattack 2'); battle.makeChoices('auto', 'move sleeptalk, move confuseray -1'); battle.onEvent('Accuracy', battle.format, (accuracy, target, source, move) => { if (move.id !== 'fireblast') return; assert.equal(accuracy, 51); }); battle.makeChoices('move gravity, move fire blast 1', 'move sleeptalk, move sleeptalk'); // Changing the Pokemon's Speeds around changes the chaining order, which affects the result battle = common.createBattle({ gameType: 'doubles' }, [[ { species: 'Bonsly', ability: 'victorystar', moves: ['gravity', 'sleeptalk', 'sandattack'] }, { species: 'Charizard', ability: 'compoundeyes', moves: ['sleeptalk', 'fireblast'] }, ], [ { species: 'Mewtwo', ability: 'tangledfeet', moves: ['doubleteam', 'sleeptalk'] }, { species: 'Pyukumuku', ability: 'noguard', moves: ['confuseray', 'sandattack', 'sleeptalk'] }, ]]); battle.makeChoices('move sandattack -2, move sleeptalk', 'move doubleteam, move sandattack 2'); battle.makeChoices('auto', 'move sleeptalk, move confuseray -1'); battle.onEvent('Accuracy', battle.format, (accuracy, target, source, move) => { if (move.id !== 'fireblast') return; assert.equal(accuracy, 50); }); battle.makeChoices('move gravity, move fire blast 1', 'move sleeptalk, move sleeptalk'); }); });