mirror of
https://github.com/pagefaultgames/pokerogue.git
synced 2025-07-06 16:32:16 +02:00
Make signature species return empty array when key does not exist
This commit is contained in:
parent
0867716347
commit
bbf79fd1e6
@ -4,12 +4,19 @@ export type SignatureSpecies = {
|
||||
[key in string]: (Species | Species[])[];
|
||||
};
|
||||
|
||||
/*
|
||||
/**
|
||||
* The signature species for each Gym Leader, Elite Four member, and Champion.
|
||||
* The key is the trainer type, and the value is an array of Species or Species arrays.
|
||||
* This is in a separate const so it can be accessed from other places and not just the trainerConfigs
|
||||
*
|
||||
* @remarks
|
||||
* The `Proxy` object allows us to define a handler that will intercept
|
||||
* the property access and return an empty array if the property does not exist in the object.
|
||||
*
|
||||
* This means that accessing `signatureSpecies` will not throw an error if the property does not exist,
|
||||
* but instead default to an empty array.
|
||||
*/
|
||||
export const signatureSpecies: SignatureSpecies = {
|
||||
export const signatureSpecies: SignatureSpecies = new Proxy({
|
||||
// Gym Leaders- Kanto
|
||||
BROCK: [Species.ONIX, Species.GEODUDE, [Species.OMANYTE, Species.KABUTO], Species.AERODACTYL],
|
||||
MISTY: [Species.STARYU, Species.PSYDUCK, Species.WOOPER, Species.LAPRAS],
|
||||
@ -92,56 +99,8 @@ export const signatureSpecies: SignatureSpecies = {
|
||||
RYME: [Species.TOXEL, Species.GREAVARD, Species.SHUPPET, Species.MIMIKYU], // Tera Ghost Toxel
|
||||
TULIP: [Species.FLABEBE, Species.FLITTLE, Species.RALTS, Species.GIRAFARIG], // Tera Psychic Flabebe
|
||||
GRUSHA: [Species.SWABLU, Species.CETODDLE, Species.SNOM, Species.CUBCHOO], // Tera Ice Swablu
|
||||
|
||||
// Elite Four- Kanto
|
||||
LORELEI: [],
|
||||
BRUNO: [],
|
||||
AGATHA: [],
|
||||
LANCE: [],
|
||||
// Elite Four- Johto (Bruno included)
|
||||
WILL: [],
|
||||
KOGA: [],
|
||||
KAREN: [],
|
||||
// Elite Four- Hoenn
|
||||
SIDNEY: [],
|
||||
PHOEBE: [],
|
||||
GLACIA: [],
|
||||
DRAKE: [],
|
||||
// Elite Four- Sinnoh
|
||||
AARON: [],
|
||||
BERTHA: [],
|
||||
FLINT: [],
|
||||
LUCIAN: [],
|
||||
// Elite Four- Unova
|
||||
SHAUNTAL: [],
|
||||
MARSHAL: [],
|
||||
GRIMSLEY: [],
|
||||
CAITLIN: [],
|
||||
// Elite Four- Kalos
|
||||
MALVA: [],
|
||||
SIEBOLD: [],
|
||||
WIKSTROM: [],
|
||||
DRASNA: [],
|
||||
// Elite Four- Alola
|
||||
HALA: [],
|
||||
MOLAYNE: [],
|
||||
OLIVIA: [],
|
||||
ACEROLA: [],
|
||||
KAHILI: [],
|
||||
// Elite Four- Galar
|
||||
MARNIE_ELITE: [],
|
||||
NESSA_ELITE: [],
|
||||
BEA_ELITE: [],
|
||||
ALLISTER_ELITE: [],
|
||||
RAIHAN_ELITE: [],
|
||||
// Elite Four- Paldea
|
||||
RIKA: [],
|
||||
POPPY: [],
|
||||
LARRY_ELITE: [],
|
||||
HASSEL: [],
|
||||
// Elite Four- BBL
|
||||
CRISPIN: [],
|
||||
AMARYS: [],
|
||||
LACEY: [],
|
||||
DRAYTON: [],
|
||||
};
|
||||
}, {
|
||||
get(target, prop: string) {
|
||||
return target[prop as keyof SignatureSpecies] ?? [];
|
||||
}
|
||||
});
|
||||
|
@ -707,11 +707,11 @@ export class TrainerConfig {
|
||||
|
||||
/**
|
||||
* Initializes the trainer configuration for an Elite Four member.
|
||||
* @param {Species | Species[]} signatureSpecies The signature species for the Elite Four member.
|
||||
* @param isMale Whether the Elite Four Member is Male or Female (for localization of the title).
|
||||
* @param specialtyType {PokemonType} The specialty type for the Elite Four member.
|
||||
* @param teraSlot Optional, sets the party member in this slot to Terastallize.
|
||||
* @returns {TrainerConfig} The updated TrainerConfig instance.
|
||||
* @param signatureSpecies - The signature species for the Elite Four member.
|
||||
* @param isMale - Whether the Elite Four Member is Male or Female (for localization of the title).
|
||||
* @param specialtyType - The specialty type for the Elite Four member.
|
||||
* @param teraSlot - Optional, sets the party member in this slot to Terastallize.
|
||||
* @returns The updated TrainerConfig instance.
|
||||
**/
|
||||
initForEliteFour(
|
||||
signatureSpecies: (Species | Species[])[],
|
||||
@ -2857,7 +2857,10 @@ export const trainerConfigs: TrainerConfigs = {
|
||||
.setBattleBgm("battle_kanto_gym")
|
||||
.setMixedBattleBgm("battle_kanto_gym")
|
||||
.setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.DEWGONG]))
|
||||
.setPartyMemberFunc(2, getRandomPartyMemberFunc([ Species.SLOWBRO, Species.GALAR_SLOWBRO ], TrainerSlot.TRAINER, true, p => { // Tera Ice Slowbro/G-Slowbro
|
||||
.setPartyMemberFunc(
|
||||
2,
|
||||
getRandomPartyMemberFunc([Species.SLOWBRO, Species.GALAR_SLOWBRO], TrainerSlot.TRAINER, true, p => {
|
||||
// Tera Ice Slowbro/G-Slowbro
|
||||
p.generateAndPopulateMoveset();
|
||||
if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === Moves.ICE_BEAM)) {
|
||||
// Check if Ice Beam is in the moveset, if not, replace the third move with Ice Beam.
|
||||
@ -2867,16 +2870,22 @@ export const trainerConfigs: TrainerConfigs = {
|
||||
)
|
||||
.setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.JYNX]))
|
||||
.setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.CLOYSTER, Species.ALOLA_SANDSLASH]))
|
||||
.setPartyMemberFunc(5, getRandomPartyMemberFunc([ Species.LAPRAS ], TrainerSlot.TRAINER, true, p => {
|
||||
.setPartyMemberFunc(
|
||||
5,
|
||||
getRandomPartyMemberFunc([Species.LAPRAS], TrainerSlot.TRAINER, true, p => {
|
||||
p.setBoss(true, 2);
|
||||
p.generateAndPopulateMoveset();
|
||||
})),
|
||||
}),
|
||||
),
|
||||
[TrainerType.BRUNO]: new TrainerConfig(++t)
|
||||
.initForEliteFour(signatureSpecies["BRUNO"], true, PokemonType.FIGHTING, 2)
|
||||
.setBattleBgm("battle_kanto_gym")
|
||||
.setMixedBattleBgm("battle_kanto_gym")
|
||||
.setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.HITMONCHAN, Species.HITMONLEE, Species.HITMONTOP]))
|
||||
.setPartyMemberFunc(2, getRandomPartyMemberFunc([ Species.STEELIX ], TrainerSlot.TRAINER, true, p => { // Tera Fighting Steelix
|
||||
.setPartyMemberFunc(
|
||||
2,
|
||||
getRandomPartyMemberFunc([Species.STEELIX], TrainerSlot.TRAINER, true, p => {
|
||||
// Tera Fighting Steelix
|
||||
p.generateAndPopulateMoveset();
|
||||
if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === Moves.BODY_PRESS)) {
|
||||
// Check if Body Press is in the moveset, if not, replace the third move with Body Press.
|
||||
@ -2886,16 +2895,22 @@ export const trainerConfigs: TrainerConfigs = {
|
||||
)
|
||||
.setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.POLIWRATH]))
|
||||
.setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.ANNIHILAPE]))
|
||||
.setPartyMemberFunc(5, getRandomPartyMemberFunc([ Species.MACHAMP ], TrainerSlot.TRAINER, true, p => {
|
||||
.setPartyMemberFunc(
|
||||
5,
|
||||
getRandomPartyMemberFunc([Species.MACHAMP], TrainerSlot.TRAINER, true, p => {
|
||||
p.setBoss(true, 2);
|
||||
p.generateAndPopulateMoveset();
|
||||
})),
|
||||
}),
|
||||
),
|
||||
[TrainerType.AGATHA]: new TrainerConfig(++t)
|
||||
.initForEliteFour(signatureSpecies["AGATHA"], false, PokemonType.GHOST, 2)
|
||||
.setBattleBgm("battle_kanto_gym")
|
||||
.setMixedBattleBgm("battle_kanto_gym")
|
||||
.setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.MISMAGIUS]))
|
||||
.setPartyMemberFunc(2, getRandomPartyMemberFunc([ Species.WEEZING, Species.ARBOK ], TrainerSlot.TRAINER, true, p => { // Tera Ghost Arbok/Weezing
|
||||
.setPartyMemberFunc(
|
||||
2,
|
||||
getRandomPartyMemberFunc([Species.WEEZING, Species.ARBOK], TrainerSlot.TRAINER, true, p => {
|
||||
// Tera Ghost Arbok/Weezing
|
||||
p.generateAndPopulateMoveset();
|
||||
if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === Moves.TERA_BLAST)) {
|
||||
// Check if Tera Blast is in the moveset, if not, replace the third move with Tera Blast.
|
||||
@ -2905,17 +2920,23 @@ export const trainerConfigs: TrainerConfigs = {
|
||||
)
|
||||
.setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.ALOLA_MAROWAK]))
|
||||
.setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.CURSOLA]))
|
||||
.setPartyMemberFunc(5, getRandomPartyMemberFunc([ Species.GENGAR ], TrainerSlot.TRAINER, true, p => {
|
||||
.setPartyMemberFunc(
|
||||
5,
|
||||
getRandomPartyMemberFunc([Species.GENGAR], TrainerSlot.TRAINER, true, p => {
|
||||
p.setBoss(true, 2);
|
||||
p.generateAndPopulateMoveset();
|
||||
})),
|
||||
}),
|
||||
),
|
||||
[TrainerType.LANCE]: new TrainerConfig(++t)
|
||||
.setName("Lance")
|
||||
.initForEliteFour(signatureSpecies["LANCE"], true, PokemonType.DRAGON, 2)
|
||||
.setBattleBgm("battle_kanto_gym")
|
||||
.setMixedBattleBgm("battle_kanto_gym")
|
||||
.setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.KINGDRA]))
|
||||
.setPartyMemberFunc(2, getRandomPartyMemberFunc([ Species.GYARADOS, Species.AERODACTYL ], TrainerSlot.TRAINER, true, p => { // Tera Dragon Gyarados/Aerodactyl
|
||||
.setPartyMemberFunc(
|
||||
2,
|
||||
getRandomPartyMemberFunc([Species.GYARADOS, Species.AERODACTYL], TrainerSlot.TRAINER, true, p => {
|
||||
// Tera Dragon Gyarados/Aerodactyl
|
||||
p.generateAndPopulateMoveset();
|
||||
if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === Moves.TERA_BLAST)) {
|
||||
// Check if Tera Blast is in the moveset, if not, replace the third move with Tera Blast.
|
||||
@ -2925,10 +2946,13 @@ export const trainerConfigs: TrainerConfigs = {
|
||||
)
|
||||
.setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.ALOLA_EXEGGUTOR]))
|
||||
.setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.SALAMENCE]))
|
||||
.setPartyMemberFunc(5, getRandomPartyMemberFunc([ Species.DRAGONITE ], TrainerSlot.TRAINER, true, p => {
|
||||
.setPartyMemberFunc(
|
||||
5,
|
||||
getRandomPartyMemberFunc([Species.DRAGONITE], TrainerSlot.TRAINER, true, p => {
|
||||
p.setBoss(true, 2);
|
||||
p.generateAndPopulateMoveset();
|
||||
})),
|
||||
}),
|
||||
),
|
||||
[TrainerType.WILL]: new TrainerConfig(++t)
|
||||
.initForEliteFour(signatureSpecies["WILL"], true, PokemonType.PSYCHIC, 2)
|
||||
.setBattleBgm("battle_johto_gym")
|
||||
@ -2937,31 +2961,43 @@ export const trainerConfigs: TrainerConfigs = {
|
||||
.setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.SLOWKING, Species.GALAR_SLOWKING])) // Tera Psychic Slowking/G-Slowking
|
||||
.setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.EXEGGUTOR]))
|
||||
.setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.FARIGIRAF, Species.WYRDEER]))
|
||||
.setPartyMemberFunc(5, getRandomPartyMemberFunc([ Species.XATU ], TrainerSlot.TRAINER, true, p => {
|
||||
.setPartyMemberFunc(
|
||||
5,
|
||||
getRandomPartyMemberFunc([Species.XATU], TrainerSlot.TRAINER, true, p => {
|
||||
p.setBoss(true, 2);
|
||||
p.generateAndPopulateMoveset();
|
||||
})),
|
||||
}),
|
||||
),
|
||||
[TrainerType.KOGA]: new TrainerConfig(++t)
|
||||
.initForEliteFour(signatureSpecies["KOGA"], true, PokemonType.POISON, 2)
|
||||
.setBattleBgm("battle_johto_gym")
|
||||
.setMixedBattleBgm("battle_johto_gym")
|
||||
.setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.VENOMOTH ], TrainerSlot.TRAINER, true, p => {
|
||||
.setPartyMemberFunc(
|
||||
0,
|
||||
getRandomPartyMemberFunc([Species.VENOMOTH], TrainerSlot.TRAINER, true, p => {
|
||||
p.abilityIndex = 1; // Tinted Lens
|
||||
p.generateAndPopulateMoveset();
|
||||
}))
|
||||
}),
|
||||
)
|
||||
.setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.MUK, Species.WEEZING])) // Tera Poison Muk/Weezing
|
||||
.setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.TENTACRUEL]))
|
||||
.setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.SNEASLER, Species.OVERQWIL]))
|
||||
.setPartyMemberFunc(5, getRandomPartyMemberFunc([ Species.CROBAT ], TrainerSlot.TRAINER, true, p => {
|
||||
.setPartyMemberFunc(
|
||||
5,
|
||||
getRandomPartyMemberFunc([Species.CROBAT], TrainerSlot.TRAINER, true, p => {
|
||||
p.setBoss(true, 2);
|
||||
p.generateAndPopulateMoveset();
|
||||
})),
|
||||
}),
|
||||
),
|
||||
[TrainerType.KAREN]: new TrainerConfig(++t)
|
||||
.initForEliteFour(signatureSpecies["KAREN"], false, PokemonType.DARK, 2)
|
||||
.setBattleBgm("battle_johto_gym")
|
||||
.setMixedBattleBgm("battle_johto_gym")
|
||||
.setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.UMBREON]))
|
||||
.setPartyMemberFunc(2, getRandomPartyMemberFunc([ Species.GENGAR ], TrainerSlot.TRAINER, true, p => { // Tera Dark Gengar
|
||||
.setPartyMemberFunc(
|
||||
2,
|
||||
getRandomPartyMemberFunc([Species.GENGAR], TrainerSlot.TRAINER, true, p => {
|
||||
// Tera Dark Gengar
|
||||
p.generateAndPopulateMoveset();
|
||||
if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === Moves.DARK_PULSE)) {
|
||||
// Check if Dark Pulse is in the moveset, if not, replace the third move with Dark Pulse.
|
||||
@ -2971,10 +3007,13 @@ export const trainerConfigs: TrainerConfigs = {
|
||||
)
|
||||
.setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.HONCHKROW]))
|
||||
.setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.WEAVILE]))
|
||||
.setPartyMemberFunc(5, getRandomPartyMemberFunc([ Species.HOUNDOOM ], TrainerSlot.TRAINER, true, p => {
|
||||
.setPartyMemberFunc(
|
||||
5,
|
||||
getRandomPartyMemberFunc([Species.HOUNDOOM], TrainerSlot.TRAINER, true, p => {
|
||||
p.setBoss(true, 2);
|
||||
p.generateAndPopulateMoveset();
|
||||
})),
|
||||
}),
|
||||
),
|
||||
[TrainerType.SIDNEY]: new TrainerConfig(++t)
|
||||
.initForEliteFour(signatureSpecies["SIDNEY"], true, PokemonType.DARK, 2)
|
||||
.setMixedBattleBgm("battle_hoenn_elite")
|
||||
@ -2982,44 +3021,61 @@ export const trainerConfigs: TrainerConfigs = {
|
||||
.setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.OBSTAGOON])) // Tera Dark Obstagoon
|
||||
.setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.SHIFTRY, Species.CACTURNE]))
|
||||
.setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.SHARPEDO, Species.CRAWDAUNT]))
|
||||
.setPartyMemberFunc(5, getRandomPartyMemberFunc([ Species.ABSOL ], TrainerSlot.TRAINER, true, p => {
|
||||
.setPartyMemberFunc(
|
||||
5,
|
||||
getRandomPartyMemberFunc([Species.ABSOL], TrainerSlot.TRAINER, true, p => {
|
||||
p.setBoss(true, 2);
|
||||
p.generateAndPopulateMoveset();
|
||||
})),
|
||||
}),
|
||||
),
|
||||
[TrainerType.PHOEBE]: new TrainerConfig(++t)
|
||||
.initForEliteFour(signatureSpecies["PHOEBE"], false, PokemonType.GHOST, 2)
|
||||
.setMixedBattleBgm("battle_hoenn_elite")
|
||||
.setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.SABLEYE]))
|
||||
.setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.BANETTE])) // Tera Ghost Banette
|
||||
.setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.DRIFBLIM, Species.MISMAGIUS]))
|
||||
.setPartyMemberFunc(4, getRandomPartyMemberFunc([ Species.ORICORIO, Species.ALOLA_MAROWAK ], TrainerSlot.TRAINER, true, p => {
|
||||
.setPartyMemberFunc(
|
||||
4,
|
||||
getRandomPartyMemberFunc([Species.ORICORIO, Species.ALOLA_MAROWAK], TrainerSlot.TRAINER, true, p => {
|
||||
p.generateAndPopulateMoveset();
|
||||
p.formIndex = p.species.speciesId === Species.ORICORIO ? 3 : 0; // Oricorio-Sensu
|
||||
}),
|
||||
)
|
||||
.setPartyMemberFunc(5, getRandomPartyMemberFunc([ Species.DUSKNOIR ], TrainerSlot.TRAINER, true, p => {
|
||||
.setPartyMemberFunc(
|
||||
5,
|
||||
getRandomPartyMemberFunc([Species.DUSKNOIR], TrainerSlot.TRAINER, true, p => {
|
||||
p.setBoss(true, 2);
|
||||
p.generateAndPopulateMoveset();
|
||||
})),
|
||||
}),
|
||||
),
|
||||
[TrainerType.GLACIA]: new TrainerConfig(++t)
|
||||
.initForEliteFour(signatureSpecies["GLACIA"], false, PokemonType.ICE, 2)
|
||||
.setMixedBattleBgm("battle_hoenn_elite")
|
||||
.setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.ABOMASNOW ], TrainerSlot.TRAINER, true, p => {
|
||||
.setPartyMemberFunc(
|
||||
0,
|
||||
getRandomPartyMemberFunc([Species.ABOMASNOW], TrainerSlot.TRAINER, true, p => {
|
||||
p.abilityIndex = 0; // Snow Warning
|
||||
p.generateAndPopulateMoveset();
|
||||
}))
|
||||
}),
|
||||
)
|
||||
.setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.GLALIE])) // Tera Ice Glalie
|
||||
.setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.FROSLASS]))
|
||||
.setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.ALOLA_NINETALES]))
|
||||
.setPartyMemberFunc(5, getRandomPartyMemberFunc([ Species.WALREIN ], TrainerSlot.TRAINER, true, p => {
|
||||
.setPartyMemberFunc(
|
||||
5,
|
||||
getRandomPartyMemberFunc([Species.WALREIN], TrainerSlot.TRAINER, true, p => {
|
||||
p.setBoss(true, 2);
|
||||
p.generateAndPopulateMoveset();
|
||||
})),
|
||||
}),
|
||||
),
|
||||
[TrainerType.DRAKE]: new TrainerConfig(++t)
|
||||
.initForEliteFour(signatureSpecies["DRAKE"], true, PokemonType.DRAGON, 2)
|
||||
.setMixedBattleBgm("battle_hoenn_elite")
|
||||
.setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.ALTARIA]))
|
||||
.setPartyMemberFunc(2, getRandomPartyMemberFunc([ Species.DHELMISE ], TrainerSlot.TRAINER, true, p => { // Tera Dragon Dhelmise
|
||||
.setPartyMemberFunc(
|
||||
2,
|
||||
getRandomPartyMemberFunc([Species.DHELMISE], TrainerSlot.TRAINER, true, p => {
|
||||
// Tera Dragon Dhelmise
|
||||
p.generateAndPopulateMoveset();
|
||||
if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === Moves.TERA_BLAST)) {
|
||||
// Check if Tera Blast is in the moveset, if not, replace the third move with Tera Blast.
|
||||
@ -3029,10 +3085,13 @@ export const trainerConfigs: TrainerConfigs = {
|
||||
)
|
||||
.setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.FLYGON]))
|
||||
.setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.KINGDRA]))
|
||||
.setPartyMemberFunc(5, getRandomPartyMemberFunc([ Species.SALAMENCE ], TrainerSlot.TRAINER, true, p => {
|
||||
.setPartyMemberFunc(
|
||||
5,
|
||||
getRandomPartyMemberFunc([Species.SALAMENCE], TrainerSlot.TRAINER, true, p => {
|
||||
p.setBoss(true, 2);
|
||||
p.generateAndPopulateMoveset();
|
||||
})),
|
||||
}),
|
||||
),
|
||||
[TrainerType.AARON]: new TrainerConfig(++t)
|
||||
.initForEliteFour(signatureSpecies["AARON"], true, PokemonType.BUG, 5)
|
||||
.setBattleBgm("battle_sinnoh_gym")
|
||||
@ -3041,7 +3100,10 @@ export const trainerConfigs: TrainerConfigs = {
|
||||
.setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.HERACROSS]))
|
||||
.setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.VESPIQUEN]))
|
||||
.setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.SCIZOR, Species.KLEAVOR]))
|
||||
.setPartyMemberFunc(5, getRandomPartyMemberFunc([ Species.DRAPION ], TrainerSlot.TRAINER, true, p => { // Tera Bug Drapion
|
||||
.setPartyMemberFunc(
|
||||
5,
|
||||
getRandomPartyMemberFunc([Species.DRAPION], TrainerSlot.TRAINER, true, p => {
|
||||
// Tera Bug Drapion
|
||||
p.setBoss(true, 2);
|
||||
p.abilityIndex = 1; // Sniper
|
||||
p.generateAndPopulateMoveset();
|
||||
@ -3049,29 +3111,40 @@ export const trainerConfigs: TrainerConfigs = {
|
||||
// Check if X-Scissor is in the moveset, if not, replace the third move with X-Scissor.
|
||||
p.moveset[2] = new PokemonMove(Moves.X_SCISSOR);
|
||||
}
|
||||
})),
|
||||
}),
|
||||
),
|
||||
[TrainerType.BERTHA]: new TrainerConfig(++t)
|
||||
.initForEliteFour(signatureSpecies["BERTHA"], false, PokemonType.GROUND, 2)
|
||||
.setBattleBgm("battle_sinnoh_gym")
|
||||
.setMixedBattleBgm("battle_sinnoh_gym")
|
||||
.setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.WHISCASH]))
|
||||
.setPartyMemberFunc(2, getRandomPartyMemberFunc([ Species.HIPPOWDON ], TrainerSlot.TRAINER, true, p => { // Tera Ground Hippowdon
|
||||
.setPartyMemberFunc(
|
||||
2,
|
||||
getRandomPartyMemberFunc([Species.HIPPOWDON], TrainerSlot.TRAINER, true, p => {
|
||||
// Tera Ground Hippowdon
|
||||
p.abilityIndex = 0; // Sand Stream
|
||||
p.generateAndPopulateMoveset();
|
||||
}))
|
||||
}),
|
||||
)
|
||||
.setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.GLISCOR]))
|
||||
.setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.MAMOSWINE, Species.URSALUNA]))
|
||||
.setPartyMemberFunc(5, getRandomPartyMemberFunc([ Species.RHYPERIOR ], TrainerSlot.TRAINER, true, p => {
|
||||
.setPartyMemberFunc(
|
||||
5,
|
||||
getRandomPartyMemberFunc([Species.RHYPERIOR], TrainerSlot.TRAINER, true, p => {
|
||||
p.setBoss(true, 2);
|
||||
p.abilityIndex = 1; // Solid Rock
|
||||
p.generateAndPopulateMoveset();
|
||||
})),
|
||||
}),
|
||||
),
|
||||
[TrainerType.FLINT]: new TrainerConfig(++t)
|
||||
.initForEliteFour(signatureSpecies["FLINT"], true, PokemonType.FIRE, 2)
|
||||
.setBattleBgm("battle_sinnoh_gym")
|
||||
.setMixedBattleBgm("battle_sinnoh_gym")
|
||||
.setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.RAPIDASH]))
|
||||
.setPartyMemberFunc(2, getRandomPartyMemberFunc([ Species.STEELIX, Species.LOPUNNY ], TrainerSlot.TRAINER, true, p => { // Tera Fire Steelix/Lopunny
|
||||
.setPartyMemberFunc(
|
||||
2,
|
||||
getRandomPartyMemberFunc([Species.STEELIX, Species.LOPUNNY], TrainerSlot.TRAINER, true, p => {
|
||||
// Tera Fire Steelix/Lopunny
|
||||
p.generateAndPopulateMoveset();
|
||||
if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === Moves.TERA_BLAST)) {
|
||||
// Check if Tera Blast is in the moveset, if not, replace the third move with Tera Blast.
|
||||
@ -3081,10 +3154,13 @@ export const trainerConfigs: TrainerConfigs = {
|
||||
)
|
||||
.setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.INFERNAPE]))
|
||||
.setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.ARCANINE, Species.HISUI_ARCANINE]))
|
||||
.setPartyMemberFunc(5, getRandomPartyMemberFunc([ Species.MAGMORTAR ], TrainerSlot.TRAINER, true, p => {
|
||||
.setPartyMemberFunc(
|
||||
5,
|
||||
getRandomPartyMemberFunc([Species.MAGMORTAR], TrainerSlot.TRAINER, true, p => {
|
||||
p.setBoss(true, 2);
|
||||
p.generateAndPopulateMoveset();
|
||||
})),
|
||||
}),
|
||||
),
|
||||
[TrainerType.LUCIAN]: new TrainerConfig(++t)
|
||||
.initForEliteFour(signatureSpecies["LUCIAN"], true, PokemonType.PSYCHIC, 2)
|
||||
.setBattleBgm("battle_sinnoh_gym")
|
||||
@ -3093,11 +3169,14 @@ export const trainerConfigs: TrainerConfigs = {
|
||||
.setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.FARIGIRAF])) // Tera Psychic Farigiraf
|
||||
.setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.BRONZONG]))
|
||||
.setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.MR_RIME, Species.HISUI_BRAVIARY]))
|
||||
.setPartyMemberFunc(5, getRandomPartyMemberFunc([ Species.GALLADE ], TrainerSlot.TRAINER, true, p => {
|
||||
.setPartyMemberFunc(
|
||||
5,
|
||||
getRandomPartyMemberFunc([Species.GALLADE], TrainerSlot.TRAINER, true, p => {
|
||||
p.setBoss(true, 2);
|
||||
p.abilityIndex = 1; // Sharpness
|
||||
p.generateAndPopulateMoveset();
|
||||
})),
|
||||
}),
|
||||
),
|
||||
[TrainerType.SHAUNTAL]: new TrainerConfig(++t)
|
||||
.initForEliteFour(signatureSpecies["SHAUNTAL"], false, PokemonType.GHOST, 2)
|
||||
.setMixedBattleBgm("battle_unova_elite")
|
||||
@ -3105,10 +3184,13 @@ export const trainerConfigs: TrainerConfigs = {
|
||||
.setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.GOLURK])) // Tera Ghost Golurk
|
||||
.setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.JELLICENT]))
|
||||
.setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.BASCULEGION, Species.HISUI_ZOROARK]))
|
||||
.setPartyMemberFunc(5, getRandomPartyMemberFunc([ Species.CHANDELURE ], TrainerSlot.TRAINER, true, p => {
|
||||
.setPartyMemberFunc(
|
||||
5,
|
||||
getRandomPartyMemberFunc([Species.CHANDELURE], TrainerSlot.TRAINER, true, p => {
|
||||
p.setBoss(true, 2);
|
||||
p.generateAndPopulateMoveset();
|
||||
})),
|
||||
}),
|
||||
),
|
||||
[TrainerType.MARSHAL]: new TrainerConfig(++t)
|
||||
.initForEliteFour(signatureSpecies["MARSHAL"], true, PokemonType.FIGHTING, 2)
|
||||
.setMixedBattleBgm("battle_unova_elite")
|
||||
@ -3116,10 +3198,13 @@ export const trainerConfigs: TrainerConfigs = {
|
||||
.setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.MIENSHAO])) // Tera Fighting Mienshao
|
||||
.setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.EMBOAR]))
|
||||
.setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.HISUI_LILLIGANT]))
|
||||
.setPartyMemberFunc(5, getRandomPartyMemberFunc([ Species.CONKELDURR ], TrainerSlot.TRAINER, true, p => {
|
||||
.setPartyMemberFunc(
|
||||
5,
|
||||
getRandomPartyMemberFunc([Species.CONKELDURR], TrainerSlot.TRAINER, true, p => {
|
||||
p.setBoss(true, 2);
|
||||
p.generateAndPopulateMoveset();
|
||||
})),
|
||||
}),
|
||||
),
|
||||
[TrainerType.GRIMSLEY]: new TrainerConfig(++t)
|
||||
.initForEliteFour(signatureSpecies["GRIMSLEY"], true, PokemonType.DARK, 2)
|
||||
.setMixedBattleBgm("battle_unova_elite")
|
||||
@ -3127,44 +3212,65 @@ export const trainerConfigs: TrainerConfigs = {
|
||||
.setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.KROOKODILE])) // Tera Dark Krookodile
|
||||
.setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.SCRAFTY]))
|
||||
.setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.HISUI_SAMUROTT]))
|
||||
.setPartyMemberFunc(5, getRandomPartyMemberFunc([ Species.KINGAMBIT ], TrainerSlot.TRAINER, true, p => {
|
||||
.setPartyMemberFunc(
|
||||
5,
|
||||
getRandomPartyMemberFunc([Species.KINGAMBIT], TrainerSlot.TRAINER, true, p => {
|
||||
p.setBoss(true, 2);
|
||||
p.generateAndPopulateMoveset();
|
||||
})),
|
||||
}),
|
||||
),
|
||||
[TrainerType.CAITLIN]: new TrainerConfig(++t)
|
||||
.initForEliteFour(signatureSpecies["CAITLIN"], false, PokemonType.PSYCHIC, 2)
|
||||
.setMixedBattleBgm("battle_unova_elite")
|
||||
.setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.MUSHARNA]))
|
||||
.setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.REUNICLUS])) // Tera Psychic Reuniclus
|
||||
.setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.GALLADE ], TrainerSlot.TRAINER, true, p => {
|
||||
.setPartyMemberFunc(
|
||||
3,
|
||||
getRandomPartyMemberFunc([Species.GALLADE], TrainerSlot.TRAINER, true, p => {
|
||||
p.abilityIndex = 1; // Sharpness
|
||||
p.generateAndPopulateMoveset();
|
||||
}))
|
||||
}),
|
||||
)
|
||||
.setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.SIGILYPH, Species.HISUI_BRAVIARY]))
|
||||
.setPartyMemberFunc(5, getRandomPartyMemberFunc([ Species.GOTHITELLE ], TrainerSlot.TRAINER, true, p => {
|
||||
.setPartyMemberFunc(
|
||||
5,
|
||||
getRandomPartyMemberFunc([Species.GOTHITELLE], TrainerSlot.TRAINER, true, p => {
|
||||
p.setBoss(true, 2);
|
||||
p.generateAndPopulateMoveset();
|
||||
})),
|
||||
}),
|
||||
),
|
||||
[TrainerType.MALVA]: new TrainerConfig(++t)
|
||||
.initForEliteFour(signatureSpecies["MALVA"], false, PokemonType.FIRE, 2)
|
||||
.setMixedBattleBgm("battle_kalos_elite")
|
||||
.setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.PYROAR ], TrainerSlot.TRAINER, true, p => {
|
||||
.setPartyMemberFunc(
|
||||
0,
|
||||
getRandomPartyMemberFunc([Species.PYROAR], TrainerSlot.TRAINER, true, p => {
|
||||
p.generateAndPopulateMoveset();
|
||||
p.gender = Gender.FEMALE;
|
||||
}))
|
||||
}),
|
||||
)
|
||||
.setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.HOUNDOOM])) // Tera Fire Houndoom
|
||||
.setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.TORKOAL ], TrainerSlot.TRAINER, true, p => {
|
||||
.setPartyMemberFunc(
|
||||
3,
|
||||
getRandomPartyMemberFunc([Species.TORKOAL], TrainerSlot.TRAINER, true, p => {
|
||||
p.abilityIndex = 1; // Drought
|
||||
p.generateAndPopulateMoveset();
|
||||
}))
|
||||
.setPartyMemberFunc(4, getRandomPartyMemberFunc([ Species.SCOVILLAIN ], TrainerSlot.TRAINER, true, p => {
|
||||
}),
|
||||
)
|
||||
.setPartyMemberFunc(
|
||||
4,
|
||||
getRandomPartyMemberFunc([Species.SCOVILLAIN], TrainerSlot.TRAINER, true, p => {
|
||||
p.abilityIndex = 0; // Chlorophyll
|
||||
p.generateAndPopulateMoveset();
|
||||
}))
|
||||
.setPartyMemberFunc(5, getRandomPartyMemberFunc([ Species.TALONFLAME ], TrainerSlot.TRAINER, true, p => {
|
||||
}),
|
||||
)
|
||||
.setPartyMemberFunc(
|
||||
5,
|
||||
getRandomPartyMemberFunc([Species.TALONFLAME], TrainerSlot.TRAINER, true, p => {
|
||||
p.setBoss(true, 2);
|
||||
p.generateAndPopulateMoveset();
|
||||
})),
|
||||
}),
|
||||
),
|
||||
[TrainerType.SIEBOLD]: new TrainerConfig(++t)
|
||||
.initForEliteFour(signatureSpecies["SIEBOLD"], true, PokemonType.WATER, 2)
|
||||
.setMixedBattleBgm("battle_kalos_elite")
|
||||
@ -3172,16 +3278,22 @@ export const trainerConfigs: TrainerConfigs = {
|
||||
.setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.GYARADOS])) // Tera Water Gyarados
|
||||
.setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.STARMIE]))
|
||||
.setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.DONDOZO]))
|
||||
.setPartyMemberFunc(5, getRandomPartyMemberFunc([ Species.BARBARACLE ], TrainerSlot.TRAINER, true, p => {
|
||||
.setPartyMemberFunc(
|
||||
5,
|
||||
getRandomPartyMemberFunc([Species.BARBARACLE], TrainerSlot.TRAINER, true, p => {
|
||||
p.setBoss(true, 2);
|
||||
p.abilityIndex = 1; // Tough Claws
|
||||
p.generateAndPopulateMoveset();
|
||||
})),
|
||||
}),
|
||||
),
|
||||
[TrainerType.WIKSTROM]: new TrainerConfig(++t)
|
||||
.initForEliteFour(signatureSpecies["WIKSTROM"], true, PokemonType.STEEL, 2)
|
||||
.setMixedBattleBgm("battle_kalos_elite")
|
||||
.setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.KLEFKI]))
|
||||
.setPartyMemberFunc(2, getRandomPartyMemberFunc([ Species.CERULEDGE ], TrainerSlot.TRAINER, true, p => { // Tera Steel Ceruledge
|
||||
.setPartyMemberFunc(
|
||||
2,
|
||||
getRandomPartyMemberFunc([Species.CERULEDGE], TrainerSlot.TRAINER, true, p => {
|
||||
// Tera Steel Ceruledge
|
||||
p.generateAndPopulateMoveset();
|
||||
if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === Moves.IRON_HEAD)) {
|
||||
// Check if Iron Head is in the moveset, if not, replace the third move with Iron Head.
|
||||
@ -3191,10 +3303,13 @@ export const trainerConfigs: TrainerConfigs = {
|
||||
)
|
||||
.setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.SCIZOR]))
|
||||
.setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.CORVIKNIGHT]))
|
||||
.setPartyMemberFunc(5, getRandomPartyMemberFunc([ Species.AEGISLASH ], TrainerSlot.TRAINER, true, p => {
|
||||
.setPartyMemberFunc(
|
||||
5,
|
||||
getRandomPartyMemberFunc([Species.AEGISLASH], TrainerSlot.TRAINER, true, p => {
|
||||
p.setBoss(true, 2);
|
||||
p.generateAndPopulateMoveset();
|
||||
})),
|
||||
}),
|
||||
),
|
||||
[TrainerType.DRASNA]: new TrainerConfig(++t)
|
||||
.initForEliteFour(signatureSpecies["DRASNA"], false, PokemonType.DRAGON, 2)
|
||||
.setMixedBattleBgm("battle_kalos_elite")
|
||||
@ -3202,15 +3317,21 @@ export const trainerConfigs: TrainerConfigs = {
|
||||
.setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.GARCHOMP])) // Tera Dragon Garchomp
|
||||
.setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.ALTARIA]))
|
||||
.setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.DRUDDIGON]))
|
||||
.setPartyMemberFunc(5, getRandomPartyMemberFunc([ Species.NOIVERN ], TrainerSlot.TRAINER, true, p => {
|
||||
.setPartyMemberFunc(
|
||||
5,
|
||||
getRandomPartyMemberFunc([Species.NOIVERN], TrainerSlot.TRAINER, true, p => {
|
||||
p.setBoss(true, 2);
|
||||
p.generateAndPopulateMoveset();
|
||||
})),
|
||||
}),
|
||||
),
|
||||
[TrainerType.HALA]: new TrainerConfig(++t)
|
||||
.initForEliteFour(signatureSpecies["HALA"], true, PokemonType.FIGHTING, 2)
|
||||
.setMixedBattleBgm("battle_alola_elite")
|
||||
.setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.HARIYAMA]))
|
||||
.setPartyMemberFunc(2, getRandomPartyMemberFunc([ Species.INCINEROAR ], TrainerSlot.TRAINER, true, p => { // Tera Fighting Incineroar
|
||||
.setPartyMemberFunc(
|
||||
2,
|
||||
getRandomPartyMemberFunc([Species.INCINEROAR], TrainerSlot.TRAINER, true, p => {
|
||||
// Tera Fighting Incineroar
|
||||
p.generateAndPopulateMoveset();
|
||||
if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === Moves.CROSS_CHOP)) {
|
||||
// Check if Cross Chop is in the moveset, if not, replace the third move with Cross Chop.
|
||||
@ -3220,10 +3341,13 @@ export const trainerConfigs: TrainerConfigs = {
|
||||
)
|
||||
.setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.BEWEAR]))
|
||||
.setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.POLIWRATH, Species.ANNIHILAPE]))
|
||||
.setPartyMemberFunc(5, getRandomPartyMemberFunc([ Species.CRABOMINABLE ], TrainerSlot.TRAINER, true, p => {
|
||||
.setPartyMemberFunc(
|
||||
5,
|
||||
getRandomPartyMemberFunc([Species.CRABOMINABLE], TrainerSlot.TRAINER, true, p => {
|
||||
p.setBoss(true, 2);
|
||||
p.generateAndPopulateMoveset();
|
||||
})),
|
||||
}),
|
||||
),
|
||||
[TrainerType.MOLAYNE]: new TrainerConfig(++t)
|
||||
.initForEliteFour(signatureSpecies["MOLAYNE"], true, PokemonType.STEEL, 2)
|
||||
.setMixedBattleBgm("battle_alola_elite")
|
||||
@ -3231,25 +3355,34 @@ export const trainerConfigs: TrainerConfigs = {
|
||||
.setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.ALOLA_SANDSLASH])) // Tera Steel A-Sandslash
|
||||
.setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.MAGNEZONE]))
|
||||
.setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.METAGROSS, Species.KINGAMBIT]))
|
||||
.setPartyMemberFunc(5, getRandomPartyMemberFunc([ Species.ALOLA_DUGTRIO ], TrainerSlot.TRAINER, true, p => {
|
||||
.setPartyMemberFunc(
|
||||
5,
|
||||
getRandomPartyMemberFunc([Species.ALOLA_DUGTRIO], TrainerSlot.TRAINER, true, p => {
|
||||
p.setBoss(true, 2);
|
||||
p.generateAndPopulateMoveset();
|
||||
})),
|
||||
}),
|
||||
),
|
||||
[TrainerType.OLIVIA]: new TrainerConfig(++t)
|
||||
.initForEliteFour(signatureSpecies["OLIVIA"], false, PokemonType.ROCK, 2)
|
||||
.setMixedBattleBgm("battle_alola_elite")
|
||||
.setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.GIGALITH ], TrainerSlot.TRAINER, true, p => {
|
||||
.setPartyMemberFunc(
|
||||
0,
|
||||
getRandomPartyMemberFunc([Species.GIGALITH], TrainerSlot.TRAINER, true, p => {
|
||||
p.abilityIndex = 1; // Sand Stream
|
||||
p.generateAndPopulateMoveset();
|
||||
}))
|
||||
}),
|
||||
)
|
||||
.setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.PROBOPASS])) // Tera Rock Probopass
|
||||
.setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.ALOLA_GOLEM]))
|
||||
.setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.CARBINK, Species.RELICANTH]))
|
||||
.setPartyMemberFunc(5, getRandomPartyMemberFunc([ Species.LYCANROC ], TrainerSlot.TRAINER, true, p => {
|
||||
.setPartyMemberFunc(
|
||||
5,
|
||||
getRandomPartyMemberFunc([Species.LYCANROC], TrainerSlot.TRAINER, true, p => {
|
||||
p.setBoss(true, 2);
|
||||
p.formIndex = 1;
|
||||
p.generateAndPopulateMoveset();
|
||||
})),
|
||||
}),
|
||||
),
|
||||
[TrainerType.ACEROLA]: new TrainerConfig(++t)
|
||||
.initForEliteFour(signatureSpecies["ACEROLA"], false, PokemonType.GHOST, 2)
|
||||
.setMixedBattleBgm("battle_alola_elite")
|
||||
@ -3257,15 +3390,21 @@ export const trainerConfigs: TrainerConfigs = {
|
||||
.setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.MIMIKYU])) // Tera Ghost Mimikyu
|
||||
.setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.DHELMISE]))
|
||||
.setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.FROSLASS]))
|
||||
.setPartyMemberFunc(5, getRandomPartyMemberFunc([ Species.PALOSSAND ], TrainerSlot.TRAINER, true, p => {
|
||||
.setPartyMemberFunc(
|
||||
5,
|
||||
getRandomPartyMemberFunc([Species.PALOSSAND], TrainerSlot.TRAINER, true, p => {
|
||||
p.setBoss(true, 2);
|
||||
p.generateAndPopulateMoveset();
|
||||
})),
|
||||
}),
|
||||
),
|
||||
[TrainerType.KAHILI]: new TrainerConfig(++t)
|
||||
.initForEliteFour(signatureSpecies["KAHILI"], false, PokemonType.FLYING)
|
||||
.setMixedBattleBgm("battle_alola_elite")
|
||||
.setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.HAWLUCHA]))
|
||||
.setPartyMemberFunc(2, getRandomPartyMemberFunc([ Species.DECIDUEYE ], TrainerSlot.TRAINER, true, p => { // Tera Flying Decidueye
|
||||
.setPartyMemberFunc(
|
||||
2,
|
||||
getRandomPartyMemberFunc([Species.DECIDUEYE], TrainerSlot.TRAINER, true, p => {
|
||||
// Tera Flying Decidueye
|
||||
p.generateAndPopulateMoveset();
|
||||
if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === Moves.BRAVE_BIRD)) {
|
||||
// Check if Brave Bird is in the moveset, if not, replace the third move with Brave Bird.
|
||||
@ -3275,16 +3414,22 @@ export const trainerConfigs: TrainerConfigs = {
|
||||
)
|
||||
.setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.BRAVIARY, Species.MANDIBUZZ]))
|
||||
.setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.ORICORIO]))
|
||||
.setPartyMemberFunc(5, getRandomPartyMemberFunc([ Species.TOUCANNON ], TrainerSlot.TRAINER, true, p => {
|
||||
.setPartyMemberFunc(
|
||||
5,
|
||||
getRandomPartyMemberFunc([Species.TOUCANNON], TrainerSlot.TRAINER, true, p => {
|
||||
p.setBoss(true, 2);
|
||||
p.generateAndPopulateMoveset();
|
||||
})),
|
||||
}),
|
||||
),
|
||||
[TrainerType.MARNIE_ELITE]: new TrainerConfig(++t)
|
||||
.setName("Marnie")
|
||||
.initForEliteFour(signatureSpecies["MARNIE_ELITE"], false, PokemonType.DARK, 2)
|
||||
.setMixedBattleBgm("battle_galar_elite")
|
||||
.setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.LIEPARD]))
|
||||
.setPartyMemberFunc(2, getRandomPartyMemberFunc([ Species.TOXICROAK ], TrainerSlot.TRAINER, true, p => { // Tera Dark Toxicroak
|
||||
.setPartyMemberFunc(
|
||||
2,
|
||||
getRandomPartyMemberFunc([Species.TOXICROAK], TrainerSlot.TRAINER, true, p => {
|
||||
// Tera Dark Toxicroak
|
||||
p.generateAndPopulateMoveset();
|
||||
if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === Moves.SUCKER_PUNCH)) {
|
||||
// Check if Sucker Punch is in the moveset, if not, replace the third move with Sucker Punch.
|
||||
@ -3294,16 +3439,22 @@ export const trainerConfigs: TrainerConfigs = {
|
||||
)
|
||||
.setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.SCRAFTY, Species.PANGORO]))
|
||||
.setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.MORPEKO]))
|
||||
.setPartyMemberFunc(5, getRandomPartyMemberFunc([ Species.GRIMMSNARL ], TrainerSlot.TRAINER, true, p => {
|
||||
.setPartyMemberFunc(
|
||||
5,
|
||||
getRandomPartyMemberFunc([Species.GRIMMSNARL], TrainerSlot.TRAINER, true, p => {
|
||||
p.setBoss(true, 2);
|
||||
p.generateAndPopulateMoveset();
|
||||
})),
|
||||
}),
|
||||
),
|
||||
[TrainerType.NESSA_ELITE]: new TrainerConfig(++t)
|
||||
.setName("Nessa")
|
||||
.initForEliteFour(signatureSpecies["NESSA_ELITE"], false, PokemonType.WATER, 2)
|
||||
.setMixedBattleBgm("battle_galar_elite")
|
||||
.setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.GOLISOPOD]))
|
||||
.setPartyMemberFunc(2, getRandomPartyMemberFunc([ Species.EISCUE ], TrainerSlot.TRAINER, true, p => { // Tera Water Eiscue
|
||||
.setPartyMemberFunc(
|
||||
2,
|
||||
getRandomPartyMemberFunc([Species.EISCUE], TrainerSlot.TRAINER, true, p => {
|
||||
// Tera Water Eiscue
|
||||
p.generateAndPopulateMoveset();
|
||||
if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === Moves.LIQUIDATION)) {
|
||||
// Check if Liquidation is in the moveset, if not, replace the third move with Liquidation.
|
||||
@ -3311,15 +3462,21 @@ export const trainerConfigs: TrainerConfigs = {
|
||||
}
|
||||
}),
|
||||
)
|
||||
.setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.PELIPPER ], TrainerSlot.TRAINER, true, p => {
|
||||
.setPartyMemberFunc(
|
||||
3,
|
||||
getRandomPartyMemberFunc([Species.PELIPPER], TrainerSlot.TRAINER, true, p => {
|
||||
p.abilityIndex = 1; // Drizzle
|
||||
p.generateAndPopulateMoveset();
|
||||
}))
|
||||
}),
|
||||
)
|
||||
.setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.TOXAPEX]))
|
||||
.setPartyMemberFunc(5, getRandomPartyMemberFunc([ Species.DREDNAW ], TrainerSlot.TRAINER, true, p => {
|
||||
.setPartyMemberFunc(
|
||||
5,
|
||||
getRandomPartyMemberFunc([Species.DREDNAW], TrainerSlot.TRAINER, true, p => {
|
||||
p.setBoss(true, 2);
|
||||
p.generateAndPopulateMoveset();
|
||||
})),
|
||||
}),
|
||||
),
|
||||
[TrainerType.BEA_ELITE]: new TrainerConfig(++t)
|
||||
.setName("Bea")
|
||||
.initForEliteFour(signatureSpecies["BEA_ELITE"], false, PokemonType.FIGHTING, 2)
|
||||
@ -3328,10 +3485,13 @@ export const trainerConfigs: TrainerConfigs = {
|
||||
.setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.SIRFETCHD])) // Tera Fighting Sirfetch'd
|
||||
.setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.GRAPPLOCT, Species.FALINKS]))
|
||||
.setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.HITMONTOP]))
|
||||
.setPartyMemberFunc(5, getRandomPartyMemberFunc([ Species.MACHAMP ], TrainerSlot.TRAINER, true, p => {
|
||||
.setPartyMemberFunc(
|
||||
5,
|
||||
getRandomPartyMemberFunc([Species.MACHAMP], TrainerSlot.TRAINER, true, p => {
|
||||
p.setBoss(true, 2);
|
||||
p.generateAndPopulateMoveset();
|
||||
})),
|
||||
}),
|
||||
),
|
||||
[TrainerType.ALLISTER_ELITE]: new TrainerConfig(++t)
|
||||
.setName("Allister")
|
||||
.initForEliteFour(signatureSpecies["ALLISTER_ELITE"], true, PokemonType.GHOST, 2)
|
||||
@ -3340,16 +3500,22 @@ export const trainerConfigs: TrainerConfigs = {
|
||||
.setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.RUNERIGUS])) // Tera Ghost Runerigus
|
||||
.setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.POLTEAGEIST, Species.SINISTCHA]))
|
||||
.setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.CURSOLA]))
|
||||
.setPartyMemberFunc(5, getRandomPartyMemberFunc([ Species.GENGAR ], TrainerSlot.TRAINER, true, p => {
|
||||
.setPartyMemberFunc(
|
||||
5,
|
||||
getRandomPartyMemberFunc([Species.GENGAR], TrainerSlot.TRAINER, true, p => {
|
||||
p.setBoss(true, 2);
|
||||
p.generateAndPopulateMoveset();
|
||||
})),
|
||||
}),
|
||||
),
|
||||
[TrainerType.RAIHAN_ELITE]: new TrainerConfig(++t)
|
||||
.setName("Raihan")
|
||||
.initForEliteFour(signatureSpecies["RAIHAN_ELITE"], true, PokemonType.DRAGON, 2)
|
||||
.setMixedBattleBgm("battle_galar_elite")
|
||||
.setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.FLYGON]))
|
||||
.setPartyMemberFunc(2, getRandomPartyMemberFunc([ Species.TORKOAL ], TrainerSlot.TRAINER, true, p => { // Tera Dragon Torkoal
|
||||
.setPartyMemberFunc(
|
||||
2,
|
||||
getRandomPartyMemberFunc([Species.TORKOAL], TrainerSlot.TRAINER, true, p => {
|
||||
// Tera Dragon Torkoal
|
||||
p.abilityIndex = 1; // Drought
|
||||
p.generateAndPopulateMoveset();
|
||||
if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === Moves.TERA_BLAST)) {
|
||||
@ -3360,10 +3526,13 @@ export const trainerConfigs: TrainerConfigs = {
|
||||
)
|
||||
.setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.GOODRA]))
|
||||
.setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.TURTONATOR]))
|
||||
.setPartyMemberFunc(5, getRandomPartyMemberFunc([ Species.ARCHALUDON ], TrainerSlot.TRAINER, true, p => {
|
||||
.setPartyMemberFunc(
|
||||
5,
|
||||
getRandomPartyMemberFunc([Species.ARCHALUDON], TrainerSlot.TRAINER, true, p => {
|
||||
p.setBoss(true, 2);
|
||||
p.generateAndPopulateMoveset();
|
||||
})),
|
||||
}),
|
||||
),
|
||||
[TrainerType.RIKA]: new TrainerConfig(++t)
|
||||
.initForEliteFour(signatureSpecies["RIKA"], false, PokemonType.GROUND, 5)
|
||||
.setMixedBattleBgm("battle_paldea_elite")
|
||||
@ -3371,10 +3540,14 @@ export const trainerConfigs: TrainerConfigs = {
|
||||
.setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.DONPHAN]))
|
||||
.setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.TORTERRA, Species.TOEDSCRUEL]))
|
||||
.setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.CAMERUPT]))
|
||||
.setPartyMemberFunc(5, getRandomPartyMemberFunc([ Species.CLODSIRE ], TrainerSlot.TRAINER, true, p => { // Tera Ground Clodsire
|
||||
.setPartyMemberFunc(
|
||||
5,
|
||||
getRandomPartyMemberFunc([Species.CLODSIRE], TrainerSlot.TRAINER, true, p => {
|
||||
// Tera Ground Clodsire
|
||||
p.setBoss(true, 2);
|
||||
p.generateAndPopulateMoveset();
|
||||
})),
|
||||
}),
|
||||
),
|
||||
[TrainerType.POPPY]: new TrainerConfig(++t)
|
||||
.initForEliteFour(signatureSpecies["POPPY"], false, PokemonType.STEEL, 5)
|
||||
.setMixedBattleBgm("battle_paldea_elite")
|
||||
@ -3382,10 +3555,14 @@ export const trainerConfigs: TrainerConfigs = {
|
||||
.setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.MAGNEZONE]))
|
||||
.setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.CORVIKNIGHT, Species.BRONZONG]))
|
||||
.setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.STEELIX]))
|
||||
.setPartyMemberFunc(5, getRandomPartyMemberFunc([ Species.TINKATON ], TrainerSlot.TRAINER, true, p => { // Tera Steel Tinkaton
|
||||
.setPartyMemberFunc(
|
||||
5,
|
||||
getRandomPartyMemberFunc([Species.TINKATON], TrainerSlot.TRAINER, true, p => {
|
||||
// Tera Steel Tinkaton
|
||||
p.setBoss(true, 2);
|
||||
p.generateAndPopulateMoveset();
|
||||
})),
|
||||
}),
|
||||
),
|
||||
[TrainerType.LARRY_ELITE]: new TrainerConfig(++t)
|
||||
.setName("Larry")
|
||||
.initForEliteFour(signatureSpecies["LARRY_ELITE"], true, PokemonType.FLYING, 5)
|
||||
@ -3394,10 +3571,14 @@ export const trainerConfigs: TrainerConfigs = {
|
||||
.setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.BOMBIRDIER]))
|
||||
.setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.TROPIUS]))
|
||||
.setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.STARAPTOR]))
|
||||
.setPartyMemberFunc(5, getRandomPartyMemberFunc([ Species.FLAMIGO ], TrainerSlot.TRAINER, true, p => { // Tera Flying Flamigo
|
||||
.setPartyMemberFunc(
|
||||
5,
|
||||
getRandomPartyMemberFunc([Species.FLAMIGO], TrainerSlot.TRAINER, true, p => {
|
||||
// Tera Flying Flamigo
|
||||
p.setBoss(true, 2);
|
||||
p.generateAndPopulateMoveset();
|
||||
})),
|
||||
}),
|
||||
),
|
||||
[TrainerType.HASSEL]: new TrainerConfig(++t)
|
||||
.initForEliteFour(signatureSpecies["HASSEL"], true, PokemonType.DRAGON, 5)
|
||||
.setMixedBattleBgm("battle_paldea_elite")
|
||||
@ -3405,18 +3586,28 @@ export const trainerConfigs: TrainerConfigs = {
|
||||
.setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.DRAGALGE]))
|
||||
.setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.FLAPPLE, Species.APPLETUN, Species.HYDRAPPLE]))
|
||||
.setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.HAXORUS]))
|
||||
.setPartyMemberFunc(5, getRandomPartyMemberFunc([ Species.BAXCALIBUR ], TrainerSlot.TRAINER, true, p => { // Tera Dragon Baxcalibur
|
||||
.setPartyMemberFunc(
|
||||
5,
|
||||
getRandomPartyMemberFunc([Species.BAXCALIBUR], TrainerSlot.TRAINER, true, p => {
|
||||
// Tera Dragon Baxcalibur
|
||||
p.setBoss(true, 2);
|
||||
p.generateAndPopulateMoveset();
|
||||
})),
|
||||
}),
|
||||
),
|
||||
[TrainerType.CRISPIN]: new TrainerConfig(++t)
|
||||
.initForEliteFour(signatureSpecies["CRISPIN"], true, PokemonType.FIRE, 2)
|
||||
.setMixedBattleBgm("battle_bb_elite")
|
||||
.setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.ROTOM ], TrainerSlot.TRAINER, true, p => {
|
||||
.setPartyMemberFunc(
|
||||
0,
|
||||
getRandomPartyMemberFunc([Species.ROTOM], TrainerSlot.TRAINER, true, p => {
|
||||
p.formIndex = 1; // Heat Rotom
|
||||
p.generateAndPopulateMoveset();
|
||||
}))
|
||||
.setPartyMemberFunc(2, getRandomPartyMemberFunc([ Species.EXEGGUTOR ], TrainerSlot.TRAINER, true, p => { // Tera Fire Exeggutor
|
||||
}),
|
||||
)
|
||||
.setPartyMemberFunc(
|
||||
2,
|
||||
getRandomPartyMemberFunc([Species.EXEGGUTOR], TrainerSlot.TRAINER, true, p => {
|
||||
// Tera Fire Exeggutor
|
||||
p.generateAndPopulateMoveset();
|
||||
if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === Moves.TERA_BLAST)) {
|
||||
// Check if Tera Blast is in the moveset, if not, replace the third move with Tera Blast.
|
||||
@ -3424,7 +3615,9 @@ export const trainerConfigs: TrainerConfigs = {
|
||||
}
|
||||
}),
|
||||
)
|
||||
.setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.TALONFLAME ], TrainerSlot.TRAINER, true, p => {
|
||||
.setPartyMemberFunc(
|
||||
3,
|
||||
getRandomPartyMemberFunc([Species.TALONFLAME], TrainerSlot.TRAINER, true, p => {
|
||||
p.generateAndPopulateMoveset();
|
||||
if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === Moves.SUNNY_DAY)) {
|
||||
// Check if Sunny Day is in the moveset, if not, replace the third move with Sunny Day.
|
||||
@ -3433,15 +3626,21 @@ export const trainerConfigs: TrainerConfigs = {
|
||||
}),
|
||||
)
|
||||
.setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.MAGMORTAR]))
|
||||
.setPartyMemberFunc(5, getRandomPartyMemberFunc([ Species.BLAZIKEN ], TrainerSlot.TRAINER, true, p => {
|
||||
.setPartyMemberFunc(
|
||||
5,
|
||||
getRandomPartyMemberFunc([Species.BLAZIKEN], TrainerSlot.TRAINER, true, p => {
|
||||
p.setBoss(true, 2);
|
||||
p.generateAndPopulateMoveset();
|
||||
})),
|
||||
}),
|
||||
),
|
||||
[TrainerType.AMARYS]: new TrainerConfig(++t)
|
||||
.initForEliteFour(signatureSpecies["AMARYS"], false, PokemonType.STEEL, 2)
|
||||
.setMixedBattleBgm("battle_bb_elite")
|
||||
.setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.SKARMORY]))
|
||||
.setPartyMemberFunc(2, getRandomPartyMemberFunc([ Species.REUNICLUS ], TrainerSlot.TRAINER, true, p => { // Tera Steel Reuniclus
|
||||
.setPartyMemberFunc(
|
||||
2,
|
||||
getRandomPartyMemberFunc([Species.REUNICLUS], TrainerSlot.TRAINER, true, p => {
|
||||
// Tera Steel Reuniclus
|
||||
p.generateAndPopulateMoveset();
|
||||
if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === Moves.FLASH_CANNON)) {
|
||||
// Check if Flash Cannon is in the moveset, if not, replace the third move with Flash Cannon.
|
||||
@ -3451,10 +3650,13 @@ export const trainerConfigs: TrainerConfigs = {
|
||||
)
|
||||
.setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.EMPOLEON]))
|
||||
.setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.SCIZOR]))
|
||||
.setPartyMemberFunc(5, getRandomPartyMemberFunc([ Species.METAGROSS ], TrainerSlot.TRAINER, true, p => {
|
||||
.setPartyMemberFunc(
|
||||
5,
|
||||
getRandomPartyMemberFunc([Species.METAGROSS], TrainerSlot.TRAINER, true, p => {
|
||||
p.setBoss(true, 2);
|
||||
p.generateAndPopulateMoveset();
|
||||
})),
|
||||
}),
|
||||
),
|
||||
[TrainerType.LACEY]: new TrainerConfig(++t)
|
||||
.initForEliteFour(signatureSpecies["LACEY"], false, PokemonType.FAIRY, 5)
|
||||
.setMixedBattleBgm("battle_bb_elite")
|
||||
@ -3462,19 +3664,26 @@ export const trainerConfigs: TrainerConfigs = {
|
||||
.setPartyMemberFunc(2, getRandomPartyMemberFunc([Species.PRIMARINA]))
|
||||
.setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.GRANBULL]))
|
||||
.setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.ALCREMIE]))
|
||||
.setPartyMemberFunc(5, getRandomPartyMemberFunc([ Species.EXCADRILL ], TrainerSlot.TRAINER, true, p => { // Tera Fairy Excadrill
|
||||
.setPartyMemberFunc(
|
||||
5,
|
||||
getRandomPartyMemberFunc([Species.EXCADRILL], TrainerSlot.TRAINER, true, p => {
|
||||
// Tera Fairy Excadrill
|
||||
p.setBoss(true, 2);
|
||||
p.generateAndPopulateMoveset();
|
||||
if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === Moves.TERA_BLAST)) {
|
||||
// Check if Tera Blast is in the moveset, if not, replace the third move with Tera Blast.
|
||||
p.moveset[2] = new PokemonMove(Moves.TERA_BLAST);
|
||||
}
|
||||
})),
|
||||
}),
|
||||
),
|
||||
[TrainerType.DRAYTON]: new TrainerConfig(++t)
|
||||
.initForEliteFour(signatureSpecies["DRAYTON"], true, PokemonType.DRAGON, 2)
|
||||
.setMixedBattleBgm("battle_bb_elite")
|
||||
.setPartyMemberFunc(0, getRandomPartyMemberFunc([Species.DRAGONITE]))
|
||||
.setPartyMemberFunc(2, getRandomPartyMemberFunc([ Species.SCEPTILE ], TrainerSlot.TRAINER, true, p => { // Tera Dragon Sceptile
|
||||
.setPartyMemberFunc(
|
||||
2,
|
||||
getRandomPartyMemberFunc([Species.SCEPTILE], TrainerSlot.TRAINER, true, p => {
|
||||
// Tera Dragon Sceptile
|
||||
p.generateAndPopulateMoveset();
|
||||
if (!p.moveset.some(move => !isNullOrUndefined(move) && move.moveId === Moves.DUAL_CHOP)) {
|
||||
// Check if Dual Chop is in the moveset, if not, replace the third move with Dual Chop.
|
||||
@ -3484,10 +3693,13 @@ export const trainerConfigs: TrainerConfigs = {
|
||||
)
|
||||
.setPartyMemberFunc(3, getRandomPartyMemberFunc([Species.HAXORUS]))
|
||||
.setPartyMemberFunc(4, getRandomPartyMemberFunc([Species.KINGDRA, Species.DRACOVISH]))
|
||||
.setPartyMemberFunc(5, getRandomPartyMemberFunc([ Species.ARCHALUDON ], TrainerSlot.TRAINER, true, p => {
|
||||
.setPartyMemberFunc(
|
||||
5,
|
||||
getRandomPartyMemberFunc([Species.ARCHALUDON], TrainerSlot.TRAINER, true, p => {
|
||||
p.setBoss(true, 2);
|
||||
p.generateAndPopulateMoveset();
|
||||
})),
|
||||
}),
|
||||
),
|
||||
|
||||
[TrainerType.BLUE]: new TrainerConfig((t = TrainerType.BLUE))
|
||||
.initForChampion(true)
|
||||
|
Loading…
Reference in New Issue
Block a user