mirror of
https://github.com/pagefaultgames/pokerogue.git
synced 2025-07-02 06:22:15 +02:00
121 lines
4.5 KiB
TypeScript
121 lines
4.5 KiB
TypeScript
import { getCharVariantFromDialogue } from "#app/data/dialogue";
|
|
import { TrainerType } from "#app/enums/trainer-type";
|
|
import { modifierTypes } from "#app/data/data-lists";
|
|
import { vouchers } from "#app/system/voucher";
|
|
import i18next from "i18next";
|
|
import { randSeedItem } from "#app/utils/common";
|
|
import { BattlePhase } from "./battle-phase";
|
|
import { TrainerSlot } from "#enums/trainer-slot";
|
|
import { globalScene } from "#app/global-scene";
|
|
import { BiomeId } from "#enums/biome-id";
|
|
import { achvs } from "#app/system/achv";
|
|
import { timedEventManager } from "#app/global-event-manager";
|
|
|
|
export class TrainerVictoryPhase extends BattlePhase {
|
|
public readonly phaseName = "TrainerVictoryPhase";
|
|
start() {
|
|
super.start();
|
|
|
|
globalScene.disableMenu = true;
|
|
|
|
globalScene.playBgm(globalScene.currentBattle.trainer?.config.victoryBgm);
|
|
|
|
globalScene.phaseManager.unshiftNew("MoneyRewardPhase", globalScene.currentBattle.trainer?.config.moneyMultiplier!); // TODO: is this bang correct?
|
|
|
|
const modifierRewardFuncs = globalScene.currentBattle.trainer?.config.modifierRewardFuncs!; // TODO: is this bang correct?
|
|
for (const modifierRewardFunc of modifierRewardFuncs) {
|
|
globalScene.phaseManager.unshiftNew("ModifierRewardPhase", modifierRewardFunc);
|
|
}
|
|
|
|
const trainerType = globalScene.currentBattle.trainer?.config.trainerType!; // TODO: is this bang correct?
|
|
// Validate Voucher for boss trainers
|
|
if (vouchers.hasOwnProperty(TrainerType[trainerType])) {
|
|
if (
|
|
!globalScene.validateVoucher(vouchers[TrainerType[trainerType]]) &&
|
|
globalScene.currentBattle.trainer?.config.isBoss
|
|
) {
|
|
if (timedEventManager.getUpgradeUnlockedVouchers()) {
|
|
globalScene.phaseManager.unshiftNew(
|
|
"ModifierRewardPhase",
|
|
[
|
|
modifierTypes.VOUCHER_PLUS,
|
|
modifierTypes.VOUCHER_PLUS,
|
|
modifierTypes.VOUCHER_PLUS,
|
|
modifierTypes.VOUCHER_PREMIUM,
|
|
][vouchers[TrainerType[trainerType]].voucherType],
|
|
);
|
|
} else {
|
|
globalScene.phaseManager.unshiftNew(
|
|
"ModifierRewardPhase",
|
|
[modifierTypes.VOUCHER, modifierTypes.VOUCHER, modifierTypes.VOUCHER_PLUS, modifierTypes.VOUCHER_PREMIUM][
|
|
vouchers[TrainerType[trainerType]].voucherType
|
|
],
|
|
);
|
|
}
|
|
}
|
|
}
|
|
// Breeders in Space achievement
|
|
if (
|
|
globalScene.arena.biomeType === BiomeId.SPACE &&
|
|
(trainerType === TrainerType.BREEDER || trainerType === TrainerType.EXPERT_POKEMON_BREEDER)
|
|
) {
|
|
globalScene.validateAchv(achvs.BREEDERS_IN_SPACE);
|
|
}
|
|
|
|
globalScene.ui.showText(
|
|
i18next.t("battle:trainerDefeated", {
|
|
trainerName: globalScene.currentBattle.trainer?.getName(TrainerSlot.NONE, true),
|
|
}),
|
|
null,
|
|
() => {
|
|
const victoryMessages = globalScene.currentBattle.trainer?.getVictoryMessages()!; // TODO: is this bang correct?
|
|
let message: string;
|
|
globalScene.executeWithSeedOffset(
|
|
() => (message = randSeedItem(victoryMessages)),
|
|
globalScene.currentBattle.waveIndex,
|
|
);
|
|
message = message!; // tell TS compiler it's defined now
|
|
|
|
const showMessage = () => {
|
|
const originalFunc = showMessageOrEnd;
|
|
showMessageOrEnd = () =>
|
|
globalScene.ui.showDialogue(
|
|
message,
|
|
globalScene.currentBattle.trainer?.getName(TrainerSlot.TRAINER, true),
|
|
null,
|
|
originalFunc,
|
|
);
|
|
|
|
showMessageOrEnd();
|
|
};
|
|
let showMessageOrEnd = () => this.end();
|
|
if (victoryMessages?.length) {
|
|
if (globalScene.currentBattle.trainer?.config.hasCharSprite && !globalScene.ui.shouldSkipDialogue(message)) {
|
|
const originalFunc = showMessageOrEnd;
|
|
showMessageOrEnd = () =>
|
|
globalScene.charSprite.hide().then(() => globalScene.hideFieldOverlay(250).then(() => originalFunc()));
|
|
globalScene
|
|
.showFieldOverlay(500)
|
|
.then(() =>
|
|
globalScene.charSprite
|
|
.showCharacter(
|
|
globalScene.currentBattle.trainer?.getKey()!,
|
|
getCharVariantFromDialogue(victoryMessages[0]),
|
|
)
|
|
.then(() => showMessage()),
|
|
); // TODO: is this bang correct?
|
|
} else {
|
|
showMessage();
|
|
}
|
|
} else {
|
|
showMessageOrEnd();
|
|
}
|
|
},
|
|
null,
|
|
true,
|
|
);
|
|
|
|
this.showEnemyTrainer();
|
|
}
|
|
}
|