mirror of
https://github.com/pagefaultgames/pokerogue.git
synced 2025-08-09 17:09:26 +02:00
* Changing remaining Modifiers to Consumables, and renaming ModifierType to Reward * Renamed modifier files and moved them into items folder * Using rewards in most places * Removed consumables in favor of using rewards directly * Renamed RewardTier to RarityTier * Reward ids, function to match rewards * Getting reward tiers from player pool still * Messing around with parameters of Reward.apply() * Always requiring player pokemon in rewards * Fixing some functions in select-reward-phase and battle-scene * Fixed various post-merge issues * Fixed most localization strings (accidentally broken by replacing modifierType with reward) * Fixed tests for select reward phase * Using Pokemon.hasSpecies() * Zero weight for trainer items rewards which are already max stack * Cleaning up SelectRewardPhase, held item rewards behave the same as any PokemonReward * Cleaned up some functions * Introduced RewardCategoryId, distributed RewardIds * Utility `is` functions for rewards * Minor fixes * Moved `HeldItemEffect` to its own file * rmade some todo comments * Adding a big comment * Added tsdocs and removed `RewardClass` * undid breaking changes * added TODO * Moved matchingRewards function to reward-utils.ts * Added RewardGenerator classes for mints and tera shards * Introducing default rarity tiers for trainer items and rewards * RewardFunc now can return RewardGenerator * Moved pool reward functions to their own file, plus other utility files * Fixed WeightedModifier to work with the new RewardFunc * Fixed wrong type import * Shifting trainer item and reward ids to avoid overlaps * Added some types * Updated comment in reward.ts * Added strong typing ot item maps * added type safety to held item name map --------- Co-authored-by: Bertie690 <taylormw163@gmail.com> Co-authored-by: Sirz Benjie <142067137+SirzBenjie@users.noreply.github.com>
78 lines
3.0 KiB
TypeScript
78 lines
3.0 KiB
TypeScript
import { AbilityId } from "#enums/ability-id";
|
|
import { BiomeId } from "#enums/biome-id";
|
|
import { MoveId } from "#enums/move-id";
|
|
import { SpeciesId } from "#enums/species-id";
|
|
import { Unlockables } from "#enums/unlockables";
|
|
import { achvs } from "#system/achv";
|
|
import { GameManager } from "#test/test-utils/game-manager";
|
|
import Phaser from "phaser";
|
|
import { afterEach, beforeAll, beforeEach, describe, expect, it, vi } from "vitest";
|
|
|
|
describe("Game Over Phase", () => {
|
|
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([MoveId.MEMENTO, MoveId.ICE_BEAM, MoveId.SPLASH])
|
|
.ability(AbilityId.BALL_FETCH)
|
|
.battleStyle("single")
|
|
.criticalHits(false)
|
|
.enemyAbility(AbilityId.BALL_FETCH)
|
|
.enemyMoveset(MoveId.SPLASH)
|
|
.startingWave(200)
|
|
.startingBiome(BiomeId.END)
|
|
.startingLevel(10000);
|
|
});
|
|
|
|
it("winning a run should give allRewards", async () => {
|
|
await game.classicMode.startBattle([SpeciesId.BULBASAUR]);
|
|
vi.spyOn(game.scene, "validateAchv");
|
|
|
|
// Note: `game.doKillOpponents()` does not properly handle final boss
|
|
// Final boss phase 1
|
|
game.move.select(MoveId.ICE_BEAM);
|
|
await game.toNextTurn();
|
|
|
|
// Final boss phase 2
|
|
game.move.select(MoveId.ICE_BEAM);
|
|
await game.phaseInterceptor.to("PostGameOverPhase", false);
|
|
|
|
// The game refused to actually give the vouchers during tests,
|
|
// so the best we can do is to check that their reward phases occurred.
|
|
expect(game.phaseInterceptor.log.includes("GameOverPhase")).toBe(true);
|
|
expect(game.phaseInterceptor.log.includes("UnlockPhase")).toBe(true);
|
|
expect(game.phaseInterceptor.log.includes("RibbonRewardPhase")).toBe(true);
|
|
expect(game.scene.gameData.unlocks[Unlockables.ENDLESS_MODE]).toBe(true);
|
|
expect(game.scene.validateAchv).toHaveBeenCalledWith(achvs.CLASSIC_VICTORY);
|
|
expect(game.scene.gameData.achvUnlocks[achvs.CLASSIC_VICTORY.id]).toBeTruthy();
|
|
});
|
|
|
|
it("losing a run should not give allRewards", async () => {
|
|
await game.classicMode.startBattle([SpeciesId.BULBASAUR]);
|
|
vi.spyOn(game.scene, "validateAchv");
|
|
|
|
game.move.select(MoveId.MEMENTO);
|
|
await game.phaseInterceptor.to("PostGameOverPhase", false);
|
|
|
|
expect(game.phaseInterceptor.log.includes("GameOverPhase")).toBe(true);
|
|
expect(game.phaseInterceptor.log.includes("UnlockPhase")).toBe(false);
|
|
expect(game.phaseInterceptor.log.includes("RibbonRewardPhase")).toBe(false);
|
|
expect(game.phaseInterceptor.log.includes("GameOverRewardPhase")).toBe(false);
|
|
expect(game.scene.gameData.unlocks[Unlockables.ENDLESS_MODE]).toBe(false);
|
|
expect(game.scene.validateAchv).not.toHaveBeenCalledWith(achvs.CLASSIC_VICTORY);
|
|
expect(game.scene.gameData.achvUnlocks[achvs.CLASSIC_VICTORY.id]).toBeFalsy();
|
|
});
|
|
});
|