mirror of
https://github.com/pagefaultgames/pokerogue.git
synced 2025-05-13 03:44:26 +01:00
* Clean up various phases Remove redundant code, utilize default parameters, clean up some leftover `strict-null` `TODO`s, replace `integer` with `number` * Replace `* as Utils` imports with named imports * Apply Biome
94 lines
2.8 KiB
TypeScript
94 lines
2.8 KiB
TypeScript
import { globalScene } from "#app/global-scene";
|
|
import { applyPostBattleAbAttrs, PostBattleAbAttr } from "#app/data/ability";
|
|
import { LapsingPersistentModifier, LapsingPokemonHeldItemModifier } from "#app/modifier/modifier";
|
|
import { BattlePhase } from "./battle-phase";
|
|
import { GameOverPhase } from "./game-over-phase";
|
|
|
|
export class BattleEndPhase extends BattlePhase {
|
|
/** If true, will increment battles won */
|
|
isVictory: boolean;
|
|
|
|
constructor(isVictory: boolean) {
|
|
super();
|
|
|
|
this.isVictory = isVictory;
|
|
}
|
|
|
|
start() {
|
|
super.start();
|
|
|
|
// cull any extra `BattleEnd` phases from the queue.
|
|
globalScene.phaseQueue = globalScene.phaseQueue.filter(phase => {
|
|
if (phase instanceof BattleEndPhase) {
|
|
this.isVictory ||= phase.isVictory;
|
|
return false;
|
|
}
|
|
return true;
|
|
});
|
|
// `phaseQueuePrepend` is private, so we have to use this inefficient loop.
|
|
while (
|
|
globalScene.tryRemoveUnshiftedPhase(phase => {
|
|
if (phase instanceof BattleEndPhase) {
|
|
this.isVictory ||= phase.isVictory;
|
|
return true;
|
|
}
|
|
return false;
|
|
})
|
|
) {}
|
|
|
|
globalScene.gameData.gameStats.battles++;
|
|
if (
|
|
globalScene.gameMode.isEndless &&
|
|
globalScene.currentBattle.waveIndex + 1 > globalScene.gameData.gameStats.highestEndlessWave
|
|
) {
|
|
globalScene.gameData.gameStats.highestEndlessWave = globalScene.currentBattle.waveIndex + 1;
|
|
}
|
|
|
|
if (this.isVictory) {
|
|
globalScene.currentBattle.addBattleScore();
|
|
|
|
if (globalScene.currentBattle.trainer) {
|
|
globalScene.gameData.gameStats.trainersDefeated++;
|
|
}
|
|
}
|
|
|
|
// Endless graceful end
|
|
if (globalScene.gameMode.isEndless && globalScene.currentBattle.waveIndex >= 5850) {
|
|
globalScene.clearPhaseQueue();
|
|
globalScene.unshiftPhase(new GameOverPhase(true));
|
|
}
|
|
|
|
for (const pokemon of globalScene.getField()) {
|
|
if (pokemon?.battleSummonData) {
|
|
pokemon.battleSummonData.waveTurnCount = 1;
|
|
}
|
|
}
|
|
|
|
for (const pokemon of globalScene.getPokemonAllowedInBattle()) {
|
|
applyPostBattleAbAttrs(PostBattleAbAttr, pokemon, false, this.isVictory);
|
|
}
|
|
|
|
if (globalScene.currentBattle.moneyScattered) {
|
|
globalScene.currentBattle.pickUpScatteredMoney();
|
|
}
|
|
|
|
globalScene.clearEnemyHeldItemModifiers();
|
|
|
|
const lapsingModifiers = globalScene.findModifiers(
|
|
m => m instanceof LapsingPersistentModifier || m instanceof LapsingPokemonHeldItemModifier,
|
|
) as (LapsingPersistentModifier | LapsingPokemonHeldItemModifier)[];
|
|
for (const m of lapsingModifiers) {
|
|
const args: any[] = [];
|
|
if (m instanceof LapsingPokemonHeldItemModifier) {
|
|
args.push(globalScene.getPokemonById(m.pokemonId));
|
|
}
|
|
if (!m.lapse(...args)) {
|
|
globalScene.removeModifier(m);
|
|
}
|
|
}
|
|
|
|
globalScene.updateModifiers();
|
|
this.end();
|
|
}
|
|
}
|