From b8324e85f76b106f5b6ca7bf238f944e0f7c4d17 Mon Sep 17 00:00:00 2001 From: Wlowscha <54003515+Wlowscha@users.noreply.github.com> Date: Sun, 13 Jul 2025 13:20:42 +0200 Subject: [PATCH] Moved getPartyBerries() utility function --- .../encounters/absolute-avarice-encounter.ts | 2 +- .../encounters/uncommon-breed-encounter.ts | 2 +- .../utils/encounter-phase-utils.ts | 31 ++----------------- src/items/item-utility.ts | 31 ++++++++++++++++++- .../berries-abound-encounter.test.ts | 6 ++-- 5 files changed, 38 insertions(+), 34 deletions(-) diff --git a/src/data/mystery-encounters/encounters/absolute-avarice-encounter.ts b/src/data/mystery-encounters/encounters/absolute-avarice-encounter.ts index 0c304927b28..8a5b0821033 100644 --- a/src/data/mystery-encounters/encounters/absolute-avarice-encounter.ts +++ b/src/data/mystery-encounters/encounters/absolute-avarice-encounter.ts @@ -16,11 +16,11 @@ import type { MysteryEncounterSpriteConfig } from "#field/mystery-encounter-intr import type { Pokemon } from "#field/pokemon"; import { EnemyPokemon } from "#field/pokemon"; import type { HeldItemConfiguration, PokemonItemMap } from "#items/held-item-data-types"; +import { getPartyBerries } from "#items/item-utility"; import { PokemonMove } from "#moves/pokemon-move"; import { queueEncounterMessage } from "#mystery-encounters/encounter-dialogue-utils"; import type { EnemyPartyConfig } from "#mystery-encounters/encounter-phase-utils"; import { - getPartyBerries, initBattleWithEnemyConfig, leaveEncounterWithoutBattle, setEncounterRewards, diff --git a/src/data/mystery-encounters/encounters/uncommon-breed-encounter.ts b/src/data/mystery-encounters/encounters/uncommon-breed-encounter.ts index bcbbb860623..18e5f604f44 100644 --- a/src/data/mystery-encounters/encounters/uncommon-breed-encounter.ts +++ b/src/data/mystery-encounters/encounters/uncommon-breed-encounter.ts @@ -12,11 +12,11 @@ import { PokeballType } from "#enums/pokeball"; import { Stat } from "#enums/stat"; import type { EnemyPokemon, Pokemon } from "#field/pokemon"; import type { PokemonItemMap } from "#items/held-item-data-types"; +import { getPartyBerries } from "#items/item-utility"; import { PokemonMove } from "#moves/pokemon-move"; import { queueEncounterMessage } from "#mystery-encounters/encounter-dialogue-utils"; import type { EnemyPartyConfig } from "#mystery-encounters/encounter-phase-utils"; import { - getPartyBerries, getRandomEncounterSpecies, initBattleWithEnemyConfig, leaveEncounterWithoutBattle, diff --git a/src/data/mystery-encounters/utils/encounter-phase-utils.ts b/src/data/mystery-encounters/utils/encounter-phase-utils.ts index 74b81d3df1b..d08dcbf9582 100644 --- a/src/data/mystery-encounters/utils/encounter-phase-utils.ts +++ b/src/data/mystery-encounters/utils/encounter-phase-utils.ts @@ -5,7 +5,7 @@ import { globalScene } from "#app/global-scene"; import { getPokemonNameWithAffix } from "#app/messages"; import { BiomePoolTier, biomeLinks } from "#balance/biomes"; import { initMoveAnim, loadMoveAnimAssets } from "#data/battle-anims"; -import { allHeldItems, modifierTypes } from "#data/data-lists"; +import { modifierTypes } from "#data/data-lists"; import type { IEggOptions } from "#data/egg"; import { Egg } from "#data/egg"; import type { Gender } from "#data/gender"; @@ -17,7 +17,6 @@ import type { AiType } from "#enums/ai-type"; import type { BattlerTagType } from "#enums/battler-tag-type"; import { BiomeId } from "#enums/biome-id"; import { FieldPosition } from "#enums/field-position"; -import { HeldItemCategoryId, type HeldItemId, isItemInCategory } from "#enums/held-item-id"; import { ModifierPoolType } from "#enums/modifier-pool-type"; import type { MoveId } from "#enums/move-id"; import { MysteryEncounterMode } from "#enums/mystery-encounter-mode"; @@ -31,7 +30,7 @@ import { UiMode } from "#enums/ui-mode"; import type { PlayerPokemon, Pokemon } from "#field/pokemon"; import { EnemyPokemon } from "#field/pokemon"; import { Trainer } from "#field/trainer"; -import type { HeldItemConfiguration, PokemonItemMap } from "#items/held-item-data-types"; +import type { HeldItemConfiguration } from "#items/held-item-data-types"; import type { CustomModifierSettings, ModifierType } from "#modifiers/modifier-type"; import { getPartyLuckValue, ModifierTypeGenerator, ModifierTypeOption } from "#modifiers/modifier-type"; import { PokemonMove } from "#moves/pokemon-move"; @@ -1294,29 +1293,3 @@ export function calculateRareSpawnAggregateStats(luckValue: number) { console.log(stats); } - -// Iterate over the party until an item is successfully given -export function assignItemToFirstFreePokemon(item: HeldItemId, party: Pokemon[]): void { - for (const pokemon of party) { - const stack = pokemon.heldItemManager.getStack(item); - if (stack < allHeldItems[item].getMaxStackCount()) { - pokemon.heldItemManager.add(item); - return; - } - } -} - -// Creates an item map of berries to pokemon, storing each berry separately (splitting up stacks) -export function getPartyBerries(): PokemonItemMap[] { - const pokemonItems: PokemonItemMap[] = []; - globalScene.getPlayerParty().forEach(pokemon => { - const berries = pokemon.getHeldItems().filter(item => isItemInCategory(item, HeldItemCategoryId.BERRY)); - berries.forEach(berryId => { - const berryStack = pokemon.heldItemManager.getStack(berryId); - for (let i = 1; i <= berryStack; i++) { - pokemonItems.push({ item: { id: berryId, stack: 1 }, pokemonId: pokemon.id }); - } - }); - }); - return pokemonItems; -} diff --git a/src/items/item-utility.ts b/src/items/item-utility.ts index 91788f90d1e..89e6b6c3233 100644 --- a/src/items/item-utility.ts +++ b/src/items/item-utility.ts @@ -1,8 +1,11 @@ +import { globalScene } from "#app/global-scene"; import { allHeldItems, allTrainerItems } from "#data/data-lists"; import { FormChangeItem } from "#enums/form-change-item"; -import type { HeldItemId } from "#enums/held-item-id"; +import { HeldItemCategoryId, type HeldItemId, isItemInCategory } from "#enums/held-item-id"; import type { TrainerItemId } from "#enums/trainer-item-id"; +import type { Pokemon } from "#field/pokemon"; import i18next from "i18next"; +import type { PokemonItemMap } from "./held-item-data-types"; export function formChangeItemName(id: FormChangeItem) { return i18next.t(`modifierType:FormChangeItem.${FormChangeItem[id]}`); @@ -43,3 +46,29 @@ export const formChangeItemSortFunc = (a: FormChangeItem, b: FormChangeItem): nu } return itemIdMatch; }; + +// Iterate over the party until an item is successfully given +export function assignItemToFirstFreePokemon(item: HeldItemId, party: Pokemon[]): void { + for (const pokemon of party) { + const stack = pokemon.heldItemManager.getStack(item); + if (stack < allHeldItems[item].getMaxStackCount()) { + pokemon.heldItemManager.add(item); + return; + } + } +} + +// Creates an item map of berries to pokemon, storing each berry separately (splitting up stacks) +export function getPartyBerries(): PokemonItemMap[] { + const pokemonItems: PokemonItemMap[] = []; + globalScene.getPlayerParty().forEach(pokemon => { + const berries = pokemon.getHeldItems().filter(item => isItemInCategory(item, HeldItemCategoryId.BERRY)); + berries.forEach(berryId => { + const berryStack = pokemon.heldItemManager.getStack(berryId); + for (let i = 1; i <= berryStack; i++) { + pokemonItems.push({ item: { id: berryId, stack: 1 }, pokemonId: pokemon.id }); + } + }); + }); + return pokemonItems; +} diff --git a/test/mystery-encounter/encounters/berries-abound-encounter.test.ts b/test/mystery-encounter/encounters/berries-abound-encounter.test.ts index 7af08dcd883..0c9064b3955 100644 --- a/test/mystery-encounter/encounters/berries-abound-encounter.test.ts +++ b/test/mystery-encounter/encounters/berries-abound-encounter.test.ts @@ -6,6 +6,8 @@ import { MysteryEncounterTier } from "#enums/mystery-encounter-tier"; import { MysteryEncounterType } from "#enums/mystery-encounter-type"; import { SpeciesId } from "#enums/species-id"; import { UiMode } from "#enums/ui-mode"; +import type { HeldItemSpecs } from "#items/held-item-data-types"; +import { getPartyBerries } from "#items/item-utility"; import { BerriesAboundEncounter } from "#mystery-encounters/berries-abound-encounter"; import * as EncounterDialogueUtils from "#mystery-encounters/encounter-dialogue-utils"; import * as EncounterPhaseUtils from "#mystery-encounters/encounter-phase-utils"; @@ -133,8 +135,8 @@ describe("Berries Abound - Mystery Encounter", () => { await game.phaseInterceptor.to(SelectRewardPhase, false); expect(scene.phaseManager.getCurrentPhase()?.constructor.name).toBe(SelectRewardPhase.name); - const berriesAfter = scene.findModifiers(m => m instanceof BerryModifier) as BerryModifier[]; - const berriesAfterCount = berriesAfter.reduce((a, b) => a + b.stackCount, 0); + const berriesAfter = getPartyBerries(); + const berriesAfterCount = berriesAfter.reduce((a, b) => a + (b.item as HeldItemSpecs).stack, 0); expect(numBerries).toBe(berriesAfterCount); });