141 lines
5.1 KiB
CoffeeScript
141 lines
5.1 KiB
CoffeeScript
|
{Item} = require('../../server/xy/data/items')
|
||
|
{Pokemon} = require '../../server/xy/pokemon'
|
||
|
{Weather} = require('../../shared/weather')
|
||
|
{Attachment, Status} = require '../../server/xy/attachment'
|
||
|
{Move} = require '../../server/xy/move'
|
||
|
{Factory} = require '../factory'
|
||
|
util = require '../../server/xy/util'
|
||
|
should = require 'should'
|
||
|
{_} = require 'underscore'
|
||
|
shared = require '../shared'
|
||
|
|
||
|
require '../helpers'
|
||
|
|
||
|
describe "XY Items:", ->
|
||
|
describe "Weakness Policy", ->
|
||
|
it "raises Attack and Sp. Attack by 2 if hit by a super-effective move", ->
|
||
|
shared.create.call this,
|
||
|
gen: 'xy'
|
||
|
team1: [Factory('Magikarp', item: 'Weakness Policy')]
|
||
|
thunderbolt = @battle.getMove("Thunderbolt")
|
||
|
@p1.stages.should.containEql(attack: 0, specialAttack: 0)
|
||
|
@battle.performMove(@p2, thunderbolt)
|
||
|
@p1.stages.should.containEql(attack: 2, specialAttack: 2)
|
||
|
|
||
|
it "is consumed after use", ->
|
||
|
shared.create.call this,
|
||
|
gen: 'xy'
|
||
|
team1: [Factory('Magikarp', item: 'Weakness Policy')]
|
||
|
thunderbolt = @battle.getMove("Thunderbolt")
|
||
|
@battle.performMove(@p2, thunderbolt)
|
||
|
@p1.hasItem().should.be.false
|
||
|
|
||
|
it "is not used if hit by a non-super-effective move", ->
|
||
|
shared.create.call this,
|
||
|
gen: 'xy'
|
||
|
team1: [Factory('Magikarp', item: 'Weakness Policy')]
|
||
|
ember = @battle.getMove("Ember")
|
||
|
@battle.performMove(@p2, ember)
|
||
|
@p1.hasItem().should.be.true
|
||
|
@p1.stages.should.containEql(attack: 0, specialAttack: 0)
|
||
|
|
||
|
it "is not used if hit by a super-effective move that is non-damaging", ->
|
||
|
shared.create.call this,
|
||
|
gen: 'xy'
|
||
|
team1: [Factory('Magikarp', item: 'Weakness Policy')]
|
||
|
thunderWave = @battle.getMove("Thunder Wave")
|
||
|
@battle.performMove(@p2, thunderWave)
|
||
|
@p1.hasItem().should.be.true
|
||
|
@p1.stages.should.containEql(attack: 0, specialAttack: 0)
|
||
|
|
||
|
it "not used if the wearer is behind a substitute", ->
|
||
|
shared.create.call this,
|
||
|
gen: 'xy'
|
||
|
team1: [Factory('Magikarp', item: 'Weakness Policy')]
|
||
|
@p1.attach(Attachment.Substitute, hp: 1)
|
||
|
thunderbolt = @battle.getMove("Thunderbolt")
|
||
|
@battle.performMove(@p2, thunderbolt)
|
||
|
@p1.hasItem().should.be.true
|
||
|
@p1.stages.should.containEql(attack: 0, specialAttack: 0)
|
||
|
|
||
|
describe "Assault Vest", ->
|
||
|
it "blocks non-damaging moves", ->
|
||
|
shared.create.call this,
|
||
|
gen: 'xy'
|
||
|
team1: [Factory('Magikarp', item: 'Assault Vest')]
|
||
|
splash = @battle.getMove("Splash")
|
||
|
@p1.isMoveBlocked(splash).should.be.true
|
||
|
|
||
|
it "doesn't block damaging moves", ->
|
||
|
shared.create.call this,
|
||
|
gen: 'xy'
|
||
|
team1: [Factory('Magikarp', item: 'Assault Vest')]
|
||
|
tackle = @battle.getMove("Tackle")
|
||
|
@p1.isMoveBlocked(tackle).should.be.false
|
||
|
|
||
|
it "raises special defense by 1.5", ->
|
||
|
shared.create.call this,
|
||
|
gen: 'xy'
|
||
|
team1: [Factory('Magikarp')]
|
||
|
spDef = @p1.stat('specialDefense')
|
||
|
@p1.setItem(Item.AssaultVest)
|
||
|
@p1.stat('specialDefense').should.equal Math.floor(spDef * 1.5)
|
||
|
|
||
|
describe "Gems", ->
|
||
|
it "now only boosts their respective type by x1.3", ->
|
||
|
shared.create.call(this, gen: 'xy')
|
||
|
move = @battle.getMove('Acrobatics')
|
||
|
modifier = Item.FlyingGem::modifyBasePower(move, @p1, @p2)
|
||
|
modifier.should.equal 0x14CD
|
||
|
|
||
|
describe "Kee Berry", ->
|
||
|
it "raises defense if hit by a physical attack", ->
|
||
|
shared.create.call this,
|
||
|
gen: 'xy'
|
||
|
team1: [Factory('Magikarp', item: 'Kee Berry')]
|
||
|
@p1.stages.should.containEql(defense: 0)
|
||
|
@battle.performMove(@p2, @battle.getMove("Tackle"))
|
||
|
@p1.stages.should.containEql(defense: 1)
|
||
|
|
||
|
it "is consumed after use", ->
|
||
|
shared.create.call this,
|
||
|
gen: 'xy'
|
||
|
team1: [Factory('Magikarp', item: 'Kee Berry')]
|
||
|
@p1.hasItem().should.be.true
|
||
|
@battle.performMove(@p2, @battle.getMove("Tackle"))
|
||
|
@p1.hasItem().should.be.false
|
||
|
|
||
|
describe "Maranga Berry", ->
|
||
|
it "raises defense if hit by a special attack", ->
|
||
|
shared.create.call this,
|
||
|
gen: 'xy'
|
||
|
team1: [Factory('Magikarp', item: 'Maranga Berry')]
|
||
|
@p1.stages.should.containEql(specialDefense: 0)
|
||
|
@battle.performMove(@p2, @battle.getMove("Ember"))
|
||
|
@p1.stages.should.containEql(specialDefense: 1)
|
||
|
|
||
|
it "is consumed after use", ->
|
||
|
shared.create.call this,
|
||
|
gen: 'xy'
|
||
|
team1: [Factory('Magikarp', item: 'Maranga Berry')]
|
||
|
@p1.hasItem().should.be.true
|
||
|
@battle.performMove(@p2, @battle.getMove("Ember"))
|
||
|
@p1.hasItem().should.be.false
|
||
|
|
||
|
describe "Safety Goggles", ->
|
||
|
it "makes the user immune to weather", ->
|
||
|
shared.create.call this,
|
||
|
gen: 'xy'
|
||
|
team1: [Factory("Magikarp", item: "Safety Goggles")]
|
||
|
@p1.isWeatherDamageImmune(Weather.SAND).should.be.true
|
||
|
@p1.isWeatherDamageImmune(Weather.HAIL).should.be.true
|
||
|
|
||
|
it "makes the user immune to powder moves", ->
|
||
|
shared.create.call this,
|
||
|
gen: 'xy'
|
||
|
team1: [Factory("Magikarp", item: "Safety Goggles")]
|
||
|
spore = @battle.getMove("Spore")
|
||
|
mock = @sandbox.mock(spore).expects('hit').never()
|
||
|
@battle.performMove(@p2, spore)
|
||
|
mock.verify()
|