mirror of
https://github.com/smogon/pokemon-showdown.git
synced 2026-05-17 18:51:43 -05:00
114 lines
4.5 KiB
JavaScript
114 lines
4.5 KiB
JavaScript
'use strict';
|
|
|
|
const assert = require('./../../assert');
|
|
const common = require('./../../common');
|
|
|
|
let battle;
|
|
|
|
describe('Grassy Terrain', function () {
|
|
afterEach(function () {
|
|
battle.destroy();
|
|
});
|
|
|
|
it(`should change the current terrain to Grassy Terrain for five turns`, function () {
|
|
battle = common.createBattle([[
|
|
{species: 'Florges', moves: ['grassyterrain', 'sleeptalk']},
|
|
], [
|
|
{species: 'Wynaut', moves: ['sleeptalk']},
|
|
]]);
|
|
for (let i = 0; i < 4; i++) {
|
|
battle.makeChoices();
|
|
assert(battle.field.isTerrain('grassyterrain'));
|
|
}
|
|
battle.makeChoices('move sleeptalk', 'move sleeptalk');
|
|
assert(battle.field.isTerrain(''));
|
|
});
|
|
|
|
it(`should halve the base power of Earthquake, Bulldoze, and Magnitude against grounded targets`, function () {
|
|
battle = common.createBattle([[
|
|
{species: 'Shaymin', moves: ['grassyterrain']},
|
|
], [
|
|
{species: 'Aerodactyl', moves: ['sleeptalk']},
|
|
]]);
|
|
battle.makeChoices();
|
|
const shaymin = battle.p1.active[0];
|
|
const aerodactyl = battle.p2.active[0];
|
|
assert.equal(battle.runEvent('BasePower', aerodactyl, shaymin, Dex.moves.get('earthquake'), 100, true), 50);
|
|
assert.equal(battle.runEvent('BasePower', shaymin, aerodactyl, Dex.moves.get('earthquake'), 100, true), 100);
|
|
assert.equal(battle.runEvent('BasePower', aerodactyl, shaymin, Dex.moves.get('bulldoze'), 60, true), 30);
|
|
assert.equal(battle.runEvent('BasePower', shaymin, aerodactyl, Dex.moves.get('bulldoze'), 60, true), 60);
|
|
});
|
|
|
|
it(`should increase the base power of Grass-type attacks used by grounded Pokemon`, function () {
|
|
battle = common.gen(7).createBattle([[
|
|
{species: 'Shaymin', moves: ['grassyterrain']},
|
|
], [
|
|
{species: 'Aerodactyl', moves: ['sleeptalk']},
|
|
]]);
|
|
battle.makeChoices();
|
|
let basePower;
|
|
const move = Dex.moves.get('gigadrain');
|
|
const shaymin = battle.p1.active[0];
|
|
const aerodactyl = battle.p2.active[0];
|
|
basePower = battle.runEvent('BasePower', shaymin, aerodactyl, move, move.basePower, true);
|
|
assert.equal(basePower, battle.modify(move.basePower, 1.5));
|
|
basePower = battle.runEvent('BasePower', aerodactyl, shaymin, move, move.basePower, true);
|
|
assert.equal(basePower, move.basePower);
|
|
});
|
|
|
|
it(`should heal grounded Pokemon by 1/16 of their max HP`, function () {
|
|
battle = common.createBattle([[
|
|
{species: 'Shaymin', moves: ['grassyterrain', 'seismictoss']},
|
|
], [
|
|
{species: 'Wynaut', moves: ['magnetrise', 'seismictoss']},
|
|
]]);
|
|
battle.makeChoices('move grassyterrain', 'move magnetrise');
|
|
battle.makeChoices('move seismictoss', 'move seismictoss');
|
|
const shaymin = battle.p1.active[0];
|
|
const wynaut = battle.p2.active[0];
|
|
assert.equal(shaymin.hp, shaymin.maxhp - 100 + Math.floor(shaymin.maxhp / 16));
|
|
assert.equal(wynaut.hp, wynaut.maxhp - 100);
|
|
});
|
|
|
|
it(`should not affect Pokemon in a semi-invulnerable state`, function () {
|
|
battle = common.createBattle([[
|
|
{species: 'Shaymin', moves: ['grassyterrain', 'seismictoss']},
|
|
], [
|
|
{species: 'Wynaut', moves: ['skydrop', 'seismictoss']},
|
|
]]);
|
|
battle.makeChoices('move seismictoss', 'move seismictoss');
|
|
battle.makeChoices('move grassyterrain', 'move skydrop');
|
|
const shaymin = battle.p1.active[0];
|
|
const wynaut = battle.p2.active[0];
|
|
assert.equal(shaymin.hp, shaymin.maxhp - 100);
|
|
assert.equal(wynaut.hp, wynaut.maxhp - 100);
|
|
});
|
|
|
|
it(`should cause Nature Power to become Energy Ball`, function () {
|
|
battle = common.createBattle([[
|
|
{species: 'Shaymin', moves: ['grassyterrain']},
|
|
], [
|
|
{species: 'Wynaut', moves: ['naturepower']},
|
|
]]);
|
|
battle.makeChoices();
|
|
const resultMove = toID(battle.log[battle.lastMoveLine].split('|')[3]);
|
|
assert.equal(resultMove, 'energyball');
|
|
});
|
|
|
|
it(`should heal by Speed order in the same block as Leftovers`, function () {
|
|
battle = common.createBattle([[
|
|
{species: 'rillaboom', ability: 'grassysurge', item: 'leftovers', moves: ['seismictoss']},
|
|
], [
|
|
{species: 'alakazam', item: 'focussash', moves: ['seismictoss']},
|
|
]]);
|
|
|
|
battle.makeChoices();
|
|
const log = battle.getDebugLog();
|
|
const zamGrassyIndex = log.indexOf('|-heal|p2a: Alakazam|166/251|[from] Grassy Terrain');
|
|
const rillaGrassyIndex = log.indexOf('|-heal|p1a: Rillaboom|262/341|[from] Grassy Terrain');
|
|
const rillaLeftoversIndex = log.indexOf('|-heal|p1a: Rillaboom|283/341|[from] item: Leftovers');
|
|
assert(zamGrassyIndex < rillaGrassyIndex, 'Alakazam should heal from Grassy Terrain before Rillaboom');
|
|
assert(rillaGrassyIndex < rillaLeftoversIndex, 'Rillaboom should heal from Grassy Terrain before Leftovers');
|
|
});
|
|
});
|