2023-11-09 05:27:17 -08:00
import BattleScene , { startingWave } from "../battle-scene" ;
2023-12-08 06:48:03 -08:00
import { ModifierTypeFunc , modifierTypes } from "../modifier/modifier-type" ;
2024-02-29 17:08:50 -08:00
import { EnemyPokemon } from "../field/pokemon" ;
2023-10-07 13:08:33 -07:00
import * as Utils from "../utils" ;
2024-01-13 09:24:24 -08:00
import { TrainerType } from "./enums/trainer-type" ;
import { Moves } from "./enums/moves" ;
2024-01-07 20:17:24 -08:00
import { PokeballType } from "./pokeball" ;
2023-10-18 15:01:15 -07:00
import { pokemonEvolutions , pokemonPrevolutions } from "./pokemon-evolutions" ;
import PokemonSpecies , { PokemonSpeciesFilter , getPokemonSpecies } from "./pokemon-species" ;
2024-01-13 09:24:24 -08:00
import { Species } from "./enums/species" ;
2023-10-09 17:20:02 -07:00
import { tmSpecies } from "./tms" ;
import { Type } from "./type" ;
2024-01-13 09:24:24 -08:00
import { initTrainerTypeDialogue } from "./dialogue" ;
2024-03-15 16:40:13 -07:00
import { PersistentModifier } from "../modifier/modifier" ;
2024-03-20 21:57:28 -07:00
import { TrainerVariant } from "../field/trainer" ;
2024-03-28 11:05:15 -07:00
import { PartyMemberStrength } from "./enums/party-member-strength" ;
2023-10-09 17:20:02 -07:00
export enum TrainerPoolTier {
COMMON ,
UNCOMMON ,
RARE ,
SUPER_RARE ,
ULTRA_RARE
2023-12-13 21:41:35 -08:00
}
2023-10-09 17:20:02 -07:00
export interface TrainerTierPools {
[ key : integer ] : Species [ ]
}
2024-03-20 21:57:28 -07:00
export enum TrainerSlot {
NONE ,
TRAINER ,
TRAINER_PARTNER
}
2023-10-18 15:01:15 -07:00
export class TrainerPartyTemplate {
public size : integer ;
2024-03-28 11:05:15 -07:00
public strength : PartyMemberStrength ;
2023-10-18 15:01:15 -07:00
public sameSpecies : boolean ;
public balanced : boolean ;
2024-03-28 11:05:15 -07:00
constructor ( size : integer , strength : PartyMemberStrength , sameSpecies? : boolean , balanced? : boolean ) {
2023-10-18 15:01:15 -07:00
this . size = size ;
this . strength = strength ;
this . sameSpecies = ! ! sameSpecies ;
this . balanced = ! ! balanced ;
}
2024-03-28 11:05:15 -07:00
getStrength ( index : integer ) : PartyMemberStrength {
2023-10-18 15:01:15 -07:00
return this . strength ;
}
isSameSpecies ( index : integer ) : boolean {
return this . sameSpecies ;
}
isBalanced ( index : integer ) : boolean {
return this . balanced ;
}
}
export class TrainerPartyCompoundTemplate extends TrainerPartyTemplate {
public templates : TrainerPartyTemplate [ ] ;
constructor ( . . . templates : TrainerPartyTemplate [ ] ) {
super ( templates . reduce ( ( total : integer , template : TrainerPartyTemplate ) = > {
total += template . size ;
return total ;
2024-03-28 11:05:15 -07:00
} , 0 ) , PartyMemberStrength . AVERAGE ) ;
2023-10-18 15:01:15 -07:00
this . templates = templates ;
}
2024-03-28 11:05:15 -07:00
getStrength ( index : integer ) : PartyMemberStrength {
2023-10-18 15:01:15 -07:00
let t = 0 ;
for ( let template of this . templates ) {
if ( t + template . size > index )
return template . getStrength ( index - t ) ;
t += template . size ;
}
return super . getStrength ( index ) ;
}
isSameSpecies ( index : integer ) : boolean {
let t = 0 ;
for ( let template of this . templates ) {
if ( t + template . size > index )
return template . isSameSpecies ( index - t ) ;
t += template . size ;
}
return super . isSameSpecies ( index ) ;
}
isBalanced ( index : integer ) : boolean {
let t = 0 ;
for ( let template of this . templates ) {
if ( t + template . size > index )
return template . isBalanced ( index - t ) ;
t += template . size ;
}
return super . isBalanced ( index ) ;
}
}
export const trainerPartyTemplates = {
2024-03-28 11:05:15 -07:00
ONE_WEAK_ONE_STRONG : new TrainerPartyCompoundTemplate ( new TrainerPartyTemplate ( 1 , PartyMemberStrength . WEAK ) , new TrainerPartyTemplate ( 1 , PartyMemberStrength . STRONG ) ) ,
ONE_AVG : new TrainerPartyTemplate ( 1 , PartyMemberStrength . AVERAGE ) ,
ONE_AVG_ONE_STRONG : new TrainerPartyCompoundTemplate ( new TrainerPartyTemplate ( 1 , PartyMemberStrength . AVERAGE ) , new TrainerPartyTemplate ( 1 , PartyMemberStrength . STRONG ) ) ,
ONE_STRONG : new TrainerPartyTemplate ( 1 , PartyMemberStrength . STRONG ) ,
ONE_STRONGER : new TrainerPartyTemplate ( 1 , PartyMemberStrength . STRONGER ) ,
TWO_WEAKER : new TrainerPartyTemplate ( 2 , PartyMemberStrength . WEAKER ) ,
TWO_WEAK : new TrainerPartyTemplate ( 2 , PartyMemberStrength . WEAK ) ,
TWO_WEAK_ONE_AVG : new TrainerPartyCompoundTemplate ( new TrainerPartyTemplate ( 2 , PartyMemberStrength . WEAK ) , new TrainerPartyTemplate ( 1 , PartyMemberStrength . AVERAGE ) ) ,
TWO_WEAK_SAME_ONE_AVG : new TrainerPartyCompoundTemplate ( new TrainerPartyTemplate ( 2 , PartyMemberStrength . WEAK , true ) , new TrainerPartyTemplate ( 1 , PartyMemberStrength . AVERAGE ) ) ,
TWO_WEAK_SAME_TWO_WEAK_SAME : new TrainerPartyCompoundTemplate ( new TrainerPartyTemplate ( 2 , PartyMemberStrength . WEAK , true ) , new TrainerPartyTemplate ( 2 , PartyMemberStrength . WEAK , true ) ) ,
TWO_WEAK_ONE_STRONG : new TrainerPartyCompoundTemplate ( new TrainerPartyTemplate ( 2 , PartyMemberStrength . WEAK ) , new TrainerPartyTemplate ( 1 , PartyMemberStrength . STRONG ) ) ,
TWO_AVG : new TrainerPartyTemplate ( 2 , PartyMemberStrength . AVERAGE ) ,
TWO_AVG_ONE_STRONG : new TrainerPartyCompoundTemplate ( new TrainerPartyTemplate ( 2 , PartyMemberStrength . AVERAGE ) , new TrainerPartyTemplate ( 1 , PartyMemberStrength . STRONG ) ) ,
TWO_AVG_SAME_ONE_AVG : new TrainerPartyCompoundTemplate ( new TrainerPartyTemplate ( 2 , PartyMemberStrength . AVERAGE , true ) , new TrainerPartyTemplate ( 1 , PartyMemberStrength . AVERAGE ) ) ,
TWO_AVG_SAME_ONE_STRONG : new TrainerPartyCompoundTemplate ( new TrainerPartyTemplate ( 2 , PartyMemberStrength . AVERAGE , true ) , new TrainerPartyTemplate ( 1 , PartyMemberStrength . STRONG ) ) ,
TWO_AVG_SAME_TWO_AVG_SAME : new TrainerPartyCompoundTemplate ( new TrainerPartyTemplate ( 2 , PartyMemberStrength . AVERAGE , true ) , new TrainerPartyTemplate ( 2 , PartyMemberStrength . AVERAGE , true ) ) ,
TWO_STRONG : new TrainerPartyTemplate ( 2 , PartyMemberStrength . STRONG ) ,
THREE_WEAK : new TrainerPartyTemplate ( 3 , PartyMemberStrength . WEAK ) ,
THREE_WEAK_SAME : new TrainerPartyTemplate ( 3 , PartyMemberStrength . WEAK , true ) ,
THREE_AVG : new TrainerPartyTemplate ( 3 , PartyMemberStrength . AVERAGE ) ,
THREE_AVG_SAME : new TrainerPartyTemplate ( 3 , PartyMemberStrength . AVERAGE , true ) ,
THREE_WEAK_BALANCED : new TrainerPartyTemplate ( 3 , PartyMemberStrength . WEAK , false , true ) ,
FOUR_WEAKER : new TrainerPartyTemplate ( 4 , PartyMemberStrength . WEAKER ) ,
FOUR_WEAKER_SAME : new TrainerPartyTemplate ( 4 , PartyMemberStrength . WEAKER , true ) ,
FOUR_WEAK : new TrainerPartyTemplate ( 4 , PartyMemberStrength . WEAK ) ,
FOUR_WEAK_SAME : new TrainerPartyTemplate ( 4 , PartyMemberStrength . WEAK , true ) ,
FOUR_WEAK_BALANCED : new TrainerPartyTemplate ( 4 , PartyMemberStrength . WEAK , false , true ) ,
FIVE_WEAKER : new TrainerPartyTemplate ( 5 , PartyMemberStrength . WEAKER ) ,
FIVE_WEAK : new TrainerPartyTemplate ( 5 , PartyMemberStrength . WEAK ) ,
FIVE_WEAK_BALANCED : new TrainerPartyTemplate ( 5 , PartyMemberStrength . WEAK , false , true ) ,
SIX_WEAKER : new TrainerPartyTemplate ( 6 , PartyMemberStrength . WEAKER ) ,
SIX_WEAKER_SAME : new TrainerPartyTemplate ( 6 , PartyMemberStrength . WEAKER , true ) ,
SIX_WEAK_SAME : new TrainerPartyTemplate ( 6 , PartyMemberStrength . WEAKER , true ) ,
SIX_WEAK_BALANCED : new TrainerPartyTemplate ( 6 , PartyMemberStrength . WEAK , false , true ) ,
2024-04-07 18:56:23 -07:00
GYM_LEADER_1 : new TrainerPartyCompoundTemplate ( new TrainerPartyTemplate ( 1 , PartyMemberStrength . AVERAGE ) , new TrainerPartyTemplate ( 1 , PartyMemberStrength . STRONG ) ) ,
2024-03-28 11:47:57 -07:00
GYM_LEADER_2 : new TrainerPartyCompoundTemplate ( new TrainerPartyTemplate ( 1 , PartyMemberStrength . AVERAGE ) , new TrainerPartyTemplate ( 1 , PartyMemberStrength . STRONG ) , new TrainerPartyTemplate ( 1 , PartyMemberStrength . STRONGER ) ) ,
2024-03-28 11:05:15 -07:00
GYM_LEADER_3 : new TrainerPartyCompoundTemplate ( new TrainerPartyTemplate ( 2 , PartyMemberStrength . AVERAGE ) , new TrainerPartyTemplate ( 1 , PartyMemberStrength . STRONG ) , new TrainerPartyTemplate ( 1 , PartyMemberStrength . STRONGER ) ) ,
GYM_LEADER_4 : new TrainerPartyCompoundTemplate ( new TrainerPartyTemplate ( 3 , PartyMemberStrength . AVERAGE ) , new TrainerPartyTemplate ( 1 , PartyMemberStrength . STRONG ) , new TrainerPartyTemplate ( 1 , PartyMemberStrength . STRONGER ) ) ,
2024-04-07 18:56:23 -07:00
GYM_LEADER_5 : new TrainerPartyCompoundTemplate ( new TrainerPartyTemplate ( 3 , PartyMemberStrength . AVERAGE ) , new TrainerPartyTemplate ( 2 , PartyMemberStrength . STRONG ) , new TrainerPartyTemplate ( 1 , PartyMemberStrength . STRONGER ) ) ,
2024-03-28 11:05:15 -07:00
2024-04-07 18:56:23 -07:00
ELITE_FOUR : new TrainerPartyCompoundTemplate ( new TrainerPartyTemplate ( 2 , PartyMemberStrength . AVERAGE ) , new TrainerPartyTemplate ( 3 , PartyMemberStrength . STRONG ) , new TrainerPartyTemplate ( 1 , PartyMemberStrength . STRONGER ) ) ,
2024-03-28 11:05:15 -07:00
CHAMPION : new TrainerPartyCompoundTemplate ( new TrainerPartyTemplate ( 1 , PartyMemberStrength . STRONGER ) , new TrainerPartyTemplate ( 5 , PartyMemberStrength . STRONG , false , true ) ) ,
RIVAL : new TrainerPartyCompoundTemplate ( new TrainerPartyTemplate ( 1 , PartyMemberStrength . STRONG ) , new TrainerPartyTemplate ( 1 , PartyMemberStrength . AVERAGE ) ) ,
2024-04-08 15:05:42 -07:00
RIVAL_2 : new TrainerPartyCompoundTemplate ( new TrainerPartyTemplate ( 1 , PartyMemberStrength . STRONG ) , new TrainerPartyTemplate ( 1 , PartyMemberStrength . AVERAGE ) , new TrainerPartyTemplate ( 1 , PartyMemberStrength . WEAK , false , true ) ) ,
RIVAL_3 : new TrainerPartyCompoundTemplate ( new TrainerPartyTemplate ( 1 , PartyMemberStrength . STRONG ) , new TrainerPartyTemplate ( 1 , PartyMemberStrength . AVERAGE ) , new TrainerPartyTemplate ( 1 , PartyMemberStrength . AVERAGE , false , true ) , new TrainerPartyTemplate ( 1 , PartyMemberStrength . WEAK , false , true ) ) ,
RIVAL_4 : new TrainerPartyCompoundTemplate ( new TrainerPartyTemplate ( 1 , PartyMemberStrength . STRONG ) , new TrainerPartyTemplate ( 1 , PartyMemberStrength . AVERAGE ) , new TrainerPartyTemplate ( 2 , PartyMemberStrength . AVERAGE , false , true ) , new TrainerPartyTemplate ( 1 , PartyMemberStrength . WEAK , false , true ) ) ,
2024-03-28 11:05:15 -07:00
RIVAL_5 : new TrainerPartyCompoundTemplate ( new TrainerPartyTemplate ( 1 , PartyMemberStrength . STRONG ) , new TrainerPartyTemplate ( 1 , PartyMemberStrength . AVERAGE ) , new TrainerPartyTemplate ( 3 , PartyMemberStrength . AVERAGE , false , true ) , new TrainerPartyTemplate ( 1 , PartyMemberStrength . STRONG ) ) ,
RIVAL_6 : new TrainerPartyCompoundTemplate ( new TrainerPartyTemplate ( 1 , PartyMemberStrength . STRONG ) , new TrainerPartyTemplate ( 1 , PartyMemberStrength . AVERAGE ) , new TrainerPartyTemplate ( 3 , PartyMemberStrength . AVERAGE , false , true ) , new TrainerPartyTemplate ( 1 , PartyMemberStrength . STRONGER ) )
2023-10-18 15:01:15 -07:00
} ;
2023-10-20 08:38:41 -07:00
type PartyTemplateFunc = ( scene : BattleScene ) = > TrainerPartyTemplate ;
2024-03-28 11:05:15 -07:00
type PartyMemberFunc = ( scene : BattleScene , level : integer , strength : PartyMemberStrength ) = > EnemyPokemon ;
2024-02-16 21:40:03 -08:00
type GenModifiersFunc = ( party : EnemyPokemon [ ] ) = > PersistentModifier [ ] ;
2023-10-18 15:01:15 -07:00
export interface PartyMemberFuncs {
[ key : integer ] : PartyMemberFunc
}
2023-10-07 13:08:33 -07:00
export class TrainerConfig {
public trainerType : TrainerType ;
2023-10-09 17:20:02 -07:00
public name : string ;
public nameFemale : string ;
2024-03-20 21:57:28 -07:00
public nameDouble : string ;
2024-02-05 20:05:56 -08:00
public title : string ;
2023-10-07 13:08:33 -07:00
public hasGenders : boolean = false ;
2024-03-20 21:57:28 -07:00
public hasDouble : boolean = false ;
2024-02-22 15:03:36 -08:00
public hasCharSprite : boolean = false ;
2024-03-20 21:57:28 -07:00
public doubleOnly : boolean = false ;
2023-11-10 12:51:34 -08:00
public moneyMultiplier : number = 1 ;
2023-10-24 07:05:07 -07:00
public isBoss : boolean = false ;
public hasStaticParty : boolean = false ;
2023-12-08 05:15:36 -08:00
public useSameSeedForAllMembers : boolean = false ;
2023-10-18 15:01:15 -07:00
public battleBgm : string ;
2023-10-09 17:20:02 -07:00
public encounterBgm : string ;
public femaleEncounterBgm : string ;
2024-03-20 21:57:28 -07:00
public doubleEncounterBgm : string ;
2023-10-20 08:38:41 -07:00
public victoryBgm : string ;
2024-02-16 21:40:03 -08:00
public genModifiersFunc : GenModifiersFunc ;
2023-10-25 11:15:44 -07:00
public modifierRewardFuncs : ModifierTypeFunc [ ] = [ ] ;
2023-10-18 15:01:15 -07:00
public partyTemplates : TrainerPartyTemplate [ ] ;
2023-10-20 08:38:41 -07:00
public partyTemplateFunc : PartyTemplateFunc ;
2023-10-18 15:01:15 -07:00
public partyMemberFuncs : PartyMemberFuncs = { } ;
2023-10-09 17:20:02 -07:00
public speciesPools : TrainerTierPools ;
public speciesFilter : PokemonSpeciesFilter ;
2023-12-30 20:31:26 -08:00
public specialtyTypes : Type [ ] = [ ] ;
2023-10-07 13:08:33 -07:00
2023-10-18 15:01:15 -07:00
public encounterMessages : string [ ] = [ ] ;
public victoryMessages : string [ ] = [ ] ;
public defeatMessages : string [ ] = [ ] ;
public femaleEncounterMessages : string [ ] ;
public femaleVictoryMessages : string [ ] ;
public femaleDefeatMessages : string [ ] ;
2024-03-20 21:57:28 -07:00
public doubleEncounterMessages : string [ ] ;
public doubleVictoryMessages : string [ ] ;
public doubleDefeatMessages : string [ ] ;
2023-10-09 17:20:02 -07:00
constructor ( trainerType : TrainerType , allowLegendaries? : boolean ) {
2023-10-07 13:08:33 -07:00
this . trainerType = trainerType ;
2023-10-18 15:01:15 -07:00
this . name = Utils . toReadableString ( TrainerType [ this . getDerivedType ( ) ] ) ;
this . battleBgm = 'battle_trainer' ;
2023-10-20 08:38:41 -07:00
this . victoryBgm = 'victory_trainer' ;
2023-10-18 15:01:15 -07:00
this . partyTemplates = [ trainerPartyTemplates . TWO_AVG ] ;
2024-05-05 08:05:22 -07:00
this . speciesFilter = species = > ( allowLegendaries || ( ! species . legendary && ! species . subLegendary && ! species . mythical ) ) && ! species . isTrainerForbidden ( ) ;
2023-10-07 13:08:33 -07:00
}
2024-03-20 21:57:28 -07:00
getKey ( ) : string {
return TrainerType [ this . getDerivedType ( ) ] . toString ( ) . toLowerCase ( ) ;
}
getSpriteKey ( female? : boolean ) : string {
let ret = this . getKey ( ) ;
2023-10-07 13:08:33 -07:00
if ( this . hasGenders )
ret += ` _ ${ female ? 'f' : 'm' } ` ;
return ret ;
}
2023-10-18 15:01:15 -07:00
setName ( name : string ) : TrainerConfig {
2023-10-09 17:20:02 -07:00
this . name = name ;
return this ;
}
2024-02-05 20:05:56 -08:00
setTitle ( title : string ) : TrainerConfig {
this . title = title ;
return this ;
}
2023-10-18 15:01:15 -07:00
getDerivedType ( ) : TrainerType {
let trainerType = this . trainerType ;
switch ( trainerType ) {
case TrainerType . RIVAL_2 :
case TrainerType . RIVAL_3 :
case TrainerType . RIVAL_4 :
case TrainerType . RIVAL_5 :
case TrainerType . RIVAL_6 :
trainerType = TrainerType . RIVAL ;
break ;
2024-01-04 16:37:07 -08:00
case TrainerType . LANCE_CHAMPION :
trainerType = TrainerType . LANCE ;
break ;
2024-02-05 20:46:45 -08:00
case TrainerType . LARRY_ELITE :
2024-01-04 16:37:07 -08:00
trainerType = TrainerType . LARRY ;
2024-02-05 20:46:45 -08:00
break ;
2023-10-18 15:01:15 -07:00
}
return trainerType ;
}
setHasGenders ( nameFemale? : string , femaleEncounterBgm? : TrainerType | string ) : TrainerConfig {
2023-10-07 13:08:33 -07:00
this . hasGenders = true ;
2023-10-09 17:20:02 -07:00
this . nameFemale = nameFemale ;
if ( femaleEncounterBgm )
this . femaleEncounterBgm = typeof femaleEncounterBgm === 'number' ? TrainerType [ femaleEncounterBgm ] . toString ( ) . replace ( /\_/g , ' ' ) . toLowerCase ( ) : femaleEncounterBgm ;
2023-10-07 13:08:33 -07:00
return this ;
}
2024-03-20 21:57:28 -07:00
setHasDouble ( nameDouble : string , doubleEncounterBgm? : TrainerType | string ) : TrainerConfig {
this . hasDouble = true ;
this . nameDouble = nameDouble ;
if ( doubleEncounterBgm )
this . doubleEncounterBgm = typeof doubleEncounterBgm === 'number' ? TrainerType [ doubleEncounterBgm ] . toString ( ) . replace ( /\_/g , ' ' ) . toLowerCase ( ) : doubleEncounterBgm ;
return this ;
}
2024-02-22 15:03:36 -08:00
setHasCharSprite ( ) : TrainerConfig {
this . hasCharSprite = true ;
return this ;
}
2024-03-20 21:57:28 -07:00
setDoubleOnly ( ) : TrainerConfig {
this . doubleOnly = true ;
2023-10-07 13:08:33 -07:00
return this ;
}
2023-11-10 12:51:34 -08:00
setMoneyMultiplier ( moneyMultiplier : number ) : TrainerConfig {
this . moneyMultiplier = moneyMultiplier ;
return this ;
}
2023-10-24 07:05:07 -07:00
setBoss ( ) : TrainerConfig {
this . isBoss = true ;
return this ;
}
2023-10-18 15:01:15 -07:00
setStaticParty ( ) : TrainerConfig {
2023-10-24 07:05:07 -07:00
this . hasStaticParty = true ;
2023-10-18 15:01:15 -07:00
return this ;
}
2023-12-08 05:15:36 -08:00
setUseSameSeedForAllMembers ( ) : TrainerConfig {
this . useSameSeedForAllMembers = true ;
return this ;
}
2023-10-18 15:01:15 -07:00
setBattleBgm ( battleBgm : string ) : TrainerConfig {
this . battleBgm = battleBgm ;
return this ;
}
setEncounterBgm ( encounterBgm : TrainerType | string ) : TrainerConfig {
2024-04-10 19:39:42 -07:00
this . encounterBgm = typeof encounterBgm === 'number' ? TrainerType [ encounterBgm ] . toString ( ) . toLowerCase ( ) : encounterBgm ;
2023-10-09 17:20:02 -07:00
return this ;
}
2023-10-20 08:38:41 -07:00
setVictoryBgm ( victoryBgm : string ) : TrainerConfig {
this . victoryBgm = victoryBgm ;
return this ;
}
2023-10-18 15:01:15 -07:00
setPartyTemplates ( . . . partyTemplates : TrainerPartyTemplate [ ] ) : TrainerConfig {
this . partyTemplates = partyTemplates ;
2023-10-09 17:20:02 -07:00
return this ;
}
2023-10-20 08:38:41 -07:00
setPartyTemplateFunc ( partyTemplateFunc : PartyTemplateFunc ) : TrainerConfig {
this . partyTemplateFunc = partyTemplateFunc ;
return this ;
}
2023-10-18 15:01:15 -07:00
setPartyMemberFunc ( slotIndex : integer , partyMemberFunc : PartyMemberFunc ) : TrainerConfig {
this . partyMemberFuncs [ slotIndex ] = partyMemberFunc ;
2023-10-09 17:20:02 -07:00
return this ;
}
2023-10-18 15:01:15 -07:00
setSpeciesPools ( speciesPools : TrainerTierPools | Species [ ] ) : TrainerConfig {
this . speciesPools = ( Array . isArray ( speciesPools ) ? { [ TrainerPoolTier . COMMON ] : speciesPools } : speciesPools ) as unknown as TrainerTierPools ;
return this ;
}
setSpeciesFilter ( speciesFilter : PokemonSpeciesFilter , allowLegendaries? : boolean ) : TrainerConfig {
2023-10-09 17:20:02 -07:00
const baseFilter = this . speciesFilter ;
this . speciesFilter = allowLegendaries ? speciesFilter : species = > speciesFilter ( species ) && baseFilter ( species ) ;
return this ;
}
2023-12-30 20:31:26 -08:00
setSpecialtyTypes ( . . . specialtyTypes : Type [ ] ) : TrainerConfig {
this . specialtyTypes = specialtyTypes ;
return this ;
}
2024-02-16 21:40:03 -08:00
setGenModifiersFunc ( genModifiersFunc : GenModifiersFunc ) : TrainerConfig {
this . genModifiersFunc = genModifiersFunc ;
return this ;
}
2023-10-21 17:23:43 -07:00
setModifierRewardFuncs ( . . . modifierTypeFuncs : ( ( ) = > ModifierTypeFunc ) [ ] ) : TrainerConfig {
this . modifierRewardFuncs = modifierTypeFuncs . map ( func = > ( ) = > {
const modifierTypeFunc = func ( ) ;
2023-10-20 20:00:08 -07:00
const modifierType = modifierTypeFunc ( ) ;
2024-02-16 21:40:03 -08:00
modifierType . withIdFromFunc ( modifierTypeFunc ) ;
2023-10-20 20:00:08 -07:00
return modifierType ;
} ) ;
2023-10-20 08:38:41 -07:00
return this ;
}
2024-01-04 16:37:07 -08:00
initForGymLeader ( signatureSpecies : ( Species | Species [ ] ) [ ] , . . . specialtyTypes : Type [ ] ) : TrainerConfig {
2023-10-20 08:38:41 -07:00
this . setPartyTemplateFunc ( getGymLeaderPartyTemplate ) ;
2024-01-04 16:37:07 -08:00
signatureSpecies . forEach ( ( speciesPool , s ) = > {
if ( ! Array . isArray ( speciesPool ) )
speciesPool = [ speciesPool ] ;
this . setPartyMemberFunc ( - ( s + 1 ) , getRandomPartyMemberFunc ( speciesPool ) ) ;
} ) ;
if ( specialtyTypes . length ) {
2024-01-07 21:35:41 -08:00
this . setSpeciesFilter ( p = > specialtyTypes . find ( t = > p . isOfType ( t ) ) !== undefined ) ;
2024-01-04 16:37:07 -08:00
this . setSpecialtyTypes ( . . . specialtyTypes ) ;
}
2024-02-05 20:05:56 -08:00
this . setTitle ( 'Gym Leader' ) ;
2023-11-10 12:51:34 -08:00
this . setMoneyMultiplier ( 2.5 ) ;
2023-10-24 07:05:07 -07:00
this . setBoss ( ) ;
2023-10-20 08:38:41 -07:00
this . setStaticParty ( ) ;
2024-03-06 15:55:55 -08:00
this . setBattleBgm ( 'battle_unova_gym' ) ;
2023-10-20 08:38:41 -07:00
this . setVictoryBgm ( 'victory_gym' ) ;
2024-02-16 21:40:03 -08:00
this . setGenModifiersFunc ( party = > {
const waveIndex = party [ 0 ] . scene . currentBattle . waveIndex ;
return getRandomTeraModifiers ( party , waveIndex >= 100 ? 1 : 0 , specialtyTypes . length ? specialtyTypes : null ) ;
} ) ;
2023-10-20 08:38:41 -07:00
return this ;
}
2024-01-04 16:37:07 -08:00
initForEliteFour ( signatureSpecies : ( Species | Species [ ] ) [ ] , . . . specialtyTypes : Type [ ] ) : TrainerConfig {
2023-10-20 08:38:41 -07:00
this . setPartyTemplates ( trainerPartyTemplates . ELITE_FOUR ) ;
2024-01-04 16:37:07 -08:00
signatureSpecies . forEach ( ( speciesPool , s ) = > {
if ( ! Array . isArray ( speciesPool ) )
speciesPool = [ speciesPool ] ;
this . setPartyMemberFunc ( - ( s + 1 ) , getRandomPartyMemberFunc ( speciesPool ) ) ;
} ) ;
if ( specialtyTypes . length ) {
this . setSpeciesFilter ( p = > specialtyTypes . find ( t = > p . isOfType ( t ) ) && p . baseTotal >= 450 ) ;
this . setSpecialtyTypes ( . . . specialtyTypes ) ;
2023-12-30 20:31:26 -08:00
} else
2023-10-20 08:38:41 -07:00
this . setSpeciesFilter ( p = > p . baseTotal >= 450 ) ;
2024-02-05 20:05:56 -08:00
this . setTitle ( 'Elite Four' ) ;
2023-11-10 12:51:34 -08:00
this . setMoneyMultiplier ( 3.25 ) ;
2023-10-24 07:05:07 -07:00
this . setBoss ( ) ;
2023-10-20 08:38:41 -07:00
this . setStaticParty ( ) ;
this . setBattleBgm ( 'battle_elite' ) ;
this . setVictoryBgm ( 'victory_gym' ) ;
2024-02-16 21:40:03 -08:00
this . setGenModifiersFunc ( party = > getRandomTeraModifiers ( party , 2 , specialtyTypes . length ? specialtyTypes : null ) ) ;
2023-10-20 08:38:41 -07:00
return this ;
}
2024-01-04 16:37:07 -08:00
initForChampion ( signatureSpecies : ( Species | Species [ ] ) [ ] ) : TrainerConfig {
2023-10-20 08:38:41 -07:00
this . setPartyTemplates ( trainerPartyTemplates . CHAMPION ) ;
2024-01-04 16:37:07 -08:00
signatureSpecies . forEach ( ( speciesPool , s ) = > {
if ( ! Array . isArray ( speciesPool ) )
speciesPool = [ speciesPool ] ;
this . setPartyMemberFunc ( - ( s + 1 ) , getRandomPartyMemberFunc ( speciesPool ) ) ;
} ) ;
2023-10-20 08:38:41 -07:00
this . setSpeciesFilter ( p = > p . baseTotal >= 470 ) ;
2024-02-05 20:05:56 -08:00
this . setTitle ( 'Champion' ) ;
2023-11-10 12:51:34 -08:00
this . setMoneyMultiplier ( 10 ) ;
2023-10-24 07:05:07 -07:00
this . setBoss ( ) ;
2023-10-20 08:38:41 -07:00
this . setStaticParty ( ) ;
2024-03-06 15:55:55 -08:00
this . setBattleBgm ( 'battle_champion_alder' ) ;
2023-10-20 08:38:41 -07:00
this . setVictoryBgm ( 'victory_champion' ) ;
2024-02-16 21:40:03 -08:00
this . setGenModifiersFunc ( party = > getRandomTeraModifiers ( party , 3 ) ) ;
2023-10-20 08:38:41 -07:00
return this ;
}
2024-03-20 21:57:28 -07:00
getTitle ( trainerSlot : TrainerSlot = TrainerSlot . NONE , variant : TrainerVariant ) : string {
2023-10-09 17:20:02 -07:00
let ret = this . name ;
2024-03-20 21:57:28 -07:00
if ( ! trainerSlot && variant === TrainerVariant . DOUBLE && this . nameDouble )
return this . nameDouble ;
2023-10-09 17:20:02 -07:00
if ( this . hasGenders ) {
if ( this . nameFemale ) {
2024-03-20 21:57:28 -07:00
if ( variant === TrainerVariant . FEMALE || ( variant === TrainerVariant . DOUBLE && trainerSlot === TrainerSlot . TRAINER_PARTNER ) )
2023-10-09 17:20:02 -07:00
return this . nameFemale ;
} else
2024-03-20 21:57:28 -07:00
ret += ! variant ? '♂' : '♀' ;
2023-10-09 17:20:02 -07:00
}
return ret ;
2023-10-07 13:08:33 -07:00
}
2024-03-20 21:57:28 -07:00
loadAssets ( scene : BattleScene , variant : TrainerVariant ) : Promise < void > {
2023-10-07 13:08:33 -07:00
return new Promise ( resolve = > {
2024-03-20 21:57:28 -07:00
const isDouble = variant === TrainerVariant . DOUBLE ;
const trainerKey = this . getSpriteKey ( variant === TrainerVariant . FEMALE ) ;
const partnerTrainerKey = this . getSpriteKey ( true ) ;
2023-10-07 13:08:33 -07:00
scene . loadAtlas ( trainerKey , 'trainer' ) ;
2024-03-20 21:57:28 -07:00
if ( isDouble )
scene . loadAtlas ( partnerTrainerKey , 'trainer' ) ;
2023-10-07 13:08:33 -07:00
scene . load . once ( Phaser . Loader . Events . COMPLETE , ( ) = > {
const originalWarn = console . warn ;
// Ignore warnings for missing frames, because there will be a lot
console . warn = ( ) = > { } ;
2023-10-20 08:38:41 -07:00
const frameNames = scene . anims . generateFrameNames ( trainerKey , { zeroPad : 4 , suffix : ".png" , start : 1 , end : 128 } ) ;
2024-03-20 21:57:28 -07:00
const partnerFrameNames = isDouble
? scene . anims . generateFrameNames ( partnerTrainerKey , { zeroPad : 4 , suffix : ".png" , start : 1 , end : 128 } )
: null ;
2023-10-07 13:08:33 -07:00
console . warn = originalWarn ;
scene . anims . create ( {
key : trainerKey ,
frames : frameNames ,
2023-10-20 08:38:41 -07:00
frameRate : 24 ,
2023-10-07 13:08:33 -07:00
repeat : - 1
} ) ;
2024-03-20 21:57:28 -07:00
if ( isDouble ) {
scene . anims . create ( {
key : partnerTrainerKey ,
frames : partnerFrameNames ,
frameRate : 24 ,
repeat : - 1
} ) ;
}
2023-10-07 13:08:33 -07:00
resolve ( ) ;
} ) ;
if ( ! scene . load . isLoading ( ) )
scene . load . start ( ) ;
} ) ;
}
}
let t = 0 ;
interface TrainerConfigs {
[ key : integer ] : TrainerConfig
}
2023-10-20 14:22:07 -07:00
function getWavePartyTemplate ( scene : BattleScene , . . . templates : TrainerPartyTemplate [ ] ) {
2024-03-16 19:06:56 -07:00
return templates [ Math . min ( Math . max ( Math . ceil ( ( scene . gameMode . getWaveForDifficulty ( scene . currentBattle ? . waveIndex || startingWave , true ) - 20 ) / 30 ) , 0 ) , templates . length - 1 ) ] ;
2023-10-20 14:22:07 -07:00
}
2023-10-20 08:38:41 -07:00
function getGymLeaderPartyTemplate ( scene : BattleScene ) {
2024-01-07 21:07:42 -08:00
return getWavePartyTemplate ( scene , trainerPartyTemplates . GYM_LEADER_1 , trainerPartyTemplates . GYM_LEADER_2 , trainerPartyTemplates . GYM_LEADER_3 , trainerPartyTemplates . GYM_LEADER_4 , trainerPartyTemplates . GYM_LEADER_5 ) ;
2023-10-20 08:38:41 -07:00
}
2024-03-22 17:48:47 -07:00
function getRandomPartyMemberFunc ( speciesPool : Species [ ] , trainerSlot : TrainerSlot = TrainerSlot . TRAINER , ignoreEvolution : boolean = false , postProcess ? : ( enemyPokemon : EnemyPokemon ) = > void ) : PartyMemberFunc {
2024-03-28 11:05:15 -07:00
return ( scene : BattleScene , level : integer , strength : PartyMemberStrength ) = > {
2024-03-22 17:48:47 -07:00
let species = Utils . randSeedItem ( speciesPool ) ;
if ( ! ignoreEvolution )
2024-03-28 11:05:15 -07:00
species = getPokemonSpecies ( species ) . getTrainerSpeciesForLevel ( level , true , strength ) ;
2024-03-20 21:57:28 -07:00
return scene . addEnemyPokemon ( getPokemonSpecies ( species ) , level , trainerSlot , undefined , undefined , postProcess ) ;
2023-10-18 15:01:15 -07:00
} ;
}
2024-03-20 21:57:28 -07:00
function getSpeciesFilterRandomPartyMemberFunc ( speciesFilter : PokemonSpeciesFilter , trainerSlot : TrainerSlot = TrainerSlot . TRAINER , allowLegendaries? : boolean , postProcess ? : ( EnemyPokemon : EnemyPokemon ) = > void ) : PartyMemberFunc {
2023-10-18 15:01:15 -07:00
const originalSpeciesFilter = speciesFilter ;
2024-05-05 08:05:22 -07:00
speciesFilter = ( species : PokemonSpecies ) = > ( allowLegendaries || ( ! species . legendary && ! species . subLegendary && ! species . mythical ) ) && ! species . isTrainerForbidden ( ) && originalSpeciesFilter ( species ) ;
2024-03-28 11:05:15 -07:00
return ( scene : BattleScene , level : integer , strength : PartyMemberStrength ) = > {
const ret = scene . addEnemyPokemon ( getPokemonSpecies ( scene . randomSpecies ( scene . currentBattle . waveIndex , level , false , speciesFilter ) . getTrainerSpeciesForLevel ( level , true , strength ) ) , level , trainerSlot , undefined , undefined , postProcess ) ;
2023-10-18 15:01:15 -07:00
return ret ;
} ;
}
2024-02-16 21:40:03 -08:00
function getRandomTeraModifiers ( party : EnemyPokemon [ ] , count : integer , types? : Type [ ] ) : PersistentModifier [ ] {
const ret : PersistentModifier [ ] = [ ] ;
const partyMemberIndexes = new Array ( party . length ) . fill ( null ) . map ( ( _ , i ) = > i ) ;
for ( let t = 0 ; t < Math . min ( count , party . length ) ; t ++ ) {
const randomIndex = Utils . randSeedItem ( partyMemberIndexes ) ;
partyMemberIndexes . splice ( partyMemberIndexes . indexOf ( randomIndex ) , 1 ) ;
ret . push ( modifierTypes . TERA_SHARD ( ) . generateType ( null , [ Utils . randSeedItem ( types ? types : party [ randomIndex ] . getTypes ( ) ) ] ) . withIdFromFunc ( modifierTypes . TERA_SHARD ) . newModifier ( party [ randomIndex ] ) as PersistentModifier ) ;
}
return ret ;
}
2023-10-09 17:20:02 -07:00
export const trainerConfigs : TrainerConfigs = {
2023-12-13 21:41:35 -08:00
[ TrainerType . UNKNOWN ] : new TrainerConfig ( 0 ) . setHasGenders ( ) ,
2024-03-21 00:38:44 -07:00
[ TrainerType . ACE_TRAINER ] : new TrainerConfig ( ++ t ) . setHasGenders ( ) . setHasDouble ( 'Ace Duo' ) . setMoneyMultiplier ( 2.25 ) . setEncounterBgm ( TrainerType . ACE_TRAINER )
2023-10-20 14:22:07 -07:00
. setPartyTemplateFunc ( scene = > getWavePartyTemplate ( scene , trainerPartyTemplates . THREE_WEAK_BALANCED , trainerPartyTemplates . FOUR_WEAK_BALANCED , trainerPartyTemplates . FIVE_WEAK_BALANCED , trainerPartyTemplates . SIX_WEAK_BALANCED ) ) ,
2023-12-01 22:12:32 -08:00
[ TrainerType . ARTIST ] : new TrainerConfig ( ++ t ) . setEncounterBgm ( TrainerType . RICH ) . setPartyTemplates ( trainerPartyTemplates . ONE_STRONG , trainerPartyTemplates . TWO_AVG , trainerPartyTemplates . THREE_AVG )
. setSpeciesPools ( [ Species . SMEARGLE ] ) ,
2024-03-20 21:57:28 -07:00
[ TrainerType . BACKERS ] : new TrainerConfig ( ++ t ) . setHasGenders ( ) . setDoubleOnly ( ) . setEncounterBgm ( TrainerType . CYCLIST ) ,
[ TrainerType . BACKPACKER ] : new TrainerConfig ( ++ t ) . setHasGenders ( ) . setHasDouble ( 'Backpackers' ) . setSpeciesFilter ( s = > s . isOfType ( Type . FLYING ) || s . isOfType ( Type . ROCK ) ) . setEncounterBgm ( TrainerType . BACKPACKER )
2023-12-08 05:15:36 -08:00
. setPartyTemplates ( trainerPartyTemplates . ONE_STRONG , trainerPartyTemplates . ONE_WEAK_ONE_STRONG , trainerPartyTemplates . ONE_AVG_ONE_STRONG )
. setSpeciesPools ( {
2023-12-13 21:41:35 -08:00
[ TrainerPoolTier . COMMON ] : [ Species . RHYHORN , Species . AIPOM , Species . MAKUHITA , Species . MAWILE , Species . NUMEL , Species . LILLIPUP , Species . SANDILE , Species . WOOLOO ] ,
2023-12-12 12:32:50 -08:00
[ TrainerPoolTier . UNCOMMON ] : [ Species . GIRAFARIG , Species . ZANGOOSE , Species . SEVIPER , Species . CUBCHOO , Species . PANCHAM , Species . SKIDDO , Species . MUDBRAY ] ,
2023-12-13 21:41:35 -08:00
[ TrainerPoolTier . RARE ] : [ Species . TAUROS , Species . STANTLER , Species . DARUMAKA , Species . BOUFFALANT , Species . DEERLING , Species . IMPIDIMP ] ,
[ TrainerPoolTier . SUPER_RARE ] : [ Species . GALAR_DARUMAKA , Species . TEDDIURSA ]
2023-12-08 05:15:36 -08:00
} ) ,
2023-11-10 12:51:34 -08:00
[ TrainerType . BAKER ] : new TrainerConfig ( ++ t ) . setEncounterBgm ( TrainerType . CLERK ) . setMoneyMultiplier ( 1.35 ) . setSpeciesFilter ( s = > s . isOfType ( Type . GRASS ) || s . isOfType ( Type . FIRE ) ) ,
[ TrainerType . BEAUTY ] : new TrainerConfig ( ++ t ) . setMoneyMultiplier ( 1.55 ) . setEncounterBgm ( TrainerType . PARASOL_LADY ) ,
[ TrainerType . BIKER ] : new TrainerConfig ( ++ t ) . setMoneyMultiplier ( 1.4 ) . setEncounterBgm ( TrainerType . ROUGHNECK ) . setSpeciesFilter ( s = > s . isOfType ( Type . POISON ) ) ,
2024-03-21 00:38:44 -07:00
[ TrainerType . BLACK_BELT ] : new TrainerConfig ( ++ t ) . setHasGenders ( 'Battle Girl' , TrainerType . PSYCHIC ) . setHasDouble ( 'Crush Kin' ) . setEncounterBgm ( TrainerType . ROUGHNECK ) . setSpecialtyTypes ( Type . FIGHTING )
2023-12-01 22:12:32 -08:00
. setPartyTemplates ( trainerPartyTemplates . TWO_WEAK_ONE_AVG , trainerPartyTemplates . TWO_WEAK_ONE_AVG , trainerPartyTemplates . TWO_AVG , trainerPartyTemplates . TWO_AVG , trainerPartyTemplates . TWO_WEAK_ONE_STRONG , trainerPartyTemplates . THREE_AVG , trainerPartyTemplates . TWO_AVG_ONE_STRONG )
. setSpeciesPools ( {
[ TrainerPoolTier . COMMON ] : [ Species . NIDORAN_F , Species . NIDORAN_M , Species . MACHOP , Species . MAKUHITA , Species . MEDITITE , Species . CROAGUNK , Species . TIMBURR ] ,
2023-12-12 12:32:50 -08:00
[ TrainerPoolTier . UNCOMMON ] : [ Species . MANKEY , Species . POLIWRATH , Species . TYROGUE , Species . BRELOOM , Species . SCRAGGY , Species . MIENFOO , Species . PANCHAM , Species . STUFFUL , Species . CRABRAWLER ] ,
2023-12-28 14:49:09 -08:00
[ TrainerPoolTier . RARE ] : [ Species . HERACROSS , Species . RIOLU , Species . THROH , Species . SAWK , Species . PASSIMIAN , Species . CLOBBOPUS ] ,
[ TrainerPoolTier . SUPER_RARE ] : [ Species . HITMONTOP , Species . INFERNAPE , Species . GALLADE , Species . HAWLUCHA , Species . HAKAMO_O ] ,
2023-12-08 21:33:29 -08:00
[ TrainerPoolTier . ULTRA_RARE ] : [ Species . KUBFU ]
2023-12-01 22:12:32 -08:00
} ) ,
2024-03-20 21:57:28 -07:00
[ TrainerType . BREEDER ] : new TrainerConfig ( ++ t ) . setMoneyMultiplier ( 1.325 ) . setEncounterBgm ( TrainerType . POKEFAN ) . setHasGenders ( ) . setHasDouble ( 'Breeders' )
2024-04-02 15:25:43 -07:00
. setPartyTemplateFunc ( scene = > getWavePartyTemplate ( scene , trainerPartyTemplates . FOUR_WEAKER , trainerPartyTemplates . FIVE_WEAKER , trainerPartyTemplates . SIX_WEAKER ) )
. setSpeciesFilter ( s = > s . baseTotal < 450 ) ,
2024-03-21 00:38:44 -07:00
[ TrainerType . CLERK ] : new TrainerConfig ( ++ t ) . setHasGenders ( ) . setHasDouble ( 'Colleagues' ) . setEncounterBgm ( TrainerType . CLERK )
2023-12-01 22:12:32 -08:00
. setPartyTemplates ( trainerPartyTemplates . TWO_WEAK , trainerPartyTemplates . THREE_WEAK , trainerPartyTemplates . ONE_AVG , trainerPartyTemplates . TWO_AVG , trainerPartyTemplates . TWO_WEAK_ONE_AVG )
. setSpeciesPools ( {
2023-12-08 21:33:29 -08:00
[ TrainerPoolTier . COMMON ] : [ Species . MEOWTH , Species . PSYDUCK , Species . BUDEW , Species . PIDOVE , Species . CINCCINO , Species . LITLEO ] ,
2023-12-12 12:32:50 -08:00
[ TrainerPoolTier . UNCOMMON ] : [ Species . JIGGLYPUFF , Species . MAGNEMITE , Species . MARILL , Species . COTTONEE , Species . SKIDDO ] ,
[ TrainerPoolTier . RARE ] : [ Species . BUIZEL , Species . SNEASEL , Species . KLEFKI , Species . INDEEDEE ]
2023-12-01 22:12:32 -08:00
} ) ,
2024-03-20 21:57:28 -07:00
[ TrainerType . CYCLIST ] : new TrainerConfig ( ++ t ) . setMoneyMultiplier ( 1.3 ) . setHasGenders ( ) . setHasDouble ( 'Cyclists' ) . setEncounterBgm ( TrainerType . CYCLIST )
2023-12-01 22:12:32 -08:00
. setPartyTemplates ( trainerPartyTemplates . TWO_WEAK , trainerPartyTemplates . ONE_AVG )
. setSpeciesPools ( {
2023-12-13 21:41:35 -08:00
[ TrainerPoolTier . COMMON ] : [ Species . PICHU , Species . STARLY , Species . TAILLOW , Species . BOLTUND ] ,
2024-02-05 20:46:45 -08:00
[ TrainerPoolTier . UNCOMMON ] : [ Species . DODUO , Species . ELECTRIKE , Species . BLITZLE , Species . WATTREL ] ,
2023-12-01 22:12:32 -08:00
[ TrainerPoolTier . RARE ] : [ Species . YANMA , Species . NINJASK , Species . WHIRLIPEDE , Species . EMOLGA ] ,
2023-12-13 21:41:35 -08:00
[ TrainerPoolTier . SUPER_RARE ] : [ Species . ACCELGOR , Species . DREEPY ]
2023-12-01 22:12:32 -08:00
} ) ,
[ TrainerType . DANCER ] : new TrainerConfig ( ++ t ) . setMoneyMultiplier ( 1.55 ) . setEncounterBgm ( TrainerType . CYCLIST )
. setPartyTemplates ( trainerPartyTemplates . TWO_WEAK , trainerPartyTemplates . ONE_AVG , trainerPartyTemplates . TWO_AVG , trainerPartyTemplates . TWO_WEAK_SAME_TWO_WEAK_SAME )
. setSpeciesPools ( {
[ TrainerPoolTier . COMMON ] : [ Species . RALTS , Species . SPOINK , Species . LOTAD , Species . BUDEW ] ,
[ TrainerPoolTier . UNCOMMON ] : [ Species . SPINDA , Species . SWABLU , Species . MARACTUS , ] ,
2023-12-12 12:32:50 -08:00
[ TrainerPoolTier . RARE ] : [ Species . BELLOSSOM , Species . HITMONTOP , Species . MIME_JR , Species . ORICORIO ] ,
[ TrainerPoolTier . SUPER_RARE ] : [ Species . POPPLIO ]
2023-12-01 22:12:32 -08:00
} ) ,
2023-11-10 12:51:34 -08:00
[ TrainerType . DEPOT_AGENT ] : new TrainerConfig ( ++ t ) . setMoneyMultiplier ( 1.45 ) . setEncounterBgm ( TrainerType . CLERK ) ,
2024-03-21 00:38:44 -07:00
[ TrainerType . DOCTOR ] : new TrainerConfig ( ++ t ) . setHasGenders ( 'Nurse' , 'lass' ) . setHasDouble ( 'Medical Team' ) . setMoneyMultiplier ( 3 ) . setEncounterBgm ( TrainerType . CLERK )
2024-03-20 21:57:28 -07:00
. setSpeciesFilter ( s = > ! ! s . getLevelMoves ( ) . find ( plm = > plm [ 1 ] === Moves . HEAL_PULSE ) ) ,
2023-12-30 20:31:26 -08:00
[ TrainerType . FISHERMAN ] : new TrainerConfig ( ++ t ) . setMoneyMultiplier ( 1.25 ) . setEncounterBgm ( TrainerType . BACKPACKER ) . setSpecialtyTypes ( Type . WATER )
2023-10-18 15:01:15 -07:00
. setPartyTemplates ( trainerPartyTemplates . TWO_WEAK_SAME_ONE_AVG , trainerPartyTemplates . ONE_AVG , trainerPartyTemplates . THREE_WEAK_SAME , trainerPartyTemplates . ONE_STRONG , trainerPartyTemplates . SIX_WEAKER )
. setSpeciesPools ( {
2023-12-13 21:41:35 -08:00
[ TrainerPoolTier . COMMON ] : [ Species . TENTACOOL , Species . MAGIKARP , Species . GOLDEEN , Species . STARYU , Species . REMORAID , Species . SKRELP , Species . CLAUNCHER , Species . ARROKUDA ] ,
2023-12-12 12:32:50 -08:00
[ TrainerPoolTier . UNCOMMON ] : [ Species . POLIWAG , Species . SHELLDER , Species . KRABBY , Species . HORSEA , Species . CARVANHA , Species . BARBOACH , Species . CORPHISH , Species . FINNEON , Species . TYMPOLE , Species . BASCULIN , Species . FRILLISH , Species . INKAY ] ,
2024-02-05 20:46:45 -08:00
[ TrainerPoolTier . RARE ] : [ Species . CHINCHOU , Species . CORSOLA , Species . WAILMER , Species . BARBOACH , Species . CLAMPERL , Species . LUVDISC , Species . MANTYKE , Species . ALOMOMOLA , Species . TATSUGIRI , Species . VELUZA ] ,
[ TrainerPoolTier . SUPER_RARE ] : [ Species . LAPRAS , Species . FEEBAS , Species . RELICANTH , Species . DONDOZO ]
2023-12-01 22:12:32 -08:00
} ) ,
2023-12-30 20:31:26 -08:00
[ TrainerType . GUITARIST ] : new TrainerConfig ( ++ t ) . setMoneyMultiplier ( 1.2 ) . setEncounterBgm ( TrainerType . ROUGHNECK ) . setSpecialtyTypes ( Type . ELECTRIC ) . setSpeciesFilter ( s = > s . isOfType ( Type . ELECTRIC ) ) ,
2023-10-09 17:20:02 -07:00
[ TrainerType . HARLEQUIN ] : new TrainerConfig ( ++ t ) . setEncounterBgm ( TrainerType . PSYCHIC ) . setSpeciesFilter ( s = > tmSpecies [ Moves . TRICK_ROOM ] . indexOf ( s . speciesId ) > - 1 ) ,
2023-12-30 20:31:26 -08:00
[ TrainerType . HIKER ] : new TrainerConfig ( ++ t ) . setEncounterBgm ( TrainerType . BACKPACKER )
2023-12-08 05:15:36 -08:00
. setPartyTemplates ( trainerPartyTemplates . TWO_AVG_SAME_ONE_AVG , trainerPartyTemplates . TWO_AVG_SAME_ONE_STRONG , trainerPartyTemplates . TWO_AVG , trainerPartyTemplates . FOUR_WEAK , trainerPartyTemplates . ONE_STRONG )
. setSpeciesPools ( {
2024-02-05 20:46:45 -08:00
[ TrainerPoolTier . COMMON ] : [ Species . SANDSHREW , Species . DIGLETT , Species . GEODUDE , Species . MACHOP , Species . ARON , Species . ROGGENROLA , Species . DRILBUR , Species . NACLI ] ,
[ TrainerPoolTier . UNCOMMON ] : [ Species . ZUBAT , Species . RHYHORN , Species . ONIX , Species . CUBONE , Species . WOOBAT , Species . SWINUB , Species . NOSEPASS , Species . HIPPOPOTAS , Species . DWEBBLE , Species . KLAWF , Species . TOEDSCOOL ] ,
[ TrainerPoolTier . RARE ] : [ Species . TORKOAL , Species . TRAPINCH , Species . BARBOACH , Species . GOLETT , Species . ALOLA_DIGLETT , Species . ALOLA_GEODUDE , Species . GALAR_STUNFISK , Species . PALDEA_WOOPER ] ,
2023-12-08 05:15:36 -08:00
[ TrainerPoolTier . SUPER_RARE ] : [ Species . MAGBY , Species . LARVITAR ]
} ) ,
2024-03-20 21:57:28 -07:00
[ TrainerType . HOOLIGANS ] : new TrainerConfig ( ++ t ) . setDoubleOnly ( ) . setEncounterBgm ( TrainerType . ROUGHNECK ) . setSpeciesFilter ( s = > s . isOfType ( Type . POISON ) || s . isOfType ( Type . DARK ) ) ,
2023-11-10 12:51:34 -08:00
[ TrainerType . HOOPSTER ] : new TrainerConfig ( ++ t ) . setMoneyMultiplier ( 1.2 ) . setEncounterBgm ( TrainerType . CYCLIST ) ,
[ TrainerType . INFIELDER ] : new TrainerConfig ( ++ t ) . setMoneyMultiplier ( 1.2 ) . setEncounterBgm ( TrainerType . CYCLIST ) ,
[ TrainerType . JANITOR ] : new TrainerConfig ( ++ t ) . setMoneyMultiplier ( 1.1 ) . setEncounterBgm ( TrainerType . CLERK ) ,
[ TrainerType . LINEBACKER ] : new TrainerConfig ( ++ t ) . setMoneyMultiplier ( 1.2 ) . setEncounterBgm ( TrainerType . CYCLIST ) ,
2023-12-05 14:12:39 -08:00
[ TrainerType . MAID ] : new TrainerConfig ( ++ t ) . setMoneyMultiplier ( 1.6 ) . setEncounterBgm ( TrainerType . RICH ) ,
2023-11-03 21:32:12 -07:00
[ TrainerType . MUSICIAN ] : new TrainerConfig ( ++ t ) . setEncounterBgm ( TrainerType . ROUGHNECK ) . setSpeciesFilter ( s = > ! ! s . getLevelMoves ( ) . find ( plm = > plm [ 1 ] === Moves . SING ) ) ,
2024-03-20 21:57:28 -07:00
[ TrainerType . HEX_MANIAC ] : new TrainerConfig ( ++ t ) . setMoneyMultiplier ( 1.5 ) . setEncounterBgm ( TrainerType . PSYCHIC )
. setPartyTemplates ( trainerPartyTemplates . TWO_AVG , trainerPartyTemplates . ONE_AVG_ONE_STRONG , trainerPartyTemplates . TWO_AVG_SAME_ONE_AVG , trainerPartyTemplates . THREE_AVG , trainerPartyTemplates . TWO_STRONG )
. setSpeciesFilter ( s = > s . isOfType ( Type . GHOST ) ) ,
2023-11-10 12:51:34 -08:00
[ TrainerType . NURSERY_AIDE ] : new TrainerConfig ( ++ t ) . setMoneyMultiplier ( 1.3 ) . setEncounterBgm ( 'lass' ) ,
2023-12-01 22:12:32 -08:00
[ TrainerType . OFFICER ] : new TrainerConfig ( ++ t ) . setMoneyMultiplier ( 1.55 ) . setEncounterBgm ( TrainerType . CLERK )
2023-12-20 16:19:23 -08:00
. setPartyTemplates ( trainerPartyTemplates . ONE_AVG , trainerPartyTemplates . ONE_STRONG , trainerPartyTemplates . TWO_AVG , trainerPartyTemplates . TWO_WEAK_SAME_ONE_AVG )
2023-12-02 17:56:53 -08:00
. setSpeciesPools ( {
2024-02-05 20:46:45 -08:00
[ TrainerPoolTier . COMMON ] : [ Species . VULPIX , Species . GROWLITHE , Species . SNUBBULL , Species . POOCHYENA , Species . ELECTRIKE , Species . LILLIPUP , Species . YAMPER , Species . FIDOUGH ] ,
[ TrainerPoolTier . UNCOMMON ] : [ Species . HOUNDOUR , Species . ROCKRUFF , Species . MASCHIFF ] ,
2023-12-01 22:12:32 -08:00
[ TrainerPoolTier . RARE ] : [ Species . JOLTEON , Species . RIOLU ] ,
[ TrainerPoolTier . SUPER_RARE ] : [ ] ,
[ TrainerPoolTier . ULTRA_RARE ] : [ Species . ENTEI , Species . SUICUNE , Species . RAIKOU ]
} ) ,
2023-11-10 12:51:34 -08:00
[ TrainerType . PARASOL_LADY ] : new TrainerConfig ( ++ t ) . setMoneyMultiplier ( 1.55 ) . setEncounterBgm ( TrainerType . PARASOL_LADY ) . setSpeciesFilter ( s = > s . isOfType ( Type . WATER ) ) ,
2023-10-09 17:20:02 -07:00
[ TrainerType . PILOT ] : new TrainerConfig ( ++ t ) . setEncounterBgm ( TrainerType . CLERK ) . setSpeciesFilter ( s = > tmSpecies [ Moves . FLY ] . indexOf ( s . speciesId ) > - 1 ) ,
2024-03-21 00:38:44 -07:00
[ TrainerType . POKEFAN ] : new TrainerConfig ( ++ t ) . setMoneyMultiplier ( 1.4 ) . setName ( 'Poké Fan' ) . setHasGenders ( ) . setHasDouble ( 'Poké Fan Family' ) . setEncounterBgm ( TrainerType . POKEFAN )
2023-12-02 17:59:47 -08:00
. setPartyTemplates ( trainerPartyTemplates . SIX_WEAKER , trainerPartyTemplates . FOUR_WEAK , trainerPartyTemplates . TWO_AVG , trainerPartyTemplates . ONE_STRONG , trainerPartyTemplates . FOUR_WEAK_SAME , trainerPartyTemplates . FIVE_WEAK , trainerPartyTemplates . SIX_WEAKER_SAME ) ,
2024-03-20 21:57:28 -07:00
[ TrainerType . PRESCHOOLER ] : new TrainerConfig ( ++ t ) . setMoneyMultiplier ( 0.2 ) . setEncounterBgm ( TrainerType . YOUNGSTER ) . setHasGenders ( undefined , 'lass' ) . setHasDouble ( 'Preschoolers' )
2023-12-02 17:56:53 -08:00
. setPartyTemplates ( trainerPartyTemplates . THREE_WEAK , trainerPartyTemplates . FOUR_WEAKER , trainerPartyTemplates . TWO_WEAK_SAME_ONE_AVG , trainerPartyTemplates . FIVE_WEAKER )
. setSpeciesPools ( {
2024-02-05 20:46:45 -08:00
[ TrainerPoolTier . COMMON ] : [ Species . CATERPIE , Species . PICHU , Species . SANDSHREW , Species . LEDYBA , Species . BUDEW , Species . BURMY , Species . WOOLOO , Species . PAWMI , Species . SMOLIV ] ,
2023-12-13 21:41:35 -08:00
[ TrainerPoolTier . UNCOMMON ] : [ Species . EEVEE , Species . CLEFFA , Species . IGGLYBUFF , Species . SWINUB , Species . WOOPER , Species . DRIFLOON , Species . DEDENNE , Species . STUFFUL ] ,
2024-02-05 20:46:45 -08:00
[ TrainerPoolTier . RARE ] : [ Species . RALTS , Species . RIOLU , Species . JOLTIK , Species . TANDEMAUS ] ,
[ TrainerPoolTier . SUPER_RARE ] : [ Species . DARUMAKA , Species . TINKATINK ] ,
2023-12-02 17:56:53 -08:00
} ) ,
2024-03-20 21:57:28 -07:00
[ TrainerType . PSYCHIC ] : new TrainerConfig ( ++ t ) . setHasGenders ( ) . setHasDouble ( 'Psychics' ) . setMoneyMultiplier ( 1.4 ) . setEncounterBgm ( TrainerType . PSYCHIC )
2023-12-02 17:56:53 -08:00
. setPartyTemplates ( trainerPartyTemplates . TWO_WEAK , trainerPartyTemplates . TWO_AVG , trainerPartyTemplates . TWO_WEAK_SAME_ONE_AVG , trainerPartyTemplates . TWO_WEAK_SAME_TWO_WEAK_SAME , trainerPartyTemplates . ONE_STRONGER )
. setSpeciesPools ( {
2023-12-13 21:41:35 -08:00
[ TrainerPoolTier . COMMON ] : [ Species . ABRA , Species . DROWZEE , Species . RALTS , Species . SPOINK , Species . GOTHITA , Species . SOLOSIS , Species . BLIPBUG , Species . ESPURR , Species . HATENNA ] ,
2023-12-12 12:32:50 -08:00
[ TrainerPoolTier . UNCOMMON ] : [ Species . MIME_JR , Species . EXEGGCUTE , Species . MEDITITE , Species . NATU , Species . EXEGGCUTE , Species . WOOBAT , Species . INKAY , Species . ORANGURU ] ,
2023-12-08 21:33:29 -08:00
[ TrainerPoolTier . RARE ] : [ Species . ELGYEM , Species . SIGILYPH , Species . BALTOY , Species . GIRAFARIG , Species . MEOWSTIC ] ,
2024-03-16 19:10:21 -07:00
[ TrainerPoolTier . SUPER_RARE ] : [ Species . BELDUM , Species . ESPEON , Species . STANTLER ] ,
2023-12-02 17:56:53 -08:00
} ) ,
2024-03-21 00:38:44 -07:00
[ TrainerType . RANGER ] : new TrainerConfig ( ++ t ) . setMoneyMultiplier ( 1.4 ) . setName ( 'Pokémon Ranger' ) . setEncounterBgm ( TrainerType . BACKPACKER ) . setHasGenders ( ) . setHasDouble ( 'Pokémon Rangers' )
2023-12-08 21:33:29 -08:00
. setSpeciesPools ( {
2023-12-13 21:41:35 -08:00
[ TrainerPoolTier . COMMON ] : [ Species . PICHU , Species . GROWLITHE , Species . PONYTA , Species . ZIGZAGOON , Species . SEEDOT , Species . BIDOOF , Species . RIOLU , Species . SEWADDLE , Species . SKIDDO , Species . SALANDIT , Species . YAMPER ] ,
[ TrainerPoolTier . UNCOMMON ] : [ Species . AZURILL , Species . TAUROS , Species . MAREEP , Species . FARFETCHD , Species . TEDDIURSA , Species . SHROOMISH , Species . ELECTRIKE , Species . BUDEW , Species . BUIZEL , Species . MUDBRAY , Species . STUFFUL ] ,
2024-02-05 20:46:45 -08:00
[ TrainerPoolTier . RARE ] : [ Species . EEVEE , Species . SCYTHER , Species . KANGASKHAN , Species . RALTS , Species . MUNCHLAX , Species . ZORUA , Species . PALDEA_TAUROS , Species . TINKATINK , Species . CYCLIZAR , Species . FLAMIGO ] ,
2023-12-08 21:33:29 -08:00
[ TrainerPoolTier . SUPER_RARE ] : [ Species . LARVESTA ] ,
} ) ,
2024-03-20 21:57:28 -07:00
[ TrainerType . RICH ] : new TrainerConfig ( ++ t ) . setMoneyMultiplier ( 5 ) . setName ( 'Gentleman' ) . setHasGenders ( 'Madame' ) . setHasDouble ( 'Rich Couple' ) ,
[ TrainerType . RICH_KID ] : new TrainerConfig ( ++ t ) . setMoneyMultiplier ( 3.75 ) . setName ( 'Rich Boy' ) . setHasGenders ( 'Lady' ) . setHasDouble ( 'Rich Kids' ) . setEncounterBgm ( TrainerType . RICH ) ,
2023-11-10 12:51:34 -08:00
[ TrainerType . ROUGHNECK ] : new TrainerConfig ( ++ t ) . setMoneyMultiplier ( 1.4 ) . setEncounterBgm ( TrainerType . ROUGHNECK ) . setSpeciesFilter ( s = > s . isOfType ( Type . DARK ) ) ,
2024-03-20 21:57:28 -07:00
[ TrainerType . SCIENTIST ] : new TrainerConfig ( ++ t ) . setHasGenders ( ) . setHasDouble ( 'Scientists' ) . setMoneyMultiplier ( 1.7 ) . setEncounterBgm ( TrainerType . SCIENTIST )
2023-12-01 22:12:32 -08:00
. setSpeciesPools ( {
[ TrainerPoolTier . COMMON ] : [ Species . MAGNEMITE , Species . GRIMER , Species . DROWZEE , Species . VOLTORB , Species . KOFFING ] ,
2023-12-12 12:32:50 -08:00
[ TrainerPoolTier . UNCOMMON ] : [ Species . BALTOY , Species . BRONZOR , Species . FERROSEED , Species . KLINK , Species . CHARJABUG , Species . BLIPBUG , Species . HELIOPTILE ] ,
2023-12-28 14:49:09 -08:00
[ TrainerPoolTier . RARE ] : [ Species . ABRA , Species . DITTO , Species . PORYGON , Species . ELEKID , Species . SOLOSIS , Species . GALAR_WEEZING ] ,
[ TrainerPoolTier . SUPER_RARE ] : [ Species . OMANYTE , Species . KABUTO , Species . AERODACTYL , Species . LILEEP , Species . ANORITH , Species . CRANIDOS , Species . SHIELDON , Species . TIRTOUGA , Species . ARCHEN , Species . ARCTOVISH , Species . ARCTOZOLT , Species . DRACOVISH , Species . DRACOZOLT ] ,
2023-12-13 21:41:35 -08:00
[ TrainerPoolTier . ULTRA_RARE ] : [ Species . ROTOM , Species . MELTAN ]
2023-12-01 22:12:32 -08:00
} ) ,
2023-11-10 12:51:34 -08:00
[ TrainerType . SMASHER ] : new TrainerConfig ( ++ t ) . setMoneyMultiplier ( 1.2 ) . setEncounterBgm ( TrainerType . CYCLIST ) ,
2024-03-30 12:46:00 -07:00
[ TrainerType . SNOW_WORKER ] : new TrainerConfig ( ++ t ) . setName ( 'Worker' ) . setHasGenders ( ) . setHasDouble ( 'Workers' ) . setMoneyMultiplier ( 1.7 ) . setEncounterBgm ( TrainerType . CLERK ) . setSpeciesFilter ( s = > s . isOfType ( Type . ICE ) || s . isOfType ( Type . STEEL ) ) ,
2023-11-10 12:51:34 -08:00
[ TrainerType . STRIKER ] : new TrainerConfig ( ++ t ) . setMoneyMultiplier ( 1.2 ) . setEncounterBgm ( TrainerType . CYCLIST ) ,
2024-03-20 21:57:28 -07:00
[ TrainerType . STUDENT ] : new TrainerConfig ( ++ t ) . setMoneyMultiplier ( 0.75 ) . setEncounterBgm ( TrainerType . YOUNGSTER ) . setHasGenders ( undefined , 'lass' ) . setHasDouble ( 'Students' )
2024-03-16 19:10:21 -07:00
. setSpeciesPools ( {
[ TrainerPoolTier . COMMON ] : [ Species . ODDISH , Species . EXEGGCUTE , Species . TEDDIURSA , Species . WURMPLE , Species . RALTS , Species . SHROOMISH , Species . FLETCHLING ] ,
[ TrainerPoolTier . UNCOMMON ] : [ Species . VOLTORB , Species . WHISMUR , Species . MEDITITE , Species . MIME_JR , Species . NYMBLE ] ,
[ TrainerPoolTier . RARE ] : [ Species . TANGELA , Species . EEVEE , Species . YANMA ] ,
[ TrainerPoolTier . SUPER_RARE ] : [ Species . TADBULB ]
} ) ,
2024-03-20 21:57:28 -07:00
[ TrainerType . SWIMMER ] : new TrainerConfig ( ++ t ) . setMoneyMultiplier ( 1.3 ) . setEncounterBgm ( TrainerType . PARASOL_LADY ) . setHasGenders ( ) . setHasDouble ( 'Swimmers' ) . setSpecialtyTypes ( Type . WATER ) . setSpeciesFilter ( s = > s . isOfType ( Type . WATER ) ) ,
[ TrainerType . TWINS ] : new TrainerConfig ( ++ t ) . setDoubleOnly ( ) . setMoneyMultiplier ( 0.65 ) . setUseSameSeedForAllMembers ( )
2023-12-02 17:56:53 -08:00
. setPartyTemplateFunc ( scene = > getWavePartyTemplate ( scene , trainerPartyTemplates . TWO_WEAK , trainerPartyTemplates . TWO_AVG , trainerPartyTemplates . TWO_STRONG ) )
2023-12-08 05:15:36 -08:00
. setPartyMemberFunc ( 0 , getRandomPartyMemberFunc ( [ Species . PLUSLE , Species . VOLBEAT , Species . PACHIRISU , Species . SILCOON , Species . METAPOD , Species . IGGLYBUFF , Species . PETILIL , Species . EEVEE ] ) )
2024-03-20 21:57:28 -07:00
. setPartyMemberFunc ( 1 , getRandomPartyMemberFunc ( [ Species . MINUN , Species . ILLUMISE , Species . EMOLGA , Species . CASCOON , Species . KAKUNA , Species . CLEFFA , Species . COTTONEE , Species . EEVEE ] , TrainerSlot . TRAINER_PARTNER ) )
2023-11-10 12:51:34 -08:00
. setEncounterBgm ( TrainerType . TWINS ) ,
2024-03-21 00:38:44 -07:00
[ TrainerType . VETERAN ] : new TrainerConfig ( ++ t ) . setHasGenders ( ) . setHasDouble ( 'Veteran Duo' ) . setMoneyMultiplier ( 2.5 ) . setEncounterBgm ( TrainerType . ACE_TRAINER ) . setSpeciesFilter ( s = > s . isOfType ( Type . DRAGON ) ) ,
2024-03-20 21:57:28 -07:00
[ TrainerType . WAITER ] : new TrainerConfig ( ++ t ) . setHasGenders ( 'Waitress' ) . setHasDouble ( 'Restaurant Staff' ) . setMoneyMultiplier ( 1.5 ) . setEncounterBgm ( TrainerType . CLERK )
2023-12-28 14:49:09 -08:00
. setSpeciesPools ( {
[ TrainerPoolTier . COMMON ] : [ Species . CLEFFA , Species . CHATOT , Species . PANSAGE , Species . PANSEAR , Species . PANPOUR , Species . MINCCINO ] ,
[ TrainerPoolTier . UNCOMMON ] : [ Species . TROPIUS , Species . PETILIL , Species . BOUNSWEET , Species . INDEEDEE ] ,
2024-02-05 20:46:45 -08:00
[ TrainerPoolTier . RARE ] : [ Species . APPLIN , Species . SINISTEA , Species . POLTCHAGEIST ]
2023-12-28 14:49:09 -08:00
} ) ,
2024-03-30 12:46:00 -07:00
[ TrainerType . WORKER ] : new TrainerConfig ( ++ t ) . setHasGenders ( ) . setHasDouble ( 'Workers' ) . setEncounterBgm ( TrainerType . CLERK ) . setMoneyMultiplier ( 1.7 ) . setSpeciesFilter ( s = > s . isOfType ( Type . ROCK ) || s . isOfType ( Type . STEEL ) ) ,
2024-03-20 21:57:28 -07:00
[ TrainerType . YOUNGSTER ] : new TrainerConfig ( ++ t ) . setMoneyMultiplier ( 0.5 ) . setEncounterBgm ( TrainerType . YOUNGSTER ) . setHasGenders ( 'Lass' , 'lass' ) . setHasDouble ( 'Beginners' ) . setPartyTemplates ( trainerPartyTemplates . TWO_WEAKER )
2023-10-20 08:48:19 -07:00
. setSpeciesPools (
[ Species . CATERPIE , Species . WEEDLE , Species . RATTATA , Species . SENTRET , Species . POOCHYENA , Species . ZIGZAGOON , Species . WURMPLE , Species . BIDOOF , Species . PATRAT , Species . LILLIPUP ]
2024-01-13 09:24:24 -08:00
) ,
2024-03-06 15:55:55 -08:00
[ TrainerType . BROCK ] : new TrainerConfig ( ( t = TrainerType . BROCK ) ) . initForGymLeader ( [ Species . GEODUDE , Species . ONIX ] , Type . ROCK ) . setBattleBgm ( 'battle_kanto_gym' ) ,
[ TrainerType . MISTY ] : new TrainerConfig ( ++ t ) . initForGymLeader ( [ Species . STARYU , Species . PSYDUCK ] , Type . WATER ) . setBattleBgm ( 'battle_kanto_gym' ) ,
[ TrainerType . LT_SURGE ] : new TrainerConfig ( ++ t ) . initForGymLeader ( [ Species . VOLTORB , Species . PIKACHU , Species . ELECTABUZZ ] , Type . ELECTRIC ) . setBattleBgm ( 'battle_kanto_gym' ) ,
[ TrainerType . ERIKA ] : new TrainerConfig ( ++ t ) . initForGymLeader ( [ Species . ODDISH , Species . BELLSPROUT , Species . TANGELA , Species . HOPPIP ] , Type . GRASS ) . setBattleBgm ( 'battle_kanto_gym' ) ,
[ TrainerType . JANINE ] : new TrainerConfig ( ++ t ) . initForGymLeader ( [ Species . VENONAT , Species . SPINARAK , Species . ZUBAT ] , Type . POISON ) . setBattleBgm ( 'battle_kanto_gym' ) ,
[ TrainerType . SABRINA ] : new TrainerConfig ( ++ t ) . initForGymLeader ( [ Species . ABRA , Species . MR_MIME , Species . ESPEON ] , Type . PSYCHIC ) . setBattleBgm ( 'battle_kanto_gym' ) ,
[ TrainerType . BLAINE ] : new TrainerConfig ( ++ t ) . initForGymLeader ( [ Species . GROWLITHE , Species . PONYTA , Species . MAGMAR ] , Type . FIRE ) . setBattleBgm ( 'battle_kanto_gym' ) ,
[ TrainerType . GIOVANNI ] : new TrainerConfig ( ++ t ) . initForGymLeader ( [ Species . SANDILE , Species . MURKROW , Species . NIDORAN_M , Species . NIDORAN_F ] , Type . DARK ) . setBattleBgm ( 'battle_kanto_gym' ) ,
[ TrainerType . FALKNER ] : new TrainerConfig ( ++ t ) . initForGymLeader ( [ Species . PIDGEY , Species . HOOTHOOT , Species . DODUO ] , Type . FLYING ) . setBattleBgm ( 'battle_johto_gym' ) ,
[ TrainerType . BUGSY ] : new TrainerConfig ( ++ t ) . initForGymLeader ( [ Species . SCYTHER , Species . HERACROSS , Species . SHUCKLE , Species . PINSIR ] , Type . BUG ) . setBattleBgm ( 'battle_johto_gym' ) ,
2024-04-20 22:47:55 -07:00
[ TrainerType . WHITNEY ] : new TrainerConfig ( ++ t ) . initForGymLeader ( [ Species . GIRAFARIG , Species . MILTANK ] , Type . NORMAL ) . setBattleBgm ( 'battle_johto_gym' ) ,
2024-03-06 15:55:55 -08:00
[ TrainerType . MORTY ] : new TrainerConfig ( ++ t ) . initForGymLeader ( [ Species . GASTLY , Species . MISDREAVUS , Species . SABLEYE ] , Type . GHOST ) . setBattleBgm ( 'battle_johto_gym' ) ,
2024-04-20 22:47:55 -07:00
[ TrainerType . CHUCK ] : new TrainerConfig ( ++ t ) . initForGymLeader ( [ Species . POLIWRATH , Species . MANKEY ] , Type . FIGHTING ) . setBattleBgm ( 'battle_johto_gym' ) ,
2024-03-06 15:55:55 -08:00
[ TrainerType . JASMINE ] : new TrainerConfig ( ++ t ) . initForGymLeader ( [ Species . MAGNEMITE , Species . STEELIX ] , Type . STEEL ) . setBattleBgm ( 'battle_johto_gym' ) ,
[ TrainerType . PRYCE ] : new TrainerConfig ( ++ t ) . initForGymLeader ( [ Species . SEEL , Species . SWINUB ] , Type . ICE ) . setBattleBgm ( 'battle_johto_gym' ) ,
[ TrainerType . CLAIR ] : new TrainerConfig ( ++ t ) . initForGymLeader ( [ Species . DRATINI , Species . HORSEA , Species . GYARADOS ] , Type . DRAGON ) . setBattleBgm ( 'battle_johto_gym' ) ,
[ TrainerType . ROXANNE ] : new TrainerConfig ( ++ t ) . initForGymLeader ( [ Species . GEODUDE , Species . NOSEPASS ] , Type . ROCK ) . setBattleBgm ( 'battle_hoenn_gym' ) ,
[ TrainerType . BRAWLY ] : new TrainerConfig ( ++ t ) . initForGymLeader ( [ Species . MACHOP , Species . MAKUHITA ] , Type . FIGHTING ) . setBattleBgm ( 'battle_hoenn_gym' ) ,
[ TrainerType . WATTSON ] : new TrainerConfig ( ++ t ) . initForGymLeader ( [ Species . MAGNEMITE , Species . VOLTORB , Species . ELECTRIKE ] , Type . ELECTRIC ) . setBattleBgm ( 'battle_hoenn_gym' ) ,
[ TrainerType . FLANNERY ] : new TrainerConfig ( ++ t ) . initForGymLeader ( [ Species . SLUGMA , Species . TORKOAL , Species . NUMEL ] , Type . FIRE ) . setBattleBgm ( 'battle_hoenn_gym' ) ,
[ TrainerType . NORMAN ] : new TrainerConfig ( ++ t ) . initForGymLeader ( [ Species . SLAKOTH , Species . SPINDA , Species . CHANSEY , Species . KANGASKHAN ] , Type . NORMAL ) . setBattleBgm ( 'battle_hoenn_gym' ) ,
[ TrainerType . WINONA ] : new TrainerConfig ( ++ t ) . initForGymLeader ( [ Species . SWABLU , Species . WINGULL , Species . TROPIUS , Species . SKARMORY ] , Type . FLYING ) . setBattleBgm ( 'battle_hoenn_gym' ) ,
[ TrainerType . TATE ] : new TrainerConfig ( ++ t ) . initForGymLeader ( [ Species . SOLROCK , Species . NATU , Species . CHIMECHO , Species . GALLADE ] , Type . PSYCHIC ) . setBattleBgm ( 'battle_hoenn_gym' ) ,
[ TrainerType . LIZA ] : new TrainerConfig ( ++ t ) . initForGymLeader ( [ Species . LUNATONE , Species . SPOINK , Species . BALTOY , Species . GARDEVOIR ] , Type . PSYCHIC ) . setBattleBgm ( 'battle_hoenn_gym' ) ,
[ TrainerType . JUAN ] : new TrainerConfig ( ++ t ) . initForGymLeader ( [ Species . HORSEA , Species . BARBOACH , Species . SPHEAL , Species . RELICANTH ] , Type . WATER ) . setBattleBgm ( 'battle_hoenn_gym' ) ,
[ TrainerType . ROARK ] : new TrainerConfig ( ++ t ) . initForGymLeader ( [ Species . CRANIDOS , Species . LARVITAR , Species . GEODUDE ] , Type . ROCK ) . setBattleBgm ( 'battle_sinnoh_gym' ) ,
[ TrainerType . GARDENIA ] : new TrainerConfig ( ++ t ) . initForGymLeader ( [ Species . ROSELIA , Species . TANGELA , Species . TURTWIG ] , Type . GRASS ) . setBattleBgm ( 'battle_sinnoh_gym' ) ,
[ TrainerType . MAYLENE ] : new TrainerConfig ( ++ t ) . initForGymLeader ( [ Species . LUCARIO , Species . MEDITITE , Species . CHIMCHAR ] , Type . FIGHTING ) . setBattleBgm ( 'battle_sinnoh_gym' ) ,
[ TrainerType . CRASHER_WAKE ] : new TrainerConfig ( ++ t ) . initForGymLeader ( [ Species . BUIZEL , Species . MAGIKARP , Species . PIPLUP ] , Type . WATER ) . setBattleBgm ( 'battle_sinnoh_gym' ) ,
[ TrainerType . FANTINA ] : new TrainerConfig ( ++ t ) . initForGymLeader ( [ Species . MISDREAVUS , Species . DRIFLOON , Species . SPIRITOMB ] , Type . GHOST ) . setBattleBgm ( 'battle_sinnoh_gym' ) ,
[ TrainerType . BYRON ] : new TrainerConfig ( ++ t ) . initForGymLeader ( [ Species . SHIELDON , Species . BRONZOR , Species . AGGRON ] , Type . STEEL ) . setBattleBgm ( 'battle_sinnoh_gym' ) ,
[ TrainerType . CANDICE ] : new TrainerConfig ( ++ t ) . initForGymLeader ( [ Species . SNEASEL , Species . SNOVER , Species . SNORUNT ] , Type . ICE ) . setBattleBgm ( 'battle_sinnoh_gym' ) ,
[ TrainerType . VOLKNER ] : new TrainerConfig ( ++ t ) . initForGymLeader ( [ Species . SHINX , Species . CHINCHOU , Species . ROTOM ] , Type . ELECTRIC ) . setBattleBgm ( 'battle_sinnoh_gym' ) ,
2024-01-04 16:37:07 -08:00
[ TrainerType . CILAN ] : new TrainerConfig ( ++ t ) . initForGymLeader ( [ Species . PANSAGE , Species . COTTONEE , Species . PETILIL ] , Type . GRASS ) ,
[ TrainerType . CHILI ] : new TrainerConfig ( ++ t ) . initForGymLeader ( [ Species . PANSEAR , Species . DARUMAKA , Species . HEATMOR ] , Type . FIRE ) ,
[ TrainerType . CRESS ] : new TrainerConfig ( ++ t ) . initForGymLeader ( [ Species . PANPOUR , Species . BASCULIN , Species . TYMPOLE ] , Type . WATER ) ,
[ TrainerType . CHEREN ] : new TrainerConfig ( ++ t ) . initForGymLeader ( [ Species . LILLIPUP , Species . MINCCINO , Species . PATRAT ] , Type . NORMAL ) ,
[ TrainerType . LENORA ] : new TrainerConfig ( ++ t ) . initForGymLeader ( [ Species . KANGASKHAN , Species . DEERLING , Species . AUDINO ] , Type . NORMAL ) ,
[ TrainerType . ROXIE ] : new TrainerConfig ( ++ t ) . initForGymLeader ( [ Species . VENIPEDE , Species . TRUBBISH , Species . SKORUPI ] , Type . POISON ) ,
[ TrainerType . BURGH ] : new TrainerConfig ( ++ t ) . initForGymLeader ( [ Species . SEWADDLE , Species . SHELMET , Species . KARRABLAST ] , Type . BUG ) ,
[ TrainerType . ELESA ] : new TrainerConfig ( ++ t ) . initForGymLeader ( [ Species . EMOLGA , Species . BLITZLE , Species . JOLTIK ] , Type . ELECTRIC ) ,
[ TrainerType . CLAY ] : new TrainerConfig ( ++ t ) . initForGymLeader ( [ Species . DRILBUR , Species . SANDILE , Species . GOLETT ] , Type . GROUND ) ,
[ TrainerType . SKYLA ] : new TrainerConfig ( ++ t ) . initForGymLeader ( [ Species . DUCKLETT , Species . WOOBAT , Species . RUFFLET ] , Type . FLYING ) ,
[ TrainerType . BRYCEN ] : new TrainerConfig ( ++ t ) . initForGymLeader ( [ Species . CRYOGONAL , Species . VANILLITE , Species . CUBCHOO ] , Type . ICE ) ,
[ TrainerType . DRAYDEN ] : new TrainerConfig ( ++ t ) . initForGymLeader ( [ Species . DRUDDIGON , Species . AXEW , Species . DEINO ] , Type . DRAGON ) ,
[ TrainerType . MARLON ] : new TrainerConfig ( ++ t ) . initForGymLeader ( [ Species . WAILMER , Species . FRILLISH , Species . TIRTOUGA ] , Type . WATER ) ,
[ TrainerType . VIOLA ] : new TrainerConfig ( ++ t ) . initForGymLeader ( [ Species . SURSKIT , Species . SCATTERBUG ] , Type . BUG ) ,
[ TrainerType . GRANT ] : new TrainerConfig ( ++ t ) . initForGymLeader ( [ Species . AMAURA , Species . TYRUNT ] , Type . ROCK ) ,
[ TrainerType . KORRINA ] : new TrainerConfig ( ++ t ) . initForGymLeader ( [ Species . HAWLUCHA , Species . LUCARIO , Species . MIENFOO ] , Type . FIGHTING ) ,
[ TrainerType . RAMOS ] : new TrainerConfig ( ++ t ) . initForGymLeader ( [ Species . SKIDDO , Species . HOPPIP , Species . BELLSPROUT ] , Type . GRASS ) ,
[ TrainerType . CLEMONT ] : new TrainerConfig ( ++ t ) . initForGymLeader ( [ Species . HELIOPTILE , Species . MAGNEMITE , Species . EMOLGA ] , Type . ELECTRIC ) ,
[ TrainerType . VALERIE ] : new TrainerConfig ( ++ t ) . initForGymLeader ( [ Species . SYLVEON , Species . MAWILE , Species . MR_MIME ] , Type . FAIRY ) ,
[ TrainerType . OLYMPIA ] : new TrainerConfig ( ++ t ) . initForGymLeader ( [ Species . ESPURR , Species . SIGILYPH , Species . SLOWKING ] , Type . PSYCHIC ) ,
[ TrainerType . WULFRIC ] : new TrainerConfig ( ++ t ) . initForGymLeader ( [ Species . BERGMITE , Species . SNOVER , Species . CRYOGONAL ] , Type . ICE ) ,
[ TrainerType . MILO ] : new TrainerConfig ( ++ t ) . initForGymLeader ( [ Species . GOSSIFLEUR , Species . APPLIN , Species . BOUNSWEET ] , Type . GRASS ) ,
[ TrainerType . NESSA ] : new TrainerConfig ( ++ t ) . initForGymLeader ( [ Species . CHEWTLE , Species . ARROKUDA , Species . WIMPOD ] , Type . WATER ) ,
[ TrainerType . KABU ] : new TrainerConfig ( ++ t ) . initForGymLeader ( [ Species . SIZZLIPEDE , Species . VULPIX , Species . TORKOAL ] , Type . FIRE ) ,
[ TrainerType . BEA ] : new TrainerConfig ( ++ t ) . initForGymLeader ( [ Species . GALAR_FARFETCHD , Species . MACHOP , Species . CLOBBOPUS ] , Type . FIGHTING ) ,
[ TrainerType . ALLISTER ] : new TrainerConfig ( ++ t ) . initForGymLeader ( [ Species . GALAR_YAMASK , Species . GALAR_CORSOLA , Species . GASTLY ] , Type . GHOST ) ,
[ TrainerType . OPAL ] : new TrainerConfig ( ++ t ) . initForGymLeader ( [ Species . MILCERY , Species . TOGETIC , Species . GALAR_WEEZING ] , Type . FAIRY ) ,
[ TrainerType . BEDE ] : new TrainerConfig ( ++ t ) . initForGymLeader ( [ Species . HATENNA , Species . GALAR_PONYTA , Species . GARDEVOIR ] , Type . FAIRY ) ,
[ TrainerType . GORDIE ] : new TrainerConfig ( ++ t ) . initForGymLeader ( [ Species . ROLYCOLY , Species . STONJOURNER , Species . BINACLE ] , Type . ROCK ) ,
[ TrainerType . MELONY ] : new TrainerConfig ( ++ t ) . initForGymLeader ( [ Species . SNOM , Species . GALAR_DARUMAKA , Species . GALAR_MR_MIME ] , Type . ICE ) ,
[ TrainerType . PIERS ] : new TrainerConfig ( ++ t ) . initForGymLeader ( [ Species . GALAR_ZIGZAGOON , Species . SCRAGGY , Species . INKAY ] , Type . DARK ) ,
[ TrainerType . MARNIE ] : new TrainerConfig ( ++ t ) . initForGymLeader ( [ Species . IMPIDIMP , Species . PURRLOIN , Species . MORPEKO ] , Type . DARK ) ,
[ TrainerType . RAIHAN ] : new TrainerConfig ( ++ t ) . initForGymLeader ( [ Species . DURALUDON , Species . TURTONATOR , Species . GOOMY ] , Type . DRAGON ) ,
2024-02-05 20:46:45 -08:00
[ TrainerType . KATY ] : new TrainerConfig ( ++ t ) . initForGymLeader ( [ Species . NYMBLE , Species . TAROUNTULA , Species . HERACROSS ] , Type . BUG ) ,
2024-01-04 16:37:07 -08:00
[ TrainerType . BRASSIUS ] : new TrainerConfig ( ++ t ) . initForGymLeader ( [ Species . SMOLIV , Species . SHROOMISH , Species . ODDISH ] , Type . GRASS ) ,
[ TrainerType . IONO ] : new TrainerConfig ( ++ t ) . initForGymLeader ( [ Species . TADBULB , Species . WATTREL , Species . VOLTORB ] , Type . ELECTRIC ) ,
[ TrainerType . KOFU ] : new TrainerConfig ( ++ t ) . initForGymLeader ( [ Species . VELUZA , Species . WIGLETT , Species . WINGULL ] , Type . WATER ) ,
[ TrainerType . LARRY ] : new TrainerConfig ( ++ t ) . initForGymLeader ( [ Species . STARLY , Species . DUNSPARCE , Species . KOMALA ] , Type . NORMAL ) ,
[ TrainerType . RYME ] : new TrainerConfig ( ++ t ) . initForGymLeader ( [ Species . GREAVARD , Species . SHUPPET , Species . MIMIKYU ] , Type . GHOST ) ,
[ TrainerType . TULIP ] : new TrainerConfig ( ++ t ) . initForGymLeader ( [ Species . GIRAFARIG , Species . FLITTLE , Species . RALTS ] , Type . PSYCHIC ) ,
2024-02-05 20:46:45 -08:00
[ TrainerType . GRUSHA ] : new TrainerConfig ( ++ t ) . initForGymLeader ( [ Species . CETODDLE , Species . ALOLA_VULPIX , Species . CUBCHOO ] , Type . ICE ) ,
2023-12-13 21:41:35 -08:00
2024-01-04 16:37:07 -08:00
[ TrainerType . LORELEI ] : new TrainerConfig ( ( t = TrainerType . LORELEI ) ) . initForEliteFour ( [ Species . SLOWBRO , Species . LAPRAS , Species . DEWGONG , Species . ALOLA_SANDSLASH ] , Type . ICE ) ,
[ TrainerType . BRUNO ] : new TrainerConfig ( ++ t ) . initForEliteFour ( [ Species . ONIX , Species . HITMONCHAN , Species . HITMONLEE , Species . ALOLA_GOLEM ] , Type . FIGHTING ) ,
[ TrainerType . AGATHA ] : new TrainerConfig ( ++ t ) . initForEliteFour ( [ Species . GENGAR , Species . ARBOK , Species . CROBAT , Species . ALOLA_MAROWAK ] , Type . GHOST ) ,
[ TrainerType . LANCE ] : new TrainerConfig ( ++ t ) . initForEliteFour ( [ Species . DRAGONITE , Species . GYARADOS , Species . AERODACTYL , Species . ALOLA_EXEGGUTOR ] , Type . DRAGON ) ,
[ TrainerType . WILL ] : new TrainerConfig ( ++ t ) . initForEliteFour ( [ Species . XATU , Species . JYNX , Species . SLOWBRO , Species . EXEGGUTOR ] , Type . PSYCHIC ) ,
[ TrainerType . KOGA ] : new TrainerConfig ( ++ t ) . initForEliteFour ( [ Species . WEEZING , Species . VENOMOTH , Species . CROBAT , Species . TENTACRUEL ] , Type . POISON ) ,
[ TrainerType . KAREN ] : new TrainerConfig ( ++ t ) . initForEliteFour ( [ Species . UMBREON , Species . HONCHKROW , Species . HOUNDOOM , Species . WEAVILE ] , Type . DARK ) ,
[ TrainerType . SIDNEY ] : new TrainerConfig ( ++ t ) . initForEliteFour ( [ Species . SHIFTRY , Species . SHARPEDO , Species . ABSOL , Species . ZOROARK ] , Type . DARK ) ,
[ TrainerType . PHOEBE ] : new TrainerConfig ( ++ t ) . initForEliteFour ( [ Species . SABLEYE , Species . DUSKNOIR , Species . BANETTE , Species . CHANDELURE ] , Type . GHOST ) ,
[ TrainerType . GLACIA ] : new TrainerConfig ( ++ t ) . initForEliteFour ( [ Species . GLALIE , Species . WALREIN , Species . FROSLASS , Species . ABOMASNOW ] , Type . ICE ) ,
[ TrainerType . DRAKE ] : new TrainerConfig ( ++ t ) . initForEliteFour ( [ Species . ALTARIA , Species . SALAMENCE , Species . FLYGON , Species . KINGDRA ] , Type . DRAGON ) ,
[ TrainerType . AARON ] : new TrainerConfig ( ++ t ) . initForEliteFour ( [ Species . SCIZOR , Species . HERACROSS , Species . VESPIQUEN , Species . DRAPION ] , Type . BUG ) ,
[ TrainerType . BERTHA ] : new TrainerConfig ( ++ t ) . initForEliteFour ( [ Species . WHISCASH , Species . HIPPOWDON , Species . GLISCOR , Species . RHYPERIOR ] , Type . GROUND ) ,
[ TrainerType . FLINT ] : new TrainerConfig ( ++ t ) . initForEliteFour ( [ Species . FLAREON , Species . HOUNDOOM , Species . RAPIDASH , Species . INFERNAPE ] , Type . FIRE ) ,
[ TrainerType . LUCIAN ] : new TrainerConfig ( ++ t ) . initForEliteFour ( [ Species . MR_MIME , Species . GALLADE , Species . BRONZONG , Species . ALAKAZAM ] , Type . PSYCHIC ) ,
[ TrainerType . SHAUNTAL ] : new TrainerConfig ( ++ t ) . initForEliteFour ( [ Species . COFAGRIGUS , Species . CHANDELURE , Species . GOLURK , Species . DRIFBLIM ] , Type . GHOST ) ,
[ TrainerType . MARSHAL ] : new TrainerConfig ( ++ t ) . initForEliteFour ( [ Species . TIMBURR , Species . MIENFOO , Species . THROH , Species . SAWK ] , Type . FIGHTING ) ,
[ TrainerType . GRIMSLEY ] : new TrainerConfig ( ++ t ) . initForEliteFour ( [ Species . LIEPARD , Species . KINGAMBIT , Species . SCRAFTY , Species . KROOKODILE ] , Type . DARK ) ,
[ TrainerType . CAITLIN ] : new TrainerConfig ( ++ t ) . initForEliteFour ( [ Species . MUSHARNA , Species . GOTHITELLE , Species . SIGILYPH , Species . REUNICLUS ] , Type . PSYCHIC ) ,
[ TrainerType . MALVA ] : new TrainerConfig ( ++ t ) . initForEliteFour ( [ Species . PYROAR , Species . TORKOAL , Species . CHANDELURE , Species . TALONFLAME ] , Type . FIRE ) ,
[ TrainerType . SIEBOLD ] : new TrainerConfig ( ++ t ) . initForEliteFour ( [ Species . CLAWITZER , Species . GYARADOS , Species . BARBARACLE , Species . STARMIE ] , Type . WATER ) ,
[ TrainerType . WIKSTROM ] : new TrainerConfig ( ++ t ) . initForEliteFour ( [ Species . KLEFKI , Species . PROBOPASS , Species . SCIZOR , Species . AEGISLASH ] , Type . STEEL ) ,
[ TrainerType . DRASNA ] : new TrainerConfig ( ++ t ) . initForEliteFour ( [ Species . DRAGALGE , Species . DRUDDIGON , Species . ALTARIA , Species . NOIVERN ] , Type . DRAGON ) ,
[ TrainerType . HALA ] : new TrainerConfig ( ++ t ) . initForEliteFour ( [ Species . HARIYAMA , Species . BEWEAR , Species . CRABOMINABLE , Species . POLIWRATH ] , Type . FIGHTING ) ,
2024-03-30 22:15:01 -07:00
[ TrainerType . MOLAYNE ] : new TrainerConfig ( ++ t ) . initForEliteFour ( [ Species . KLEFKI , Species . MAGNEZONE , Species . METAGROSS , Species . ALOLA_DUGTRIO ] , Type . STEEL ) ,
2024-01-04 16:37:07 -08:00
[ TrainerType . OLIVIA ] : new TrainerConfig ( ++ t ) . initForEliteFour ( [ Species . ARMALDO , Species . CRADILY , Species . ALOLA_GOLEM , Species . LYCANROC ] , Type . ROCK ) ,
[ TrainerType . ACEROLA ] : new TrainerConfig ( ++ t ) . initForEliteFour ( [ Species . BANETTE , Species . DRIFBLIM , Species . DHELMISE , Species . PALOSSAND ] , Type . GHOST ) ,
[ TrainerType . KAHILI ] : new TrainerConfig ( ++ t ) . initForEliteFour ( [ Species . BRAVIARY , Species . HAWLUCHA , Species . ORICORIO , Species . TOUCANNON ] , Type . FLYING ) ,
2024-02-05 20:46:45 -08:00
[ TrainerType . RIKA ] : new TrainerConfig ( ++ t ) . initForEliteFour ( [ Species . WHISCASH , Species . DONPHAN , Species . CAMERUPT , Species . CLODSIRE ] , Type . GROUND ) ,
2024-01-04 16:37:07 -08:00
[ TrainerType . POPPY ] : new TrainerConfig ( ++ t ) . initForEliteFour ( [ Species . COPPERAJAH , Species . BRONZONG , Species . CORVIKNIGHT , Species . TINKATON ] , Type . STEEL ) ,
[ TrainerType . LARRY_ELITE ] : new TrainerConfig ( ++ t ) . initForEliteFour ( [ Species . STARAPTOR , Species . FLAMIGO , Species . ALTARIA , Species . TROPIUS ] , Type . NORMAL , Type . FLYING ) ,
[ TrainerType . HASSEL ] : new TrainerConfig ( ++ t ) . initForEliteFour ( [ Species . NOIVERN , Species . HAXORUS , Species . DRAGALGE , Species . BAXCALIBUR ] , Type . DRAGON ) ,
[ TrainerType . CRISPIN ] : new TrainerConfig ( ++ t ) . initForEliteFour ( [ Species . TALONFLAME , Species . CAMERUPT , Species . MAGMORTAR , Species . BLAZIKEN ] , Type . FIRE ) ,
[ TrainerType . AMARYS ] : new TrainerConfig ( ++ t ) . initForEliteFour ( [ Species . SKARMORY , Species . EMPOLEON , Species . SCIZOR , Species . METAGROSS ] , Type . STEEL ) ,
[ TrainerType . LACEY ] : new TrainerConfig ( ++ t ) . initForEliteFour ( [ Species . EXCADRILL , Species . PRIMARINA , Species . ALCREMIE , Species . GALAR_SLOWBRO ] , Type . FAIRY ) ,
2024-02-05 20:46:45 -08:00
[ TrainerType . DRAYTON ] : new TrainerConfig ( ++ t ) . initForEliteFour ( [ Species . DRAGONITE , Species . ARCHALUDON , Species . FLYGON , Species . SCEPTILE ] , Type . DRAGON ) ,
2024-01-04 16:37:07 -08:00
2024-03-06 15:55:55 -08:00
[ TrainerType . BLUE ] : new TrainerConfig ( ( t = TrainerType . BLUE ) ) . initForChampion ( [ Species . GYARADOS , Species . MEWTWO , Species . ARCANINE , Species . ALAKAZAM , Species . PIDGEOT ] ) . setBattleBgm ( 'battle_kanto_champion' ) ,
[ TrainerType . RED ] : new TrainerConfig ( ++ t ) . initForChampion ( [ Species . CHARIZARD , [ Species . LUGIA , Species . HO_OH ] , Species . SNORLAX , Species . RAICHU , Species . ESPEON ] ) . setBattleBgm ( 'battle_johto_champion' ) ,
2024-04-01 14:36:38 -07:00
[ TrainerType . LANCE_CHAMPION ] : new TrainerConfig ( ++ t ) . initForChampion ( [ Species . DRAGONITE , Species . ZYGARDE , Species . AERODACTYL , Species . KINGDRA , Species . ALOLA_EXEGGUTOR ] ) . setBattleBgm ( 'battle_johto_champion' ) ,
2024-03-06 15:55:55 -08:00
[ TrainerType . STEVEN ] : new TrainerConfig ( ++ t ) . initForChampion ( [ Species . METAGROSS , [ Species . DIALGA , Species . PALKIA ] , Species . SKARMORY , Species . AGGRON , Species . CARBINK ] ) . setBattleBgm ( 'battle_hoenn_champion' ) ,
[ TrainerType . WALLACE ] : new TrainerConfig ( ++ t ) . initForChampion ( [ Species . MILOTIC , Species . KYOGRE , Species . WHISCASH , Species . WALREIN , Species . LUDICOLO ] ) . setBattleBgm ( 'battle_hoenn_champion' ) ,
[ TrainerType . CYNTHIA ] : new TrainerConfig ( ++ t ) . initForChampion ( [ Species . SPIRITOMB , Species . GIRATINA , Species . GARCHOMP , Species . MILOTIC , Species . LUCARIO , Species . TOGEKISS ] ) . setBattleBgm ( 'battle_sinnoh_champion' ) ,
2024-01-04 16:37:07 -08:00
[ TrainerType . ALDER ] : new TrainerConfig ( ++ t ) . initForChampion ( [ Species . VOLCARONA , Species . GROUDON , Species . BOUFFALANT , Species . ACCELGOR , Species . CONKELDURR ] ) ,
2024-03-06 15:55:55 -08:00
[ TrainerType . IRIS ] : new TrainerConfig ( ++ t ) . initForChampion ( [ Species . HAXORUS , Species . YVELTAL , Species . DRUDDIGON , Species . ARON , Species . LAPRAS ] ) . setBattleBgm ( 'battle_champion_iris' ) ,
2024-01-04 16:37:07 -08:00
[ TrainerType . DIANTHA ] : new TrainerConfig ( ++ t ) . initForChampion ( [ Species . HAWLUCHA , Species . XERNEAS , Species . GOURGEIST , Species . GOODRA , Species . GARDEVOIR ] ) ,
2024-02-18 17:17:30 -08:00
[ TrainerType . HAU ] : new TrainerConfig ( ++ t ) . initForChampion ( [ Species . ALOLA_RAICHU , [ Species . SOLGALEO , Species . LUNALA ] , Species . NOIVERN , [ Species . DECIDUEYE , Species . INCINEROAR , Species . PRIMARINA ] , Species . CRABOMINABLE ] ) ,
2024-02-05 20:46:45 -08:00
[ TrainerType . GEETA ] : new TrainerConfig ( ++ t ) . initForChampion ( [ Species . GLIMMORA , Species . MIRAIDON , Species . ESPATHRA , Species . VELUZA , Species . KINGAMBIT ] ) ,
2024-01-04 17:28:24 -08:00
[ TrainerType . NEMONA ] : new TrainerConfig ( ++ t ) . initForChampion ( [ Species . LYCANROC , Species . KORAIDON , Species . KOMMO_O , Species . PAWMOT , Species . DUSKNOIR ] ) ,
2024-04-01 14:36:38 -07:00
[ TrainerType . KIERAN ] : new TrainerConfig ( ++ t ) . initForChampion ( [ Species . POLITOED , [ Species . OGERPON , Species . TERAPAGOS ] , Species . HYDRAPPLE , Species . PORYGON_Z , Species . GRIMMSNARL ] ) ,
[ TrainerType . LEON ] : new TrainerConfig ( ++ t ) . initForChampion ( [ Species . DRAGAPULT , [ Species . ZACIAN , Species . ZAMAZENTA ] , Species . SEISMITOAD , Species . AEGISLASH , Species . CHARIZARD ] ) ,
2023-12-13 21:41:35 -08:00
2024-02-22 15:03:36 -08:00
[ TrainerType . RIVAL ] : new TrainerConfig ( ( t = TrainerType . RIVAL ) ) . setName ( 'Finn' ) . setHasGenders ( 'Ivy' ) . setHasCharSprite ( ) . setTitle ( 'Rival' ) . setStaticParty ( ) . setEncounterBgm ( TrainerType . RIVAL ) . setBattleBgm ( 'battle_rival' ) . setPartyTemplates ( trainerPartyTemplates . RIVAL )
2024-03-27 07:20:08 -07:00
. setModifierRewardFuncs ( ( ) = > modifierTypes . SUPER_EXP_CHARM , ( ) = > modifierTypes . EXP_SHARE )
. setPartyMemberFunc ( 0 , getRandomPartyMemberFunc ( [ Species . BULBASAUR , Species . CHARMANDER , Species . SQUIRTLE , Species . CHIKORITA , Species . CYNDAQUIL , Species . TOTODILE , Species . TREECKO , Species . TORCHIC , Species . MUDKIP , Species . TURTWIG , Species . CHIMCHAR , Species . PIPLUP , Species . SNIVY , Species . TEPIG , Species . OSHAWOTT , Species . CHESPIN , Species . FENNEKIN , Species . FROAKIE , Species . ROWLET , Species . LITTEN , Species . POPPLIO , Species . GROOKEY , Species . SCORBUNNY , Species . SOBBLE , Species . SPRIGATITO , Species . FUECOCO , Species . QUAXLY ] , TrainerSlot . TRAINER , true ) )
2024-03-22 17:48:47 -07:00
. setPartyMemberFunc ( 1 , getRandomPartyMemberFunc ( [ Species . PIDGEY , Species . HOOTHOOT , Species . TAILLOW , Species . STARLY , Species . PIDOVE , Species . FLETCHLING , Species . PIKIPEK , Species . ROOKIDEE , Species . WATTREL ] , TrainerSlot . TRAINER , true ) ) ,
2024-02-22 15:03:36 -08:00
[ TrainerType . RIVAL_2 ] : new TrainerConfig ( ++ t ) . setName ( 'Finn' ) . setHasGenders ( 'Ivy' ) . setHasCharSprite ( ) . setTitle ( 'Rival' ) . setStaticParty ( ) . setMoneyMultiplier ( 1.25 ) . setEncounterBgm ( TrainerType . RIVAL ) . setBattleBgm ( 'battle_rival' ) . setPartyTemplates ( trainerPartyTemplates . RIVAL_2 )
2024-03-27 07:20:08 -07:00
. setModifierRewardFuncs ( ( ) = > modifierTypes . EXP_SHARE )
2024-03-22 17:48:47 -07:00
. setPartyMemberFunc ( 0 , getRandomPartyMemberFunc ( [ Species . IVYSAUR , Species . CHARMELEON , Species . WARTORTLE , Species . BAYLEEF , Species . QUILAVA , Species . CROCONAW , Species . GROVYLE , Species . COMBUSKEN , Species . MARSHTOMP , Species . GROTLE , Species . MONFERNO , Species . PRINPLUP , Species . SERVINE , Species . PIGNITE , Species . DEWOTT , Species . QUILLADIN , Species . BRAIXEN , Species . FROGADIER , Species . DARTRIX , Species . TORRACAT , Species . BRIONNE , Species . THWACKEY , Species . RABOOT , Species . DRIZZILE , Species . FLORAGATO , Species . CROCALOR , Species . QUAXWELL ] , TrainerSlot . TRAINER , true ) )
. setPartyMemberFunc ( 1 , getRandomPartyMemberFunc ( [ Species . PIDGEOTTO , Species . HOOTHOOT , Species . TAILLOW , Species . STARAVIA , Species . TRANQUILL , Species . FLETCHINDER , Species . TRUMBEAK , Species . CORVISQUIRE , Species . WATTREL ] , TrainerSlot . TRAINER , true ) )
2023-10-18 15:01:15 -07:00
. setPartyMemberFunc ( 2 , getSpeciesFilterRandomPartyMemberFunc ( ( species : PokemonSpecies ) = > ! pokemonEvolutions . hasOwnProperty ( species . speciesId ) && ! pokemonPrevolutions . hasOwnProperty ( species . speciesId ) && species . baseTotal >= 450 ) ) ,
2024-02-22 15:03:36 -08:00
[ TrainerType . RIVAL_3 ] : new TrainerConfig ( ++ t ) . setName ( 'Finn' ) . setHasGenders ( 'Ivy' ) . setHasCharSprite ( ) . setTitle ( 'Rival' ) . setStaticParty ( ) . setMoneyMultiplier ( 1.5 ) . setEncounterBgm ( TrainerType . RIVAL ) . setBattleBgm ( 'battle_rival' ) . setPartyTemplates ( trainerPartyTemplates . RIVAL_3 )
2024-03-22 17:48:47 -07:00
. setPartyMemberFunc ( 0 , getRandomPartyMemberFunc ( [ Species . VENUSAUR , Species . CHARIZARD , Species . BLASTOISE , Species . MEGANIUM , Species . TYPHLOSION , Species . FERALIGATR , Species . SCEPTILE , Species . BLAZIKEN , Species . SWAMPERT , Species . TORTERRA , Species . INFERNAPE , Species . EMPOLEON , Species . SERPERIOR , Species . EMBOAR , Species . SAMUROTT , Species . CHESNAUGHT , Species . DELPHOX , Species . GRENINJA , Species . DECIDUEYE , Species . INCINEROAR , Species . PRIMARINA , Species . RILLABOOM , Species . CINDERACE , Species . INTELEON , Species . MEOWSCARADA , Species . SKELEDIRGE , Species . QUAQUAVAL ] , TrainerSlot . TRAINER , true ) )
. setPartyMemberFunc ( 1 , getRandomPartyMemberFunc ( [ Species . PIDGEOT , Species . NOCTOWL , Species . SWELLOW , Species . STARAPTOR , Species . UNFEZANT , Species . TALONFLAME , Species . TOUCANNON , Species . CORVIKNIGHT , Species . KILOWATTREL ] , TrainerSlot . TRAINER , true ) )
2023-10-18 15:01:15 -07:00
. setPartyMemberFunc ( 2 , getSpeciesFilterRandomPartyMemberFunc ( ( species : PokemonSpecies ) = > ! pokemonEvolutions . hasOwnProperty ( species . speciesId ) && ! pokemonPrevolutions . hasOwnProperty ( species . speciesId ) && species . baseTotal >= 450 ) )
. setSpeciesFilter ( species = > species . baseTotal >= 540 ) ,
2024-02-22 15:03:36 -08:00
[ TrainerType . RIVAL_4 ] : new TrainerConfig ( ++ t ) . setName ( 'Finn' ) . setHasGenders ( 'Ivy' ) . setHasCharSprite ( ) . setTitle ( 'Rival' ) . setBoss ( ) . setStaticParty ( ) . setMoneyMultiplier ( 1.75 ) . setEncounterBgm ( TrainerType . RIVAL ) . setBattleBgm ( 'battle_rival_2' ) . setPartyTemplates ( trainerPartyTemplates . RIVAL_4 )
2024-03-22 17:48:47 -07:00
. setPartyMemberFunc ( 0 , getRandomPartyMemberFunc ( [ Species . VENUSAUR , Species . CHARIZARD , Species . BLASTOISE , Species . MEGANIUM , Species . TYPHLOSION , Species . FERALIGATR , Species . SCEPTILE , Species . BLAZIKEN , Species . SWAMPERT , Species . TORTERRA , Species . INFERNAPE , Species . EMPOLEON , Species . SERPERIOR , Species . EMBOAR , Species . SAMUROTT , Species . CHESNAUGHT , Species . DELPHOX , Species . GRENINJA , Species . DECIDUEYE , Species . INCINEROAR , Species . PRIMARINA , Species . RILLABOOM , Species . CINDERACE , Species . INTELEON , Species . MEOWSCARADA , Species . SKELEDIRGE , Species . QUAQUAVAL ] , TrainerSlot . TRAINER , true ) )
. setPartyMemberFunc ( 1 , getRandomPartyMemberFunc ( [ Species . PIDGEOT , Species . NOCTOWL , Species . SWELLOW , Species . STARAPTOR , Species . UNFEZANT , Species . TALONFLAME , Species . TOUCANNON , Species . CORVIKNIGHT , Species . KILOWATTREL ] , TrainerSlot . TRAINER , true ) )
2023-10-18 15:01:15 -07:00
. setPartyMemberFunc ( 2 , getSpeciesFilterRandomPartyMemberFunc ( ( species : PokemonSpecies ) = > ! pokemonEvolutions . hasOwnProperty ( species . speciesId ) && ! pokemonPrevolutions . hasOwnProperty ( species . speciesId ) && species . baseTotal >= 450 ) )
2024-02-16 21:40:03 -08:00
. setSpeciesFilter ( species = > species . baseTotal >= 540 )
. setGenModifiersFunc ( party = > {
const starter = party [ 0 ] ;
return [ modifierTypes . TERA_SHARD ( ) . generateType ( null , [ starter . species . type1 ] ) . withIdFromFunc ( modifierTypes . TERA_SHARD ) . newModifier ( starter ) as PersistentModifier ] ;
} ) ,
2024-02-22 15:03:36 -08:00
[ TrainerType . RIVAL_5 ] : new TrainerConfig ( ++ t ) . setName ( 'Finn' ) . setHasGenders ( 'Ivy' ) . setHasCharSprite ( ) . setTitle ( 'Rival' ) . setBoss ( ) . setStaticParty ( ) . setMoneyMultiplier ( 2.25 ) . setEncounterBgm ( TrainerType . RIVAL ) . setBattleBgm ( 'battle_rival_3' ) . setPartyTemplates ( trainerPartyTemplates . RIVAL_5 )
2024-03-28 11:05:15 -07:00
. setPartyMemberFunc ( 0 , getRandomPartyMemberFunc ( [ Species . VENUSAUR , Species . CHARIZARD , Species . BLASTOISE , Species . MEGANIUM , Species . TYPHLOSION , Species . FERALIGATR , Species . SCEPTILE , Species . BLAZIKEN , Species . SWAMPERT , Species . TORTERRA , Species . INFERNAPE , Species . EMPOLEON , Species . SERPERIOR , Species . EMBOAR , Species . SAMUROTT , Species . CHESNAUGHT , Species . DELPHOX , Species . GRENINJA , Species . DECIDUEYE , Species . INCINEROAR , Species . PRIMARINA , Species . RILLABOOM , Species . CINDERACE , Species . INTELEON , Species . MEOWSCARADA , Species . SKELEDIRGE , Species . QUAQUAVAL ] , TrainerSlot . TRAINER , true ,
p = > p . setBoss ( true , 2 ) ) )
2024-03-22 17:48:47 -07:00
. setPartyMemberFunc ( 1 , getRandomPartyMemberFunc ( [ Species . PIDGEOT , Species . NOCTOWL , Species . SWELLOW , Species . STARAPTOR , Species . UNFEZANT , Species . TALONFLAME , Species . TOUCANNON , Species . CORVIKNIGHT , Species . KILOWATTREL ] , TrainerSlot . TRAINER , true ) )
2023-10-18 15:01:15 -07:00
. setPartyMemberFunc ( 2 , getSpeciesFilterRandomPartyMemberFunc ( ( species : PokemonSpecies ) = > ! pokemonEvolutions . hasOwnProperty ( species . speciesId ) && ! pokemonPrevolutions . hasOwnProperty ( species . speciesId ) && species . baseTotal >= 450 ) )
. setSpeciesFilter ( species = > species . baseTotal >= 540 )
2024-03-22 17:48:47 -07:00
. setPartyMemberFunc ( 5 , getRandomPartyMemberFunc ( [ Species . RAYQUAZA ] , TrainerSlot . TRAINER , true , p = > {
2024-03-28 11:05:15 -07:00
p . setBoss ( true , 3 ) ;
2024-01-07 20:17:24 -08:00
p . pokeball = PokeballType . MASTER_BALL ;
2024-04-18 19:52:26 -07:00
p . shiny = true ;
p . variant = 1 ;
2024-02-16 21:40:03 -08:00
} ) )
. setGenModifiersFunc ( party = > {
const starter = party [ 0 ] ;
return [ modifierTypes . TERA_SHARD ( ) . generateType ( null , [ starter . species . type1 ] ) . withIdFromFunc ( modifierTypes . TERA_SHARD ) . newModifier ( starter ) as PersistentModifier ] ;
} ) ,
2024-02-22 15:03:36 -08:00
[ TrainerType . RIVAL_6 ] : new TrainerConfig ( ++ t ) . setName ( 'Finn' ) . setHasGenders ( 'Ivy' ) . setHasCharSprite ( ) . setTitle ( 'Rival' ) . setBoss ( ) . setStaticParty ( ) . setMoneyMultiplier ( 3 ) . setEncounterBgm ( 'final' ) . setBattleBgm ( 'battle_rival_3' ) . setPartyTemplates ( trainerPartyTemplates . RIVAL_6 )
2024-03-28 11:05:15 -07:00
. setPartyMemberFunc ( 0 , getRandomPartyMemberFunc ( [ Species . VENUSAUR , Species . CHARIZARD , Species . BLASTOISE , Species . MEGANIUM , Species . TYPHLOSION , Species . FERALIGATR , Species . SCEPTILE , Species . BLAZIKEN , Species . SWAMPERT , Species . TORTERRA , Species . INFERNAPE , Species . EMPOLEON , Species . SERPERIOR , Species . EMBOAR , Species . SAMUROTT , Species . CHESNAUGHT , Species . DELPHOX , Species . GRENINJA , Species . DECIDUEYE , Species . INCINEROAR , Species . PRIMARINA , Species . RILLABOOM , Species . CINDERACE , Species . INTELEON , Species . MEOWSCARADA , Species . SKELEDIRGE , Species . QUAQUAVAL ] , TrainerSlot . TRAINER , true ,
p = > p . setBoss ( true , 3 ) )
)
. setPartyMemberFunc ( 1 , getRandomPartyMemberFunc ( [ Species . PIDGEOT , Species . NOCTOWL , Species . SWELLOW , Species . STARAPTOR , Species . UNFEZANT , Species . TALONFLAME , Species . TOUCANNON , Species . CORVIKNIGHT , Species . KILOWATTREL ] , TrainerSlot . TRAINER , true ,
p = > p . setBoss ( true , 2 ) ) )
2023-10-18 15:01:15 -07:00
. setPartyMemberFunc ( 2 , getSpeciesFilterRandomPartyMemberFunc ( ( species : PokemonSpecies ) = > ! pokemonEvolutions . hasOwnProperty ( species . speciesId ) && ! pokemonPrevolutions . hasOwnProperty ( species . speciesId ) && species . baseTotal >= 450 ) )
. setSpeciesFilter ( species = > species . baseTotal >= 540 )
2024-03-22 17:48:47 -07:00
. setPartyMemberFunc ( 5 , getRandomPartyMemberFunc ( [ Species . RAYQUAZA ] , TrainerSlot . TRAINER , true , p = > {
2024-01-07 20:17:24 -08:00
p . setBoss ( ) ;
p . pokeball = PokeballType . MASTER_BALL ;
2024-04-18 19:52:26 -07:00
p . shiny = true ;
p . variant = 1 ;
2024-01-07 20:17:24 -08:00
p . formIndex = 1 ;
2024-02-16 21:40:03 -08:00
} ) )
. setGenModifiersFunc ( party = > {
const starter = party [ 0 ] ;
return [ modifierTypes . TERA_SHARD ( ) . generateType ( null , [ starter . species . type1 ] ) . withIdFromFunc ( modifierTypes . TERA_SHARD ) . newModifier ( starter ) as PersistentModifier ] ;
} ) ,
2024-01-13 09:24:24 -08:00
} ;
( function ( ) {
initTrainerTypeDialogue ( ) ;
} ) ( ) ;