Fixed various errors, moved some files for trainer items

This commit is contained in:
Wlowscha 2025-09-06 18:43:01 +02:00
parent ebaccae77c
commit 22a74f765e
No known key found for this signature in database
GPG Key ID: 3C8F1AD330565D04
27 changed files with 107 additions and 98 deletions

View File

@ -64,6 +64,7 @@ import { ShopCursorTarget } from "#enums/shop-cursor-target";
import { SpeciesId } from "#enums/species-id";
import { StatusEffect } from "#enums/status-effect";
import { TextStyle } from "#enums/text-style";
import { TrainerItemEffect } from "#enums/trainer-item-effect";
import { TrainerItemId } from "#enums/trainer-item-id";
import type { TrainerSlot } from "#enums/trainer-slot";
import { TrainerType } from "#enums/trainer-type";
@ -77,11 +78,11 @@ import { EnemyPokemon, PlayerPokemon } from "#field/pokemon";
import { PokemonSpriteSparkleHandler } from "#field/pokemon-sprite-sparkle-handler";
import { Trainer } from "#field/trainer";
import { applyHeldItems } from "#items/all-held-items";
import { type ApplyTrainerItemsParams, applyTrainerItems } from "#items/apply-trainer-items";
import { applyTrainerItems } from "#items/all-trainer-items";
import type { HeldItemConfiguration } from "#items/held-item-data-types";
import { assignEnemyHeldItemsForWave, assignItemsFromConfiguration } from "#items/held-item-pool";
import type { MatchExact, Reward } from "#items/reward";
import { type EnemyAttackStatusEffectChanceTrainerItem, TrainerItemEffect } from "#items/trainer-item";
import type { EnemyAttackStatusEffectChanceTrainerItem } from "#items/trainer-item";
import {
isTrainerItemPool,
isTrainerItemSpecs,
@ -89,6 +90,7 @@ import {
type TrainerItemSaveData,
} from "#items/trainer-item-data-types";
import { TrainerItemManager } from "#items/trainer-item-manager";
import type { TrainerItemEffectParamMap } from "#items/trainer-item-parameter";
import { getNewTrainerItemFromPool } from "#items/trainer-item-pool";
import { MysteryEncounter } from "#mystery-encounters/mystery-encounter";
import { MysteryEncounterSaveData } from "#mystery-encounters/mystery-encounter-save-data";
@ -2608,7 +2610,7 @@ export class BattleScene extends SceneBase {
return Math.floor(moneyValue / 10) * 10;
}
applyPlayerItems<T extends TrainerItemEffect>(effect: T, params: ApplyTrainerItemsParams[T]) {
applyPlayerItems<T extends TrainerItemEffect>(effect: T, params: TrainerItemEffectParamMap[T]) {
applyTrainerItems(effect, this.trainerItems, params);
}

View File

@ -12,12 +12,12 @@ import type { MysteryEncounterType } from "#enums/mystery-encounter-type";
import type { PokeballType } from "#enums/pokeball";
import { SpeciesFormKey } from "#enums/species-form-key";
import { SpeciesId } from "#enums/species-id";
import { TrainerItemEffect } from "#enums/trainer-item-effect";
import { TrainerType } from "#enums/trainer-type";
import { TrainerVariant } from "#enums/trainer-variant";
import type { EnemyPokemon, PlayerPokemon, Pokemon } from "#field/pokemon";
import { Trainer } from "#field/trainer";
import type { CustomRewardSettings } from "#items/reward-pool-utils";
import { TrainerItemEffect } from "#items/trainer-item";
import type { MysteryEncounter } from "#mystery-encounters/mystery-encounter";
import i18next from "#plugins/i18n";
import { MusicPreference } from "#system/settings";

View File

@ -159,7 +159,7 @@ export class SpeciesEvolutionCondition {
case EvoCondKey.SPECIES_CAUGHT:
return i18next.t("pokemonEvolutions:caught", {species: getPokemonSpecies(cond.speciesCaught).name});
case EvoCondKey.HELD_ITEM:
return i18next.t(`pokemonEvolutions:heldItem.${toCamelCase(cond.itemKey)}`);
return i18next.t(`pokemonEvolutions:heldItem.${toCamelCase(allHeldItems[cond.itemKey].name)}`);
}
}).filter(s => !isNullOrUndefined(s)); // Filter out stringless conditions
return this.desc;

View File

