mirror of
https://github.com/pagefaultgames/pokerogue.git
synced 2025-08-22 23:39:34 +02:00
Electro Shot integration tests
This commit is contained in:
parent
9601206992
commit
2afcd17670
@ -9940,7 +9940,7 @@ export function initMoves() {
|
|||||||
.makesContact(false),
|
.makesContact(false),
|
||||||
new ChargingAttackMove(Moves.ELECTRO_SHOT, Type.ELECTRIC, MoveCategory.SPECIAL, 130, 100, 10, -1, 0, 9)
|
new ChargingAttackMove(Moves.ELECTRO_SHOT, Type.ELECTRIC, MoveCategory.SPECIAL, 130, 100, 10, -1, 0, 9)
|
||||||
.chargeText(i18next.t("moveTriggers:absorbedElectricity", { pokemonName: "{USER}" }))
|
.chargeText(i18next.t("moveTriggers:absorbedElectricity", { pokemonName: "{USER}" }))
|
||||||
.chargeAttr(StatStageChangeAttr, [ Stat.SPATK ], 1)
|
.chargeAttr(StatStageChangeAttr, [ Stat.SPATK ], 1, true)
|
||||||
.chargeAttr(WeatherInstantChargeAttr, [ WeatherType.RAIN, WeatherType.HEAVY_RAIN ])
|
.chargeAttr(WeatherInstantChargeAttr, [ WeatherType.RAIN, WeatherType.HEAVY_RAIN ])
|
||||||
.ignoresVirtual(),
|
.ignoresVirtual(),
|
||||||
new AttackMove(Moves.TERA_STARSTORM, Type.NORMAL, MoveCategory.SPECIAL, 120, 100, 5, -1, 0, 9)
|
new AttackMove(Moves.TERA_STARSTORM, Type.NORMAL, MoveCategory.SPECIAL, 120, 100, 5, -1, 0, 9)
|
||||||
|
@ -7,6 +7,7 @@ import { BooleanHolder } from "#app/utils";
|
|||||||
import { MovePhase } from "#app/phases/move-phase";
|
import { MovePhase } from "#app/phases/move-phase";
|
||||||
import { PokemonPhase } from "#app/phases/pokemon-phase";
|
import { PokemonPhase } from "#app/phases/pokemon-phase";
|
||||||
import { BattlerTagType } from "#enums/battler-tag-type";
|
import { BattlerTagType } from "#enums/battler-tag-type";
|
||||||
|
import { MoveEndPhase } from "./move-end-phase";
|
||||||
|
|
||||||
|
|
||||||
export class MoveChargePhase extends PokemonPhase {
|
export class MoveChargePhase extends PokemonPhase {
|
||||||
@ -54,6 +55,9 @@ export class MoveChargePhase extends PokemonPhase {
|
|||||||
applyMoveChargeAttrs(InstantChargeAttr, user, null, move, instantCharge);
|
applyMoveChargeAttrs(InstantChargeAttr, user, null, move, instantCharge);
|
||||||
|
|
||||||
if (instantCharge.value) {
|
if (instantCharge.value) {
|
||||||
|
// this MoveEndPhase will be duplicated by the queued MovePhase if not removed
|
||||||
|
this.scene.tryRemovePhase((phase) => phase instanceof MoveEndPhase && phase.getPokemon() === user);
|
||||||
|
// queue a new MovePhase for this move's attack phase
|
||||||
this.scene.unshiftPhase(new MovePhase(this.scene, user, [ this.targetIndex ], this.move, false));
|
this.scene.unshiftPhase(new MovePhase(this.scene, user, [ this.targetIndex ], this.move, false));
|
||||||
} else {
|
} else {
|
||||||
user.getMoveQueue().push({ move: move.id, targets: [ this.targetIndex ]});
|
user.getMoveQueue().push({ move: move.id, targets: [ this.targetIndex ]});
|
||||||
|
86
src/test/moves/electro_shot.test.ts
Normal file
86
src/test/moves/electro_shot.test.ts
Normal file
@ -0,0 +1,86 @@
|
|||||||
|
import { BattlerTagType } from "#enums/battler-tag-type";
|
||||||
|
import { Stat } from "#enums/stat";
|
||||||
|
import { WeatherType } from "#enums/weather-type";
|
||||||
|
import { MoveResult } from "#app/field/pokemon";
|
||||||
|
import { Abilities } from "#enums/abilities";
|
||||||
|
import { Moves } from "#enums/moves";
|
||||||
|
import { Species } from "#enums/species";
|
||||||
|
import GameManager from "#test/utils/gameManager";
|
||||||
|
import Phaser from "phaser";
|
||||||
|
import { afterEach, beforeAll, beforeEach, describe, it, expect } from "vitest";
|
||||||
|
|
||||||
|
describe("Moves - Electro Shot", () => {
|
||||||
|
let phaserGame: Phaser.Game;
|
||||||
|
let game: GameManager;
|
||||||
|
|
||||||
|
beforeAll(() => {
|
||||||
|
phaserGame = new Phaser.Game({
|
||||||
|
type: Phaser.HEADLESS,
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
afterEach(() => {
|
||||||
|
game.phaseInterceptor.restoreOg();
|
||||||
|
});
|
||||||
|
|
||||||
|
beforeEach(() => {
|
||||||
|
game = new GameManager(phaserGame);
|
||||||
|
game.override
|
||||||
|
.moveset(Moves.ELECTRO_SHOT)
|
||||||
|
.battleType("single")
|
||||||
|
.startingLevel(100)
|
||||||
|
.enemySpecies(Species.SNORLAX)
|
||||||
|
.enemyLevel(100)
|
||||||
|
.enemyAbility(Abilities.BALL_FETCH)
|
||||||
|
.enemyMoveset(Moves.SPLASH);
|
||||||
|
});
|
||||||
|
|
||||||
|
it("should increase the user's Sp. Atk on the first turn, then attack on the second turn", async () => {
|
||||||
|
await game.classicMode.startBattle([ Species.MAGIKARP ]);
|
||||||
|
|
||||||
|
const playerPokemon = game.scene.getPlayerPokemon()!;
|
||||||
|
const enemyPokemon = game.scene.getEnemyPokemon()!;
|
||||||
|
|
||||||
|
game.move.select(Moves.ELECTRO_SHOT);
|
||||||
|
|
||||||
|
await game.phaseInterceptor.to("TurnEndPhase");
|
||||||
|
expect(playerPokemon.getTag(BattlerTagType.CHARGING)).toBeDefined();
|
||||||
|
expect(enemyPokemon.hp).toBe(enemyPokemon.getMaxHp());
|
||||||
|
expect(playerPokemon.getLastXMoves(1)[0].result).toBe(MoveResult.OTHER);
|
||||||
|
expect(playerPokemon.getStatStage(Stat.SPATK)).toBe(1);
|
||||||
|
|
||||||
|
await game.phaseInterceptor.to("TurnEndPhase");
|
||||||
|
expect(playerPokemon.getTag(BattlerTagType.CHARGING)).toBeUndefined();
|
||||||
|
expect(enemyPokemon.hp).toBeLessThan(enemyPokemon.getMaxHp());
|
||||||
|
expect(playerPokemon.getMoveHistory()).toHaveLength(2);
|
||||||
|
expect(playerPokemon.getStatStage(Stat.SPATK)).toBe(1);
|
||||||
|
expect(playerPokemon.getLastXMoves(1)[0].result).toBe(MoveResult.SUCCESS);
|
||||||
|
|
||||||
|
const playerElectroShot = playerPokemon.getMoveset().find(mv => mv && mv.moveId === Moves.ELECTRO_SHOT);
|
||||||
|
expect(playerElectroShot?.ppUsed).toBe(1);
|
||||||
|
});
|
||||||
|
|
||||||
|
it.each([
|
||||||
|
{ weatherType: WeatherType.RAIN, name: "Rain" },
|
||||||
|
{ weatherType: WeatherType.HEAVY_RAIN, name: "Heavy Rain" }
|
||||||
|
])("should fully resolve in one turn if $name is active", async ({ weatherType }) => {
|
||||||
|
game.override.weather(weatherType);
|
||||||
|
|
||||||
|
await game.classicMode.startBattle([ Species.MAGIKARP ]);
|
||||||
|
|
||||||
|
const playerPokemon = game.scene.getPlayerPokemon()!;
|
||||||
|
const enemyPokemon = game.scene.getEnemyPokemon()!;
|
||||||
|
|
||||||
|
game.move.select(Moves.ELECTRO_SHOT);
|
||||||
|
|
||||||
|
await game.phaseInterceptor.to("MoveEndPhase");
|
||||||
|
expect(playerPokemon.getTag(BattlerTagType.CHARGING)).toBeUndefined();
|
||||||
|
expect(enemyPokemon.hp).toBeLessThan(enemyPokemon.getMaxHp());
|
||||||
|
expect(playerPokemon.getMoveHistory()).toHaveLength(2);
|
||||||
|
expect(playerPokemon.getStatStage(Stat.SPATK)).toBe(1);
|
||||||
|
expect(playerPokemon.getLastXMoves(1)[0].result).toBe(MoveResult.SUCCESS);
|
||||||
|
|
||||||
|
const playerElectroShot = playerPokemon.getMoveset().find(mv => mv && mv.moveId === Moves.ELECTRO_SHOT);
|
||||||
|
expect(playerElectroShot?.ppUsed).toBe(1);
|
||||||
|
});
|
||||||
|
});
|
@ -47,7 +47,6 @@ describe("Moves - Solar Beam", () => {
|
|||||||
expect(playerPokemon.getTag(BattlerTagType.CHARGING)).toBeDefined();
|
expect(playerPokemon.getTag(BattlerTagType.CHARGING)).toBeDefined();
|
||||||
expect(enemyPokemon.hp).toBe(enemyPokemon.getMaxHp());
|
expect(enemyPokemon.hp).toBe(enemyPokemon.getMaxHp());
|
||||||
expect(playerPokemon.getLastXMoves(1)[0].result).toBe(MoveResult.OTHER);
|
expect(playerPokemon.getLastXMoves(1)[0].result).toBe(MoveResult.OTHER);
|
||||||
// expect(playerSolarBeam?.ppUsed).toBe(0);
|
|
||||||
|
|
||||||
await game.phaseInterceptor.to("TurnEndPhase");
|
await game.phaseInterceptor.to("TurnEndPhase");
|
||||||
expect(playerPokemon.getTag(BattlerTagType.CHARGING)).toBeUndefined();
|
expect(playerPokemon.getTag(BattlerTagType.CHARGING)).toBeUndefined();
|
||||||
|
Loading…
Reference in New Issue
Block a user