diff --git a/src/battle-scene.ts b/src/battle-scene.ts index ee740b70965..f0a544aa6d7 100644 --- a/src/battle-scene.ts +++ b/src/battle-scene.ts @@ -2799,6 +2799,23 @@ export class BattleScene extends SceneBase { return this.removeModifier(itemModifier); } + /** + * Attempt to discard one or more copies of a held item. + * @param itemModifier - The {@linkcode PokemonHeldItemModifier} being discarded + * @param discardQuantity - The number of copies to remove (up to the amount currently held); default `1` + * @returns Whether the item was successfully discarded. + * Removing fewer items than requested is still considered a success. + */ + tryDiscardHeldItemModifier(itemModifier: PokemonHeldItemModifier, discardQuantity = 1): boolean { + const countTaken = Math.min(discardQuantity, itemModifier.stackCount); + itemModifier.stackCount -= countTaken; + + if (itemModifier.stackCount > 0) { + return true; + } + + return this.removeModifier(itemModifier); + } canTransferHeldItemModifier(itemModifier: PokemonHeldItemModifier, target: Pokemon, transferQuantity = 1): boolean { const mod = itemModifier.clone() as PokemonHeldItemModifier; diff --git a/src/ui/party-ui-handler.ts b/src/ui/party-ui-handler.ts index 70aed5d0519..20096719198 100644 --- a/src/ui/party-ui-handler.ts +++ b/src/ui/party-ui-handler.ts @@ -780,6 +780,10 @@ export class PartyUiHandler extends MessageUiHandler { return this.processDiscardMenuInput(pokemon); } + if (this.partyUiMode === PartyUiMode.DISCARD) { + return this.processDiscardMenuInput(pokemon); + } + // options specific to the mode (moves) if (this.partyUiMode === PartyUiMode.REMEMBER_MOVE_REWARD) { return this.processRememberMoveModeInput(pokemon);