mirror of
https://github.com/pagefaultgames/pokerogue.git
synced 2025-07-19 14:52:19 +02:00
Move TrainerPartyTemplate to its own file
This commit is contained in:
parent
a5d6fa83d8
commit
ff85695a73
@ -9,12 +9,9 @@ import {
|
|||||||
setEncounterRewards,
|
setEncounterRewards,
|
||||||
transitionMysteryEncounterIntroVisuals,
|
transitionMysteryEncounterIntroVisuals,
|
||||||
} from "#app/data/mystery-encounters/utils/encounter-phase-utils";
|
} from "#app/data/mystery-encounters/utils/encounter-phase-utils";
|
||||||
import {
|
import { getRandomPartyMemberFunc, trainerConfigs } from "#app/data/trainers/trainer-config";
|
||||||
getRandomPartyMemberFunc,
|
import { TrainerPartyCompoundTemplate } from "#app/data/trainers/TrainerPartyTemplate";
|
||||||
trainerConfigs,
|
import { TrainerPartyTemplate } from "#app/data/trainers/TrainerPartyTemplate";
|
||||||
TrainerPartyCompoundTemplate,
|
|
||||||
TrainerPartyTemplate,
|
|
||||||
} from "#app/data/trainers/trainer-config";
|
|
||||||
import { TrainerSlot } from "#enums/trainer-slot";
|
import { TrainerSlot } from "#enums/trainer-slot";
|
||||||
import { MysteryEncounterType } from "#enums/mystery-encounter-type";
|
import { MysteryEncounterType } from "#enums/mystery-encounter-type";
|
||||||
import { PartyMemberStrength } from "#enums/party-member-strength";
|
import { PartyMemberStrength } from "#enums/party-member-strength";
|
||||||
|
@ -8,7 +8,9 @@ import {
|
|||||||
setEncounterRewards,
|
setEncounterRewards,
|
||||||
transitionMysteryEncounterIntroVisuals,
|
transitionMysteryEncounterIntroVisuals,
|
||||||
} from "#app/data/mystery-encounters/utils/encounter-phase-utils";
|
} from "#app/data/mystery-encounters/utils/encounter-phase-utils";
|
||||||
import { trainerConfigs, TrainerPartyCompoundTemplate, TrainerPartyTemplate } from "#app/data/trainers/trainer-config";
|
import { trainerConfigs } from "#app/data/trainers/trainer-config";
|
||||||
|
import { TrainerPartyCompoundTemplate } from "#app/data/trainers/TrainerPartyTemplate";
|
||||||
|
import { TrainerPartyTemplate } from "#app/data/trainers/TrainerPartyTemplate";
|
||||||
import { ModifierTier } from "#app/modifier/modifier-tier";
|
import { ModifierTier } from "#app/modifier/modifier-tier";
|
||||||
import type { PokemonHeldItemModifierType } from "#app/modifier/modifier-type";
|
import type { PokemonHeldItemModifierType } from "#app/modifier/modifier-type";
|
||||||
import { ModifierPoolType, modifierTypes } from "#app/modifier/modifier-type";
|
import { ModifierPoolType, modifierTypes } from "#app/modifier/modifier-type";
|
||||||
|
@ -3,12 +3,10 @@ import {
|
|||||||
initBattleWithEnemyConfig,
|
initBattleWithEnemyConfig,
|
||||||
setEncounterRewards,
|
setEncounterRewards,
|
||||||
} from "#app/data/mystery-encounters/utils/encounter-phase-utils";
|
} from "#app/data/mystery-encounters/utils/encounter-phase-utils";
|
||||||
import {
|
import { trainerConfigs } from "#app/data/trainers/trainer-config";
|
||||||
trainerConfigs,
|
import { trainerPartyTemplates } from "#app/data/trainers/TrainerPartyTemplate";
|
||||||
TrainerPartyCompoundTemplate,
|
import { TrainerPartyCompoundTemplate } from "#app/data/trainers/TrainerPartyTemplate";
|
||||||
TrainerPartyTemplate,
|
import { TrainerPartyTemplate } from "#app/data/trainers/TrainerPartyTemplate";
|
||||||
trainerPartyTemplates,
|
|
||||||
} from "#app/data/trainers/trainer-config";
|
|
||||||
import { ModifierTier } from "#app/modifier/modifier-tier";
|
import { ModifierTier } from "#app/modifier/modifier-tier";
|
||||||
import { modifierTypes } from "#app/modifier/modifier-type";
|
import { modifierTypes } from "#app/modifier/modifier-type";
|
||||||
import { MysteryEncounterType } from "#enums/mystery-encounter-type";
|
import { MysteryEncounterType } from "#enums/mystery-encounter-type";
|
||||||
|
@ -41,7 +41,8 @@ import { TrainerType } from "#enums/trainer-type";
|
|||||||
import PokemonData from "#app/system/pokemon-data";
|
import PokemonData from "#app/system/pokemon-data";
|
||||||
import { Nature } from "#enums/nature";
|
import { Nature } from "#enums/nature";
|
||||||
import type HeldModifierConfig from "#app/interfaces/held-modifier-config";
|
import type HeldModifierConfig from "#app/interfaces/held-modifier-config";
|
||||||
import { trainerConfigs, TrainerPartyTemplate } from "#app/data/trainers/trainer-config";
|
import { trainerConfigs } from "#app/data/trainers/trainer-config";
|
||||||
|
import { TrainerPartyTemplate } from "#app/data/trainers/TrainerPartyTemplate";
|
||||||
import { PartyMemberStrength } from "#enums/party-member-strength";
|
import { PartyMemberStrength } from "#enums/party-member-strength";
|
||||||
|
|
||||||
/** i18n namespace for encounter */
|
/** i18n namespace for encounter */
|
||||||
|
263
src/data/trainers/TrainerPartyTemplate.ts
Normal file
263
src/data/trainers/TrainerPartyTemplate.ts
Normal file
@ -0,0 +1,263 @@
|
|||||||
|
import { startingWave } from "#app/battle-scene";
|
||||||
|
import { globalScene } from "#app/global-scene";
|
||||||
|
import { PartyMemberStrength } from "#enums/party-member-strength";
|
||||||
|
|
||||||
|
export class TrainerPartyTemplate {
|
||||||
|
public size: number;
|
||||||
|
public strength: PartyMemberStrength;
|
||||||
|
public sameSpecies: boolean;
|
||||||
|
public balanced: boolean;
|
||||||
|
|
||||||
|
constructor(size: number, strength: PartyMemberStrength, sameSpecies?: boolean, balanced?: boolean) {
|
||||||
|
this.size = size;
|
||||||
|
this.strength = strength;
|
||||||
|
this.sameSpecies = !!sameSpecies;
|
||||||
|
this.balanced = !!balanced;
|
||||||
|
}
|
||||||
|
|
||||||
|
getStrength(_index: number): PartyMemberStrength {
|
||||||
|
return this.strength;
|
||||||
|
}
|
||||||
|
|
||||||
|
isSameSpecies(_index: number): boolean {
|
||||||
|
return this.sameSpecies;
|
||||||
|
}
|
||||||
|
|
||||||
|
isBalanced(_index: number): boolean {
|
||||||
|
return this.balanced;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export class TrainerPartyCompoundTemplate extends TrainerPartyTemplate {
|
||||||
|
public templates: TrainerPartyTemplate[];
|
||||||
|
|
||||||
|
constructor(...templates: TrainerPartyTemplate[]) {
|
||||||
|
super(
|
||||||
|
templates.reduce((total: number, template: TrainerPartyTemplate) => {
|
||||||
|
total += template.size;
|
||||||
|
return total;
|
||||||
|
}, 0),
|
||||||
|
PartyMemberStrength.AVERAGE,
|
||||||
|
);
|
||||||
|
this.templates = templates;
|
||||||
|
}
|
||||||
|
|
||||||
|
getStrength(index: number): PartyMemberStrength {
|
||||||
|
let t = 0;
|
||||||
|
for (const template of this.templates) {
|
||||||
|
if (t + template.size > index) {
|
||||||
|
return template.getStrength(index - t);
|
||||||
|
}
|
||||||
|
t += template.size;
|
||||||
|
}
|
||||||
|
|
||||||
|
return super.getStrength(index);
|
||||||
|
}
|
||||||
|
|
||||||
|
isSameSpecies(index: number): boolean {
|
||||||
|
let t = 0;
|
||||||
|
for (const template of this.templates) {
|
||||||
|
if (t + template.size > index) {
|
||||||
|
return template.isSameSpecies(index - t);
|
||||||
|
}
|
||||||
|
t += template.size;
|
||||||
|
}
|
||||||
|
|
||||||
|
return super.isSameSpecies(index);
|
||||||
|
}
|
||||||
|
|
||||||
|
isBalanced(index: number): boolean {
|
||||||
|
let t = 0;
|
||||||
|
for (const template of this.templates) {
|
||||||
|
if (t + template.size > index) {
|
||||||
|
return template.isBalanced(index - t);
|
||||||
|
}
|
||||||
|
t += template.size;
|
||||||
|
}
|
||||||
|
|
||||||
|
return super.isBalanced(index);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
export const trainerPartyTemplates = {
|
||||||
|
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.WEAK, true),
|
||||||
|
SIX_WEAK_BALANCED: new TrainerPartyTemplate(6, PartyMemberStrength.WEAK, false, true),
|
||||||
|
|
||||||
|
GYM_LEADER_1: new TrainerPartyCompoundTemplate(
|
||||||
|
new TrainerPartyTemplate(1, PartyMemberStrength.AVERAGE),
|
||||||
|
new TrainerPartyTemplate(1, PartyMemberStrength.STRONG),
|
||||||
|
),
|
||||||
|
GYM_LEADER_2: new TrainerPartyCompoundTemplate(
|
||||||
|
new TrainerPartyTemplate(1, PartyMemberStrength.AVERAGE),
|
||||||
|
new TrainerPartyTemplate(1, PartyMemberStrength.STRONG),
|
||||||
|
new TrainerPartyTemplate(1, PartyMemberStrength.STRONGER),
|
||||||
|
),
|
||||||
|
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),
|
||||||
|
),
|
||||||
|
GYM_LEADER_5: new TrainerPartyCompoundTemplate(
|
||||||
|
new TrainerPartyTemplate(3, PartyMemberStrength.AVERAGE),
|
||||||
|
new TrainerPartyTemplate(2, PartyMemberStrength.STRONG),
|
||||||
|
new TrainerPartyTemplate(1, PartyMemberStrength.STRONGER),
|
||||||
|
),
|
||||||
|
|
||||||
|
ELITE_FOUR: new TrainerPartyCompoundTemplate(
|
||||||
|
new TrainerPartyTemplate(2, PartyMemberStrength.AVERAGE),
|
||||||
|
new TrainerPartyTemplate(3, PartyMemberStrength.STRONG),
|
||||||
|
new TrainerPartyTemplate(1, PartyMemberStrength.STRONGER),
|
||||||
|
),
|
||||||
|
|
||||||
|
CHAMPION: new TrainerPartyCompoundTemplate(
|
||||||
|
new TrainerPartyTemplate(4, PartyMemberStrength.STRONG),
|
||||||
|
new TrainerPartyTemplate(2, PartyMemberStrength.STRONGER, false, true),
|
||||||
|
),
|
||||||
|
|
||||||
|
RIVAL: new TrainerPartyCompoundTemplate(
|
||||||
|
new TrainerPartyTemplate(1, PartyMemberStrength.STRONG),
|
||||||
|
new TrainerPartyTemplate(1, PartyMemberStrength.AVERAGE),
|
||||||
|
),
|
||||||
|
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),
|
||||||
|
),
|
||||||
|
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),
|
||||||
|
),
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* The function to get variable strength grunts
|
||||||
|
* @returns the correct TrainerPartyTemplate
|
||||||
|
*/
|
||||||
|
export function getEvilGruntPartyTemplate(): TrainerPartyTemplate {
|
||||||
|
const waveIndex = globalScene.currentBattle?.waveIndex;
|
||||||
|
if (waveIndex < 40) {
|
||||||
|
return trainerPartyTemplates.TWO_AVG;
|
||||||
|
}
|
||||||
|
if (waveIndex < 63) {
|
||||||
|
return trainerPartyTemplates.THREE_AVG;
|
||||||
|
}
|
||||||
|
if (waveIndex < 65) {
|
||||||
|
return trainerPartyTemplates.TWO_AVG_ONE_STRONG;
|
||||||
|
}
|
||||||
|
if (waveIndex < 112) {
|
||||||
|
return trainerPartyTemplates.GYM_LEADER_4; // 3avg 1 strong 1 stronger
|
||||||
|
}
|
||||||
|
return trainerPartyTemplates.GYM_LEADER_5; // 3 avg 2 strong 1 stronger
|
||||||
|
}
|
||||||
|
|
||||||
|
export function getWavePartyTemplate(...templates: TrainerPartyTemplate[]) {
|
||||||
|
return templates[
|
||||||
|
Math.min(
|
||||||
|
Math.max(
|
||||||
|
Math.ceil(
|
||||||
|
(globalScene.gameMode.getWaveForDifficulty(globalScene.currentBattle?.waveIndex || startingWave, true) - 20) /
|
||||||
|
30,
|
||||||
|
),
|
||||||
|
0,
|
||||||
|
),
|
||||||
|
templates.length - 1,
|
||||||
|
)
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
export function getGymLeaderPartyTemplate() {
|
||||||
|
return getWavePartyTemplate(
|
||||||
|
trainerPartyTemplates.GYM_LEADER_1,
|
||||||
|
trainerPartyTemplates.GYM_LEADER_2,
|
||||||
|
trainerPartyTemplates.GYM_LEADER_3,
|
||||||
|
trainerPartyTemplates.GYM_LEADER_4,
|
||||||
|
trainerPartyTemplates.GYM_LEADER_5,
|
||||||
|
);
|
||||||
|
}
|
@ -1,4 +1,3 @@
|
|||||||
import { startingWave } from "#app/battle-scene";
|
|
||||||
import { globalScene } from "#app/global-scene";
|
import { globalScene } from "#app/global-scene";
|
||||||
import { modifierTypes } from "#app/modifier/modifier-type";
|
import { modifierTypes } from "#app/modifier/modifier-type";
|
||||||
import { PokemonMove } from "#app/field/pokemon";
|
import { PokemonMove } from "#app/field/pokemon";
|
||||||
@ -12,6 +11,14 @@ import { getIsInitialized, initI18n } from "#app/plugins/i18n";
|
|||||||
import i18next from "i18next";
|
import i18next from "i18next";
|
||||||
import { Gender } from "#app/data/gender";
|
import { Gender } from "#app/data/gender";
|
||||||
import { signatureSpecies } from "../balance/signature-species";
|
import { signatureSpecies } from "../balance/signature-species";
|
||||||
|
import {
|
||||||
|
getEvilGruntPartyTemplate,
|
||||||
|
getGymLeaderPartyTemplate,
|
||||||
|
getWavePartyTemplate,
|
||||||
|
TrainerPartyCompoundTemplate,
|
||||||
|
TrainerPartyTemplate,
|
||||||
|
trainerPartyTemplates,
|
||||||
|
} from "./TrainerPartyTemplate";
|
||||||
|
|
||||||
// Enum imports
|
// Enum imports
|
||||||
import { PartyMemberStrength } from "#enums/party-member-strength";
|
import { PartyMemberStrength } from "#enums/party-member-strength";
|
||||||
@ -37,6 +44,7 @@ import type {
|
|||||||
PartyTemplateFunc,
|
PartyTemplateFunc,
|
||||||
TrainerTierPools,
|
TrainerTierPools,
|
||||||
TrainerConfigs,
|
TrainerConfigs,
|
||||||
|
PartyMemberFuncs,
|
||||||
} from "./typedefs";
|
} from "./typedefs";
|
||||||
|
|
||||||
/** Minimum BST for Pokemon generated onto the Elite Four's teams */
|
/** Minimum BST for Pokemon generated onto the Elite Four's teams */
|
||||||
@ -45,224 +53,6 @@ const ELITE_FOUR_MINIMUM_BST = 460;
|
|||||||
/** The wave at which (non-Paldean) Gym Leaders start having Tera mons*/
|
/** The wave at which (non-Paldean) Gym Leaders start having Tera mons*/
|
||||||
const GYM_LEADER_TERA_WAVE = 100;
|
const GYM_LEADER_TERA_WAVE = 100;
|
||||||
|
|
||||||
export class TrainerPartyTemplate {
|
|
||||||
public size: number;
|
|
||||||
public strength: PartyMemberStrength;
|
|
||||||
public sameSpecies: boolean;
|
|
||||||
public balanced: boolean;
|
|
||||||
|
|
||||||
constructor(size: number, strength: PartyMemberStrength, sameSpecies?: boolean, balanced?: boolean) {
|
|
||||||
this.size = size;
|
|
||||||
this.strength = strength;
|
|
||||||
this.sameSpecies = !!sameSpecies;
|
|
||||||
this.balanced = !!balanced;
|
|
||||||
}
|
|
||||||
|
|
||||||
getStrength(_index: number): PartyMemberStrength {
|
|
||||||
return this.strength;
|
|
||||||
}
|
|
||||||
|
|
||||||
isSameSpecies(_index: number): boolean {
|
|
||||||
return this.sameSpecies;
|
|
||||||
}
|
|
||||||
|
|
||||||
isBalanced(_index: number): boolean {
|
|
||||||
return this.balanced;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
export interface PartyMemberFuncs {
|
|
||||||
[key: number]: PartyMemberFunc;
|
|
||||||
}
|
|
||||||
|
|
||||||
export class TrainerPartyCompoundTemplate extends TrainerPartyTemplate {
|
|
||||||
public templates: TrainerPartyTemplate[];
|
|
||||||
|
|
||||||
constructor(...templates: TrainerPartyTemplate[]) {
|
|
||||||
super(
|
|
||||||
templates.reduce((total: number, template: TrainerPartyTemplate) => {
|
|
||||||
total += template.size;
|
|
||||||
return total;
|
|
||||||
}, 0),
|
|
||||||
PartyMemberStrength.AVERAGE,
|
|
||||||
);
|
|
||||||
this.templates = templates;
|
|
||||||
}
|
|
||||||
|
|
||||||
getStrength(index: number): PartyMemberStrength {
|
|
||||||
let t = 0;
|
|
||||||
for (const template of this.templates) {
|
|
||||||
if (t + template.size > index) {
|
|
||||||
return template.getStrength(index - t);
|
|
||||||
}
|
|
||||||
t += template.size;
|
|
||||||
}
|
|
||||||
|
|
||||||
return super.getStrength(index);
|
|
||||||
}
|
|
||||||
|
|
||||||
isSameSpecies(index: number): boolean {
|
|
||||||
let t = 0;
|
|
||||||
for (const template of this.templates) {
|
|
||||||
if (t + template.size > index) {
|
|
||||||
return template.isSameSpecies(index - t);
|
|
||||||
}
|
|
||||||
t += template.size;
|
|
||||||
}
|
|
||||||
|
|
||||||
return super.isSameSpecies(index);
|
|
||||||
}
|
|
||||||
|
|
||||||
isBalanced(index: number): boolean {
|
|
||||||
let t = 0;
|
|
||||||
for (const template of this.templates) {
|
|
||||||
if (t + template.size > index) {
|
|
||||||
return template.isBalanced(index - t);
|
|
||||||
}
|
|
||||||
t += template.size;
|
|
||||||
}
|
|
||||||
|
|
||||||
return super.isBalanced(index);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
export const trainerPartyTemplates = {
|
|
||||||
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.WEAK, true),
|
|
||||||
SIX_WEAK_BALANCED: new TrainerPartyTemplate(6, PartyMemberStrength.WEAK, false, true),
|
|
||||||
|
|
||||||
GYM_LEADER_1: new TrainerPartyCompoundTemplate(
|
|
||||||
new TrainerPartyTemplate(1, PartyMemberStrength.AVERAGE),
|
|
||||||
new TrainerPartyTemplate(1, PartyMemberStrength.STRONG),
|
|
||||||
),
|
|
||||||
GYM_LEADER_2: new TrainerPartyCompoundTemplate(
|
|
||||||
new TrainerPartyTemplate(1, PartyMemberStrength.AVERAGE),
|
|
||||||
new TrainerPartyTemplate(1, PartyMemberStrength.STRONG),
|
|
||||||
new TrainerPartyTemplate(1, PartyMemberStrength.STRONGER),
|
|
||||||
),
|
|
||||||
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),
|
|
||||||
),
|
|
||||||
GYM_LEADER_5: new TrainerPartyCompoundTemplate(
|
|
||||||
new TrainerPartyTemplate(3, PartyMemberStrength.AVERAGE),
|
|
||||||
new TrainerPartyTemplate(2, PartyMemberStrength.STRONG),
|
|
||||||
new TrainerPartyTemplate(1, PartyMemberStrength.STRONGER),
|
|
||||||
),
|
|
||||||
|
|
||||||
ELITE_FOUR: new TrainerPartyCompoundTemplate(
|
|
||||||
new TrainerPartyTemplate(2, PartyMemberStrength.AVERAGE),
|
|
||||||
new TrainerPartyTemplate(3, PartyMemberStrength.STRONG),
|
|
||||||
new TrainerPartyTemplate(1, PartyMemberStrength.STRONGER),
|
|
||||||
),
|
|
||||||
|
|
||||||
CHAMPION: new TrainerPartyCompoundTemplate(
|
|
||||||
new TrainerPartyTemplate(4, PartyMemberStrength.STRONG),
|
|
||||||
new TrainerPartyTemplate(2, PartyMemberStrength.STRONGER, false, true),
|
|
||||||
),
|
|
||||||
|
|
||||||
RIVAL: new TrainerPartyCompoundTemplate(
|
|
||||||
new TrainerPartyTemplate(1, PartyMemberStrength.STRONG),
|
|
||||||
new TrainerPartyTemplate(1, PartyMemberStrength.AVERAGE),
|
|
||||||
),
|
|
||||||
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),
|
|
||||||
),
|
|
||||||
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),
|
|
||||||
),
|
|
||||||
};
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Stores data and helper functions about a trainers AI options.
|
* Stores data and helper functions about a trainers AI options.
|
||||||
*/
|
*/
|
||||||
@ -1622,52 +1412,6 @@ export class TrainerConfig {
|
|||||||
|
|
||||||
let t = 0;
|
let t = 0;
|
||||||
|
|
||||||
/**
|
|
||||||
* The function to get variable strength grunts
|
|
||||||
* @returns the correct TrainerPartyTemplate
|
|
||||||
*/
|
|
||||||
function getEvilGruntPartyTemplate(): TrainerPartyTemplate {
|
|
||||||
const waveIndex = globalScene.currentBattle?.waveIndex;
|
|
||||||
if (waveIndex < 40) {
|
|
||||||
return trainerPartyTemplates.TWO_AVG;
|
|
||||||
}
|
|
||||||
if (waveIndex < 63) {
|
|
||||||
return trainerPartyTemplates.THREE_AVG;
|
|
||||||
}
|
|
||||||
if (waveIndex < 65) {
|
|
||||||
return trainerPartyTemplates.TWO_AVG_ONE_STRONG;
|
|
||||||
}
|
|
||||||
if (waveIndex < 112) {
|
|
||||||
return trainerPartyTemplates.GYM_LEADER_4; // 3avg 1 strong 1 stronger
|
|
||||||
}
|
|
||||||
return trainerPartyTemplates.GYM_LEADER_5; // 3 avg 2 strong 1 stronger
|
|
||||||
}
|
|
||||||
|
|
||||||
function getWavePartyTemplate(...templates: TrainerPartyTemplate[]) {
|
|
||||||
return templates[
|
|
||||||
Math.min(
|
|
||||||
Math.max(
|
|
||||||
Math.ceil(
|
|
||||||
(globalScene.gameMode.getWaveForDifficulty(globalScene.currentBattle?.waveIndex || startingWave, true) - 20) /
|
|
||||||
30,
|
|
||||||
),
|
|
||||||
0,
|
|
||||||
),
|
|
||||||
templates.length - 1,
|
|
||||||
)
|
|
||||||
];
|
|
||||||
}
|
|
||||||
|
|
||||||
function getGymLeaderPartyTemplate() {
|
|
||||||
return getWavePartyTemplate(
|
|
||||||
trainerPartyTemplates.GYM_LEADER_1,
|
|
||||||
trainerPartyTemplates.GYM_LEADER_2,
|
|
||||||
trainerPartyTemplates.GYM_LEADER_3,
|
|
||||||
trainerPartyTemplates.GYM_LEADER_4,
|
|
||||||
trainerPartyTemplates.GYM_LEADER_5,
|
|
||||||
);
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Randomly selects one of the `Species` from `speciesPool`, determines its evolution, level, and strength.
|
* Randomly selects one of the `Species` from `speciesPool`, determines its evolution, level, and strength.
|
||||||
* Then adds Pokemon to globalScene.
|
* Then adds Pokemon to globalScene.
|
||||||
|
@ -2,7 +2,8 @@ import type { EnemyPokemon } from "#app/field/pokemon";
|
|||||||
import type { PersistentModifier } from "#app/modifier/modifier";
|
import type { PersistentModifier } from "#app/modifier/modifier";
|
||||||
import type { PartyMemberStrength } from "#enums/party-member-strength";
|
import type { PartyMemberStrength } from "#enums/party-member-strength";
|
||||||
import type { Species } from "#enums/species";
|
import type { Species } from "#enums/species";
|
||||||
import type { TrainerPartyTemplate, TrainerConfig } from "./trainer-config";
|
import type { TrainerConfig } from "./trainer-config";
|
||||||
|
import type { TrainerPartyTemplate } from "./TrainerPartyTemplate";
|
||||||
|
|
||||||
export type PartyTemplateFunc = () => TrainerPartyTemplate;
|
export type PartyTemplateFunc = () => TrainerPartyTemplate;
|
||||||
export type PartyMemberFunc = (level: number, strength: PartyMemberStrength) => EnemyPokemon;
|
export type PartyMemberFunc = (level: number, strength: PartyMemberStrength) => EnemyPokemon;
|
||||||
@ -15,3 +16,7 @@ export interface TrainerTierPools {
|
|||||||
export interface TrainerConfigs {
|
export interface TrainerConfigs {
|
||||||
[key: number]: TrainerConfig;
|
[key: number]: TrainerConfig;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export interface PartyMemberFuncs {
|
||||||
|
[key: number]: PartyMemberFunc;
|
||||||
|
}
|
||||||
|
@ -2,8 +2,11 @@ import { globalScene } from "#app/global-scene";
|
|||||||
import { pokemonPrevolutions } from "#app/data/balance/pokemon-evolutions";
|
import { pokemonPrevolutions } from "#app/data/balance/pokemon-evolutions";
|
||||||
import type PokemonSpecies from "#app/data/pokemon-species";
|
import type PokemonSpecies from "#app/data/pokemon-species";
|
||||||
import { getPokemonSpecies } from "#app/data/pokemon-species";
|
import { getPokemonSpecies } from "#app/data/pokemon-species";
|
||||||
import type { TrainerConfig, TrainerPartyTemplate } from "#app/data/trainers/trainer-config";
|
import type { TrainerConfig } from "#app/data/trainers/trainer-config";
|
||||||
import { TrainerPartyCompoundTemplate, trainerConfigs, trainerPartyTemplates } from "#app/data/trainers/trainer-config";
|
import type { TrainerPartyTemplate } from "#app/data/trainers/TrainerPartyTemplate";
|
||||||
|
import { trainerConfigs } from "#app/data/trainers/trainer-config";
|
||||||
|
import { trainerPartyTemplates } from "#app/data/trainers/TrainerPartyTemplate";
|
||||||
|
import { TrainerPartyCompoundTemplate } from "#app/data/trainers/TrainerPartyTemplate";
|
||||||
import { TrainerSlot } from "#enums/trainer-slot";
|
import { TrainerSlot } from "#enums/trainer-slot";
|
||||||
import { TrainerPoolTier } from "#enums/trainer-pool-tier";
|
import { TrainerPoolTier } from "#enums/trainer-pool-tier";
|
||||||
import { TeraAIMode } from "#enums/tera-ai-mode";
|
import { TeraAIMode } from "#enums/tera-ai-mode";
|
||||||
|
@ -16,7 +16,9 @@ import { MysteryEncounterTier } from "#enums/mystery-encounter-tier";
|
|||||||
import { initSceneWithoutEncounterPhase } from "#test/testUtils/gameManagerUtils";
|
import { initSceneWithoutEncounterPhase } from "#test/testUtils/gameManagerUtils";
|
||||||
import { ModifierTier } from "#app/modifier/modifier-tier";
|
import { ModifierTier } from "#app/modifier/modifier-tier";
|
||||||
import { MysteriousChallengersEncounter } from "#app/data/mystery-encounters/encounters/mysterious-challengers-encounter";
|
import { MysteriousChallengersEncounter } from "#app/data/mystery-encounters/encounters/mysterious-challengers-encounter";
|
||||||
import { TrainerConfig, TrainerPartyCompoundTemplate, TrainerPartyTemplate } from "#app/data/trainers/trainer-config";
|
import { TrainerConfig } from "#app/data/trainers/trainer-config";
|
||||||
|
import { TrainerPartyCompoundTemplate } from "#app/data/trainers/TrainerPartyTemplate";
|
||||||
|
import { TrainerPartyTemplate } from "#app/data/trainers/TrainerPartyTemplate";
|
||||||
import { PartyMemberStrength } from "#enums/party-member-strength";
|
import { PartyMemberStrength } from "#enums/party-member-strength";
|
||||||
import { MysteryEncounterMode } from "#enums/mystery-encounter-mode";
|
import { MysteryEncounterMode } from "#enums/mystery-encounter-mode";
|
||||||
import ModifierSelectUiHandler from "#app/ui/modifier-select-ui-handler";
|
import ModifierSelectUiHandler from "#app/ui/modifier-select-ui-handler";
|
||||||
|
Loading…
Reference in New Issue
Block a user