Changes to Biker, Baker, Beauty, Cyclist, Parasol Lady, Hex Maniac

This commit is contained in:
AJ Fontaine 2025-03-11 12:06:01 -04:00
parent b298138157
commit 19bb162aad
2 changed files with 102 additions and 19 deletions

View File

@ -1680,7 +1680,7 @@ export const biomeTrainerPools: BiomeTrainerPools = {
[BiomePoolTier.BOSS_ULTRA_RARE]: [] [BiomePoolTier.BOSS_ULTRA_RARE]: []
}, },
[Biome.METROPOLIS]: { [Biome.METROPOLIS]: {
[BiomePoolTier.COMMON]: [ TrainerType.CLERK, TrainerType.CYCLIST, TrainerType.OFFICER, TrainerType.WAITER ], [BiomePoolTier.COMMON]: [ TrainerType.CLERK, TrainerType.CYCLIST, TrainerType.OFFICER, TrainerType.WAITER, TrainerType.BEAUTY ],
[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 ],
[BiomePoolTier.SUPER_RARE]: [], [BiomePoolTier.SUPER_RARE]: [],
@ -1713,7 +1713,7 @@ export const biomeTrainerPools: BiomeTrainerPools = {
[BiomePoolTier.BOSS_ULTRA_RARE]: [] [BiomePoolTier.BOSS_ULTRA_RARE]: []
}, },
[Biome.SWAMP]: { [Biome.SWAMP]: {
[BiomePoolTier.COMMON]: [], [BiomePoolTier.COMMON]: [ TrainerType.PARASOL_LADY ],
[BiomePoolTier.UNCOMMON]: [ TrainerType.ACE_TRAINER ], [BiomePoolTier.UNCOMMON]: [ TrainerType.ACE_TRAINER ],
[BiomePoolTier.RARE]: [ TrainerType.BLACK_BELT ], [BiomePoolTier.RARE]: [ TrainerType.BLACK_BELT ],
[BiomePoolTier.SUPER_RARE]: [], [BiomePoolTier.SUPER_RARE]: [],
@ -1724,7 +1724,7 @@ export const biomeTrainerPools: BiomeTrainerPools = {
[BiomePoolTier.BOSS_ULTRA_RARE]: [] [BiomePoolTier.BOSS_ULTRA_RARE]: []
}, },
[Biome.BEACH]: { [Biome.BEACH]: {
[BiomePoolTier.COMMON]: [ TrainerType.FISHERMAN, TrainerType.PARASOL_LADY, TrainerType.SAILOR ], [BiomePoolTier.COMMON]: [ TrainerType.FISHERMAN, TrainerType.SAILOR ],
[BiomePoolTier.UNCOMMON]: [ TrainerType.ACE_TRAINER, TrainerType.BREEDER ], [BiomePoolTier.UNCOMMON]: [ TrainerType.ACE_TRAINER, TrainerType.BREEDER ],
[BiomePoolTier.RARE]: [ TrainerType.BLACK_BELT ], [BiomePoolTier.RARE]: [ TrainerType.BLACK_BELT ],
[BiomePoolTier.SUPER_RARE]: [], [BiomePoolTier.SUPER_RARE]: [],
@ -1735,7 +1735,7 @@ export const biomeTrainerPools: BiomeTrainerPools = {
[BiomePoolTier.BOSS_ULTRA_RARE]: [] [BiomePoolTier.BOSS_ULTRA_RARE]: []
}, },
[Biome.LAKE]: { [Biome.LAKE]: {
[BiomePoolTier.COMMON]: [ TrainerType.BREEDER, TrainerType.FISHERMAN ], [BiomePoolTier.COMMON]: [ TrainerType.BREEDER, TrainerType.FISHERMAN, TrainerType.PARASOL_LADY ],
[BiomePoolTier.UNCOMMON]: [ TrainerType.ACE_TRAINER ], [BiomePoolTier.UNCOMMON]: [ TrainerType.ACE_TRAINER ],
[BiomePoolTier.RARE]: [ TrainerType.BLACK_BELT ], [BiomePoolTier.RARE]: [ TrainerType.BLACK_BELT ],
[BiomePoolTier.SUPER_RARE]: [], [BiomePoolTier.SUPER_RARE]: [],
@ -1790,7 +1790,7 @@ export const biomeTrainerPools: BiomeTrainerPools = {
[BiomePoolTier.BOSS_ULTRA_RARE]: [] [BiomePoolTier.BOSS_ULTRA_RARE]: []
}, },
[Biome.DESERT]: { [Biome.DESERT]: {
[BiomePoolTier.COMMON]: [ TrainerType.SCIENTIST ], [BiomePoolTier.COMMON]: [ TrainerType.SCIENTIST, TrainerType.BACKPACKER ],
[BiomePoolTier.UNCOMMON]: [], [BiomePoolTier.UNCOMMON]: [],
[BiomePoolTier.RARE]: [], [BiomePoolTier.RARE]: [],
[BiomePoolTier.SUPER_RARE]: [], [BiomePoolTier.SUPER_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.PARASOL_LADY, TrainerType.BEAUTY ],
[BiomePoolTier.UNCOMMON]: [ TrainerType.ACE_TRAINER, TrainerType.BREEDER ], [BiomePoolTier.UNCOMMON]: [ TrainerType.ACE_TRAINER, TrainerType.BREEDER, TrainerType.BAKER ],
[BiomePoolTier.RARE]: [], [BiomePoolTier.RARE]: [],
[BiomePoolTier.SUPER_RARE]: [], [BiomePoolTier.SUPER_RARE]: [],
[BiomePoolTier.ULTRA_RARE]: [], [BiomePoolTier.ULTRA_RARE]: [],
@ -1879,7 +1879,7 @@ export const biomeTrainerPools: BiomeTrainerPools = {
}, },
[Biome.RUINS]: { [Biome.RUINS]: {
[BiomePoolTier.COMMON]: [ TrainerType.PSYCHIC, TrainerType.SCIENTIST ], [BiomePoolTier.COMMON]: [ TrainerType.PSYCHIC, TrainerType.SCIENTIST ],
[BiomePoolTier.UNCOMMON]: [ TrainerType.ACE_TRAINER, TrainerType.BLACK_BELT ], [BiomePoolTier.UNCOMMON]: [ TrainerType.ACE_TRAINER, TrainerType.BLACK_BELT, TrainerType.HEX_MANIAC ],
[BiomePoolTier.RARE]: [], [BiomePoolTier.RARE]: [],
[BiomePoolTier.SUPER_RARE]: [], [BiomePoolTier.SUPER_RARE]: [],
[BiomePoolTier.ULTRA_RARE]: [], [BiomePoolTier.ULTRA_RARE]: [],
@ -7165,14 +7165,18 @@ export function initBiomes() {
[ Biome.MOUNTAIN, BiomePoolTier.COMMON ], [ Biome.MOUNTAIN, BiomePoolTier.COMMON ],
[ Biome.CAVE, BiomePoolTier.COMMON ], [ Biome.CAVE, BiomePoolTier.COMMON ],
[ Biome.BADLANDS, BiomePoolTier.COMMON ], [ Biome.BADLANDS, BiomePoolTier.COMMON ],
[ Biome.JUNGLE, BiomePoolTier.COMMON ] [ Biome.JUNGLE, BiomePoolTier.COMMON ],
[ Biome.DESERT, BiomePoolTier.COMMON ]
] ]
], ],
[ TrainerType.BAKER, [ [ TrainerType.BAKER, [
[ Biome.SLUM, BiomePoolTier.UNCOMMON ] [ Biome.SLUM, BiomePoolTier.UNCOMMON ],
[ Biome.MEADOW, BiomePoolTier.UNCOMMON ]
] ]
], ],
[ TrainerType.BEAUTY, [ [ TrainerType.BEAUTY, [
[ Biome.METROPOLIS, BiomePoolTier.COMMON ],
[ Biome.MEADOW, BiomePoolTier.COMMON ],
[ Biome.FAIRY_CAVE, BiomePoolTier.COMMON ] [ Biome.FAIRY_CAVE, BiomePoolTier.COMMON ]
]], ]],
[ TrainerType.BIKER, [ [ TrainerType.BIKER, [
@ -7247,7 +7251,8 @@ export function initBiomes() {
] ]
], ],
[ TrainerType.PARASOL_LADY, [ [ TrainerType.PARASOL_LADY, [
[ Biome.BEACH, BiomePoolTier.COMMON ], [ Biome.SWAMP, BiomePoolTier.COMMON ],
[ Biome.LAKE, BiomePoolTier.COMMON ],
[ Biome.MEADOW, BiomePoolTier.COMMON ] [ Biome.MEADOW, BiomePoolTier.COMMON ]
] ]
], ],
@ -7313,6 +7318,7 @@ export function initBiomes() {
] ]
], ],
[ TrainerType.HEX_MANIAC, [ [ TrainerType.HEX_MANIAC, [
[ Biome.RUINS, BiomePoolTier.UNCOMMON ],
[ Biome.GRAVEYARD, BiomePoolTier.UNCOMMON ] [ Biome.GRAVEYARD, BiomePoolTier.UNCOMMON ]
] ]
], ],

View File

@ -22,6 +22,7 @@ import { PartyMemberStrength } from "#enums/party-member-strength";
import { Species } from "#enums/species"; import { Species } from "#enums/species";
import { TrainerType } from "#enums/trainer-type"; import { TrainerType } from "#enums/trainer-type";
import { Gender } from "#app/data/gender"; import { Gender } from "#app/data/gender";
import { Abilities } from "#enums/abilities";
/** Minimum BST for Pokemon generated onto the Elite Four's teams */ /** Minimum BST for Pokemon generated onto the Elite Four's teams */
const ELITE_FOUR_MINIMUM_BST = 460; const ELITE_FOUR_MINIMUM_BST = 460;
@ -1952,12 +1953,79 @@ export const trainerConfigs: TrainerConfigs = {
[TrainerType.BAKER]: new TrainerConfig(++t) [TrainerType.BAKER]: new TrainerConfig(++t)
.setEncounterBgm(TrainerType.CLERK) .setEncounterBgm(TrainerType.CLERK)
.setMoneyMultiplier(1.35) .setMoneyMultiplier(1.35)
.setSpeciesFilter(s => s.isOfType(PokemonType.GRASS) || s.isOfType(PokemonType.FIRE)), .setSpeciesFilter(s =>
[TrainerType.BEAUTY]: new TrainerConfig(++t).setMoneyMultiplier(1.55).setEncounterBgm(TrainerType.PARASOL_LADY), !![ s.ability1, s.ability2, s.abilityHidden ].find(a => !!a && [ Abilities.WHITE_SMOKE, Abilities.GLUTTONY, Abilities.HONEY_GATHER, Abilities.HARVEST, Abilities.SWEET_VEIL, Abilities.RIPEN, Abilities.WELL_BAKED_BODY, Abilities.SUPERSWEET_SYRUP, Abilities.HOSPITALITY ].includes(a)) ||
!!s.getLevelMoves().find(plm => [ Moves.SOFT_BOILED, Moves.SPORE, Moves.OVERHEAT, Moves.TEATIME, Moves.MILK_DRINK ].includes(plm[1]))), // Mons with baking related abilities or who learn Overheat, Teatime, Milk Drink, Spore, or Soft-Boiled by level
[TrainerType.BEAUTY]: new TrainerConfig(++t).setMoneyMultiplier(1.55).setEncounterBgm(TrainerType.PARASOL_LADY)
.setPartyTemplates(
trainerPartyTemplates.TWO_AVG_SAME_ONE_AVG,
trainerPartyTemplates.TWO_AVG_SAME_ONE_STRONG,
trainerPartyTemplates.THREE_AVG_SAME,
trainerPartyTemplates.THREE_AVG,
trainerPartyTemplates.FOUR_WEAK,
trainerPartyTemplates.ONE_STRONG,
)
.setSpeciesPools({
[TrainerPoolTier.COMMON]: [
Species.MEOWTH,
Species.GOLDEEN,
Species.MAREEP,
Species.MARILL,
Species.SKITTY,
Species.GLAMEOW,
Species.PURRLOIN
],
[TrainerPoolTier.UNCOMMON]: [
Species.ROSELIA,
Species.LUVDISC,
Species.BLITZLE,
Species.SEWADDLE,
Species.PETILIL,
Species.SPRITZEE,
Species.BOUNSWEET,
Species.FLITTLE
],
[TrainerPoolTier.RARE]: [
Species.FEEBAS,
Species.FURFROU,
Species.SALANDIT,
Species.BRUXISH,
Species.SNOM,
Species.ALOLA_VULPIX
],
[TrainerPoolTier.SUPER_RARE]: [
Species.CLAMPERL,
Species.AMAURA,
Species.SYLVEON,
Species.GOOMY,
Species.POPPLIO
]
}),
[TrainerType.BIKER]: new TrainerConfig(++t) [TrainerType.BIKER]: new TrainerConfig(++t)
.setMoneyMultiplier(1.4) .setMoneyMultiplier(1.4)
.setEncounterBgm(TrainerType.ROUGHNECK) .setEncounterBgm(TrainerType.ROUGHNECK)
.setSpeciesFilter(s => s.isOfType(PokemonType.POISON)), .setSpeciesPools({
[TrainerPoolTier.COMMON]: [
Species.EKANS,
Species.KOFFING,
Species.CROAGUNK,
Species.VENIPEDE,
Species.SCRAGGY
],
[TrainerPoolTier.UNCOMMON]: [
Species.VOLTORB,
Species.MAGBY,
Species.ELECTRIKE,
Species.SKORUPI,
Species.SANDILE,
Species.PAWNIARD,
Species.SHROODLE
],
[TrainerPoolTier.RARE]: [
Species.VAROOM,
Species.CYCLIZAR
]
}),
[TrainerType.BLACK_BELT]: new TrainerConfig(++t) [TrainerType.BLACK_BELT]: new TrainerConfig(++t)
.setHasGenders("Battle Girl", TrainerType.PSYCHIC) .setHasGenders("Battle Girl", TrainerType.PSYCHIC)
.setHasDouble("Crush Kin") .setHasDouble("Crush Kin")
@ -2059,9 +2127,9 @@ export const trainerConfigs: TrainerConfigs = {
.setEncounterBgm(TrainerType.CYCLIST) .setEncounterBgm(TrainerType.CYCLIST)
.setPartyTemplates(trainerPartyTemplates.TWO_WEAK, trainerPartyTemplates.ONE_AVG) .setPartyTemplates(trainerPartyTemplates.TWO_WEAK, trainerPartyTemplates.ONE_AVG)
.setSpeciesPools({ .setSpeciesPools({
[TrainerPoolTier.COMMON]: [Species.PICHU, Species.STARLY, Species.TAILLOW, Species.BOLTUND], [TrainerPoolTier.COMMON]: [Species.PICHU, Species.STARLY, Species.TAILLOW, Species.YAMPER],
[TrainerPoolTier.UNCOMMON]: [Species.DODUO, Species.ELECTRIKE, Species.BLITZLE, Species.WATTREL], [TrainerPoolTier.UNCOMMON]: [Species.DODUO, Species.ELECTRIKE, Species.BLITZLE, Species.WATTREL, Species.PONYTA],
[TrainerPoolTier.RARE]: [Species.YANMA, Species.NINJASK, Species.WHIRLIPEDE, Species.EMOLGA], [TrainerPoolTier.RARE]: [Species.YANMA, Species.NINJASK, Species.WHIRLIPEDE, Species.EMOLGA, Species.SKIDDO],
[TrainerPoolTier.SUPER_RARE]: [Species.ACCELGOR, Species.DREEPY], [TrainerPoolTier.SUPER_RARE]: [Species.ACCELGOR, Species.DREEPY],
}), }),
[TrainerType.DANCER]: new TrainerConfig(++t) [TrainerType.DANCER]: new TrainerConfig(++t)
@ -2215,7 +2283,7 @@ export const trainerConfigs: TrainerConfigs = {
trainerPartyTemplates.THREE_AVG, trainerPartyTemplates.THREE_AVG,
trainerPartyTemplates.TWO_STRONG, trainerPartyTemplates.TWO_STRONG,
) )
.setSpeciesFilter(s => s.isOfType(PokemonType.GHOST)), .setSpeciesFilter(s => s.isOfType(PokemonType.GHOST) || s.isOfType(PokemonType.PSYCHIC)),
[TrainerType.NURSERY_AIDE]: new TrainerConfig(++t).setMoneyMultiplier(1.3).setEncounterBgm("lass"), [TrainerType.NURSERY_AIDE]: new TrainerConfig(++t).setMoneyMultiplier(1.3).setEncounterBgm("lass"),
[TrainerType.OFFICER]: new TrainerConfig(++t) [TrainerType.OFFICER]: new TrainerConfig(++t)
.setMoneyMultiplier(1.55) .setMoneyMultiplier(1.55)
@ -2245,7 +2313,16 @@ export const trainerConfigs: TrainerConfigs = {
[TrainerType.PARASOL_LADY]: new TrainerConfig(++t) [TrainerType.PARASOL_LADY]: new TrainerConfig(++t)
.setMoneyMultiplier(1.55) .setMoneyMultiplier(1.55)
.setEncounterBgm(TrainerType.PARASOL_LADY) .setEncounterBgm(TrainerType.PARASOL_LADY)
.setSpeciesFilter(s => s.isOfType(PokemonType.WATER)), .setPartyTemplates(
trainerPartyTemplates.TWO_AVG_SAME_ONE_AVG,
trainerPartyTemplates.TWO_AVG_SAME_ONE_STRONG,
trainerPartyTemplates.TWO_AVG,
trainerPartyTemplates.FOUR_WEAK,
trainerPartyTemplates.ONE_STRONG,
)
.setSpeciesFilter(s =>
!![ s.ability1, s.ability2, s.abilityHidden ].find(a => !!a && [ Abilities.DRIZZLE, Abilities.SWIFT_SWIM, Abilities.HYDRATION, Abilities.RAIN_DISH, Abilities.DRY_SKIN ].includes(a)) ||
!!s.getLevelMoves().find(plm => [ Moves.RAIN_DANCE, Moves.WEATHER_BALL ].includes(plm[1]))), // Mons with rain abilities or who learn Rain Dance or Weather Ball by level
[TrainerType.PILOT]: new TrainerConfig(++t) [TrainerType.PILOT]: new TrainerConfig(++t)
.setEncounterBgm(TrainerType.CLERK) .setEncounterBgm(TrainerType.CLERK)
.setSpeciesFilter(s => tmSpecies[Moves.FLY].indexOf(s.speciesId) > -1), .setSpeciesFilter(s => tmSpecies[Moves.FLY].indexOf(s.speciesId) > -1),