@ -71,7 +71,6 @@ import type { EnemyPokemon, Pokemon } from "#field/pokemon";
import { applyHeldItems } from "#items/all-held-items";
import { BerryHeldItem, berryTypeToHeldItem } from "#items/berry";
import { HeldItemEffect } from "#enums/held-item-effect";
import { TrainerItemEffect } from "#items/trainer-item";
import { applyMoveAttrs } from "#moves/apply-attrs";
import { invalidAssistMoves, invalidCopycatMoves, invalidMetronomeMoves, invalidMirrorMoveMoves, invalidSketchMoves, invalidSleepTalkMoves } from "#moves/invalid-moves";
import { frenzyMissFunc, getMoveTargets } from "#moves/move-utils";
@ -90,6 +89,7 @@ import { toCamelCase, toTitleCase } from "#utils/strings";
import i18next from "i18next";
import { applyChallenges } from "#utils/challenge-utils";
import type { AbstractConstructor } from "#types/type-helpers";
import { TrainerItemEffect } from "#enums/trainer-item-effect";
/**
* A function used to conditionally determine execution of a given {@linkcode MoveAttr}.

View File

@ -15,6 +15,7 @@ import type { PokeballType } from "#enums/pokeball";
import { RewardPoolType } from "#enums/reward-pool-type";
import { RarityTier } from "#enums/reward-tier";
import { SpeciesId } from "#enums/species-id";
import { TrainerItemEffect } from "#enums/trainer-item-effect";
import { TrainerSlot } from "#enums/trainer-slot";
import { TrainerType } from "#enums/trainer-type";
import { doShinySparkleAnim } from "#field/anims";
@ -24,7 +25,6 @@ import { getHeldItemTier } from "#items/held-item-default-tiers";
import type { RewardOption } from "#items/reward";
import { generatePlayerRewardOptions, generateRewardPoolWeights, getRewardPoolForType } from "#items/reward-pool-utils";
import { isTmReward } from "#items/reward-utils";
import { TrainerItemEffect } from "#items/trainer-item";
import { PokemonMove } from "#moves/pokemon-move";
import { getEncounterText, showEncounterText } from "#mystery-encounters/encounter-dialogue-utils";
import {

View File

@ -8,10 +8,10 @@ import { MysteryEncounterTier } from "#enums/mystery-encounter-tier";
import { MysteryEncounterType } from "#enums/mystery-encounter-type";
import { PlayerGender } from "#enums/player-gender";
import { PokeballType } from "#enums/pokeball";
import { TrainerItemEffect } from "#enums/trainer-item-effect";
import { TrainerItemId } from "#enums/trainer-item-id";
import { TrainerSlot } from "#enums/trainer-slot";
import type { EnemyPokemon } from "#field/pokemon";
import { TrainerItemEffect } from "#items/trainer-item";
import { getEncounterText, showEncounterText } from "#mystery-encounters/encounter-dialogue-utils";
import {
initSubsequentOptionSelect,

View File

@ -16,10 +16,10 @@ import { RewardId } from "#enums/reward-id";
import { RarityTier } from "#enums/reward-tier";
import { SpeciesId } from "#enums/species-id";
import { StatusEffect } from "#enums/status-effect";
import { TrainerItemEffect } from "#enums/trainer-item-effect";
import { TrainerType } from "#enums/trainer-type";
import type { PlayerPokemon, Pokemon } from "#field/pokemon";
import type { HeldItemConfiguration } from "#items/held-item-data-types";
import { TrainerItemEffect } from "#items/trainer-item";
import { PokemonMove } from "#moves/pokemon-move";
import { showEncounterText } from "#mystery-encounters/encounter-dialogue-utils";
import type { EnemyPartyConfig, EnemyPokemonConfig } from "#mystery-encounters/encounter-phase-utils";

View File

@ -1,6 +1,6 @@
import { globalScene } from "#app/global-scene";
import { PokeballType } from "#enums/pokeball";
import { TrainerItemEffect } from "#items/trainer-item";
import { TrainerItemEffect } from "#enums/trainer-item-effect";
import { NumberHolder } from "#utils/common";
import i18next from "i18next";

View File

@ -0,0 +1,28 @@
export const TrainerItemEffect = {
LEVEL_INCREMENT_BOOSTER: 1,
PRESERVE_BERRY: 2,
HEALING_BOOSTER: 3,
EXP_BOOSTER: 4,
MONEY_MULTIPLIER: 5,
HIDDEN_ABILITY_CHANCE_BOOSTER: 6,
SHINY_RATE_BOOSTER: 7,
CRITICAL_CATCH_CHANCE_BOOSTER: 8,
EXTRA_REWARD: 9,
HEAL_SHOP_COST: 10,
DOUBLE_BATTLE_CHANCE_BOOSTER: 11,
TEMP_STAT_STAGE_BOOSTER: 12,
TEMP_ACCURACY_BOOSTER: 13,
TEMP_CRIT_BOOSTER: 14,
ENEMY_DAMAGE_BOOSTER: 15,
ENEMY_DAMAGE_REDUCER: 16,
ENEMY_HEAL: 17,
ENEMY_ATTACK_STATUS_CHANCE: 18,
ENEMY_STATUS_HEAL_CHANCE: 19,
ENEMY_ENDURE_CHANCE: 20,
ENEMY_FUSED_CHANCE: 21,
} as const;
export type TrainerItemEffect = (typeof TrainerItemEffect)[keyof typeof TrainerItemEffect];

View File

@ -106,6 +106,7 @@ import {
} from "#enums/stat";
import { StatusEffect } from "#enums/status-effect";
import { SwitchType } from "#enums/switch-type";
import { TrainerItemEffect } from "#enums/trainer-item-effect";
import type { TrainerSlot } from "#enums/trainer-slot";
import { UiMode } from "#enums/ui-mode";
import { WeatherType } from "#enums/weather-type";
@ -114,7 +115,6 @@ import { applyHeldItems } from "#items/all-held-items";
import type { HeldItemConfiguration } from "#items/held-item-data-types";
import { HeldItemManager } from "#items/held-item-manager";
import { assignItemsFromConfiguration } from "#items/held-item-pool";
import { TrainerItemEffect } from "#items/trainer-item";
import { applyMoveAttrs } from "#moves/apply-attrs";
import type { Move } from "#moves/move";
import { getMoveTargets } from "#moves/move-utils";

View File

@ -1,6 +1,7 @@
import { allTrainerItems } from "#data/data-lists";
import { Stat, type TempBattleStat } from "#enums/stat";
import { StatusEffect } from "#enums/status-effect";
import type { TrainerItemEffect } from "#enums/trainer-item-effect";
import { TrainerItemId } from "#enums/trainer-item-id";
import {
CriticalCatchChanceBoosterTrainerItem,
@ -27,6 +28,8 @@ import {
TrainerItem,
tempStatToTrainerItem,
} from "#items/trainer-item";
import type { TrainerItemManager } from "./trainer-item-manager";
import type { TrainerItemEffectParamMap } from "./trainer-item-parameter";
export function initTrainerItems() {
allTrainerItems[TrainerItemId.MAP] = new TrainerItem(TrainerItemId.MAP, 1);
@ -112,3 +115,17 @@ export function initTrainerItems() {
10,
);
}
export function applyTrainerItems<T extends TrainerItemEffect>(
effect: T,
manager: TrainerItemManager,
params: TrainerItemEffectParamMap[T],
) {
if (manager) {
for (const item of Object.keys(manager.trainerItems)) {
if (allTrainerItems[item].effects.includes(effect)) {
allTrainerItems[item].apply(manager, params);
}
}
}
}

View File

@ -174,5 +174,6 @@ export abstract class ConsumableHeldItem<T extends EffectTuple> extends HeldItem
}
/** Abstract class for all items that are purely cosmetic.
* Currently coincides with the {@linkcode HeldItemBase} class. */
* Currently coincides with the {@linkcode HeldItemBase} class.
* Might become concrete later on if we want cosmetic items without a subclass. */
export abstract class CosmeticHeldItem extends HeldItemBase {}

