diff --git a/src/battle-scene.ts b/src/battle-scene.ts index 2c6c1a418..ffe5a5a88 100644 --- a/src/battle-scene.ts +++ b/src/battle-scene.ts @@ -1090,20 +1090,23 @@ export default class BattleScene extends Phaser.Scene { resolve(false); return; } - const newStackCount = matchingModifier.stackCount + (transferStack ? itemModifier.stackCount : 1); - if (newStackCount > maxStackCount) { - itemModifier.stackCount = newStackCount - maxStackCount; - newItemModifier.stackCount = maxStackCount; - removeOld = !itemModifier.stackCount; - } - } else if (!transferStack) + const countTaken = transferStack ? Math.min(itemModifier.stackCount, maxStackCount - matchingModifier.stackCount) : 1; + itemModifier.stackCount -= countTaken; + newItemModifier.stackCount = matchingModifier.stackCount + countTaken; + removeOld = !itemModifier.stackCount; + } else if (!transferStack) { + newItemModifier.stackCount = 1; removeOld = !(--itemModifier.stackCount); + } if (!removeOld || this.removeModifier(itemModifier, !source.isPlayer())) { const addModifier = () => { - if (target.isPlayer()) - this.addModifier(newItemModifier, playSound).then(() => resolve(true)); - else - this.addEnemyModifier(newItemModifier).then(() => resolve(true)); + if (!matchingModifier || this.removeModifier(matchingModifier, !target.isPlayer())) { + if (target.isPlayer()) + this.addModifier(newItemModifier, playSound).then(() => resolve(true)); + else + this.addEnemyModifier(newItemModifier).then(() => resolve(true)); + } else + resolve(false); }; if (source.isPlayer() !== target.isPlayer()) this.updateModifiers(source.isPlayer()).then(() => addModifier()); diff --git a/src/modifier/modifier.ts b/src/modifier/modifier.ts index 3f21898be..21f9accd6 100644 --- a/src/modifier/modifier.ts +++ b/src/modifier/modifier.ts @@ -14,6 +14,7 @@ import * as Utils from "../utils"; import { TempBattleStat } from '../data/temp-battle-stat'; import { BerryType, getBerryEffectFunc, getBerryPredicate } from '../data/berry'; import { Species } from '../data/species'; +import { BattleType } from '../battle'; type ModifierType = ModifierTypes.ModifierType; export type ModifierPredicate = (modifier: Modifier) => boolean; @@ -339,7 +340,7 @@ export abstract class PokemonHeldItemModifier extends PersistentModifier { isIconVisible(scene: BattleScene): boolean { const pokemon = this.getPokemon(scene); - return pokemon instanceof PlayerPokemon || this.getPokemon(scene).isOnField(); + return pokemon instanceof PlayerPokemon || (scene.currentBattle.battleType === BattleType.WILD || this.getPokemon(scene).isOnField()); } getIcon(scene: BattleScene, forSummary?: boolean): Phaser.GameObjects.Container {