diff --git a/src/@types/trainer-funcs.ts b/src/@types/trainer-funcs.ts index 0546dd53024..c7e81b2634a 100644 --- a/src/@types/trainer-funcs.ts +++ b/src/@types/trainer-funcs.ts @@ -3,7 +3,7 @@ import type { PersistentModifier } from "#app/modifier/modifier"; import type { PartyMemberStrength } from "#enums/party-member-strength"; import type { SpeciesId } from "#enums/species-id"; import type { TrainerConfig } from "../data/trainers/trainer-config"; -import type { TrainerPartyTemplate } from "../data/trainers/TrainerPartyTemplate"; +import type { TrainerPartyTemplate } from "../data/trainers/trainer-party-template"; export type PartyTemplateFunc = () => TrainerPartyTemplate; export type PartyMemberFunc = (level: number, strength: PartyMemberStrength) => EnemyPokemon; diff --git a/src/battle.ts b/src/battle.ts index ba4152227dd..13bda2a1ea5 100644 --- a/src/battle.ts +++ b/src/battle.ts @@ -23,7 +23,6 @@ import type Pokemon from "#app/field/pokemon"; import { ArenaTagType } from "#enums/arena-tag-type"; import { BattleSpec } from "#enums/battle-spec"; import type { MoveId } from "#enums/move-id"; -import { PlayerGender } from "#enums/player-gender"; import { MusicPreference } from "#app/system/settings/settings"; import { SpeciesId } from "#enums/species-id"; import { TrainerType } from "#enums/trainer-type"; @@ -31,10 +30,8 @@ import i18next from "#app/plugins/i18n"; import type MysteryEncounter from "#app/data/mystery-encounters/mystery-encounter"; import { MysteryEncounterMode } from "#enums/mystery-encounter-mode"; import type { CustomModifierSettings } from "#app/modifier/modifier-type"; -import { ModifierTier } from "#enums/modifier-tier"; import type { MysteryEncounterType } from "#enums/mystery-encounter-type"; import { BattleType } from "#enums/battle-type"; -import { ClassicFixedBossWaves } from "#enums/fixed-boss-waves"; import { BattlerIndex } from "#enums/battler-index"; export interface TurnCommand { @@ -567,369 +564,3 @@ export function getRandomTrainerFunc( return new Trainer(trainerTypes[rand], trainerGender); }; } - -export interface FixedBattleConfigs { - [key: number]: FixedBattleConfig; -} -/** - * Youngster/Lass on 5 - * Rival on 8, 55, 95, 145, 195 - * Evil team grunts on 35, 62, 64, and 112 - * Evil team admin on 66 and 114 - * Evil leader on 115, 165 - * E4 on 182, 184, 186, 188 - * Champion on 190 - */ -export const classicFixedBattles: FixedBattleConfigs = { - [ClassicFixedBossWaves.TOWN_YOUNGSTER]: new FixedBattleConfig() - .setBattleType(BattleType.TRAINER) - .setGetTrainerFunc( - () => new Trainer(TrainerType.YOUNGSTER, randSeedInt(2) ? TrainerVariant.FEMALE : TrainerVariant.DEFAULT), - ), - [ClassicFixedBossWaves.RIVAL_1]: new FixedBattleConfig() - .setBattleType(BattleType.TRAINER) - .setGetTrainerFunc( - () => - new Trainer( - TrainerType.RIVAL, - globalScene.gameData.gender === PlayerGender.MALE ? TrainerVariant.FEMALE : TrainerVariant.DEFAULT, - ), - ), - [ClassicFixedBossWaves.RIVAL_2]: new FixedBattleConfig() - .setBattleType(BattleType.TRAINER) - .setGetTrainerFunc( - () => - new Trainer( - TrainerType.RIVAL_2, - globalScene.gameData.gender === PlayerGender.MALE ? TrainerVariant.FEMALE : TrainerVariant.DEFAULT, - ), - ) - .setCustomModifierRewards({ - guaranteedModifierTiers: [ModifierTier.ULTRA, ModifierTier.GREAT, ModifierTier.GREAT], - allowLuckUpgrades: false, - }), - [ClassicFixedBossWaves.EVIL_GRUNT_1]: new FixedBattleConfig() - .setBattleType(BattleType.TRAINER) - .setGetTrainerFunc( - getRandomTrainerFunc( - [ - TrainerType.ROCKET_GRUNT, - TrainerType.MAGMA_GRUNT, - TrainerType.AQUA_GRUNT, - TrainerType.GALACTIC_GRUNT, - TrainerType.PLASMA_GRUNT, - TrainerType.FLARE_GRUNT, - TrainerType.AETHER_GRUNT, - TrainerType.SKULL_GRUNT, - TrainerType.MACRO_GRUNT, - TrainerType.STAR_GRUNT, - ], - true, - ), - ), - [ClassicFixedBossWaves.RIVAL_3]: new FixedBattleConfig() - .setBattleType(BattleType.TRAINER) - .setGetTrainerFunc( - () => - new Trainer( - TrainerType.RIVAL_3, - globalScene.gameData.gender === PlayerGender.MALE ? TrainerVariant.FEMALE : TrainerVariant.DEFAULT, - ), - ) - .setCustomModifierRewards({ - guaranteedModifierTiers: [ModifierTier.ULTRA, ModifierTier.ULTRA, ModifierTier.GREAT, ModifierTier.GREAT], - allowLuckUpgrades: false, - }), - [ClassicFixedBossWaves.EVIL_GRUNT_2]: new FixedBattleConfig() - .setBattleType(BattleType.TRAINER) - .setSeedOffsetWave(ClassicFixedBossWaves.EVIL_GRUNT_1) - .setGetTrainerFunc( - getRandomTrainerFunc( - [ - TrainerType.ROCKET_GRUNT, - TrainerType.MAGMA_GRUNT, - TrainerType.AQUA_GRUNT, - TrainerType.GALACTIC_GRUNT, - TrainerType.PLASMA_GRUNT, - TrainerType.FLARE_GRUNT, - TrainerType.AETHER_GRUNT, - TrainerType.SKULL_GRUNT, - TrainerType.MACRO_GRUNT, - TrainerType.STAR_GRUNT, - ], - true, - ), - ), - [ClassicFixedBossWaves.EVIL_GRUNT_3]: new FixedBattleConfig() - .setBattleType(BattleType.TRAINER) - .setSeedOffsetWave(ClassicFixedBossWaves.EVIL_GRUNT_1) - .setGetTrainerFunc( - getRandomTrainerFunc( - [ - TrainerType.ROCKET_GRUNT, - TrainerType.MAGMA_GRUNT, - TrainerType.AQUA_GRUNT, - TrainerType.GALACTIC_GRUNT, - TrainerType.PLASMA_GRUNT, - TrainerType.FLARE_GRUNT, - TrainerType.AETHER_GRUNT, - TrainerType.SKULL_GRUNT, - TrainerType.MACRO_GRUNT, - TrainerType.STAR_GRUNT, - ], - true, - ), - ), - [ClassicFixedBossWaves.EVIL_ADMIN_1]: new FixedBattleConfig() - .setBattleType(BattleType.TRAINER) - .setSeedOffsetWave(ClassicFixedBossWaves.EVIL_GRUNT_1) - .setGetTrainerFunc( - getRandomTrainerFunc( - [ - [TrainerType.ARCHER, TrainerType.ARIANA, TrainerType.PROTON, TrainerType.PETREL], - [TrainerType.TABITHA, TrainerType.COURTNEY], - [TrainerType.MATT, TrainerType.SHELLY], - [TrainerType.JUPITER, TrainerType.MARS, TrainerType.SATURN], - [TrainerType.ZINZOLIN, TrainerType.COLRESS], - [TrainerType.XEROSIC, TrainerType.BRYONY], - TrainerType.FABA, - TrainerType.PLUMERIA, - TrainerType.OLEANA, - [TrainerType.GIACOMO, TrainerType.MELA, TrainerType.ATTICUS, TrainerType.ORTEGA, TrainerType.ERI], - ], - true, - ), - ), - [ClassicFixedBossWaves.RIVAL_4]: new FixedBattleConfig() - .setBattleType(BattleType.TRAINER) - .setGetTrainerFunc( - () => - new Trainer( - TrainerType.RIVAL_4, - globalScene.gameData.gender === PlayerGender.MALE ? TrainerVariant.FEMALE : TrainerVariant.DEFAULT, - ), - ) - .setCustomModifierRewards({ - guaranteedModifierTiers: [ModifierTier.ULTRA, ModifierTier.ULTRA, ModifierTier.ULTRA, ModifierTier.ULTRA], - allowLuckUpgrades: false, - }), - [ClassicFixedBossWaves.EVIL_GRUNT_4]: new FixedBattleConfig() - .setBattleType(BattleType.TRAINER) - .setSeedOffsetWave(ClassicFixedBossWaves.EVIL_GRUNT_1) - .setGetTrainerFunc( - getRandomTrainerFunc( - [ - TrainerType.ROCKET_GRUNT, - TrainerType.MAGMA_GRUNT, - TrainerType.AQUA_GRUNT, - TrainerType.GALACTIC_GRUNT, - TrainerType.PLASMA_GRUNT, - TrainerType.FLARE_GRUNT, - TrainerType.AETHER_GRUNT, - TrainerType.SKULL_GRUNT, - TrainerType.MACRO_GRUNT, - TrainerType.STAR_GRUNT, - ], - true, - ), - ), - [ClassicFixedBossWaves.EVIL_ADMIN_2]: new FixedBattleConfig() - .setBattleType(BattleType.TRAINER) - .setSeedOffsetWave(ClassicFixedBossWaves.EVIL_GRUNT_1) - .setGetTrainerFunc( - getRandomTrainerFunc( - [ - [TrainerType.ARCHER, TrainerType.ARIANA, TrainerType.PROTON, TrainerType.PETREL], - [TrainerType.TABITHA, TrainerType.COURTNEY], - [TrainerType.MATT, TrainerType.SHELLY], - [TrainerType.JUPITER, TrainerType.MARS, TrainerType.SATURN], - [TrainerType.ZINZOLIN, TrainerType.COLRESS], - [TrainerType.XEROSIC, TrainerType.BRYONY], - TrainerType.FABA, - TrainerType.PLUMERIA, - TrainerType.OLEANA, - [TrainerType.GIACOMO, TrainerType.MELA, TrainerType.ATTICUS, TrainerType.ORTEGA, TrainerType.ERI], - ], - true, - 1, - ), - ), - [ClassicFixedBossWaves.EVIL_BOSS_1]: new FixedBattleConfig() - .setBattleType(BattleType.TRAINER) - .setSeedOffsetWave(ClassicFixedBossWaves.EVIL_GRUNT_1) - .setGetTrainerFunc( - getRandomTrainerFunc([ - TrainerType.ROCKET_BOSS_GIOVANNI_1, - TrainerType.MAXIE, - TrainerType.ARCHIE, - TrainerType.CYRUS, - TrainerType.GHETSIS, - TrainerType.LYSANDRE, - TrainerType.LUSAMINE, - TrainerType.GUZMA, - TrainerType.ROSE, - TrainerType.PENNY, - ]), - ) - .setCustomModifierRewards({ - guaranteedModifierTiers: [ - ModifierTier.ROGUE, - ModifierTier.ROGUE, - ModifierTier.ULTRA, - ModifierTier.ULTRA, - ModifierTier.ULTRA, - ], - allowLuckUpgrades: false, - }), - [ClassicFixedBossWaves.RIVAL_5]: new FixedBattleConfig() - .setBattleType(BattleType.TRAINER) - .setGetTrainerFunc( - () => - new Trainer( - TrainerType.RIVAL_5, - globalScene.gameData.gender === PlayerGender.MALE ? TrainerVariant.FEMALE : TrainerVariant.DEFAULT, - ), - ) - .setCustomModifierRewards({ - guaranteedModifierTiers: [ - ModifierTier.ROGUE, - ModifierTier.ROGUE, - ModifierTier.ROGUE, - ModifierTier.ULTRA, - ModifierTier.ULTRA, - ], - allowLuckUpgrades: false, - }), - [ClassicFixedBossWaves.EVIL_BOSS_2]: new FixedBattleConfig() - .setBattleType(BattleType.TRAINER) - .setSeedOffsetWave(ClassicFixedBossWaves.EVIL_GRUNT_1) - .setGetTrainerFunc( - getRandomTrainerFunc([ - TrainerType.ROCKET_BOSS_GIOVANNI_2, - TrainerType.MAXIE_2, - TrainerType.ARCHIE_2, - TrainerType.CYRUS_2, - TrainerType.GHETSIS_2, - TrainerType.LYSANDRE_2, - TrainerType.LUSAMINE_2, - TrainerType.GUZMA_2, - TrainerType.ROSE_2, - TrainerType.PENNY_2, - ]), - ) - .setCustomModifierRewards({ - guaranteedModifierTiers: [ - ModifierTier.ROGUE, - ModifierTier.ROGUE, - ModifierTier.ULTRA, - ModifierTier.ULTRA, - ModifierTier.ULTRA, - ModifierTier.ULTRA, - ], - allowLuckUpgrades: false, - }), - [ClassicFixedBossWaves.ELITE_FOUR_1]: new FixedBattleConfig() - .setBattleType(BattleType.TRAINER) - .setGetTrainerFunc( - getRandomTrainerFunc([ - TrainerType.LORELEI, - TrainerType.WILL, - TrainerType.SIDNEY, - TrainerType.AARON, - TrainerType.SHAUNTAL, - TrainerType.MALVA, - [TrainerType.HALA, TrainerType.MOLAYNE], - TrainerType.MARNIE_ELITE, - TrainerType.RIKA, - TrainerType.CRISPIN, - ]), - ), - [ClassicFixedBossWaves.ELITE_FOUR_2]: new FixedBattleConfig() - .setBattleType(BattleType.TRAINER) - .setSeedOffsetWave(ClassicFixedBossWaves.ELITE_FOUR_1) - .setGetTrainerFunc( - getRandomTrainerFunc([ - TrainerType.BRUNO, - TrainerType.KOGA, - TrainerType.PHOEBE, - TrainerType.BERTHA, - TrainerType.MARSHAL, - TrainerType.SIEBOLD, - TrainerType.OLIVIA, - TrainerType.NESSA_ELITE, - TrainerType.POPPY, - TrainerType.AMARYS, - ]), - ), - [ClassicFixedBossWaves.ELITE_FOUR_3]: new FixedBattleConfig() - .setBattleType(BattleType.TRAINER) - .setSeedOffsetWave(ClassicFixedBossWaves.ELITE_FOUR_1) - .setGetTrainerFunc( - getRandomTrainerFunc([ - TrainerType.AGATHA, - TrainerType.BRUNO, - TrainerType.GLACIA, - TrainerType.FLINT, - TrainerType.GRIMSLEY, - TrainerType.WIKSTROM, - TrainerType.ACEROLA, - [TrainerType.BEA_ELITE, TrainerType.ALLISTER_ELITE], - TrainerType.LARRY_ELITE, - TrainerType.LACEY, - ]), - ), - [ClassicFixedBossWaves.ELITE_FOUR_4]: new FixedBattleConfig() - .setBattleType(BattleType.TRAINER) - .setSeedOffsetWave(ClassicFixedBossWaves.ELITE_FOUR_1) - .setGetTrainerFunc( - getRandomTrainerFunc([ - TrainerType.LANCE, - TrainerType.KAREN, - TrainerType.DRAKE, - TrainerType.LUCIAN, - TrainerType.CAITLIN, - TrainerType.DRASNA, - TrainerType.KAHILI, - TrainerType.RAIHAN_ELITE, - TrainerType.HASSEL, - TrainerType.DRAYTON, - ]), - ), - [ClassicFixedBossWaves.CHAMPION]: new FixedBattleConfig() - .setBattleType(BattleType.TRAINER) - .setSeedOffsetWave(ClassicFixedBossWaves.ELITE_FOUR_1) - .setGetTrainerFunc( - getRandomTrainerFunc([ - TrainerType.BLUE, - [TrainerType.RED, TrainerType.LANCE_CHAMPION], - [TrainerType.STEVEN, TrainerType.WALLACE], - TrainerType.CYNTHIA, - [TrainerType.ALDER, TrainerType.IRIS], - TrainerType.DIANTHA, - [TrainerType.KUKUI, TrainerType.HAU], - [TrainerType.LEON, TrainerType.MUSTARD], - [TrainerType.GEETA, TrainerType.NEMONA], - TrainerType.KIERAN, - ]), - ), - [ClassicFixedBossWaves.RIVAL_6]: new FixedBattleConfig() - .setBattleType(BattleType.TRAINER) - .setGetTrainerFunc( - () => - new Trainer( - TrainerType.RIVAL_6, - globalScene.gameData.gender === PlayerGender.MALE ? TrainerVariant.FEMALE : TrainerVariant.DEFAULT, - ), - ) - .setCustomModifierRewards({ - guaranteedModifierTiers: [ - ModifierTier.ROGUE, - ModifierTier.ROGUE, - ModifierTier.ULTRA, - ModifierTier.ULTRA, - ModifierTier.GREAT, - ModifierTier.GREAT, - ], - allowLuckUpgrades: false, - }), -}; diff --git a/src/data/mystery-encounters/encounters/bug-type-superfan-encounter.ts b/src/data/mystery-encounters/encounters/bug-type-superfan-encounter.ts index df06f40c159..5ae23ffe9ae 100644 --- a/src/data/mystery-encounters/encounters/bug-type-superfan-encounter.ts +++ b/src/data/mystery-encounters/encounters/bug-type-superfan-encounter.ts @@ -10,8 +10,8 @@ import { transitionMysteryEncounterIntroVisuals, } from "#app/data/mystery-encounters/utils/encounter-phase-utils"; import { getRandomPartyMemberFunc, trainerConfigs } from "#app/data/trainers/trainer-config"; -import { TrainerPartyCompoundTemplate } from "#app/data/trainers/TrainerPartyTemplate"; -import { TrainerPartyTemplate } from "#app/data/trainers/TrainerPartyTemplate"; +import { TrainerPartyCompoundTemplate } from "#app/data/trainers/trainer-party-template"; +import { TrainerPartyTemplate } from "#app/data/trainers/trainer-party-template"; import { TrainerSlot } from "#enums/trainer-slot"; import { MysteryEncounterType } from "#enums/mystery-encounter-type"; import { PartyMemberStrength } from "#enums/party-member-strength"; diff --git a/src/data/mystery-encounters/encounters/clowning-around-encounter.ts b/src/data/mystery-encounters/encounters/clowning-around-encounter.ts index 553c4deb74e..81b0018ce23 100644 --- a/src/data/mystery-encounters/encounters/clowning-around-encounter.ts +++ b/src/data/mystery-encounters/encounters/clowning-around-encounter.ts @@ -9,8 +9,8 @@ import { transitionMysteryEncounterIntroVisuals, } from "#app/data/mystery-encounters/utils/encounter-phase-utils"; import { trainerConfigs } from "#app/data/trainers/trainer-config"; -import { TrainerPartyCompoundTemplate } from "#app/data/trainers/TrainerPartyTemplate"; -import { TrainerPartyTemplate } from "#app/data/trainers/TrainerPartyTemplate"; +import { TrainerPartyCompoundTemplate } from "#app/data/trainers/trainer-party-template"; +import { TrainerPartyTemplate } from "#app/data/trainers/trainer-party-template"; import { ModifierTier } from "#enums/modifier-tier"; import type { PokemonHeldItemModifierType } from "#app/modifier/modifier-type"; import { ModifierPoolType } from "#enums/modifier-pool-type"; diff --git a/src/data/mystery-encounters/encounters/mysterious-challengers-encounter.ts b/src/data/mystery-encounters/encounters/mysterious-challengers-encounter.ts index ae3d905cf91..730a9580319 100644 --- a/src/data/mystery-encounters/encounters/mysterious-challengers-encounter.ts +++ b/src/data/mystery-encounters/encounters/mysterious-challengers-encounter.ts @@ -4,9 +4,9 @@ import { setEncounterRewards, } from "#app/data/mystery-encounters/utils/encounter-phase-utils"; import { trainerConfigs } from "#app/data/trainers/trainer-config"; -import { trainerPartyTemplates } from "#app/data/trainers/TrainerPartyTemplate"; -import { TrainerPartyCompoundTemplate } from "#app/data/trainers/TrainerPartyTemplate"; -import { TrainerPartyTemplate } from "#app/data/trainers/TrainerPartyTemplate"; +import { trainerPartyTemplates } from "#app/data/trainers/trainer-party-template"; +import { TrainerPartyCompoundTemplate } from "#app/data/trainers/trainer-party-template"; +import { TrainerPartyTemplate } from "#app/data/trainers/trainer-party-template"; import { ModifierTier } from "#enums/modifier-tier"; import { modifierTypes } from "#app/data/data-lists"; import { MysteryEncounterType } from "#enums/mystery-encounter-type"; diff --git a/src/data/mystery-encounters/encounters/weird-dream-encounter.ts b/src/data/mystery-encounters/encounters/weird-dream-encounter.ts index 1ba756c7f5d..6c482a474b0 100644 --- a/src/data/mystery-encounters/encounters/weird-dream-encounter.ts +++ b/src/data/mystery-encounters/encounters/weird-dream-encounter.ts @@ -42,7 +42,7 @@ import PokemonData from "#app/system/pokemon-data"; import { Nature } from "#enums/nature"; import type HeldModifierConfig from "#app/@types/held-modifier-config"; import { trainerConfigs } from "#app/data/trainers/trainer-config"; -import { TrainerPartyTemplate } from "#app/data/trainers/TrainerPartyTemplate"; +import { TrainerPartyTemplate } from "#app/data/trainers/trainer-party-template"; import { PartyMemberStrength } from "#enums/party-member-strength"; /** i18n namespace for encounter */ diff --git a/src/data/trainers/fixed-battle-configs.ts b/src/data/trainers/fixed-battle-configs.ts new file mode 100644 index 00000000000..587d8019c19 --- /dev/null +++ b/src/data/trainers/fixed-battle-configs.ts @@ -0,0 +1,376 @@ +import { FixedBattleConfig, getRandomTrainerFunc } from "#app/battle"; +import Trainer from "#app/field/trainer"; +import { globalScene } from "#app/global-scene"; +import { randSeedInt } from "#app/utils/common"; +import { BattleType } from "#enums/battle-type"; +import { ClassicFixedBossWaves } from "#enums/fixed-boss-waves"; +import { ModifierTier } from "#enums/modifier-tier"; +import { PlayerGender } from "#enums/player-gender"; +import { TrainerType } from "#enums/trainer-type"; +import { TrainerVariant } from "#enums/trainer-variant"; + +export interface FixedBattleConfigs { + [key: number]: FixedBattleConfig; +} +/** + * Youngster/Lass on 5 + * Rival on 8, 55, 95, 145, 195 + * Evil team grunts on 35, 62, 64, and 112 + * Evil team admin on 66 and 114 + * Evil leader on 115, 165 + * E4 on 182, 184, 186, 188 + * Champion on 190 + */ +export const classicFixedBattles: FixedBattleConfigs = { + [ClassicFixedBossWaves.TOWN_YOUNGSTER]: new FixedBattleConfig() + .setBattleType(BattleType.TRAINER) + .setGetTrainerFunc( + () => new Trainer(TrainerType.YOUNGSTER, randSeedInt(2) ? TrainerVariant.FEMALE : TrainerVariant.DEFAULT), + ), + [ClassicFixedBossWaves.RIVAL_1]: new FixedBattleConfig() + .setBattleType(BattleType.TRAINER) + .setGetTrainerFunc( + () => + new Trainer( + TrainerType.RIVAL, + globalScene.gameData.gender === PlayerGender.MALE ? TrainerVariant.FEMALE : TrainerVariant.DEFAULT, + ), + ), + [ClassicFixedBossWaves.RIVAL_2]: new FixedBattleConfig() + .setBattleType(BattleType.TRAINER) + .setGetTrainerFunc( + () => + new Trainer( + TrainerType.RIVAL_2, + globalScene.gameData.gender === PlayerGender.MALE ? TrainerVariant.FEMALE : TrainerVariant.DEFAULT, + ), + ) + .setCustomModifierRewards({ + guaranteedModifierTiers: [ModifierTier.ULTRA, ModifierTier.GREAT, ModifierTier.GREAT], + allowLuckUpgrades: false, + }), + [ClassicFixedBossWaves.EVIL_GRUNT_1]: new FixedBattleConfig() + .setBattleType(BattleType.TRAINER) + .setGetTrainerFunc( + getRandomTrainerFunc( + [ + TrainerType.ROCKET_GRUNT, + TrainerType.MAGMA_GRUNT, + TrainerType.AQUA_GRUNT, + TrainerType.GALACTIC_GRUNT, + TrainerType.PLASMA_GRUNT, + TrainerType.FLARE_GRUNT, + TrainerType.AETHER_GRUNT, + TrainerType.SKULL_GRUNT, + TrainerType.MACRO_GRUNT, + TrainerType.STAR_GRUNT, + ], + true, + ), + ), + [ClassicFixedBossWaves.RIVAL_3]: new FixedBattleConfig() + .setBattleType(BattleType.TRAINER) + .setGetTrainerFunc( + () => + new Trainer( + TrainerType.RIVAL_3, + globalScene.gameData.gender === PlayerGender.MALE ? TrainerVariant.FEMALE : TrainerVariant.DEFAULT, + ), + ) + .setCustomModifierRewards({ + guaranteedModifierTiers: [ModifierTier.ULTRA, ModifierTier.ULTRA, ModifierTier.GREAT, ModifierTier.GREAT], + allowLuckUpgrades: false, + }), + [ClassicFixedBossWaves.EVIL_GRUNT_2]: new FixedBattleConfig() + .setBattleType(BattleType.TRAINER) + .setSeedOffsetWave(ClassicFixedBossWaves.EVIL_GRUNT_1) + .setGetTrainerFunc( + getRandomTrainerFunc( + [ + TrainerType.ROCKET_GRUNT, + TrainerType.MAGMA_GRUNT, + TrainerType.AQUA_GRUNT, + TrainerType.GALACTIC_GRUNT, + TrainerType.PLASMA_GRUNT, + TrainerType.FLARE_GRUNT, + TrainerType.AETHER_GRUNT, + TrainerType.SKULL_GRUNT, + TrainerType.MACRO_GRUNT, + TrainerType.STAR_GRUNT, + ], + true, + ), + ), + [ClassicFixedBossWaves.EVIL_GRUNT_3]: new FixedBattleConfig() + .setBattleType(BattleType.TRAINER) + .setSeedOffsetWave(ClassicFixedBossWaves.EVIL_GRUNT_1) + .setGetTrainerFunc( + getRandomTrainerFunc( + [ + TrainerType.ROCKET_GRUNT, + TrainerType.MAGMA_GRUNT, + TrainerType.AQUA_GRUNT, + TrainerType.GALACTIC_GRUNT, + TrainerType.PLASMA_GRUNT, + TrainerType.FLARE_GRUNT, + TrainerType.AETHER_GRUNT, + TrainerType.SKULL_GRUNT, + TrainerType.MACRO_GRUNT, + TrainerType.STAR_GRUNT, + ], + true, + ), + ), + [ClassicFixedBossWaves.EVIL_ADMIN_1]: new FixedBattleConfig() + .setBattleType(BattleType.TRAINER) + .setSeedOffsetWave(ClassicFixedBossWaves.EVIL_GRUNT_1) + .setGetTrainerFunc( + getRandomTrainerFunc( + [ + [TrainerType.ARCHER, TrainerType.ARIANA, TrainerType.PROTON, TrainerType.PETREL], + [TrainerType.TABITHA, TrainerType.COURTNEY], + [TrainerType.MATT, TrainerType.SHELLY], + [TrainerType.JUPITER, TrainerType.MARS, TrainerType.SATURN], + [TrainerType.ZINZOLIN, TrainerType.COLRESS], + [TrainerType.XEROSIC, TrainerType.BRYONY], + TrainerType.FABA, + TrainerType.PLUMERIA, + TrainerType.OLEANA, + [TrainerType.GIACOMO, TrainerType.MELA, TrainerType.ATTICUS, TrainerType.ORTEGA, TrainerType.ERI], + ], + true, + ), + ), + [ClassicFixedBossWaves.RIVAL_4]: new FixedBattleConfig() + .setBattleType(BattleType.TRAINER) + .setGetTrainerFunc( + () => + new Trainer( + TrainerType.RIVAL_4, + globalScene.gameData.gender === PlayerGender.MALE ? TrainerVariant.FEMALE : TrainerVariant.DEFAULT, + ), + ) + .setCustomModifierRewards({ + guaranteedModifierTiers: [ModifierTier.ULTRA, ModifierTier.ULTRA, ModifierTier.ULTRA, ModifierTier.ULTRA], + allowLuckUpgrades: false, + }), + [ClassicFixedBossWaves.EVIL_GRUNT_4]: new FixedBattleConfig() + .setBattleType(BattleType.TRAINER) + .setSeedOffsetWave(ClassicFixedBossWaves.EVIL_GRUNT_1) + .setGetTrainerFunc( + getRandomTrainerFunc( + [ + TrainerType.ROCKET_GRUNT, + TrainerType.MAGMA_GRUNT, + TrainerType.AQUA_GRUNT, + TrainerType.GALACTIC_GRUNT, + TrainerType.PLASMA_GRUNT, + TrainerType.FLARE_GRUNT, + TrainerType.AETHER_GRUNT, + TrainerType.SKULL_GRUNT, + TrainerType.MACRO_GRUNT, + TrainerType.STAR_GRUNT, + ], + true, + ), + ), + [ClassicFixedBossWaves.EVIL_ADMIN_2]: new FixedBattleConfig() + .setBattleType(BattleType.TRAINER) + .setSeedOffsetWave(ClassicFixedBossWaves.EVIL_GRUNT_1) + .setGetTrainerFunc( + getRandomTrainerFunc( + [ + [TrainerType.ARCHER, TrainerType.ARIANA, TrainerType.PROTON, TrainerType.PETREL], + [TrainerType.TABITHA, TrainerType.COURTNEY], + [TrainerType.MATT, TrainerType.SHELLY], + [TrainerType.JUPITER, TrainerType.MARS, TrainerType.SATURN], + [TrainerType.ZINZOLIN, TrainerType.COLRESS], + [TrainerType.XEROSIC, TrainerType.BRYONY], + TrainerType.FABA, + TrainerType.PLUMERIA, + TrainerType.OLEANA, + [TrainerType.GIACOMO, TrainerType.MELA, TrainerType.ATTICUS, TrainerType.ORTEGA, TrainerType.ERI], + ], + true, + 1, + ), + ), + [ClassicFixedBossWaves.EVIL_BOSS_1]: new FixedBattleConfig() + .setBattleType(BattleType.TRAINER) + .setSeedOffsetWave(ClassicFixedBossWaves.EVIL_GRUNT_1) + .setGetTrainerFunc( + getRandomTrainerFunc([ + TrainerType.ROCKET_BOSS_GIOVANNI_1, + TrainerType.MAXIE, + TrainerType.ARCHIE, + TrainerType.CYRUS, + TrainerType.GHETSIS, + TrainerType.LYSANDRE, + TrainerType.LUSAMINE, + TrainerType.GUZMA, + TrainerType.ROSE, + TrainerType.PENNY, + ]), + ) + .setCustomModifierRewards({ + guaranteedModifierTiers: [ + ModifierTier.ROGUE, + ModifierTier.ROGUE, + ModifierTier.ULTRA, + ModifierTier.ULTRA, + ModifierTier.ULTRA, + ], + allowLuckUpgrades: false, + }), + [ClassicFixedBossWaves.RIVAL_5]: new FixedBattleConfig() + .setBattleType(BattleType.TRAINER) + .setGetTrainerFunc( + () => + new Trainer( + TrainerType.RIVAL_5, + globalScene.gameData.gender === PlayerGender.MALE ? TrainerVariant.FEMALE : TrainerVariant.DEFAULT, + ), + ) + .setCustomModifierRewards({ + guaranteedModifierTiers: [ + ModifierTier.ROGUE, + ModifierTier.ROGUE, + ModifierTier.ROGUE, + ModifierTier.ULTRA, + ModifierTier.ULTRA, + ], + allowLuckUpgrades: false, + }), + [ClassicFixedBossWaves.EVIL_BOSS_2]: new FixedBattleConfig() + .setBattleType(BattleType.TRAINER) + .setSeedOffsetWave(ClassicFixedBossWaves.EVIL_GRUNT_1) + .setGetTrainerFunc( + getRandomTrainerFunc([ + TrainerType.ROCKET_BOSS_GIOVANNI_2, + TrainerType.MAXIE_2, + TrainerType.ARCHIE_2, + TrainerType.CYRUS_2, + TrainerType.GHETSIS_2, + TrainerType.LYSANDRE_2, + TrainerType.LUSAMINE_2, + TrainerType.GUZMA_2, + TrainerType.ROSE_2, + TrainerType.PENNY_2, + ]), + ) + .setCustomModifierRewards({ + guaranteedModifierTiers: [ + ModifierTier.ROGUE, + ModifierTier.ROGUE, + ModifierTier.ULTRA, + ModifierTier.ULTRA, + ModifierTier.ULTRA, + ModifierTier.ULTRA, + ], + allowLuckUpgrades: false, + }), + [ClassicFixedBossWaves.ELITE_FOUR_1]: new FixedBattleConfig() + .setBattleType(BattleType.TRAINER) + .setGetTrainerFunc( + getRandomTrainerFunc([ + TrainerType.LORELEI, + TrainerType.WILL, + TrainerType.SIDNEY, + TrainerType.AARON, + TrainerType.SHAUNTAL, + TrainerType.MALVA, + [TrainerType.HALA, TrainerType.MOLAYNE], + TrainerType.MARNIE_ELITE, + TrainerType.RIKA, + TrainerType.CRISPIN, + ]), + ), + [ClassicFixedBossWaves.ELITE_FOUR_2]: new FixedBattleConfig() + .setBattleType(BattleType.TRAINER) + .setSeedOffsetWave(ClassicFixedBossWaves.ELITE_FOUR_1) + .setGetTrainerFunc( + getRandomTrainerFunc([ + TrainerType.BRUNO, + TrainerType.KOGA, + TrainerType.PHOEBE, + TrainerType.BERTHA, + TrainerType.MARSHAL, + TrainerType.SIEBOLD, + TrainerType.OLIVIA, + TrainerType.NESSA_ELITE, + TrainerType.POPPY, + TrainerType.AMARYS, + ]), + ), + [ClassicFixedBossWaves.ELITE_FOUR_3]: new FixedBattleConfig() + .setBattleType(BattleType.TRAINER) + .setSeedOffsetWave(ClassicFixedBossWaves.ELITE_FOUR_1) + .setGetTrainerFunc( + getRandomTrainerFunc([ + TrainerType.AGATHA, + TrainerType.BRUNO, + TrainerType.GLACIA, + TrainerType.FLINT, + TrainerType.GRIMSLEY, + TrainerType.WIKSTROM, + TrainerType.ACEROLA, + [TrainerType.BEA_ELITE, TrainerType.ALLISTER_ELITE], + TrainerType.LARRY_ELITE, + TrainerType.LACEY, + ]), + ), + [ClassicFixedBossWaves.ELITE_FOUR_4]: new FixedBattleConfig() + .setBattleType(BattleType.TRAINER) + .setSeedOffsetWave(ClassicFixedBossWaves.ELITE_FOUR_1) + .setGetTrainerFunc( + getRandomTrainerFunc([ + TrainerType.LANCE, + TrainerType.KAREN, + TrainerType.DRAKE, + TrainerType.LUCIAN, + TrainerType.CAITLIN, + TrainerType.DRASNA, + TrainerType.KAHILI, + TrainerType.RAIHAN_ELITE, + TrainerType.HASSEL, + TrainerType.DRAYTON, + ]), + ), + [ClassicFixedBossWaves.CHAMPION]: new FixedBattleConfig() + .setBattleType(BattleType.TRAINER) + .setSeedOffsetWave(ClassicFixedBossWaves.ELITE_FOUR_1) + .setGetTrainerFunc( + getRandomTrainerFunc([ + TrainerType.BLUE, + [TrainerType.RED, TrainerType.LANCE_CHAMPION], + [TrainerType.STEVEN, TrainerType.WALLACE], + TrainerType.CYNTHIA, + [TrainerType.ALDER, TrainerType.IRIS], + TrainerType.DIANTHA, + [TrainerType.KUKUI, TrainerType.HAU], + [TrainerType.LEON, TrainerType.MUSTARD], + [TrainerType.GEETA, TrainerType.NEMONA], + TrainerType.KIERAN, + ]), + ), + [ClassicFixedBossWaves.RIVAL_6]: new FixedBattleConfig() + .setBattleType(BattleType.TRAINER) + .setGetTrainerFunc( + () => + new Trainer( + TrainerType.RIVAL_6, + globalScene.gameData.gender === PlayerGender.MALE ? TrainerVariant.FEMALE : TrainerVariant.DEFAULT, + ), + ) + .setCustomModifierRewards({ + guaranteedModifierTiers: [ + ModifierTier.ROGUE, + ModifierTier.ROGUE, + ModifierTier.ULTRA, + ModifierTier.ULTRA, + ModifierTier.GREAT, + ModifierTier.GREAT, + ], + allowLuckUpgrades: false, + }), +}; diff --git a/src/data/trainers/trainer-config.ts b/src/data/trainers/trainer-config.ts index 7c8b5b29fcd..a2ea4a73641 100644 --- a/src/data/trainers/trainer-config.ts +++ b/src/data/trainers/trainer-config.ts @@ -25,7 +25,7 @@ import { TrainerPartyCompoundTemplate, TrainerPartyTemplate, trainerPartyTemplates, -} from "./TrainerPartyTemplate"; +} from "./trainer-party-template"; import { evilAdminTrainerPools } from "./evil-admin-trainer-pools"; // Enum imports diff --git a/src/data/trainers/TrainerPartyTemplate.ts b/src/data/trainers/trainer-party-template.ts similarity index 100% rename from src/data/trainers/TrainerPartyTemplate.ts rename to src/data/trainers/trainer-party-template.ts diff --git a/src/field/trainer.ts b/src/field/trainer.ts index 8ac896e2717..df5a7dbd928 100644 --- a/src/field/trainer.ts +++ b/src/field/trainer.ts @@ -3,10 +3,10 @@ import { pokemonPrevolutions } from "#app/data/balance/pokemon-evolutions"; import type PokemonSpecies from "#app/data/pokemon-species"; import { getPokemonSpecies } from "#app/utils/pokemon-utils"; import type { TrainerConfig } from "#app/data/trainers/trainer-config"; -import type { TrainerPartyTemplate } from "#app/data/trainers/TrainerPartyTemplate"; +import type { TrainerPartyTemplate } from "#app/data/trainers/trainer-party-template"; import { trainerConfigs } from "#app/data/trainers/trainer-config"; -import { trainerPartyTemplates } from "#app/data/trainers/TrainerPartyTemplate"; -import { TrainerPartyCompoundTemplate } from "#app/data/trainers/TrainerPartyTemplate"; +import { trainerPartyTemplates } from "#app/data/trainers/trainer-party-template"; +import { TrainerPartyCompoundTemplate } from "#app/data/trainers/trainer-party-template"; import { TrainerSlot } from "#enums/trainer-slot"; import { TrainerPoolTier } from "#enums/trainer-pool-tier"; import { TeraAIMode } from "#enums/tera-ai-mode"; diff --git a/src/game-mode.ts b/src/game-mode.ts index da6ef62e33c..00f973c3661 100644 --- a/src/game-mode.ts +++ b/src/game-mode.ts @@ -1,6 +1,7 @@ import i18next from "i18next"; -import type { FixedBattleConfigs } from "./battle"; -import { classicFixedBattles, FixedBattleConfig } from "./battle"; +import type { FixedBattleConfigs } from "./data/trainers/fixed-battle-configs"; +import { FixedBattleConfig } from "./battle"; +import { classicFixedBattles } from "./data/trainers/fixed-battle-configs"; import type { Challenge } from "./data/challenge"; import { allChallenges, applyChallenges, copyChallenge } from "./data/challenge"; import { ChallengeType } from "#enums/challenge-type"; diff --git a/test/mystery-encounter/encounters/mysterious-challengers-encounter.test.ts b/test/mystery-encounter/encounters/mysterious-challengers-encounter.test.ts index 478648d88a7..f290ad507d1 100644 --- a/test/mystery-encounter/encounters/mysterious-challengers-encounter.test.ts +++ b/test/mystery-encounter/encounters/mysterious-challengers-encounter.test.ts @@ -17,8 +17,8 @@ import { initSceneWithoutEncounterPhase } from "#test/testUtils/gameManagerUtils import { ModifierTier } from "#enums/modifier-tier"; import { MysteriousChallengersEncounter } from "#app/data/mystery-encounters/encounters/mysterious-challengers-encounter"; import { TrainerConfig } from "#app/data/trainers/trainer-config"; -import { TrainerPartyCompoundTemplate } from "#app/data/trainers/TrainerPartyTemplate"; -import { TrainerPartyTemplate } from "#app/data/trainers/TrainerPartyTemplate"; +import { TrainerPartyCompoundTemplate } from "#app/data/trainers/trainer-party-template"; +import { TrainerPartyTemplate } from "#app/data/trainers/trainer-party-template"; import { PartyMemberStrength } from "#enums/party-member-strength"; import { MysteryEncounterMode } from "#enums/mystery-encounter-mode"; import ModifierSelectUiHandler from "#app/ui/modifier-select-ui-handler";