View File

@ -3,10 +3,10 @@ import { getBerryEffectDescription, getBerryEffectFunc, getBerryName, getBerryPr
import { BerryType } from "#enums/berry-type";
import { HeldItemEffect } from "#enums/held-item-effect";
import { HeldItemId } from "#enums/held-item-id";
import { TrainerItemEffect } from "#enums/trainer-item-effect";
import { BerryUsedEvent } from "#events/battle-scene";
import { ConsumableHeldItem } from "#items/held-item";
import type { BerryParams } from "#items/held-item-parameter";
import { TrainerItemEffect } from "#items/trainer-item";
import type { ObjectValues } from "#types/type-helpers";
import { BooleanHolder } from "#utils/common";

View File

@ -1,8 +1,8 @@
import { globalScene } from "#app/global-scene";
import { HeldItemEffect } from "#enums/held-item-effect";
import { TrainerItemEffect } from "#enums/trainer-item-effect";
import { HeldItem } from "#items/held-item";
import type { DamageMoneyRewardParams } from "#items/held-item-parameter";
import { TrainerItemEffect } from "#items/trainer-item";
import { NumberHolder } from "#utils/common";
export class DamageMoneyRewardHeldItem extends HeldItem<[typeof HeldItemEffect.DAMAGE_MONEY_REWARD]> {

View File

@ -25,6 +25,7 @@ import { SpeciesFormKey } from "#enums/species-form-key";
import { SpeciesId } from "#enums/species-id";
import type { PermanentStat, TempBattleStat } from "#enums/stat";
import { Stat, TEMP_BATTLE_STATS } from "#enums/stat";
import { TrainerItemEffect } from "#enums/trainer-item-effect";
import { TrainerItemId } from "#enums/trainer-item-id";
import type { PlayerPokemon, Pokemon } from "#field/pokemon";
import { attackTypeToHeldItem } from "#items/attack-type-booster";
@ -32,7 +33,7 @@ import { permanentStatToHeldItem, statBoostItems } from "#items/base-stat-booste
import { berryTypeToHeldItem } from "#items/berry";
import { getNewAttackTypeBoosterHeldItem, getNewBerryHeldItem, getNewVitaminHeldItem } from "#items/held-item-pool";
import type { SpeciesStatBoosterItemId, SpeciesStatBoostHeldItem } from "#items/stat-booster";
import { TrainerItemEffect, tempStatToTrainerItem } from "#items/trainer-item";
import { tempStatToTrainerItem } from "#items/trainer-item";
import type { PokemonMove } from "#moves/pokemon-move";
import { getVoucherTypeIcon, getVoucherTypeName, type VoucherType } from "#system/voucher";
import type { Exact } from "#types/type-helpers";

View File

@ -1,14 +1,25 @@
import { allTrainerItems } from "#data/data-lists";
import {
type BooleanHolderParams,
type NumberHolderParams,
type PokemonParams,
type PreserveBerryParams,
TrainerItemEffect,
} from "#items/trainer-item";
import type { TrainerItemManager } from "#items/trainer-item-manager";
import { TrainerItemEffect } from "#enums/trainer-item-effect";
import type { Pokemon } from "#field/pokemon";
import type { BooleanHolder, NumberHolder } from "#utils/common";
export type ApplyTrainerItemsParams = {
export interface NumberHolderParams {
numberHolder: NumberHolder;
}
export interface BooleanHolderParams {
booleanHolder: BooleanHolder;
}
export interface PokemonParams {
pokemon: Pokemon;
}
export interface PreserveBerryParams {
pokemon: Pokemon;
doPreserve: BooleanHolder;
}
export type TrainerItemEffectParamMap = {
[TrainerItemEffect.LEVEL_INCREMENT_BOOSTER]: NumberHolderParams;
[TrainerItemEffect.PRESERVE_BERRY]: PreserveBerryParams;
[TrainerItemEffect.HEALING_BOOSTER]: NumberHolderParams;
@ -31,17 +42,3 @@ export type ApplyTrainerItemsParams = {
[TrainerItemEffect.ENEMY_ENDURE_CHANCE]: PokemonParams;
[TrainerItemEffect.ENEMY_FUSED_CHANCE]: BooleanHolderParams;
};
export function applyTrainerItems<T extends TrainerItemEffect>(
effect: T,
manager: TrainerItemManager,
params: ApplyTrainerItemsParams[T],
) {
if (manager) {
for (const item of Object.keys(manager.trainerItems)) {
if (allTrainerItems[item].effects.includes(effect)) {
allTrainerItems[item].apply(manager, params);
}
}
}
}

View File

@ -5,53 +5,18 @@ import { BattlerTagType } from "#enums/battler-tag-type";
import { getStatKey, Stat, type TempBattleStat } from "#enums/stat";
import { StatusEffect } from "#enums/status-effect";
import { TextStyle } from "#enums/text-style";
import { TrainerItemEffect } from "#enums/trainer-item-effect";
import { TrainerItemId, TrainerItemNames } from "#enums/trainer-item-id";
import type { Pokemon } from "#field/pokemon";
import type { TrainerItemManager } from "#items/trainer-item-manager";
import { addTextObject } from "#ui/text";
import { type BooleanHolder, hslToHex, type NumberHolder, randSeedFloat, toDmgValue } from "#utils/common";
import { hslToHex, randSeedFloat, toDmgValue } from "#utils/common";
import i18next from "i18next";
export const TrainerItemEffect = {
LEVEL_INCREMENT_BOOSTER: 1,
PRESERVE_BERRY: 2,
HEALING_BOOSTER: 3,
EXP_BOOSTER: 4,
MONEY_MULTIPLIER: 5,
HIDDEN_ABILITY_CHANCE_BOOSTER: 6,
SHINY_RATE_BOOSTER: 7,
CRITICAL_CATCH_CHANCE_BOOSTER: 8,
EXTRA_REWARD: 9,
HEAL_SHOP_COST: 10,
DOUBLE_BATTLE_CHANCE_BOOSTER: 11,
TEMP_STAT_STAGE_BOOSTER: 12,
TEMP_ACCURACY_BOOSTER: 13,
TEMP_CRIT_BOOSTER: 14,
ENEMY_DAMAGE_BOOSTER: 15,
ENEMY_DAMAGE_REDUCER: 16,
ENEMY_HEAL: 17,
ENEMY_ATTACK_STATUS_CHANCE: 18,
ENEMY_STATUS_HEAL_CHANCE: 19,
ENEMY_ENDURE_CHANCE: 20,
ENEMY_FUSED_CHANCE: 21,
} as const;
export type TrainerItemEffect = (typeof TrainerItemEffect)[keyof typeof TrainerItemEffect];
export interface NumberHolderParams {
numberHolder: NumberHolder;
}
export interface BooleanHolderParams {
booleanHolder: BooleanHolder;
}
export interface PokemonParams {
pokemon: Pokemon;
}
import type {
BooleanHolderParams,
NumberHolderParams,
PokemonParams,
PreserveBerryParams,
} from "./trainer-item-parameter";
export class TrainerItem {
// public pokemonId: number;
@ -130,11 +95,6 @@ export class LevelIncrementBoosterTrainerItem extends TrainerItem {
}
// Berry Pouch
export interface PreserveBerryParams {
pokemon: Pokemon;
doPreserve: BooleanHolder;
}
export class PreserveBerryTrainerItem extends TrainerItem {
public effects: TrainerItemEffect[] = [TrainerItemEffect.PRESERVE_BERRY];
@ -491,7 +451,7 @@ export class EnemyAttackStatusEffectChanceTrainerItem extends TrainerItem {
const chance = this.getChance();
if (randSeedFloat() <= chance * stack) {
return enemyPokemon.trySetStatus(this.effect, true);
return enemyPokemon.trySetStatus(this.effect);
}
return false;

View File

@ -35,7 +35,10 @@ export class BerryPhase extends FieldPhase {
*/
eatBerries(pokemon: Pokemon): void {
const hasUsableBerry = pokemon.getHeldItems().some(m => {
return isItemInCategory(m, HeldItemCategoryId.BERRY) && (allHeldItems[m] as BerryHeldItem).shouldApply(pokemon);
return (
isItemInCategory(m, HeldItemCategoryId.BERRY) &&
(allHeldItems[m] as BerryHeldItem).shouldApply(HeldItemEffect.BERRY, { pokemon: pokemon })
);
});
if (!hasUsableBerry) {

View File

@ -1,6 +1,6 @@
import { globalScene } from "#app/global-scene";
import { getPokemonNameWithAffix } from "#app/messages";
import { TrainerItemEffect } from "#items/trainer-item";
import { TrainerItemEffect } from "#enums/trainer-item-effect";
import { PlayerPartyMemberPokemonPhase } from "#phases/player-party-member-pokemon-phase";
import { NumberHolder } from "#utils/common";
import i18next from "i18next";

View File

@ -1,6 +1,6 @@
import { globalScene } from "#app/global-scene";
import { ArenaTagType } from "#enums/arena-tag-type";
import { TrainerItemEffect } from "#items/trainer-item";
import { TrainerItemEffect } from "#enums/trainer-item-effect";
import { BattlePhase } from "#phases/battle-phase";
import { NumberHolder } from "#utils/common";
import i18next from "i18next";

View File

@ -22,9 +22,9 @@ import { MoveResult } from "#enums/move-result";
import { MoveTarget } from "#enums/move-target";
import { isReflected, MoveUseMode } from "#enums/move-use-mode";
import { PokemonType } from "#enums/pokemon-type";
import { TrainerItemEffect } from "#enums/trainer-item-effect";
import type { Pokemon } from "#field/pokemon";
import { applyHeldItems } from "#items/all-held-items";
import { TrainerItemEffect } from "#items/trainer-item";
import { applyFilteredMoveAttrs, applyMoveAttrs } from "#moves/apply-attrs";
import type { Move, MoveAttr } from "#moves/move";
import { getMoveTargets, isFieldTargeted } from "#moves/move-utils";

View File

@ -7,7 +7,7 @@ import { BattlerTagType } from "#enums/battler-tag-type";
import { HitResult } from "#enums/hit-result";
import { CommonAnim } from "#enums/move-anims-common";
import { StatusEffect } from "#enums/status-effect";
import { TrainerItemEffect } from "#items/trainer-item";
import { TrainerItemEffect } from "#enums/trainer-item-effect";
import { CommonAnimPhase } from "#phases/common-anim-phase";
import { HealAchv } from "#system/achv";
import { NumberHolder } from "#utils/common";

View File

@ -3,6 +3,7 @@ import Overrides from "#app/overrides";
import type { MoveId } from "#enums/move-id";
import { RewardPoolType } from "#enums/reward-pool-type";
import type { RarityTier } from "#enums/reward-tier";
import { TrainerItemEffect } from "#enums/trainer-item-effect";
import { UiMode } from "#enums/ui-mode";
import type {
PokemonMoveRecallRewardParams,
@ -19,7 +20,6 @@ import {
getRewardPoolForType,
} from "#items/reward-pool-utils";
import { getPlayerShopRewardOptionsForWave, isMoveReward, isRememberMoveReward, isTmReward } from "#items/reward-utils";
import { TrainerItemEffect } from "#items/trainer-item";
import { BattlePhase } from "#phases/battle-phase";
import { PartyOption, PartyUiHandler, PartyUiMode, type PokemonMoveSelectFilter } from "#ui/party-ui-handler";
import { type RewardSelectUiHandler, SHOP_OPTIONS_ROW_LIMIT } from "#ui/reward-select-ui-handler";

View File

@ -1,7 +1,7 @@
import { globalScene } from "#app/global-scene";
import { ExpGainsSpeed } from "#enums/exp-gains-speed";
import { ExpNotification } from "#enums/exp-notification";
import { TrainerItemEffect } from "#items/trainer-item";
import { TrainerItemEffect } from "#enums/trainer-item-effect";
import { PlayerPartyMemberPokemonPhase } from "#phases/player-party-member-pokemon-phase";
import { NumberHolder } from "#utils/common";

View File

@ -233,7 +233,7 @@ export class StatStageChangePhase extends PokemonPhase {
);
if (!existingPhase?.is("StatStageChangePhase")) {
// Apply White Herb if needed
applyHeldItems(HeldItemEffect.RESET_NEGATIVE_STAT_STAGE, { pokemon: pokemon, isPlayer: this.player });
applyHeldItems(HeldItemEffect.RESET_NEGATIVE_STAT_STAGE, { pokemon: pokemon });
}
pokemon.updateInfo();

View File

@ -4,11 +4,11 @@ import { getPokemonNameWithAffix } from "#app/messages";
import { TerrainType } from "#data/terrain";
import { BattlerTagLapseType } from "#enums/battler-tag-lapse-type";
import { HeldItemEffect } from "#enums/held-item-effect";
import { TrainerItemEffect } from "#enums/trainer-item-effect";
import { WeatherType } from "#enums/weather-type";
import { TurnEndEvent } from "#events/battle-scene";
import type { Pokemon } from "#field/pokemon";
import { applyHeldItems } from "#items/all-held-items";
import { TrainerItemEffect } from "#items/trainer-item";
import { FieldPhase } from "#phases/field-phase";
import i18next from "i18next";

View File

@ -7,11 +7,11 @@ import { Button } from "#enums/buttons";
import type { PokeballType } from "#enums/pokeball";
import { ShopCursorTarget } from "#enums/shop-cursor-target";
import { TextStyle } from "#enums/text-style";
import { TrainerItemEffect } from "#enums/trainer-item-effect";
import { TrainerItemId } from "#enums/trainer-item-id";
import { UiMode } from "#enums/ui-mode";
import type { RewardOption } from "#items/reward";
import { getPlayerShopRewardOptionsForWave, isTmReward } from "#items/reward-utils";
import { TrainerItemEffect } from "#items/trainer-item";
import { AwaitableUiHandler } from "#ui/awaitable-ui-handler";
import { MoveInfoOverlay } from "#ui/move-info-overlay";
import { addTextObject, getRarityTierTextTint, getTextColor, getTextStyleOptions } from "#ui/text";