274 lines
9.9 KiB
CoffeeScript
274 lines
9.9 KiB
CoffeeScript
require './helpers'
|
|
|
|
{_} = require('underscore')
|
|
learnsets = require('../shared/learnsets')
|
|
{GenerationJSON} = require '../server/generations'
|
|
|
|
describe "Learnsets:", ->
|
|
testLearnset = (pokemon, func) ->
|
|
describe pokemon, ->
|
|
beforeEach ->
|
|
@pokemon = {species: pokemon}
|
|
@checkMoveset = learnsets.checkMoveset.bind(
|
|
learnsets, GenerationJSON, @pokemon)
|
|
|
|
func.call(this)
|
|
|
|
testLearnset "Tyranitar", ->
|
|
it "can learn level-up moves once that level, in its own generation", ->
|
|
@pokemon.level = 29
|
|
@checkMoveset(3, [ "Thrash" ]).should.be.true
|
|
|
|
it "cannot learn level-up moves if the level has not been reached", ->
|
|
@pokemon.level = 28
|
|
@checkMoveset(3, [ "Thrash" ]).should.be.false
|
|
|
|
it "can learn machine moves in its own generation", ->
|
|
@pokemon.level = 1
|
|
@checkMoveset(2, [ "Attract" ]).should.be.true
|
|
|
|
it "can learn tutor moves in its own generation", ->
|
|
@pokemon.level = 1
|
|
@checkMoveset(4, [ "Spite" ]).should.be.true
|
|
|
|
it "can learn tutor moves below its generation", ->
|
|
@pokemon.level = 1
|
|
@checkMoveset(4, [ "Seismic Toss" ]).should.be.true
|
|
|
|
testLearnset "Mewtwo", ->
|
|
it "can learn machine moves below its generation", ->
|
|
@checkMoveset(2, [ "Bide" ]).should.be.true
|
|
|
|
it "cannot learn machine moves below a cutoff point", ->
|
|
@checkMoveset(3, [ "Bide" ]).should.be.false
|
|
|
|
testLearnset "Vaporeon", ->
|
|
it "can learn Take Down indirectly from Eevee", ->
|
|
@checkMoveset(3, [ "Take Down" ]).should.be.true
|
|
|
|
it "can learn Wish through cross-breeding", ->
|
|
@checkMoveset(3, [ "Wish" ]).should.be.true
|
|
|
|
testLearnset "Smeargle", ->
|
|
it "can learn almost any move", ->
|
|
@checkMoveset(3, [ "Spore" ]).should.be.true
|
|
|
|
it "cannot learn Chatter", ->
|
|
@checkMoveset(3, [ "Chatter" ]).should.be.false
|
|
|
|
it "cannot learn Struggle", ->
|
|
@checkMoveset(3, [ "Struggle" ]).should.be.false
|
|
|
|
for pokemon in [ "Pichu", "Raichu" ]
|
|
testLearnset pokemon, ->
|
|
it "can learn Volt Tackle", ->
|
|
@checkMoveset(3, [ "Volt Tackle" ]).should.be.true
|
|
|
|
it "can learn Encore", ->
|
|
@checkMoveset(3, [ "Encore" ]).should.be.true
|
|
|
|
it "cannot learn Volt Tackle and Encore", ->
|
|
@checkMoveset(3, [ "Volt Tackle", "Encore" ]).should.be.false
|
|
|
|
testLearnset "Rotom", ->
|
|
it "Gen 4: learns Overheat in its heat forme", ->
|
|
@pokemon.forme = "heat"
|
|
@checkMoveset(4, [ "Overheat" ]).should.be.true
|
|
|
|
it "Gen 5: learns Overheat in its heat forme", ->
|
|
@pokemon.forme = "heat"
|
|
@checkMoveset(5, [ "Overheat" ]).should.be.true
|
|
|
|
it "Gen 4: learns Overheat and a standard move in its heat forme", ->
|
|
@pokemon.forme = "heat"
|
|
@checkMoveset(4, [ "Overheat", "Thunderbolt" ]).should.be.true
|
|
|
|
it "Gen 5: learns Overheat and a standard move in its heat forme", ->
|
|
@pokemon.forme = "heat"
|
|
@checkMoveset(5, [ "Overheat", "Thunderbolt" ]).should.be.true
|
|
|
|
it "Gen 4: learns Air Slash in its fan forme", ->
|
|
@pokemon.forme = "fan"
|
|
@checkMoveset(4, [ "Air Slash" ]).should.be.true
|
|
|
|
it "Gen 5: learns Air Slash in its fan forme", ->
|
|
@pokemon.forme = "fan"
|
|
@checkMoveset(5, [ "Air Slash" ]).should.be.true
|
|
|
|
it "Gen 4: learns Blizzard in its frost forme", ->
|
|
@pokemon.forme = "frost"
|
|
@checkMoveset(4, [ "Blizzard" ]).should.be.true
|
|
|
|
it "Gen 5: learns Blizzard in its frost forme", ->
|
|
@pokemon.forme = "frost"
|
|
@checkMoveset(5, [ "Blizzard" ]).should.be.true
|
|
|
|
it "Gen 4: learns Leaf Storm in its mow forme", ->
|
|
@pokemon.forme = "mow"
|
|
@checkMoveset(4, [ "Leaf Storm" ]).should.be.true
|
|
|
|
it "Gen 5: learns Leaf Storm in its mow forme", ->
|
|
@pokemon.forme = "mow"
|
|
@checkMoveset(5, [ "Leaf Storm" ]).should.be.true
|
|
|
|
it "Gen 4: learns Hydro Pump in its wash forme", ->
|
|
@pokemon.forme = "wash"
|
|
@checkMoveset(4, [ "Hydro Pump" ]).should.be.true
|
|
|
|
it "Gen 5: learns Hydro Pump in its wash forme", ->
|
|
@pokemon.forme = "wash"
|
|
@checkMoveset(5, [ "Hydro Pump" ]).should.be.true
|
|
|
|
it "Gen 4: cannot learn Blizzard in its default forme", ->
|
|
@checkMoveset(4, [ "Blizzard" ]).should.be.false
|
|
|
|
it "Gen 5: cannot learn Blizzard in its default forme", ->
|
|
@checkMoveset(5, [ "Blizzard" ]).should.be.false
|
|
|
|
it "Gen 4: cannot learn Blizzard in its heat forme", ->
|
|
@pokemon.forme = "heat"
|
|
@checkMoveset(4, [ "Blizzard", "Overheat" ]).should.be.false
|
|
|
|
it "Gen 5: cannot learn Blizzard in its heat forme", ->
|
|
@pokemon.forme = "heat"
|
|
@checkMoveset(5, [ "Blizzard", "Overheat" ]).should.be.false
|
|
|
|
it "Gen 4: must know Blizzard in its frost forme", ->
|
|
@pokemon.forme = "frost"
|
|
@checkMoveset(4, [ "Thunderbolt" ]).should.be.false
|
|
|
|
it "Gen 5: doesn't need to know Blizzard in its frost forme", ->
|
|
@pokemon.forme = "frost"
|
|
@checkMoveset(5, [ "Thunderbolt" ]).should.be.true
|
|
|
|
testLearnset "Deoxys", ->
|
|
it "learns alternate forme moves due to freely switching formes", ->
|
|
@pokemon.forme = "attack"
|
|
@checkMoveset(4, [ "Spikes" ]).should.be.true
|
|
|
|
testLearnset "Shaymin", ->
|
|
it "learns alternate forme moves due to freely switching formes", ->
|
|
@checkMoveset(4, [ "Air Slash" ]).should.be.true
|
|
|
|
testLearnset "Mamoswine", ->
|
|
it "cannot know 4 egg moves", ->
|
|
moveset = [ "Bite", "Fissure", "Curse", "Icicle Spear" ]
|
|
@checkMoveset(4, moveset).should.be.false
|
|
|
|
testLearnset "Yanmega", ->
|
|
it "cannot know 4 egg moves", ->
|
|
moveset = [ "Faint Attack", "Leech Life", "Whirlwind", "Reversal" ]
|
|
@checkMoveset(4, moveset).should.be.false
|
|
|
|
testLearnset "Tangrowth", ->
|
|
it "cannot know 4 egg moves", ->
|
|
moveset = [ "Amnesia", "Endeavor", "Leaf Storm", "Power Swap" ]
|
|
@checkMoveset(4, moveset).should.be.false
|
|
|
|
testLearnset "Mr. Mime", ->
|
|
it "cannot know 4 egg moves", ->
|
|
moveset = [ "Charm", "Healing Wish", "Fake Out", "Teeter Dance" ]
|
|
@checkMoveset(4, moveset).should.be.false
|
|
|
|
testLearnset "Ambipom", ->
|
|
it "cannot know 4 egg moves", ->
|
|
moveset = [ "Slam", "Covet", "Beat Up", "Pursuit" ]
|
|
@checkMoveset(4, moveset).should.be.false
|
|
|
|
testLearnset "Lickilicky", ->
|
|
it "cannot know 4 egg moves", ->
|
|
moveset = [ "Amnesia", "Curse", "Belly Drum", "Magnitude" ]
|
|
@checkMoveset(4, moveset).should.be.false
|
|
|
|
testLearnset "Roserade", ->
|
|
xit "cannot learn Spikes and Sleep Powder", ->
|
|
@checkMoveset(4, [ "Spikes", "Sleep Powder" ]).should.be.false
|
|
|
|
testLearnset "Celebi", ->
|
|
it "can learn Nasty Plot", ->
|
|
moveset = [ "Nasty Plot" ]
|
|
@checkMoveset(4, moveset).should.be.true
|
|
|
|
testLearnset "Banette", ->
|
|
it "can learn an event move but not an egg move", ->
|
|
moveset = [ "Cotton Guard", "Pursuit" ]
|
|
@checkMoveset(4, moveset).should.be.false
|
|
|
|
testLearnset "Gothitelle", ->
|
|
it "can inherit event moves from its pre-evos", ->
|
|
moveset = [ "Imprison" ]
|
|
@checkMoveset(5, moveset).should.be.true
|
|
|
|
testLearnset "Gengar", ->
|
|
it "learns Sludge Wave from dream world", ->
|
|
moveset = [ "Sludge Wave" ]
|
|
@checkMoveset(6, moveset).should.be.true
|
|
|
|
testLearnset "Clefable", ->
|
|
it "cannot learn Softboiled if it has Unaware", ->
|
|
@pokemon.ability = "Unaware"
|
|
moveset = [ "Softboiled" ]
|
|
@checkMoveset(6, moveset).should.be.false
|
|
|
|
it "can learn Softboiled normally", ->
|
|
moveset = [ "Softboiled" ]
|
|
@checkMoveset(6, moveset).should.be.true
|
|
|
|
testLearnset "Gliscor", ->
|
|
it "cannot learn Defog if it has Poison Heal", ->
|
|
@pokemon.ability = "Poison Heal"
|
|
moveset = [ "Defog" ]
|
|
@checkMoveset(6, moveset).should.be.false
|
|
|
|
describe "learnableMoves", ->
|
|
it "returns all possible learnable moves for a pokemon", ->
|
|
learnableMoves = learnsets.learnableMoves.bind(learnsets, GenerationJSON)
|
|
moves = learnableMoves({species: "Deoxys"}, 6)
|
|
moves.should.containEql("Superpower")
|
|
|
|
it "returns event moves", ->
|
|
learnableMoves = learnsets.learnableMoves.bind(learnsets, GenerationJSON)
|
|
moves = learnableMoves({species: "Genesect"}, 6)
|
|
moves.should.containEql("Shift Gear")
|
|
|
|
it "returns dream world moves", ->
|
|
learnableMoves = learnsets.learnableMoves.bind(learnsets, GenerationJSON)
|
|
moves = learnableMoves({species: "Gengar"}, 6)
|
|
moves.should.containEql("Sludge Wave")
|
|
|
|
it "returns valid moves for battle-only formes", ->
|
|
learnableMoves = learnsets.learnableMoves.bind(learnsets, GenerationJSON)
|
|
moves = learnableMoves({species: "Darmanitan", forme: "zen"}, 6)
|
|
|
|
# Only Darmanitan can learn this move; Darumaka can't.
|
|
moves.should.containEql("Bulk Up")
|
|
|
|
# Egg move.
|
|
moves.should.containEql("Encore")
|
|
|
|
it "does not take into account nonstandard learnsets", ->
|
|
learnableMoves = learnsets.learnableMoves.bind(learnsets, GenerationJSON)
|
|
moves = learnableMoves({species: "Rotom"}, 6)
|
|
moves.should.not.containEql("Overheat")
|
|
moves.should.not.containEql("Leaf Storm")
|
|
moves.should.not.containEql("Hydro Pump")
|
|
moves.should.not.containEql("Blizzard")
|
|
moves.should.not.containEql("Air Slash")
|
|
|
|
it "lets pokemon learn nonstandard learnsets if they are of that forme", ->
|
|
learnableMoves = learnsets.learnableMoves.bind(learnsets, GenerationJSON)
|
|
moves = learnableMoves({species: "Rotom", forme: "wash"}, 6)
|
|
moves.should.not.containEql("Overheat")
|
|
moves.should.not.containEql("Leaf Storm")
|
|
moves.should.containEql("Hydro Pump")
|
|
moves.should.not.containEql("Blizzard")
|
|
moves.should.not.containEql("Air Slash")
|
|
|
|
it "returns all moves except Struggle and Chatter if can learn Sketch", ->
|
|
learnableMoves = learnsets.learnableMoves.bind(learnsets, GenerationJSON)
|
|
moves = learnableMoves({species: "Smeargle"}, 6)
|
|
moves.should.not.containEql("Struggle")
|
|
moves.should.not.containEql("Chatter")
|
|
moves.should.containEql("Sacred Fire")
|
|
moves.should.containEql("Aeroblast")
|