Fixed init-modifier-pools.ts

This commit is contained in:
Wlowscha 2025-06-17 23:36:51 +02:00
parent f2a339fbe5
commit 7523f6d9c0
No known key found for this signature in database
GPG Key ID: 3C8F1AD330565D04

View File

@ -1,14 +1,12 @@
import type Pokemon from "#app/field/pokemon"; import type Pokemon from "#app/field/pokemon";
import { enemyBuffModifierPool, modifierPool } from "#app/modifier/modifier-pools"; import { enemyBuffModifierPool, modifierPool } from "#app/modifier/modifier-pools";
import { globalScene } from "#app/global-scene"; import { globalScene } from "#app/global-scene";
import { DoubleBattleChanceBoosterModifier, SpeciesCritBoosterModifier, TurnStatusEffectModifier } from "./modifier"; import { DoubleBattleChanceBoosterModifier } from "./modifier";
import { WeightedModifierType } from "./modifier-type"; import { WeightedModifierType } from "./modifier-type";
import { ModifierTier } from "../enums/modifier-tier"; import { ModifierTier } from "../enums/modifier-tier";
import type { WeightedModifierTypeWeightFunc } from "#app/@types/modifier-types"; import type { WeightedModifierTypeWeightFunc } from "#app/@types/modifier-types";
import { modifierTypes } from "#app/data/data-lists"; import { modifierTypes } from "#app/data/data-lists";
import { PokeballType } from "#enums/pokeball"; import { PokeballType } from "#enums/pokeball";
import { BerryModifier } from "./modifier";
import { BerryType } from "#enums/berry-type";
import { SpeciesId } from "#enums/species-id"; import { SpeciesId } from "#enums/species-id";
import { timedEventManager } from "#app/global-event-manager"; import { timedEventManager } from "#app/global-event-manager";
import { pokemonEvolutions } from "#app/data/balance/pokemon-evolutions"; import { pokemonEvolutions } from "#app/data/balance/pokemon-evolutions";
@ -20,6 +18,8 @@ import { AbilityId } from "#enums/ability-id";
import { MAX_PER_TYPE_POKEBALLS } from "#app/data/pokeball"; import { MAX_PER_TYPE_POKEBALLS } from "#app/data/pokeball";
// biome-ignore lint/correctness/noUnusedImports: This is used in a tsdoc comment // biome-ignore lint/correctness/noUnusedImports: This is used in a tsdoc comment
import type { initModifierTypes } from "./modifier-type"; import type { initModifierTypes } from "./modifier-type";
import { HeldItemId } from "#enums/held-item-id";
import { allHeldItems } from "#app/items/all-held-items";
/** /**
* Initialize the common modifier pool * Initialize the common modifier pool
@ -57,7 +57,7 @@ function initCommonModifierPool() {
party.filter( party.filter(
p => p =>
p.hp && p.hp &&
!p.getHeldItems().some(m => m instanceof BerryModifier && m.berryType === BerryType.LEPPA) && !p.heldItemManager.hasItem(HeldItemId.LEPPA_BERRY) &&
p p
.getMoveset() .getMoveset()
.filter(m => m.ppUsed && m.getMovePp() - m.ppUsed <= 5 && m.ppUsed > Math.floor(m.getMovePp() / 2)) .filter(m => m.ppUsed && m.getMovePp() - m.ppUsed <= 5 && m.ppUsed > Math.floor(m.getMovePp() / 2))
@ -76,7 +76,7 @@ function initCommonModifierPool() {
party.filter( party.filter(
p => p =>
p.hp && p.hp &&
!p.getHeldItems().some(m => m instanceof BerryModifier && m.berryType === BerryType.LEPPA) && !p.heldItemManager.hasItem(HeldItemId.LEPPA_BERRY) &&
p p
.getMoveset() .getMoveset()
.filter(m => m.ppUsed && m.getMovePp() - m.ppUsed <= 5 && m.ppUsed > Math.floor(m.getMovePp() / 2)) .filter(m => m.ppUsed && m.getMovePp() - m.ppUsed <= 5 && m.ppUsed > Math.floor(m.getMovePp() / 2))
@ -113,12 +113,10 @@ function initGreatModifierPool() {
p => p =>
p.hp && p.hp &&
!!p.status && !!p.status &&
!p.getHeldItems().some(i => { !p
if (i instanceof TurnStatusEffectModifier) { .getHeldItems()
return (i as TurnStatusEffectModifier).getStatusEffect() === p.status?.effect; .filter(i => i in [HeldItemId.TOXIC_ORB, HeldItemId.FLAME_ORB])
} .some(i => allHeldItems[i].effect === p.status?.effect),
return false;
}),
).length, ).length,
3, 3,
); );
@ -179,12 +177,10 @@ function initGreatModifierPool() {
p => p =>
p.hp && p.hp &&
!!p.status && !!p.status &&
!p.getHeldItems().some(i => { !p
if (i instanceof TurnStatusEffectModifier) { .getHeldItems()
return (i as TurnStatusEffectModifier).getStatusEffect() === p.status?.effect; .filter(i => i in [HeldItemId.TOXIC_ORB, HeldItemId.FLAME_ORB])
} .some(i => allHeldItems[i].effect === p.status?.effect),
return false;
}),
).length, ).length,
3, 3,
); );
@ -204,7 +200,7 @@ function initGreatModifierPool() {
party.filter( party.filter(
p => p =>
p.hp && p.hp &&
!p.getHeldItems().some(m => m instanceof BerryModifier && m.berryType === BerryType.LEPPA) && !p.heldItemManager.hasItem(HeldItemId.LEPPA_BERRY) &&
p p
.getMoveset() .getMoveset()
.filter(m => m.ppUsed && m.getMovePp() - m.ppUsed <= 5 && m.ppUsed > Math.floor(m.getMovePp() / 2)) .filter(m => m.ppUsed && m.getMovePp() - m.ppUsed <= 5 && m.ppUsed > Math.floor(m.getMovePp() / 2))
@ -223,7 +219,7 @@ function initGreatModifierPool() {
party.filter( party.filter(
p => p =>
p.hp && p.hp &&
!p.getHeldItems().some(m => m instanceof BerryModifier && m.berryType === BerryType.LEPPA) && !p.heldItemManager.hasItem(HeldItemId.LEPPA_BERRY) &&
p p
.getMoveset() .getMoveset()
.filter(m => m.ppUsed && m.getMovePp() - m.ppUsed <= 5 && m.ppUsed > Math.floor(m.getMovePp() / 2)) .filter(m => m.ppUsed && m.getMovePp() - m.ppUsed <= 5 && m.ppUsed > Math.floor(m.getMovePp() / 2))
@ -333,7 +329,7 @@ function initUltraModifierPool() {
(p.isFusion() && p.getFusionSpeciesForm(true).speciesId in pokemonEvolutions)) (p.isFusion() && p.getFusionSpeciesForm(true).speciesId in pokemonEvolutions))
) { ) {
// Check if Pokemon is already holding an Eviolite // Check if Pokemon is already holding an Eviolite
return !p.getHeldItems().some(i => i.type.id === "EVIOLITE"); return !p.heldItemManager.hasItem(HeldItemId.EVIOLITE);
} }
return false; return false;
}) })
@ -350,7 +346,7 @@ function initUltraModifierPool() {
// If a party member doesn't already have a Leek and is one of the relevant species, Leek can appear // If a party member doesn't already have a Leek and is one of the relevant species, Leek can appear
return party.some( return party.some(
p => p =>
!p.getHeldItems().some(i => i instanceof SpeciesCritBoosterModifier) && !p.heldItemManager.hasItem(HeldItemId.LEEK) &&
(checkedSpecies.includes(p.getSpeciesForm(true).speciesId) || (checkedSpecies.includes(p.getSpeciesForm(true).speciesId) ||
(p.isFusion() && checkedSpecies.includes(p.getFusionSpeciesForm(true).speciesId))), (p.isFusion() && checkedSpecies.includes(p.getFusionSpeciesForm(true).speciesId))),
) )
@ -363,7 +359,7 @@ function initUltraModifierPool() {
modifierTypes.TOXIC_ORB, modifierTypes.TOXIC_ORB,
(party: Pokemon[]) => { (party: Pokemon[]) => {
return party.some(p => { return party.some(p => {
const isHoldingOrb = p.getHeldItems().some(i => i.type.id === "FLAME_ORB" || i.type.id === "TOXIC_ORB"); const isHoldingOrb = p.getHeldItems().some(i => i in [HeldItemId.FLAME_ORB, HeldItemId.TOXIC_ORB]);
if (!isHoldingOrb) { if (!isHoldingOrb) {
const moveset = p const moveset = p
@ -409,7 +405,7 @@ function initUltraModifierPool() {
modifierTypes.FLAME_ORB, modifierTypes.FLAME_ORB,
(party: Pokemon[]) => { (party: Pokemon[]) => {
return party.some(p => { return party.some(p => {
const isHoldingOrb = p.getHeldItems().some(i => i.type.id === "FLAME_ORB" || i.type.id === "TOXIC_ORB"); const isHoldingOrb = p.getHeldItems().some(i => i in [HeldItemId.FLAME_ORB, HeldItemId.TOXIC_ORB]);
if (!isHoldingOrb) { if (!isHoldingOrb) {
const moveset = p const moveset = p
@ -455,13 +451,8 @@ function initUltraModifierPool() {
modifierTypes.MYSTICAL_ROCK, modifierTypes.MYSTICAL_ROCK,
(party: Pokemon[]) => { (party: Pokemon[]) => {
return party.some(p => { return party.some(p => {
let isHoldingMax = false; const stack = p.heldItemManager.getStack(HeldItemId.MYSTICAL_ROCK);
for (const i of p.getHeldItems()) { const isHoldingMax = stack === allHeldItems[HeldItemId.MYSTICAL_ROCK].maxStackCount;
if (i.type.id === "MYSTICAL_ROCK") {
isHoldingMax = i.getStackCount() === i.getMaxStackCount();
break;
}
}
if (!isHoldingMax) { if (!isHoldingMax) {
const moveset = p.getMoveset(true).map(m => m.moveId); const moveset = p.getMoveset(true).map(m => m.moveId);
@ -675,8 +666,6 @@ export function initModifierPools() {
initMasterModifierPool(); initMasterModifierPool();
// Modifier pools for specific scenarios // Modifier pools for specific scenarios
initWildModifierPool();
initTrainerModifierPool();
initEnemyBuffModifierPool(); initEnemyBuffModifierPool();
} }