Spaces:
Running
Running
; | |
const assert = require('./../../assert'); | |
const common = require('./../../common'); | |
let battle; | |
describe('Two Turn Moves [Gen 1]', () => { | |
afterEach(() => { | |
battle.destroy(); | |
}); | |
it(`charges the first turn, does damage and uses PP the second turn`, () => { | |
battle = common.gen(1).createBattle(); | |
battle.setPlayer('p1', { team: [{ species: "Venusaur", moves: ['solarbeam'] }] }); | |
battle.setPlayer('p2', { team: [{ species: "Parasect", moves: ['swordsdance'] }] }); | |
const venusaur = battle.p1.active[0]; | |
const parasect = battle.p2.active[0]; | |
assert.equal(venusaur.moveSlots[0].pp, 16); | |
battle.makeChoices(); | |
assert(venusaur.volatiles['twoturnmove']); | |
assert.equal(venusaur.moveSlots[0].pp, 16); | |
assert.fullHP(parasect); | |
battle.makeChoices(); | |
assert.equal(venusaur.moveSlots[0].pp, 15); | |
assert.false(venusaur.volatiles['twoturnmove']); | |
assert.false.fullHP(parasect); | |
}); | |
it(`move is paused when asleep or frozen`, () => { | |
battle = common.gen(1).createBattle(); | |
battle.setPlayer('p1', { team: [{ species: "Aerodactyl", moves: ['skyattack'] }] }); | |
battle.setPlayer('p2', { team: [{ species: "Parasect", moves: ['spore'] }] }); | |
const aerodactyl = battle.p1.active[0]; | |
for (let i = 0; i < 10; i++) { | |
battle.makeChoices(); | |
assert(aerodactyl.volatiles['twoturnmove']); | |
assert.equal(aerodactyl.moveSlots[0].pp, 8); | |
} | |
}); | |
it(`two-turn move ends if it fails due to Disable, does not use PP`, () => { | |
battle = common.gen(1).createBattle({ forceRandomChance: true }, [[ | |
{ species: 'Aerodactyl', moves: ['skyattack'] }, | |
], [ | |
{ species: 'Drowzee', moves: ['disable'] }, | |
]]); | |
const aerodactyl = battle.p1.active[0]; | |
battle.makeChoices(); | |
assert(aerodactyl.volatiles['disable'].time > 1); | |
assert(aerodactyl.volatiles['twoturnmove']); | |
battle.makeChoices(); | |
assert(battle.log.some(line => line.includes('|cant|p1a: Aerodactyl|Disable|Sky Attack'))); | |
assert.equal(aerodactyl.moveSlots[0].pp, 8); | |
assert(!aerodactyl.volatiles['twoturnmove']); | |
}); | |
it(`[Gen 1] if called by Metronome or Mirror Move, the calling move uses PP in the attacking turn`, () => { | |
battle = common.gen(1).createBattle({ seed: [0, 1, 0, 1] }); | |
battle.setPlayer('p1', { team: [{ species: 'blastoise', moves: ['metronome', 'skullbash'] }] }); | |
battle.setPlayer('p2', { team: [{ species: 'golem', moves: ['defensecurl'] }] }); | |
const blastoise = battle.p1.active[0]; | |
battle.makeChoices(); | |
assert(battle.log.some(line => line.includes('|move|p1a: Blastoise|Skull Bash||[from]Metronome|[still]'))); | |
assert.equal(blastoise.moveSlots[0].pp, 16); | |
battle.makeChoices(); | |
assert.equal(blastoise.moveSlots[0].pp, 15); | |
// Skull Bash still has all its PP, even though Metronome called Skull Bash | |
assert.equal(blastoise.moveSlots[1].pp, 24); | |
}); | |
it(`Dig/Fly dodges all attacks except for Swift, Transform, and Bide`, () => { | |
battle = common.gen(1).createBattle(); | |
battle.setPlayer('p1', { team: [{ species: "Aerodactyl", moves: ['fly'] }] }); | |
battle.setPlayer('p2', { team: [{ species: "Pidgeot", moves: ['gust'] }] }); | |
battle.makeChoices(); | |
assert(battle.log.some(line => line.includes("Aerodactyl can't be hit"))); | |
assert.fullHP(battle.p1.active[0]); | |
battle.makeChoices(); | |
assert.false.fullHP(battle.p1.active[0]); | |
}); | |
it(`Dig/Fly invulnerability glitch`, () => { | |
battle = common.gen(1).createBattle({ seed: [0, 0, 0, 1] }); | |
battle.setPlayer('p1', { team: [{ species: "Electrode", moves: ['thunderwave', 'swift', 'thunderbolt'] }] }); | |
battle.setPlayer('p2', { team: [{ species: "Pidgeot", moves: ['fly', 'gust'] }] }); | |
const pidgeot = battle.p2.active[0]; | |
battle.makeChoices(); | |
assert(pidgeot.volatiles['twoturnmove']); | |
assert(pidgeot.volatiles['invulnerability']); | |
battle.makeChoices(); | |
assert(!pidgeot.volatiles['twoturnmove']); | |
assert(pidgeot.volatiles['invulnerability']); | |
// Pidgeot dodges almost all moves | |
battle.makeChoices('move thunderbolt', 'move gust'); | |
assert.fullHP(pidgeot); | |
assert(pidgeot.volatiles['invulnerability']); | |
// Pidgeot can still be hit by Swift | |
battle.makeChoices('move swift', 'move gust'); | |
assert.false.fullHP(pidgeot); | |
assert(pidgeot.volatiles['invulnerability']); | |
}); | |
}); | |