mirror of
https://github.com/pagefaultgames/pokerogue.git
synced 2025-12-15 06:15:20 +01:00
[Balance] Evil Team Admin Rework + Misc Trainer Changes (#6608)
* Update trainer-config.ts * Update trainer-config.ts * Revert "Update trainer-config.ts" This reverts commit6243592913. * Revert "Update trainer-config.ts" This reverts commit6243592913. * Update Admins, Add Admin 3 * Update Admins, Add Admin 3 * Update trainer-config.ts * Update trainer-config.ts * Initial Pool Updates * Initial Pool Updates * allow evil team admins to use subpools * allow evil team admins to use subpools * Remove trainer pool tier stairs * freedom motif * Remove trainer pool tier stairs * freedom motif * fix: missing import in trainer-config.ts * Fix incorrect Starmobile forms * Pool Updates + Boss additions * Misc Changes * Reorder p functions in Trainer Config This let move gen properly account for Boss Health, Form Changes, and Abilities for future functions * Ensure evil admins are uniquely selected in different fights * Ensure evil admins are uniquely selected in different fights * Implement evil team admin instant tera for slot 4 * Revert Starmobile Changes * Minor Grunt Pool Changes * Champion Adjustments * Update trainer-config.ts * Update trainer-config.ts * Update challenge.ts --------- Co-authored-by: Sirz Benjie <142067137+SirzBenjie@users.noreply.github.com> Co-authored-by: Madmadness65 <blaze.the.fireman@gmail.com>
This commit is contained in:
parent
112963637a
commit
dacf71151a
@ -11,7 +11,7 @@ export type GenModifiersFunc = (party: readonly EnemyPokemon[]) => PersistentMod
|
|||||||
export type GenAIFunc = (party: readonly EnemyPokemon[]) => void;
|
export type GenAIFunc = (party: readonly EnemyPokemon[]) => void;
|
||||||
|
|
||||||
export interface TrainerTierPools {
|
export interface TrainerTierPools {
|
||||||
[key: number]: SpeciesId[];
|
[key: number]: (SpeciesId | SpeciesId[])[];
|
||||||
}
|
}
|
||||||
export interface TrainerConfigs {
|
export interface TrainerConfigs {
|
||||||
[key: number]: TrainerConfig;
|
[key: number]: TrainerConfig;
|
||||||
|
|||||||
@ -32,6 +32,7 @@ import {
|
|||||||
shiftCharCodes,
|
shiftCharCodes,
|
||||||
} from "#utils/common";
|
} from "#utils/common";
|
||||||
import { getEnumValues } from "#utils/enums";
|
import { getEnumValues } from "#utils/enums";
|
||||||
|
import { randSeedUniqueItem } from "#utils/random";
|
||||||
|
|
||||||
export interface TurnCommand {
|
export interface TurnCommand {
|
||||||
command: Command;
|
command: Command;
|
||||||
@ -523,13 +524,12 @@ export class FixedBattleConfig {
|
|||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Helper function to generate a random trainer for evil team trainers and the elite 4/champion
|
* Helper function to generate a random trainer for evil team trainers and the elite 4/champion
|
||||||
* @param trainerPool - An array of trainer types to choose from. If an entry is an array, a random trainer type will be chosen from that array
|
* @param trainerPool - The TrainerType or list of TrainerTypes that can possibly be generated
|
||||||
* @param randomGender - Whether or not to randomly (50%) generate a female trainer (for use with evil team grunts)
|
* @param randomGender - (default `false`); Whether or not to randomly (50%) generate a female trainer (for use with evil team grunts)
|
||||||
* @param seedOffset - The seed offset to use for the random generation of the trainer
|
* @param seedOffset - (default `0`); A seed offset indicating the invocation count of the function to attempt to choose a random, but unique, trainer from the pool
|
||||||
* @returns A function to get a random trainer
|
* @returns A function to generate a random trainer
|
||||||
*/
|
*/
|
||||||
export function getRandomTrainerFunc(
|
export function getRandomTrainerFunc(
|
||||||
trainerPool: readonly (TrainerType | readonly TrainerType[])[],
|
trainerPool: readonly (TrainerType | readonly TrainerType[])[],
|
||||||
@ -537,16 +537,12 @@ export function getRandomTrainerFunc(
|
|||||||
seedOffset = 0,
|
seedOffset = 0,
|
||||||
): GetTrainerFunc {
|
): GetTrainerFunc {
|
||||||
return () => {
|
return () => {
|
||||||
const rand = randSeedInt(trainerPool.length);
|
/** The chosen entry in the pool */
|
||||||
const trainerTypes: TrainerType[] = new Array(trainerPool.length);
|
let choice = randSeedItem(trainerPool);
|
||||||
|
|
||||||
globalScene.executeWithSeedOffset(() => {
|
if (typeof choice !== "number") {
|
||||||
for (let i = 0; i < trainerPool.length; i++) {
|
choice = seedOffset === 0 ? randSeedItem(choice) : randSeedUniqueItem(choice, seedOffset);
|
||||||
const trainerPoolEntry = trainerPool[i];
|
}
|
||||||
const trainerType = Array.isArray(trainerPoolEntry) ? randSeedItem(trainerPoolEntry) : trainerPoolEntry;
|
|
||||||
trainerTypes[i] = trainerType;
|
|
||||||
}
|
|
||||||
}, seedOffset);
|
|
||||||
|
|
||||||
let trainerGender = TrainerVariant.DEFAULT;
|
let trainerGender = TrainerVariant.DEFAULT;
|
||||||
if (randomGender) {
|
if (randomGender) {
|
||||||
@ -566,12 +562,12 @@ export function getRandomTrainerFunc(
|
|||||||
TrainerType.MACRO_GRUNT,
|
TrainerType.MACRO_GRUNT,
|
||||||
TrainerType.STAR_GRUNT,
|
TrainerType.STAR_GRUNT,
|
||||||
];
|
];
|
||||||
const isEvilTeamGrunt = evilTeamGrunts.includes(trainerTypes[rand]);
|
const isEvilTeamGrunt = evilTeamGrunts.includes(choice);
|
||||||
|
|
||||||
if (trainerConfigs[trainerTypes[rand]].hasDouble && isEvilTeamGrunt) {
|
if (trainerConfigs[choice].hasDouble && isEvilTeamGrunt) {
|
||||||
return new Trainer(trainerTypes[rand], randInt(3) === 0 ? TrainerVariant.DOUBLE : trainerGender);
|
return new Trainer(choice, randInt(3) === 0 ? TrainerVariant.DOUBLE : trainerGender);
|
||||||
}
|
}
|
||||||
|
|
||||||
return new Trainer(trainerTypes[rand], trainerGender);
|
return new Trainer(choice, trainerGender);
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@ -503,6 +503,7 @@ export class SingleGenerationChallenge extends Challenge {
|
|||||||
ClassicFixedBossWaves.EVIL_GRUNT_4,
|
ClassicFixedBossWaves.EVIL_GRUNT_4,
|
||||||
ClassicFixedBossWaves.EVIL_ADMIN_2,
|
ClassicFixedBossWaves.EVIL_ADMIN_2,
|
||||||
ClassicFixedBossWaves.EVIL_BOSS_1,
|
ClassicFixedBossWaves.EVIL_BOSS_1,
|
||||||
|
ClassicFixedBossWaves.EVIL_ADMIN_3,
|
||||||
ClassicFixedBossWaves.EVIL_BOSS_2,
|
ClassicFixedBossWaves.EVIL_BOSS_2,
|
||||||
];
|
];
|
||||||
const evilTeamGrunts = [
|
const evilTeamGrunts = [
|
||||||
@ -516,9 +517,37 @@ export class SingleGenerationChallenge extends Challenge {
|
|||||||
[TrainerType.MACRO_GRUNT],
|
[TrainerType.MACRO_GRUNT],
|
||||||
[TrainerType.STAR_GRUNT],
|
[TrainerType.STAR_GRUNT],
|
||||||
];
|
];
|
||||||
const evilTeamAdmins = [
|
const evilAdminFight1 = [
|
||||||
[TrainerType.ARCHER, TrainerType.ARIANA, TrainerType.PROTON, TrainerType.PETREL],
|
[TrainerType.PETREL],
|
||||||
[TrainerType.ARCHER, TrainerType.ARIANA, TrainerType.PROTON, TrainerType.PETREL],
|
[TrainerType.PETREL],
|
||||||
|
[
|
||||||
|
[TrainerType.TABITHA, TrainerType.COURTNEY],
|
||||||
|
[TrainerType.MATT, TrainerType.SHELLY],
|
||||||
|
],
|
||||||
|
[TrainerType.JUPITER, TrainerType.MARS, TrainerType.SATURN],
|
||||||
|
[TrainerType.ZINZOLIN, TrainerType.COLRESS],
|
||||||
|
[TrainerType.BRYONY],
|
||||||
|
[TrainerType.FABA, TrainerType.PLUMERIA],
|
||||||
|
[TrainerType.OLEANA],
|
||||||
|
[TrainerType.GIACOMO, TrainerType.MELA, TrainerType.ATTICUS, TrainerType.ORTEGA, TrainerType.ERI],
|
||||||
|
];
|
||||||
|
const evilAdminFight2 = [
|
||||||
|
[TrainerType.ARCHER, TrainerType.ARIANA, TrainerType.PROTON],
|
||||||
|
[TrainerType.ARCHER, TrainerType.ARIANA, TrainerType.PROTON],
|
||||||
|
[
|
||||||
|
[TrainerType.TABITHA, TrainerType.COURTNEY],
|
||||||
|
[TrainerType.MATT, TrainerType.SHELLY],
|
||||||
|
],
|
||||||
|
[TrainerType.JUPITER, TrainerType.MARS, TrainerType.SATURN],
|
||||||
|
[TrainerType.ZINZOLIN],
|
||||||
|
[TrainerType.XEROSIC],
|
||||||
|
[TrainerType.FABA, TrainerType.PLUMERIA],
|
||||||
|
[TrainerType.OLEANA],
|
||||||
|
[TrainerType.GIACOMO, TrainerType.MELA, TrainerType.ATTICUS, TrainerType.ORTEGA, TrainerType.ERI],
|
||||||
|
];
|
||||||
|
const evilAdminFight3 = [
|
||||||
|
[TrainerType.ARCHER, TrainerType.ARIANA, TrainerType.PROTON],
|
||||||
|
[TrainerType.ARCHER, TrainerType.ARIANA, TrainerType.PROTON],
|
||||||
[
|
[
|
||||||
[TrainerType.TABITHA, TrainerType.COURTNEY],
|
[TrainerType.TABITHA, TrainerType.COURTNEY],
|
||||||
[TrainerType.MATT, TrainerType.SHELLY],
|
[TrainerType.MATT, TrainerType.SHELLY],
|
||||||
@ -563,8 +592,13 @@ export class SingleGenerationChallenge extends Challenge {
|
|||||||
trainerTypes = evilTeamGrunts[this.value - 1];
|
trainerTypes = evilTeamGrunts[this.value - 1];
|
||||||
break;
|
break;
|
||||||
case ClassicFixedBossWaves.EVIL_ADMIN_1:
|
case ClassicFixedBossWaves.EVIL_ADMIN_1:
|
||||||
|
trainerTypes = evilAdminFight1[this.value - 1];
|
||||||
|
break;
|
||||||
case ClassicFixedBossWaves.EVIL_ADMIN_2:
|
case ClassicFixedBossWaves.EVIL_ADMIN_2:
|
||||||
trainerTypes = evilTeamAdmins[this.value - 1];
|
trainerTypes = evilAdminFight2[this.value - 1];
|
||||||
|
break;
|
||||||
|
case ClassicFixedBossWaves.EVIL_ADMIN_3:
|
||||||
|
trainerTypes = evilAdminFight3[this.value - 1];
|
||||||
break;
|
break;
|
||||||
case ClassicFixedBossWaves.EVIL_BOSS_1:
|
case ClassicFixedBossWaves.EVIL_BOSS_1:
|
||||||
trainerTypes = evilTeamBosses[this.value - 1];
|
trainerTypes = evilTeamBosses[this.value - 1];
|
||||||
|
|||||||
@ -3,218 +3,256 @@ import { TrainerPoolTier } from "#enums/trainer-pool-tier";
|
|||||||
import type { TrainerTierPools } from "#types/trainer-funcs";
|
import type { TrainerTierPools } from "#types/trainer-funcs";
|
||||||
|
|
||||||
/** Team Rocket's admin trainer pool. */
|
/** Team Rocket's admin trainer pool. */
|
||||||
const ROCKET: TrainerTierPools = {
|
const ROCKET_PETREL: TrainerTierPools = {
|
||||||
[TrainerPoolTier.COMMON]: [
|
[TrainerPoolTier.COMMON]: [
|
||||||
SpeciesId.RATTATA,
|
|
||||||
SpeciesId.SPEAROW,
|
SpeciesId.SPEAROW,
|
||||||
SpeciesId.EKANS,
|
SpeciesId.ZUBAT,
|
||||||
SpeciesId.VILEPLUME,
|
|
||||||
SpeciesId.DIGLETT,
|
SpeciesId.DIGLETT,
|
||||||
SpeciesId.GROWLITHE,
|
SpeciesId.GEODUDE,
|
||||||
SpeciesId.GRIMER,
|
|
||||||
SpeciesId.DROWZEE,
|
SpeciesId.DROWZEE,
|
||||||
SpeciesId.VOLTORB,
|
SpeciesId.VOLTORB,
|
||||||
SpeciesId.EXEGGCUTE,
|
SpeciesId.EXEGGCUTE,
|
||||||
SpeciesId.CUBONE,
|
SpeciesId.TANGELA,
|
||||||
SpeciesId.KOFFING,
|
SpeciesId.PINECO,
|
||||||
SpeciesId.MAGIKARP,
|
],
|
||||||
|
[TrainerPoolTier.UNCOMMON]: [
|
||||||
|
SpeciesId.MAGNEMITE,
|
||||||
|
SpeciesId.SHELLDER,
|
||||||
|
SpeciesId.OMANYTE,
|
||||||
|
SpeciesId.QWILFISH,
|
||||||
|
SpeciesId.ALOLA_GEODUDE,
|
||||||
|
SpeciesId.HISUI_VOLTORB,
|
||||||
|
],
|
||||||
|
[TrainerPoolTier.RARE]: [SpeciesId.MAGIKARP],
|
||||||
|
};
|
||||||
|
|
||||||
|
const ROCKET_ARCHER: TrainerTierPools = {
|
||||||
|
[TrainerPoolTier.COMMON]: [
|
||||||
SpeciesId.ZUBAT,
|
SpeciesId.ZUBAT,
|
||||||
SpeciesId.ONIX,
|
SpeciesId.VENONAT,
|
||||||
SpeciesId.HOUNDOUR,
|
SpeciesId.BELLSPROUT,
|
||||||
SpeciesId.MURKROW,
|
SpeciesId.GRIMER,
|
||||||
|
SpeciesId.DROWZEE,
|
||||||
|
SpeciesId.CUBONE,
|
||||||
|
SpeciesId.TAUROS,
|
||||||
|
SpeciesId.MISDREAVUS,
|
||||||
|
SpeciesId.WYNAUT,
|
||||||
],
|
],
|
||||||
[TrainerPoolTier.UNCOMMON]: [
|
[TrainerPoolTier.UNCOMMON]: [
|
||||||
SpeciesId.ABRA,
|
SpeciesId.ABRA,
|
||||||
SpeciesId.GASTLY,
|
SpeciesId.ONIX,
|
||||||
SpeciesId.OMANYTE,
|
SpeciesId.MAGIKARP,
|
||||||
SpeciesId.KABUTO,
|
SpeciesId.SNEASEL,
|
||||||
SpeciesId.PORYGON,
|
|
||||||
SpeciesId.MANKEY,
|
|
||||||
SpeciesId.SCYTHER,
|
|
||||||
SpeciesId.ELEKID,
|
SpeciesId.ELEKID,
|
||||||
SpeciesId.MAGBY,
|
|
||||||
SpeciesId.ALOLA_SANDSHREW,
|
|
||||||
SpeciesId.ALOLA_MEOWTH,
|
|
||||||
SpeciesId.ALOLA_GEODUDE,
|
|
||||||
SpeciesId.ALOLA_GRIMER,
|
|
||||||
SpeciesId.PALDEA_TAUROS,
|
SpeciesId.PALDEA_TAUROS,
|
||||||
],
|
],
|
||||||
[TrainerPoolTier.RARE]: [SpeciesId.DRATINI, SpeciesId.LARVITAR],
|
[TrainerPoolTier.RARE]: [SpeciesId.LARVITAR],
|
||||||
|
};
|
||||||
|
|
||||||
|
const ROCKET_ARIANA: TrainerTierPools = {
|
||||||
|
[TrainerPoolTier.COMMON]: [
|
||||||
|
SpeciesId.WEEDLE,
|
||||||
|
SpeciesId.ZUBAT,
|
||||||
|
SpeciesId.GROWLITHE,
|
||||||
|
SpeciesId.KOFFING,
|
||||||
|
SpeciesId.LICKITUNG,
|
||||||
|
SpeciesId.SMOOCHUM,
|
||||||
|
SpeciesId.SNUBBULL,
|
||||||
|
SpeciesId.MISDREAVUS,
|
||||||
|
SpeciesId.SLUGMA,
|
||||||
|
],
|
||||||
|
[TrainerPoolTier.UNCOMMON]: [
|
||||||
|
SpeciesId.SCYTHER,
|
||||||
|
SpeciesId.MAGIKARP,
|
||||||
|
SpeciesId.PORYGON,
|
||||||
|
SpeciesId.KABUTO,
|
||||||
|
SpeciesId.ALOLA_RATTATA,
|
||||||
|
SpeciesId.ALOLA_MEOWTH,
|
||||||
|
],
|
||||||
|
[TrainerPoolTier.RARE]: [SpeciesId.LAPRAS],
|
||||||
|
};
|
||||||
|
|
||||||
|
const ROCKET_PROTON: TrainerTierPools = {
|
||||||
|
[TrainerPoolTier.COMMON]: [
|
||||||
|
SpeciesId.SANDSHREW,
|
||||||
|
SpeciesId.PARAS,
|
||||||
|
SpeciesId.MANKEY,
|
||||||
|
SpeciesId.POLIWAG,
|
||||||
|
[SpeciesId.SLOWPOKE, SpeciesId.GALAR_SLOWPOKE],
|
||||||
|
SpeciesId.KANGASKHAN,
|
||||||
|
SpeciesId.PINSIR,
|
||||||
|
SpeciesId.DUNSPARCE,
|
||||||
|
],
|
||||||
|
[TrainerPoolTier.UNCOMMON]: [
|
||||||
|
SpeciesId.GASTLY,
|
||||||
|
SpeciesId.MAGIKARP,
|
||||||
|
SpeciesId.AERODACTYL,
|
||||||
|
SpeciesId.MAGBY,
|
||||||
|
SpeciesId.ALOLA_SANDSHREW,
|
||||||
|
SpeciesId.ALOLA_GRIMER,
|
||||||
|
SpeciesId.GALAR_SLOWPOKE,
|
||||||
|
],
|
||||||
|
[TrainerPoolTier.RARE]: [SpeciesId.DRATINI],
|
||||||
};
|
};
|
||||||
|
|
||||||
/** Team Magma's admin trainer pool */
|
/** Team Magma's admin trainer pool */
|
||||||
const MAGMA: TrainerTierPools = {
|
const MAGMA: TrainerTierPools = {
|
||||||
[TrainerPoolTier.COMMON]: [
|
[TrainerPoolTier.COMMON]: [
|
||||||
SpeciesId.DIGLETT,
|
SpeciesId.GEODUDE,
|
||||||
SpeciesId.GROWLITHE,
|
|
||||||
SpeciesId.VULPIX,
|
|
||||||
SpeciesId.KOFFING,
|
SpeciesId.KOFFING,
|
||||||
SpeciesId.RHYHORN,
|
|
||||||
SpeciesId.SLUGMA,
|
|
||||||
SpeciesId.HOUNDOUR,
|
SpeciesId.HOUNDOUR,
|
||||||
|
SpeciesId.PHANPY,
|
||||||
SpeciesId.POOCHYENA,
|
SpeciesId.POOCHYENA,
|
||||||
SpeciesId.TORKOAL,
|
|
||||||
SpeciesId.ZANGOOSE,
|
SpeciesId.ZANGOOSE,
|
||||||
SpeciesId.SOLROCK,
|
SpeciesId.CACNEA,
|
||||||
SpeciesId.BALTOY,
|
SpeciesId.SIZZLIPEDE,
|
||||||
SpeciesId.ROLYCOLY,
|
SpeciesId.ROLYCOLY,
|
||||||
],
|
],
|
||||||
[TrainerPoolTier.UNCOMMON]: [
|
[TrainerPoolTier.UNCOMMON]: [
|
||||||
SpeciesId.MAGBY,
|
SpeciesId.MAGBY,
|
||||||
SpeciesId.TRAPINCH,
|
[SpeciesId.LILEEP, SpeciesId.ANORITH],
|
||||||
SpeciesId.LILEEP,
|
SpeciesId.DRAPION,
|
||||||
SpeciesId.ANORITH,
|
SpeciesId.DRUDDIGON,
|
||||||
SpeciesId.GOLETT,
|
SpeciesId.DARUMAKA,
|
||||||
SpeciesId.FLETCHLING,
|
|
||||||
SpeciesId.SALANDIT,
|
SpeciesId.SALANDIT,
|
||||||
SpeciesId.TURTONATOR,
|
SpeciesId.TURTONATOR,
|
||||||
SpeciesId.TOEDSCOOL,
|
|
||||||
SpeciesId.CAPSAKID,
|
|
||||||
SpeciesId.HISUI_GROWLITHE,
|
|
||||||
],
|
],
|
||||||
[TrainerPoolTier.RARE]: [SpeciesId.CHARCADET, SpeciesId.ARON],
|
[TrainerPoolTier.RARE]: [SpeciesId.RHYHORN, SpeciesId.ARON, SpeciesId.CHARCADET],
|
||||||
};
|
};
|
||||||
|
|
||||||
const AQUA: TrainerTierPools = {
|
const AQUA: TrainerTierPools = {
|
||||||
[TrainerPoolTier.COMMON]: [
|
[TrainerPoolTier.COMMON]: [
|
||||||
SpeciesId.TENTACOOL,
|
SpeciesId.KRABBY,
|
||||||
SpeciesId.GRIMER,
|
SpeciesId.GRIMER,
|
||||||
SpeciesId.AZURILL,
|
SpeciesId.MANTYKE,
|
||||||
SpeciesId.CHINCHOU,
|
|
||||||
SpeciesId.REMORAID,
|
|
||||||
SpeciesId.POOCHYENA,
|
SpeciesId.POOCHYENA,
|
||||||
SpeciesId.LOTAD,
|
SpeciesId.LOTAD,
|
||||||
SpeciesId.WINGULL,
|
SpeciesId.WINGULL,
|
||||||
SpeciesId.WAILMER,
|
|
||||||
SpeciesId.SEVIPER,
|
SpeciesId.SEVIPER,
|
||||||
SpeciesId.BARBOACH,
|
SpeciesId.WAILMER,
|
||||||
SpeciesId.CORPHISH,
|
|
||||||
SpeciesId.SPHEAL,
|
SpeciesId.SPHEAL,
|
||||||
SpeciesId.CLAMPERL,
|
SpeciesId.RELICANTH,
|
||||||
],
|
|
||||||
[TrainerPoolTier.UNCOMMON]: [
|
|
||||||
SpeciesId.MANTYKE,
|
|
||||||
SpeciesId.HORSEA,
|
|
||||||
SpeciesId.FEEBAS,
|
|
||||||
SpeciesId.TYMPOLE,
|
|
||||||
SpeciesId.SKRELP,
|
|
||||||
SpeciesId.WIMPOD,
|
|
||||||
SpeciesId.DHELMISE,
|
|
||||||
SpeciesId.ARROKUDA,
|
SpeciesId.ARROKUDA,
|
||||||
SpeciesId.CLOBBOPUS,
|
SpeciesId.CLOBBOPUS,
|
||||||
SpeciesId.HISUI_QWILFISH,
|
|
||||||
SpeciesId.WIGLETT,
|
|
||||||
],
|
|
||||||
[TrainerPoolTier.RARE]: [SpeciesId.BASCULEGION, SpeciesId.DONDOZO],
|
|
||||||
};
|
|
||||||
|
|
||||||
const GALACTIC: TrainerTierPools = {
|
|
||||||
[TrainerPoolTier.COMMON]: [
|
|
||||||
SpeciesId.ZUBAT,
|
|
||||||
SpeciesId.MAGNEMITE,
|
|
||||||
SpeciesId.RHYHORN,
|
|
||||||
SpeciesId.TANGELA,
|
|
||||||
SpeciesId.LICKITUNG,
|
|
||||||
SpeciesId.MAGIKARP,
|
|
||||||
SpeciesId.YANMA,
|
|
||||||
SpeciesId.MURKROW,
|
|
||||||
SpeciesId.SWINUB,
|
|
||||||
SpeciesId.ELEKID,
|
|
||||||
SpeciesId.MAGBY,
|
|
||||||
SpeciesId.BRONZOR,
|
|
||||||
SpeciesId.SKORUPI,
|
|
||||||
],
|
],
|
||||||
[TrainerPoolTier.UNCOMMON]: [
|
[TrainerPoolTier.UNCOMMON]: [
|
||||||
SpeciesId.ABRA,
|
SpeciesId.SHELLDER,
|
||||||
SpeciesId.GLIGAR,
|
SpeciesId.HORSEA,
|
||||||
SpeciesId.SNEASEL,
|
[SpeciesId.OMANYTE, SpeciesId.KABUTO],
|
||||||
SpeciesId.DUSKULL,
|
SpeciesId.CROAGUNK,
|
||||||
|
SpeciesId.BINACLE,
|
||||||
|
SpeciesId.SKRELP,
|
||||||
|
SpeciesId.WIMPOD,
|
||||||
|
],
|
||||||
|
[TrainerPoolTier.RARE]: [SpeciesId.MAGIKARP, SpeciesId.FEEBAS, SpeciesId.BASCULEGION],
|
||||||
|
};
|
||||||
|
|
||||||
|
const GALACTIC_MARS: TrainerTierPools = {
|
||||||
|
[TrainerPoolTier.COMMON]: [
|
||||||
|
SpeciesId.MAGNEMITE,
|
||||||
|
SpeciesId.KANGASKHAN,
|
||||||
SpeciesId.DRIFLOON,
|
SpeciesId.DRIFLOON,
|
||||||
SpeciesId.CRANIDOS,
|
SpeciesId.SHELLOS,
|
||||||
SpeciesId.SHIELDON,
|
SpeciesId.CHINGLING,
|
||||||
SpeciesId.ROTOM,
|
|
||||||
SpeciesId.HISUI_QWILFISH,
|
|
||||||
],
|
],
|
||||||
[TrainerPoolTier.RARE]: [
|
[TrainerPoolTier.UNCOMMON]: [SpeciesId.PORYGON, SpeciesId.TOGEPI, SpeciesId.ELEKID, SpeciesId.MISDREAVUS],
|
||||||
SpeciesId.SPIRITOMB,
|
[TrainerPoolTier.RARE]: [SpeciesId.HISUI_LILLIGANT],
|
||||||
SpeciesId.TEDDIURSA,
|
};
|
||||||
SpeciesId.HISUI_SNEASEL,
|
|
||||||
SpeciesId.HISUI_LILLIGANT,
|
const GALACTIC_JUPITER: TrainerTierPools = {
|
||||||
|
[TrainerPoolTier.COMMON]: [
|
||||||
|
SpeciesId.SABLEYE,
|
||||||
|
SpeciesId.BUDEW,
|
||||||
|
SpeciesId.COMBEE,
|
||||||
|
SpeciesId.SHELLOS,
|
||||||
|
SpeciesId.NOSEPASS,
|
||||||
],
|
],
|
||||||
|
[TrainerPoolTier.UNCOMMON]: [SpeciesId.GLIGAR, SpeciesId.SWINUB, SpeciesId.DUSKULL, SpeciesId.SNOVER],
|
||||||
|
[TrainerPoolTier.RARE]: [SpeciesId.HISUI_SNEASEL],
|
||||||
|
};
|
||||||
|
|
||||||
|
const GALACTIC_SATURN: TrainerTierPools = {
|
||||||
|
[TrainerPoolTier.COMMON]: [SpeciesId.ZUBAT, SpeciesId.AIPOM, SpeciesId.OCTILLERY, SpeciesId.ABSOL, SpeciesId.SKORUPI],
|
||||||
|
[TrainerPoolTier.UNCOMMON]: [SpeciesId.RHYHORN, SpeciesId.MAGBY, SpeciesId.GALLADE, SpeciesId.SPIRITOMB],
|
||||||
|
[TrainerPoolTier.RARE]: [SpeciesId.OVERQWIL],
|
||||||
};
|
};
|
||||||
|
|
||||||
const PLASMA_ZINZOLIN: TrainerTierPools = {
|
const PLASMA_ZINZOLIN: TrainerTierPools = {
|
||||||
[TrainerPoolTier.COMMON]: [
|
[TrainerPoolTier.COMMON]: [
|
||||||
SpeciesId.SNEASEL,
|
|
||||||
SpeciesId.SWINUB,
|
SpeciesId.SWINUB,
|
||||||
SpeciesId.SNORUNT,
|
SpeciesId.GLALIE,
|
||||||
SpeciesId.SNOVER,
|
SpeciesId.SNOVER,
|
||||||
SpeciesId.TIMBURR,
|
SpeciesId.MUNNA,
|
||||||
SpeciesId.TYMPOLE,
|
SpeciesId.VENIPEDE,
|
||||||
SpeciesId.SANDILE,
|
|
||||||
SpeciesId.DARUMAKA,
|
|
||||||
SpeciesId.VANILLITE,
|
|
||||||
SpeciesId.FOONGUS,
|
|
||||||
SpeciesId.FRILLISH,
|
SpeciesId.FRILLISH,
|
||||||
SpeciesId.JOLTIK,
|
|
||||||
SpeciesId.FERROSEED,
|
|
||||||
SpeciesId.CUBCHOO,
|
SpeciesId.CUBCHOO,
|
||||||
SpeciesId.GALAR_DARUMAKA,
|
SpeciesId.MIENFOO,
|
||||||
],
|
],
|
||||||
[TrainerPoolTier.UNCOMMON]: [
|
[TrainerPoolTier.UNCOMMON]: [
|
||||||
SpeciesId.SPHEAL,
|
|
||||||
SpeciesId.DRILBUR,
|
|
||||||
SpeciesId.SIGILYPH,
|
|
||||||
SpeciesId.YAMASK,
|
|
||||||
SpeciesId.ZORUA,
|
|
||||||
SpeciesId.TYNAMO,
|
|
||||||
SpeciesId.MIENFOO,
|
|
||||||
SpeciesId.GOLETT,
|
|
||||||
SpeciesId.PAWNIARD,
|
|
||||||
SpeciesId.VULLABY,
|
|
||||||
SpeciesId.DURANT,
|
|
||||||
SpeciesId.BERGMITE,
|
SpeciesId.BERGMITE,
|
||||||
SpeciesId.EISCUE,
|
SpeciesId.EISCUE,
|
||||||
SpeciesId.ALOLA_SANDSHREW,
|
SpeciesId.ALOLA_SANDSHREW,
|
||||||
|
SpeciesId.GALAR_DARUMAKA,
|
||||||
SpeciesId.HISUI_ZORUA,
|
SpeciesId.HISUI_ZORUA,
|
||||||
|
SpeciesId.HISUI_BRAVIARY,
|
||||||
],
|
],
|
||||||
[TrainerPoolTier.RARE]: [SpeciesId.DEINO, SpeciesId.FRIGIBAX, SpeciesId.HISUI_BRAVIARY],
|
[TrainerPoolTier.RARE]: [SpeciesId.FRIGIBAX],
|
||||||
};
|
};
|
||||||
|
|
||||||
const PLASMA_COLRESS: TrainerTierPools = {
|
const PLASMA_COLRESS: TrainerTierPools = {
|
||||||
[TrainerPoolTier.COMMON]: [
|
[TrainerPoolTier.COMMON]: [
|
||||||
SpeciesId.MAGNEMITE,
|
|
||||||
SpeciesId.GRIMER,
|
|
||||||
SpeciesId.VOLTORB,
|
SpeciesId.VOLTORB,
|
||||||
SpeciesId.PORYGON,
|
SpeciesId.PORYGON,
|
||||||
SpeciesId.BRONZOR,
|
SpeciesId.NOSEPASS,
|
||||||
SpeciesId.ROTOM,
|
SpeciesId.ROTOM,
|
||||||
SpeciesId.MUNNA,
|
|
||||||
SpeciesId.DWEBBLE,
|
SpeciesId.DWEBBLE,
|
||||||
SpeciesId.FERROSEED,
|
SpeciesId.BLIPBUG,
|
||||||
SpeciesId.ELGYEM,
|
|
||||||
],
|
],
|
||||||
[TrainerPoolTier.UNCOMMON]: [
|
[TrainerPoolTier.UNCOMMON]: [
|
||||||
|
SpeciesId.ELEKID,
|
||||||
|
SpeciesId.MAGBY,
|
||||||
SpeciesId.BELDUM,
|
SpeciesId.BELDUM,
|
||||||
SpeciesId.SIGILYPH,
|
|
||||||
SpeciesId.TIRTOUGA,
|
|
||||||
SpeciesId.ARCHEN,
|
|
||||||
SpeciesId.TYNAMO,
|
|
||||||
SpeciesId.GOLETT,
|
SpeciesId.GOLETT,
|
||||||
SpeciesId.BLIPBUG,
|
[SpeciesId.TIRTOUGA, SpeciesId.ARCHEN],
|
||||||
|
SpeciesId.TYNAMO,
|
||||||
SpeciesId.VAROOM,
|
SpeciesId.VAROOM,
|
||||||
SpeciesId.ALOLA_GRIMER,
|
SpeciesId.ALOLA_GRIMER,
|
||||||
SpeciesId.HISUI_VOLTORB,
|
|
||||||
],
|
],
|
||||||
[TrainerPoolTier.RARE]: [SpeciesId.ELEKID, SpeciesId.MAGBY, SpeciesId.PAWNIARD, SpeciesId.DURALUDON],
|
[TrainerPoolTier.RARE]: [SpeciesId.DURALUDON],
|
||||||
};
|
};
|
||||||
|
|
||||||
const FLARE: TrainerTierPools = {
|
const FLARE: TrainerTierPools = {
|
||||||
[TrainerPoolTier.COMMON]: [
|
[TrainerPoolTier.COMMON]: [
|
||||||
SpeciesId.ELECTRIKE,
|
|
||||||
SpeciesId.SKORUPI,
|
|
||||||
SpeciesId.PURRLOIN,
|
|
||||||
SpeciesId.FOONGUS,
|
SpeciesId.FOONGUS,
|
||||||
|
SpeciesId.SCRAGGY,
|
||||||
|
SpeciesId.DRUDDIGON,
|
||||||
|
SpeciesId.BUNNELBY,
|
||||||
|
SpeciesId.FLETCHLING,
|
||||||
|
SpeciesId.PANCHAM,
|
||||||
|
SpeciesId.ESPURR,
|
||||||
|
SpeciesId.PUMPKABOO,
|
||||||
|
SpeciesId.PHANTUMP,
|
||||||
|
SpeciesId.CLAUNCHER,
|
||||||
|
SpeciesId.HELIOPTILE,
|
||||||
|
SpeciesId.KLEFKI,
|
||||||
|
],
|
||||||
|
[TrainerPoolTier.UNCOMMON]: [
|
||||||
|
SpeciesId.LITWICK,
|
||||||
|
SpeciesId.HEATMOR,
|
||||||
|
SpeciesId.BINACLE,
|
||||||
|
SpeciesId.SKRELP,
|
||||||
|
SpeciesId.BERGMITE,
|
||||||
|
SpeciesId.CAPSAKID,
|
||||||
|
],
|
||||||
|
[TrainerPoolTier.RARE]: [SpeciesId.GOODRA, SpeciesId.HONEDGE],
|
||||||
|
};
|
||||||
|
|
||||||
|
const FLARE_XEROSIC: TrainerTierPools = {
|
||||||
|
[TrainerPoolTier.COMMON]: [
|
||||||
|
SpeciesId.PANCHAM,
|
||||||
|
SpeciesId.BINACLE,
|
||||||
|
SpeciesId.HELIOPTILE,
|
||||||
|
SpeciesId.CLAUNCHER,
|
||||||
SpeciesId.BUNNELBY,
|
SpeciesId.BUNNELBY,
|
||||||
SpeciesId.FLETCHLING,
|
SpeciesId.FLETCHLING,
|
||||||
SpeciesId.LITLEO,
|
SpeciesId.LITLEO,
|
||||||
@ -225,124 +263,92 @@ const FLARE: TrainerTierPools = {
|
|||||||
SpeciesId.HELIOPTILE,
|
SpeciesId.HELIOPTILE,
|
||||||
],
|
],
|
||||||
[TrainerPoolTier.UNCOMMON]: [
|
[TrainerPoolTier.UNCOMMON]: [
|
||||||
SpeciesId.HOUNDOUR,
|
[SpeciesId.AMAURA, SpeciesId.TYRUNT],
|
||||||
SpeciesId.SNEASEL,
|
SpeciesId.SNEASEL,
|
||||||
SpeciesId.LITWICK,
|
SpeciesId.LITWICK,
|
||||||
SpeciesId.HONEDGE,
|
SpeciesId.LITLEO,
|
||||||
SpeciesId.BINACLE,
|
SpeciesId.BINACLE,
|
||||||
SpeciesId.SKRELP,
|
SpeciesId.SKRELP,
|
||||||
SpeciesId.NOIBAT,
|
SpeciesId.NOIBAT,
|
||||||
SpeciesId.PHANTUMP,
|
SpeciesId.PHANTUMP,
|
||||||
SpeciesId.PUMPKABOO,
|
SpeciesId.PUMPKABOO,
|
||||||
],
|
],
|
||||||
[TrainerPoolTier.RARE]: [SpeciesId.GOOMY, SpeciesId.HISUI_AVALUGG],
|
[TrainerPoolTier.RARE]: [SpeciesId.HISUI_GOODRA, SpeciesId.HONEDGE],
|
||||||
};
|
};
|
||||||
|
|
||||||
const AETHER: TrainerTierPools = {
|
const AETHER: TrainerTierPools = {
|
||||||
[TrainerPoolTier.COMMON]: [
|
[TrainerPoolTier.COMMON]: [
|
||||||
SpeciesId.ABRA,
|
SpeciesId.ABRA,
|
||||||
SpeciesId.SLOWPOKE,
|
SpeciesId.SLOWPOKE,
|
||||||
SpeciesId.MAGNEMITE,
|
SpeciesId.MR_MIME,
|
||||||
SpeciesId.EXEGGUTOR,
|
|
||||||
SpeciesId.NATU,
|
SpeciesId.NATU,
|
||||||
|
SpeciesId.MEDITITE,
|
||||||
SpeciesId.BALTOY,
|
SpeciesId.BALTOY,
|
||||||
SpeciesId.MIME_JR,
|
|
||||||
SpeciesId.ELGYEM,
|
|
||||||
SpeciesId.INKAY,
|
SpeciesId.INKAY,
|
||||||
SpeciesId.BRUXISH,
|
SpeciesId.EXEGGCUTE,
|
||||||
SpeciesId.BLIPBUG,
|
|
||||||
SpeciesId.ALOLA_RAICHU,
|
|
||||||
],
|
],
|
||||||
[TrainerPoolTier.UNCOMMON]: [
|
[TrainerPoolTier.UNCOMMON]: [
|
||||||
SpeciesId.RALTS,
|
SpeciesId.PORYGON,
|
||||||
SpeciesId.MEDITITE,
|
[SpeciesId.STANTLER, SpeciesId.GIRAFARIG],
|
||||||
SpeciesId.BELDUM,
|
|
||||||
SpeciesId.SOLOSIS,
|
SpeciesId.SOLOSIS,
|
||||||
SpeciesId.HATENNA,
|
SpeciesId.HATENNA,
|
||||||
SpeciesId.STANTLER,
|
|
||||||
SpeciesId.GIRAFARIG,
|
|
||||||
SpeciesId.ALOLA_GRIMER,
|
SpeciesId.ALOLA_GRIMER,
|
||||||
SpeciesId.GALAR_SLOWPOKE,
|
SpeciesId.GALAR_SLOWKING,
|
||||||
],
|
],
|
||||||
[TrainerPoolTier.RARE]: [SpeciesId.PORYGON, SpeciesId.ARMAROUGE],
|
[TrainerPoolTier.RARE]: [SpeciesId.BELDUM],
|
||||||
};
|
};
|
||||||
|
|
||||||
const SKULL: TrainerTierPools = {
|
const SKULL: TrainerTierPools = {
|
||||||
[TrainerPoolTier.COMMON]: [
|
[TrainerPoolTier.COMMON]: [
|
||||||
SpeciesId.GASTLY,
|
|
||||||
SpeciesId.KOFFING,
|
|
||||||
SpeciesId.ZUBAT,
|
|
||||||
SpeciesId.VENONAT,
|
SpeciesId.VENONAT,
|
||||||
SpeciesId.STUNKY,
|
SpeciesId.GASTLY,
|
||||||
|
SpeciesId.ZUBAT,
|
||||||
SpeciesId.CROAGUNK,
|
SpeciesId.CROAGUNK,
|
||||||
SpeciesId.VENIPEDE,
|
SpeciesId.VENIPEDE,
|
||||||
SpeciesId.SCRAGGY,
|
|
||||||
SpeciesId.MAREANIE,
|
|
||||||
SpeciesId.FOMANTIS,
|
SpeciesId.FOMANTIS,
|
||||||
SpeciesId.ALOLA_GRIMER,
|
SpeciesId.TOXEL,
|
||||||
|
SpeciesId.PALDEA_WOOPER,
|
||||||
],
|
],
|
||||||
[TrainerPoolTier.UNCOMMON]: [
|
[TrainerPoolTier.UNCOMMON]: [
|
||||||
SpeciesId.NIDORAN_F,
|
SpeciesId.NIDORAN_F,
|
||||||
SpeciesId.SKORUPI,
|
SpeciesId.SKORUPI,
|
||||||
SpeciesId.PAWNIARD,
|
|
||||||
SpeciesId.VULLABY,
|
SpeciesId.VULLABY,
|
||||||
SpeciesId.TOXEL,
|
SpeciesId.SKRELP,
|
||||||
SpeciesId.GLIMMET,
|
SpeciesId.GLIMMET,
|
||||||
SpeciesId.PALDEA_WOOPER,
|
SpeciesId.GALAR_SLOWBRO,
|
||||||
SpeciesId.GALAR_SLOWPOKE,
|
|
||||||
],
|
],
|
||||||
[TrainerPoolTier.RARE]: [SpeciesId.SKRELP, SpeciesId.HISUI_SNEASEL],
|
[TrainerPoolTier.RARE]: [SpeciesId.HISUI_SNEASEL],
|
||||||
};
|
};
|
||||||
|
|
||||||
const MACRO_COSMOS: TrainerTierPools = {
|
const MACRO_COSMOS: TrainerTierPools = {
|
||||||
[TrainerPoolTier.COMMON]: [
|
[TrainerPoolTier.COMMON]: [
|
||||||
SpeciesId.VULPIX,
|
SpeciesId.SMOOCHUM,
|
||||||
SpeciesId.FEEBAS,
|
|
||||||
SpeciesId.MAWILE,
|
SpeciesId.MAWILE,
|
||||||
|
SpeciesId.VESPIQUEN,
|
||||||
SpeciesId.FROSLASS,
|
SpeciesId.FROSLASS,
|
||||||
SpeciesId.GOTHITA,
|
SpeciesId.GOTHITA,
|
||||||
SpeciesId.FLABEBE,
|
SpeciesId.SPRITZEE,
|
||||||
SpeciesId.SALANDIT,
|
SpeciesId.SALANDIT,
|
||||||
SpeciesId.TSAREENA,
|
|
||||||
SpeciesId.SINISTEA,
|
|
||||||
SpeciesId.HATENNA,
|
|
||||||
SpeciesId.INDEEDEE,
|
SpeciesId.INDEEDEE,
|
||||||
SpeciesId.GALAR_PONYTA,
|
SpeciesId.HATENNA,
|
||||||
],
|
],
|
||||||
[TrainerPoolTier.UNCOMMON]: [
|
[TrainerPoolTier.UNCOMMON]: [SpeciesId.VULLABY, SpeciesId.FLABEBE, SpeciesId.TINKATINK, SpeciesId.GALAR_PONYTA],
|
||||||
SpeciesId.TOGEPI,
|
[TrainerPoolTier.RARE]: [SpeciesId.HYDRAPPLE],
|
||||||
SpeciesId.VULLABY,
|
|
||||||
SpeciesId.MAREANIE,
|
|
||||||
SpeciesId.CUFANT,
|
|
||||||
SpeciesId.TINKATINK,
|
|
||||||
SpeciesId.ALOLA_VULPIX,
|
|
||||||
SpeciesId.GALAR_CORSOLA,
|
|
||||||
],
|
|
||||||
[TrainerPoolTier.RARE]: [SpeciesId.APPLIN, SpeciesId.HISUI_LILLIGANT],
|
|
||||||
};
|
};
|
||||||
|
|
||||||
const STAR_DARK: TrainerTierPools = {
|
const STAR_DARK: TrainerTierPools = {
|
||||||
[TrainerPoolTier.COMMON]: [
|
[TrainerPoolTier.COMMON]: [
|
||||||
SpeciesId.MURKROW,
|
SpeciesId.MURKROW,
|
||||||
SpeciesId.SEEDOT,
|
|
||||||
SpeciesId.SABLEYE,
|
SpeciesId.SABLEYE,
|
||||||
SpeciesId.CACNEA,
|
SpeciesId.CACNEA,
|
||||||
|
SpeciesId.CORPHISH,
|
||||||
SpeciesId.STUNKY,
|
SpeciesId.STUNKY,
|
||||||
SpeciesId.SANDILE,
|
SpeciesId.SANDILE,
|
||||||
SpeciesId.INKAY,
|
|
||||||
SpeciesId.NYMBLE,
|
SpeciesId.NYMBLE,
|
||||||
SpeciesId.MASCHIFF,
|
|
||||||
],
|
|
||||||
[TrainerPoolTier.UNCOMMON]: [
|
|
||||||
SpeciesId.UMBREON,
|
|
||||||
SpeciesId.CORPHISH,
|
|
||||||
SpeciesId.SNEASEL,
|
|
||||||
SpeciesId.ZORUA,
|
|
||||||
SpeciesId.IMPIDIMP,
|
|
||||||
SpeciesId.BOMBIRDIER,
|
SpeciesId.BOMBIRDIER,
|
||||||
SpeciesId.GALAR_ZIGZAGOON,
|
|
||||||
],
|
],
|
||||||
[TrainerPoolTier.RARE]: [SpeciesId.DEINO, SpeciesId.SPRIGATITO],
|
[TrainerPoolTier.UNCOMMON]: [SpeciesId.SNEASEL, SpeciesId.SPIRITOMB, SpeciesId.ZORUA, SpeciesId.GALAR_ZIGZAGOON],
|
||||||
|
[TrainerPoolTier.RARE]: [SpeciesId.SPRIGATITO],
|
||||||
};
|
};
|
||||||
|
|
||||||
const STAR_FIRE: TrainerTierPools = {
|
const STAR_FIRE: TrainerTierPools = {
|
||||||
@ -353,101 +359,77 @@ const STAR_FIRE: TrainerTierPools = {
|
|||||||
SpeciesId.TORKOAL,
|
SpeciesId.TORKOAL,
|
||||||
SpeciesId.FLETCHLING,
|
SpeciesId.FLETCHLING,
|
||||||
SpeciesId.LITLEO,
|
SpeciesId.LITLEO,
|
||||||
SpeciesId.SIZZLIPEDE,
|
SpeciesId.ORICORIO,
|
||||||
SpeciesId.ROLYCOLY,
|
SpeciesId.ROLYCOLY,
|
||||||
SpeciesId.CAPSAKID,
|
|
||||||
],
|
],
|
||||||
[TrainerPoolTier.UNCOMMON]: [
|
[TrainerPoolTier.UNCOMMON]: [SpeciesId.DARUMAKA, SpeciesId.TURTONATOR, SpeciesId.SIZZLIPEDE, SpeciesId.CERULEDGE],
|
||||||
SpeciesId.PONYTA,
|
[TrainerPoolTier.RARE]: [SpeciesId.FUECOCO],
|
||||||
SpeciesId.FLAREON,
|
|
||||||
SpeciesId.MAGBY,
|
|
||||||
SpeciesId.DARUMAKA,
|
|
||||||
SpeciesId.LITWICK,
|
|
||||||
SpeciesId.SALANDIT,
|
|
||||||
SpeciesId.TURTONATOR,
|
|
||||||
],
|
|
||||||
[TrainerPoolTier.RARE]: [SpeciesId.LARVESTA, SpeciesId.FUECOCO],
|
|
||||||
};
|
};
|
||||||
|
|
||||||
const STAR_POISON: TrainerTierPools = {
|
const STAR_POISON: TrainerTierPools = {
|
||||||
[TrainerPoolTier.COMMON]: [
|
[TrainerPoolTier.COMMON]: [
|
||||||
SpeciesId.GRIMER,
|
|
||||||
SpeciesId.VENONAT,
|
SpeciesId.VENONAT,
|
||||||
|
SpeciesId.GRIMER,
|
||||||
|
SpeciesId.GULPIN,
|
||||||
SpeciesId.SEVIPER,
|
SpeciesId.SEVIPER,
|
||||||
SpeciesId.STUNKY,
|
SpeciesId.STUNKY,
|
||||||
SpeciesId.FOONGUS,
|
SpeciesId.FOONGUS,
|
||||||
SpeciesId.MAREANIE,
|
SpeciesId.MAREANIE,
|
||||||
SpeciesId.TOXEL,
|
|
||||||
SpeciesId.GRAFAIAI,
|
|
||||||
SpeciesId.PALDEA_WOOPER,
|
|
||||||
],
|
],
|
||||||
[TrainerPoolTier.UNCOMMON]: [
|
[TrainerPoolTier.UNCOMMON]: [SpeciesId.GASTLY, SpeciesId.SALAZZLE, SpeciesId.GLIMMET, SpeciesId.PALDEA_WOOPER],
|
||||||
SpeciesId.ZUBAT,
|
[TrainerPoolTier.RARE]: [SpeciesId.BULBASAUR],
|
||||||
SpeciesId.GASTLY,
|
|
||||||
SpeciesId.SKRELP,
|
|
||||||
SpeciesId.OVERQWIL,
|
|
||||||
SpeciesId.ALOLA_GRIMER,
|
|
||||||
SpeciesId.GALAR_SLOWPOKE,
|
|
||||||
],
|
|
||||||
[TrainerPoolTier.RARE]: [SpeciesId.GLIMMET, SpeciesId.BULBASAUR],
|
|
||||||
};
|
};
|
||||||
|
|
||||||
const STAR_FAIRY: TrainerTierPools = {
|
const STAR_FAIRY: TrainerTierPools = {
|
||||||
[TrainerPoolTier.COMMON]: [
|
[TrainerPoolTier.COMMON]: [
|
||||||
|
SpeciesId.CLEFFA,
|
||||||
SpeciesId.IGGLYBUFF,
|
SpeciesId.IGGLYBUFF,
|
||||||
|
SpeciesId.MR_MIME,
|
||||||
SpeciesId.AZURILL,
|
SpeciesId.AZURILL,
|
||||||
SpeciesId.COTTONEE,
|
SpeciesId.DEDENNE,
|
||||||
SpeciesId.FLABEBE,
|
|
||||||
SpeciesId.KLEFKI,
|
SpeciesId.KLEFKI,
|
||||||
SpeciesId.CUTIEFLY,
|
|
||||||
SpeciesId.HATENNA,
|
SpeciesId.HATENNA,
|
||||||
SpeciesId.TINKATINK,
|
SpeciesId.IMPIDIMP,
|
||||||
],
|
],
|
||||||
[TrainerPoolTier.UNCOMMON]: [
|
[TrainerPoolTier.UNCOMMON]: [
|
||||||
SpeciesId.CLEFFA,
|
SpeciesId.RALTS,
|
||||||
SpeciesId.TOGEPI,
|
SpeciesId.FLABEBE,
|
||||||
SpeciesId.GARDEVOIR,
|
SpeciesId.MIMIKYU,
|
||||||
SpeciesId.SYLVEON,
|
|
||||||
SpeciesId.MIMIKYU,
|
SpeciesId.MIMIKYU,
|
||||||
SpeciesId.IMPIDIMP,
|
|
||||||
SpeciesId.ALOLA_VULPIX,
|
SpeciesId.ALOLA_VULPIX,
|
||||||
],
|
],
|
||||||
[TrainerPoolTier.RARE]: [SpeciesId.GALAR_PONYTA, SpeciesId.POPPLIO],
|
[TrainerPoolTier.RARE]: [SpeciesId.POPPLIO],
|
||||||
};
|
};
|
||||||
|
|
||||||
const STAR_FIGHTING: TrainerTierPools = {
|
const STAR_FIGHTING: TrainerTierPools = {
|
||||||
[TrainerPoolTier.COMMON]: [
|
[TrainerPoolTier.COMMON]: [
|
||||||
SpeciesId.TYROGUE,
|
|
||||||
SpeciesId.SHROOMISH,
|
SpeciesId.SHROOMISH,
|
||||||
SpeciesId.MAKUHITA,
|
SpeciesId.MAKUHITA,
|
||||||
|
[SpeciesId.MEDITITE, SpeciesId.GALLADE],
|
||||||
SpeciesId.RIOLU,
|
SpeciesId.RIOLU,
|
||||||
SpeciesId.CROAGUNK,
|
SpeciesId.CROAGUNK,
|
||||||
SpeciesId.SCRAGGY,
|
|
||||||
SpeciesId.MIENFOO,
|
|
||||||
SpeciesId.PASSIMIAN,
|
SpeciesId.PASSIMIAN,
|
||||||
|
SpeciesId.FALINKS,
|
||||||
SpeciesId.PAWMI,
|
SpeciesId.PAWMI,
|
||||||
],
|
],
|
||||||
[TrainerPoolTier.UNCOMMON]: [
|
[TrainerPoolTier.UNCOMMON]: [SpeciesId.HERACROSS, SpeciesId.HAWLUCHA, SpeciesId.CRABRAWLER, SpeciesId.PALDEA_TAUROS],
|
||||||
SpeciesId.MEDITITE,
|
[TrainerPoolTier.RARE]: [SpeciesId.QUAXLY],
|
||||||
SpeciesId.GALLADE,
|
|
||||||
SpeciesId.TIMBURR,
|
|
||||||
SpeciesId.HAWLUCHA,
|
|
||||||
SpeciesId.STUFFUL,
|
|
||||||
SpeciesId.FALINKS,
|
|
||||||
SpeciesId.FLAMIGO,
|
|
||||||
SpeciesId.PALDEA_TAUROS,
|
|
||||||
],
|
|
||||||
[TrainerPoolTier.RARE]: [SpeciesId.JANGMO_O, SpeciesId.QUAXLY],
|
|
||||||
};
|
};
|
||||||
|
|
||||||
export type EvilTeam =
|
export type EvilTeam =
|
||||||
| "rocket"
|
| "rocket_petrel"
|
||||||
|
| "rocket_archer"
|
||||||
|
| "rocket_ariana"
|
||||||
|
| "rocket_proton"
|
||||||
| "magma"
|
| "magma"
|
||||||
| "aqua"
|
| "aqua"
|
||||||
| "galactic"
|
| "galactic_mars"
|
||||||
|
| "galactic_jupiter"
|
||||||
|
| "galactic_saturn"
|
||||||
| "plasma_zinzolin"
|
| "plasma_zinzolin"
|
||||||
| "plasma_colress"
|
| "plasma_colress"
|
||||||
| "flare"
|
| "flare"
|
||||||
|
| "flare_xerosic"
|
||||||
| "aether"
|
| "aether"
|
||||||
| "skull"
|
| "skull"
|
||||||
| "macro_cosmos"
|
| "macro_cosmos"
|
||||||
@ -459,13 +441,19 @@ export type EvilTeam =
|
|||||||
|
|
||||||
/** Trainer pools for each evil admin team */
|
/** Trainer pools for each evil admin team */
|
||||||
export const evilAdminTrainerPools: Record<EvilTeam, TrainerTierPools> = {
|
export const evilAdminTrainerPools: Record<EvilTeam, TrainerTierPools> = {
|
||||||
rocket: ROCKET,
|
rocket_petrel: ROCKET_PETREL,
|
||||||
|
rocket_archer: ROCKET_ARCHER,
|
||||||
|
rocket_ariana: ROCKET_ARIANA,
|
||||||
|
rocket_proton: ROCKET_PROTON,
|
||||||
magma: MAGMA,
|
magma: MAGMA,
|
||||||
aqua: AQUA,
|
aqua: AQUA,
|
||||||
galactic: GALACTIC,
|
galactic_mars: GALACTIC_MARS,
|
||||||
|
galactic_jupiter: GALACTIC_JUPITER,
|
||||||
|
galactic_saturn: GALACTIC_SATURN,
|
||||||
plasma_zinzolin: PLASMA_ZINZOLIN,
|
plasma_zinzolin: PLASMA_ZINZOLIN,
|
||||||
plasma_colress: PLASMA_COLRESS,
|
plasma_colress: PLASMA_COLRESS,
|
||||||
flare: FLARE,
|
flare: FLARE,
|
||||||
|
flare_xerosic: FLARE_XEROSIC,
|
||||||
aether: AETHER,
|
aether: AETHER,
|
||||||
macro_cosmos: MACRO_COSMOS,
|
macro_cosmos: MACRO_COSMOS,
|
||||||
skull: SKULL,
|
skull: SKULL,
|
||||||
|
|||||||
@ -127,12 +127,12 @@ export const classicFixedBattles: FixedBattleConfigs = {
|
|||||||
.setGetTrainerFunc(
|
.setGetTrainerFunc(
|
||||||
getRandomTrainerFunc(
|
getRandomTrainerFunc(
|
||||||
[
|
[
|
||||||
[TrainerType.ARCHER, TrainerType.ARIANA, TrainerType.PROTON, TrainerType.PETREL],
|
TrainerType.PETREL,
|
||||||
[TrainerType.TABITHA, TrainerType.COURTNEY],
|
[TrainerType.TABITHA, TrainerType.COURTNEY],
|
||||||
[TrainerType.MATT, TrainerType.SHELLY],
|
[TrainerType.MATT, TrainerType.SHELLY],
|
||||||
[TrainerType.JUPITER, TrainerType.MARS, TrainerType.SATURN],
|
[TrainerType.JUPITER, TrainerType.MARS, TrainerType.SATURN],
|
||||||
[TrainerType.ZINZOLIN, TrainerType.COLRESS],
|
[TrainerType.ZINZOLIN, TrainerType.COLRESS],
|
||||||
[TrainerType.XEROSIC, TrainerType.BRYONY],
|
TrainerType.BRYONY,
|
||||||
TrainerType.FABA,
|
TrainerType.FABA,
|
||||||
TrainerType.PLUMERIA,
|
TrainerType.PLUMERIA,
|
||||||
TrainerType.OLEANA,
|
TrainerType.OLEANA,
|
||||||
@ -180,12 +180,12 @@ export const classicFixedBattles: FixedBattleConfigs = {
|
|||||||
.setGetTrainerFunc(
|
.setGetTrainerFunc(
|
||||||
getRandomTrainerFunc(
|
getRandomTrainerFunc(
|
||||||
[
|
[
|
||||||
[TrainerType.ARCHER, TrainerType.ARIANA, TrainerType.PROTON, TrainerType.PETREL],
|
[TrainerType.ARCHER, TrainerType.ARIANA, TrainerType.PROTON],
|
||||||
[TrainerType.TABITHA, TrainerType.COURTNEY],
|
[TrainerType.TABITHA, TrainerType.COURTNEY],
|
||||||
[TrainerType.MATT, TrainerType.SHELLY],
|
[TrainerType.MATT, TrainerType.SHELLY],
|
||||||
[TrainerType.JUPITER, TrainerType.MARS, TrainerType.SATURN],
|
[TrainerType.JUPITER, TrainerType.MARS, TrainerType.SATURN],
|
||||||
[TrainerType.ZINZOLIN, TrainerType.COLRESS],
|
TrainerType.ZINZOLIN,
|
||||||
[TrainerType.XEROSIC, TrainerType.BRYONY],
|
TrainerType.XEROSIC,
|
||||||
TrainerType.FABA,
|
TrainerType.FABA,
|
||||||
TrainerType.PLUMERIA,
|
TrainerType.PLUMERIA,
|
||||||
TrainerType.OLEANA,
|
TrainerType.OLEANA,
|
||||||
@ -241,6 +241,27 @@ export const classicFixedBattles: FixedBattleConfigs = {
|
|||||||
],
|
],
|
||||||
allowLuckUpgrades: false,
|
allowLuckUpgrades: false,
|
||||||
}),
|
}),
|
||||||
|
[ClassicFixedBossWaves.EVIL_ADMIN_3]: new FixedBattleConfig()
|
||||||
|
.setBattleType(BattleType.TRAINER)
|
||||||
|
.setSeedOffsetWave(ClassicFixedBossWaves.EVIL_GRUNT_1)
|
||||||
|
.setGetTrainerFunc(
|
||||||
|
getRandomTrainerFunc(
|
||||||
|
[
|
||||||
|
[TrainerType.ARCHER, TrainerType.ARIANA, TrainerType.PROTON],
|
||||||
|
[TrainerType.TABITHA, TrainerType.COURTNEY],
|
||||||
|
[TrainerType.MATT, TrainerType.SHELLY],
|
||||||
|
[TrainerType.JUPITER, TrainerType.MARS, TrainerType.SATURN],
|
||||||
|
[TrainerType.ZINZOLIN, TrainerType.COLRESS],
|
||||||
|
[TrainerType.XEROSIC, TrainerType.BRYONY],
|
||||||
|
TrainerType.FABA,
|
||||||
|
TrainerType.PLUMERIA,
|
||||||
|
TrainerType.OLEANA,
|
||||||
|
[TrainerType.GIACOMO, TrainerType.MELA, TrainerType.ATTICUS, TrainerType.ORTEGA, TrainerType.ERI],
|
||||||
|
],
|
||||||
|
true,
|
||||||
|
2,
|
||||||
|
),
|
||||||
|
),
|
||||||
[ClassicFixedBossWaves.EVIL_BOSS_2]: new FixedBattleConfig()
|
[ClassicFixedBossWaves.EVIL_BOSS_2]: new FixedBattleConfig()
|
||||||
.setBattleType(BattleType.TRAINER)
|
.setBattleType(BattleType.TRAINER)
|
||||||
.setSeedOffsetWave(ClassicFixedBossWaves.EVIL_GRUNT_1)
|
.setSeedOffsetWave(ClassicFixedBossWaves.EVIL_GRUNT_1)
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@ -186,6 +186,7 @@ export const trainerPartyTemplates = {
|
|||||||
new TrainerPartyTemplate(1, PartyMemberStrength.STRONG, undefined, undefined, EvoLevelThresholdKind.STRONG),
|
new TrainerPartyTemplate(1, PartyMemberStrength.STRONG, undefined, undefined, EvoLevelThresholdKind.STRONG),
|
||||||
new TrainerPartyTemplate(1, PartyMemberStrength.STRONGER, undefined, undefined, EvoLevelThresholdKind.STRONG),
|
new TrainerPartyTemplate(1, PartyMemberStrength.STRONGER, undefined, undefined, EvoLevelThresholdKind.STRONG),
|
||||||
),
|
),
|
||||||
|
/** 3 Average 2 Strong 1 Stronger */
|
||||||
GYM_LEADER_5: new TrainerPartyCompoundTemplate(
|
GYM_LEADER_5: new TrainerPartyCompoundTemplate(
|
||||||
new TrainerPartyTemplate(3, PartyMemberStrength.AVERAGE, undefined, undefined, EvoLevelThresholdKind.STRONG),
|
new TrainerPartyTemplate(3, PartyMemberStrength.AVERAGE, undefined, undefined, EvoLevelThresholdKind.STRONG),
|
||||||
new TrainerPartyTemplate(2, PartyMemberStrength.STRONG, undefined, undefined, EvoLevelThresholdKind.STRONG),
|
new TrainerPartyTemplate(2, PartyMemberStrength.STRONG, undefined, undefined, EvoLevelThresholdKind.STRONG),
|
||||||
@ -254,7 +255,7 @@ export function getEvilGruntPartyTemplate(): TrainerPartyTemplate {
|
|||||||
return trainerPartyTemplates.TWO_AVG_ONE_STRONG;
|
return trainerPartyTemplates.TWO_AVG_ONE_STRONG;
|
||||||
}
|
}
|
||||||
if (waveIndex <= ClassicFixedBossWaves.EVIL_ADMIN_1) {
|
if (waveIndex <= ClassicFixedBossWaves.EVIL_ADMIN_1) {
|
||||||
return trainerPartyTemplates.GYM_LEADER_4; // 3avg 1 strong 1 stronger
|
return trainerPartyTemplates.GYM_LEADER_5; // 3avg 2 strong 1 stronger
|
||||||
}
|
}
|
||||||
return trainerPartyTemplates.GYM_LEADER_5; // 3 avg 2 strong 1 stronger
|
return trainerPartyTemplates.GYM_LEADER_5; // 3 avg 2 strong 1 stronger
|
||||||
}
|
}
|
||||||
|
|||||||
@ -12,6 +12,7 @@ export enum ClassicFixedBossWaves {
|
|||||||
EVIL_ADMIN_2 = 114,
|
EVIL_ADMIN_2 = 114,
|
||||||
EVIL_BOSS_1 = 115,
|
EVIL_BOSS_1 = 115,
|
||||||
RIVAL_5 = 145,
|
RIVAL_5 = 145,
|
||||||
|
EVIL_ADMIN_3 = 164,
|
||||||
EVIL_BOSS_2 = 165,
|
EVIL_BOSS_2 = 165,
|
||||||
ELITE_FOUR_1 = 182,
|
ELITE_FOUR_1 = 182,
|
||||||
ELITE_FOUR_2 = 184,
|
ELITE_FOUR_2 = 184,
|
||||||
|
|||||||
@ -452,20 +452,21 @@ export class Trainer extends Phaser.GameObjects.Container {
|
|||||||
genNewPartyMemberSpecies(level: number, strength: PartyMemberStrength, attempt?: number): PokemonSpecies {
|
genNewPartyMemberSpecies(level: number, strength: PartyMemberStrength, attempt?: number): PokemonSpecies {
|
||||||
const battle = globalScene.currentBattle;
|
const battle = globalScene.currentBattle;
|
||||||
const template = this.getPartyTemplate();
|
const template = this.getPartyTemplate();
|
||||||
|
|
||||||
let baseSpecies: PokemonSpecies;
|
let baseSpecies: PokemonSpecies;
|
||||||
if (this.config.speciesPools) {
|
if (this.config.speciesPools) {
|
||||||
const tierValue = randSeedInt(512);
|
const tierValue = randSeedInt(512);
|
||||||
let tier =
|
let tier: TrainerPoolTier;
|
||||||
tierValue >= 156
|
if (tierValue >= 156) {
|
||||||
? TrainerPoolTier.COMMON
|
tier = TrainerPoolTier.COMMON;
|
||||||
: tierValue >= 32
|
} else if (tierValue >= 32) {
|
||||||
? TrainerPoolTier.UNCOMMON
|
tier = TrainerPoolTier.UNCOMMON;
|
||||||
: tierValue >= 6
|
} else if (tierValue >= 6) {
|
||||||
? TrainerPoolTier.RARE
|
tier = TrainerPoolTier.RARE;
|
||||||
: tierValue >= 1
|
} else if (tierValue >= 1) {
|
||||||
? TrainerPoolTier.SUPER_RARE
|
tier = TrainerPoolTier.SUPER_RARE;
|
||||||
: TrainerPoolTier.ULTRA_RARE;
|
} else {
|
||||||
|
tier = TrainerPoolTier.ULTRA_RARE;
|
||||||
|
}
|
||||||
console.log(TrainerPoolTier[tier]);
|
console.log(TrainerPoolTier[tier]);
|
||||||
while (!this.config.speciesPools.hasOwnProperty(tier) || this.config.speciesPools[tier].length === 0) {
|
while (!this.config.speciesPools.hasOwnProperty(tier) || this.config.speciesPools[tier].length === 0) {
|
||||||
console.log(
|
console.log(
|
||||||
@ -474,7 +475,11 @@ export class Trainer extends Phaser.GameObjects.Container {
|
|||||||
tier--;
|
tier--;
|
||||||
}
|
}
|
||||||
const tierPool = this.config.speciesPools[tier];
|
const tierPool = this.config.speciesPools[tier];
|
||||||
baseSpecies = getPokemonSpecies(randSeedItem(tierPool));
|
let rolledSpecies = randSeedItem(tierPool);
|
||||||
|
while (typeof rolledSpecies !== "number") {
|
||||||
|
rolledSpecies = randSeedItem(tierPool);
|
||||||
|
}
|
||||||
|
baseSpecies = getPokemonSpecies(rolledSpecies);
|
||||||
} else {
|
} else {
|
||||||
baseSpecies = globalScene.randomSpecies(battle.waveIndex, level, false, this.config.speciesFilter);
|
baseSpecies = globalScene.randomSpecies(battle.waveIndex, level, false, this.config.speciesFilter);
|
||||||
}
|
}
|
||||||
|
|||||||
60
src/utils/random.ts
Normal file
60
src/utils/random.ts
Normal file
@ -0,0 +1,60 @@
|
|||||||
|
/*
|
||||||
|
* SPDX-FileCopyrightText: 2025 Pagefault Games
|
||||||
|
* SPDX-FileContributor: SirzBenjie
|
||||||
|
*
|
||||||
|
* SPDX-License-Identifier: AGPL-3.0-only
|
||||||
|
*/
|
||||||
|
|
||||||
|
/**
|
||||||
|
* A collection of utility methods for working with the game's RNG
|
||||||
|
* @module
|
||||||
|
*/
|
||||||
|
|
||||||
|
import { globalScene } from "#app/global-scene";
|
||||||
|
import type { Mutable } from "#types/type-helpers";
|
||||||
|
import { randSeedItem } from "#utils/common";
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Select a random element using an offset such that the chosen element is
|
||||||
|
* guaranteed to be unique from the last `seedOffset` selections.
|
||||||
|
*
|
||||||
|
* @remarks
|
||||||
|
* If the seed offset is greater than the number of choices, this will just choose a random element
|
||||||
|
*
|
||||||
|
* @param arr - The array of items to choose from
|
||||||
|
* @param scene - (default {@linkcode globalScene}); The scene to use for random seeding
|
||||||
|
* @returns A random item from the array that is guaranteed to be different from the
|
||||||
|
* @typeParam T - The type of items in the array
|
||||||
|
*
|
||||||
|
* @example
|
||||||
|
* ```
|
||||||
|
* const choices = ['a', 'b', 'c', 'd'];
|
||||||
|
* const choice1 = randSeedUniqueItem(choices, 0);
|
||||||
|
* const choice2 = randSeedUniqueItem(choices, 1);
|
||||||
|
* const choice3 = randSeedUniqueItem(choices, 2);
|
||||||
|
* assert(choice2 !== choice1);
|
||||||
|
* assert(choice3 !== choice1);
|
||||||
|
* assert(choice3 !== choice2);
|
||||||
|
* ```
|
||||||
|
*/
|
||||||
|
export function randSeedUniqueItem<T>(choices: readonly T[], seedOffset: number, scene = globalScene): T {
|
||||||
|
if (seedOffset === 0 || choices.length <= seedOffset) {
|
||||||
|
// cast to mutable is safe because randSeedItem does not actually modify the array
|
||||||
|
return randSeedItem(choices as Mutable<typeof choices>);
|
||||||
|
}
|
||||||
|
|
||||||
|
// TODO: Refactor `excuteWithSeedOffset` and pull it into this module
|
||||||
|
let choice: T;
|
||||||
|
|
||||||
|
scene.executeWithSeedOffset(() => {
|
||||||
|
const curChoices = choices.slice();
|
||||||
|
for (let i = 0; i < seedOffset; i++) {
|
||||||
|
const previousChoice = randSeedItem(curChoices);
|
||||||
|
curChoices.splice(curChoices.indexOf(previousChoice), 1);
|
||||||
|
}
|
||||||
|
choice = randSeedItem(curChoices);
|
||||||
|
}, seedOffset);
|
||||||
|
|
||||||
|
// Bang is safe since there are at least `seedOffset` choices, so the method above is guaranteed to set `choice`
|
||||||
|
return choice!;
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue
Block a user