Update trainer-config.ts

This commit is contained in:
Blitzy 2025-07-23 19:18:00 -05:00 committed by GitHub
parent adee68a6d5
commit f662dad4b3
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -4934,21 +4934,21 @@ export const trainerConfigs: TrainerConfigs = {
.setPartyMemberFunc(3, getRandomPartyMemberFunc([SpeciesId.NIDOQUEEN, SpeciesId.NIDOKING]))
.setPartyMemberFunc(
4,
getRandomPartyMemberFunc([SpeciesId.RHYPERIOR], TrainerSlot.TRAINER, true, p => {
p.generateAndPopulateMoveset();
p.pokeball = PokeballType.ULTRA_BALL;
p.abilityIndex = 1; // Solid Rock
}),
)
.setPartyMemberFunc(
5,
getRandomPartyMemberFunc([SpeciesId.KANGASKHAN], TrainerSlot.TRAINER, true, p => {
p.setBoss(true, 2);
p.generateAndPopulateMoveset();
p.pokeball = PokeballType.ULTRA_BALL;
p.formIndex = 1; // Mega Kangaskhan
p.generateName();
}),
)
.setPartyMemberFunc(
5,
getRandomPartyMemberFunc([SpeciesId.RHYPERIOR], TrainerSlot.TRAINER, true, p => {
p.generateAndPopulateMoveset();
p.pokeball = PokeballType.ULTRA_BALL;
p.abilityIndex = 1; // Solid Rock
p.setBoss(true, 2);
}),
),
[TrainerType.ROCKET_BOSS_GIOVANNI_2]: new TrainerConfig(++t)
.setName("Giovanni")
@ -4957,52 +4957,49 @@ export const trainerConfigs: TrainerConfigs = {
.setVictoryBgm("victory_team_plasma")
.setPartyMemberFunc(
0,
getRandomPartyMemberFunc([SpeciesId.TYRANITAR], TrainerSlot.TRAINER, true, p => {
getRandomPartyMemberFunc([SpeciesId.RHYPERIOR], TrainerSlot.TRAINER, true, p => {
p.setBoss(true, 2);
p.generateAndPopulateMoveset();
p.abilityIndex = 1; // Solid Rock
p.pokeball = PokeballType.ULTRA_BALL;
}),
)
.setPartyMemberFunc(
1,
getRandomPartyMemberFunc([SpeciesId.GASTRODON, SpeciesId.SEISMITOAD], TrainerSlot.TRAINER, true, p => {
if (p.species.speciesId === SpeciesId.GASTRODON) {
p.abilityIndex = 0; // Storm Drain
} else if (p.species.speciesId === SpeciesId.SEISMITOAD) {
p.abilityIndex = 2; // Water Absorb
getRandomPartyMemberFunc([SpeciesId.NIDOKING, SpeciesId.NIDOQUEEN], TrainerSlot.TRAINER, true, p => {
p.generateAndPopulateMoveset();
p.abilityIndex = 2; // Sheer Force
}
}),
)
.setPartyMemberFunc(
2,
getRandomPartyMemberFunc([SpeciesId.GARCHOMP, SpeciesId.EXCADRILL], TrainerSlot.TRAINER, true, p => {
getRandomPartyMemberFunc([SpeciesId.HONCHKROW], TrainerSlot.TRAINER, true, p => {
p.generateAndPopulateMoveset();
p.pokeball = PokeballType.ULTRA_BALL;
if (p.species.speciesId === SpeciesId.GARCHOMP) {
p.abilityIndex = 2; // Rough Skin
} else if (p.species.speciesId === SpeciesId.EXCADRILL) {
p.abilityIndex = 0; // Sand Rush
if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === MoveId.SUCKER_PUNCH)) {
// Check if Sucker Punch is in the moveset, if not, replace the third move with Sucker Punch.
p.moveset[2] = new PokemonMove(MoveId.SUCKER_PUNCH);
}
}),
)
.setPartyMemberFunc(
3,
getRandomPartyMemberFunc([SpeciesId.RHYPERIOR], TrainerSlot.TRAINER, true, p => {
p.generateAndPopulateMoveset();
p.pokeball = PokeballType.ULTRA_BALL;
p.abilityIndex = 1; // Solid Rock
}),
)
.setPartyMemberFunc(
4,
getRandomPartyMemberFunc([SpeciesId.KANGASKHAN], TrainerSlot.TRAINER, true, p => {
p.setBoss(true, 2);
p.generateAndPopulateMoveset();
p.pokeball = PokeballType.ULTRA_BALL;
p.formIndex = 1; // Mega Kangaskhan
p.generateName();
}),
)
.setPartyMemberFunc(
3,
getRandomPartyMemberFunc([SpeciesId.ARTICUNO, SpeciesId.ZAPDOS, SpeciesId.MOLTRES], TrainerSlot.TRAINER, true, p => {
p.generateAndPopulateMoveset();
p.pokeball = PokeballType.ULTRA_BALL;
p.abilityIndex = 2; // Snow Cloak Articuno, Static Zapdos, Flame Body Moltres
p.setBoss(true, 2);
}),
)
.setPartyMemberFunc(
5,
getRandomPartyMemberFunc([SpeciesId.MEWTWO], TrainerSlot.TRAINER, true, p => {
@ -5016,16 +5013,20 @@ export const trainerConfigs: TrainerConfigs = {
.initForEvilTeamLeader("Magma Boss", [])
.setMixedBattleBgm("battle_aqua_magma_boss")
.setVictoryBgm("victory_team_plasma")
.setPartyMemberFunc(0, getRandomPartyMemberFunc([SpeciesId.SOLROCK]))
.setPartyMemberFunc(1, getRandomPartyMemberFunc([SpeciesId.TALONFLAME]))
.setPartyMemberFunc(2, getRandomPartyMemberFunc([SpeciesId.WEEZING, SpeciesId.GALAR_WEEZING]))
.setPartyMemberFunc(
3,
0,
getRandomPartyMemberFunc([SpeciesId.TORKOAL], TrainerSlot.TRAINER, true, p => {
p.generateAndPopulateMoveset();
p.abilityIndex = 1; // Drought
}),
)
.setPartyMemberFunc(1, getRandomPartyMemberFunc([SpeciesId.SCOVILLAIN], TrainerSlot.TRAINER, true, p => {
p.generateAndPopulateMoveset();
p.abilityIndex = 0; // Chlorophyll
}),
)
.setPartyMemberFunc(2, getRandomPartyMemberFunc([SpeciesId.WEEZING, SpeciesId.GALAR_WEEZING]))
.setPartyMemberFunc(3, getRandomPartyMemberFunc([SpeciesId.SOLROCK]))
.setPartyMemberFunc(4, getRandomPartyMemberFunc([SpeciesId.DONPHAN]))
.setPartyMemberFunc(
5,
@ -5100,14 +5101,14 @@ export const trainerConfigs: TrainerConfigs = {
.initForEvilTeamLeader("Aqua Boss", [])
.setMixedBattleBgm("battle_aqua_magma_boss")
.setVictoryBgm("victory_team_plasma")
.setPartyMemberFunc(0, getRandomPartyMemberFunc([SpeciesId.LUDICOLO]))
.setPartyMemberFunc(
1,
0,
getRandomPartyMemberFunc([SpeciesId.PELIPPER], TrainerSlot.TRAINER, true, p => {
p.generateAndPopulateMoveset();
p.abilityIndex = 1; // Drizzle
}),
)
.setPartyMemberFunc(1, getRandomPartyMemberFunc([SpeciesId.LUDICOLO]))
.setPartyMemberFunc(2, getRandomPartyMemberFunc([SpeciesId.MUK, SpeciesId.ALOLA_MUK]))
.setPartyMemberFunc(3, getRandomPartyMemberFunc([SpeciesId.WAILORD]))
.setPartyMemberFunc(
@ -5185,18 +5186,10 @@ export const trainerConfigs: TrainerConfigs = {
.setMixedBattleBgm("battle_galactic_boss")
.setVictoryBgm("victory_team_plasma")
.setPartyMemberFunc(0, getRandomPartyMemberFunc([SpeciesId.GYARADOS]))
.setPartyMemberFunc(1, getRandomPartyMemberFunc([SpeciesId.HONCHKROW, SpeciesId.HISUI_BRAVIARY]))
.setPartyMemberFunc(2, getRandomPartyMemberFunc([SpeciesId.MAGNEZONE]))
.setPartyMemberFunc(1, getRandomPartyMemberFunc([SpeciesId.HONCHKROW, SpeciesId.CROBAT]))
.setPartyMemberFunc(2, getRandomPartyMemberFunc([SpeciesId.MAGNEZONE, SpeciesId.PROBOPASS]))
.setPartyMemberFunc(3, getRandomPartyMemberFunc([SpeciesId.UXIE, SpeciesId.MESPRIT, SpeciesId.AZELF]))
.setPartyMemberFunc(
4,
getRandomPartyMemberFunc([SpeciesId.HOUNDOOM], TrainerSlot.TRAINER, true, p => {
p.generateAndPopulateMoveset();
p.pokeball = PokeballType.ULTRA_BALL;
p.formIndex = 1; // Mega Houndoom
p.generateName();
}),
)
.setPartyMemberFunc(4, getRandomPartyMemberFunc([SpeciesId.HOUNDOOM]))
.setPartyMemberFunc(
5,
getRandomPartyMemberFunc([SpeciesId.WEAVILE], TrainerSlot.TRAINER, true, p => {
@ -5218,7 +5211,7 @@ export const trainerConfigs: TrainerConfigs = {
p.generateAndPopulateMoveset();
}),
)
.setPartyMemberFunc(1, getRandomPartyMemberFunc([SpeciesId.MAGNEZONE]))
.setPartyMemberFunc(1, getRandomPartyMemberFunc([SpeciesId.MAGNEZONE, SpeciesId.PROBOPASS]))
.setPartyMemberFunc(
2,
getRandomPartyMemberFunc([SpeciesId.UXIE, SpeciesId.MESPRIT, SpeciesId.AZELF], TrainerSlot.TRAINER, true, p => {
@ -5334,24 +5327,8 @@ export const trainerConfigs: TrainerConfigs = {
p.gender = Gender.MALE;
}),
)
.setPartyMemberFunc(
3,
getRandomPartyMemberFunc([SpeciesId.DRAGALGE, SpeciesId.CLAWITZER], TrainerSlot.TRAINER, true, p => {
p.generateAndPopulateMoveset();
if (p.species.speciesId === SpeciesId.DRAGALGE) {
p.abilityIndex = 2; // Adaptability
} else if (p.species.speciesId === SpeciesId.CLAWITZER) {
p.abilityIndex = 0; // Mega Launcher
}
}),
)
.setPartyMemberFunc(
4,
getRandomPartyMemberFunc([SpeciesId.GALLADE], TrainerSlot.TRAINER, true, p => {
p.generateAndPopulateMoveset();
p.abilityIndex = 1; // Sharpness
}),
)
.setPartyMemberFunc(3, getRandomPartyMemberFunc([SpeciesId.MALAMAR]))
.setPartyMemberFunc(4, getRandomPartyMemberFunc([SpeciesId.AEGISLASH, SpeciesId.HISUI_GOODRA]))
.setPartyMemberFunc(
5,
getRandomPartyMemberFunc([SpeciesId.GYARADOS], TrainerSlot.TRAINER, true, p => {
@ -5376,21 +5353,11 @@ export const trainerConfigs: TrainerConfigs = {
p.gender = Gender.MALE;
}),
)
.setPartyMemberFunc(
1,
getRandomPartyMemberFunc([SpeciesId.DRAGALGE, SpeciesId.CLAWITZER], TrainerSlot.TRAINER, true, p => {
p.generateAndPopulateMoveset();
if (p.species.speciesId === SpeciesId.DRAGALGE) {
p.abilityIndex = 2; // Adaptability
} else if (p.species.speciesId === SpeciesId.CLAWITZER) {
p.abilityIndex = 0; // Mega Launcher
}
}),
)
.setPartyMemberFunc(1, getRandomPartyMemberFunc([SpeciesId.MIENSHAO]))
.setPartyMemberFunc(2, getRandomPartyMemberFunc([SpeciesId.AEGISLASH, SpeciesId.HISUI_GOODRA]))
.setPartyMemberFunc(
3,
getRandomPartyMemberFunc([SpeciesId.IRON_VALIANT], TrainerSlot.TRAINER, true, p => {
getRandomPartyMemberFunc([SpeciesId.VOLCANION], TrainerSlot.TRAINER, true, p => {
p.generateAndPopulateMoveset();
p.pokeball = PokeballType.ROGUE_BALL;
}),
@ -5427,10 +5394,10 @@ export const trainerConfigs: TrainerConfigs = {
p.gender = Gender.FEMALE;
}),
)
.setPartyMemberFunc(1, getRandomPartyMemberFunc([SpeciesId.LILLIGANT, SpeciesId.HISUI_LILLIGANT]))
.setPartyMemberFunc(2, getRandomPartyMemberFunc([SpeciesId.MILOTIC, SpeciesId.PRIMARINA]))
.setPartyMemberFunc(1, getRandomPartyMemberFunc([SpeciesId.LILLIGANT]))
.setPartyMemberFunc(2, getRandomPartyMemberFunc([SpeciesId.MILOTIC]))
.setPartyMemberFunc(3, getRandomPartyMemberFunc([SpeciesId.GALAR_SLOWBRO, SpeciesId.GALAR_SLOWKING]))
.setPartyMemberFunc(4, getRandomPartyMemberFunc([SpeciesId.BEWEAR]))
.setPartyMemberFunc(4, getRandomPartyMemberFunc([SpeciesId.BEWEAR, SpeciesId.LOPUNNY]))
.setPartyMemberFunc(
5,
getRandomPartyMemberFunc([SpeciesId.NIHILEGO], TrainerSlot.TRAINER, true, p => {
@ -5452,7 +5419,7 @@ export const trainerConfigs: TrainerConfigs = {
p.gender = Gender.FEMALE;
}),
)
.setPartyMemberFunc(1, getRandomPartyMemberFunc([SpeciesId.MILOTIC, SpeciesId.PRIMARINA]))
.setPartyMemberFunc(1, getRandomPartyMemberFunc([SpeciesId.MILOTIC, SpeciesId.LILLIGANT]))
.setPartyMemberFunc(
2,
getRandomPartyMemberFunc([SpeciesId.SILVALLY], TrainerSlot.TRAINER, true, p => {
@ -5532,6 +5499,9 @@ export const trainerConfigs: TrainerConfigs = {
getRandomPartyMemberFunc([SpeciesId.GOLISOPOD], TrainerSlot.TRAINER, true, p => {
p.setBoss(true, 2);
p.generateAndPopulateMoveset();
if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === MoveId.FIRST_IMPRESSION)) {
// Check if First Impression is in the moveset, if not, replace the third move with First Impression.
p.moveset[2] = new PokemonMove(MoveId.FIRST_IMPRESSION);
p.gender = Gender.MALE;
}),
),
@ -5545,6 +5515,9 @@ export const trainerConfigs: TrainerConfigs = {
getRandomPartyMemberFunc([SpeciesId.GOLISOPOD], TrainerSlot.TRAINER, true, p => {
p.setBoss(true, 2);
p.generateAndPopulateMoveset();
if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === MoveId.FIRST_IMPRESSION)) {
// Check if First Impression is in the moveset, if not, replace the third move with First Impression.
p.moveset[2] = new PokemonMove(MoveId.FIRST_IMPRESSION);
p.abilityIndex = 2; // Anticipation
p.gender = Gender.MALE;
}),
@ -5657,13 +5630,7 @@ export const trainerConfigs: TrainerConfigs = {
p.pokeball = PokeballType.ULTRA_BALL;
}),
)
.setPartyMemberFunc(
1,
getRandomPartyMemberFunc([SpeciesId.AEGISLASH, SpeciesId.GHOLDENGO], TrainerSlot.TRAINER, true, p => {
p.generateAndPopulateMoveset();
p.pokeball = PokeballType.ULTRA_BALL;
}),
)
.setPartyMemberFunc(1, getRandomPartyMemberFunc([SpeciesId.CORVIKNIGHT]))
.setPartyMemberFunc(
2,
getRandomPartyMemberFunc([SpeciesId.DRACOZOLT, SpeciesId.DRACOVISH], TrainerSlot.TRAINER, true, p => {
@ -5681,19 +5648,6 @@ export const trainerConfigs: TrainerConfigs = {
)
.setPartyMemberFunc(
4,
getRandomPartyMemberFunc(
[SpeciesId.GALAR_ARTICUNO, SpeciesId.GALAR_ZAPDOS, SpeciesId.GALAR_MOLTRES],
TrainerSlot.TRAINER,
true,
p => {
p.setBoss(true, 2);
p.generateAndPopulateMoveset();
p.pokeball = PokeballType.ULTRA_BALL;
},
),
)
.setPartyMemberFunc(
5,
getRandomPartyMemberFunc([SpeciesId.COPPERAJAH], TrainerSlot.TRAINER, true, p => {
p.setBoss(true, 2);
p.generateAndPopulateMoveset();
@ -5702,24 +5656,35 @@ export const trainerConfigs: TrainerConfigs = {
p.pokeball = PokeballType.ULTRA_BALL;
p.gender = Gender.FEMALE;
}),
.setPartyMemberFunc(
5,
getRandomPartyMemberFunc(
[SpeciesId.GALAR_ARTICUNO, SpeciesId.GALAR_ZAPDOS, SpeciesId.GALAR_MOLTRES], TrainerSlot.TRAINER, true, p => {
p.setBoss(true, 2);
p.generateAndPopulateMoveset();
p.pokeball = PokeballType.ROGUE_BALL
}),
),
[TrainerType.PENNY]: new TrainerConfig(++t)
.setName("Cassiopeia")
.initForEvilTeamLeader("Star Boss", [])
.setMixedBattleBgm("battle_star_boss")
.setVictoryBgm("victory_team_plasma")
.setPartyMemberFunc(0, getRandomPartyMemberFunc([SpeciesId.JOLTEON, SpeciesId.LEAFEON]))
.setPartyMemberFunc(1, getRandomPartyMemberFunc([SpeciesId.VAPOREON, SpeciesId.UMBREON]))
.setPartyMemberFunc(2, getRandomPartyMemberFunc([SpeciesId.ESPEON, SpeciesId.GLACEON]))
.setPartyMemberFunc(3, getRandomPartyMemberFunc([SpeciesId.FLAREON]))
.setPartyMemberFunc(0, getRandomPartyMemberFunc([SpeciesId.ESPEON]))
.setPartyMemberFunc(1, getRandomPartyMemberFunc([SpeciesId.UMBREON]))
.setPartyMemberFunc(2, getRandomPartyMemberFunc([SpeciesId.LEAFEON, SpeciesId.GLACEON]))
.setPartyMemberFunc(
4,
3,
getRandomPartyMemberFunc([SpeciesId.SYLVEON], TrainerSlot.TRAINER, true, p => {
p.abilityIndex = 2; // Pixilate
p.generateAndPopulateMoveset();
p.gender = Gender.FEMALE;
}),
)
.setPartyMemberFunc(4, getRandomPartyMemberFunc([SpeciesId.VAPOREON, SpeciesId.FLAREON, SpeciesId.JOLTEON], TrainerSlot.TRAINER, true, p => {
p.setBoss(true, 2);
p.generateAndPopulateMoveset();
}),
.setPartyMemberFunc(
5,
getRandomPartyMemberFunc([SpeciesId.EEVEE], TrainerSlot.TRAINER, true, p => {
@ -5730,7 +5695,7 @@ export const trainerConfigs: TrainerConfigs = {
p.generateName();
}),
)
.setInstantTera(4), // Tera Fairy Sylveon
.setInstantTera(3), // Tera Fairy Sylveon
[TrainerType.PENNY_2]: new TrainerConfig(++t)
.setName("Cassiopeia")
.initForEvilTeamLeader("Star Boss", [], true)
@ -5742,6 +5707,9 @@ export const trainerConfigs: TrainerConfigs = {
p.setBoss(true, 2);
p.abilityIndex = 2; // Pixilate
p.generateAndPopulateMoveset();
if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === MoveId.HYPER_VOICE)) {
// Check if Hyper Voice is in the moveset, if not, replace the second move with Hyper Voice.
p.moveset[1] = new PokemonMove(MoveId.HYPER_VOICE);
p.gender = Gender.FEMALE;
}),
)
@ -5754,11 +5722,7 @@ export const trainerConfigs: TrainerConfigs = {
)
.setPartyMemberFunc(
2,
getRandomPartyMemberFunc([SpeciesId.RAIKOU, SpeciesId.ENTEI, SpeciesId.SUICUNE], TrainerSlot.TRAINER, true, p => {
p.generateAndPopulateMoveset();
p.pokeball = PokeballType.ULTRA_BALL;
}),
)
getRandomPartyMemberFunc([SpeciesId.UMBREON, Species.ESPEON]))
.setPartyMemberFunc(
3,
getRandomPartyMemberFunc([SpeciesId.REVAVROOM], TrainerSlot.TRAINER, true, p => {
@ -5769,10 +5733,10 @@ export const trainerConfigs: TrainerConfigs = {
)
.setPartyMemberFunc(
4,
getRandomPartyMemberFunc([SpeciesId.ZAMAZENTA], TrainerSlot.TRAINER, true, p => {
p.setBoss(true, 2);
getRandomPartyMemberFunc([SpeciesId.WALKING_WAKE, SpeciesId.GOUGING_FIRE, SpeciesId.RAGING_BOLT], TrainerSlot.TRAINER, true, p => {
p.generateAndPopulateMoveset();
p.pokeball = PokeballType.MASTER_BALL;
p.pokeball = PokeballType.ROGUE_BALL;
p.setBoss(true, 2);
}),
)
.setPartyMemberFunc(
@ -5786,6 +5750,7 @@ export const trainerConfigs: TrainerConfigs = {
}),
)
.setInstantTera(0), // Tera Fairy Sylveon
[TrainerType.BUCK]: new TrainerConfig(++t)
.setName("Buck")
.initForStatTrainer(true)