mirror of
https://github.com/pagefaultgames/pokerogue.git
synced 2025-07-04 15:32:18 +02:00
Merge branch 'beta' into test-doc
This commit is contained in:
commit
8c8f70d204
4
package-lock.json
generated
4
package-lock.json
generated
@ -1,12 +1,12 @@
|
|||||||
{
|
{
|
||||||
"name": "pokemon-rogue-battle",
|
"name": "pokemon-rogue-battle",
|
||||||
"version": "1.9.4",
|
"version": "1.9.5",
|
||||||
"lockfileVersion": 3,
|
"lockfileVersion": 3,
|
||||||
"requires": true,
|
"requires": true,
|
||||||
"packages": {
|
"packages": {
|
||||||
"": {
|
"": {
|
||||||
"name": "pokemon-rogue-battle",
|
"name": "pokemon-rogue-battle",
|
||||||
"version": "1.9.4",
|
"version": "1.9.5",
|
||||||
"hasInstallScript": true,
|
"hasInstallScript": true,
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@material/material-color-utilities": "^0.2.7",
|
"@material/material-color-utilities": "^0.2.7",
|
||||||
|
@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"name": "pokemon-rogue-battle",
|
"name": "pokemon-rogue-battle",
|
||||||
"private": true,
|
"private": true,
|
||||||
"version": "1.9.4",
|
"version": "1.9.5",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"start": "vite",
|
"start": "vite",
|
||||||
|
@ -1 +1 @@
|
|||||||
Subproject commit 88c60b6f8d5babfb0c157b31ceff22486712295c
|
Subproject commit 4dab23d6a78b6cf32db43c9953e3c2000f448007
|
@ -581,7 +581,7 @@ function calculateEggRewardsForPokemon(pokemon: PlayerPokemon): [number, number]
|
|||||||
}
|
}
|
||||||
|
|
||||||
function getEggOptions(commonEggs: number, rareEggs: number) {
|
function getEggOptions(commonEggs: number, rareEggs: number) {
|
||||||
const eggDescription = i18next.t(`${namespace}:title`) + ":\n" + i18next.t(trainerNameKey);
|
const eggDescription = i18next.t(`${namespace}:title`);
|
||||||
const eggOptions: IEggOptions[] = [];
|
const eggOptions: IEggOptions[] = [];
|
||||||
|
|
||||||
if (commonEggs > 0) {
|
if (commonEggs > 0) {
|
||||||
|
@ -193,35 +193,35 @@ export const Setting: Array<Setting> = [
|
|||||||
options: [
|
options: [
|
||||||
{
|
{
|
||||||
value: "1",
|
value: "1",
|
||||||
label: "1x",
|
label: i18next.t("settings:gameSpeed1x"),
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
value: "1.25",
|
value: "1.25",
|
||||||
label: "1.25x",
|
label: i18next.t("settings:gameSpeed1_25x"),
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
value: "1.5",
|
value: "1.5",
|
||||||
label: "1.5x",
|
label: i18next.t("settings:gameSpeed1_5x"),
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
value: "2",
|
value: "2",
|
||||||
label: "2x",
|
label: i18next.t("settings:gameSpeed2x"),
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
value: "2.5",
|
value: "2.5",
|
||||||
label: "2.5x",
|
label: i18next.t("settings:gameSpeed2_5x"),
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
value: "3",
|
value: "3",
|
||||||
label: "3x",
|
label: i18next.t("settings:gameSpeed3x"),
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
value: "4",
|
value: "4",
|
||||||
label: "4x",
|
label: i18next.t("settings:gameSpeed4x"),
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
value: "5",
|
value: "5",
|
||||||
label: "5x",
|
label: i18next.t("settings:gameSpeed5x"),
|
||||||
},
|
},
|
||||||
],
|
],
|
||||||
default: 3,
|
default: 3,
|
||||||
|
@ -447,12 +447,14 @@ export default abstract class BattleInfo extends Phaser.GameObjects.Container {
|
|||||||
}
|
}
|
||||||
|
|
||||||
/** Update the pokemon name inside the container */
|
/** Update the pokemon name inside the container */
|
||||||
protected updateName(name: string): boolean {
|
protected updateName(pokemon: Pokemon): boolean {
|
||||||
|
const name = pokemon.getNameToRender();
|
||||||
if (this.lastName === name) {
|
if (this.lastName === name) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
this.nameText.setText(name).setPositionRelative(this.box, -this.nameText.displayWidth, 0);
|
|
||||||
this.lastName = name;
|
this.updateNameText(pokemon);
|
||||||
|
this.genderText.setPositionRelative(this.nameText, this.nameText.displayWidth, 0);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
@ -572,7 +574,7 @@ export default abstract class BattleInfo extends Phaser.GameObjects.Container {
|
|||||||
|
|
||||||
this.genderText.setText(getGenderSymbol(gender)).setColor(getGenderColor(gender));
|
this.genderText.setText(getGenderSymbol(gender)).setColor(getGenderColor(gender));
|
||||||
|
|
||||||
const nameUpdated = this.updateName(pokemon.getNameToRender());
|
const nameUpdated = this.updateName(pokemon);
|
||||||
|
|
||||||
const teraTypeUpdated = this.updateTeraType(pokemon.isTerastallized ? pokemon.getTeraType() : PokemonType.UNKNOWN);
|
const teraTypeUpdated = this.updateTeraType(pokemon.isTerastallized ? pokemon.getTeraType() : PokemonType.UNKNOWN);
|
||||||
|
|
||||||
@ -584,6 +586,8 @@ export default abstract class BattleInfo extends Phaser.GameObjects.Container {
|
|||||||
|
|
||||||
this.updateStatusIcon(pokemon);
|
this.updateStatusIcon(pokemon);
|
||||||
|
|
||||||
|
this.setTypes(pokemon.getTypes(true, false, undefined, true));
|
||||||
|
|
||||||
if (this.lastHp !== pokemon.hp || this.lastMaxHp !== pokemon.getMaxHp()) {
|
if (this.lastHp !== pokemon.hp || this.lastMaxHp !== pokemon.getMaxHp()) {
|
||||||
return this.updatePokemonHp(pokemon, resolve, instant);
|
return this.updatePokemonHp(pokemon, resolve, instant);
|
||||||
}
|
}
|
||||||
|
@ -292,7 +292,7 @@ export default class FightUiHandler extends UiHandler implements InfoToggle {
|
|||||||
this.accuracyText.setVisible(hasMove);
|
this.accuracyText.setVisible(hasMove);
|
||||||
this.moveCategoryIcon.setVisible(hasMove);
|
this.moveCategoryIcon.setVisible(hasMove);
|
||||||
|
|
||||||
this.cursorObj.setPosition(13 + (cursor % 2 === 1 ? 100 : 0), -31 + (cursor >= 2 ? 15 : 0));
|
this.cursorObj.setPosition(13 + (cursor % 2 === 1 ? 114 : 0), -31 + (cursor >= 2 ? 15 : 0));
|
||||||
|
|
||||||
return changed;
|
return changed;
|
||||||
}
|
}
|
||||||
@ -322,7 +322,7 @@ export default class FightUiHandler extends UiHandler implements InfoToggle {
|
|||||||
const moveset = pokemon.getMoveset();
|
const moveset = pokemon.getMoveset();
|
||||||
|
|
||||||
for (let moveIndex = 0; moveIndex < 4; moveIndex++) {
|
for (let moveIndex = 0; moveIndex < 4; moveIndex++) {
|
||||||
const moveText = addTextObject(moveIndex % 2 === 0 ? 0 : 100, moveIndex < 2 ? 0 : 16, "-", TextStyle.WINDOW);
|
const moveText = addTextObject(moveIndex % 2 === 0 ? 0 : 114, moveIndex < 2 ? 0 : 16, "-", TextStyle.WINDOW);
|
||||||
moveText.setName("text-empty-move");
|
moveText.setName("text-empty-move");
|
||||||
|
|
||||||
if (moveIndex < moveset.length) {
|
if (moveIndex < moveset.length) {
|
||||||
|
@ -33,7 +33,7 @@ enum MenuOptions {
|
|||||||
}
|
}
|
||||||
|
|
||||||
let wikiUrl = "https://wiki.pokerogue.net/start";
|
let wikiUrl = "https://wiki.pokerogue.net/start";
|
||||||
const discordUrl = "https://discord.gg/uWpTfdKG49";
|
const discordUrl = "https://discord.gg/pokerogue";
|
||||||
const githubUrl = "https://github.com/pagefaultgames/pokerogue";
|
const githubUrl = "https://github.com/pagefaultgames/pokerogue";
|
||||||
const redditUrl = "https://www.reddit.com/r/pokerogue";
|
const redditUrl = "https://www.reddit.com/r/pokerogue";
|
||||||
const donateUrl = "https://github.com/sponsors/pagefaultgames";
|
const donateUrl = "https://github.com/sponsors/pagefaultgames";
|
||||||
|
@ -24,11 +24,12 @@ describe("Abilities - Aura Break", () => {
|
|||||||
|
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
game = new GameManager(phaserGame);
|
game = new GameManager(phaserGame);
|
||||||
game.override.battleStyle("single");
|
game.override
|
||||||
game.override.moveset([Moves.MOONBLAST, Moves.DARK_PULSE, Moves.MOONBLAST, Moves.DARK_PULSE]);
|
.battleStyle("single")
|
||||||
game.override.enemyMoveset(Moves.SPLASH);
|
.moveset([Moves.MOONBLAST, Moves.DARK_PULSE])
|
||||||
game.override.enemyAbility(Abilities.AURA_BREAK);
|
.enemyMoveset(Moves.SPLASH)
|
||||||
game.override.enemySpecies(Species.SHUCKLE);
|
.enemyAbility(Abilities.AURA_BREAK)
|
||||||
|
.enemySpecies(Species.SHUCKLE);
|
||||||
});
|
});
|
||||||
|
|
||||||
it("reverses the effect of Fairy Aura", async () => {
|
it("reverses the effect of Fairy Aura", async () => {
|
||||||
|
@ -54,10 +54,7 @@ describe("Abilities - Contrary", () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it("should block negative effects", async () => {
|
it("should block negative effects", async () => {
|
||||||
game.override
|
game.override.enemyPassiveAbility(Abilities.CLEAR_BODY).enemyMoveset(Moves.HOWL).moveset([Moves.SPLASH]);
|
||||||
.enemyPassiveAbility(Abilities.CLEAR_BODY)
|
|
||||||
.enemyMoveset([Moves.HOWL, Moves.HOWL, Moves.HOWL, Moves.HOWL])
|
|
||||||
.moveset([Moves.SPLASH]);
|
|
||||||
await game.classicMode.startBattle([Species.SLOWBRO]);
|
await game.classicMode.startBattle([Species.SLOWBRO]);
|
||||||
|
|
||||||
const enemyPokemon = game.scene.getEnemyPokemon()!;
|
const enemyPokemon = game.scene.getEnemyPokemon()!;
|
||||||
|
@ -106,8 +106,7 @@ describe("Abilities - Ice Face", () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it("transforms to Ice Face when Hail or Snow starts", async () => {
|
it("transforms to Ice Face when Hail or Snow starts", async () => {
|
||||||
game.override.moveset([Moves.QUICK_ATTACK]);
|
game.override.moveset([Moves.QUICK_ATTACK]).enemyMoveset(Moves.HAIL);
|
||||||
game.override.enemyMoveset([Moves.HAIL, Moves.HAIL, Moves.HAIL, Moves.HAIL]);
|
|
||||||
|
|
||||||
await game.classicMode.startBattle([Species.MAGIKARP]);
|
await game.classicMode.startBattle([Species.MAGIKARP]);
|
||||||
|
|
||||||
@ -128,8 +127,7 @@ describe("Abilities - Ice Face", () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it("transforms to Ice Face when summoned on arena with active Snow or Hail", async () => {
|
it("transforms to Ice Face when summoned on arena with active Snow or Hail", async () => {
|
||||||
game.override.enemyMoveset([Moves.TACKLE, Moves.TACKLE, Moves.TACKLE, Moves.TACKLE]);
|
game.override.enemyMoveset(Moves.TACKLE).moveset([Moves.SNOWSCAPE]);
|
||||||
game.override.moveset([Moves.SNOWSCAPE]);
|
|
||||||
|
|
||||||
await game.classicMode.startBattle([Species.EISCUE, Species.NINJASK]);
|
await game.classicMode.startBattle([Species.EISCUE, Species.NINJASK]);
|
||||||
|
|
||||||
@ -155,8 +153,7 @@ describe("Abilities - Ice Face", () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it("will not revert to its Ice Face if there is already Hail when it changes into Noice", async () => {
|
it("will not revert to its Ice Face if there is already Hail when it changes into Noice", async () => {
|
||||||
game.override.enemySpecies(Species.SHUCKLE);
|
game.override.enemySpecies(Species.SHUCKLE).enemyMoveset(Moves.TACKLE);
|
||||||
game.override.enemyMoveset([Moves.TACKLE, Moves.TACKLE, Moves.TACKLE, Moves.TACKLE]);
|
|
||||||
|
|
||||||
await game.classicMode.startBattle([Species.EISCUE]);
|
await game.classicMode.startBattle([Species.EISCUE]);
|
||||||
|
|
||||||
@ -175,7 +172,7 @@ describe("Abilities - Ice Face", () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it("persists form change when switched out", async () => {
|
it("persists form change when switched out", async () => {
|
||||||
game.override.enemyMoveset([Moves.QUICK_ATTACK, Moves.QUICK_ATTACK, Moves.QUICK_ATTACK, Moves.QUICK_ATTACK]);
|
game.override.enemyMoveset(Moves.QUICK_ATTACK);
|
||||||
|
|
||||||
await game.classicMode.startBattle([Species.EISCUE, Species.MAGIKARP]);
|
await game.classicMode.startBattle([Species.EISCUE, Species.MAGIKARP]);
|
||||||
|
|
||||||
|
@ -29,11 +29,12 @@ describe("Abilities - Libero", () => {
|
|||||||
|
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
game = new GameManager(phaserGame);
|
game = new GameManager(phaserGame);
|
||||||
game.override.battleStyle("single");
|
game.override
|
||||||
game.override.ability(Abilities.LIBERO);
|
.battleStyle("single")
|
||||||
game.override.startingLevel(100);
|
.ability(Abilities.LIBERO)
|
||||||
game.override.enemySpecies(Species.RATTATA);
|
.startingLevel(100)
|
||||||
game.override.enemyMoveset([Moves.ENDURE, Moves.ENDURE, Moves.ENDURE, Moves.ENDURE]);
|
.enemySpecies(Species.RATTATA)
|
||||||
|
.enemyMoveset(Moves.ENDURE);
|
||||||
});
|
});
|
||||||
|
|
||||||
test("ability applies and changes a pokemon's type", async () => {
|
test("ability applies and changes a pokemon's type", async () => {
|
||||||
@ -173,8 +174,7 @@ describe("Abilities - Libero", () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
test("ability applies correctly even if the pokemon's move is protected against", async () => {
|
test("ability applies correctly even if the pokemon's move is protected against", async () => {
|
||||||
game.override.moveset([Moves.TACKLE]);
|
game.override.moveset([Moves.TACKLE]).enemyMoveset(Moves.PROTECT);
|
||||||
game.override.enemyMoveset([Moves.PROTECT, Moves.PROTECT, Moves.PROTECT, Moves.PROTECT]);
|
|
||||||
|
|
||||||
await game.classicMode.startBattle([Species.MAGIKARP]);
|
await game.classicMode.startBattle([Species.MAGIKARP]);
|
||||||
|
|
||||||
|
@ -24,13 +24,15 @@ describe("Abilities - Mycelium Might", () => {
|
|||||||
|
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
game = new GameManager(phaserGame);
|
game = new GameManager(phaserGame);
|
||||||
game.override.battleStyle("single");
|
game.override
|
||||||
game.override.disableCrits();
|
.battleStyle("single")
|
||||||
game.override.enemySpecies(Species.SHUCKLE);
|
.disableCrits()
|
||||||
game.override.enemyAbility(Abilities.CLEAR_BODY);
|
.enemySpecies(Species.SHUCKLE)
|
||||||
game.override.enemyMoveset([Moves.QUICK_ATTACK, Moves.QUICK_ATTACK, Moves.QUICK_ATTACK, Moves.QUICK_ATTACK]);
|
.enemyAbility(Abilities.CLEAR_BODY)
|
||||||
game.override.ability(Abilities.MYCELIUM_MIGHT);
|
|
||||||
game.override.moveset([Moves.QUICK_ATTACK, Moves.BABY_DOLL_EYES]);
|
.enemyMoveset(Moves.QUICK_ATTACK)
|
||||||
|
.ability(Abilities.MYCELIUM_MIGHT)
|
||||||
|
.moveset([Moves.QUICK_ATTACK, Moves.BABY_DOLL_EYES]);
|
||||||
});
|
});
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -64,7 +66,7 @@ describe("Abilities - Mycelium Might", () => {
|
|||||||
}, 20000);
|
}, 20000);
|
||||||
|
|
||||||
it("will still go first if a status move that is in a higher priority bracket than the opponent's move is used", async () => {
|
it("will still go first if a status move that is in a higher priority bracket than the opponent's move is used", async () => {
|
||||||
game.override.enemyMoveset([Moves.TACKLE, Moves.TACKLE, Moves.TACKLE, Moves.TACKLE]);
|
game.override.enemyMoveset(Moves.TACKLE);
|
||||||
await game.classicMode.startBattle([Species.REGIELEKI]);
|
await game.classicMode.startBattle([Species.REGIELEKI]);
|
||||||
|
|
||||||
const enemyPokemon = game.scene.getEnemyPokemon();
|
const enemyPokemon = game.scene.getEnemyPokemon();
|
||||||
|
@ -25,10 +25,11 @@ describe("Abilities - POWER CONSTRUCT", () => {
|
|||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
game = new GameManager(phaserGame);
|
game = new GameManager(phaserGame);
|
||||||
const moveToUse = Moves.SPLASH;
|
const moveToUse = Moves.SPLASH;
|
||||||
game.override.battleStyle("single");
|
game.override
|
||||||
game.override.ability(Abilities.POWER_CONSTRUCT);
|
.battleStyle("single")
|
||||||
game.override.moveset([moveToUse]);
|
.ability(Abilities.POWER_CONSTRUCT)
|
||||||
game.override.enemyMoveset([Moves.TACKLE, Moves.TACKLE, Moves.TACKLE, Moves.TACKLE]);
|
.moveset([moveToUse])
|
||||||
|
.enemyMoveset(Moves.TACKLE);
|
||||||
});
|
});
|
||||||
|
|
||||||
test("check if fainted 50% Power Construct Pokemon switches to base form on arena reset", async () => {
|
test("check if fainted 50% Power Construct Pokemon switches to base form on arena reset", async () => {
|
||||||
|
@ -29,11 +29,12 @@ describe("Abilities - Protean", () => {
|
|||||||
|
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
game = new GameManager(phaserGame);
|
game = new GameManager(phaserGame);
|
||||||
game.override.battleStyle("single");
|
game.override
|
||||||
game.override.ability(Abilities.PROTEAN);
|
.battleStyle("single")
|
||||||
game.override.startingLevel(100);
|
.ability(Abilities.PROTEAN)
|
||||||
game.override.enemySpecies(Species.RATTATA);
|
.startingLevel(100)
|
||||||
game.override.enemyMoveset([Moves.ENDURE, Moves.ENDURE, Moves.ENDURE, Moves.ENDURE]);
|
.enemySpecies(Species.RATTATA)
|
||||||
|
.enemyMoveset(Moves.ENDURE);
|
||||||
});
|
});
|
||||||
|
|
||||||
test("ability applies and changes a pokemon's type", async () => {
|
test("ability applies and changes a pokemon's type", async () => {
|
||||||
@ -173,8 +174,7 @@ describe("Abilities - Protean", () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
test("ability applies correctly even if the pokemon's move is protected against", async () => {
|
test("ability applies correctly even if the pokemon's move is protected against", async () => {
|
||||||
game.override.moveset([Moves.TACKLE]);
|
game.override.moveset([Moves.TACKLE]).enemyMoveset(Moves.PROTECT);
|
||||||
game.override.enemyMoveset([Moves.PROTECT, Moves.PROTECT, Moves.PROTECT, Moves.PROTECT]);
|
|
||||||
|
|
||||||
await game.classicMode.startBattle([Species.MAGIKARP]);
|
await game.classicMode.startBattle([Species.MAGIKARP]);
|
||||||
|
|
||||||
|
@ -28,13 +28,15 @@ describe("Abilities - Sand Veil", () => {
|
|||||||
|
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
game = new GameManager(phaserGame);
|
game = new GameManager(phaserGame);
|
||||||
game.override.moveset([Moves.SPLASH]);
|
game.override
|
||||||
game.override.enemySpecies(Species.MEOWSCARADA);
|
.moveset([Moves.SPLASH])
|
||||||
game.override.enemyAbility(Abilities.INSOMNIA);
|
.enemySpecies(Species.MEOWSCARADA)
|
||||||
game.override.enemyMoveset([Moves.TWISTER, Moves.TWISTER, Moves.TWISTER, Moves.TWISTER]);
|
.enemyAbility(Abilities.INSOMNIA)
|
||||||
game.override.startingLevel(100);
|
.enemyMoveset(Moves.TWISTER)
|
||||||
game.override.enemyLevel(100);
|
.startingLevel(100)
|
||||||
game.override.weather(WeatherType.SANDSTORM).battleStyle("double");
|
.enemyLevel(100)
|
||||||
|
.weather(WeatherType.SANDSTORM)
|
||||||
|
.battleStyle("double");
|
||||||
});
|
});
|
||||||
|
|
||||||
test("ability should increase the evasiveness of the source", async () => {
|
test("ability should increase the evasiveness of the source", async () => {
|
||||||
|
@ -25,10 +25,7 @@ describe("Abilities - SCHOOLING", () => {
|
|||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
game = new GameManager(phaserGame);
|
game = new GameManager(phaserGame);
|
||||||
const moveToUse = Moves.SPLASH;
|
const moveToUse = Moves.SPLASH;
|
||||||
game.override.battleStyle("single");
|
game.override.battleStyle("single").ability(Abilities.SCHOOLING).moveset([moveToUse]).enemyMoveset(Moves.TACKLE);
|
||||||
game.override.ability(Abilities.SCHOOLING);
|
|
||||||
game.override.moveset([moveToUse]);
|
|
||||||
game.override.enemyMoveset([Moves.TACKLE, Moves.TACKLE, Moves.TACKLE, Moves.TACKLE]);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
test("check if fainted pokemon switches to base form on arena reset", async () => {
|
test("check if fainted pokemon switches to base form on arena reset", async () => {
|
||||||
|
@ -30,8 +30,7 @@ describe("Abilities - Screen Cleaner", () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it("removes Aurora Veil", async () => {
|
it("removes Aurora Veil", async () => {
|
||||||
game.override.moveset([Moves.HAIL]);
|
game.override.moveset([Moves.HAIL]).enemyMoveset(Moves.AURORA_VEIL);
|
||||||
game.override.enemyMoveset([Moves.AURORA_VEIL, Moves.AURORA_VEIL, Moves.AURORA_VEIL, Moves.AURORA_VEIL]);
|
|
||||||
|
|
||||||
await game.classicMode.startBattle([Species.MAGIKARP, Species.MAGIKARP]);
|
await game.classicMode.startBattle([Species.MAGIKARP, Species.MAGIKARP]);
|
||||||
|
|
||||||
@ -48,7 +47,7 @@ describe("Abilities - Screen Cleaner", () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it("removes Light Screen", async () => {
|
it("removes Light Screen", async () => {
|
||||||
game.override.enemyMoveset([Moves.LIGHT_SCREEN, Moves.LIGHT_SCREEN, Moves.LIGHT_SCREEN, Moves.LIGHT_SCREEN]);
|
game.override.enemyMoveset(Moves.LIGHT_SCREEN);
|
||||||
|
|
||||||
await game.classicMode.startBattle([Species.MAGIKARP, Species.MAGIKARP]);
|
await game.classicMode.startBattle([Species.MAGIKARP, Species.MAGIKARP]);
|
||||||
|
|
||||||
@ -65,7 +64,7 @@ describe("Abilities - Screen Cleaner", () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it("removes Reflect", async () => {
|
it("removes Reflect", async () => {
|
||||||
game.override.enemyMoveset([Moves.REFLECT, Moves.REFLECT, Moves.REFLECT, Moves.REFLECT]);
|
game.override.enemyMoveset(Moves.REFLECT);
|
||||||
|
|
||||||
await game.classicMode.startBattle([Species.MAGIKARP, Species.MAGIKARP]);
|
await game.classicMode.startBattle([Species.MAGIKARP, Species.MAGIKARP]);
|
||||||
|
|
||||||
|
@ -22,12 +22,13 @@ describe("Abilities - Stall", () => {
|
|||||||
|
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
game = new GameManager(phaserGame);
|
game = new GameManager(phaserGame);
|
||||||
game.override.battleStyle("single");
|
game.override
|
||||||
game.override.disableCrits();
|
.battleStyle("single")
|
||||||
game.override.enemySpecies(Species.REGIELEKI);
|
.disableCrits()
|
||||||
game.override.enemyAbility(Abilities.STALL);
|
.enemySpecies(Species.REGIELEKI)
|
||||||
game.override.enemyMoveset([Moves.QUICK_ATTACK, Moves.QUICK_ATTACK, Moves.QUICK_ATTACK, Moves.QUICK_ATTACK]);
|
.enemyAbility(Abilities.STALL)
|
||||||
game.override.moveset([Moves.QUICK_ATTACK, Moves.TACKLE]);
|
.enemyMoveset(Moves.QUICK_ATTACK)
|
||||||
|
.moveset([Moves.QUICK_ATTACK, Moves.TACKLE]);
|
||||||
});
|
});
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -25,11 +25,12 @@ describe("Abilities - Sweet Veil", () => {
|
|||||||
|
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
game = new GameManager(phaserGame);
|
game = new GameManager(phaserGame);
|
||||||
game.override.battleStyle("double");
|
game.override
|
||||||
game.override.moveset([Moves.SPLASH, Moves.REST, Moves.YAWN]);
|
.battleStyle("double")
|
||||||
game.override.enemySpecies(Species.MAGIKARP);
|
.moveset([Moves.SPLASH, Moves.REST, Moves.YAWN])
|
||||||
game.override.enemyAbility(Abilities.BALL_FETCH);
|
.enemySpecies(Species.MAGIKARP)
|
||||||
game.override.enemyMoveset([Moves.POWDER, Moves.POWDER, Moves.POWDER, Moves.POWDER]);
|
.enemyAbility(Abilities.BALL_FETCH)
|
||||||
|
.enemyMoveset(Moves.POWDER);
|
||||||
});
|
});
|
||||||
|
|
||||||
it("prevents the user and its allies from falling asleep", async () => {
|
it("prevents the user and its allies from falling asleep", async () => {
|
||||||
@ -56,7 +57,7 @@ describe("Abilities - Sweet Veil", () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it("causes Yawn to fail if used on the user or its allies", async () => {
|
it("causes Yawn to fail if used on the user or its allies", async () => {
|
||||||
game.override.enemyMoveset([Moves.YAWN, Moves.YAWN, Moves.YAWN, Moves.YAWN]);
|
game.override.enemyMoveset(Moves.YAWN);
|
||||||
await game.classicMode.startBattle([Species.SWIRLIX, Species.MAGIKARP]);
|
await game.classicMode.startBattle([Species.SWIRLIX, Species.MAGIKARP]);
|
||||||
|
|
||||||
game.move.select(Moves.SPLASH);
|
game.move.select(Moves.SPLASH);
|
||||||
|
@ -66,10 +66,7 @@ describe("Abilities - Synchronize", () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it("does not trigger when Pokemon is statused by Toxic Spikes", async () => {
|
it("does not trigger when Pokemon is statused by Toxic Spikes", async () => {
|
||||||
game.override
|
game.override.ability(Abilities.SYNCHRONIZE).enemyAbility(Abilities.BALL_FETCH).enemyMoveset(Moves.TOXIC_SPIKES);
|
||||||
.ability(Abilities.SYNCHRONIZE)
|
|
||||||
.enemyAbility(Abilities.BALL_FETCH)
|
|
||||||
.enemyMoveset(Array(4).fill(Moves.TOXIC_SPIKES));
|
|
||||||
|
|
||||||
await game.classicMode.startBattle([Species.FEEBAS, Species.MILOTIC]);
|
await game.classicMode.startBattle([Species.FEEBAS, Species.MILOTIC]);
|
||||||
|
|
||||||
|
@ -24,12 +24,13 @@ describe("Abilities - Unseen Fist", () => {
|
|||||||
|
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
game = new GameManager(phaserGame);
|
game = new GameManager(phaserGame);
|
||||||
game.override.battleStyle("single");
|
game.override
|
||||||
game.override.starterSpecies(Species.URSHIFU);
|
.battleStyle("single")
|
||||||
game.override.enemySpecies(Species.SNORLAX);
|
.starterSpecies(Species.URSHIFU)
|
||||||
game.override.enemyMoveset([Moves.PROTECT, Moves.PROTECT, Moves.PROTECT, Moves.PROTECT]);
|
.enemySpecies(Species.SNORLAX)
|
||||||
game.override.startingLevel(100);
|
.enemyMoveset(Moves.PROTECT)
|
||||||
game.override.enemyLevel(100);
|
.startingLevel(100)
|
||||||
|
.enemyLevel(100);
|
||||||
});
|
});
|
||||||
|
|
||||||
it("should cause a contact move to ignore Protect", async () =>
|
it("should cause a contact move to ignore Protect", async () =>
|
||||||
@ -73,8 +74,7 @@ async function testUnseenFistHitResult(
|
|||||||
protectMove: Moves,
|
protectMove: Moves,
|
||||||
shouldSucceed = true,
|
shouldSucceed = true,
|
||||||
): Promise<void> {
|
): Promise<void> {
|
||||||
game.override.moveset([attackMove]);
|
game.override.moveset([attackMove]).enemyMoveset(protectMove);
|
||||||
game.override.enemyMoveset([protectMove, protectMove, protectMove, protectMove]);
|
|
||||||
|
|
||||||
await game.classicMode.startBattle();
|
await game.classicMode.startBattle();
|
||||||
|
|
||||||
|
@ -188,9 +188,7 @@ describe("Inverse Battle", () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it("Conversion 2 should change the type to the resistive type - Conversion 2 against Dragonite", async () => {
|
it("Conversion 2 should change the type to the resistive type - Conversion 2 against Dragonite", async () => {
|
||||||
game.override
|
game.override.moveset([Moves.CONVERSION_2]).enemyMoveset(Moves.DRAGON_CLAW);
|
||||||
.moveset([Moves.CONVERSION_2])
|
|
||||||
.enemyMoveset([Moves.DRAGON_CLAW, Moves.DRAGON_CLAW, Moves.DRAGON_CLAW, Moves.DRAGON_CLAW]);
|
|
||||||
|
|
||||||
await game.challengeMode.startBattle();
|
await game.challengeMode.startBattle();
|
||||||
|
|
||||||
|
@ -23,12 +23,13 @@ describe("Test Battle Phase", () => {
|
|||||||
|
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
game = new GameManager(phaserGame);
|
game = new GameManager(phaserGame);
|
||||||
game.override.enemySpecies(Species.RATTATA);
|
game.override
|
||||||
game.override.startingLevel(2000);
|
.enemySpecies(Species.RATTATA)
|
||||||
game.override.moveset([Moves.TACKLE]);
|
.startingLevel(2000)
|
||||||
game.override.enemyAbility(Abilities.HYDRATION);
|
.moveset([Moves.TACKLE])
|
||||||
game.override.ability(Abilities.HYDRATION);
|
.enemyAbility(Abilities.HYDRATION)
|
||||||
game.override.enemyMoveset([Moves.TACKLE, Moves.TACKLE, Moves.TACKLE, Moves.TACKLE]);
|
.ability(Abilities.HYDRATION)
|
||||||
|
.enemyMoveset(Moves.TACKLE);
|
||||||
});
|
});
|
||||||
|
|
||||||
it("startBattle 2vs1 boss", async () => {
|
it("startBattle 2vs1 boss", async () => {
|
||||||
|
@ -25,7 +25,7 @@ describe("Items - Leek", () => {
|
|||||||
|
|
||||||
game.override
|
game.override
|
||||||
.enemySpecies(Species.MAGIKARP)
|
.enemySpecies(Species.MAGIKARP)
|
||||||
.enemyMoveset([Moves.SPLASH, Moves.SPLASH, Moves.SPLASH, Moves.SPLASH])
|
.enemyMoveset(Moves.SPLASH)
|
||||||
.startingHeldItems([{ name: "LEEK" }])
|
.startingHeldItems([{ name: "LEEK" }])
|
||||||
.moveset([Moves.TACKLE])
|
.moveset([Moves.TACKLE])
|
||||||
.battleStyle("single");
|
.battleStyle("single");
|
||||||
|
@ -23,14 +23,15 @@ describe("Items - Leftovers", () => {
|
|||||||
|
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
game = new GameManager(phaserGame);
|
game = new GameManager(phaserGame);
|
||||||
game.override.battleStyle("single");
|
game.override
|
||||||
game.override.startingLevel(2000);
|
.battleStyle("single")
|
||||||
game.override.ability(Abilities.UNNERVE);
|
.startingLevel(2000)
|
||||||
game.override.moveset([Moves.SPLASH]);
|
.ability(Abilities.UNNERVE)
|
||||||
game.override.enemySpecies(Species.SHUCKLE);
|
.moveset([Moves.SPLASH])
|
||||||
game.override.enemyAbility(Abilities.UNNERVE);
|
.enemySpecies(Species.SHUCKLE)
|
||||||
game.override.enemyMoveset([Moves.TACKLE, Moves.TACKLE, Moves.TACKLE, Moves.TACKLE]);
|
.enemyAbility(Abilities.UNNERVE)
|
||||||
game.override.startingHeldItems([{ name: "LEFTOVERS", count: 1 }]);
|
.enemyMoveset(Moves.TACKLE)
|
||||||
|
.startingHeldItems([{ name: "LEFTOVERS", count: 1 }]);
|
||||||
});
|
});
|
||||||
|
|
||||||
it("leftovers works", async () => {
|
it("leftovers works", async () => {
|
||||||
|
@ -27,13 +27,14 @@ describe("Moves - Astonish", () => {
|
|||||||
|
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
game = new GameManager(phaserGame);
|
game = new GameManager(phaserGame);
|
||||||
game.override.battleStyle("single");
|
game.override
|
||||||
game.override.moveset([Moves.ASTONISH, Moves.SPLASH]);
|
.battleStyle("single")
|
||||||
game.override.enemySpecies(Species.BLASTOISE);
|
.moveset([Moves.ASTONISH, Moves.SPLASH])
|
||||||
game.override.enemyAbility(Abilities.INSOMNIA);
|
.enemySpecies(Species.BLASTOISE)
|
||||||
game.override.enemyMoveset([Moves.TACKLE, Moves.TACKLE, Moves.TACKLE, Moves.TACKLE]);
|
.enemyAbility(Abilities.INSOMNIA)
|
||||||
game.override.startingLevel(100);
|
.enemyMoveset(Moves.TACKLE)
|
||||||
game.override.enemyLevel(100);
|
.startingLevel(100)
|
||||||
|
.enemyLevel(100);
|
||||||
|
|
||||||
vi.spyOn(allMoves[Moves.ASTONISH], "chance", "get").mockReturnValue(100);
|
vi.spyOn(allMoves[Moves.ASTONISH], "chance", "get").mockReturnValue(100);
|
||||||
});
|
});
|
||||||
|
@ -36,14 +36,15 @@ describe("Moves - Aurora Veil", () => {
|
|||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
game = new GameManager(phaserGame);
|
game = new GameManager(phaserGame);
|
||||||
globalScene = game.scene;
|
globalScene = game.scene;
|
||||||
game.override.battleStyle("single");
|
game.override
|
||||||
game.override.ability(Abilities.NONE);
|
.battleStyle("single")
|
||||||
game.override.moveset([Moves.ABSORB, Moves.ROCK_SLIDE, Moves.TACKLE]);
|
.ability(Abilities.BALL_FETCH)
|
||||||
game.override.enemyLevel(100);
|
.moveset([Moves.ABSORB, Moves.ROCK_SLIDE, Moves.TACKLE])
|
||||||
game.override.enemySpecies(Species.MAGIKARP);
|
.enemyLevel(100)
|
||||||
game.override.enemyMoveset([Moves.AURORA_VEIL, Moves.AURORA_VEIL, Moves.AURORA_VEIL, Moves.AURORA_VEIL]);
|
.enemySpecies(Species.MAGIKARP)
|
||||||
game.override.disableCrits();
|
.enemyMoveset(Moves.AURORA_VEIL)
|
||||||
game.override.weather(WeatherType.HAIL);
|
.disableCrits()
|
||||||
|
.weather(WeatherType.HAIL);
|
||||||
});
|
});
|
||||||
|
|
||||||
it("reduces damage of physical attacks by half in a single battle", async () => {
|
it("reduces damage of physical attacks by half in a single battle", async () => {
|
||||||
|
@ -26,7 +26,7 @@ describe("Moves - Chilly Reception", () => {
|
|||||||
game.override
|
game.override
|
||||||
.battleStyle("single")
|
.battleStyle("single")
|
||||||
.moveset([Moves.CHILLY_RECEPTION, Moves.SNOWSCAPE])
|
.moveset([Moves.CHILLY_RECEPTION, Moves.SNOWSCAPE])
|
||||||
.enemyMoveset(Array(4).fill(Moves.SPLASH))
|
.enemyMoveset(Moves.SPLASH)
|
||||||
.enemyAbility(Abilities.BALL_FETCH)
|
.enemyAbility(Abilities.BALL_FETCH)
|
||||||
.ability(Abilities.BALL_FETCH);
|
.ability(Abilities.BALL_FETCH);
|
||||||
});
|
});
|
||||||
@ -69,10 +69,7 @@ describe("Moves - Chilly Reception", () => {
|
|||||||
|
|
||||||
// enemy uses another move and weather doesn't change
|
// enemy uses another move and weather doesn't change
|
||||||
it("check case - enemy not selecting chilly reception doesn't change weather ", async () => {
|
it("check case - enemy not selecting chilly reception doesn't change weather ", async () => {
|
||||||
game.override
|
game.override.battleStyle("single").enemyMoveset([Moves.CHILLY_RECEPTION, Moves.TACKLE]).moveset(Moves.SPLASH);
|
||||||
.battleStyle("single")
|
|
||||||
.enemyMoveset([Moves.CHILLY_RECEPTION, Moves.TACKLE])
|
|
||||||
.moveset(Array(4).fill(Moves.SPLASH));
|
|
||||||
|
|
||||||
await game.classicMode.startBattle([Species.SLOWKING, Species.MEOWTH]);
|
await game.classicMode.startBattle([Species.SLOWKING, Species.MEOWTH]);
|
||||||
|
|
||||||
@ -87,7 +84,7 @@ describe("Moves - Chilly Reception", () => {
|
|||||||
game.override
|
game.override
|
||||||
.battleStyle("single")
|
.battleStyle("single")
|
||||||
.startingWave(8)
|
.startingWave(8)
|
||||||
.enemyMoveset(Array(4).fill(Moves.CHILLY_RECEPTION))
|
.enemyMoveset(Moves.CHILLY_RECEPTION)
|
||||||
.enemySpecies(Species.MAGIKARP)
|
.enemySpecies(Species.MAGIKARP)
|
||||||
.moveset([Moves.SPLASH, Moves.THUNDERBOLT]);
|
.moveset([Moves.SPLASH, Moves.THUNDERBOLT]);
|
||||||
|
|
||||||
|
@ -23,13 +23,14 @@ describe("Moves - Double Team", () => {
|
|||||||
|
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
game = new GameManager(phaserGame);
|
game = new GameManager(phaserGame);
|
||||||
game.override.battleStyle("single");
|
game.override
|
||||||
game.override.moveset([Moves.DOUBLE_TEAM]);
|
.battleStyle("single")
|
||||||
game.override.disableCrits();
|
.moveset([Moves.DOUBLE_TEAM])
|
||||||
game.override.ability(Abilities.BALL_FETCH);
|
.disableCrits()
|
||||||
game.override.enemySpecies(Species.SHUCKLE);
|
.ability(Abilities.BALL_FETCH)
|
||||||
game.override.enemyAbility(Abilities.BALL_FETCH);
|
.enemySpecies(Species.SHUCKLE)
|
||||||
game.override.enemyMoveset([Moves.TACKLE, Moves.TACKLE, Moves.TACKLE, Moves.TACKLE]);
|
.enemyAbility(Abilities.BALL_FETCH)
|
||||||
|
.enemyMoveset(Moves.TACKLE);
|
||||||
});
|
});
|
||||||
|
|
||||||
it("raises the user's EVA stat stage by 1", async () => {
|
it("raises the user's EVA stat stage by 1", async () => {
|
||||||
|
@ -29,8 +29,14 @@ describe("Moves - Dynamax Cannon", () => {
|
|||||||
dynamaxCannon = allMoves[Moves.DYNAMAX_CANNON];
|
dynamaxCannon = allMoves[Moves.DYNAMAX_CANNON];
|
||||||
game = new GameManager(phaserGame);
|
game = new GameManager(phaserGame);
|
||||||
|
|
||||||
game.override.moveset([dynamaxCannon.id]);
|
game.override
|
||||||
game.override.startingLevel(200);
|
.moveset(Moves.DYNAMAX_CANNON)
|
||||||
|
.startingLevel(200)
|
||||||
|
.levelCap(10)
|
||||||
|
.battleStyle("single")
|
||||||
|
.disableCrits()
|
||||||
|
.enemySpecies(Species.MAGIKARP)
|
||||||
|
.enemyMoveset(Moves.SPLASH);
|
||||||
|
|
||||||
// Note that, for Waves 1-10, the level cap is 10
|
// Note that, for Waves 1-10, the level cap is 10
|
||||||
game.override.startingWave(1);
|
game.override.startingWave(1);
|
||||||
|
@ -74,9 +74,7 @@ describe("Moves - Flower Shield", () => {
|
|||||||
* See semi-vulnerable state tags. {@linkcode SemiInvulnerableTag}
|
* See semi-vulnerable state tags. {@linkcode SemiInvulnerableTag}
|
||||||
*/
|
*/
|
||||||
it("does not raise DEF stat stage for a Pokemon in semi-vulnerable state", async () => {
|
it("does not raise DEF stat stage for a Pokemon in semi-vulnerable state", async () => {
|
||||||
game.override.enemySpecies(Species.PARAS);
|
game.override.enemySpecies(Species.PARAS).enemyMoveset(Moves.DIG).enemyLevel(50);
|
||||||
game.override.enemyMoveset([Moves.DIG, Moves.DIG, Moves.DIG, Moves.DIG]);
|
|
||||||
game.override.enemyLevel(50);
|
|
||||||
|
|
||||||
await game.classicMode.startBattle([Species.CHERRIM]);
|
await game.classicMode.startBattle([Species.CHERRIM]);
|
||||||
const paras = game.scene.getEnemyPokemon()!;
|
const paras = game.scene.getEnemyPokemon()!;
|
||||||
|
@ -27,7 +27,7 @@ describe("Moves - Freezy Frost", () => {
|
|||||||
.battleStyle("single")
|
.battleStyle("single")
|
||||||
.enemySpecies(Species.RATTATA)
|
.enemySpecies(Species.RATTATA)
|
||||||
.enemyLevel(100)
|
.enemyLevel(100)
|
||||||
.enemyMoveset([Moves.HOWL, Moves.HOWL, Moves.HOWL, Moves.HOWL])
|
.enemyMoveset(Moves.HOWL)
|
||||||
.enemyAbility(Abilities.BALL_FETCH)
|
.enemyAbility(Abilities.BALL_FETCH)
|
||||||
.startingLevel(100)
|
.startingLevel(100)
|
||||||
.moveset([Moves.FREEZY_FROST, Moves.HOWL, Moves.SPLASH])
|
.moveset([Moves.FREEZY_FROST, Moves.HOWL, Moves.SPLASH])
|
||||||
@ -55,7 +55,7 @@ describe("Moves - Freezy Frost", () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it("should clear all stat changes even when enemy uses the move", async () => {
|
it("should clear all stat changes even when enemy uses the move", async () => {
|
||||||
game.override.enemyMoveset([Moves.FREEZY_FROST, Moves.FREEZY_FROST, Moves.FREEZY_FROST, Moves.FREEZY_FROST]);
|
game.override.enemyMoveset(Moves.FREEZY_FROST);
|
||||||
await game.classicMode.startBattle([Species.SHUCKLE]); // Shuckle for slower Howl on first turn so Freezy Frost doesn't affect it.
|
await game.classicMode.startBattle([Species.SHUCKLE]); // Shuckle for slower Howl on first turn so Freezy Frost doesn't affect it.
|
||||||
const user = game.scene.getPlayerPokemon()!;
|
const user = game.scene.getPlayerPokemon()!;
|
||||||
|
|
||||||
|
@ -23,16 +23,15 @@ describe("Moves - Fusion Bolt", () => {
|
|||||||
|
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
game = new GameManager(phaserGame);
|
game = new GameManager(phaserGame);
|
||||||
game.override.moveset([fusionBolt]);
|
game.override
|
||||||
game.override.startingLevel(1);
|
.moveset([fusionBolt])
|
||||||
|
.startingLevel(1)
|
||||||
game.override.enemySpecies(Species.RESHIRAM);
|
.enemySpecies(Species.RESHIRAM)
|
||||||
game.override.enemyAbility(Abilities.ROUGH_SKIN);
|
.enemyAbility(Abilities.ROUGH_SKIN)
|
||||||
game.override.enemyMoveset([Moves.SPLASH, Moves.SPLASH, Moves.SPLASH, Moves.SPLASH]);
|
.enemyMoveset(Moves.SPLASH)
|
||||||
|
.battleStyle("single")
|
||||||
game.override.battleStyle("single");
|
.startingWave(97)
|
||||||
game.override.startingWave(97);
|
.disableCrits();
|
||||||
game.override.disableCrits();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
it("should not make contact", async () => {
|
it("should not make contact", async () => {
|
||||||
|
@ -24,15 +24,14 @@ describe("Moves - Fusion Flare", () => {
|
|||||||
|
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
game = new GameManager(phaserGame);
|
game = new GameManager(phaserGame);
|
||||||
game.override.moveset([fusionFlare]);
|
game.override
|
||||||
game.override.startingLevel(1);
|
.moveset([fusionFlare])
|
||||||
|
.startingLevel(1)
|
||||||
game.override.enemySpecies(Species.RATTATA);
|
.enemySpecies(Species.RATTATA)
|
||||||
game.override.enemyMoveset([Moves.REST, Moves.REST, Moves.REST, Moves.REST]);
|
.enemyMoveset(Moves.REST)
|
||||||
|
.battleStyle("single")
|
||||||
game.override.battleStyle("single");
|
.startingWave(97)
|
||||||
game.override.startingWave(97);
|
.disableCrits();
|
||||||
game.override.disableCrits();
|
|
||||||
});
|
});
|
||||||
|
|
||||||
it("should thaw freeze status condition", async () => {
|
it("should thaw freeze status condition", async () => {
|
||||||
|
@ -33,15 +33,14 @@ describe("Moves - Fusion Flare and Fusion Bolt", () => {
|
|||||||
fusionFlare = allMoves[Moves.FUSION_FLARE];
|
fusionFlare = allMoves[Moves.FUSION_FLARE];
|
||||||
fusionBolt = allMoves[Moves.FUSION_BOLT];
|
fusionBolt = allMoves[Moves.FUSION_BOLT];
|
||||||
game = new GameManager(phaserGame);
|
game = new GameManager(phaserGame);
|
||||||
game.override.moveset([fusionFlare.id, fusionBolt.id]);
|
game.override
|
||||||
game.override.startingLevel(1);
|
.moveset([fusionFlare.id, fusionBolt.id])
|
||||||
|
.startingLevel(1)
|
||||||
game.override.enemySpecies(Species.RESHIRAM);
|
.enemySpecies(Species.RESHIRAM)
|
||||||
game.override.enemyMoveset([Moves.REST, Moves.REST, Moves.REST, Moves.REST]);
|
.enemyMoveset(Moves.REST)
|
||||||
|
.battleStyle("double")
|
||||||
game.override.battleStyle("double");
|
.startingWave(97)
|
||||||
game.override.startingWave(97);
|
.disableCrits();
|
||||||
game.override.disableCrits();
|
|
||||||
|
|
||||||
vi.spyOn(fusionFlare, "calculateBattlePower");
|
vi.spyOn(fusionFlare, "calculateBattlePower");
|
||||||
vi.spyOn(fusionBolt, "calculateBattlePower");
|
vi.spyOn(fusionBolt, "calculateBattlePower");
|
||||||
@ -113,7 +112,7 @@ describe("Moves - Fusion Flare and Fusion Bolt", () => {
|
|||||||
}, 20000);
|
}, 20000);
|
||||||
|
|
||||||
it("FUSION_FLARE should not double power of subsequent FUSION_BOLT if a move succeeded in between", async () => {
|
it("FUSION_FLARE should not double power of subsequent FUSION_BOLT if a move succeeded in between", async () => {
|
||||||
game.override.enemyMoveset([Moves.SPLASH, Moves.SPLASH, Moves.SPLASH, Moves.SPLASH]);
|
game.override.enemyMoveset(Moves.SPLASH);
|
||||||
await game.classicMode.startBattle([Species.ZEKROM, Species.ZEKROM]);
|
await game.classicMode.startBattle([Species.ZEKROM, Species.ZEKROM]);
|
||||||
|
|
||||||
game.move.select(fusionFlare.id, 0, BattlerIndex.ENEMY);
|
game.move.select(fusionFlare.id, 0, BattlerIndex.ENEMY);
|
||||||
@ -158,7 +157,7 @@ describe("Moves - Fusion Flare and Fusion Bolt", () => {
|
|||||||
}, 20000);
|
}, 20000);
|
||||||
|
|
||||||
it("FUSION_FLARE and FUSION_BOLT alternating throughout turn should double power of subsequent moves", async () => {
|
it("FUSION_FLARE and FUSION_BOLT alternating throughout turn should double power of subsequent moves", async () => {
|
||||||
game.override.enemyMoveset([fusionFlare.id, fusionFlare.id, fusionFlare.id, fusionFlare.id]);
|
game.override.enemyMoveset(fusionFlare.id);
|
||||||
await game.classicMode.startBattle([Species.ZEKROM, Species.ZEKROM]);
|
await game.classicMode.startBattle([Species.ZEKROM, Species.ZEKROM]);
|
||||||
|
|
||||||
const party = game.scene.getPlayerParty();
|
const party = game.scene.getPlayerParty();
|
||||||
@ -212,7 +211,7 @@ describe("Moves - Fusion Flare and Fusion Bolt", () => {
|
|||||||
}, 20000);
|
}, 20000);
|
||||||
|
|
||||||
it("FUSION_FLARE and FUSION_BOLT alternating throughout turn should double power of subsequent moves if moves are aimed at allies", async () => {
|
it("FUSION_FLARE and FUSION_BOLT alternating throughout turn should double power of subsequent moves if moves are aimed at allies", async () => {
|
||||||
game.override.enemyMoveset([fusionFlare.id, fusionFlare.id, fusionFlare.id, fusionFlare.id]);
|
game.override.enemyMoveset(fusionFlare.id);
|
||||||
await game.classicMode.startBattle([Species.ZEKROM, Species.ZEKROM]);
|
await game.classicMode.startBattle([Species.ZEKROM, Species.ZEKROM]);
|
||||||
|
|
||||||
const party = game.scene.getPlayerParty();
|
const party = game.scene.getPlayerParty();
|
||||||
|
@ -167,7 +167,12 @@ describe("Moves - Last Respects", () => {
|
|||||||
game.move.select(Moves.LAST_RESPECTS);
|
game.move.select(Moves.LAST_RESPECTS);
|
||||||
await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]);
|
await game.setTurnOrder([BattlerIndex.ENEMY, BattlerIndex.PLAYER]);
|
||||||
await game.phaseInterceptor.to("MoveEndPhase");
|
await game.phaseInterceptor.to("MoveEndPhase");
|
||||||
expect(move.calculateBattlePower).toHaveLastReturnedWith(basePower);
|
|
||||||
|
const enemy = game.field.getEnemyPokemon();
|
||||||
|
const player = game.field.getPlayerPokemon();
|
||||||
|
const items = `Player items: ${player.getHeldItems()} | Enemy Items: ${enemy.getHeldItems()} |`;
|
||||||
|
|
||||||
|
expect(move.calculateBattlePower, items).toHaveLastReturnedWith(50);
|
||||||
});
|
});
|
||||||
|
|
||||||
it("should reset playerFaints count if we enter new trainer battle", async () => {
|
it("should reset playerFaints count if we enter new trainer battle", async () => {
|
||||||
|
@ -35,13 +35,14 @@ describe("Moves - Light Screen", () => {
|
|||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
game = new GameManager(phaserGame);
|
game = new GameManager(phaserGame);
|
||||||
globalScene = game.scene;
|
globalScene = game.scene;
|
||||||
game.override.battleStyle("single");
|
game.override
|
||||||
game.override.ability(Abilities.NONE);
|
.battleStyle("single")
|
||||||
game.override.moveset([Moves.ABSORB, Moves.DAZZLING_GLEAM, Moves.TACKLE]);
|
.ability(Abilities.BALL_FETCH)
|
||||||
game.override.enemyLevel(100);
|
.moveset([Moves.ABSORB, Moves.DAZZLING_GLEAM, Moves.TACKLE])
|
||||||
game.override.enemySpecies(Species.MAGIKARP);
|
.enemyLevel(100)
|
||||||
game.override.enemyMoveset([Moves.LIGHT_SCREEN, Moves.LIGHT_SCREEN, Moves.LIGHT_SCREEN, Moves.LIGHT_SCREEN]);
|
.enemySpecies(Species.MAGIKARP)
|
||||||
game.override.disableCrits();
|
.enemyMoveset(Moves.LIGHT_SCREEN)
|
||||||
|
.disableCrits();
|
||||||
});
|
});
|
||||||
|
|
||||||
it("reduces damage of special attacks by half in a single battle", async () => {
|
it("reduces damage of special attacks by half in a single battle", async () => {
|
||||||
|
@ -23,13 +23,14 @@ describe("Moves - Magnet Rise", () => {
|
|||||||
|
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
game = new GameManager(phaserGame);
|
game = new GameManager(phaserGame);
|
||||||
game.override.battleStyle("single");
|
game.override
|
||||||
game.override.starterSpecies(Species.MAGNEZONE);
|
.battleStyle("single")
|
||||||
game.override.enemySpecies(Species.RATTATA);
|
.starterSpecies(Species.MAGNEZONE)
|
||||||
game.override.enemyMoveset([Moves.DRILL_RUN, Moves.DRILL_RUN, Moves.DRILL_RUN, Moves.DRILL_RUN]);
|
.enemySpecies(Species.RATTATA)
|
||||||
game.override.disableCrits();
|
.enemyMoveset(Moves.DRILL_RUN)
|
||||||
game.override.enemyLevel(1);
|
.disableCrits()
|
||||||
game.override.moveset([moveToUse, Moves.SPLASH, Moves.GRAVITY, Moves.BATON_PASS]);
|
.enemyLevel(1)
|
||||||
|
.moveset([moveToUse, Moves.SPLASH, Moves.GRAVITY, Moves.BATON_PASS]);
|
||||||
});
|
});
|
||||||
|
|
||||||
it("MAGNET RISE", async () => {
|
it("MAGNET RISE", async () => {
|
||||||
|
@ -120,7 +120,7 @@ describe("Moves - Powder", () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it("should not prevent the target from thawing out with Flame Wheel", async () => {
|
it("should not prevent the target from thawing out with Flame Wheel", async () => {
|
||||||
game.override.enemyMoveset(Array(4).fill(Moves.FLAME_WHEEL)).enemyStatusEffect(StatusEffect.FREEZE);
|
game.override.enemyMoveset(Moves.FLAME_WHEEL).enemyStatusEffect(StatusEffect.FREEZE);
|
||||||
|
|
||||||
await game.classicMode.startBattle([Species.CHARIZARD]);
|
await game.classicMode.startBattle([Species.CHARIZARD]);
|
||||||
|
|
||||||
@ -198,7 +198,7 @@ describe("Moves - Powder", () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it("should cancel Revelation Dance if it becomes a Fire-type move", async () => {
|
it("should cancel Revelation Dance if it becomes a Fire-type move", async () => {
|
||||||
game.override.enemySpecies(Species.CHARIZARD).enemyMoveset(Array(4).fill(Moves.REVELATION_DANCE));
|
game.override.enemySpecies(Species.CHARIZARD).enemyMoveset(Moves.REVELATION_DANCE);
|
||||||
|
|
||||||
await game.classicMode.startBattle([Species.CHARIZARD]);
|
await game.classicMode.startBattle([Species.CHARIZARD]);
|
||||||
|
|
||||||
@ -212,7 +212,7 @@ describe("Moves - Powder", () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it("should cancel Shell Trap and damage the target, even if the move would fail", async () => {
|
it("should cancel Shell Trap and damage the target, even if the move would fail", async () => {
|
||||||
game.override.enemyMoveset(Array(4).fill(Moves.SHELL_TRAP));
|
game.override.enemyMoveset(Moves.SHELL_TRAP);
|
||||||
|
|
||||||
await game.classicMode.startBattle([Species.CHARIZARD]);
|
await game.classicMode.startBattle([Species.CHARIZARD]);
|
||||||
|
|
||||||
|
@ -35,13 +35,14 @@ describe("Moves - Reflect", () => {
|
|||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
game = new GameManager(phaserGame);
|
game = new GameManager(phaserGame);
|
||||||
globalScene = game.scene;
|
globalScene = game.scene;
|
||||||
game.override.battleStyle("single");
|
game.override
|
||||||
game.override.ability(Abilities.NONE);
|
.battleStyle("single")
|
||||||
game.override.moveset([Moves.ABSORB, Moves.ROCK_SLIDE, Moves.TACKLE]);
|
.ability(Abilities.NONE)
|
||||||
game.override.enemyLevel(100);
|
.moveset([Moves.ABSORB, Moves.ROCK_SLIDE, Moves.TACKLE])
|
||||||
game.override.enemySpecies(Species.MAGIKARP);
|
.enemyLevel(100)
|
||||||
game.override.enemyMoveset([Moves.REFLECT, Moves.REFLECT, Moves.REFLECT, Moves.REFLECT]);
|
.enemySpecies(Species.MAGIKARP)
|
||||||
game.override.disableCrits();
|
.enemyMoveset(Moves.REFLECT)
|
||||||
|
.disableCrits();
|
||||||
});
|
});
|
||||||
|
|
||||||
it("reduces damage of physical attacks by half in a single battle", async () => {
|
it("reduces damage of physical attacks by half in a single battle", async () => {
|
||||||
|
@ -28,7 +28,7 @@ describe("Moves - Retaliate", () => {
|
|||||||
game.override
|
game.override
|
||||||
.battleStyle("single")
|
.battleStyle("single")
|
||||||
.enemySpecies(Species.SNORLAX)
|
.enemySpecies(Species.SNORLAX)
|
||||||
.enemyMoveset([Moves.RETALIATE, Moves.RETALIATE, Moves.RETALIATE, Moves.RETALIATE])
|
.enemyMoveset(Moves.RETALIATE)
|
||||||
.enemyLevel(100)
|
.enemyLevel(100)
|
||||||
.moveset([Moves.RETALIATE, Moves.SPLASH])
|
.moveset([Moves.RETALIATE, Moves.SPLASH])
|
||||||
.startingLevel(80)
|
.startingLevel(80)
|
||||||
|
@ -27,15 +27,14 @@ describe("Moves - Swallow", () => {
|
|||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
game = new GameManager(phaserGame);
|
game = new GameManager(phaserGame);
|
||||||
|
|
||||||
game.override.battleStyle("single");
|
game.override
|
||||||
|
.battleStyle("single")
|
||||||
game.override.enemySpecies(Species.RATTATA);
|
.enemySpecies(Species.RATTATA)
|
||||||
game.override.enemyMoveset(Moves.SPLASH);
|
.enemyMoveset(Moves.SPLASH)
|
||||||
game.override.enemyAbility(Abilities.NONE);
|
.enemyAbility(Abilities.NONE)
|
||||||
game.override.enemyLevel(2000);
|
.enemyLevel(2000)
|
||||||
|
.moveset(Moves.SWALLOW)
|
||||||
game.override.moveset([Moves.SWALLOW, Moves.SWALLOW, Moves.SWALLOW, Moves.SWALLOW]);
|
.ability(Abilities.NONE);
|
||||||
game.override.ability(Abilities.NONE);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
describe("consumes all stockpile stacks to heal (scaling with stacks)", () => {
|
describe("consumes all stockpile stacks to heal (scaling with stacks)", () => {
|
||||||
|
@ -24,13 +24,14 @@ describe("Moves - Tackle", () => {
|
|||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
game = new GameManager(phaserGame);
|
game = new GameManager(phaserGame);
|
||||||
const moveToUse = Moves.TACKLE;
|
const moveToUse = Moves.TACKLE;
|
||||||
game.override.battleStyle("single");
|
game.override
|
||||||
game.override.enemySpecies(Species.MAGIKARP);
|
.battleStyle("single")
|
||||||
game.override.startingLevel(1);
|
.enemySpecies(Species.MAGIKARP)
|
||||||
game.override.startingWave(97);
|
.startingLevel(1)
|
||||||
game.override.moveset([moveToUse]);
|
.startingWave(97)
|
||||||
game.override.enemyMoveset([Moves.GROWTH, Moves.GROWTH, Moves.GROWTH, Moves.GROWTH]);
|
.moveset([moveToUse])
|
||||||
game.override.disableCrits();
|
.enemyMoveset(Moves.GROWTH)
|
||||||
|
.disableCrits();
|
||||||
});
|
});
|
||||||
|
|
||||||
it("TACKLE against ghost", async () => {
|
it("TACKLE against ghost", async () => {
|
||||||
|
@ -23,11 +23,11 @@ describe("Moves - Throat Chop", () => {
|
|||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
game = new GameManager(phaserGame);
|
game = new GameManager(phaserGame);
|
||||||
game.override
|
game.override
|
||||||
.moveset(Array(4).fill(Moves.GROWL))
|
.moveset(Moves.GROWL)
|
||||||
.battleStyle("single")
|
.battleStyle("single")
|
||||||
.ability(Abilities.BALL_FETCH)
|
.ability(Abilities.BALL_FETCH)
|
||||||
.enemyAbility(Abilities.BALL_FETCH)
|
.enemyAbility(Abilities.BALL_FETCH)
|
||||||
.enemyMoveset(Array(4).fill(Moves.THROAT_CHOP))
|
.enemyMoveset(Moves.THROAT_CHOP)
|
||||||
.enemySpecies(Species.MAGIKARP);
|
.enemySpecies(Species.MAGIKARP);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -37,8 +37,7 @@ describe("Moves - Tidy Up", () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it("spikes are cleared", async () => {
|
it("spikes are cleared", async () => {
|
||||||
game.override.moveset([Moves.SPIKES, Moves.TIDY_UP]);
|
game.override.moveset([Moves.SPIKES, Moves.TIDY_UP]).enemyMoveset(Moves.SPIKES);
|
||||||
game.override.enemyMoveset([Moves.SPIKES, Moves.SPIKES, Moves.SPIKES, Moves.SPIKES]);
|
|
||||||
await game.classicMode.startBattle();
|
await game.classicMode.startBattle();
|
||||||
|
|
||||||
game.move.select(Moves.SPIKES);
|
game.move.select(Moves.SPIKES);
|
||||||
@ -49,8 +48,7 @@ describe("Moves - Tidy Up", () => {
|
|||||||
}, 20000);
|
}, 20000);
|
||||||
|
|
||||||
it("stealth rocks are cleared", async () => {
|
it("stealth rocks are cleared", async () => {
|
||||||
game.override.moveset([Moves.STEALTH_ROCK, Moves.TIDY_UP]);
|
game.override.moveset([Moves.STEALTH_ROCK, Moves.TIDY_UP]).enemyMoveset(Moves.STEALTH_ROCK);
|
||||||
game.override.enemyMoveset([Moves.STEALTH_ROCK, Moves.STEALTH_ROCK, Moves.STEALTH_ROCK, Moves.STEALTH_ROCK]);
|
|
||||||
await game.classicMode.startBattle();
|
await game.classicMode.startBattle();
|
||||||
|
|
||||||
game.move.select(Moves.STEALTH_ROCK);
|
game.move.select(Moves.STEALTH_ROCK);
|
||||||
@ -61,8 +59,7 @@ describe("Moves - Tidy Up", () => {
|
|||||||
}, 20000);
|
}, 20000);
|
||||||
|
|
||||||
it("toxic spikes are cleared", async () => {
|
it("toxic spikes are cleared", async () => {
|
||||||
game.override.moveset([Moves.TOXIC_SPIKES, Moves.TIDY_UP]);
|
game.override.moveset([Moves.TOXIC_SPIKES, Moves.TIDY_UP]).enemyMoveset(Moves.TOXIC_SPIKES);
|
||||||
game.override.enemyMoveset([Moves.TOXIC_SPIKES, Moves.TOXIC_SPIKES, Moves.TOXIC_SPIKES, Moves.TOXIC_SPIKES]);
|
|
||||||
await game.classicMode.startBattle();
|
await game.classicMode.startBattle();
|
||||||
|
|
||||||
game.move.select(Moves.TOXIC_SPIKES);
|
game.move.select(Moves.TOXIC_SPIKES);
|
||||||
@ -73,8 +70,7 @@ describe("Moves - Tidy Up", () => {
|
|||||||
}, 20000);
|
}, 20000);
|
||||||
|
|
||||||
it("sticky webs are cleared", async () => {
|
it("sticky webs are cleared", async () => {
|
||||||
game.override.moveset([Moves.STICKY_WEB, Moves.TIDY_UP]);
|
game.override.moveset([Moves.STICKY_WEB, Moves.TIDY_UP]).enemyMoveset(Moves.STICKY_WEB);
|
||||||
game.override.enemyMoveset([Moves.STICKY_WEB, Moves.STICKY_WEB, Moves.STICKY_WEB, Moves.STICKY_WEB]);
|
|
||||||
|
|
||||||
await game.classicMode.startBattle();
|
await game.classicMode.startBattle();
|
||||||
|
|
||||||
@ -86,8 +82,7 @@ describe("Moves - Tidy Up", () => {
|
|||||||
}, 20000);
|
}, 20000);
|
||||||
|
|
||||||
it("substitutes are cleared", async () => {
|
it("substitutes are cleared", async () => {
|
||||||
game.override.moveset([Moves.SUBSTITUTE, Moves.TIDY_UP]);
|
game.override.moveset([Moves.SUBSTITUTE, Moves.TIDY_UP]).enemyMoveset(Moves.SUBSTITUTE);
|
||||||
game.override.enemyMoveset([Moves.SUBSTITUTE, Moves.SUBSTITUTE, Moves.SUBSTITUTE, Moves.SUBSTITUTE]);
|
|
||||||
|
|
||||||
await game.classicMode.startBattle();
|
await game.classicMode.startBattle();
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user