diff --git a/src/battle.ts b/src/battle.ts index fab1676b0f3..eec21c812d9 100644 --- a/src/battle.ts +++ b/src/battle.ts @@ -10,7 +10,6 @@ import { GameMode } from "./game-mode"; import { BattleSpec } from "./enums/battle-spec"; import { PlayerGender } from "./system/game-data"; import { MoneyMultiplierModifier, PokemonHeldItemModifier } from "./modifier/modifier"; -import { MoneyAchv } from "./system/achv"; export enum BattleType { WILD, diff --git a/src/data/dialogue.ts b/src/data/dialogue.ts index 9682a4ad57a..56cfb178b3b 100644 --- a/src/data/dialogue.ts +++ b/src/data/dialogue.ts @@ -498,6 +498,106 @@ export const trainerTypeDialogue = { ] } ], + [TrainerType.MAGMA_BOSS_MAXIE_1]: [ + { + encounter: [ + `After defeating you I will remove all the water biomes` + ], + victory: [ + `But why...?` + ] + } + ], + [TrainerType.MAGMA_BOSS_MAXIE_2]: [ + { + encounter: [ + `Hold it right there.` + ], + victory: [ + `I... I lost again?` + ] + } + ], + [TrainerType.AQUA_BOSS_ARCHIE_1]: [ + { + encounter: [ + `After defeating you I will send you to water jail` + ], + victory: [ + `But why...?` + ] + } + ], + [TrainerType.AQUA_BOSS_ARCHIE_2]: [ + { + encounter: [ + `Hold it right there.` + ], + victory: [ + `I... I lost again?` + ] + } + ], + [TrainerType.GALACTIC_BOSS_CYRUS_1]: [ + { + encounter: [ + `I will make you regret paying heed to your heart` + ], + victory: [ + `Interesting. And quite curious.` + ] + } + ], + [TrainerType.GALACTIC_BOSS_CYRUS_2]: [ + { + encounter: [ + `I'm going to completely crush you!` + ], + victory: [ + `How come I didn't get a 680BST legendary?` + ] + } + ], + [TrainerType.PLASMA_BOSS_GHETSIS_1]: [ + { + encounter: [ + `[Ominous latin chanting in the background]` + ], + victory: [ + `Don't call me Dennis!` + ] + } + ], + [TrainerType.PLASMA_BOSS_GHETSIS_2]: [ + { + encounter: [ + `Lose and go down in flames!` + ], + victory: [ + `I would have won if I rolled DNA splicers!` + ] + } + ], + [TrainerType.FLARE_BOSS_LYSANDRE_1]: [ + { + encounter: [ + `I copied my team from Cyrus` + ], + victory: [ + `Maybe I should have copied someone else` + ] + } + ], + [TrainerType.FLARE_BOSS_LYSANDRE_2]: [ + { + encounter: [ + `Enough of this.` + ], + victory: [ + `Whaugh!` + ] + } + ], [TrainerType.BROCK]: { encounter: [ `My expertise on Rock-type Pokémon will take you down! Come on!`, diff --git a/src/data/enums/trainer-type.ts b/src/data/enums/trainer-type.ts index 6c1962b46d1..83b3e08bf27 100644 --- a/src/data/enums/trainer-type.ts +++ b/src/data/enums/trainer-type.ts @@ -51,13 +51,23 @@ export enum TrainerType { WORKER, YOUNGSTER, ROCKET_GRUNT, - ROCKET_BOSS_GIOVANNI_1, - ROCKET_BOSS_GIOVANNI_2, MAGMA_GRUNT, AQUA_GRUNT, GALACTIC_GRUNT, PLASMA_GRUNT, FLARE_GRUNT, + ROCKET_BOSS_GIOVANNI_1, + ROCKET_BOSS_GIOVANNI_2, + MAGMA_BOSS_MAXIE_1, + MAGMA_BOSS_MAXIE_2, + AQUA_BOSS_ARCHIE_1, + AQUA_BOSS_ARCHIE_2, + GALACTIC_BOSS_CYRUS_1, + GALACTIC_BOSS_CYRUS_2, + PLASMA_BOSS_GHETSIS_1, + PLASMA_BOSS_GHETSIS_2, + FLARE_BOSS_LYSANDRE_1, + FLARE_BOSS_LYSANDRE_2, BROCK = 200, MISTY, diff --git a/src/data/trainer-config.ts b/src/data/trainer-config.ts index 8208ae5a595..58922b2d800 100644 --- a/src/data/trainer-config.ts +++ b/src/data/trainer-config.ts @@ -804,7 +804,7 @@ export const trainerConfigs: TrainerConfigs = { }), [TrainerType.MAGMA_GRUNT]: new TrainerConfig(++t).setHasGenders().setHasDouble('Magma Grunts').setMoneyMultiplier(1.0).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm('battle_plasma_grunt').setPartyTemplates(trainerPartyTemplates.FOUR_WEAK_BALANCED) .setSpeciesPools({ - [TrainerPoolTier.COMMON]: [Species.SLUGMA, Species.ZIGZAGOON, Species.NUMEL, Species.ZIGZAGOON, Species.DIGLETT, Species.MAGBY], + [TrainerPoolTier.COMMON]: [Species.SLUGMA, Species.POOCHYENA, Species.NUMEL, Species.ZIGZAGOON, Species.DIGLETT, Species.MAGBY], [TrainerPoolTier.UNCOMMON]: [Species.PHANPY, Species.SWINUB, Species.GLIGAR, Species.TORKOAL, Species.BALTOY, Species.BARBOACH], [TrainerPoolTier.RARE]: [Species.SOLROCK, Species.HIPPOPOTAS, Species.SANDACONDA], [TrainerPoolTier.SUPER_RARE]: [Species.TRAPINCH, Species.HEATMOR], @@ -812,7 +812,7 @@ export const trainerConfigs: TrainerConfigs = { }), [TrainerType.AQUA_GRUNT]: new TrainerConfig(++t).setHasGenders().setHasDouble('Aqua Grunts').setMoneyMultiplier(1.0).setEncounterBgm(TrainerType.PLASMA_GRUNT).setBattleBgm('battle_plasma_grunt').setPartyTemplates(trainerPartyTemplates.FOUR_WEAK_BALANCED) .setSpeciesPools({ - [TrainerPoolTier.COMMON]: [ Species.CARVANHA, Species.WAILMER, Species.POOCHYENA, Species.LOTAD, Species.CORPHISH], + [TrainerPoolTier.COMMON]: [ Species.CARVANHA, Species.WAILMER, Species.ZIGZAGOON, Species.LOTAD, Species.CORPHISH], [TrainerPoolTier.UNCOMMON]: [Species.SPHEAL, Species.CHINCHOU, Species.WOOPER, Species.WINGULL, Species.TENTACOOL ], [TrainerPoolTier.RARE]: [Species.CLAMPERL, Species.REMORAID, Species.ARROKUDA], [TrainerPoolTier.SUPER_RARE]: [Species.MANTINE, Species.BASCULEGION], @@ -1035,7 +1035,7 @@ export const trainerConfigs: TrainerConfigs = { return [ modifierTypes.TERA_SHARD().generateType(null, [ starter.species.type1 ]).withIdFromFunc(modifierTypes.TERA_SHARD).newModifier(starter) as PersistentModifier ]; }), - [TrainerType.ROCKET_BOSS_GIOVANNI_1]: new TrainerConfig(t = TrainerType.GIOVANNI).setName('Giovanni').initForEvilTeamLeader("Rocket Boss",[]) + [TrainerType.ROCKET_BOSS_GIOVANNI_1]: new TrainerConfig(t = TrainerType.ROCKET_BOSS_GIOVANNI_1).setName('Giovanni').initForEvilTeamLeader("Rocket Boss",[]) .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.PERSIAN , Species.ALOLA_PERSIAN])) .setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.NIDOKING , Species.NIDOQUEEN ])) .setPartyMemberFunc(2, getRandomPartyMemberFunc([ Species.RHYPERIOR ])) @@ -1067,6 +1067,178 @@ export const trainerConfigs: TrainerConfigs = { p.generateAndPopulateMoveset(); p.pokeball = PokeballType.MASTER_BALL; })), + [TrainerType.MAGMA_BOSS_MAXIE_1]: new TrainerConfig(++t).setName('Maxie').initForEvilTeamLeader("Magma Boss",[]) + .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.MIGHTYENA ])) + .setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.CROBAT, Species.GLISCOR ])) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([ Species.WEEZING, Species.GALAR_WEEZING ])) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.MAGMORTAR ])) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([ Species.FLYGON, Species.CLAYDOL ])) + .setPartyMemberFunc(5, getRandomPartyMemberFunc([ Species.CAMERUPT ], TrainerSlot.TRAINER, true, p => { + p.setBoss(true, 2); + p.generateAndPopulateMoveset(); + p.pokeball = PokeballType.ULTRA_BALL; + p.formIndex = 1; + })), + [TrainerType.MAGMA_BOSS_MAXIE_2]: new TrainerConfig(++t).setName('Maxie').initForEvilTeamLeader("Magma Boss",[]) + .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.SOLROCK, Species.MAGCARGO ], TrainerSlot.TRAINER, true, p => { + p.setBoss(true, 2); + p.generateAndPopulateMoveset(); + p.pokeball = PokeballType.ULTRA_BALL; + })) + .setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.GREAT_TUSK ])) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([ Species.SHIFTRY, Species.SCOVILLAIN ], TrainerSlot.TRAINER, true, p => { + p.generateAndPopulateMoveset(); + p.abilityIndex = 0; // Chlorophyll + })) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.TORKOAL, Species.NINETALES ], TrainerSlot.TRAINER, true, p => { + p.generateAndPopulateMoveset(); + p.abilityIndex = 2; // DROUGHT + })) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([ Species.GROUDON ], TrainerSlot.TRAINER, true, p => { + p.setBoss(true, 3); + p.generateAndPopulateMoveset(); + p.pokeball = PokeballType.MASTER_BALL; + })) + .setPartyMemberFunc(5, getRandomPartyMemberFunc([ Species.CAMERUPT ], TrainerSlot.TRAINER, true, p => { + p.setBoss(true, 2); + p.generateAndPopulateMoveset(); + p.pokeball = PokeballType.ULTRA_BALL; + })), + [TrainerType.AQUA_BOSS_ARCHIE_1]: new TrainerConfig(++t).setName('Archie').initForEvilTeamLeader("Aqua Boss",[]) + .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.LINOONE ])) + .setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.CROBAT, Species.PELIPPER ])) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([ Species.MUK, Species.ALOLA_MUK ])) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.TENTACRUEL ])) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([ Species.RELICANTH, Species.WAILORD ])) + .setPartyMemberFunc(5, getRandomPartyMemberFunc([ Species.SHARPEDO ], TrainerSlot.TRAINER, true, p => { + p.setBoss(true, 2); + p.generateAndPopulateMoveset(); + p.pokeball = PokeballType.ULTRA_BALL; + p.formIndex = 1; + })), + [TrainerType.AQUA_BOSS_ARCHIE_2]: new TrainerConfig(++t).setName('Archie').initForEvilTeamLeader("Aqua Boss",[]) + .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.KINGDRA, Species.LUDICOLO ], TrainerSlot.TRAINER, true, p => { + p.setBoss(true, 2); + p.generateAndPopulateMoveset(); + p.pokeball = PokeballType.ULTRA_BALL; + })) + .setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.BEARTIC, Species.ARMALDO ], TrainerSlot.TRAINER, true, p => { + p.generateAndPopulateMoveset(); + p.abilityIndex = 2; // Swift Swim + })) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([ Species.HUNTAIL, Species.GOREBYSS ], TrainerSlot.TRAINER, true, p => { + p.generateAndPopulateMoveset(); + p.abilityIndex = 0; // Swift Swim + })) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.POLITOED, Species.PELIPPER ], TrainerSlot.TRAINER, true, p => { + p.generateAndPopulateMoveset(); + p.abilityIndex = 2; // Drizzle + })) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([ Species.KYOGRE ], TrainerSlot.TRAINER, true, p => { + p.setBoss(true, 3); + p.generateAndPopulateMoveset(); + p.pokeball = PokeballType.MASTER_BALL; + })) + .setPartyMemberFunc(5, getRandomPartyMemberFunc([ Species.SHARPEDO ], TrainerSlot.TRAINER, true, p => { + p.setBoss(true, 2); + p.generateAndPopulateMoveset(); + p.pokeball = PokeballType.ULTRA_BALL; + })), + [TrainerType.GALACTIC_BOSS_CYRUS_1]: new TrainerConfig(++t).setName('Cyrus').initForEvilTeamLeader("Galactic Boss",[]) + .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.GYARADOS, Species.BASCULEGION ])) + .setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.HONCHKROW, Species.HISUI_BRAVIARY ])) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([ Species.CROBAT ])) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.AZELF, Species.UXIE, Species.MESPRIT ])) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([ Species.HOUNDOOM ], TrainerSlot.TRAINER, true, p => { + p.generateAndPopulateMoveset(); + p.pokeball = PokeballType.ULTRA_BALL; + p.formIndex = 1; + })) + .setPartyMemberFunc(5, getRandomPartyMemberFunc([ Species.WEAVILE ], TrainerSlot.TRAINER, true, p => { + p.setBoss(true, 2); + p.generateAndPopulateMoveset(); + p.pokeball = PokeballType.ULTRA_BALL; + })), + [TrainerType.GALACTIC_BOSS_CYRUS_2]: new TrainerConfig(++t).setName('Cyrus').initForEvilTeamLeader("Galactic Boss",[]) + .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.AZELF, Species.UXIE, Species.MESPRIT ], TrainerSlot.TRAINER, true, p => { + p.setBoss(true, 2); + p.generateAndPopulateMoveset(); + })) + .setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.ELECTRODE, Species.HISUI_ELECTRODE ])) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([ Species.SALAMENCE, Species.ROARING_MOON ])) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.HISUI_ZOROARK ])) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([ Species.DARKRAI ], TrainerSlot.TRAINER, true, p => { + p.setBoss(true, 3); + p.generateAndPopulateMoveset(); + p.pokeball = PokeballType.MASTER_BALL; + })) + .setPartyMemberFunc(5, getRandomPartyMemberFunc([ Species.WEAVILE ], TrainerSlot.TRAINER, true, p => { + p.setBoss(true, 2); + p.generateAndPopulateMoveset(); + p.pokeball = PokeballType.ULTRA_BALL; + })), + [TrainerType.PLASMA_BOSS_GHETSIS_1]: new TrainerConfig(++t).setName('Ghetsis').initForEvilTeamLeader("Plasma Boss",[]) + .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.COFAGRIGUS, Species.RUNERIGUS ])) + .setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.BOUFFALANT ])) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([ Species.SEISMITOAD, Species.CARRACOSTA ])) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.EELEKTROSS, Species.GALVANTULA ])) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([ Species.VOLCARONA ])) + .setPartyMemberFunc(5, getRandomPartyMemberFunc([ Species.HYDREIGON ], TrainerSlot.TRAINER, true, p => { + p.setBoss(true, 2); + p.generateAndPopulateMoveset(); + p.pokeball = PokeballType.ULTRA_BALL; + })), + [TrainerType.PLASMA_BOSS_GHETSIS_2]: new TrainerConfig(++t).setName('Ghetsis').initForEvilTeamLeader("Plasma Boss",[]) + .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.SLITHER_WING, Species.IRON_MOTH ], TrainerSlot.TRAINER, true, p => { + p.setBoss(true, 2); + p.generateAndPopulateMoveset(); + p.pokeball = PokeballType.ULTRA_BALL; + })) + .setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.DURANT ])) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([ Species.DARUMAKA, Species.GALAR_DARUMAKA ])) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.KINGAMBIT ])) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([ Species.KYUREM ], TrainerSlot.TRAINER, true, p => { + p.setBoss(true, 3); + p.generateAndPopulateMoveset(); + p.pokeball = PokeballType.MASTER_BALL; + })) + .setPartyMemberFunc(5, getRandomPartyMemberFunc([ Species.HYDREIGON, Species.IRON_JUGULIS ], TrainerSlot.TRAINER, true, p => { + p.setBoss(true, 2); + p.generateAndPopulateMoveset(); + p.pokeball = PokeballType.ULTRA_BALL; + })), + [TrainerType.FLARE_BOSS_LYSANDRE_1]: new TrainerConfig(++t).setName('Lysandre').initForEvilTeamLeader("Flare Boss",[]) + .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.MIENSHAO ])) + .setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.HONCHKROW, Species.TALONFLAME ])) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([ Species.PYROAR ])) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.MILOTIC ])) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([ Species.HELIOPTILE ])) + .setPartyMemberFunc(5, getRandomPartyMemberFunc([ Species.GYARADOS ], TrainerSlot.TRAINER, true, p => { + p.setBoss(true, 2); + p.generateAndPopulateMoveset(); + p.pokeball = PokeballType.ULTRA_BALL; + p.formIndex = 1; + })), + [TrainerType.FLARE_BOSS_LYSANDRE_2]: new TrainerConfig(++t).setName('Lysandre').initForEvilTeamLeader("Flare Boss",[]) + .setPartyMemberFunc(0, getRandomPartyMemberFunc([ Species.SCREAM_TAIL, Species.FLUTTER_MANE ], TrainerSlot.TRAINER, true, p => { + p.setBoss(true, 2); + p.generateAndPopulateMoveset(); + p.pokeball = PokeballType.ULTRA_BALL; + })) + .setPartyMemberFunc(1, getRandomPartyMemberFunc([ Species.GHOLDENGO, Species.AEGISLASH ])) + .setPartyMemberFunc(2, getRandomPartyMemberFunc([ Species.PYROAR ])) + .setPartyMemberFunc(3, getRandomPartyMemberFunc([ Species.GOODRA, Species.HISUI_GOODRA ])) + .setPartyMemberFunc(4, getRandomPartyMemberFunc([ Species.VOLCANION ], TrainerSlot.TRAINER, true, p => { + p.setBoss(true, 3); + p.generateAndPopulateMoveset(); + p.pokeball = PokeballType.MASTER_BALL; + })) + .setPartyMemberFunc(5, getRandomPartyMemberFunc([ Species.GYARADOS ], TrainerSlot.TRAINER, true, p => { + p.setBoss(true, 2); + p.generateAndPopulateMoveset(); + p.pokeball = PokeballType.ULTRA_BALL; + p.formIndex = 1; + })), }; diff --git a/src/locales/en/trainers.ts b/src/locales/en/trainers.ts index 08271a70fe2..d72636140b6 100644 --- a/src/locales/en/trainers.ts +++ b/src/locales/en/trainers.ts @@ -256,4 +256,14 @@ export const trainerNames: SimpleTranslationEntries = { "rival_female": "Ivy", "rocket_boss_giovanni_1": "Giovanni", "rocket_boss_giovanni_2": "Giovanni", + "magma_boss_maxie_1": "Maxie", + "magma_boss_maxie_2": "Maxie", + "aqua_boss_archie_1": "Archie", + "aqua_boss_archie_2": "Archie", + "galactic_boss_cyrus_1": "Cyrus", + "galactic_boss_cyrus_2": "Cyrus", + "plasma_boss_ghetsis_1": "Ghetsis", + "plasma_boss_ghetsis_2": "Ghetsis", + "flare_boss_lysandre_1": "Lysandre", + "flare_boss_lysandre_2": "Lysandre", } as const;