Add more trainer types to biomes

This makes the Hooligans, Musician, Pilot, Poké Fan, Rich, and Rich Kid trainer types able to be battled.
This commit is contained in:
Madmadness65 2025-03-14 15:37:18 -05:00
parent e8e0041ed0
commit 9256dfbfa4
2 changed files with 87 additions and 31 deletions

View File

@ -1659,7 +1659,7 @@ export const biomeTrainerPools: BiomeTrainerPools = {
}, },
[Biome.GRASS]: { [Biome.GRASS]: {
[BiomePoolTier.COMMON]: [ TrainerType.BREEDER, TrainerType.SCHOOL_KID ], [BiomePoolTier.COMMON]: [ TrainerType.BREEDER, TrainerType.SCHOOL_KID ],
[BiomePoolTier.UNCOMMON]: [ TrainerType.ACE_TRAINER ], [BiomePoolTier.UNCOMMON]: [ TrainerType.ACE_TRAINER, TrainerType.POKEFAN ],
[BiomePoolTier.RARE]: [ TrainerType.BLACK_BELT ], [BiomePoolTier.RARE]: [ TrainerType.BLACK_BELT ],
[BiomePoolTier.SUPER_RARE]: [], [BiomePoolTier.SUPER_RARE]: [],
[BiomePoolTier.ULTRA_RARE]: [], [BiomePoolTier.ULTRA_RARE]: [],
@ -1682,7 +1682,7 @@ export const biomeTrainerPools: BiomeTrainerPools = {
[Biome.METROPOLIS]: { [Biome.METROPOLIS]: {
[BiomePoolTier.COMMON]: [ TrainerType.CLERK, TrainerType.CYCLIST, TrainerType.OFFICER, TrainerType.WAITER ], [BiomePoolTier.COMMON]: [ TrainerType.CLERK, TrainerType.CYCLIST, TrainerType.OFFICER, TrainerType.WAITER ],
[BiomePoolTier.UNCOMMON]: [ TrainerType.BREEDER, TrainerType.DEPOT_AGENT, TrainerType.GUITARIST ], [BiomePoolTier.UNCOMMON]: [ TrainerType.BREEDER, TrainerType.DEPOT_AGENT, TrainerType.GUITARIST ],
[BiomePoolTier.RARE]: [ TrainerType.ARTIST ], [BiomePoolTier.RARE]: [ TrainerType.ARTIST, TrainerType.RICH_KID ],
[BiomePoolTier.SUPER_RARE]: [], [BiomePoolTier.SUPER_RARE]: [],
[BiomePoolTier.ULTRA_RARE]: [], [BiomePoolTier.ULTRA_RARE]: [],
[BiomePoolTier.BOSS]: [ TrainerType.WHITNEY, TrainerType.NORMAN, TrainerType.IONO, TrainerType.LARRY ], [BiomePoolTier.BOSS]: [ TrainerType.WHITNEY, TrainerType.NORMAN, TrainerType.IONO, TrainerType.LARRY ],
@ -1702,7 +1702,7 @@ export const biomeTrainerPools: BiomeTrainerPools = {
[BiomePoolTier.BOSS_ULTRA_RARE]: [] [BiomePoolTier.BOSS_ULTRA_RARE]: []
}, },
[Biome.SEA]: { [Biome.SEA]: {
[BiomePoolTier.COMMON]: [ TrainerType.SWIMMER, TrainerType.SAILOR ], [BiomePoolTier.COMMON]: [ TrainerType.SAILOR, TrainerType.SWIMMER ],
[BiomePoolTier.UNCOMMON]: [], [BiomePoolTier.UNCOMMON]: [],
[BiomePoolTier.RARE]: [], [BiomePoolTier.RARE]: [],
[BiomePoolTier.SUPER_RARE]: [], [BiomePoolTier.SUPER_RARE]: [],
@ -1758,7 +1758,7 @@ export const biomeTrainerPools: BiomeTrainerPools = {
}, },
[Biome.MOUNTAIN]: { [Biome.MOUNTAIN]: {
[BiomePoolTier.COMMON]: [ TrainerType.BACKPACKER, TrainerType.BLACK_BELT, TrainerType.HIKER ], [BiomePoolTier.COMMON]: [ TrainerType.BACKPACKER, TrainerType.BLACK_BELT, TrainerType.HIKER ],
[BiomePoolTier.UNCOMMON]: [ TrainerType.ACE_TRAINER ], [BiomePoolTier.UNCOMMON]: [ TrainerType.ACE_TRAINER, TrainerType.PILOT ],
[BiomePoolTier.RARE]: [], [BiomePoolTier.RARE]: [],
[BiomePoolTier.SUPER_RARE]: [], [BiomePoolTier.SUPER_RARE]: [],
[BiomePoolTier.ULTRA_RARE]: [], [BiomePoolTier.ULTRA_RARE]: [],
@ -1812,8 +1812,8 @@ export const biomeTrainerPools: BiomeTrainerPools = {
[BiomePoolTier.BOSS_ULTRA_RARE]: [] [BiomePoolTier.BOSS_ULTRA_RARE]: []
}, },
[Biome.MEADOW]: { [Biome.MEADOW]: {
[BiomePoolTier.COMMON]: [ TrainerType.PARASOL_LADY ], [BiomePoolTier.COMMON]: [ TrainerType.MUSICIAN, TrainerType.PARASOL_LADY ],
[BiomePoolTier.UNCOMMON]: [ TrainerType.ACE_TRAINER, TrainerType.BREEDER ], [BiomePoolTier.UNCOMMON]: [ TrainerType.ACE_TRAINER, TrainerType.BREEDER, TrainerType.POKEFAN ],
[BiomePoolTier.RARE]: [], [BiomePoolTier.RARE]: [],
[BiomePoolTier.SUPER_RARE]: [], [BiomePoolTier.SUPER_RARE]: [],
[BiomePoolTier.ULTRA_RARE]: [], [BiomePoolTier.ULTRA_RARE]: [],
@ -1967,7 +1967,7 @@ export const biomeTrainerPools: BiomeTrainerPools = {
}, },
[Biome.SLUM]: { [Biome.SLUM]: {
[BiomePoolTier.COMMON]: [ TrainerType.BIKER, TrainerType.OFFICER, TrainerType.ROUGHNECK ], [BiomePoolTier.COMMON]: [ TrainerType.BIKER, TrainerType.OFFICER, TrainerType.ROUGHNECK ],
[BiomePoolTier.UNCOMMON]: [ TrainerType.BAKER ], [BiomePoolTier.UNCOMMON]: [ TrainerType.BAKER, TrainerType.HOOLIGANS ],
[BiomePoolTier.RARE]: [], [BiomePoolTier.RARE]: [],
[BiomePoolTier.SUPER_RARE]: [], [BiomePoolTier.SUPER_RARE]: [],
[BiomePoolTier.ULTRA_RARE]: [], [BiomePoolTier.ULTRA_RARE]: [],
@ -1988,8 +1988,8 @@ export const biomeTrainerPools: BiomeTrainerPools = {
[BiomePoolTier.BOSS_ULTRA_RARE]: [] [BiomePoolTier.BOSS_ULTRA_RARE]: []
}, },
[Biome.ISLAND]: { [Biome.ISLAND]: {
[BiomePoolTier.COMMON]: [], [BiomePoolTier.COMMON]: [ TrainerType.RICH_KID ],
[BiomePoolTier.UNCOMMON]: [], [BiomePoolTier.UNCOMMON]: [ TrainerType.RICH ],
[BiomePoolTier.RARE]: [], [BiomePoolTier.RARE]: [],
[BiomePoolTier.SUPER_RARE]: [], [BiomePoolTier.SUPER_RARE]: [],
[BiomePoolTier.ULTRA_RARE]: [], [BiomePoolTier.ULTRA_RARE]: [],
@ -7215,12 +7215,15 @@ export function initBiomes() {
[ Biome.METROPOLIS, BiomePoolTier.UNCOMMON ] [ Biome.METROPOLIS, BiomePoolTier.UNCOMMON ]
]], ]],
[ TrainerType.DOCTOR, []], [ TrainerType.DOCTOR, []],
[ TrainerType.FIREBREATHER, [
[ Biome.VOLCANO, BiomePoolTier.COMMON ]
]
],
[ TrainerType.FISHERMAN, [ [ TrainerType.FISHERMAN, [
[ Biome.LAKE, BiomePoolTier.COMMON ], [ Biome.LAKE, BiomePoolTier.COMMON ],
[ Biome.BEACH, BiomePoolTier.COMMON ] [ Biome.BEACH, BiomePoolTier.COMMON ]
] ]
], ],
[ TrainerType.RICH, []],
[ TrainerType.GUITARIST, [ [ TrainerType.GUITARIST, [
[ Biome.METROPOLIS, BiomePoolTier.UNCOMMON ], [ Biome.METROPOLIS, BiomePoolTier.UNCOMMON ],
[ Biome.POWER_PLANT, BiomePoolTier.COMMON ] [ Biome.POWER_PLANT, BiomePoolTier.COMMON ]
@ -7232,13 +7235,23 @@ export function initBiomes() {
[ Biome.BADLANDS, BiomePoolTier.COMMON ] [ Biome.BADLANDS, BiomePoolTier.COMMON ]
] ]
], ],
[ TrainerType.HOOLIGANS, []], [ TrainerType.HOOLIGANS, [
[ Biome.SLUM, BiomePoolTier.UNCOMMON ]
]
],
[ TrainerType.HOOPSTER, []], [ TrainerType.HOOPSTER, []],
[ TrainerType.INFIELDER, []], [ TrainerType.INFIELDER, []],
[ TrainerType.JANITOR, []], [ TrainerType.JANITOR, []],
[ TrainerType.LINEBACKER, []], [ TrainerType.LINEBACKER, []],
[ TrainerType.MAID, []], [ TrainerType.MAID, []],
[ TrainerType.MUSICIAN, []], [ TrainerType.MUSICIAN, [
[ Biome.MEADOW, BiomePoolTier.COMMON ]
]
],
[ TrainerType.HEX_MANIAC, [
[ Biome.GRAVEYARD, BiomePoolTier.UNCOMMON ]
]
],
[ TrainerType.NURSERY_AIDE, []], [ TrainerType.NURSERY_AIDE, []],
[ TrainerType.OFFICER, [ [ TrainerType.OFFICER, [
[ Biome.METROPOLIS, BiomePoolTier.COMMON ], [ Biome.METROPOLIS, BiomePoolTier.COMMON ],
@ -7251,8 +7264,15 @@ export function initBiomes() {
[ Biome.MEADOW, BiomePoolTier.COMMON ] [ Biome.MEADOW, BiomePoolTier.COMMON ]
] ]
], ],
[ TrainerType.PILOT, []], [ TrainerType.PILOT, [
[ TrainerType.POKEFAN, []], [ Biome.MOUNTAIN, BiomePoolTier.UNCOMMON ]
]
],
[ TrainerType.POKEFAN, [
[ Biome.GRASS, BiomePoolTier.UNCOMMON ],
[ Biome.MEADOW, BiomePoolTier.UNCOMMON ]
]
],
[ TrainerType.PRESCHOOLER, []], [ TrainerType.PRESCHOOLER, []],
[ TrainerType.PSYCHIC, [ [ TrainerType.PSYCHIC, [
[ Biome.GRAVEYARD, BiomePoolTier.COMMON ], [ Biome.GRAVEYARD, BiomePoolTier.COMMON ],
@ -7265,11 +7285,24 @@ export function initBiomes() {
[ Biome.JUNGLE, BiomePoolTier.COMMON ] [ Biome.JUNGLE, BiomePoolTier.COMMON ]
] ]
], ],
[ TrainerType.RICH_KID, []], [ TrainerType.RICH, [
[ Biome.ISLAND, BiomePoolTier.UNCOMMON ]
]
],
[ TrainerType.RICH_KID, [
[ Biome.METROPOLIS, BiomePoolTier.RARE ],
[ Biome.ISLAND, BiomePoolTier.COMMON ]
]
],
[ TrainerType.ROUGHNECK, [ [ TrainerType.ROUGHNECK, [
[ Biome.SLUM, BiomePoolTier.COMMON ] [ Biome.SLUM, BiomePoolTier.COMMON ]
] ]
], ],
[ TrainerType.SAILOR, [
[ Biome.SEA, BiomePoolTier.COMMON ],
[ Biome.BEACH, BiomePoolTier.COMMON ]
]
],
[ TrainerType.SCIENTIST, [ [ TrainerType.SCIENTIST, [
[ Biome.DESERT, BiomePoolTier.COMMON ], [ Biome.DESERT, BiomePoolTier.COMMON ],
[ Biome.RUINS, BiomePoolTier.COMMON ] [ Biome.RUINS, BiomePoolTier.COMMON ]
@ -7312,19 +7345,6 @@ export function initBiomes() {
[ Biome.TOWN, BiomePoolTier.COMMON ] [ Biome.TOWN, BiomePoolTier.COMMON ]
] ]
], ],
[ TrainerType.HEX_MANIAC, [
[ Biome.GRAVEYARD, BiomePoolTier.UNCOMMON ]
]
],
[ TrainerType.FIREBREATHER, [
[ Biome.VOLCANO, BiomePoolTier.COMMON ]
]
],
[ TrainerType.SAILOR, [
[ Biome.SEA, BiomePoolTier.COMMON ],
[ Biome.BEACH, BiomePoolTier.COMMON ]
]
],
[ TrainerType.BROCK, [ [ TrainerType.BROCK, [
[ Biome.CAVE, BiomePoolTier.BOSS ] [ Biome.CAVE, BiomePoolTier.BOSS ]
] ]

View File

@ -2195,7 +2195,15 @@ export const trainerConfigs: TrainerConfigs = {
}), }),
[TrainerType.HOOLIGANS]: new TrainerConfig(++t) [TrainerType.HOOLIGANS]: new TrainerConfig(++t)
.setDoubleOnly() .setDoubleOnly()
.setMoneyMultiplier(1.5)
.setEncounterBgm(TrainerType.ROUGHNECK) .setEncounterBgm(TrainerType.ROUGHNECK)
.setPartyTemplateFunc(() =>
getWavePartyTemplate(
trainerPartyTemplates.TWO_WEAK,
trainerPartyTemplates.TWO_AVG,
trainerPartyTemplates.ONE_AVG_ONE_STRONG,
),
)
.setSpeciesFilter(s => s.isOfType(PokemonType.POISON) || s.isOfType(PokemonType.DARK)), .setSpeciesFilter(s => s.isOfType(PokemonType.POISON) || s.isOfType(PokemonType.DARK)),
[TrainerType.HOOPSTER]: new TrainerConfig(++t).setMoneyMultiplier(1.2).setEncounterBgm(TrainerType.CYCLIST), [TrainerType.HOOPSTER]: new TrainerConfig(++t).setMoneyMultiplier(1.2).setEncounterBgm(TrainerType.CYCLIST),
[TrainerType.INFIELDER]: new TrainerConfig(++t).setMoneyMultiplier(1.2).setEncounterBgm(TrainerType.CYCLIST), [TrainerType.INFIELDER]: new TrainerConfig(++t).setMoneyMultiplier(1.2).setEncounterBgm(TrainerType.CYCLIST),
@ -2203,7 +2211,14 @@ export const trainerConfigs: TrainerConfigs = {
[TrainerType.LINEBACKER]: new TrainerConfig(++t).setMoneyMultiplier(1.2).setEncounterBgm(TrainerType.CYCLIST), [TrainerType.LINEBACKER]: new TrainerConfig(++t).setMoneyMultiplier(1.2).setEncounterBgm(TrainerType.CYCLIST),
[TrainerType.MAID]: new TrainerConfig(++t).setMoneyMultiplier(1.6).setEncounterBgm(TrainerType.RICH), [TrainerType.MAID]: new TrainerConfig(++t).setMoneyMultiplier(1.6).setEncounterBgm(TrainerType.RICH),
[TrainerType.MUSICIAN]: new TrainerConfig(++t) [TrainerType.MUSICIAN]: new TrainerConfig(++t)
.setMoneyMultiplier(1.1)
.setEncounterBgm(TrainerType.ROUGHNECK) .setEncounterBgm(TrainerType.ROUGHNECK)
.setPartyTemplates(
trainerPartyTemplates.FOUR_WEAKER,
trainerPartyTemplates.THREE_WEAK,
trainerPartyTemplates.TWO_WEAK_ONE_AVG,
trainerPartyTemplates.TWO_AVG,
)
.setSpeciesFilter(s => !!s.getLevelMoves().find(plm => plm[1] === Moves.SING)), .setSpeciesFilter(s => !!s.getLevelMoves().find(plm => plm[1] === Moves.SING)),
[TrainerType.HEX_MANIAC]: new TrainerConfig(++t) [TrainerType.HEX_MANIAC]: new TrainerConfig(++t)
.setMoneyMultiplier(1.5) .setMoneyMultiplier(1.5)
@ -2247,7 +2262,14 @@ export const trainerConfigs: TrainerConfigs = {
.setEncounterBgm(TrainerType.PARASOL_LADY) .setEncounterBgm(TrainerType.PARASOL_LADY)
.setSpeciesFilter(s => s.isOfType(PokemonType.WATER)), .setSpeciesFilter(s => s.isOfType(PokemonType.WATER)),
[TrainerType.PILOT]: new TrainerConfig(++t) [TrainerType.PILOT]: new TrainerConfig(++t)
.setMoneyMultiplier(1.75)
.setEncounterBgm(TrainerType.CLERK) .setEncounterBgm(TrainerType.CLERK)
.setPartyTemplates(
trainerPartyTemplates.THREE_WEAK,
trainerPartyTemplates.TWO_WEAK_ONE_AVG,
trainerPartyTemplates.TWO_AVG,
trainerPartyTemplates.THREE_AVG,
)
.setSpeciesFilter(s => tmSpecies[Moves.FLY].indexOf(s.speciesId) > -1), .setSpeciesFilter(s => tmSpecies[Moves.FLY].indexOf(s.speciesId) > -1),
[TrainerType.POKEFAN]: new TrainerConfig(++t) [TrainerType.POKEFAN]: new TrainerConfig(++t)
.setMoneyMultiplier(1.4) .setMoneyMultiplier(1.4)
@ -2263,7 +2285,8 @@ export const trainerConfigs: TrainerConfigs = {
trainerPartyTemplates.FOUR_WEAK_SAME, trainerPartyTemplates.FOUR_WEAK_SAME,
trainerPartyTemplates.FIVE_WEAK, trainerPartyTemplates.FIVE_WEAK,
trainerPartyTemplates.SIX_WEAKER_SAME, trainerPartyTemplates.SIX_WEAKER_SAME,
), )
.setSpeciesFilter(s => tmSpecies[Moves.HELPING_HAND].indexOf(s.speciesId) > -1),
[TrainerType.PRESCHOOLER]: new TrainerConfig(++t) [TrainerType.PRESCHOOLER]: new TrainerConfig(++t)
.setMoneyMultiplier(0.2) .setMoneyMultiplier(0.2)
.setEncounterBgm(TrainerType.YOUNGSTER) .setEncounterBgm(TrainerType.YOUNGSTER)
@ -2388,13 +2411,26 @@ export const trainerConfigs: TrainerConfigs = {
.setMoneyMultiplier(5) .setMoneyMultiplier(5)
.setName("Gentleman") .setName("Gentleman")
.setHasGenders("Madame") .setHasGenders("Madame")
.setHasDouble("Rich Couple"), .setHasDouble("Rich Couple")
.setPartyTemplates(
trainerPartyTemplates.THREE_WEAK,
trainerPartyTemplates.FOUR_WEAK,
trainerPartyTemplates.TWO_WEAK_ONE_AVG,
trainerPartyTemplates.THREE_AVG,
)
.setSpeciesFilter(s => s.isOfType(PokemonType.NORMAL) || s.isOfType(PokemonType.ELECTRIC)),
[TrainerType.RICH_KID]: new TrainerConfig(++t) [TrainerType.RICH_KID]: new TrainerConfig(++t)
.setMoneyMultiplier(3.75) .setMoneyMultiplier(3.75)
.setName("Rich Boy") .setName("Rich Boy")
.setHasGenders("Lady") .setHasGenders("Lady")
.setHasDouble("Rich Kids") .setHasDouble("Rich Kids")
.setEncounterBgm(TrainerType.RICH), .setEncounterBgm(TrainerType.RICH)
.setPartyTemplates(
trainerPartyTemplates.FOUR_WEAKER,
trainerPartyTemplates.THREE_WEAK_SAME,
trainerPartyTemplates.TWO_WEAK_SAME_ONE_AVG,
)
.setSpeciesFilter(s => s.baseTotal <= 460),
[TrainerType.ROUGHNECK]: new TrainerConfig(++t) [TrainerType.ROUGHNECK]: new TrainerConfig(++t)
.setMoneyMultiplier(1.4) .setMoneyMultiplier(1.4)
.setEncounterBgm(TrainerType.ROUGHNECK) .setEncounterBgm(TrainerType.ROUGHNECK)