mirror of
https://github.com/pagefaultgames/pokerogue.git
synced 2025-03-09 11:31:49 +00:00
203 lines
6.9 KiB
TypeScript
203 lines
6.9 KiB
TypeScript
import { BattlerIndex } from "#app/battle";
|
|
import { CritBoosterModifier } from "#app/modifier/modifier";
|
|
import { modifierTypes } from "#app/modifier/modifier-type";
|
|
import { MoveEffectPhase } from "#app/phases/move-effect-phase.js";
|
|
import GameManager from "#test/utils/gameManager";
|
|
import * as Utils from "#app/utils";
|
|
import { Moves } from "#enums/moves";
|
|
import { Species } from "#enums/species";
|
|
import Phase from "phaser";
|
|
import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest";
|
|
|
|
describe("Items - Leek", () => {
|
|
let phaserGame: Phaser.Game;
|
|
let game: GameManager;
|
|
|
|
beforeAll(() => {
|
|
phaserGame = new Phase.Game({
|
|
type: Phaser.HEADLESS,
|
|
});
|
|
});
|
|
|
|
afterEach(() => {
|
|
game.phaseInterceptor.restoreOg();
|
|
});
|
|
|
|
beforeEach(() => {
|
|
game = new GameManager(phaserGame);
|
|
|
|
game.override.enemySpecies(Species.MAGIKARP);
|
|
game.override.enemyMoveset([ Moves.SPLASH, Moves.SPLASH, Moves.SPLASH, Moves.SPLASH ]);
|
|
game.override.disableCrits();
|
|
|
|
game.override.battleType("single");
|
|
});
|
|
|
|
it("LEEK activates in battle correctly", async() => {
|
|
game.override.startingHeldItems([{ name: "LEEK" }]);
|
|
game.override.moveset([ Moves.POUND ]);
|
|
const consoleSpy = vi.spyOn(console, "log");
|
|
await game.startBattle([
|
|
Species.FARFETCHD
|
|
]);
|
|
|
|
game.doAttack(0);
|
|
|
|
await game.setTurnOrder([BattlerIndex.PLAYER, BattlerIndex.ENEMY]);
|
|
|
|
await game.phaseInterceptor.to(MoveEffectPhase);
|
|
|
|
expect(consoleSpy).toHaveBeenCalledWith("Applied", "Leek", "");
|
|
}, 20000);
|
|
|
|
it("LEEK held by FARFETCHD", async() => {
|
|
await game.startBattle([
|
|
Species.FARFETCHD
|
|
]);
|
|
|
|
const partyMember = game.scene.getPlayerPokemon()!;
|
|
|
|
// Making sure modifier is not applied without holding item
|
|
const critLevel = new Utils.IntegerHolder(0);
|
|
partyMember.scene.applyModifiers(CritBoosterModifier, true, partyMember, critLevel);
|
|
|
|
expect(critLevel.value).toBe(0);
|
|
|
|
// Giving Leek to party member and testing if it applies
|
|
partyMember.scene.addModifier(modifierTypes.LEEK().newModifier(partyMember), true);
|
|
partyMember.scene.applyModifiers(CritBoosterModifier, true, partyMember, critLevel);
|
|
|
|
expect(critLevel.value).toBe(2);
|
|
}, 20000);
|
|
|
|
it("LEEK held by GALAR_FARFETCHD", async() => {
|
|
await game.startBattle([
|
|
Species.GALAR_FARFETCHD
|
|
]);
|
|
|
|
const partyMember = game.scene.getPlayerPokemon()!;
|
|
|
|
// Making sure modifier is not applied without holding item
|
|
const critLevel = new Utils.IntegerHolder(0);
|
|
partyMember.scene.applyModifiers(CritBoosterModifier, true, partyMember, critLevel);
|
|
|
|
expect(critLevel.value).toBe(0);
|
|
|
|
// Giving Leek to party member and testing if it applies
|
|
partyMember.scene.addModifier(modifierTypes.LEEK().newModifier(partyMember), true);
|
|
partyMember.scene.applyModifiers(CritBoosterModifier, true, partyMember, critLevel);
|
|
|
|
expect(critLevel.value).toBe(2);
|
|
}, 20000);
|
|
|
|
it("LEEK held by SIRFETCHD", async() => {
|
|
await game.startBattle([
|
|
Species.SIRFETCHD
|
|
]);
|
|
|
|
const partyMember = game.scene.getPlayerPokemon()!;
|
|
|
|
// Making sure modifier is not applied without holding item
|
|
const critLevel = new Utils.IntegerHolder(0);
|
|
partyMember.scene.applyModifiers(CritBoosterModifier, true, partyMember, critLevel);
|
|
|
|
expect(critLevel.value).toBe(0);
|
|
|
|
// Giving Leek to party member and testing if it applies
|
|
partyMember.scene.addModifier(modifierTypes.LEEK().newModifier(partyMember), true);
|
|
partyMember.scene.applyModifiers(CritBoosterModifier, true, partyMember, critLevel);
|
|
|
|
expect(critLevel.value).toBe(2);
|
|
}, 20000);
|
|
|
|
it("LEEK held by fused FARFETCHD line (base)", async() => {
|
|
// Randomly choose from the Farfetch'd line
|
|
const species = [ Species.FARFETCHD, Species.GALAR_FARFETCHD, Species.SIRFETCHD ];
|
|
|
|
await game.startBattle([
|
|
species[Utils.randInt(species.length)],
|
|
Species.PIKACHU,
|
|
]);
|
|
|
|
const party = game.scene.getParty();
|
|
const partyMember = party[0];
|
|
const ally = party[1];
|
|
|
|
// Fuse party members (taken from PlayerPokemon.fuse(...) function)
|
|
partyMember.fusionSpecies = ally.species;
|
|
partyMember.fusionFormIndex = ally.formIndex;
|
|
partyMember.fusionAbilityIndex = ally.abilityIndex;
|
|
partyMember.fusionShiny = ally.shiny;
|
|
partyMember.fusionVariant = ally.variant;
|
|
partyMember.fusionGender = ally.gender;
|
|
partyMember.fusionLuck = ally.luck;
|
|
|
|
// Making sure modifier is not applied without holding item
|
|
const critLevel = new Utils.IntegerHolder(0);
|
|
partyMember.scene.applyModifiers(CritBoosterModifier, true, partyMember, critLevel);
|
|
|
|
expect(critLevel.value).toBe(0);
|
|
|
|
// Giving Leek to party member and testing if it applies
|
|
partyMember.scene.addModifier(modifierTypes.LEEK().newModifier(partyMember), true);
|
|
partyMember.scene.applyModifiers(CritBoosterModifier, true, partyMember, critLevel);
|
|
|
|
expect(critLevel.value).toBe(2);
|
|
}, 20000);
|
|
|
|
it("LEEK held by fused FARFETCHD line (part)", async() => {
|
|
// Randomly choose from the Farfetch'd line
|
|
const species = [ Species.FARFETCHD, Species.GALAR_FARFETCHD, Species.SIRFETCHD ];
|
|
|
|
await game.startBattle([
|
|
Species.PIKACHU,
|
|
species[Utils.randInt(species.length)]
|
|
]);
|
|
|
|
const party = game.scene.getParty();
|
|
const partyMember = party[0];
|
|
const ally = party[1];
|
|
|
|
// Fuse party members (taken from PlayerPokemon.fuse(...) function)
|
|
partyMember.fusionSpecies = ally.species;
|
|
partyMember.fusionFormIndex = ally.formIndex;
|
|
partyMember.fusionAbilityIndex = ally.abilityIndex;
|
|
partyMember.fusionShiny = ally.shiny;
|
|
partyMember.fusionVariant = ally.variant;
|
|
partyMember.fusionGender = ally.gender;
|
|
partyMember.fusionLuck = ally.luck;
|
|
|
|
// Making sure modifier is not applied without holding item
|
|
const critLevel = new Utils.IntegerHolder(0);
|
|
partyMember.scene.applyModifiers(CritBoosterModifier, true, partyMember, critLevel);
|
|
|
|
expect(critLevel.value).toBe(0);
|
|
|
|
// Giving Leek to party member and testing if it applies
|
|
partyMember.scene.addModifier(modifierTypes.LEEK().newModifier(partyMember), true);
|
|
partyMember.scene.applyModifiers(CritBoosterModifier, true, partyMember, critLevel);
|
|
|
|
expect(critLevel.value).toBe(2);
|
|
}, 20000);
|
|
|
|
it("LEEK not held by FARFETCHD line", async() => {
|
|
await game.startBattle([
|
|
Species.PIKACHU
|
|
]);
|
|
|
|
const partyMember = game.scene.getPlayerPokemon()!;
|
|
|
|
// Making sure modifier is not applied without holding item
|
|
const critLevel = new Utils.IntegerHolder(0);
|
|
partyMember.scene.applyModifiers(CritBoosterModifier, true, partyMember, critLevel);
|
|
|
|
expect(critLevel.value).toBe(0);
|
|
|
|
// Giving Leek to party member and testing if it applies
|
|
partyMember.scene.addModifier(modifierTypes.LEEK().newModifier(partyMember), true);
|
|
partyMember.scene.applyModifiers(CritBoosterModifier, true, partyMember, critLevel);
|
|
|
|
expect(critLevel.value).toBe(0);
|
|
}, 20000);
|
|
});
|