diff --git a/src/field/pokemon.ts b/src/field/pokemon.ts index eb08af3da55..baa00e98f92 100644 --- a/src/field/pokemon.ts +++ b/src/field/pokemon.ts @@ -465,6 +465,10 @@ export default abstract class Pokemon extends Phaser.GameObjects.Container { return this.scene.findModifiers(m => m instanceof PokemonHeldItemModifier && (m as PokemonHeldItemModifier).pokemonId === this.id, this.isPlayer()) as PokemonHeldItemModifier[]; } + getTransferrableHeldItems(): PokemonHeldItemModifier[] { + return this.getHeldItems().filter(m => m.getTransferrable(true)); + } + updateScale(): void { this.setScale(this.getSpriteScale()); } diff --git a/src/phases.ts b/src/phases.ts index e2755328c69..37c6f450755 100644 --- a/src/phases.ts +++ b/src/phases.ts @@ -4455,8 +4455,7 @@ export class SelectModifierPhase extends BattlePhase { this.scene.ui.setModeWithoutClear(Mode.PARTY, PartyUiMode.MODIFIER_TRANSFER, -1, (fromSlotIndex: integer, itemIndex: integer, toSlotIndex: integer) => { if (toSlotIndex !== undefined && fromSlotIndex < 6 && toSlotIndex < 6 && fromSlotIndex !== toSlotIndex && itemIndex > -1) { this.scene.ui.setMode(Mode.MODIFIER_SELECT, this.isPlayer(), typeOptions, modifierSelectCallback, this.getRerollCost(typeOptions, this.scene.lockModifierTiers)).then(() => { - const itemModifiers = this.scene.findModifiers(m => m instanceof PokemonHeldItemModifier - && (m as PokemonHeldItemModifier).getTransferrable(true) && (m as PokemonHeldItemModifier).pokemonId === party[fromSlotIndex].id) as PokemonHeldItemModifier[]; + const itemModifiers = party[fromSlotIndex].getTransferrableHeldItems(); const itemModifier = itemModifiers[itemIndex]; this.scene.tryTransferHeldItemModifier(itemModifier, party[toSlotIndex], true, true); }); diff --git a/src/ui/party-ui-handler.ts b/src/ui/party-ui-handler.ts index 8b497655a17..a5121859c13 100644 --- a/src/ui/party-ui-handler.ts +++ b/src/ui/party-ui-handler.ts @@ -246,8 +246,7 @@ export default class PartyUiHandler extends MessageUiHandler { filterResult = this.moveSelectFilter(pokemon.moveset[this.optionsCursor]); } else { const transferPokemon = this.scene.getParty()[this.transferCursor]; - const itemModifiers = this.scene.findModifiers(m => m instanceof PokemonHeldItemModifier - && (m as PokemonHeldItemModifier).getTransferrable(true) && (m as PokemonHeldItemModifier).pokemonId === transferPokemon.id) as PokemonHeldItemModifier[]; + const itemModifiers = transferPokemon.getTransferrableHeldItems(); filterResult = (this.selectFilter as PokemonModifierTransferSelectFilter)(pokemon, itemModifiers[this.transferOptionCursor]); } if (filterResult === null) { @@ -548,8 +547,7 @@ export default class PartyUiHandler extends MessageUiHandler { : null; const itemModifiers = this.partyUiMode === PartyUiMode.MODIFIER_TRANSFER - ? this.scene.findModifiers(m => m instanceof PokemonHeldItemModifier - && (m as PokemonHeldItemModifier).getTransferrable(true) && (m as PokemonHeldItemModifier).pokemonId === pokemon.id) as PokemonHeldItemModifier[] + ? pokemon.getTransferrableHeldItems() : null; if (this.options.length) { @@ -732,15 +730,24 @@ export default class PartyUiHandler extends MessageUiHandler { this.clearPartySlots(); this.scene.removePartyMemberModifiers(slotIndex); const releasedPokemon = this.scene.getParty().splice(slotIndex, 1)[0]; + const releasedItems = releasedPokemon.getTransferrableHeldItems(); + releasedPokemon.destroy(); this.populatePartySlots(); + if (this.cursor >= this.scene.getParty().length) this.setCursor(this.cursor - 1); if (this.partyUiMode === PartyUiMode.RELEASE) { const selectCallback = this.selectCallback; this.selectCallback = null; selectCallback(this.cursor, PartyOption.RELEASE); + if (releasedItems && releasedItems.length > 0) { + const newPokemon = this.scene.getParty()[this.scene.getParty().length - 1]; + releasedItems.forEach(i => this.scene.tryTransferHeldItemModifier(i, newPokemon, true, false)); + this.showText("Items were transferred beep boop"); + } } + this.showText(null, 0); }, null, true); }